妮妮: 听说新的WebRTC版本支持H265,从 Chromium 136 版本起,WebRTC 正式把 H.265(HEVC)列为受支持的编解码器之一,浏览器会默认启用该能力。今天一起聊聊这个话题。

小新: 好的。但是很多网友其实想要的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.0(API 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年有望成为主流

妮妮: 今天的讨论对你是否有帮助,如果有,可以一键三连。有问题可以在评论区讨论。

关注《音视频小话》公众号,视频号;关注抖音号《小新快跑》

带来更多音视频技术。

Logo

火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。

更多推荐