TSINGSEE青犀视频开发rtmp流推到Nginx rtmp模块报error appenging SPS/PPS NALs错误解析

本文分析了在使用Nginx接收RTMP流时遇到的SPS/PPSNALs添加错误问题。通过日志发现,设备在推流过程中重复发送SPS和PPS,导致Nginx解析失败。提出了两种解决方案:一是修改Nginx解析函数;二是更新设备端,确保SPS和PPS仅发送一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家知道TSINGSEE青犀视频云-边-端产品中不仅有EasyNVR视频边缘上云网关、EasyCVR视频融合共享平台等视频流媒体平台,还有很多视频服务的组件,比如EasyRTMP、EasyRTMPLive等推流组件。因此我们除了在研发更新视频平台外,也会不断进行组件的功能开发,不断实现安防视频全线产品的功能全覆盖。

Tsingsee.png

近期我们的研发团队在研发设备RTMP推流的时候,将rtmp流推到Nginx rtmp模块出现*2 hls: error appenging SPS/PPS NALs, client: 192.168.99.251, server: 0.0.0.0:10085 的报错,导致Nginx接收的rtmp流无法播放。

41.png

对此我们分析了log日志,从log显示看,Nginx在接收到推流端数据后,添加SPS PPS出现问题。通过log查询,此log出现在ngx_rtmp_hls_video中。

42.png

在获取IDR帧后,添加SPS和PPS信息。通过对RTMP协议的了解,我们知道在RTMP传输音视频的时候,传输IDR之前会先传输SPS和PPS。

再次通过抓包发现,设备发送了两次SPS和PPS。在AVCPacketType =0的时候发送了SPS以及PPS。这里发送SPS以及PPS都是正常的。但是此设备在接下的AVCPacketType = 1的时候也分两次发送了SPS以及PPS。

43.png

44.png

Nginx中ngx_rtmp_codec_av对于接收的RTMP数据进行解析,并且更新SPS,正常SPS只会发送一次,但是此设备发送了两次SPS和PPS。ngx_rtmp_codec_parse_avc_header_in_keyframe 函数中对于SPS以及PPS的解析要求必须是SPS与PPS是在一个数据包中同时发送的,否则会出现解析错误,从而出现添加SPS错误的log。

所以我们这里有两种解决方法,1、可以在此函数中添加判断,如果不包含SPS以及PPS则返回,不再进行赋值。2、设备端更新推流,在推流的时候只在AVCPacketType = 0的时候发送SPS和PPS。

这两种方法大家都可以自己尝试一下,同时我们也欢迎大家积极与我们沟通和交流技术上的问题,欢迎大家给我私信或者在博文下留言。如果大家还想了解更多视频相关的解决方案,也可以联系我们获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值