科技 > 软件教程 > 媒体工具

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

54人参与 2024-08-04 媒体工具

《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日志窗口显示内容如下:

2023/12/10 14:18:25 inf mediamtx v1.3.0
2023/12/10 14:18:25 inf configuration loaded from e:\program files (x86)\mediamtx\mediamtx.yml
2023/12/10 14:18:25 inf [rtsp] listener opened on :8554 (tcp), :8000 (udp/rtp), :8001 (udp/rtcp)
2023/12/10 14:18:25 inf [rtmp] listener opened on :1935
2023/12/10 14:18:25 inf [hls] listener opened on :8888
2023/12/10 14:18:25 inf [webrtc] listener opened on :8889 (http), :8189 (ice/udp)
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的服务日志如下所示:

2023/12/10 14:18:59 inf [srt] [conn 127.0.0.1:50021] opened
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地址拉流播放。

ffplay -i 'srt://127.0.0.1:8890?streamid=read:live'

此时ffplay弹出播放器窗口,正常播放视频画面和声音。同时观察mediamtx的服务日志如下所示:

2023/12/10 14:19:40 inf [srt] [conn 127.0.0.1:53466] opened
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开发实战:从零基础到短视频上线》。

 

 

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

FFmpeg开发笔记(四十二)使用ZLMediaKit开启SRT视频直播服务

08-04

装anaconda默认下载路径在d盘,现在想用ipython的时候用不了了咋办?

08-04

《云剪辑:智能识别字幕,让剪辑更高效》

08-04

FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流

08-04

百度APP视频播放中的解码优化

08-04

FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论