低延迟直播方案:WebRTC + MediaMTX,延迟低于 500ms
在直播场景中,延迟往往是用户体验的关键。传统的 HLS 或 RTMP 直播延迟通常在 3-10 秒,这对于互动连麦、远程驾驶、在线教育等场景来说远远不够。那么有没有一种方案可以实现端到端延迟低于 500ms,且无需安装插件,直接用浏览器就能观看?答案是肯定的,今天我们就来介绍一套强大的组合:WebRTC + MediaMTX。
为什么是 WebRTC?
WebRTC(Web Real-Time Communication)是一种支持浏览器之间实时音视频通信的技术,其核心优势就是超低延迟(通常可达 200-400ms)。它基于 UDP 传输,配合 P2P 或通过 TURN 中继,天然适合实时流媒体场景。
但 WebRTC 本身是一个点对点协议,如果我们要做一对多的直播,就需要一个媒体服务器来分发流。市面上有很多选择,如 Janus、Licode、SRS 等,而今天的主角MediaMTX(原名 rtsp-simple-server)则因其轻量、易用、原生支持 WebRTC 输出而备受青睐。
MediaMTX 简介
MediaMTX 是一个开源的实时媒体服务器和代理,它支持多种协议:
- 输入:RTSP、RTMP、HLS、WebRTC(通过 WHIP)、SRT 等
- 输出:RTSP、RTMP、HLS、WebRTC(通过 WHEP)、SRT 等
也就是说,你可以将任何来源的流(如摄像头 RTSP、OBS 推 RTMP)推送到 MediaMTX,然后通过 WebRTC 拉流,在浏览器中无插件播放,延迟轻松控制在 500ms 以内。
实现<500ms 延迟的关键:WebRTC 配置
WebRTC 的延迟表现取决于网络穿透和传输策略。MediaMTX 内置了 WebRTC 输出模块,我们需要正确配置ICE、STUN 和 TURN,以确保在各种网络环境下都能稳定连接。
ICE、STUN、TURN 是什么?
- ICE(Interactive Connectivity Establishment):交互式连接建立,用于找到两端之间最优的通信路径。
- STUN(Session Traversal Utilities for NAT):客户端用来获取自己的公网 IP 和端口,实现 NAT 穿透。
- TURN(Traversal Using Relays around NAT):当 P2P 直连失败时,通过中继服务器转发数据,虽然会增加一点延迟,但能保证连通性。
为了让浏览器能够连接到 MediaMTX(通常是内网或云服务器),我们需要在配置中指定 STUN/TURN 服务器地址。
实战:配置 MediaMTX 启用 WebRTC
1. 安装 MediaMTX
从 GitHub Releases 下载对应平台的二进制文件,解压后即可运行。Linux/macOS 用户也可以直接使用 Docker:
docker run --rm -it -p 8554:8554 -p 1935:1935 -p 8888:8888 -p 8889:8889 -v $PWD/mediamtx.yml:/mediamtx.yml bluenviron/mediamtx
2. 修改配置文件 mediamtx.yml
MediaMTX 的配置文件为 YAML 格式。关键 WebRTC 配置段如下:
# WebRTC 服务器配置
webrtc:


