GStreamer RTSP流转UDPSink推送后消费报错问题求助
问题根因定位
你当前的报错核心是推流和消费端的流格式不匹配:推流链路中加入了rtph264depay元件,该元件会将RTSP源输出的标准RTP封包拆解为裸H264 NAL单元,最终通过udpsink发出的是裸H264流而非RTP流,但消费端是按照RTP格式对流进行解析,自然会触发无效RTP payload、NAL单元类型识别错误的报错。
修复方案
提供两种可落地的调整方案,按需选择即可:
方案1:保留RTP封装传输(更推荐,适配跨网传输场景,自带传输校验逻辑)
- 调整推送命令,删除
rtph264depay和rndbuffersize元件,RTSP源输出的RTP包直接推送至udp端口:
gst-launch-1.0 rtspsrc location=rtsp://192.168.10.20:554 ! application/x-rtp,encoding-name=H264,payload=96 ! udpsink host=127.0.0.1 port=8123
- 消费命令无需调整,使用你原有命令即可正常解析。
方案2:直接传输裸H264流
- 推送命令保持你原有配置即可,已经完成RTP拆包输出裸H264流
- 调整消费命令,删除RTP格式解析相关配置,直接对接H264解析元件:
gst-launch-1.0 udpsrc port=8123 ! h264parse ! avdec_h264 ! autovideosink
额外注意事项
- 你报错中提到的NAL单元类型27属于SEI补充增强信息单元,不需要解码播放的话可以在h264parse后加过滤规则剔除,也可以检查前端RTSP摄像头的编码配置,关闭不必要的SEI信息输出
- 跨网传输时可以给udpsink和udpsrc加上
async=false sync=false参数,避免网络抖动导致的播放卡顿
内容的提问来源于stack exchange,提问作者RiccardoB
相关产品推荐
相关产品推荐

