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

《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开发实战:从零基础到短视频上线》一书。

本系列的FFmpeg进阶文章目录为《FFmpeg开发笔记全目录(FFmpeg开发实战详解,含直播系统的搭建过程)》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

干货分享 | 学会这7个工具方法,数字化转型规划不是难题

提到数字化转型,首要做的便是分析企业现有的业务流程和价值流,发现企业利润来源的关键点,进而有针对性的数字化转型。要实现传统业务向数字化业务的转变,制定出高效、灵活的业务流程优化策略显得至关重要,这样才能找到…

Modbus为何要转成EtherCAT

1. Modbus是什么? Modbus是一种工业通信协议,广泛应用于工业自动化领域。它支持多种通信方式,包括RS-232、RS-485和TCP/IP等。Modbus协议简单易用,能够实现设备之间的数据交换和控制命令的传输。然而,它在数据传输速率…

Web渗透:任意文件下载

任意文件下载漏洞(Arbitrary File Download Vulnerability)是一种常见的Web安全漏洞,它允许攻击者通过修改输入参数,从服务器下载任意文件,而不仅仅是预期的文件;通常这种漏洞出现在处理用户输入的地方&…

一款开源、免费、现代化风格的WPF UI控件库

前言 今天大姚给大家分享一款开源(MIT License)、免费、现代化风格的WPF UI控件库:ModernWpf。 项目介绍 ModernWpf是一个开源项目,它为 WPF 提供了一组现代化的控件和主题,使开发人员能够创建具有现代外观的桌面应…

优化 C# 和 .NET Core Web API 中的 LINQ 查询

LINQ(语言集成查询)是 C# 中的一项强大功能,允许开发人员以可读且简洁的方式查询和操作数据。但是,LINQ 的使用效率低下可能会导致性能瓶颈,尤其是在处理 .NET Core Web API 中的大型数据集时。优化 LINQ 查询对于维护…

Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。 Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为…

数据可视化期末考试(logistic回归)

目录 1、Logistic回归 2、梯度上升算法 1、Logistic回归 假设现在有一些数据点,我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作为回归,如下图所示: Logistic回归是分类方法,它利用的是…

用FFmpeg合并音频和视频

使用FFmpeg合并音频和视频是一个相对直接的过程。可以通过以下一些基本的步骤和命令示例完成这个任务: 安装FFmpeg:首先,确保你的系统中已经安装了FFmpeg。你可以从[FFmpeg官网](Download FFmpeg)下载并安装它。 准备素材:确保你…

压铸工艺介绍

1.压铸的主要特点 1.压铸是让有色金属熔融,并在加压的情况下让其流入模具中。由于使用模具,所以适合进行大量生产。不同于其他铸造方式,压铸需要加压,所以具有尺寸精度优秀的特点。此外,由于并非使用砂型而是采用模具…

如何给WPS、Word、PPT等办公三件套添加收费字体---方正仿宋GBK

1.先下载需要的字体。 下载字体的网站比较多,基本上都是免费的。随便在网上搜索一个就可以了,下面是下载的链接。 方正仿宋GBK字体免费下载和在线预览-字体天下 ​www.fonts.net.cn/font-31602268591.html 注意:切记不要商用,以免…

基于weixin小程序农场驿站系统的设计

管理员账户功能包括:系统首页,个人中心,农场资讯管理,用户管理,卖家管理,用户分享管理,分享类型管理,商品信息管理,商品类型管理 开发系统:Windows 架构模式&…

高频科技亮相SEMl-e2024第六届深圳国际半导体展,以超纯工艺推动行业发展

6月26-28日,SEMl-e2024第六届深圳国际半导体展在深圳国际会展中心(宝安新馆)隆重举办。本次展会以【“芯”中有“算”智享未来】为主题,汇聚800多家展商,集中展示了集成电路、电子元器件、第三代半导体及产业链材料和设备为一体的半导体产业链,搭建了供需精准对接、探索行业新发…

【多线程】如何解决线程安全问题?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. synchronized 关键字1.1 锁是什么1.2 如何加锁1.3 synchronized 修饰方法1) 修饰普通成员方法2) 修饰静态…

web前端——css(一篇教会网页制作)

目录 一、基本语法 1.行内样式表 2.内嵌样式表 3.外部样式表 二、选择器 1.标签选择器 2.类选择器 3.id 选择器 4.通配选择器 三、常见修饰 1.文本 2.背景 3.列表 4.伪类 5.透明度 6.块级、行级、行级块标签 7.div 和 span 四、盒子模型(重点&…

Python学习打卡:day15

day15 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day15110、数据分析案例步骤 1 —— 文件读取data_define_108.pyfile_define_108.py 111、数据分析案例步骤二——数据计算112、数据分析案例步骤…

基于LMS自适应滤波的窄带信号宽带噪声去除(MATLAB R2021B)

数十年的研究极大的发展了自适应滤波理论,自适应滤波理论已经成为信号处理领域研究的热点之一。从理论上讲,自适应滤波问题没有唯一解。为了得到自适应滤波器及其应用系统,可以根据不同的优化准则推导出许多不同的自适应理论。目前该理论主要…

【C语言】字符/字符串+内存函数

目录 Ⅰ、字符函数和字符串函数 1 .strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 11.字符函数 12. 字符转换函数 Ⅱ、内存函数 1 .memcpy 2.memmove 3.memcmp 4.memset Ⅰ、字符函数和字符串函数 1 .strlen 函数原型&…

Java热门技术点总结:Lambda表达式与Stream API

第一部分:Lambda表达式 1. 简介 Lambda表达式是Java 8引入的一个非常重要的特性,它提供了一种简洁、灵活的函数式编程方式。Lambda表达式允许我们将函数作为参数传递,极大的简化了代码的编写。 2. 基本语法 Lambda表达式的基本语法如下&a…

聚类模型的算法性能评价

一、概述 作为机器学习领域的重要内容之一,聚类模型在许多方面能够发挥举足轻重的作用。所谓聚类,就是通过一定的技术方法将一堆数据样本依照其特性划分为不同的簇类,使得同一个簇内的样本有着更相近的属性。依不同的实现策略,聚类…

目标检测之YoloV1

一、预测阶段(前向推断) 在预测阶段Yolo就相当于一个黑箱子,输入的是448*448*3的图像,输出是7*7*30的张量,包含了所有预测框的坐标、置信度和类别 为什么是7*7*30呢? --将输入图像划分成s*s个grid cell&a…