Android 裝置音影片相容性適配
導讀: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 智慧裝置特點
比如:
Android phone:手機的電池耗電量要求相對嚴格,裝置需要滿足 360 角度旋轉的體驗等;
Android TV 大屏裝置:
有些使用的是外接 camera;
在聲音採集場景中,人跟裝置的距離往往比較遠,對高音質音訊資料採集有挑戰;
Android Watch: 裝置螢幕比較小,CPU 效能相對較弱等;
手機裝置是最常見的裝置,也是使用者使用率非常高的裝置。大部分手機制造商都針對 Android 系統做了定製化,所以各家有各家的 ROM。手機廠商通常會對 Android 的 Framework、HAL 以及 Linux driver 做定製化修改,導致不同手機即使用同一款 SOC ,也會產生不同的表現。主流 Android 手機品牌及定製 ROM 如下圖:
主流 Android 手機品牌及定製 ROM
所以根據上述分析,裝置相容性問題這麼多,對於以音影片為主要場景的產品,從音訊和影片模組都需要做到精細化相容性適配。主要可以參考的配置引數可以包括(目前沒有全部都開啟可配置)如下的功能模組:
音訊:基本功能、音效、音訊策略等
影片:基本功能、影片前後處理等
詳細的引數如下圖:
裝置詳細引數
如何智慧化配置
對於音影片的相容性配置,需要滿足引數的可更改性、時效性、靈活性、自動化以及可回退。目前的 Android 引數下發配置方案可以分為以下四種:
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 碎片化對使用者帶來的體驗上的不足,同時也積累了非常多的相容性適配經驗,以滿足不同使用場景,不同裝置型別和型號帶來的各種奇形怪狀的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69999013/viewspace-2770469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 裝置適配
- Android外掛化的相容性(上):Android O的適配Android
- Android外掛化的相容性(中):Android P的適配Android
- 詳解 Android 12L|更好地適配大螢幕裝置Android
- Android適配Android
- 更好地適配大螢幕裝置 | 2021 Android 開發者峰會Android
- Android適配: 拉伸適配的缺點Android
- 新版本系統適配: Android 12 中的相容性變更Android
- 谷歌將正式推出 Fuchsia OS,已有適配裝置谷歌
- Android圖示適配Android
- android 螢幕適配Android
- android全面屏適配Android
- Android P 適配指南Android
- 實踐 | 為 Trackr app 適配大螢幕裝置APP
- Android螢幕適配(理論適配100%機型)Android
- Android中的icon適配Android
- Android6.0~9.0適配Android
- Android Q 提前適配攻略Android
- Android適配:DP簡述Android
- Android 劉海屏適配Android
- android螢幕適配三:通過畫素密度適配Android
- Android 9 適配怎麼做? “QQ音樂”優化實錄Android優化
- 如何在邊緣裝置上適配大型神經網路?神經網路
- Android 6.0、7.0、8.0、9.0適配Android
- Android 主流螢幕以及適配Android
- Android O 適配詳細指南Android
- Android7.0機型適配Android
- Android適配學習記錄Android
- Android深色模式適配原理分析Android模式
- WWDC 2018:快速將開發專案適配所有的iOS裝置iOS
- 適配可摺疊裝置,您的應用準備好了嗎?
- 是時候為各式裝置適配完善的輸入支援了
- Android 劉海屏適配總結Android
- Android 螢幕適配終結者Android
- Android專案實戰(四十):Andoird7.0+安裝APK適配AndroidAPK
- android 螢幕適配二:手寫百分比佈局適配Android
- android 螢幕適配一:通過自定義View的方式實現適配AndroidView
- Android 音影片開發 - VideoViewAndroidIDEView