需求:构建GStreamer Pipeline实现RTSP流获取与转发
GStreamer RTSP流转发管道实现
场景1:无需转码的低开销转发
当源RTSP流的编码(如H.264/H.265、AAC)与目标服务器兼容时,直接转发RTP包即可,性能损耗最小。
拉流并发送到目标服务器的管道
gst-launch-1.0 rtspsrc location=rtsp://your-source-rtsp-url latency=200 ! rtph264depay ! rtph264pay ! udpsink host=target-server-ip port=5000
各元素说明:
rtspsrc:指定源RTSP地址,latency=200设置200ms延迟,缓解网络抖动导致的卡顿rtph264depay:从RTP封装中提取原始H.264视频流rtph264pay:将H.264流重新打包为RTP格式udpsink:通过UDP将RTP包发送到目标服务器的指定端口
目标服务器接收并发布RTSP流
如果目标端使用GStreamer发布流,可运行以下命令:
gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,media=video,encoding-name=H264,payload=96 ! rtph264depay ! h264parse ! rtph264pay name=pay0 pt=96 ! rtspclientsink location=rtsp://target-server-url/stream
场景2:需要转码的转发
若源流编码不被目标服务器支持,或需调整码率/分辨率,需加入转码步骤:
gst-launch-1.0 rtspsrc location=rtsp://your-source-rtsp-url latency=200 ! decodebin ! x264enc tune=zerolatency bitrate=800 ! rtph264pay ! udpsink host=target-server-ip port=5000
关键元素说明:
decodebin:自动识别并解码源流的视频内容x264enc tune=zerolatency:启用低延迟编码模式,适合实时流;bitrate=800设置码率为800kbps(可按需调整)
场景3:同时转发视频+音频流
如果源流包含音频,需使用tee和queue分流处理音视频:
gst-launch-1.0 rtspsrc location=rtsp://your-source-rtsp-url latency=200 ! decodebin name=demux \ demux.video_0 ! queue ! x264enc tune=zerolatency ! rtph264pay ! udpsink host=target-server-ip port=5000 \ demux.audio_0 ! queue ! faacenc ! rtpaacpay ! udpsink host=target-server-ip port=5001
目标端需分别接收两个端口的流,再合并发布到RTSP服务器。
关键注意事项
- 根据网络状况调整
latency值:网络不稳定时可适当增大延迟,避免丢包 - 防火墙配置:确保目标服务器开放了对应的UDP(或TCP)端口
- TCP传输替代:若需要更稳定的传输,可将
udpsink替换为tcpserversink,目标端用tcpsrc接收 - H.265适配:将所有
h264相关元素替换为h265(如rtph265depay、x265enc)
内容的提问来源于stack exchange,提问作者Mohsen Kondori
相关产品推荐
相关产品推荐

