妮妮: 听说新的WebRTC版本支持H265从 Chromium 136 版本起WebRTC 正式把 H.265HEVC列为受支持的编解码器之一浏览器会默认启用该能力。今天一起聊聊这个话题。小新: 好的。但是很多网友其实想要的H265并不是WebRTC提供的那种。妮妮: 那是什么原因呢小新: 首先H265在WebRTC中的支持仅仅支持Main、Main 10你可以直接记忆带B帧的编码都不可以妮妮: 那是为什么呢小新: 在客户端解码播放侧为了做到低延时不能有B帧出现的。因为B帧依赖前后参考帧才能解码。B 帧必须同时拿到前面和后面最近的 I/P 帧才能正确解码这种“双向依赖”会把解码顺序和显示顺序拉开一个时间差导致延迟显著增加。而 WebRTC 的核心场景是实时音视频对延迟极度敏感因此直接禁用 B 帧以保持端到端的低延时。妮妮: 也就是说很多行业想用到的高压缩率的H265是没法在WebRTC中播放因为很多高压缩率的视频流在一个gop中会带有多个B帧以此来提高压缩率。小新: 是的不仅仅是H265之前的H264也仅仅支持baseline profile和最低的main profile都是不带B帧的。妮妮: 看来WebRTC的视频压缩率真的不高可以说比较低。小新: 是的而且lib WebRTC在ios上的限制也非常多。 仅支持 H265 解码不支持编码若需推流必须自行集成 VideoToolbox 或 FFMPEG等外部编码器。需要开发者自己适配一下。妮妮: 那安卓系统呢小新: 官方 Android libwebrtc 仅开放 H.265 解码不提供 H.265 编码接口如需推流必须自行集成 MediaCodec 硬编或 FFmpeg 软编。系统与硬件差异Android 5.0API 21以上才具备完整的 HEVC 硬解能力旧版本需回退到软解或转码。不同芯片厂商高通、海思、三星等对 HEVC 硬解的支持程度不一部分低端机可能出现花屏、卡顿或无法播放。妮妮: 我的天这么多限制那要支持H265是一个系统工程而且老的手机可能就支持不了。那是不是WebRTC就没办法支持高清视频小新: 不是的。更适合WebRTC高清的编码是VP9其编码方式不需要B帧且压缩率与H265在同一水平。妮妮: 但是VP9并没有在工业界普及。小新: 是的H.265 抓住了硬件换代和传统视频产业的“最后一公里”VP9 虽然在 Web 场景占了一席之地却错过了硬件普及的黄金期又被 AV1 的高效率分流最终没能全面普及。妮妮: AV1也是遥遥无期据说是编码算法消耗的算力太大导致。小新: AV1 压缩效率虽好但移动端实时编码的算力、功耗、硬件覆盖三重门槛让它目前仍停留在“高端尝鲜”阶段离真正普及还有距离。尽管AV1编码复杂度高但随着苹果A17、高通骁龙8 Gen 3等新一代芯片集成AV1硬编解支持以及YouTube、Netflix等平台推动AV1在移动端的落地正在加速。虽然实时推流尚处早期但未来2–3年有望成为主流妮妮: 今天的讨论对你是否有帮助如果有可以一键三连。有问题可以在评论区讨论。更多内容关注公众号《音视频小话》