技术实践 | Android 设备音视频兼容性适配
導讀:WebRTC 是一個非常優秀的項目, 可以支持 Web、iOS、Android、Mac、Windows、Linux 在內的所有平臺的 API,保證了 API 在所有平臺的一致性。然而 WebRTC 在移動端的表現跟 PC 相比,顯得不是那么令人滿意,尤其是在 Android 系統上,Android 系統的自身碎片化已經被詬病已久。每一次的 Android 系統升級,每個芯片廠商、手機廠商都會基于 Android 系統做一些定制化,造成了即使是同樣的 Android 系統版本,同樣的 Android 標準 API 調用,不同設備表現不一樣。所以如果不針對不同機型做適配,很難達到統一的用戶體驗,功能的穩定性也很難保證。
文|Iven
網易資深 Android 音視頻開發工程師
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 參數下發配置方案可以分為以下四種:
下面,我們就針對這四點詳細展開聊聊,分析其優缺點。
?兼容性代碼 Builtln?
兼容性方案是直接在代碼邏輯中做處理。這種方案,只能覆蓋一部分場景,比如針對不同 Android SDK 版本做兼容性適配以及已經在測試中非常明確的配置。
好處:直接寫在 SDK 中,不存在從服務端下發的情況,不占用網絡帶寬,高效。
缺點:但是對于線上出現問題的特殊機型,往往設置不夠靈活。當線上的不同用戶,出現較多問題的情況時,需要通過更改 SDK 來解決問題,這往往有種遠水解不了近渴的感覺。
?本地文件配置?
本地文件配置的方式是:通過讀取本地指定目錄下的配置文件來參數生效,往往在 SDK 初始化時即進行這一步操作。
好處:不需要重新打包 SDK,可以直接將配置文件放到指定目錄即可將參數生效,也不需要到服務器修改下發參數即可生效。比較適合本地調參的場景。
缺點:但是沒法解決線上客戶問題的遠距離修改。
?服務器參數下發?
服務器下發參數設定,可以隨時通過下發參數,控制設備相關功能參數。
好處:線上用戶遇到兼容性問題,直接通過服務端下發參數修改,可以幾分鐘內解決用戶問題。
缺點:通過服務器下發,需要占用服務器資源,如果下發參數文件過大,會影響 SDK 初始化時間。
?自動化策略選擇?
參數的自動化策略選擇,是通過對不同的系統版本、不同的 CPU 計算能力、芯片平臺等因素進行綜合考慮,對不同功能模塊的參數組合,形成幾套參數模版,比如低性能要求參數模版,或者質量優先參數模版。當不合適的參數設置導致問題時,有比較完善的回退機制可以回退到基本的參數配置,以保證基本功能可工作。
兼容性適配的規則
以上兩章介紹了精細化配置的常見參數和智能化配置的方案, 那么不同設備型號、不同業務場景、不同系統版本,如何進行區分?
下面,我們詳細介紹一下,制定兼容性適配規則的幾個維度。
?根據單個設備適配?
手機制造商基于新的 Android 系統做定制化的時候,很難做到完全一致,這種差異性在音視頻領域就更加。每個設備的唯一性,可以根據設備的硬件制造商、主板、設備版本、設備參數來標識唯一性。
?根據設備 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 智能硬件的相關音視頻適配工作,適配產品包括手機、電視、手表、機頂盒、智能音響等。
?延伸閱讀?
嘉賓PPT分享|泛娛樂領域音視頻技術探索與實踐
技術干貨 | iOS 高階容器詳解
資訊|WebRTC M89 更新
總結
以上是生活随笔為你收集整理的技术实践 | Android 设备音视频兼容性适配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘉宾PPT分享|泛娱乐领域音视频技术探索
- 下一篇: 技术实践 | Android Flutt