GStreamer使用rtspclientsink推送MJPEG流到rtsp-simple-server问题求助
GStreamer使用rtspclientsink推送MJPEG流到rtsp-simple-server解决方案
错误原因说明
- 第一个命令链路失败的核心原因是rtspclientsink仅支持RTP封装的裸流作为输入,你使用
matroskamux输出的是MKV容器格式流,和rtspclientsink要求的输入格式不兼容,直接导致链路协商失败。 - 第二个命令使用
rtpjpegpay做RTP封装的思路是正确的,问题出在缺少显式的RTP流格式声明,rtspclientsink无法自动识别流的编码属性,导致链路协商失败。
可直接运行的推流命令
gst-launch-1.0 souphttpsrc location="http://192.82.150.11:8083/mjpg/1/video.mjpg" ! jpegparse ! rtpjpegpay ! application/x-rtp,media=video,encoding-name=JPEG,payload=96 ! rtspclientsink location=rtsp://localhost:8554/cam protocols=tcp
参数说明
- 新增的
application/x-rtp,media=video,encoding-name=JPEG,payload=96是显式的caps过滤器,明确告诉rtspclientsink当前输入的RTP流的媒体类型、编码格式和负载号,解决自动协商失败的问题。 - 新增的
protocols=tcp指定RTSP推流使用TCP协议传输RTP包,避免UDP传输可能出现的端口冲突、内网限制导致的推流失败,如需使用UDP可将参数值改为udp。
常见问题排查
- 推流前先确认rtsp-simple-server服务已经正常启动,且8554端口没有被其他进程占用。
- 如果你给rtsp-simple-server配置了推流鉴权,需要将推流地址修改为
rtsp://<用户名>:<密码>@localhost:8554/cam格式。 - 源流不稳定导致推流中断的话,可以在
souphttpsrc后添加timeout=5参数设置HTTP流超时重连阈值。
内容的提问来源于stack exchange,提问作者Lloyd Briggs
相关产品推荐
相关产品推荐

