srs报错如下:
[31m[2021-10-23 17:43:55.682][Error][31374][5ns94367][4] serve error
code=3001 : service cycle : rtmp: stream service : rtmp: receive
thread : handle publish message : rtmp: consume message : rtmp:
consume video : meta update video : demux SPS/PPS : avc decode
sequence header
这个错误的意思是srs在接收码流时获取不到sps和pps的信息。
之后选择断开与推流端的连接,这时候推流端如果继续推流的话,av_interleaved_write_frame(…)就会报-32,打印日志为:
broken pipe
需要设置一下编码器参数:
if(octx->oformat->flags & AVFMT_GLOBALHEADER) { printf("set video GLOBAL_HEADER\n"); enc_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; } octx代表输出上下文
解释一下pps和sps,码流中的两个字节区,它们对解码至关重要,如果找不到他们,那么解码就会
失败,因为它们存储的是编码器设置的参数,比如视频的heigth,width等,音频的采样率,通道数等。
解释一下上面代码段的意思,它会去检测输出上下文的封装格式,来确定是否设置AV_CODEC_FLAG_GLOBAL_HEADER。
那么AV_CODEC_FLAG_GLOBAL_HEADER这个标志的作用是,由原来编码时在每个关键帧前加入pps和sps,改变为在extradate这个字节区加入pps和sps。那么这样的话,在解码时,就得从extradate读取pps和sps,然后放入每个关键帧前面。
设置编码器可以去参考:
https://blog.csdn.net/weixin_43466192/article/details/120804610