Android 設(shè)備音視頻兼容性適配

導(dǎo)讀:WebRTC 是一個非常優(yōu)秀的項(xiàng)目薯酝, 可以支持 Web、iOS爽柒、Android吴菠、Mac、Windows浩村、Linux 在內(nèi)的所有平臺的 API做葵,保證了 API 在所有平臺的一致性。然而 WebRTC 在移動端的表現(xiàn)跟 PC 相比心墅,顯得不是那么令人滿意酿矢,尤其是在 Android 系統(tǒng)上榨乎,Android 系統(tǒng)的自身碎片化已經(jīng)被詬病已久。每一次的 Android 系統(tǒng)升級瘫筐,每個芯片廠商蜜暑、手機(jī)廠商都會基于 Android 系統(tǒng)做一些定制化,造成了即使是同樣的 Android 系統(tǒng)版本策肝,同樣的 Android 標(biāo)準(zhǔn) API 調(diào)用肛捍,不同設(shè)備表現(xiàn)不一樣。所以如果不針對不同機(jī)型做適配之众,很難達(dá)到統(tǒng)一的用戶體驗(yàn)拙毫,功能的穩(wěn)定性也很難保證。

RTC 場景中要想在 Android 設(shè)備上實(shí)現(xiàn)高可靠棺禾、穩(wěn)定缀蹄、低延時、設(shè)備通用帘睦, 音視頻兼容性適配必不可少袍患。Android 設(shè)備相關(guān)參數(shù)精細(xì)化配置、智能化配置竣付,就是本文考慮的重心。

如何精細(xì)化配置

主流 SOC (System On Chip)方案都是基于 Linux/Android 系統(tǒng)開發(fā)滞欠,但是各家卻各有所長古胆。高通 SOC 主要應(yīng)用在手機(jī)設(shè)備上,編解碼性能和穩(wěn)定性都比較強(qiáng)大筛璧,視頻超編問題控制的比較好逸绎;MTK 和 MStar 并購后,除了手機(jī)產(chǎn)品夭谤,在機(jī)頂盒和大屏產(chǎn)品上應(yīng)用很廣棺牧,往往可以通過 MTK 自有參數(shù),開啟一些功能朗儒。此外不同的芯片版本計算性能高低不同颊乘,計算性能高低不同會影響音視頻功能的開啟,比如視頻的前后處理醉锄。目前主流的芯片方案如下圖:

基于上述不同的 SOC 平臺乏悄, 各類設(shè)備廠商會定制化不同的 Android 智能設(shè)備, 而每類設(shè)備的功能特點(diǎn)也不一樣恳不。

比如:

  • Android phone:手機(jī)的電池耗電量要求相對嚴(yán)格檩小,設(shè)備需要滿足 360 角度旋轉(zhuǎn)的體驗(yàn)等;
  • Android TV 大屏設(shè)備:
    • 有些使用的是外接 camera烟勋;
  • 在聲音采集場景中规求,人跟設(shè)備的距離往往比較遠(yuǎn)筐付,對高音質(zhì)音頻數(shù)據(jù)采集有挑戰(zhàn);
  • Android Watch: 設(shè)備屏幕比較小阻肿,CPU 性能相對較弱等家妆;

手機(jī)設(shè)備是最常見的設(shè)備,也是用戶使用率非常高的設(shè)備冕茅。大部分手機(jī)制造商都針對 Android 系統(tǒng)做了定制化伤极,所以各家有各家的 ROM。手機(jī)廠商通常會對 Android 的 Framework姨伤、HAL 以及 Linux driver 做定制化修改哨坪,導(dǎo)致不同手機(jī)即使用同一款 SOC ,也會產(chǎn)生不同的表現(xiàn)乍楚。主流 Android 手機(jī)品牌及定制 ROM 如下圖:

所以根據(jù)上述分析当编,設(shè)備兼容性問題這么多,對于以音視頻為主要場景的產(chǎn)品徒溪,從音頻和視頻模塊都需要做到精細(xì)化兼容性適配忿偷。主要可以參考的配置參數(shù)可以包括(目前沒有全部都開啟可配置)如下的功能模塊:

  • 音頻:基本功能、音效臊泌、音頻策略等
  • 視頻:基本功能鲤桥、視頻前后處理等

詳細(xì)的參數(shù)如下圖:

如何智能化配置

對于音視頻的兼容性配置,需要滿足參數(shù)的可更改性渠概、時效性茶凳、靈活性、自動化以及可回退播揪。目前的 Android 參數(shù)下發(fā)配置方案可以分為以下四種:

下面贮喧,我們就針對這四點(diǎn)詳細(xì)展開聊聊,分析其優(yōu)缺點(diǎn)猪狈。

兼容性代碼 BuiltIn

兼容性方案是直接在代碼邏輯中做處理箱沦。這種方案,只能覆蓋一部分場景雇庙,比如針對不同 Android SDK 版本做兼容性適配以及已經(jīng)在測試中非常明確的配置谓形。

  • 好處:直接寫在 SDK 中,不存在從服務(wù)端下發(fā)的情況状共,不占用網(wǎng)絡(luò)帶寬套耕,高效。
  • 缺點(diǎn):但是對于線上出現(xiàn)問題的特殊機(jī)型峡继,往往設(shè)置不夠靈活冯袍。 當(dāng)線上的不同用戶,出現(xiàn)較多問題的情況時,需要通過更改 SDK 來解決問題康愤,這往往有種遠(yuǎn)水解不了近渴的感覺儡循。

本地文件配置

本地文件配置的方式是:通過讀取本地指定目錄下的配置文件來參數(shù)生效,往往在 SDK 初始化時即進(jìn)行這一步操作征冷。

  • 好處:不需要重新打包 SDK择膝,可以直接將配置文件放到指定目錄即可將參數(shù)生效,也不需要到服務(wù)器修改下發(fā)參數(shù)即可生效检激。比較適合本地調(diào)參的場景肴捉。
  • 缺點(diǎn):但是沒法解決線上客戶問題的遠(yuǎn)距離修改。

服務(wù)器參數(shù)下發(fā)

服務(wù)器下發(fā)參數(shù)設(shè)定叔收,可以隨時通過下發(fā)參數(shù)齿穗,控制設(shè)備相關(guān)功能參數(shù)。

  • 好處:線上用戶遇到兼容性問題饺律,直接通過服務(wù)端下發(fā)參數(shù)修改窃页,可以幾分鐘內(nèi)解決用戶問題。
  • 缺點(diǎn):通過服務(wù)器下發(fā)复濒,需要占用服務(wù)器資源脖卖,如果下發(fā)參數(shù)文件過大,會影響 SDK 初始化時間巧颈。

自動化策略選擇

參數(shù)的自動化策略選擇畦木,是通過對不同的系統(tǒng)版本、不同的 CPU 計算能力洛二、芯片平臺等因素進(jìn)行綜合考慮馋劈,對不同功能模塊的參數(shù)組合,形成幾套參數(shù)模版晾嘶,比如低性能要求參數(shù)模版,或者質(zhì)量優(yōu)先參數(shù)模版娶吞。當(dāng)不合適的參數(shù)設(shè)置導(dǎo)致問題時垒迂,有比較完善的回退機(jī)制可以回退到基本的參數(shù)配置,以保證基本功能可工作妒蛇。

兼容性適配的規(guī)則

以上兩章介紹了精細(xì)化配置的常見參數(shù)和智能化配置的方案机断, 那么不同設(shè)備型號、不同業(yè)務(wù)場景、不同系統(tǒng)版本,如何進(jìn)行區(qū)分官地?

下面畜晰,我們詳細(xì)介紹一下,制定兼容性適配規(guī)則的幾個維度饼齿。

根據(jù)單個設(shè)備適配

手機(jī)制造商基于新的 Android 系統(tǒng)做定制化的時候,很難做到完全一致漫仆,這種差異性在音視頻領(lǐng)域就更加泊碑。每個設(shè)備的唯一性坤按,可以根據(jù)設(shè)備的硬件制造商、主板馒过、設(shè)備版本臭脓、設(shè)備參數(shù)來標(biāo)識唯一性。

根據(jù)設(shè)備 CPU 適配

根據(jù) CPU 的計算能力進(jìn)行適配腹忽,通常為了適配一些對于計算性能要求比較高的功能来累,比如視頻前后處理等。選擇這種方式適配后窘奏,只要是同樣 CPU 型號的所有設(shè)備嘹锁,都能實(shí)現(xiàn)適配。

根據(jù)系統(tǒng)版本適配

每一次 Android 系統(tǒng)更新蔼夜, 會涉及到對應(yīng)音視頻 API 的相關(guān)功能改動兼耀。需要根據(jù) Android 系統(tǒng)版本號,進(jìn)行對應(yīng)的適配求冷。

根據(jù)不同應(yīng)用業(yè)務(wù)適配

不同的業(yè)務(wù)瘤运,對于音視頻的適配側(cè)重點(diǎn)不同。 比如多人會議場景匠题,對于音視頻的實(shí)時性拯坟、弱網(wǎng)下的穩(wěn)定性要求比較高,并且對于音頻降噪韭山,回音消除要求都比較高郁季;云游戲場景下,對視頻的分辨率钱磅、延遲度要求高梦裂;娛樂業(yè)務(wù)中的音樂播放,比如云音樂的一起聽功能盖淡,對音質(zhì)的要求比較高年柠,并且對于音頻設(shè)備路由策略上,有特殊要求褪迟,例如從藍(lán)牙播放音樂冗恨,但是從手機(jī) mic 采集音頻數(shù)據(jù);這些場景都要通過不同參數(shù)適配來達(dá)到要求味赃。

根據(jù) IOT 設(shè)備類型適配

Android 系統(tǒng)被應(yīng)用在各個 IOT 設(shè)備中掀抹,從而產(chǎn)生非常多的適配場景。比如電視大屏心俗,因?yàn)槠聊槐容^大傲武,所以要求視頻內(nèi)容是高分辨率、高幀率的,從而對于采集和編解碼的能力要求比較高谱轨;而且市場中存在一些可以 360 度旋轉(zhuǎn)的電視戒幔,需要在顯示角度上進(jìn)行適配;在大屏的音質(zhì)方面土童,由于人跟電視往往距離比較遠(yuǎn)诗茎,所以在聲音采集和回音消除上的處理跟手機(jī)又不太一樣。

兼容性適配常見的音視頻問題

我們下面來聊聊常見的音視頻兼容性適配的出現(xiàn)的問題献汗,其產(chǎn)生的原因以及我們時是如何解決的敢订。

音頻兼容性常見問題

音頻兼容性經(jīng)常會出現(xiàn)音質(zhì)、音量罢吃、音頻策略的問題楚午,下面我們選取其中幾種,簡單分析此類問題的解決方法尿招。

  • 遇到問題:音頻延時過大或者延時不穩(wěn)定

    • 解決方法:創(chuàng)建 Android 自采集的時候矾柜, AudioRecord 中設(shè)置的 Buffer 大小影響采集端延遲,從而影響AEC 算法精準(zhǔn)度就谜。
  • 遇到問題:藍(lán)牙 A2DP 模式下怪蔑,從藍(lán)牙播放,但是卻無法從設(shè)備 mic 采集

    • 解決方法:區(qū)分藍(lán)牙 SCO/A2DP 模式下丧荐,AudioSource缆瓣、AudioMode 的類型
  • 遇到問題:發(fā)送端音量低

    • 解決方案1:采集到的音頻數(shù)據(jù)源音量比較低,通過軟件 AGC 算法音量增強(qiáng)虹统;
    • 解決方法2:修改 AudioSource弓坞,部分手機(jī)尤其老手機(jī),AudioSource.VOICE_COMMUNICATION 模式聲音偏低或者音頻通路處理有問題车荔;
  • 遇到問題:音頻播放音質(zhì)偏低

    • 解決方法:AudioTrack streamType 使用 AudioSystem.STREAM_MUSIC渡冻;
  • 遇到問題:Audio 3A 相關(guān)參數(shù)(AEC AGC,ANS )忧便;現(xiàn)象是聲音忽大忽小菩帝,人聲抑制,背景噪音嚴(yán)重茬腿,音量過高或者過低
    • 解決方法:通常是硬件 3A 和軟件算法 3A 的取長補(bǔ)短。

還有一些調(diào)用系統(tǒng) API freeze宜雀,使用 OpenSL ES 無法播放等問題切平,我們也探索了相應(yīng)的解決方案,在此不再贅述辐董。

視頻兼容性常見問題

視頻兼容性經(jīng)常會出現(xiàn)卡頓悴品、顯示畫面異常、編解碼失敗的問題,下面我們選取其中幾種苔严,簡單分析此類問題的解決方法定枷。

  • 遇到問題:采集畫面有紅條:
  • 解決方案:特定分辨率,幀率届氢,導(dǎo)致采集有紅色條紋

  • 遇到問題:采集圖像黑:

  • 解決方案:特定幀率欠窒,導(dǎo)致曝光問題。

  • 遇到問題:偶現(xiàn)采集畫面割裂

  • 解決方案:紋理采集格式導(dǎo)致

  • 遇到問題:部分手機(jī) Camera2 采集有綠邊

    • 解決方案:Camera2 不兼容
  • 遇到問題:硬件編碼實(shí)際碼率跟編碼碼率相差大

    • 解決方案:部分手機(jī)即使 Mediacodec 設(shè)置是 CBR退子, 碼率波動還是大
  • 遇到問題:硬件編碼的碼流有黑邊后者綠邊:

    • 解決方案:輸入數(shù)據(jù)的長和寬沒有按照 stride 對齊岖妄,編碼器無法進(jìn)行兼容
  • 遇到問題:硬件解碼器無法創(chuàng)建:

    • 解決方案1:設(shè)置給解碼器的 format 不對,比如顏色空間寂祥,編碼器名字荐虐,是否渲染到的 suface 等;
    • 解決方案2:超出 SOC 所能支持的最高 decoder 個數(shù)丸凭;

還有一些調(diào)用系統(tǒng) API freeze福扬、MTK 芯片特殊問題處理,采集幀率不穩(wěn)定惜犀,解碼失敗等铛碑,我們也探索了相應(yīng)的解決方案,在此不再贅述向拆。

屏幕共享兼容性常見問題

屏幕共享是視頻采集中的特殊一種亚茬,也存在跟設(shè)備相關(guān)的一些問題。常見的有畫面卡住浓恳、采集數(shù)據(jù)有黑邊等問題刹缝,下面我們簡單分析此類問題的解決方法。

  • 遇到問題:手機(jī)屏幕畫面處于靜止時颈将,采集幀率為0

    • 解決方法:緩存一幀數(shù)據(jù)梢夯,定時發(fā)送
  • 遇到問題:采集數(shù)據(jù)黑邊

    • 解決方法:設(shè)置的分辨率與屏幕分辨率不匹配,系統(tǒng)會用黑色數(shù)據(jù)填充晴圾。更改采集分辨率颂砸。

結(jié)尾

網(wǎng)易云信音視頻 SDK 致力于為每一位用戶實(shí)現(xiàn)高清、穩(wěn)定死姚、易用人乓、低延時的服務(wù)。通過本文的介紹都毒,網(wǎng)易云信有很完善的兼容性適配方案色罚,來彌補(bǔ) Andriod 碎片化對用戶帶來的體驗(yàn)上的不足,同時也積累了非常多的兼容性適配經(jīng)驗(yàn)账劲,以滿足不同使用場景戳护,不同設(shè)備類型和型號帶來的各種奇形怪狀的問題金抡。

每一支設(shè)備的適配,都是匠人之心的傾注腌且;

每一步產(chǎn)品的研磨梗肝,都是精益求精的付出。

作者介紹

Iven铺董,網(wǎng)易資深 Android 音視頻開發(fā)工程師巫击,一直從事 Android 音視頻 SDK 功能開發(fā),期間負(fù)責(zé)網(wǎng)易云信的 G1 和 G2 的相關(guān)研發(fā)工作柄粹,同時也負(fù)責(zé)基于 Android 智能硬件的相關(guān)音視頻適配工作喘鸟,適配產(chǎn)品包括手機(jī)、電視驻右、手表什黑、機(jī)頂盒、智能音響等堪夭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愕把,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子森爽,更是在濱河造成了極大的恐慌恨豁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爬迟,死亡現(xiàn)場離奇詭異橘蜜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)付呕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門计福,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徽职,你說我怎么就攤上這事象颖。” “怎么了姆钉?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵说订,是天一觀的道長。 經(jīng)常有香客問我潮瓶,道長陶冷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任毯辅,我火速辦了婚禮埃叭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悉罕。我一直安慰自己赤屋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布壁袄。 她就那樣靜靜地躺著类早,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗜逻。 梳的紋絲不亂的頭發(fā)上涩僻,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音栈顷,去河邊找鬼逆日。 笑死,一個胖子當(dāng)著我的面吹牛萄凤,可吹牛的內(nèi)容都是我干的室抽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼靡努,長吁一口氣:“原來是場噩夢啊……” “哼坪圾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惑朦,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤兽泄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漾月,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體病梢,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年梁肿,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜓陌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡栈雳,死狀恐怖护奈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哥纫,我是刑警寧澤霉旗,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蛀骇,受9級特大地震影響厌秒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擅憔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一鸵闪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暑诸,春花似錦蚌讼、人聲如沸辟灰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芥喇。三九已至,卻和暖如春凰萨,著一層夾襖步出監(jiān)牢的瞬間继控,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工胖眷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留武通,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓珊搀,卻偏偏與公主長得像冶忱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子食棕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容