Loading... ## Linux自建MediaMTX直播推流服务 MediaMTX 是一款轻量级、高性能的实时媒体服务器与代理工具,支持多协议转换、流媒体路由及全功能管理。其前身为 rtsp-simple-server,现已升级为功能更强大的通用媒体传输平台,兼容 RTSP、RTMP、HLS 等多种协议,无需依赖环境,单文件即可运行于 Linux、Windows 或 macOS 系统。本教程将采用雨云服务器搭建Linux端的MediaMTX服务,并实现在Windows使用OBS Studio来直播推流。 --- ### 部署准备: 1. MediaMTX:项目地址:[GitHub - bluenviron/mediamtx][1] 2. 推推流工具:[OBS Studio 官方下载][2] 3. 云服务器(可选):高性价比云服务推荐:[雨云云计算][3] > 可1元试用24小时 > 注册即送「五折优惠券」 > 国内BGP网络,多线大带宽,直播推流延迟低至50ms #### 一、获取MediaMTX 1. 创建一个`mediamtx`的文件夹 ```bash mkdir mediamtx cd mediamtx ``` 2. 你可以在MediaMTX的Releases页面获取最新版:[MediaMTX - Releases][4],之后下载符合你CPU架构的版本,这里默认为`arm64`,所以你可以关注包含`linux_arm64.tar.gz`的文件并下载它,放到服务器中。 ```bash wget https://github.com/bluenviron/mediamtx/releases/download/v1.12.2/mediamtx_v1.12.2_linux_amd64.tar.gz ``` 如果下载较慢或网络不好,或者可以采用我准备的本地版本: ```bash wget https://cdn.kroxitine.com/software/mediamtx_v1.12.2_linux_amd64.tar.gz ``` 3. 释放压缩文件 ```bash tar -xvzf mediamtx_v1.12.2_linux_arm64.tar.gz ``` #### 二、运行MediaMTX 1. 设置执行权限以运行`mediamtx`程序 ```bash sudo chmod +x mediamtx ./mediamtx ``` 2. 之后你应该可以看到启动状态并有对应的端口: ```bash root@iZbp19zfygidnolhx8vjzcZ:~/mediamtx# ./mediamtx 2025/05/20 20:31:09 INF MediaMTX v1.12.2 2025/05/20 20:31:09 INF configuration loaded from /root/mediamtx/mediamtx.yml 2025/05/20 20:31:09 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP) 2025/05/20 20:31:09 INF [RTMP] listener opened on :1935 2025/05/20 20:31:09 INF [HLS] listener opened on :8888 2025/05/20 20:31:09 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP) 2025/05/20 20:31:09 INF [SRT] listener opened on :8890 (UDP) ``` 3. 端口服务以及作用 | 服务协议 | 端口号 | 传输层 | 用途说明| 典型应用场景| |-----------|--------|--------|-----------|-------------------| | RTSP | 8554 | TCP | 控制命令传输(PLAY/SETUP等)| 摄像头接入、VLC播放| | | 8000 | UDP | RTP媒体数据传输(视频/音频流)| | | | 8001 | UDP | RTCP控制包(流量/QoS反馈)| | | **RTMP** | 1935 | TCP | 推流/拉流标准端口 | OBS推流、Flash兼容播放 | | **HLS** | 8888 | TCP | HTTP流媒体分片传输| 网页端兼容播放(iOS/Android) | | WebRTC| 8889 | HTTP | 信令通信(SDP交换)| 浏览器实时直播 | | | 8189 | UDP | ICE候选传输(NAT穿透)| | | SRT | 8890 | UDP | 安全可靠传输(抗丢包/低延迟) | 远程高质量直播传输| 4. 本次我们将使用 `RTMP` 与 `HLS` 的方式来进行推拉流 · 请在防火墙或云服务器平台放行RTMP的`1935`和HLS的`8888`端口 · RTMP负责接收来自OBS的推流,然后再HLS网页端负责拉流 · 注意:如果你是购买的`NAT云主机`,请在`NAT端口映射管理`中映射该端口 #### 三、OBS Studio 推流准备: 1. OBS的设置较为简单,只需要在:`文件` - `设置` - `直播` - `自定义` · 在`服务器`一栏中输入:`rtmp://[host]:1935` · 推流码按需要可自行设置,例如我设置为 `test` 之后确认回OBS到主页面,点击 `开始直播` 即可推流,可在软件下方一栏看到丢包和推流码率、CPU占用和FPS等情况 #### 四、获取拉流 1.在浏览器访问`http://[host]:8888/推流码/` 即可获取推流 > 示例:IP/Host 为 127.0.0.1 > 推流码为 test > 则访问: http://127.0.0.1:8888/test/ ### 附录: #### 一、关于云服务器选择 1. 云服务器的CPU和内存性能**并不重要**,你应该更加关注**上行带宽**, 2. 在推流`1080P 码率CBR:3000-5000Kbps` 左右时通常面对考虑1-2人直播的情况选用 `10Mbps上行带宽` 是基本足够用的 3. 在带宽不富裕的场景下,如果需要支持多人并发,建议可以考虑更大的服务器`上行带宽`,并考虑使用`HVEC`视频编码器,或尝试使用较低的的码率,见下方表格。 #### 二、码率与场景: 1. 带宽与码率参考表格: · CBR 固定码率: **适合网络稳定的场景,保证流畅性** | 带宽类型 | 推荐带宽 | 并发人数 | 编码模式 | 推荐码率 | 适用场景 | |----------|----------|----------|----------|----------------|------------------------------| | 基础配置 | 10Mbps | 1-2人 | CBR | 3000Kbps | 情侣共享 | | 中等配置 | 25Mbps | 3-5人 | CBR | 5000Kbps | 小型会议 | | 高端配置 | 50Mbps | 5-10人 | CBR | 8000Kbps | 群直播 | | 弹性配置 | 100Mbps+ | 10人+ | CBR | 按需调整 | 云导播/大型分发| · VBR 动态码率 **复杂画面自动提升码率(如快速运动场景)** | 带宽类型 | 推荐带宽 | 并发人数 | 编码模式 | 目标码率 | 最大码率 | |----------|----------|----------|----------|-------|---| | 基础配置 | 10Mbps | 3-5人 | VBR | 768Kbps | 1560Kbps| | 中等配置 | 25Mbps | 5-10人 | VBR | 1280Kbps| 2560Kbps| | 高端配置 | 50Mbps | 10-15人 | VBR | 1920Kbps| 3240Kbps| · 理论上码率越低,可以同时观看的人数就越多,但是画质也会越糊,可自行斟酌。 #### 三、mediamtx自定义端口 1. 你可以在目录下编辑 `mediamtx.yml`文件,以重新定义端口(若产生端口冲突): · 更改RMTP端口请搜索字符串:`rtmpAddress` · 更改HLS端口请搜索字符串:`hlsAddress` · 以此类推 #### 四、HLS拉流设置详解: 1. HLS表格功能与作用: | 参数名 | 默认值 | 说明 | 对拉流效果的影响 | |-----------------------|--------------|----------------------------------------------------------------------|----------------------------------------------------------------------------------| | **hls** | `yes` | 是否启用 HLS 协议拉流 | 关闭后将无法通过 HLS 播放 | | **hlsAddress** | `:8888` | HLS 服务监听地址(端口可自定义) | 修改后播放端需同步更新地址 | | **hlsEncryption** | `no` | 是否启用 TLS/HTTPS 加密 | 启用后可支持 LL-HLS,但需配置证书 | | **hlsVariant** | `fmp4` | 协议变体 ,可选 mpegts、fmp4、lowLatency | | **hlsSegmentCount** | `8` | 保留的切片数量(影响 seek 回放能力) | 数值越大支持的回放时间范围越广,但占用内存增加 | | **hlsSegmentDuration** | `1s` | 每个切片的最小时长(实际受关键帧间隔影响) | 较短的时长可降低初始加载时间,但会增加播放端缓冲次数 | | **hlsPartDuration** | `300ms` | (仅低延迟模式)每个分块的最小时长 | 分块越短延迟越低,但可能增加卡顿风险 | | **hlsAllowOrigin** | `'*'` | CORS 跨域访问控制(`*`表示允许所有域名) | 允许网页播放器跨域访问流媒体 | | **hlsAlwaysRemux** | `no` | 是否持续生成 HLS(即使无播放请求) | 启用后可消除首次播放的切片生成延迟,但增加服务器负载 | | **hlsDirectory** | `''` | 切片存储目录(空值表示仅存内存) | 指定目录可降低内存占用,但可能因磁盘 I/O 导致性能下降 | | **hlsMuxerCloseAfter** | `60s` | 无播放请求时自动关闭混流器的超时时间 | 较短的超时可释放资源,但频繁开关会增加首帧延迟 | 2. 兼容性选择: - 选项:**hlsVariant** · `mpegts`(兼容性最佳):可兼容所有设备,但效率较低 · `fmp4`(高效):有约平均 15s 的延迟 · `lowLatency`(超低延迟):可缩短至 3-5 秒延迟,但部分老旧播放器不兼容! 3. SSL 配置: - 选项:**hlsEncryption** · 将更改为 `yes` 启用 SSL 加密 · 需要申请域名,并导出crt和key文件 · 将 'server.key' 和 'server.crt' 放到 mediamtx 根目录下即可 [1]: https://github.com/bluenviron/mediamtx [2]: https://obsproject.com/ [3]: https://www.rainyun.com/NjI5NDg5_ [4]: https://github.com/bluenviron/mediamtx/releases 最后修改:2025 年 10 月 09 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 喜欢就请我喝一杯奶茶吧~