能否用GStreamer实现FFmpeg同款UDP/RTSP视频推流功能?
基于GStreamer实现同款推流功能(Ubuntu 22.04.1 LTS + GStreamer 1.20.4)
完全可以实现你用FFmpeg完成的推流需求——GStreamer 1.20.4在Ubuntu 22.04.1 LTS环境下支持读取网络m3u8流、本地视频文件,并通过RTSP或UDP(MPEG-TS封装)协议推流,可直接用VLC等播放器接收观看。以下是对应场景的命令示例:
1. 网络m3u8推流到RTSP服务器
对应你提供的FFmpeg RTSP推流命令,GStreamer实现命令如下:
gst-launch-1.0 uridecodebin uri=https://www.blabla.net/tv/tv_360p.m3u8 ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! videoconvert ! x264enc tune=zerolatency bitrate=1050 speed-preset=ultrafast key-int-max=60 ! rtph264pay config-interval=1 ! rtspclientsink location=rtsp://192.168.1.111:8554/rtsp_stream sync=false
uridecodebin自动处理网络m3u8的解码逻辑,替代FFmpeg的-i输入x264enc的tune=zerolatency、bitrate=1050对应FFmpeg的tune zerolatency和-b:v 1050k参数rtspclientsink负责将流推送到指定RTSP服务器地址
2. 网络m3u8推流到UDP组播(MPEG-TS封装)
对应FFmpeg的UDP组播推流命令,GStreamer实现:
gst-launch-1.0 uridecodebin uri=https://www.blabla.net/tv/tv_360p.m3u8 ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! videoconvert ! x264enc tune=zerolatency bitrate=1050 speed-preset=ultrafast key-int-max=60 ! mpegtsmux ! udpsink host=225.100.5.1 port=5000 auto-multicast=true sync=false
mpegtsmux完成MPEG-TS封装,对应FFmpeg的-f mpegtsudpsink的auto-multicast=true启用组播发送,目标地址与FFmpeg示例一致
3. 本地MP4文件推流到UDP组播(MPEG-TS封装)
如果本地MP4文件的视频编码为H.264,可直接复用编码(对应FFmpeg的-c:v copy),命令如下:
gst-launch-1.0 filesrc location=video.mp4 ! qtdemux ! h264parse ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 ! rtph264pay config-interval=1 ! mpegtsmux ! udpsink host=225.100.5.1 port=5000 auto-multicast=true sync=false
filesrc读取本地文件,qtdemux解析MP4容器,h264parse处理H.264码流,无需重新编码- 若MP4视频编码不是H.264,替换为
videoconvert ! x264enc tune=zerolatency bitrate=1050 ...环节即可
必要前置操作
确保已安装GStreamer全套插件:
sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
内容的提问来源于stack exchange,提问作者Ömer gümuş
相关产品推荐
相关产品推荐

