Linux自建MediaMTX直播推流服务

MediaMTX 是一款轻量级、高性能的实时媒体服务器与代理工具,支持多协议转换、流媒体路由及全功能管理。其前身为 rtsp-simple-server,现已升级为功能更强大的通用媒体传输平台,兼容 RTSP、RTMP、HLS 等多种协议,无需依赖环境,单文件即可运行于 Linux、Windows 或 macOS 系统。本教程将采用雨云服务器搭建Linux端的MediaMTX服务,并实现在Windows使用OBS Studio来直播推流。


部署准备:

  1. MediaMTX:项目地址:GitHub - bluenviron/mediamtx
  2. 推推流工具:OBS Studio 官方下载
  3. 云服务器(可选):高性价比云服务推荐:雨云云计算
可1元试用24小时
注册即送「五折优惠券」
国内BGP网络,多线大带宽,直播推流延迟低至50ms

一、获取MediaMTX

  1. 创建一个mediamtx的文件夹

    mkdir mediamtx
    cd mediamtx
  2. 你可以在MediaMTX的Releases页面获取最新版:MediaMTX - Releases,之后下载符合你CPU架构的版本,这里默认为arm64,所以你可以关注包含linux_arm64.tar.gz的文件并下载它,放到服务器中。

    wget https://github.com/bluenviron/mediamtx/releases/download/v1.12.2/mediamtx_v1.12.2_linux_amd64.tar.gz

    如果下载较慢或网络不好,或者可以采用我准备的本地版本:

    wget https://cdn.kroxitine.com/software/mediamtx_v1.12.2_linux_amd64.tar.gz
  3. 释放压缩文件

    tar -xvzf mediamtx_v1.12.2_linux_arm64.tar.gz

二、运行MediaMTX

  1. 设置执行权限以运行mediamtx程序

    sudo chmod +x mediamtx
    
    ./mediamtx
  2. 之后你应该可以看到启动状态并有对应的端口:

    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. 端口服务以及作用

    服务协议端口号传输层用途说明典型应用场景
    RTSP8554TCP控制命令传输(PLAY/SETUP等)摄像头接入、VLC播放
    8000UDPRTP媒体数据传输(视频/音频流)
    8001UDPRTCP控制包(流量/QoS反馈)
    RTMP1935TCP推流/拉流标准端口OBS推流、Flash兼容播放
    HLS8888TCPHTTP流媒体分片传输网页端兼容播放(iOS/Android)
    WebRTC8889HTTP信令通信(SDP交换)浏览器实时直播
    8189UDPICE候选传输(NAT穿透)
    SRT8890UDP安全可靠传输(抗丢包/低延迟)远程高质量直播传输
  4. 本次我们将使用 RTMPHLS 的方式来进行推拉流
    · 请在防火墙或云服务器平台放行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 固定码率: 适合网络稳定的场景,保证流畅性

    带宽类型推荐带宽并发人数编码模式推荐码率适用场景
    基础配置10Mbps1-2人CBR3000Kbps情侣共享
    中等配置25Mbps3-5人CBR5000Kbps小型会议
    高端配置50Mbps5-10人CBR8000Kbps群直播
    弹性配置100Mbps+10人+CBR按需调整云导播/大型分发

    · VBR 动态码率 复杂画面自动提升码率(如快速运动场景)

    带宽类型推荐带宽并发人数编码模式目标码率最大码率
    基础配置10Mbps3-5人VBR768Kbps1560Kbps
    中等配置25Mbps5-10人VBR1280Kbps2560Kbps
    高端配置50Mbps10-15人VBR1920Kbps3240Kbps

    · 理论上码率越低,可以同时观看的人数就越多,但是画质也会越糊,可自行斟酌。

三、mediamtx自定义端口

  1. 你可以在目录下编辑 mediamtx.yml文件,以重新定义端口(若产生端口冲突):
    · 更改RMTP端口请搜索字符串:rtmpAddress
    · 更改HLS端口请搜索字符串:hlsAddress
    · 以此类推

四、HLS拉流设置详解:

  1. HLS表格功能与作用:

    参数名默认值说明对拉流效果的影响
    hlsyes是否启用 HLS 协议拉流关闭后将无法通过 HLS 播放
    hlsAddress:8888HLS 服务监听地址(端口可自定义)修改后播放端需同步更新地址
    hlsEncryptionno是否启用 TLS/HTTPS 加密启用后可支持 LL-HLS,但需配置证书
    hlsVariantfmp4协议变体 ,可选 mpegts、fmp4、lowLatency
    hlsSegmentCount8保留的切片数量(影响 seek 回放能力)数值越大支持的回放时间范围越广,但占用内存增加
    hlsSegmentDuration1s每个切片的最小时长(实际受关键帧间隔影响)较短的时长可降低初始加载时间,但会增加播放端缓冲次数
    hlsPartDuration300ms(仅低延迟模式)每个分块的最小时长分块越短延迟越低,但可能增加卡顿风险
    hlsAllowOrigin'*'CORS 跨域访问控制(*表示允许所有域名)允许网页播放器跨域访问流媒体
    hlsAlwaysRemuxno是否持续生成 HLS(即使无播放请求)启用后可消除首次播放的切片生成延迟,但增加服务器负载
    hlsDirectory''切片存储目录(空值表示仅存内存)指定目录可降低内存占用,但可能因磁盘 I/O 导致性能下降
    hlsMuxerCloseAfter60s无播放请求时自动关闭混流器的超时时间较短的超时可释放资源,但频繁开关会增加首帧延迟
  2. 兼容性选择:

    • 选项:hlsVariant
      · mpegts(兼容性最佳):可兼容所有设备,但效率较低
      · fmp4(高效):有约平均 15s 的延迟
      · lowLatency(超低延迟):可缩短至 3-5 秒延迟,但部分老旧播放器不兼容!
  3. SSL 配置:

    • 选项:hlsEncryption
      · 将更改为 yes 启用 SSL 加密
      · 需要申请域名,并导出crt和key文件
      · 将 'server.key' 和 'server.crt' 放到 mediamtx 根目录下即可
最后修改:2025 年 05 月 20 日
喜欢就请我喝一杯奶茶吧~