做流媒体这行越久,越会发现一个有意思的现象:每当 WHIP、WHEP、MoQ 这类新协议出现在朋友圈和社区首页时,总有人觉得 RTSP、RTMP、GB28181 这些“老家伙”该退休了。我在项目例会上听过不止一次类似的判断,可真到了落地阶段,前端摄像机取流、无人机场回传、国标平台对接、CDN 上行推流,离开 RTSP、RTMP 和 GB28181,反而寸步难行。
这篇文章不想唱衰新协议,也不想给旧协议续命,只想把一件事拆开讲透:为什么要一边拥抱 WHIP、WHEP 与 MoQ,一边还是得把 RTSP、RTMP、GB28181 这些传统协议做扎实。我会结合平时调试推流、拉流、国标接入的真实经历,把新旧协议各自的定位、网关桥接思路、常见踩坑点都梳理一遍。正在做直播系统、安防平台、低延迟互动或者流媒体架构的同学,应该能从中找到一些可以直接参考的判断方法和联调手段。
1. 浏览器时代催生了新协议,但监控机房和直播机房依然是旧协议的天下
1.1 新协议解决的是“从浏览器到服务器”的最后一公里
WebRTC 本身不是新东西,十多年前就已经出现在浏览器里,但真正让 WebRTC 从一个“浏览器内置能力”变成“可配置的流媒体通道”的,是最近几年逐渐标准化的 WHIP 和 WHEP。
WHIP 全称 WebRTC-HTTP Ingestion Protocol,解决的问题很直接:让推流端像使用 RTMP 地址一样,通过 HTTP 语义把 WebRTC 媒体流交给服务器。以前想在浏览器里做低延迟推流,开发者要自己写 WebSocket 信令、ICE 协商、DTLS 握手,每一步都有无数细节;现在 WHIP 把创建 Offer、交换 SDP、建立 PeerConnection 收敛成一次 POST 请求。服务器返回一个会话资源地址,推流端按这个地址把媒体发过去,一个完整可用的推流通道就算建起来了。从工程复杂度看,这是从“手搓协议栈”到“调用统一接口”的转变。
WHEP 是配套的拉流封装。它可以理解为一个“WebRTC 播放地址”,播放端请求这个地址,服务器回 SDP,浏览器与服务器之间自动完成媒体协商和传输。对前端工程师来说,低延迟播放从一个需要维护复杂 JS 库和信令服务器的难题,变成了一个“拉一条 URL”的任务。
单看这两个协议,它们确实补齐了 WebRTC 长期以来的短板:接入成本。但为什么很多实际项目里,摄像头还是走 RTSP,直播推流还是走 RTMP,国标平台还是走 GB28181?这就得看看机房和现场设备的实际情况。
1.2 先看一张协议能力对照,再谈“新旧替代”
我在项目里习惯先给团队拉一张协议对照表,不是为了炫概念,而是为了说明一个基本事实:每种协议都有自己的主场,新协议的主场在浏览器和低延迟分发,旧协议的主场在设备接入和存量生态。
| 协议 | 传输基础 | 延迟特征 | 主要使用场景 | 标准和生态状态 |
|---|---|---|---|---|
| WHIP | WebRTC/ICE/DTLS/SRTP | 亚秒级 | 浏览器、App 低延迟推流 | IETF 标准,社区支持快速铺开 |
| WHEP | WebRTC/ICE/DTLS/SRTP | 亚秒级 | 浏览器低延迟播放 | IETF 标准,播放器生态逐步完善 |
| MoQ | QUIC/WebTransport | 亚秒级,目标规模化 | 未来 CDN 低延迟分发 | IETF 草案,产品化初期 |
| RTSP | TCP/UDP + RTP/RTCP | 秒级到亚秒级 | 安防监控、IPC、NVR、无人机 | 成熟标准,设备兼容性最好 |
| RTMP | TCP | 1-5 秒 | 直播上行、CDN 推流 | 事实标准,Flash 时代遗留,但生态庞大 |
| GB28181 | SIP + RTP/RTCP | 秒级 | 国内视频监控平台互联互通 | 国家标准,强制场景多 |
看这张表会发现一个规律:新协议几乎都长在“浏览器友好”和“低延迟”上,旧协议长在“设备兼容”和“行业标准”上。真正的大型项目里,它们不是替代关系,更多是接入层与分发层的互补关系。
我印象很深的一个项目是给园区做视频汇聚,前端摄像机 300 多路,海康、大华、宇视混着用,取流清一色 RTSP URL,平台侧还要对接上级国标平台。这种场景里,别说是 WHIP,就算 MoQ 成熟到可以上生产,也没人会把 300 路摄像头全部改成 WebRTC 推流。原因很朴素:摄像头固件不会刷,NVR 不会刷,验收标准里写的也是国标和 RTSP。旧协议的价值,恰恰藏在那些“不会轻易换代”的存量设备里。
2. WHIP 和 WHEP 真正解决的老大难:把 WebRTC 变成“一条可配置的 URL”
2.1 WHIP 推流:信令从迷宫变成一次 POST
过去做 WebRTC 推流,最劝退的就是信令部分。推流端和服务器之间要交换 Offer/Answer,要考虑 ICE 候选的收集和连通性检查,还要处理 DTLS 握手对媒体传输的绑定。这些问题不是不能解决,但每个项目都要重新踩一遍,尤其是接入方不理解 WebRTC 细节时,联调周期会被拉得很长。
WHIP 的设计思路是“把复杂度交给框架,把简单留给接口”。推流端向 WHIP 端点发送一个 HTTP POST 请求,请求体是应用层 SDP Offer,Content-Type 是 application/sdp。服务器解析后创建自己的 Answer,通过 201 Created 响应返回,同时在 Location 响应头里给一个资源地址,这个地址后续可以用于 ICE 重启动态更新。媒体协商完成之后,推流端就可以按标准 WebRTC 流程发送 SRTP 媒体流。
用 FFmpeg 举例,现在很多版本已经内置了 WHIP 输出支持,命令行可以简化成类似这样:
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 2000k \ -bf 0 -g 50 -c:a opus -f whip \ http://127.0.0.1:8080/whip这里有两个参数值得注意:-bf 0把 B 帧关掉,-g 50把关键帧间隔压到 2 秒左右,这两个参数会在后面的编码部分专门展开说明。从工程角度讲,WHIP 真正解决的不只是信令简化,而是把一个“只有 WebRTC 专家才能玩转的协议”,变成了“普通后端和客户端团队也能快速接入的接口”。
服务端这边,MediaMTX、SRS 等媒体服务器已经陆续支持 WHIP 端点。想快速验证,可以起一个 SRS 或者 MediaMTX 容器,拿到 WHIP URL 后用 FFmpeg 推流,再用自带的播放页或者 VLC 拉流看效果。这一步跑通之后,整个低延迟推流的骨架基本就立起来了。
2.2 WHEP 拉流:让 HLS 延迟不再成为唯一选择
WHEP 解决的是观看端的问题。目前最常见的浏览器播放方案是 HLS,优点是兼容性好、CDN 成熟,缺点是切片和缓冲带来的延迟少说也有 5 到 10 秒,互动场景根本没法用。
WHEP 的思路和 WHIP 对称:播放端向服务器发起一个会话请求,拿到 SDP Answer 和资源地址,然后建立 WebRTC PeerConnection,媒体流就通过 RTP 传下来。延迟可以做到几百毫秒到 1 秒左右,浏览器端不需要安装任何插件,原生能力就能播放。
我去年做一个在线培训系统时,最初用 HLS 推流,主持人和学员之间一问一答,延迟大得离谱。后来改成 WHIP 推流 + WHEP 播放,终端延迟降到 1 秒内,主持人提问、学员回答的节奏一下就正常了。这里有个细节:WHEP 播放和普通 HLS 播放的差异化要提前设计好,因为 WHEP 需要维持 WebRTC 连接,播放端数量上来后,媒体服务器的并发压力比纯 HLS 大不少。低延迟从来不是白来的,对应的是服务器资源和架构复杂度。
2.3 接入 WHIP/WHEP 时必须处理的编码前提
这是我在实际接入里踩得最深的一块,也最容易被忽略。
WebRTC 媒体传输对编码参数有天然要求,最典型的就是 H.264 不能依赖长 B 帧序列。原因很简单:WebRTC 是面向实时通信设计的,B 帧引入了解码顺序和显示顺序的差异,会增加端到端延迟,还会让丢包恢复时的参考帧管理变得复杂。很多 RTMP 推流工具默认开 B 帧,直接用 FFmpeg 把 RTMP 流转成 WHIP 推流时,如果不做转码或者不关 B 帧,接收端就会出现频繁花屏、黑屏甚至无法解码。
同样的道理也适用于关键帧间隔。RTMP 生态里 GOP 可以到 4 到 5 秒甚至更长,但 WebRTC 场景下 GOP 太长会导致新加入的观看者要等很久才能等到可解码的关键帧。实测下来,H.264 + 2 秒左右的关键帧间隔是比较稳妥的组合。
转封装时还需要注意音频格式。WebRTC 默认音频是 Opus,很多 RTSP/RTMP 源是 AAC。如果媒体服务器没有自动完成音频协商和转码,推上去之后有画面没声音的情况非常常见。我自己调试时习惯先推纯视频流验证画面,再推纯音频流验证声音,最后才合流测试,能省下不少排查时间。
在服务端选择上,SRS、MediaMTX 这类媒体服务已经做了很多 WebRTC 的适配,包括 RTP 封装和编码参数的兼容处理,但并不能完全解决源流编码不规范的问题。特别是从第三方采集端拿流时,先跑一遍 FFmpeg 做参数校验,把 B 帧关掉、把关键帧间隔压下来,再交给 WHIP 端点,是最省心的做法。不要指望下游所有播放器都能容忍源流的不规范,提前在编码层把隐患排掉,远比事后排查来得划算。
3. MoQ 的想象力建立在 QUIC 之上,但它离生产环境还有一段距离
3.1 为什么 MoQ 选择 QUIC/WebTransport,而不是继续躺在 TCP 上
MoQ 的全称是 Media over QUIC,不是一个单一协议,而是一族基于 QUIC 和 WebTransport 的媒体传输协议。要理解 MoQ,先得理解它为什么选择 QUIC。
RTMP 和 HLS 都跑在 TCP 上,TCP 的可靠性用“队头阻塞”做了交换。一个包丢了,后续已经到达的包也要排队等重传,整条流的吞吐和延迟都会受影响。对于 10 秒级别的直播,这个影响还能接受;对于秒级和亚秒级的大规模互动直播,TCP 的队头阻塞几乎是不可接受的。
QUIC 做了两件关键的事:第一,多路复用,多条独立流之间不会互相阻塞;第二,把可靠传输从流级别拆细,允许部分数据以不可靠方式传输,适合丢帧但不丢链路的媒体场景。MoQ 把媒体数据建模成对象和消息,通过 WebTransport 的流概念在 QUIC 连接上传输,天然支持多个图层、多个轨道并行。就好比以前是所有货车挤在同一条老国道上,一辆车抛锚,整条路堵死;MoQ 是修了一条多车道高速,每条车道相对独立,抛锚的车只影响它所在的车道。
3.2 MoQ 真正想改变的是大规模低延迟分发
WHIP 和 WHEP 解决的是客户端与服务器之间的接入,MoQ 更想解决的是服务器与服务器之间的分发,尤其是 CDN 场景下的低延迟分发。
WebRTC 在点对点和中小规模会议里表现很好,但到了几十万观众的直播场景,SFU 的并发压力会非常大。每个观看者都需要一条独立的 PeerConnection,服务器要维护大量 ICE 会话、DTLS 状态、SRTP 上下文,跨区域调度和级联更是麻烦。MoQ 的思路则是把媒体当成可以在 HTTP/3 边缘节点上转发、缓存、处理的对象,CDN 基础设施不需要专门为 WebRTC 建一套昂贵的信令和媒体链路,可以直接复用 WebTransport 的传输能力。理想情况下,MoQ 可以做到“边缘节点就近取流、节点之间按需转发”,实现更大规模下的亚秒级分发。
我现在对 MoQ 的定位是“未来的分发层协议”,它和 WHIP/WHEP 不是二选一的关系。比较可能出现的组合是:WHIP 负责推流接入,WHEP 负责播放接入,MoQ 负责中间的分发网络。只不过这个组合目前还是拼图状态。
3.3 现阶段我对 MoQ 的态度:值得实验,不要梭哈
MoQ 的问题在于标准化和生态都还在早期。IETF 里相关草案还在迭代,不同实现之间互通性不够稳定,浏览器端 WebTransport 的 API 虽然已经可用,但媒体播放相关的能力还比较原始。这个时候把它直接放进生产架构,风险比收益大。
我自己的做法是在测试环境起一个 MoQ 中继,用很小的并发量做延迟和抗丢包实验,验证它在大文件推流和弱网场景下的表现。生产环境里,该用 RTMP 推流还是继续用 RTMP,该用 HLS 分发还是继续用 HLS,最多在 WebRTC 场景里把 WHIP/WHEP 作为正式方案。等 MoQ 的 RFC 和主流客户端支持更成熟,再考虑把分发层迁过去,那时候可以少交很多学费。
4. RTSP、RTMP 和 GB28181 为什么到现在依然退不下去
4.1 RTSP:安防摄像头、NVR、无人机和企业内网的首选“语言”
RTSP 全称 Real Time Streaming Protocol,1998 年就有了,比大多数从业者的从业时间还长。它本身是控制协议,真正承载音视频数据的是 RTP/RTCP,所以看 RTSP 流时经常看到两个端口或者一组 RTP 端口。
在安防领域,RTSP 的地位几乎不可撼动。海康、大华、宇视这些厂商的 IPC 和 NVR 都内置 RTSP 服务,取流地址格式虽然各家有差异,但大体是固定套路。海康常见格式是:
rtsp://username:password@ip:554/Streaming/Channels/101其中 101 表示通道 1 主码流,102 表示通道 1 子码流,设备端口默认 554。大华的常见格式是:
rtsp://username:password@ip:554/cam/realmonitor?channel=1&subtype=0subtype=0 是主码流,subtype=1 是子码流。不同厂家固件还可能支持 RTSP over TCP、UDP 和 HTTP 隧道等方式,调试时最好先用 VLC 或 FFprobe 验证一遍,确认 URL 能拉到流再写代码。
RTSP 之所以退不下去,核心原因是生态绑定。低端 IPC 的固件只实现了 RTSP,NVR 和视频管理平台默认支持的也是 RTSP,项目里的门禁、闸机、无人机这些设备,只要涉及视频,很多还是走 RTSP URL。比如无人机行业应用里,地面站从无人机机载相机取流,往往就是一个 RTSP 地址,这比让每个无人机都实现完整的 WebRTC 信令和媒体栈要现实得多。移动端做 RTSP 缓存或者录像回放时,原生播放器基本不支持 RTSP,通常要先拉流到本地再转封装或转码,这个工作量也是项目里经常被低估的一块。
调试场景里,GStreamer 的 rtsp server 工具很有用。平时验证播放器或者联调媒体服务器时,可以直接用test-launch起一个 RTSP 测试源:
./test-launch "( videotestsrc pattern=ball ! video/x-raw,width=1280,height=720,framerate=30/1 ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"这样一个本地 RTSP 测试地址就起来了,用来验证拉流客户端、边缘网关和转码链路,比拿真实摄像机反复测试要方便得多。
4.2 RTMP:存量播放器、CDN 上行和推流生态的压舱石
RTMP 从 Flash 时代一路走到现在,很多人以为它早该消亡,但它在直播上行业务里依然是绝对的头部协议。
RTMP 的典型地位是“上行协议”。直播团队用 OBS 往 CDN 推流,绝大多数情况走的是 RTMP 地址;CDN 直播服务商对外提供的推流接入,也普遍保留 RTMP 端口。原因很简单:RTMP 基于 TCP,实现简单,网络抖动时不容易出现诡异的断流和花屏;FFmpeg、OBS、各类推流 App 对 RTMP 的支持最完整,几乎不存在兼容性问题。对直播平台来说,推流端可以百花齐放,但统一走 RTMP 可以显著降低接入成本。对嵌入式设备来说,RTMP 只需要一个简单的 TCP 连接和 FLV 封装,推流端实现难度远低于 WebRTC 那套 ICE/DTLS 栈。
我平时测试媒体服务器时,经常用这样一条命令验证 RTMP 推流链路是否正常:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://127.0.0.1/live/test这里用-c copy直接复用原视频编码,省掉转码。大多数 RTMP 服务器(SRS、Nginx-RTMP)默认都能接收。
RTMP 还有一个价值是延迟可控。在浏览器端,HLS 延迟高是因为切片等待;RTMP 本身延迟可以做到 1 到 3 秒,配合 HTTP-FLV 播放可以做到低延迟的玩家体验。很多低延迟直播解决方案,实际上是一条 RTMP 上行、FLV 分发的链路,而不是直接上 WebRTC。这不是技术落后,而是在成本和可维护性之间做平衡。所以 RTMP 不会因为 WHIP 出现就消失,至少在 CDN 和直播工具链全面转向之前,它还是“旧协议里的压舱石”。
4.3 GB28181:国内视频监控互联互通的“行业规则与技术底座”
GB28181 全称《安全防范视频监控联网系统信息传输、交换、控制技术要求》,标准本身很厚,但概括起来就是一句话:用 SIP 做信令,用 RTP 做媒体,把不同厂家的视频监控设备和平台连成一个互通网络。
为什么 GB28181 退不下去?因为它不只是技术协议,更是行业规则。在很多国标化的视频监控项目里,设备要能注册到平台,平台要能调取实时视频、语音对讲、录像回放、云台控制,跨平台还要能级联互调,这些能力都明确指向 GB28181。也就是说,做安防平台或者硬件设备,不会 GB28181 等于接不了国内的主流项目。
以语音对讲为例,GB28181 通过 SIP 信令建立媒体会话,语音数据的编码通常是 G.711 或者 G.729 这类窄带语音编码,和 WebRTC 里的 Opus 完全不同。平台和设备之间要做对讲,必须先协商好语音编码、传输端口、RTP 方向。实际联调时,经常出现设备端只上报 PCMA 编码,平台却用其他编码回传,结果出现单侧无声的问题。这类问题不是 GB28181 协议本身难,而是不同厂家的实现细节不一致导致的兼容性细节坑。
无人机行业应用里,GB28181 也有明确位置。像大疆的经纬 M300 RTK、M200 系列、御 Mavic 2 行业版,都支持通过 GB28181 接入指挥平台。这意味着无人机的实时画面可以通过 SIP 注册和 RTP 传输直接送到应急指挥、安防监控、边缘计算网关,而不需要依赖某个厂家的私有云。这在实际的行业集成项目里非常关键,因为采购方不会允许无人机图像被锁死在厂商自己的平台里。
GB28181 的媒体传输也支持多种 RTP 封装模式,比如 TCP 和 UDP。不过信令默认走 SIP,媒体端口通常是动态协商的,比固定 RTSP 端口的调试要复杂。常见问题在于:设备注册成功后,平台请求实时视频,信令层面显示 200 OK,但视频出不来。这种情况大半是媒体端口不通,要么是 NAT 映射没做好,要么是防火墙只放行了 SIP 信令端口,没有放行 RTP 媒体端口区间。调试 GB28181 时,先把媒体端口段拿到手,在防火墙上放通,能解决一大半问题。
5. 新旧协议共存的对接实践:从 RTSP/GB28181 桥到 WHIP/WHEP
5.1 网关转发是短期内最稳妥的“新旧共处”方案
面对存量设备和新增低延迟需求,最务实的方案不是把旧设备推翻重来,而是用一个媒体网关做协议转换。媒体网关一侧接入 RTSP、RTMP、GB28181 这些旧世界的流,另一侧输出 WHIP、WHEP、WebRTC 给浏览器和低延迟终端。
具体怎么做?以 ZLMediaKit 为代表的开源媒体服务,已经把这套能力做到了开箱即用的程度:GB28181 设备注册进来,平台内可以拉 RTSP 流、推 RTMP 流、也可以通过 WebRTC 输出;反过来,RTSP 流也可以被转成 WebRTC 播放。SRS 在 WebRTC 推拉流、RTMP 接收、HLS 分发之间也提供了比较完整的协议桥接能力。这类网关的价值在于:设备侧一台都不用动,存量系统继续跑 RTSP/GB28181,新增的浏览器低延迟场景直接通过 WHIP/WHEP 复用同一路流。
我在实际项目中比较推荐的路径是三层结构:
- 接入层:摄像头走 RTSP,国标平台走 GB28181,无人机和移动终端按设备能力走 RTMP 或 SRT;
- 网关层:用媒体服务器统一收流、统一转封装,需要时做必要的转码;
- 分发层:存量播放器继续走 RTMP/HTTP-FLV/HLS,新型终端和浏览器走 WHIP/WHEP。
这样做的好处是,每一层都可以独立升级。比如网关层换一个性能更强的媒体服务器,分发层加一路 WHIP 输出,都不需要改动前端设备和现有的业务代码。
5.2 我在实际对接中踩过的几个坑
新旧协议并存的项目,坑往往集中在协议转换的边界上。我把踩过的几个典型问题列出来,方便对照排查。
第一个坑:RTSP URL 在 FFprobe 里能拉流,但媒体服务器拉流断断续续。这个我查过好几次,最后定位到是摄像机只允许有限的并发会话。VLC 或 FFprobe 占着一个会话,媒体服务器再去拉流就容易被设备拒绝或踢掉。解决方法是确认设备最大路数,联调时关闭多余的测试客户端,同时尽量用子码流做测试,减轻设备解码压力。另一个相关问题是网络环境下 RTP over UDP 的丢包,媒体服务器拉 RTSP 可以显式指定 TCP 传输:
ffmpeg -rtsp_transport tcp -i "rtsp://user:pass@ip/Streaming/Channels/101" -c copy output.flv第二个坑:WHIP 推流成功后播放端一直黑屏。起因在源流的编码参数上。RTMP 推流通常允许 B 帧和较长的 GOP,但 WHIP/WebRTC 对这两样都不友好。之前接手过一个项目,采集端是硬件编码器,默认开了 B 帧,推到 WHIP 端点后画面一直卡在首帧。最后在编码器参数里把 B 帧禁掉,GOP 设置为 2 秒,现象立刻消失。
第三个坑:GB28181 设备注册成功、信令 200 OK,但平台拉不到视频。这是典型的媒体端口不通。GB28181 的 SIP 信令和 RTP 媒体走的是不同端口段,很多网络环境只放通了 SIP 端口,没有放通动态协商出来的媒体端口。调试时先把国标平台配置里的媒体端口段固定下来,再在防火墙上放通对应 TCP/UDP 端口,问题基本能解决。
第四个坑:GB28181 语音对讲单侧无声。这个坑和编码协商有关。端到端的语音要对讲,双方必须协商到同一种音频编码和负载类型。很多设备默认只支持 PCMA 或 PCMU,平台如果按 Opus 或 AAC 去发送音频,对端根本解不了。遇到单侧无声,先抓包看 RTP 里的 payload type,再检查设备能力集里的编码列表,把平台侧发送编码强制改成设备支持的编码,声音就回来了。
第五个坑:时间基准不统一导致音画不同步。RTSP 流和 RTMP 流的 RTP 时间戳,和 WebRTC 期望的时间戳调整逻辑不一样。直接转封装不做时间戳修正,会出现声音越走越飘、画面延迟慢慢变大的情况。这种情况多半是源流是可变帧率,或者是音频采样的时间基准和视频不同。用 FFmpeg 统一转成 CFR、重新生成音频时间戳,再接 WHIP 推流,比在媒体服务器里反复调参数更稳。
5.3 一套可以照着用的联调自查清单
提示:协议转换里,排障先看编码参数和时间基准,再看网络和端口。80% 的黑屏、花屏、音画不同步都出在前两者上。
老话讲,天下流媒体,排查多半在协议边界。我自己整理了一份自检清单,每次新旧协议对接都用它过一遍:
- 先用 FFprobe 探测源流编码,记录视频编码、profile、帧率、是否 B 帧、音频编码和采样率;
- RTSP 源先确认取流地址在 VLC/FFprobe 里能播放,再用 TCP 传输测试;
- RTMP 源注意 flv 封装的时间戳,确认推流端没有用 VFR;
- GB28181 设备确认注册状态、心跳正常,拿到设备能力集中支持的编码列表;
- 媒体服务器统一配置对外暴露的媒体端口段,防火墙放通对应 UDP/TCP;
- WHIP/WHEP 接入前,源流转码时加
-bf 0,GOP 压到 2 秒以内; - 音频尽量统一成 WebRTC 友好的 Opus,如果无法转码,确认服务器支持 AAC for WebRTC;
- 用播放端看首帧时间、画面花屏频率、音画同步误差三个指标做最终验收。
这套清单看起来琐碎,但能挡住大多数协议转换常见的坑。我每次联调项目的节奏都是:先跑清单,再查状态,最后才去翻抓包和分析日志。
6. 我的选型判断:什么时候继续死守旧协议,什么时候积极拥抱新协议
6.1 按场景做减法:监控存量、直播上行、大并发分发
我个人的选型经验是,不按“新旧”去选,按“接入、分发、播放”三种角色去选。
接入侧,监控摄像头、NVR、国标平台、无人机等设备形态,以 RTSP 和 GB28181 为主,短期内不要因为新协议去改设备。设备端不支持 WHIP 是硬约束,强行在边缘加转码成本太高。设备接入就应该发挥存量设备的最大价值,用它们最稳定的协议接入。
上行侧,直播场景里 RTMP 依然是性价比最高的选择。推流端生态成熟,CDN 普遍支持,排障手段丰富。只有在明确需要“浏览器直接推流 + 低延迟”的场景,才优先考虑 WHIP。
播放侧,面向浏览器的低延迟需求,WHEP/WebRTC 是值得主推的方案,延迟能做到亚秒级;面向普通用户大规模观看且对延迟不敏感,HLS 依然是最稳妥的分发方式。不要把“低延迟”当成所有直播场景的默认需求,要看你服务的业务到底能不能从低延迟里获得实际价值。
大规模分发侧,MoQ 现在可以开始做实验性验证,但不要把它写进要交付的项目方案里。除非你的团队对该草案和 WebTransport 有深入理解,否则过早引入 MoQ 只会增加交付风险。
6.2 最现实的演进路径:旧协议做接入,新协议做分发
综合来看,我认为未来两三年最现实的流媒体架构形态是“新旧混合,网关桥接”。
旧协议负责接入存量设备,新协议负责面向新型终端的低延迟分发。两者在一个媒体网关内部完成转换,各自发挥各自的长处。设备端不用换,业务代码不用推翻,浏览器端获得低延迟能力,CDN 端可以继续按老链路跑。这套路径的好处是风险小、成本可控、迭代平滑。
如果你现在的系统只有 RTSP 和 RTMP,可以先在媒体服务器上加 WHIP/WHEP 端点,用最小链路验证浏览器低延迟播放的效果;如果项目里已经有 GB28181 平台,再叠加一个 WebRTC 输出,就能让监控平台在浏览器里获得低延迟体验。等到 MoQ 成熟了,再把分发层逐步迁过去,这就是一个能落地的演进方向。
最后再分享一个体感:协议选择这种事,最怕被“新旧之争”带节奏。真正有效的决策,是把协议当作适配业务的工具,而不是当作信仰。哪个协议在你的场景里最容易接入、最容易维护、最容易在出问题时被排查清楚,它就是当下最合适的方案。