Android IOS WebRTC 音視頻開發總結(二九)-- 安卓噪聲消除交流


Android上的音質一直被大家所困擾和詬病,這里面有很多原因,

下面是最近一位前UC同行發郵件跟我交流的一些記錄,供參考,支持原創,文章來自博客園RTC.Blacker,轉載請說明出處.

以下文字來自郵件,為便於閱讀和理解,略有整理:

  "Blacker,您好,本人一直從事音視頻算法的處理與研究,包括H264視頻,語音抑制,回音消除,噪音處理等分支。最近已經轉向webrtc了,對webrtc也算是相對熟悉了。不過我在利用webrtc模塊來開發時,遇到了一個音頻采集的問題。不知道你是否遇到了,你們是否有相關的處理方法呢。

  webrtc在pc和ios手機端,效果可以說是非常的好,但是在android手機端,效果就不怎么樣了,語音斷斷續續的,效果很差,造成這個的其中一個因素就是AECM和AGC,噪音消除等這些模塊造成的,我也仔細研究過這些算法的底層羅輯,發現下面的算法很多地方的初始值就是取一個經驗值,這些值的大小影響最終效果,難怪蘋果和pc設備的效果那么好,因為這些經驗值很可能就是針對pc和蘋果手機的。由於android手機設備種類繁多,所以不同的設備喇叭和麥克風不同導致效果差異太大。

  當然這些我還可以修改底層的語音算法來優化,但是android端,有一個問題我始終沒有頭緒,就是音頻部分的采集問題。基本上所有android手機,采集出來的音頻數據就是不完整的,偶爾斷斷續續,加上后續音頻的處理,經過處理后的效果就更差了。底層的音頻采集,用了opensles來實現,當然他還提供了回調上層java來實現采集的模塊,用一個開關WEBRTC_ANDROID_OPENSLES就可以打開,這些底層采集出來的語音都是有問題的。

  用webrtc自帶的webrtcdemo就可以測試出來,特別是關掉視頻后,只開音頻的話,問題更明顯.采集部分的代碼我也看過,里面有一個緩沖大小設置,這個調大后也是作用不大的。當然我也寫單獨的demo來測試,如果我不調用StartReceive和StartPlayout,而只是調用StartSend,那個采集出來的音頻就是非常完整的,效果也非常好的,前兩者只是開啟了接收監聽和播放線程,它和startsend開啟的采集線程根本就是毫不相關的,為什么就相互影響了呢。

  所以我有時候懷疑webrtc的架構是不是有問題呢?

  這個問題一直都沒有頭緒,你在webrtc接觸比我久,經驗比我豐富很多,接觸的牛人也多得多,我想咨詢一下你們是怎么處理底層的聲音采集問題呢,只要把這個問題解決了,android手機端的音頻效果一定會提高50%以上,那可是質的飛躍啊。盼望你能回復,一起探討一下這個問題怎么解決,謝謝了。 "

 

  ------------------------------------------------以下是我的回復:

  "您好,您的問題描述得很詳細,分析也很准確,說明您在這方面確實頗有研究.

   回到android音頻效果較差的的問題,先拋開手機硬件設計上的缺陷不談,主要還是跟android設備種類繁多有關,所以webrtc里面對某些參數取的都是經驗值,這樣就造成不同手機效果大不一樣, 所以適配這塊是一個很大的工作, 所以最好的做法就是針對每種設備進行具體的適配,計算出具體的數值, 這樣會比較准確, 不過這個投入是很大的.
  你目前只用webrtcdemo測試嗎? 你反饋的這個我沒有弄過,因為一般用WebRTCDemo的都會重寫傳輸模塊, 另外附件發了個apk給你測試, 你可以用他和webrtcdemo比較下, 他們兩者主要差別就是傳輸模塊不一樣. 另外這個問題我也問下我朋友吧.
  測試APK詳見附件, 后面略......"
 
 
  ------------------------------------------------后面是陸陸續續的郵件交流,總結如下:
  "對方后面用doubango里面的采集模塊替換掉了webrtc里面的采集模塊,測試發現采集和播放都很流暢, 用我提供的apk進行測試也很流暢,我們只能推測確實跟傳輸機制有關,但傳輸為什么會影響到音質的流暢性我們沒搞懂,而且webrtc的采集和播放用到了很多的多線程,鎖,看起來是很復雜,也很難維護.
        當然也聊聊一些創業和工作相關的事情,因為跟這個主題關系不大,所以就不列出來了."
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM