zl程序教程

您现在的位置是:首页 >  其它

当前栏目

srs报错:demux SPS/PPS : avc decode sequence header

报错 sequence header decode SRS
2023-09-14 09:12:44 时间

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

ffmpeg是音视频必备,但即使从业数年,它似乎依然有无穷的秘密,感兴趣添加笔者微信:YQW1163720468,加入ffmpeg微信群讨论。但记得备注:ffmpeg爱好者