当前位置: 首页 > news >正文

FFmpeg开发笔记(十五)详解MediaMTX的推拉流

MediaMTX是个开源的轻量级流媒体服务器,它的安装过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2  FFmpeg向网络推流”。MediaMTX下载后的压缩包包括可执行程序mediamtx.exe和配置文件mediamtx.yml,看起来非常简约,但它提供的流媒体服务一点也没缩水。双击mediamtx.exe,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开启了下列五项流媒体服务:
1、侦听8554端口的RTSP服务,对应的流媒体播放地址是rtsp://127.0.0.1:8554/stream;
2、侦听1935端口的RTMP服务,对应的流媒体播放地址是rtmp://127.0.0.1:1935/stream;
3、侦听8888端口的HLS服务,对应的流媒体播放地址有两个,其中http://127.0.0.1:8888/stream可以直接通过浏览器播放(比如Chrome),另一个http://127.0.0.1:8888/stream/index.m3u8需要用播放器打开。
4、侦听8889端口的WebRTC服务;
5、侦听8890端口的SRT服务;
接下来验证MediaMTX的实际推拉流情况。打开MSYS窗口,进入《FFmpeg开发实战:从零基础到短视频上线》一书第十章的源码目录,执行下面的编译命令。

gcc pushvideo.c -o pushvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm

编译完成后执行以下命令启动测试程序,期望把2018.mp4推给默认的推流地址rtsp://127.0.0.1:8554/stream。

./pushvideo ../2018.mp4

打开另一个MSYS窗口,同样进入《FFmpeg开发实战:从零基础到短视频上线》一书第十章的源码目录,执行下面的编译命令。

gcc pullvideo.c -o pullvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -I/usr/local/sdl2/include -L/usr/local/sdl2/lib -lsdl2 -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm

编译完成后执行以下命令启动测试程序,期望从http://127.0.0.1:8888/stream/index.m3u8拉取视频流并弹窗播放。

./pullvideo http://127.0.0.1:8888/stream/index.m3u8

然后果真弹出一个SDL窗口,正在播放从HLS服务拉取的视频画面,说明MediaMTX正确实现了HLS协议的流媒体转发功能。
不过对于上面的HLS协议,具体的播放情况比较复杂,比如http://127.0.0.1:8888/stream只能通过Chrome播放,不能通过FireFox或者Edge播放。而http://127.0.0.1:8888/stream/index.m3u8这个地址无法使用Windows Media Player打开,即使通过VLC播放也不显示画面。推测是因为pushvideo只推送视频流不推送音频流,而VLC的音视频同步机制采用音频基准,由于缺失音频流使得视频流无处校准导致不能正常显示画面。

相关文章:

  • 计算机专业学习单片机有什么意义吗?
  • git2consul+consul+gitlab连接
  • 自动发卡平台源码优化版,支持个人免签支付
  • Unity2018发布安卓报错 Exception: Gradle install not valid
  • 大数据导论-大数据分析——沐雨先生
  • 数据库---PDO
  • Radio Silence for mac 好用的防火墙软件
  • 探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较
  • Day23:LeedCode 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • 八大技术趋势案例(云计算大数据)
  • RabbitMQ中的交换机
  • Docker版本:18.06.1安装
  • 网络:udptcp套接字
  • Linux shell编程学习笔记42:md5sum
  • 傅立叶之美:深入研究傅里叶分析背后的原理和数学
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 4个实用的微服务测试策略
  • C语言笔记(第一章:C语言编程)
  • Invalidate和postInvalidate的区别
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • LeetCode18.四数之和 JavaScript
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Node项目之评分系统(二)- 数据库设计
  • uva 10370 Above Average
  • vue 个人积累(使用工具,组件)
  • 机器学习学习笔记一
  • 基于 Babel 的 npm 包最小化设置
  • 前端自动化解决方案
  • 让你的分享飞起来——极光推出社会化分享组件
  • 三分钟教你同步 Visual Studio Code 设置
  • 详解NodeJs流之一
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • No resource identifier found for attribute,RxJava之zip操作符
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​比特币大跌的 2 个原因
  • ​决定德拉瓦州地区版图的关键历史事件
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)springcloud实战之config配置中心
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (理论篇)httpmoudle和httphandler一览
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三) diretfbrc详解
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)UDP基本编程步骤
  • (译)计算距离、方位和更多经纬度之间的点
  • (原)本想说脏话,奈何已放下
  • .net Application的目录
  • .NET CLR基本术语
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net core 依赖注入的基本用发
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 回调、接口回调、 委托