关于webrtc:Android-设备音视频兼容性适配

4次阅读

共计 4114 个字符,预计需要花费 11 分钟才能阅读完成。

导读:WebRTC 是一个十分优良的我的项目,能够反对 Web、iOS、Android、Mac、Windows、Linux 在内的所有平台的 API,保障了 API 在所有平台的一致性。然而 WebRTC 在挪动端的体现跟 PC 相比,显得不是那么令人满意,尤其是在 Android 零碎上,Android 零碎的本身碎片化曾经被诟病已久。每一次的 Android 系统升级,每个芯片厂商、手机厂商都会基于 Android 零碎做一些定制化,造成了即便是同样的 Android 零碎版本,同样的 Android 规范 API 调用,不同设施体现不一样。所以如果不针对不同机型做适配,很难达到对立的用户体验,性能的稳定性也很难保障。

RTC 场景中要想在 Android 设施上实现高牢靠、稳固、低延时、设施通用,音视频兼容性适配必不可少。Android 设施相干参数精细化配置、智能化配置,就是本文思考的重心。

如何精细化配置

支流 SOC (System On Chip) 计划都是基于 Linux/Android 零碎开发,然而各家却各有千秋。高通 SOC 次要利用在手机设施上,编解码性能和稳定性都比拟弱小,视频超编问题管制的比拟好;MTK 和 MStar 并购后,除了手机产品,在机顶盒和大屏产品上利用很广,往往能够通过 MTK 自有参数,开启一些性能。此外不同的芯片版本计算性能高下不同,计算性能高下不同会影响音视频性能的开启,比方视频的前后解决。目前支流的芯片计划如下图:

基于上述不同的 SOC 平台,各类设施厂商会定制化不同的 Android 智能设施,而每类设施的性能特点也不一样。

比方:

  • Android phone:手机的电池耗电量要求绝对严格,设施须要满足 360 角度旋转的体验等;
  • Android TV 大屏设施:

    • 有些应用的是外接 camera;
  • 在声音采集场景中,人跟设施的间隔往往比拟远,对高音质音频数据采集有挑战;
  • Android Watch:设施屏幕比拟小,CPU 性能绝对较弱等;

手机设施是最常见的设施,也是用户使用率十分高的设施。大部分手机制造商都针对 Android 零碎做了定制化,所以各家有各家的 ROM。手机厂商通常会对 Android 的 Framework、HAL 以及 Linux driver 做定制化批改,导致不同手机即应用同一款 SOC,也会产生不同的体现。支流 Android 手机品牌及定制 ROM 如下图:

所以根据上述剖析,设施兼容性问题这么多,对于以音视频为次要场景的产品,从音频和视频模块都须要做到精细化兼容性适配。次要能够参考的配置参数能够包含(目前没有全副都开启可配置)如下的功能模块:

  • 音频:基本功能、音效、音频策略等
  • 视频:基本功能、视频前后解决等

具体的参数如下图:

如何智能化配置

对于音视频的兼容性配置,须要满足参数的可更改性、时效性、灵活性、自动化以及可回退。目前的 Android 参数下发配置计划能够分为以下四种:

上面,咱们就针对这四点具体开展聊聊,剖析其优缺点。

兼容性代码 BuiltIn

兼容性计划是间接在代码逻辑中做解决。这种计划,只能笼罩一部分场景,比方针对不同 Android SDK 版本做兼容性适配以及曾经在测试中十分明确的配置。

  • 益处:间接写在 SDK 中,不存在从服务端下发的状况,不占用网络带宽,高效。
  • 毛病:然而对于线上呈现问题的非凡机型,往往设置不够灵便。当线上的不同用户,呈现较多问题的状况时,须要通过更改 SDK 来解决问题,这往往有种远水解不了近渴的感觉。

本地文件配置

本地文件配置的形式是:通过读取本地指定目录下的配置文件来参数失效,往往在 SDK 初始化时即进行这一步操作。

  • 益处:不须要从新打包 SDK,能够间接将配置文件放到指定目录即可将参数失效,也不须要到服务器批改下发参数即可失效。比拟适宜本地调参的场景。
  • 毛病:然而没法解决线上客户问题的远距离批改。

服务器参数下发

服务器下发参数设定,能够随时通过下发参数,管制设施相干性能参数。

  • 益处:线上用户遇到兼容性问题,间接通过服务端下发参数批改,能够几分钟内解决用户问题。
  • 毛病:通过服务器下发,须要占用服务器资源,如果下发参数文件过大,会影响 SDK 初始化工夫。

自动化策略抉择

参数的自动化策略抉择,是通过对不同的零碎版本、不同的 CPU 计算能力、芯片平台等因素进行综合思考,对不同功能模块的参数组合,造成几套参数模版,比方低性能要求参数模版,或者品质优先参数模版。当不适合的参数设置导致问题时,有比较完善的回退机制能够回退到根本的参数配置,以保障基本功能可工作。

兼容性适配的规定

以上两章介绍了精细化配置的常见参数和智能化配置的计划,那么不同设施型号、不同业务场景、不同零碎版本,如何进行辨别?

上面,咱们具体介绍一下,制订兼容性适配规定的几个维度。

依据单个设施适配

手机制造商基于新的 Android 零碎做定制化的时候,很难做到完全一致,这种差异性在音视频畛域就更加。每个设施的唯一性,能够依据设施的硬件制造商、主板、设施版本、设施参数来标识唯一性。

依据设施 CPU 适配

依据 CPU 的计算能力进行适配,通常为了适配一些对于计算性能要求比拟高的性能,比方视频前后解决等。抉择这种形式适配后,只有是同样 CPU 型号的所有设施,都能实现适配。

依据零碎版本适配

每一次 Android 零碎更新,会波及到对应音视频 API 的相干性能改变。须要依据 Android 零碎版本号,进行对应的适配。

依据不同利用业务适配

不同的业务,对于音视频的适配侧重点不同。比方多人会议场景,对于音视频的实时性、弱网下的稳定性要求比拟高,并且对于音频降噪,回音打消要求都比拟高;云游戏场景下,对视频的分辨率、提早度要求高;娱乐业务中的音乐播放,比方云音乐的一起听性能,对音质的要求比拟高,并且对于音频设备路由策略上,有特殊要求,例如从蓝牙播放音乐,然而从手机 mic 采集音频数据;这些场景都要通过不同参数适配来达到要求。

依据 IOT 设施类型适配

Android 零碎被利用在各个 IOT 设施中,从而产生十分多的适配场景。比方电视大屏,因为屏幕比拟大,所以要求视频内容是高分辨率、高帧率的,从而对于采集和编解码的能力要求比拟高;而且市场中存在一些能够 360 度旋转的电视,须要在显示角度上进行适配;在大屏的音质方面,因为人跟电视往往间隔比拟远,所以在声音采集和回音打消上的解决跟手机又不太一样。

兼容性适配常见的音视频问题

咱们上面来聊聊常见的音视频兼容性适配的呈现的问题,其产生的起因以及咱们时是如何解决的。

音频兼容性常见问题

音频兼容性常常会呈现音质、音量、音频策略的问题,上面咱们选取其中几种,简略剖析此类问题的解决办法。

  • 遇到问题:音频延时过大或者延时不稳固

    • 解决办法:创立 Android 自采集的时候,AudioRecord 中设置的 Buffer 大小影响采集端提早,从而影响 AEC 算法精准度。
  • 遇到问题:蓝牙 A2DP 模式下,从蓝牙播放,然而却无奈从设施 mic 采集

    • 解决办法:辨别蓝牙 SCO/A2DP 模式下,AudioSource、AudioMode 的类型
  • 遇到问题:发送端音量低

    • 解决方案 1:采集到的音频数据源音量比拟低,通过软件 AGC 算法音量加强;
    • 解决办法 2:批改 AudioSource,局部手机尤其老手机,AudioSource.VOICE_COMMUNICATION 模式声音偏低或者音频通路解决有问题;
  • 遇到问题:音频播放音质偏低

    • 解决办法:AudioTrack streamType 应用 AudioSystem.STREAM_MUSIC;

  • 遇到问题:Audio 3A 相干参数(AEC AGC,ANS);景象是声音忽大忽小,人声克制,背景乐音重大,音量过高或者过低

    • 解决办法:通常是硬件 3A 和软件算法 3A 的舍短取长。

还有一些调用零碎 API freeze,应用 OpenSL ES 无奈播放等问题,咱们也摸索了相应的解决方案,在此不再赘述。

视频兼容性常见问题

视频兼容性常常会呈现卡顿、显示画面异样、编解码失败的问题,上面咱们选取其中几种,简略剖析此类问题的解决办法。

  • 遇到问题:采集画面有红条:

  • 解决方案:特定分辨率,帧率,导致采集有红色条纹
  • 遇到问题:采集图像黑:

  • 解决方案:特定帧率,导致曝光问题。
  • 遇到问题:偶现采集画面割裂

  • 解决方案:纹理采集格局导致
  • 遇到问题:局部手机 Camera2 采集有绿边

    • 解决方案:Camera2 不兼容
  • 遇到问题:硬件编码理论码率跟编码码率相差大

    • 解决方案:局部手机即便 Mediacodec 设置是 CBR,码率稳定还是大
  • 遇到问题:硬件编码的码流有黑边后者绿边:

    • 解决方案:输出数据的长和宽没有依照 stride 对齐,编码器无奈进行兼容
  • 遇到问题:硬件解码器无奈创立:

    • 解决方案 1:设置给解码器的 format 不对,比方色彩空间,编码器名字,是否渲染到的 suface 等;
    • 解决方案 2:超出 SOC 所能反对的最高 decoder 个数;

还有一些调用零碎 API freeze、MTK 芯片非凡问题解决,采集帧率不稳固,解码失败等,咱们也摸索了相应的解决方案,在此不再赘述。

屏幕共享兼容性常见问题

屏幕共享是视频采集中的非凡一种,也存在跟设施相干的一些问题。常见的有画面卡住、采集数据有黑边等问题,上面咱们简略剖析此类问题的解决办法。

  • 遇到问题:手机屏幕画面处于静止时,采集帧率为 0

    • 解决办法:缓存一帧数据,定时发送
  • 遇到问题:采集数据黑边

    • 解决办法:设置的分辨率与屏幕分辨率不匹配,零碎会用彩色数据填充。更改采集分辨率。

结尾

网易云信音视频 SDK 致力于为每一位用户实现高清、稳固、易用、低延时的服务。通过本文的介绍,网易云信有很欠缺的兼容性适配计划,来补救 Andriod 碎片化对用户带来的体验上的有余,同时也积攒了十分多的兼容性适配教训,以满足不同应用场景,不同设施类型和型号带来的各种奇形怪状的问题。

每一支设施的适配,都是匠人之心的倾泻;

每一步产品的研磨,都是精益求精的付出。

作者介绍

Iven,网易资深 Android 音视频开发工程师,始终从事 Android 音视频 SDK 性能开发,期间负责网易云信的 G1 和 G2 的相干研发工作,同时也负责基于 Android 智能硬件的相干音视频适配工作,适配产品包含手机、电视、手表、机顶盒、智能音响等。

立刻举荐

更多技术干货,欢送关注【网易智企技术 +】微信公众号

正文完
 0