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

news/2024/10/18 16:34:30/文章来源:https://www.cnblogs.com/aqi00/p/18288640
《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开发实战:从零基础到短视频上线》一书。

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772545.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

skynet热更新之inject

游戏服务器的热更新是一种常见的需求,skynet 可以通过 inject 的方式,来修改一个服务的消息处理函数,达到热更新的效果...游戏服务器的热更新是一种常见的需求,skynet可以通过inject的方式,来修改一个服务的消息处理函数,达到热更新的效果。 skynet内置服务debug_console…

2024736DP专项练习赛

阿尼亚不想学DP前言 比赛链接榜上那个冒着蓝光的就是我…… 提交记录跟答辩一样…… 吐槽一下,虽然挂着 DP 专题赛的名字,但除了 T1 T3 以外,全是记搜题(虽然好像只有四道题来着)。 T1 签到题,\(n\) 范围很小,先用区间 dp 求出任意区间达到最终状态所需的最小代价,然后…

Sqlserver 处理两条完全一样的记录

想要删除重复记录(所有字段值相同),怎么处理? with cte AS (select row_number() over (partition by wo_woid, wo_lx order by(select null)) as rn,*from jserp.Wo_Modified_Record_Backupwhere wo_woid like MO24% and wo_woid>=MO240601 and len(wo_woid)=14 and wo…

apifox日常使用

一、前后置操作 1.1 提取变量 登录接口提取返回数据里的token,保存为全局变量1.2 接口间相互传递数据 详情接口使用登录接口返回提取的token[Haima的博客] http://www.cnblogs.com/haima/

Prompt Engneering

Prompt-Engineerning Prompt-Engineerning(提示词工程) 目录Prompt-Engineerning零、文档中参数说明1、OpenAI API接口参数一、什么是提示词工程1、学习AI在提示词工程上有哪些优势2、Prompt调优二、Prompt典型构成1、定义角色为什有效?案例:推荐流量包的智能客服1.对话系统…

“智能体风”吹进体育圈 粉丝手搓上百个智能体为中国健儿应援 太有AI了!粉丝手搓上百个智能体为中国健儿打CALL

智能体的风吹进了体育竞技圈。近日,在百度文心智能体平台,出现了上百个充满“AI”的运动明星粉丝应援智能体,比如支持中国女子乒乓球运动员孙颖莎的“孙颖莎的小迷妹”、支持中国女子跳水队员全红婵的“婵婵的小书包”,应援中国女子乒乓球运动员王曼昱的“曼昱的小芋圆”等…

centos7 最小化安装yum不能安装软件解决方案

慕课网神思者老师课常资料带的布署工具中,自带的liunx 系统centos7 yum发现不能安装软件,比如docker 解决方案 首先我们安装好虚拟机启动系统centos7 尝试安装任何软件都会报仓库错误 第一反应就是更新yum yum update 由于仓库不对更新肯定不行了 第二反是 更新仓库…

节约时间与金钱:顶级简单项目管理软件推荐

国内外主流的10款项目进度管理软件对比:PingCode、Worktile、蓝凌OA、用友、泛微OA、飞书、Asana、Trello、Smartsheet、Jira。在快节奏的商业环境中,有效地管理项目进度常常是团队成功与否的关键。许多团队面临着项目管理过于复杂,难以迅速适应变化的挑战。一个直观且功能全…

使用Excel画出各类统计图(2)

承接上一章,本章继续介绍如何用Excel画图 目录一、折线图1.画折线图常见的错误2.双坐标轴折线图(1)设置主次坐标轴(2)设置坐标轴的最大最小值(3)设置折线的颜色3.柱形图顶端的折线图(1)绘制折线图(2)添加数据(3)绘制面积图(4)更改坐标轴(5)数据处理 一、折线图…

本田裂行 传动保养、换普利珠

9颗螺丝,8mm套筒,最好接延长管。 我买了气动扳手,后来还是放弃了,汽修师傅10分钟搞定的事情,你可能要搞很久,而且是蹲着,算了,千万别买工具自己搞,直接花钱请人搞好了。 普利珠还是不要换, 我原厂14g 的,换了18g 以后,啃盘严重, 2、3千公里以后里面全是啃下来的粉…

QT mainwindow UI界面添加工具栏

1.在mainwindow UI设计器界面右上角 右键mainwindow 弹出如下菜单图1 可以看到 添加工具栏,移除状态栏 等相关操作都在菜单中 2.新建action相关菜单项图2 在红框中的Action Edit 中,第一行菜单栏按钮(分别是新建,复制,粘贴,删除,修改)点击以进行创建 鼠标右键Action E…

在Pandas中 SQL操作:SQLAlchemy和PyMySQL的区别

SQLAlchemy和PyMySQL的区别 1. SQLAlchemy和PyMySQL简介SQLAlchemy 是Python编程语言下的一款开源软件。它提供了SQL工具包和对象关系映射器(ORM)来进行数据库操作。SQLAlchemy可以与多种数据库系统进行交互,包括MySQL、PostgreSQL、SQLite等。PyMySQL 是Python编程语言下的…