Linux自建MediaMTX直播推流服务
MediaMTX 是一款轻量级、高性能的实时媒体服务器与代理工具,支持多协议转换、流媒体路由及全功能管理。其前身为 rtsp-simple-server,现已升级为功能更强大的通用媒体传输平台,兼容 RTSP、RTMP、HLS 等多种协议,无需依赖环境,单文件即可运行于 Linux、Windows 或 macOS 系统。本教程将采用雨云服务器搭建Linux端的MediaMTX服务,并实现在Windows使用OBS Studio来直播推流。
部署准备:
- MediaMTX:项目地址:GitHub - bluenviron/mediamtx
- 推推流工具:OBS Studio 官方下载
- 云服务器(可选):高性价比云服务推荐:雨云云计算
可1元试用24小时
注册即送「五折优惠券」
国内BGP网络,多线大带宽,直播推流延迟低至50ms
一、获取MediaMTX
创建一个
mediamtx
的文件夹mkdir mediamtx cd mediamtx
你可以在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
释放压缩文件
tar -xvzf mediamtx_v1.12.2_linux_arm64.tar.gz
二、运行MediaMTX
设置执行权限以运行
mediamtx
程序sudo chmod +x mediamtx ./mediamtx
之后你应该可以看到启动状态并有对应的端口:
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)
端口服务以及作用
服务协议 端口号 传输层 用途说明 典型应用场景 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 安全可靠传输(抗丢包/低延迟) 远程高质量直播传输 - 本次我们将使用
RTMP
与HLS
的方式来进行推拉流
· 请在防火墙或云服务器平台放行RTMP的1935
和HLS的8888
端口
· RTMP负责接收来自OBS的推流,然后再HLS网页端负责拉流
· 注意:如果你是购买的NAT云主机
,请在NAT端口映射管理
中映射该端口
三、OBS Studio 推流准备:
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/
附录:
一、关于云服务器选择
- 云服务器的CPU和内存性能并不重要,你应该更加关注上行带宽,
- 在推流
1080P 码率CBR:3000-5000Kbps
左右时通常面对考虑1-2人直播的情况选用10Mbps上行带宽
是基本足够用的 - 在带宽不富裕的场景下,如果需要支持多人并发,建议可以考虑更大的服务器
上行带宽
,并考虑使用HVEC
视频编码器,或尝试使用较低的的码率,见下方表格。
二、码率与场景:
带宽与码率参考表格:
· 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自定义端口
- 你可以在目录下编辑
mediamtx.yml
文件,以重新定义端口(若产生端口冲突):
· 更改RMTP端口请搜索字符串:rtmpAddress
· 更改HLS端口请搜索字符串:hlsAddress
· 以此类推
四、HLS拉流设置详解:
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
无播放请求时自动关闭混流器的超时时间 较短的超时可释放资源,但频繁开关会增加首帧延迟 兼容性选择:
- 选项:hlsVariant
·mpegts
(兼容性最佳):可兼容所有设备,但效率较低
·fmp4
(高效):有约平均 15s 的延迟
·lowLatency
(超低延迟):可缩短至 3-5 秒延迟,但部分老旧播放器不兼容!
- 选项:hlsVariant
SSL 配置:
- 选项:hlsEncryption
· 将更改为yes
启用 SSL 加密
· 需要申请域名,并导出crt和key文件
· 将 'server.key' 和 'server.crt' 放到 mediamtx 根目录下即可
- 选项:hlsEncryption