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

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爱好者

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

、、、、南山小雨、、、、

分享对你有帮助,打赏一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值