MediaMTX 1.21.3 介绍与选型指南

基于 MediaMTX v1.21.3 实测:path 枢纽架构、RTSP/RTMP/HLS/WebRTC/SRT/MoQ 六协议矩阵、26MiB 级资源占用,与 ZLMediaKit/SRS/MistServer 量化选型对比。

MediaMTXMediaMTX流媒体RTSPWebRTCRTMP2026/10/29

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/RTPTCP+UDP0.2~1s摄像机(IPC/ NVR)标准接入
RTMPTCP1~3s编码器/推流软件(OBS)推流
HLSHTTP(TCP)630s(LL-HLS 可到 25s)网页/移动端大并发分发
WebRTCUDP<0.5s浏览器实时观看、双向通话
SRTUDP(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 适用场景

  1. 摄像机接入与网页查看:RTSP 摄像机(Hikvision/Dahua/ONVIF 兼容设备均可推或拉)接入 → WebRTC/HLS 出给浏览器,延迟亚秒到数秒,是安防/物联场景的最短链路;
  2. 协议转换网关:上游只出 RTMP(如 OBS 推流),下游要 HLS/RTSP/SRT 消费,MediaMTX 一跳完成;
  3. 边缘采集节点:单机功耗低(几十 MiB 内存)、静态二进制可塞进任何小系统,适合部署在站点/工控机做前置采集,再经 SRT 上传中心;
  4. 低延迟分发:LL-HLS/WebRTC 两档低延迟输出满足网页端低延迟直播;
  5. 开发与测试:六协议 + 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.3ZLMediaKitSRS v6.0-r2MistServer 3.12
语言/形态Go,单静态二进制C++,单二进制+依赖库C++,单二进制C++,多组件
LicenseMITMITMITAGPL-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 使用详解》。

八、参考链接