HTML5原生不支持RTSP,iOS尤其受限;可行方案仅服务端转HLS或WebRTC网关中转,或改用原生App通过AVFoundation/FFmpeg实现低延迟播放。

HTML5 原生不支持 RTSP,iOS 上更不可能直接用 播 RTSP 流。这不是兼容性问题,而是协议层根本缺失——RTSP 是控制协议,依赖 RTP/UDP 传输,而 HTML5 只认 HLS、DASH、MP4 等基于 HTTP 的媒体格式。
为什么 iOS + RTSP 特别难搞
iOS 的限制比安卓更硬:
-
WebRTC在 Safari 中长期不支持接收裸RTP包(iOS 16.4+ 才开始有限支持RTCPeerConnection接收,但需服务端转成VP8/VP9/H.264overWebRTC,且不兼容传统 RTSP 设备) - Safari 禁止
XMLHttpRequest或fetch读取二进制流后手动解包(无法像桌面 Chrome 那样靠MediaSource Extensions+ 解码器 JS 库拼凑播放) - 没有
getUserMedia以外的底层音视频帧注入接口,Canvas渲染 H.264 帧在 iOS Safari 上性能极差甚至崩溃
可行路径只有两条:服务端转封装 or 客户端绕过浏览器
真正落地的方案只有这些,别试“纯前端 JS 解 RTSP”:
-
服务端转 HLS:用
ffmpeg或GStreamer拉取rtsp://xxx,实时转成HLS(.m3u8+.ts分片),再由 iOS加载。注意:ffmpeg要加-hls_time 2 -hls_list_size 3控制延迟,否则首屏 >10s -
WebRTC 网关中转:用
Janus、Medooze或Wowza接入 RTSP 源,暴露为WebRTC端点;前端调用RTCPeerConnection连接(iOS 16.4+ Safari 支持)。关键点:offer/answer必须协商H.264,禁用VP8(iOS 不支持 VP8 解码) -
放弃 Web,改用原生 App:iOS App 可用
AVFoundation直接播 RTSP(通过AVPlayerItem+ 自定义AVURLAsset协议处理),或集成FFmpeg+VideoToolbox硬解。这是唯一能接近安防级低延迟(
常见错误和坑点
很多人卡在看似“能连上”的假象里:
立即学习“前端免费学习笔记(深入)”;
- 用
curl rtsp://...能收到响应 ≠ 浏览器能播——那只是 TCP 握手成功,不代表媒体流可被 HTML5 消费 - 误以为
hls.js能播 RTSP:它只处理HLS,你得先有.m3u8,不是把rtsp://地址丢给它 - 在 iOS 上测试
WebRTC方案时忽略证书:Safari 强制要求https://+ 有效 TLS 证书,localhost或自签名证书会静默失败 - 用
ffmpeg -i rtsp://x -c copy -f hls ...直推 HLS,但源流是H.265—— iOS Safari 不支持 HEVC over HLS,必须加-c:v libx264转码
真正在 iOS 上跑通 RTSP 播放,核心不在前端写多少 JS,而在服务端是否稳定输出 Safari 认的格式,以及是否接受 2~5 秒的合理延迟。想压到 1 秒以内?别碰浏览器,原生走起。










