WebRTC-codecs
WebRTC 默认支持多种音视频编解码器(codec),它们的支持情况取决于浏览器实现、平台、操作系统等。以下是 WebRTC 常用的编解码器及其说明:
🎥 视频编解码器(Video Codecs)
编解码器 | 简介 | 浏览器支持 | 说明 |
---|---|---|---|
VP8 | 开源,谷歌开发,WebRTC 默认支持的编解码器之一 | ✅ Chrome, Firefox, Safari, Edge | 实时性能好,压缩率适中,支持视频通话和录制 |
VP9 | VP8 的后续版本,压缩效率更高,但编码复杂度高 | ✅ Chrome, Firefox, Edge(部分) | 更节省带宽,适合高质量低码率,但实时性略差于 VP8 |
H.264 (AVC) | 工业标准,广泛支持,硬件加速好 | ✅ Chrome, Firefox, Safari, Edge | 通用性强,支持硬件编解码,适合跨平台场景 |
AV1 | 新一代高压缩率视频编解码器,免专利费 | ✅ Chrome, Firefox(实验性或部分) | 编码复杂度高,延迟大,不适合低延迟实时场景(目前) |
🔊 音频编解码器(Audio Codecs)
编解码器 | 简介 | 浏览器支持 | 说明 |
---|---|---|---|
Opus | 为实时通信优化的现代编解码器 | ✅ 所有主流浏览器 | WebRTC 默认音频编解码器,支持宽频带、窄频带,音质好,适应性强 |
G.711 (PCMU/PCMA) | 传统音频编码标准 | ✅ 大部分浏览器 | 延迟低,占用带宽高,音质一般(多用于兼容 PSTN 电话系统) |
ISAC / iLBC | 谷歌早期开发的低码率语音编解码器 | Chrome 内置支持(已逐步弃用) | 老旧,Opus 已完全替代其功能 |
📦 编解码器协商
WebRTC 使用 SDP (Session Description Protocol) 来协商编解码器:
- 浏览器通过 RTCPeerConnection 交换 SDP 报文。
- 报文中会列出本地支持的编解码器(带优先级)。
- 双方从交集中选择兼容的 codec。
- 可以通过 RTCRtpSender.setCodecPreferences() 或修改 SDP 强制某个 codec
例如,以下是 SDP 中的 codec 列表示例:
ini
m=video 9 UDP/TLS/RTP/SAVPF 96 98 100
a=rtpmap:96 VP8/90000
a=rtpmap:98 VP9/90000
a=rtpmap:100 H264/90000
✅ 小结:推荐组合
场景 | 推荐视频 codec | 推荐音频 codec |
---|---|---|
通用实时通话 | VP8 | Opus |
带宽受限,需高压缩率 | VP9 / H.264 | Opus |
与硬件设备兼容 | H.264 | G.711 / Opus |
高质量录制(非实时) | AV1 | Opus |