调整比特率
标准的WebRTC代码包含以下内容:
private BitrateAdjuster createBitrateAdjuster(VideoCodecMimeType type, String codecName) { if (codecName.startsWith(EXYNOS_PREFIX)) { if (type == VideoCodecMimeType.VP8) { // Exynos VP8 encoders need dynamic bitrate adjustment. return new DynamicBitrateAdjuster(); } else { // Exynos VP9 and H264 encoders need framerate-based bitrate adjustment. return new FramerateBitrateAdjuster(); } } // Other codecs don't need bitrate adjustment. return new BaseBitrateAdjuster(); }
从该代码可以看出,除Exynos外,其他所有芯片组都禁用了比特率调整功能。但是因为标准代码仅支持Exynos和Qualcomm,所以此设置仅适用于Qualcomm。在测试了此设置的不同值,也进行了一番网络搜索之后,我们发现带“ OMX.MTK”前缀的编解码器也应该启用这个功能。对于带有“ OMX.IMG.TOPAZ。”、“ OMX.hisi”和“ OMX.k3”前缀的HUAWEI编解码器。这是因为这些编解码器不使用帧时间点调整比特率,它们假定所有帧都以编解码器配置期间最初设置的速率到达。
最后,来看看我们收到的针对Android 5.0和5.1的编码器列表。我们对此很感兴趣,主要是因为在更新的Android版本上情况有所改善,非典型编解码器的数量正在减少。
如下图所示。为了更突出地显示非典型编解码器的情况,我们使用了对数标度。
如图,大多数设备都安装有展讯、联发科、华为和MARVELL的芯片组,这就是为什么我们的更改有助于在这些设备上启用硬件编码。
结论
尽管我们预测某些设备在使用H.264时会出现问题,但Android让我们非常惊艳。从用户统计数据中我们可以看到,有很多2014年至2016年期间生产,但现在仍在使用中的设备,它们要么不想更新,要么不能更新。尽管现在Android设备的新操作系统更新情况比几年前要好很多,但仍在使用的老旧设备所占比率正在缓慢下降。所以接下来很长一段时间内我们必须继续支持它们以实现更好的性能。
如今,Google正在积极开发WebRTC,并已在Stadia项目中应用该项目(了解详情请点击此视频)。因此,该项目会进一步发展,且很有可能成为视频通话实施的标准。我希望本文能帮助你了解使用H.264和WebRTC的细节,使你能把这些知识用到自己的项目中去。
相关阅读:
Android上的WebRTC——多设备如何启用硬件编码?(一)
Android上的WebRTC——多设备如何启用硬件编码?(二)
原文作者:Ivan Dyatlov