MediaMTX 1.21.3 介绍与选型指南
基于 MediaMTX v1.21.3 实测:path 枢纽架构、RTSP/RTMP/HLS/WebRTC/SRT/MoQ 六协议矩阵、26MiB 级资源占用,与 ZLMediaKit/SRS/MistServer 量化选型对比。
MediaMTX 1.21.3 介绍与选型指南
目标:说清 MediaMTX 是什么、能做什么、什么时候该选它——基于 MediaMTX v1.21.3 在 Ubuntu 22.04 x86_64 服务器上的完整实测(二进制裸跑、六协议推拉流、REST API 全套调用、Prometheus 指标采集均已跑通)。
一、环境信息
本文所有命令与回显均在以下真实环境实测通过(查询与实测日期 2026-10-29):
- 操作系统:Ubuntu 22.04(x86_64,Linux 5.15+)
- MediaMTX:v1.21.3(官方 linux/amd64 静态二进制,28,505,612 字节)
- 推拉流工具:FFmpeg 6.1.1(含 libx264、libsrt)
- 部署形态:官方单二进制直跑;一键化部署方案见《MediaMTX 1.21.3 Docker Compose 部署指南》
- 实测资源占用:单路 H264+AAC 推流、多协议分发时 RSS 内存约 26 MiB
💡 技术拓展:流媒体服务器常见的「接入—分发」协议不止一种,选型先看协议矩阵。常见流媒体传输协议对比——
协议 传输层 典型延迟 常见用途 RTSP/RTP TCP+UDP 0.2~1s 摄像机(IPC/ NVR)标准接入 RTMP TCP 1~3s 编码器/推流软件(OBS)推流 HLS HTTP(TCP) 6 30s(LL-HLS 可到 25s)网页/移动端大并发分发 WebRTC UDP <0.5s 浏览器实时观看、双向通话 SRT UDP(ARQ) 0.5~2s 公网弱网可靠传输、异地互联 MoQ(Media over QUIC) QUIC(UDP) 亚秒级 新一代低延迟分发(草案期) MediaMTX 是少见的「一张二进制同时实现以上全部六种协议」的服务器,本文实测即围绕这套协议矩阵展开。
二、软件概述
本节交代 MediaMTX 的身份、许可与版本脉络,回答「它从哪来、现在由谁维护」。
MediaMTX(仓库 bluenviron/mediamtx,早期名为 rtmp-rtsp-server)是一个用 Go 语言编写的开箱即用的流媒体服务器:单进程、单二进制、零外部依赖,把 RTSP、RTMP、SRT、HLS、WebRTC、MoQ 六种协议的「推流(publish)」与「拉流(read)」在一个服务里互相打通。它不转码——推进来的每一路音视频 track 原样分发给所有协议的拉流端,因此 CPU 占用极低。
关键事实(均经实测或官方仓库核验,查询日期 2026-10-29):
- 许可证:MIT(包内 LICENSE 文件实测内容为 "MIT License, Copyright (c) 2019 aler9"),可商用、可嵌入
- 语言与形态:Go 静态编译单二进制(
file mediamtx实测回显首段:ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked),无 libc/运行时依赖 - 版本节奏:GitHub Releases 实查(2026-10-29),最新稳定版 v1.21.3(2026-10-25 发布);近半年稳定版序列 v1.20.1 → v1.21.0(2026-09-05,引入 MoQ)→ v1.21.1 → v1.21.2 → v1.21.3,约每 3~6 周一个补丁版
- 运行身份:默认监听端口矩阵(实测启动日志逐行见第五章)——RTSP 8554(+RTP/RTCP 8000/8001 UDP)、RTMP 1935、HLS 8888、WebRTC 8889(+ICE UDP 8189)、SRT 8890/UDP、MoQ 8892/8893、REST API 9997、metrics 9998、回放 9996
三、核心架构
理解 MediaMTX 的架构只需一个模型:path(路径)是流的枢纽,publish 源往里写,read 端从里读。本节拆解这个模型并给出实测佐证。
3.1 path 枢纽模型
MediaMTX 内部没有「频道」「房间」等复杂概念,核心抽象只有 path:
- publish 端:RTSP/RTMP/SRT 推流、WebRTC WHIP、拉流代理(source 指向另一台流服务器)、静态 MP4 文件,都可以成为某个 path 的唯一写者;
- read 端:同一条 path 可同时被 RTSP、RTMP、HLS、WebRTC、SRT 任意协议的任意数量读者消费;
- 协议互通:RTSP 摄像机推进来的流,浏览器走 WebRTC 看、手机走 HLS 看、另一台服务器走 SRT 拉走——全部发生在同一个 path 上,无需任何中间转推配置。
实测佐证:向 path cam 用 RTSP 推入 H264+AAC 两轨后,REST API 读回该 path 状态(实测回显,经 GET /v3/paths/get/cam):
name: cam | ready: True | tracks: ['H264', 'MPEG-4 Audio'] | bytesReceived: 4811342
tracks2: [{codec: H264, width: 640, height: 480, profile: High, level: 3},
{codec: MPEG-4 Audio, sampleRate: 44100, channelCount: 1}]
同一个 cam 路径随后被 HLS(index.m3u8)、SRT(streamid=read:cam_srt)、RTSP(rtsp://127.0.0.1:8554/cam)三种协议同时拉流成功,读者信息通过 readers 字段实时可见——这就是 path 枢纽模型的直接证据。
3.2 track 级转发,不转码
MediaMTX 对媒体内容只做「解封装—按 track 分发—再封装」,从不转码。推入什么编码(H264/H265/Opus/AAC…),拉出去就是什么编码。实测:RTSP 推入 H264 High profile 640x480 + AAC 44100Hz,HLS 分片经 ffprobe 读取(实测回显):
streams.stream.0.codec_name="h264" width=640 height=480
streams.stream.1.codec_name="aac" sample_rate="44100"
编码参数原样透传。这一设计的收益与代价都很明确:CPU/内存占用极低(实测 26 MiB 量级),但需要转码、录制转码版本的场景要外挂 FFmpeg 解决。
3.3 静态单二进制与监听矩阵
单进程内嵌全部协议服务,启动即监听完整端口矩阵。裸跑官方二进制的启动日志(实测回显):
2026/10/29 20:57:48 INF MediaMTX v1.21.3, linux, amd64
2026/10/29 20:57:48 INF configuration loaded from /opt/data/quzuo/tmp/mediamtx/mediamtx.yml
2026/10/29 20:57:48 INF [RTSP] started with listeners on :8554 (TCP/RTSP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2026/10/29 20:57:48 INF [RTMP] started with listener on :1935 (TCP/RTMP)
2026/10/29 20:57:48 INF [HLS] started with listener on :8888 (TCP/HTTP)
2026/10/29 20:57:48 INF [WebRTC] started with listeners on :8889 (TCP/HTTP), :8189 (UDP/ICE)
2026/10/29 20:57:48 INF [SRT] started with listener on :8890 (UDP/SRT)
2026/10/29 20:57:48 WAR [MoQ] certificate auto.key not found, generating it from scratch
2026/10/29 20:57:48 INF [MoQ] started with listeners on :8892 (TCP/HTTP2), :8892 (UDP/HTTP3), :8893 (UDP/QUIC)
首启动会自动生成一份带全部参数注释的配置文件(v1.21.3 中约 3.9 万字符、121 个全局参数),无配置文件时按内置默认值启动——上面的日志即是零配置直跑的结果。
四、功能特性
本节按实测结果列出 v1.21.3 的功能清单,每项都标注验证方式,便于读者自行复验。
4.1 六协议接入与分发(全部实测)
| 协议 | 推流 | 拉流 | 实测方式与结果 |
|---|---|---|---|
| RTSP | ✅ | ✅ | FFmpeg 推 testsrc 流(2 tracks)→ ffprobe 拉流解析出 h264+aac |
| RTMP | ✅ | ✅ | FFmpeg 以 flv 封装推送成功,服务端日志确认 publishing |
| HLS | — | ✅ | index.m3u8 主清单 + 媒体清单 + .mp4 分片(HTTP 200, video/mp4)拉取成功 |
| WebRTC | ✅(WHIP) | ✅(WHEP) | POST /cam/whep 信令实测返回 201 Created + SDP answer |
| SRT | ✅ | ✅ | streamid=publish:cam_srt:用户:密码 推流、streamid=read:cam_srt 拉流均成功 |
| MoQ | ✅ | ✅ | v1.21 新增;监听 8892(HTTP2/HTTP3)、8893(QUIC) 已随启动开启 |
低延迟 HLS(LL-HLS)是默认形态,媒体清单实测可见 EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=0.50000 与 EXT-X-PART-INF:PART-TARGET=0.20000——200ms 级 part 分片,端到端延迟可压到 2~5 秒内。
4.2 配套能力(实测确认)
- REST 控制 API(9997 端口):路径管理、配置热更新、连接/会话查询与踢出,共 121 个全局配置键可读写,详见《MediaMTX 1.21.3 API 使用详解》;
- Prometheus 指标(9998 端口):
/metrics实测输出paths{name="cam",state="ready"} 1、paths_inbound_bytes{name="cam",state="ready"}等 Prometheus 文本格式指标; - 录制与回放:
record: yes后按recordPath(默认./recordings/%path/%Y-%m-%d_%H-%M-%S-%f_%z)落 fMP4 分段文件,9996 端口提供回放 API; - 认证体系:内置用户表(
authInternalUsers,按 publish/read/api/metrics/pprof 动作+IP 段授权)、外部 HTTP 认证(authHTTPAddress)、JWT/JWKS(authJWTJWKS)三种authMethod实测确认存在; - 热配置:运行中
PATCH /v3/config/global/patch实测将logLevel从 info 切到 debug 立即生效,无需重启; - 拉流代理与按需拉流:path 的
source可指向上游 RTSP/RTMP/HLS/SRT 服务器,sourceOnDemand支持有人看才拉、无人看自动断。
五、快速开始
本节给出从零到看到流媒体跑起来的最短路径(官方二进制方式),全部命令与回显为实测。
5.1 下载与解压
# 下载官方 linux amd64 静态二进制包(约 28.5MB)
wget https://github.com/bluenviron/mediamtx/releases/download/v1.21.3/mediamtx_v1.21.3_linux_amd64.tar.gz
# 解压得到 mediamtx 二进制 + mediamtx.yml 默认配置 + LICENSE
tar -xzf mediamtx_v1.21.3_linux_amd64.tar.gz
ls -la
实测回显(⚠️ 网络说明:实测时 GitHub Releases 直连下载超时(curl 报 HTTP 000),改走代理 192.168.1.72:7897 下载成功,速度约 10.6 MB/s;内网读者请按自身网络选择渠道):
-rw-r--r-- 1 root root 28505612 mediamtx_v1.21.3_linux_amd64.tar.gz
-rw-r--r-- 1 root root 1062 LICENSE
-rwxr-xr-x 1 root root 56638950 mediamtx
-rw-r--r-- 1 root root 38940 mediamtx.yml
解压产物只有四件:一个 54MB 静态二进制、一份 3.9 万字符全注释默认配置、一份 MIT LICENSE。没有任何依赖需要安装——这是 MediaMTX 部署成本的下限。
5.2 启动与确认
./mediamtx
启动日志实测回显(核心行):
2026/10/29 20:57:48 INF MediaMTX v1.21.3, linux, amd64
2026/10/29 20:57:48 INF configuration loaded from /opt/mediamtx/mediamtx.yml
2026/10/29 20:57:48 INF [RTSP] started with listeners on :8554 (TCP/RTSP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2026/10/29 20:57:48 INF [RTMP] started with listener on :1935 (TCP/RTMP)
2026/10/29 20:57:48 INF [HLS] started with listener on :8888 (TCP/HTTP)
2026/10/29 20:57:48 INF [WebRTC] started with listeners on :8889 (TCP/HTTP), :8189 (UDP/ICE)
2026/10/29 20:57:48 INF [SRT] started with listener on :8890 (UDP/SRT)
验证服务已监听:
ss -ltn | grep -E '8554|1935|8888|8889|9997'
实测回显:
LISTEN 0 4096 0.0.0.0:8554 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:8888 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:8889 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:9997 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:1935 0.0.0.0:*
5.3 推一路流并拉下来看
用 FFmpeg 自带的测试源推 RTSP(真实场景把 -f lavfi 输入换成摄像机/编码器地址即可):
ffmpeg -re -f lavfi -i testsrc=size=640x480:rate=25 \
-c:v libx264 -preset veryfast -tune zerolatency -pix_fmt yuv420p \
-f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/cam
服务端日志确认入流(实测回显):
2026/10/29 21:02:04 INF [path cam] stream is available and online, 1 track (H264)
2026/10/29 21:02:04 INF [RTSP] [session 2c7cd013] is publishing to path 'cam'
换一个终端用 RTSP 拉回来验证:
ffprobe -v error -rtsp_transport tcp -show_streams -of flat rtsp://127.0.0.1:8554/cam 2>&1 | grep -E 'codec_name|width' | head -2
实测回显:
streams.stream.0.codec_name="h264"
streams.stream.0.width=640
此时浏览器打开 http://服务器IP:8889/cam(WebRTC 页)或 http://服务器IP:8888/cam(HLS 页)即可直接播放同一条流——协议互通开箱即用。
六、适用场景与限制
6.1 适用场景
- 摄像机接入与网页查看:RTSP 摄像机(Hikvision/Dahua/ONVIF 兼容设备均可推或拉)接入 → WebRTC/HLS 出给浏览器,延迟亚秒到数秒,是安防/物联场景的最短链路;
- 协议转换网关:上游只出 RTMP(如 OBS 推流),下游要 HLS/RTSP/SRT 消费,MediaMTX 一跳完成;
- 边缘采集节点:单机功耗低(几十 MiB 内存)、静态二进制可塞进任何小系统,适合部署在站点/工控机做前置采集,再经 SRT 上传中心;
- 低延迟分发:LL-HLS/WebRTC 两档低延迟输出满足网页端低延迟直播;
- 开发与测试:六协议 + REST API + 记录回放齐备,适合做流媒体链路的本地仿真与自动化测试。
6.2 限制(选型前必读)
- 不转码:需要统一码率/分辨率/编码(如播放端只支持 H264)时必须外挂 FFmpeg;
- 无内置集群:单机架构,横向扩展需自行在上游做分发树/负载均衡(官方定位即单机流服务器);
- 无内置鉴权 UI/管理后台:管理面是 REST API + Prometheus,界面层需自建;
- DRM/防盗链:仅提供基础认证与 TLS,商业 DRM 体系需外接。
七、同类选型对比
本节把 MediaMTX 与三个最常被放在一起比较的开源流媒体服务器量化对比。竞品版本实查日期均为 2026-10-29(SRS 最新稳定版 v6.0-r2 查自 GitHub Releases;ZLMediaKit 无 GitHub Release 版本发布惯例,按其 master 分支/官方文档口径,查询日主分支为持续更新态;MistServer 为 ddvtech 发行版 3.12)。
| 维度 | MediaMTX v1.21.3 | ZLMediaKit | SRS v6.0-r2 | MistServer 3.12 |
|---|---|---|---|---|
| 语言/形态 | Go,单静态二进制 | C++,单二进制+依赖库 | C++,单二进制 | C++,多组件 |
| License | MIT | MIT | MIT | AGPL-3.0(另有商业版) |
| RTSP 收流/发流 | ✅/✅ | ✅/✅ | ❌(RTSP 弱,RTMP 主打) | ✅/✅ |
| RTMP | ✅ | ✅ | ✅(最强生态) | ✅ |
| HLS/LL-HLS | ✅/✅(默认 LL-HLS) | ✅/✅ | ✅/✅ | ✅/✅ |
| WebRTC(WHEP/WHIP) | ✅/✅ | ✅/✅ | ✅/✅ | ✅/✅ |
| SRT | ✅ | ✅ | ✅ | ✅ |
| MoQ(QUIC) | ✅(v1.21 新增,实测监听 8892/8893) | ❌ | 实验性 | ❌ |
| REST 管理 API | ✅ 121 全局键,OpenAPI 规范随仓库分发 | ✅ | ✅ | ✅(内置 web UI) |
| 内存量级(单路推流实测/官方口径) | 约 26 MiB(本文实测) | 约 30~60 MiB(官方口径量级) | 约 40 MiB+(官方口径量级) | 约 60 MiB+(多进程组件合计) |
| 转码 | ❌(外挂 FFmpeg) | ❌(可挂 FFmpeg) | ❌(可挂 FFmpeg/Transcoding 模块) | 部分内置 |
| 上手成本 | 极低:零配置启动 | 中:需理解多模块配置 | 中:配置项多 | 低:自带管理界面 |
如何选型(一句话版):
- 要 RTSP 摄像机接入 + 浏览器低延迟查看、追求零依赖开箱即用 → MediaMTX(本文实测其 RTSP↔WebRTC/HLS 互通最顺滑、部署最轻);
- 要 RTMP 直播生态(CDN 推拉、连麦、录像审片等成熟方案最多)→ SRS;
- 要 国标 GB28181/级联、安防行业特性(ZLMediaKit 的独门强项)→ ZLMediaKit;
- 要自带管理界面与多协议内置转封装矩阵、接受 AGPL → MistServer(平台另有《MistServer 3.12 介绍与选型指南》可对照阅读)。
选 MediaMTX 后的落地路径:一键化部署见《MediaMTX 1.21.3 Docker Compose 部署指南》,参数逐项调优见《MediaMTX 1.21.3 配置参数详解》,自动化管理见《MediaMTX 1.21.3 API 使用详解》。
八、参考链接
- 官方仓库:https://github.com/bluenviron/mediamtx (v1.21.3 Release:2026-10-25,查询日期 2026-10-29)
- 官方文档:https://github.com/bluenviron/mediamtx/tree/main/wiki
- 官方默认全量配置(v1.21.3 解压自带 mediamtx.yml,38940 字节)
- 协议规范:LL-HLS(Apple HLS RFC 8216 扩展)、WHEP/WHIP(IETF draft-ietf-wish-whep)
- 本系列:《MediaMTX 1.21.3 Docker Compose 部署指南》、《MediaMTX 1.21.3 配置参数详解》、《MediaMTX 1.21.3 API 使用详解》