实时音视频
  • iOS
  • Android
  • macOS
  • Windows
  • HarmonyOS
  • Linux
  • Web : JavaScript
  • 小程序
  • Flutter
  • Electron
  • Unity3D
  • uni-app
  • React Native
  • Cocos Creator
  • 产品简介
  • 下载
  • 体验 App
  • 快速开始
    • 跑通示例源码
    • 集成 SDK
    • 实现视频通话
    • 场景化音视频配置
  • 基础功能
  • 进阶功能
  • 最佳实践
  • 常见错误码
  • 服务端 API
  • 客户端 API
  • 常见问题

视频编码格式选择

更新时间:2022-07-21 11:39

1 概览

2011 年,Google 收购了 GIPS,WebRTC 项目由此诞生。
2017-11-02,W3C WebRTC 1.0 草案正式定稿。
2021-01-26,WebRTC 协议发布为正式标准。

WebRTC 协议最早由 Google 牵头,经过漫长岁月沉淀和优化,如今已成为 W3C 的正式标准。早在草案阶段,主流浏览器就开始提供 WebRTC 支撑。虽然 W3C 划定了 WebRTC 协议和接口标准,但具体到不同浏览器上,实现方式和策略则有所不同,相应的编码方案也会有不同。

ZEGO Express Web SDK 使用 WebRTC 技术实现实时音视频功能,其中视频编码支持 H.264VP8 两种格式。本文介绍了两种编码格式的优劣势,并根据业务场景选择适合的编码格式,帮助开发者更好的了解编码格式的选择。

2 兼容性说明

开发者在开始使用音视频业务前,可以使用 ZEGO Express Web SDK 提供的兼容性检测接口 checkSystemRequirements 接口,对浏览器环境和设备做检测,并提示相关风险。

2.1 编码格式对比

两种编码格式对比如下:

编码格式 优势 劣势
H.264
配套生态成熟,可直接转推 CDN,以及直接和小程序互通。
在移动端浏览器上支持度稍差,例如微信浏览器,WebView 等。
VP8
  • Google 主推,在 Chrome 浏览器中的表现优于 H.264 格式,且完全开源。
  • 在移动端浏览器上兼容性更好,例如微信浏览器,WebView 等。
配套较差,不可直接转推 CDN,不可直接和小程序互通。

2.2 浏览器兼容性

2.2.1 桌面端

系统 浏览器 H.264 VP8
Windows
  • Chrome
  • Edge
  • Firefox
✔️
✔️
macOS
  • Chrome
  • Safari
  • Edge
  • Firefox
✔️
✔️
ChromeOS
Chrome
✔️
✔️
  • Chrome

    • 在所有使用 AMD 芯片和部分使用 Intel 芯片的 Windows 设备上,Chrome 使用 H.264 编码时,发送码率可能达不到设定值。建议开发者可以使用 VP8 编码或者尝试关闭硬件加速。
    • macOS 上 Chrome 84 存在缺陷,采用 H.264 格式进行编码时,WebRTC 可能会出现帧率突然下降,从而导致图像卡顿的情况。详情请参考 Google 官方说明 Issue 1088650 和 Issue 12704。建议开发者在 macOS 上 Chrome 84 或以上版本中使用 VP8 格式。
  • Safari

    Safari 12.1 或以下版本,仅支持 H.264 编解码。

  • Firefox

    在使用 Apple M1 芯片的 Mac 设备上,Firefox 不支持 H.264 编解码,详见 Firefox 官方说明


2.2.2 移动端

Android

Android 支持自研 WebView 或引入第三方 WebView,不同设备、不同应用的 WebView 实现的方式有所不同,因此 ZEGO Express Web SDK 对不同应用版本和设备硬件的支持也有不同,推荐开发者在使用前进行兼容性检测。

浏览器 功能 H.264 VP8
WebView
推/拉流
✔️
✔️
Chrome 浏览器
推/拉流
✔️
✔️

其中 WebView 包含了如微信内置浏览器、企业微信内置浏览器、QQ 内置浏览器、钉钉、头条等。在这些 WebView 和 Chrome 浏览器中,关于浏览器版本、芯片类型和编码格式的使用限制说明如下:

  • 编码格式:使用 H.264 编码发送视频流可能会导致发送视频流的码率偏低,无法达到预期码率。
  • 搭载芯片:在搭载联发科芯片的设备上无法使用 H.264 编码发送视频流。
  • 浏览器版本及搭载芯片
    • 在 Android Chrome 88 以下版本,搭载华为海思麒麟芯片的设备无法使用 H.264 编码发送视频流。
    • 在 Android Chrome 81 以下版本,搭载联发科或华为海思麒麟芯片的设备无法使用 H.264 解码接收视频流。由于ZEGO Native SDK 发送的视频流默认为 H.264 编码,所以如果房间内有推流端使用 ZEGO Native SDK,在使用华为海思麒麟或联发科芯片的设备上,Web SDK 接收 H.264 编码格式的流时,必须使用 Chrome 81 或以上版本。

iOS

iOS 只支持系统 WebView,因此对 Web SDK 的支持,仅与 iOS 系统版本有关。

浏览器 功能 H.264 VP8
WebView(微信内置浏览器等)
推流
✔️(iOS 14.3 或以上版本)
拉流
✔️(iOS 12.1.4 或以上版本)
✔️(iOS 12.2 或以上版本)
Safari 浏览器
推/拉流
✔️(iOS 11 或以上版本)
✔️(iOS 12.2 或以上版本)

在 iOS 上使用 H.264 编码格式推流,无法将 1080p 或以上分辨率的视频推送到 CDN。

3 推荐方案

综合上述兼容性说明,以及 ZEGO 市场用户数据统计,不支持 VP8 的设备占比相对较少,VP8 在浏览器的兼容性方面,略优于 H.264。因此:

  • 业务场景以 Web 平台为主时,建议开发者使用 VP8 编码格式
  • 如果开发者的业务场景中,涉及到 Web、iOS、Android、Windows、macOS 等多端平台,如果想保证良好的多端兼容性,建议开发者使用 H.264 编码格式

具体的场景推荐如下:

主播端 观众端 推荐编码格式 优点 缺点 应用场景
WebRTC
WebRTC
VP8
兼容性最好,质量最佳。
-
银行/证券开户
CDN
H.264
无需转码。
主播端推流时,部分机型不支持 H.264 编码格式。
秀场直播
VP8
推流端兼容性较好。
需手动转码。
小程序
H.264
无需转码。
主播端推流时,部分机型不支持 H.264 编码格式。
银行/证券开户
  • Web 端拉流时,不需要指定编码格式,SDK 会根据推流编码,自动选择格式。
  • Web 端选择 VP8 编码格式和 Native UDP 互通时,Native 需要指定 VP8 编码格式(默认构建支持)。

不论选择 H.264 还是 VP8,都需要先对使用的浏览器进行兼容性检测。开发者可以通过 checkSystemRequirements 接口,对浏览器进行兼容性检查,这也是 SDK 自动选择编码的前提条件。

转码,是指将视频信号从一种格式转换成另一种格式。在 ZEGO 服务中,支持音视频编码格式、分辨率、码率等的转换,开发者可以参考 混流转码示例 Demo。如有疑问,请联系 ZEGO 技术支持。