WebCodecs编码H264经GStreamer推SRT失败求助
解决SRT推流失败问题
以下是针对你遇到的SRT推流报错问题的具体排查和修复步骤:
1. 调整GStreamer管道元素顺序
你的原始管道在h264parse之前就强制设置了H264 caps,这会导致解析器无法正确识别流属性。修改管道顺序,先解析再应用caps:
gst-launch-1.0 -v udpsrc port=5555 ! h264parse ! video/x-h264, profile=baseline, framerate=30/1 ! mpegtsmux ! queue ! srtsink uri="srt://REDACTED:10000"
- 先通过
h264parse处理原始H264流,提取NALU和时间戳信息 - 明确指定帧率参数,帮助
mpegtsmux生成符合标准的TS包
2. 验证SRT连接可用性
先排除网络和服务器端问题:
- 在云服务器上运行SRT测试接收端:
srt-live-transmit srt://:10000 file:///dev/null - 用本地测试流推送到云服务器:
gst-launch-1.0 videotestsrc ! x264enc profile=baseline ! h264parse ! mpegtsmux ! srtsink uri="srt://REDACTED:10000"
如果测试流能正常推送,说明问题出在WebCodecs→UDP的流数据上;如果仍报错,检查云服务器防火墙是否开放10000端口(SRT基于UDP)。
3. 修复流时间戳缺失问题
WebCodecs输出的流可能缺少PTS/DTS时间戳,导致mpegtsmux生成无效TS包。添加identity元素注入系统时钟时间戳:
gst-launch-1.0 -v udpsrc port=5555 ! identity sync=true ! h264parse ! video/x-h264, profile=baseline, framerate=30/1 ! mpegtsmux ! queue ! srtsink uri="srt://REDACTED:10000"
4. 启用GStreamer调试日志定位问题
添加调试日志获取更详细的错误信息:
GST_DEBUG=3 gst-launch-1.0 -v udpsrc port=5555 ! h264parse ! video/x-h264, profile=baseline, framerate=30/1 ! mpegtsmux ! queue ! srtsink uri="srt://REDACTED:10000"
日志会显示libsrt报错的具体原因,比如数据格式错误或连接超时。
5. 备选方案:改用RTP封装推送
如果TS封装仍有问题,尝试用RTP封装直接推送(需接收端对应处理RTP流):
gst-launch-1.0 -v udpsrc port=5555 ! h264parse ! video/x-h264, profile=baseline, framerate=30/1 ! rtph264pay config-interval=1 ! queue ! srtsink uri="srt://REDACTED:10000"
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

