在网页上播放摄像头RTSP视频流:实时摄像头在线播放的几种架构


发布者 ourjs  发布时间 1787274026703
关键字 智能硬件 

方案简述

WebSocket + FFmpeg

  • 架构:后端用 FFmpeg 采集摄像头流(如 RTSP),转码为 fMP4 分片,通过 WebSocket 推送到浏览器;浏览器使用 Media Source Extensions (MSE) 接收并播放。
  • 典型延迟:1~3 秒(受 MSE 缓冲区、GOP 大小影响)。

WebSocket + FFmpeg + WebCodecs

  • 架构:FFmpeg 输出原始编码流(如 H.264 Annex‑B),通过 WebSocket 推送;浏览器直接使用 WebCodecs API 解码每一帧,绘制到 Canvas 或 Video 标签。
  • 典型延迟:< 100 ms(无容器缓冲,逐帧解码)。

WebRTC + FFmpeg

  • 架构:FFmpeg 转码后,将流推送到 WebRTC 媒体服务器(如 Janus、SRS、Mediasoup),媒体服务器再通过 WebRTC 分发给浏览器。需要完整的信令和 TURN/STUN 服务。
  • 典型延迟:200~500 ms(WebRTC 底层基于 UDP,低缓冲)。

WebRTC + MediaMTX

  • 架构:MediaMTX (原 rtsp-simple-server) 直接从摄像头拉取 RTSP 流,不解码不转码,把源编码(通常 H.264)直接封装成 WebRTC 兼容的 RTP 包发给浏览器。内置信令,支持 WHIP/WHEP。
  • 典型延迟:< 200 ms(纯转发,接近源延迟)。

多维度对比

端到端延迟 1~3 秒(中等) < 100 ms(极低) 0.2~0.5 秒(低) < 0.2 秒(极低)
浏览器兼容性 ⭐⭐⭐⭐⭐ 所有支持 MSE 的浏览器(Chrome、Firefox、Safari、Edge) ⭐⭐ 仅 Chromium 系(Chrome/Edge/Opera),Safari 实验性支持,Firefox 不支持 ⭐⭐⭐⭐⭐ 所有现代浏览器均原生支持 WebRTC ⭐⭐⭐⭐⭐ 同 WebRTC,要求编码为 H.264(主流都支持)
服务端 CPU 消耗 高(FFmpeg 软件编码)
可启用 GPU 加速降低
高(同上,转码 + 裸流输出) 中高(转码 + SFU 转发) 极低(纯封装转发,不碰编码数据)
实现复杂度 中(需实现 WebSocket 服务 + 前端 MSE 播放器) 高(需处理裸流拆帧、WebCodecs 解码器状态管理、音视频同步) 高(需部署信令 + TURN + 媒体服务器,FFmpeg 推流) 低(直接配置 MediaMTX 源与 WebRTC 输出,前端用简单 WHIP/WHEP 客户端)
可扩展性 一般(TCP 连接,服务端需做广播或每路单独转推,并发压力大) 较好(可广播同一裸流,解码在客户端,但 TCP 连接数受限) 优秀(SFU 架构,轻松支持一对多,内置带宽/拥塞控制) 优秀(轻量转发,单进程可承载数百甚至上千路观看,无需转码瓶颈)
对网络抖动的适应性 较弱(TCP 队头阻塞,波动时延迟累积) 较弱(TCP,易卡顿) 强(UDP + 自适应码率/抗丢包机制) 强(WebRTC 原生拥塞控制 + 抗丢包)
音视频质量/灵活性 可控(可灵活调整编码参数、码率、分辨率) 可控,且能实现极低码流延迟 可控,支持 Simulcast、SVC 等高级特性 不可控(直接透传源编码,无法调参;若源编码不兼容需额外转码)
安全性 可结合 WSS + Token 鉴权 同左 DTLS‑SRTP 加密,内建安全机制 DTLS‑SRTP 加密,可配合 HTTPS 信令
适用场景 兼容性要求极高,延迟可接受,如普通监控网页观看 内部系统、实时交互,且能控制浏览器(如使用 Chrome) 通用实时通信,多对多,需要转码或动态调整质量 已有 IP 摄像头(H.264),追求极致低延迟、低服务器成本的监控上云/内网播放

针对实时摄像头在线播放,这四种方案涵盖了从传统转码推流到现代超低延迟架构的演进。下面是它们在不同维度上的对比分析。

WebSocket + FFmpeg

  • 优点:浏览器兼容性无敌;实现方案成熟(常用 Node.js + FFmpeg + flv.js / MSE)。
  • 缺点:延迟较高,TCP 下网络波动会劣化体验;服务端转码 CPU 压力大,大量并发时需要复杂的转发架构。

WebSocket + FFmpeg + WebCodecs

  • 优点:延迟达到 “画面即到” 级别;可对每一帧做前处理(如 Canvas 叠加分析)。
  • 缺点:浏览器兼容极差,Firefox 完全不支持;开发难度大(需手动处理 NAL 单元、排序、同步),维护成本高。

WebRTC + FFmpeg

  • 优点:标准的低延迟方案,兼容性与延迟平衡最好;SFU 为大规模分发而生,支持网络自适应。
  • 缺点:架构重,需要运维信令和 TURN 服务;FFmpeg 转码仍是资源消耗大户。

WebRTC + MediaMTX

  • 优点:零转码开销,部署极为轻量(一个二进制 + 一个配置文件即可);延迟趋近于源;一键将 RTSP 摄像机变为 WebRTC 能力。
  • 缺点:强依赖源编码格式(必须是浏览器支持的 H.264 + Opus/AAC),对于 H.265、MJPEG 等非主流摄像头需要外面包一层 FFmpeg 转码才能喂给 MediaMTX,此时会退化成类似 “WebRTC + FFmpeg + MediaMTX” 的混合架构。

选型建议

  1. 追求极致简单 + 现有 H.264 摄像头 → WebRTC + MediaMTX
    几乎无需编码,配置 5 分钟即可让摄像头在浏览器亚 200ms 播放。服务器性能开销极低。

  2. 需要低延迟但对不同编码/分辨率有转码要求 → WebRTC + FFmpeg (SFU)
    通用性强,能弥补源流格式的不足,且 WebRTC 生态完善,适合公网复杂网络环境。

  3. 浏览器环境严格受限(如内网老系统),对延迟不敏感 → WebSocket + FFmpeg (MSE)
    兼容性最好,实现资料最多,能快速上线。

  4. 实验性项目或能完全掌控客户端(如 Electron 或 Kiosk 应用),且要求“零”延迟 → WebSocket + FFmpeg + WebCodecs
    在特定场景下性能极致,但要容忍兼容性差和开发代价高。

综合来看,WebRTC + MediaMTX 是当今将传统摄像头实时上 Web 的最优解,兼具低延迟、低资源占用和低运维成本;若摄像头编码不合规,再引入 FFmpeg 转码的 WebRTC 方案作为兜底。









  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA