FFmpeg开发条记(四十一)结合OBS与MediaMTX实现SRT直播推流 ...

打印 上一主题 下一主题

主题 917|帖子 917|积分 2751

​《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2  FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,尚有于2017年推出的SRT协议,相比常见的RTMP协议,SRT协议具有更低的耽误,并且消除了卡帧、抖动等花屏现象。腾讯视频云已经引入了SRT协议,在实践中取得了良好的视频直播效果。 FFmpeg从4.0开始支持集成第三方的libsrt库,该库为SRT协议的支持库。OBS Studio、MediaMTX等开源软件也纷纷支持SRT,国产的两个开源流媒体服务器SRS和ZLMediaKit都支持SRT协议,可见在直播领域SRT取代RTMP已是大势所趋。在本文的直播操作之前,务必确保电脑上的FFmpeg已经集成了libsrt库,详细的集成步调参见之前的文章《Windows环境给FFmpeg集成libsrt》。
下面就以Windows环境为例,把OBS Studio作为SRT直播的录制推流方,把MediaMTX作为承载SRT直播的流媒体服务器,把ffplay和VLC media player作为SRT直播的拉流播放器,演示看看如安在个人电脑搭建一个从录制到分发到播放的完备SRT直播体系。
首先按照《FFmpeg开发实战:从零基础到短视频上线》一书“10.2.2  FFmpeg向网络推流”的先容,安装并启动MediaMTX,弹出的MediaMTX日志窗口显示内容如下:
  1. 2023/12/10 14:18:25 INF MediaMTX v1.3.0
  2. 2023/12/10 14:18:25 INF configuration loaded from E:\Program Files (x86)\mediamtx\mediamtx.yml
  3. 2023/12/10 14:18:25 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
  4. 2023/12/10 14:18:25 INF [RTMP] listener opened on :1935
  5. 2023/12/10 14:18:25 INF [HLS] listener opened on :8888
  6. 2023/12/10 14:18:25 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
  7. 2023/12/10 14:18:25 INF [SRT] listener opened on :8890 (UDP)
复制代码
从上面日志可见,MediaMTX提供的SRT服务正在监听8890端口,且该服务接纳UDP传输层协议。此时SRT服务的访问地址前缀为srt://127.0.0.1:8890?streamid=xxx,开头的“srt://”表现该地址接纳srt协议,后面的“127.0.0.1:8890”为SRT服务的IP和端口号。再后面的“?streamid=xxx”表现SRT服务的流名称,其中xxx为形如“action:path”格式的字符串,冒号前面的action有两个取值,为publish表现推流方,为read表现拉流方;冒号后面的path表现播放地址的路径名称。
接着启动OBS Studio,单击主界面右下角的“设置”按钮,弹出的设置窗口在左边列表选择“直播”,窗口右边的“服务”栏选择“自定义”,“服务器”栏填“srt://127.0.0.1:8890?streamid=publish:live”,如下图所示:

设置好SRT服务器地址后,按照之前文章《利用OBS Studio开启RTMP直播推流》的说明,让OBS Studio开启视频直播推流,观察MediaMTX的服务日志如下所示:
  1. 2023/12/10 14:18:59 INF [SRT] [conn 127.0.0.1:50021] opened
  2. 2023/12/10 14:19:01 INF [SRT] [conn 127.0.0.1:50021] is publishing to path 'live', 2 tracks (H264, MPEG-4 Audio)
复制代码
可见MediaMTX的SRT服务正在把推流方的音频流和视频流发布到live路径。
然后按照《FFmpeg开发实战:从零基础到短视频上线》一书“1.3  Windows体系安装FFmpeg”的先容,在个人电脑上安装FFmpeg并打开MSYS的命令行,运行下面的ffplay命令,盼望从SRT地址拉流播放。
  1. ffplay -i 'srt://127.0.0.1:8890?streamid=read:live'
复制代码
此时ffplay弹出播放器窗口,正常播放视频画面和声音。同时观察MediaMTX的服务日志如下所示:
  1. 2023/12/10 14:19:40 INF [SRT] [conn 127.0.0.1:53466] opened
  2. 2023/12/10 14:19:40 INF [SRT] [conn 127.0.0.1:53466] is reading from path 'live', 2 tracks (H264, MPEG-4 Audio)
复制代码
可见作为拉流方的ffplay正在从SRT服务的live路径拉取音频流和视频流,说明MediaMTX通过SRT协议成功实现了视频直播的SRT推拉流功能。
最后打开VLC media player,依次选择菜单:“媒体”——“打开网络串流”,在URL地址栏填入SRT服务的拉流链接“srt://127.0.0.1:8890?streamid=read:live”,单击窗口右下角的播放按钮,即可利用VLC media player播放SRT直播地址了。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表