使用Gstreamer进行RTSP推流

背景

以前使用 Gstreamer 推过RTP流,主要涉及到 rtph264pay 插件:

gst-launch-1.0 videotestsrc ! video/x-raw,framerate=30/1 ! clockoverlay ! mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=192.168.1.104 port=1234

使用vlc打开需要配置sdp文件,前面有提到过:https://notes.z-dd.online/2024/06/08/RTP%E8%A7%86%E9%A2%91%E6%B5%81%E7%9A%84SDP%E6%96%87%E4%BB%B6/

最近尝试了推RTSP流,要稍微麻烦点:

# 1. 运行mediamtx流媒体服务器
./mediamtx &

# 2. 运行gstreamer命令
gst-launch-1.0 videotestsrc ! video/x-raw,framerate=30/1 ! clockoverlay text="Dev:0" time-format="%H:%M:%S" ! mpph264enc ! rtspclientsink protocols=udp latency=0 location=rtsp://127.0.0.1:8554/1

# 3. 使用VLC打开网络流:rtsp://运行上面命令的机器IP:8554/1

以上命令已在RK3588平台及X86平台已验证。

这里的视频输入源(videotestsrc测试源)可以换成其他的,比如v4l2的摄像头输入等;
H264编码器(RK平台的编码器插件mpph264enc)也可以换成其他的,比如基于 libx264 的通用编码器插件–x264enc

使用Gstreamer进行RTSP推流必需的2个条件:

  • gstreamer的插件–rtspclientsink
  • MediaMTX

下面就分别来看看这个两个东东。

rtspclientsink插件

rtspclientsink插件:

Send data over the network via RTSP RECORD(RFC 2326)

Gstreamer官方说明:https://gstreamer.freedesktop.org/documentation/rtspclientsink/index.html?gi-language=c

它是包含在gstreamer1.0-rtsp(GStreamer RTSP Server Library)这个包里,所以需要确保安装它:

sudo apt install gstreamer1.0-rtsp

MediaMTX

MediaMTX(原rtsp-simple-server)是个开源的轻量级流媒体服务器。

MediaMTX (formerly rtsp-simple-server) is a ready-to-use and zero-dependency real-time media server and media proxy that allows to publish, read, proxy, record and playback video and audio streams. It has been conceived as a “media router” that routes media streams from one end to the other.

项目地址:https://github.com/bluenviron/mediamtx

使用也很简单,如果不想自己源码编译,可以直接在release页下载对应的二进制包,作者提供了多个平台的包,包里面就三个文件:主程序(mediamtx)、配置文件(mediamtx.yml)、LICENSE文件。

如果不需要特殊配置,一般以默认配置直接运行就行:./mediamtx

后面如果有时间可以好好研究下这个流媒体服务器,星星数挺多的。