平台与跨端
WebRTC 在浏览器是一回事,跨端落地是另一回事。本目录给出浏览器矩阵、libwebrtc、移动原生、小程序与 uni-app 的实际差异。
阅读顺序(计划)
| 顺序 | 文件 | 解决的问题 |
|---|---|---|
| 1 | 浏览器兼容矩阵.md | Chrome/Firefox/Safari/Edge 与 WebView |
| 2 | iOS-WKWebView差异.md | playsinline、自动播放、内存限制 |
| 3 | 移动原生libwebrtc.md | iOS Framework、Android AAR、编译 |
| 4 | ReactNative与Flutter.md | react-native-webrtc、flutter_webrtc |
| 5 | 微信小程序方案.md | live-pusher / live-player + TRTC |
| 6 | uni-app跨端策略.md | 条件编译,按端选 SDK |
平台支持总览(2026-06)
| 平台 | 原生 WebRTC API | 备选方案 |
|---|---|---|
| Chrome / Edge | ✅ 完整 | — |
| Firefox | ✅ 完整 | — |
| Safari macOS / iOS | ✅(部分 API 滞后) | — |
| Android WebView | ✅ Chromium 同步 | — |
| iOS WKWebView | ✅(iOS 14.3+) | — |
| Electron | ✅ Chromium 同步 | — |
| 微信小程序 | ❌ | live-pusher/player + TRTC |
| 支付宝小程序 | ❌ | 蚂蚁实时音视频 |
| 抖音小程序 | ❌ | 厂商 SDK |
| 鸿蒙 | ⚠️ 实验性 | — |
微信小程序的特殊地位
国内业务绕不开微信小程序。微信不支持 WebRTC API,但提供:
<live-pusher>/<live-player>:基于 RTMP/HLS 的标签,延迟 1~3s,不是真正 P2P。- 腾讯 TRTC 小程序版:基于 WebRTC 协议族但用厂商封装,需腾讯账号。
- 声网 / 即构:同类替代。
跨端架构通常是:
应用层接口(你的统一 SDK)
├── Web → 原生 WebRTC
├── 移动原生 → libwebrtc / TRTC SDK
└── 小程序 → TRTC / 声网 小程序 SDK
详见 uni-app跨端策略.md 与 L6-跨端连麦SDK。
浏览器互通踩坑速查
| 现象 | 涉及平台 | 原因 |
|---|---|---|
| Safari 收不到 VP9 | iOS < 16 | Safari 早期只硬解 H.264 |
| Firefox 没有 TWCC | 部分版本 | 检查 extmap |
| iOS Safari 自动暂停 | 全版本 | 锁屏 / 切到后台 |
| Android WebView 高耗电 | 全 | 默认软件渲染 |
| Edge 旧版(基于 EdgeHTML)不支持 | < 2020 | 已无业务考虑必要 |
反模式
| 反模式 | 后果 |
|---|---|
不区分平台直接用 RTCPeerConnection | 小程序直接报错 |
| 假设 Safari 与 Chrome 100% 一致 | 在 iOS 上各种小问题 |
把 H.264 profile 写死 64...(高) | Safari 互通失败 |
WebView 内嵌外站 iframe 不加 allow=... | 摄像头权限被拒 |
移动端不监听 mute/unmute | 锁屏唤醒后画面冻死 |
权威资料
- WebRTC samples 浏览器测试: https://webrtc.github.io/samples/
- iOS WKWebView 文档: https://developer.apple.com/documentation/webkit/wkwebview
- 微信小程序实时音视频: https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html
- TRTC 小程序: https://cloud.tencent.com/document/product/647/17018
- 核对日期:2026-06-22