视频编码格式选择
概览
ZEGO Express Web SDK 使用 WebRTC 技术实现实时音视频功能,其中视频编码支持 H.264 和 VP8 两种格式。本文介绍了两种编码格式的优劣势,并根据业务场景选择适合的编码格式,帮助开发者更好的了解编码格式的选择。
兼容性说明
开发者在开始使用音视频业务前,可以使用 ZEGO Express Web SDK 提供的兼容性检测接口 checkSystemRequirements,对浏览器环境和设备做检测,并提示相关风险。
编码格式对比
两种编码格式对比如下:
编码格式 | 优势 | 劣势 |
---|---|---|
H.264 | 配套生态成熟,可直接转推 CDN,以及直接和小程序互通。 | 在移动端浏览器上支持度稍差,例如微信浏览器,WebView 等。 |
VP8 |
| 配套较差,不可直接转推 CDN,不可直接和小程序互通。 |
浏览器兼容性
桌面端
系统 | 浏览器 | H.264 | VP8 |
---|---|---|---|
Windows |
| ✔️ | ✔️ |
macOS |
| ✔️ | ✔️ |
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 官方说明。
移动端
Android
Android 支持自研 WebView 或引入第三方 WebView,不同设备、不同应用的 WebView 实现的方式有所不同,因此 ZEGO Express Web SDK 对不同应用版本和设备硬件的支持也有不同,推荐开发者在使用前进行兼容性检测。
浏览器 | 功能 | H.264 | VP8 |
---|---|---|---|
WebView | 推/拉流 | ✔️ | ✔️ |
Chrome 浏览器 | 推/拉流 | ✔️ | ✔️ |
其中 WebView 包含了如微信内置浏览器、企业微信内置浏览器、QQ 内置浏览器、钉钉、头条等。在这些 WebView 和 Chrome 浏览器中,关于浏览器版本、芯片类型和编码格式的使用限制说明如下:
限制名称 | 限制说明 |
---|---|
编码格式 | 使用 H.264 编码发送视频流可能会导致发送视频流的码率偏低,无法达到预期码率。 |
搭载芯片 | 在搭载联发科芯片的设备上无法使用 H.264 编码发送视频流。 |
浏览器版本及搭载芯片 |
|
iOS
iOS 只支持系统 WebView,因此 ZEGO Express Web SDK 对 WebView 的支持,仅与 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。
推荐方案
综合上述兼容性说明,以及 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 技术支持。