當前位置:
首頁 > 最新 > 為什麼耳朵沒懷孕?10 分鐘搞明白直播中雜音、噪音和回聲問題

為什麼耳朵沒懷孕?10 分鐘搞明白直播中雜音、噪音和回聲問題

《直播疑難雜症排查》系列已經更新了 7 篇,我們為用戶分析了視頻直播過程中出現的問題,並一一作出排查。此次我們側重於直播中的音頻,以便給用戶帶來更好的聽覺享受。

《直播技術詳解》系列文章之後,我們推出了這個新的系列《直播疑難雜症排查》,把解決直播問題的經驗逐步分享出來,同時也會穿插一些音視頻開發的基礎知識和優化經驗,希望能夠幫助到直播領域的開發者們。

本系列會涵蓋的內容包括但不限於如下一些主題:

本文為 《直播疑難雜症排查》系列的第八篇文章,我們重點看看直播過程中出現的雜音、噪音和回聲等問題。

相比於視頻而言,音頻要敏感得多,視頻畫面有噪點、馬賽克都還是可以勉強被接受,而聲音一旦有任何瑕疵,人耳都會特別容易感覺到,而且難以忍受。

問題現象

常見的音頻問題現象描述如下:

電流音,爆音,滋滋聲或者嘟嘟聲

聲音斷斷續續,聽不清楚

回聲,能聽到自己說話的聲音

問題排查

1.參數配置問題

上面也有提到,音頻是一個特別敏感的東西,涉及到許多參數配置,一旦配置不太匹配,就會導致聲音聽起來非常詭異(比如:採樣率是 32000Hz 的音頻,給播放器配置為 8000Hz 或者 44100Hz,就明顯會出現音頻慢放或者快放的效果)。

常見的音頻參數和基本原理,可以參考文章:《Android音頻開發(1):基礎知識》

我們只需要注意的是,無論是採集和播放,都要給系統的 API 以及第三方的庫配置正確的參數,如:採樣率、位寬、聲道數等等。

2.代碼層面的原因

常見的代碼層面的問題有如下幾種:

音頻 buffer 大小不匹配,一段 1024 bytes 的音頻,放到了 2048 bytes 的數組,導致尾部有隨機數

音頻 resample 重採樣的演算法問題,導致採樣出來的數據出了問題

Android 的 ByteBuffer 取出數組,是不能直接用 .array() 方法的,而需要用 .get() 方法

iOS 系統,其他 app 通過系統 API 更改了 AudioSession 採樣率的配置

3.網路波動

視頻是一幀一幀連續的圖像構成的,在播放過程中,如果無法按時渲染,則會出現卡頓的效果;如果丟失幾幀畫面,則會出現快進效果。

而音頻是流式的,雖然也被切分為了一個個音頻幀,但如果無法按時播放或者連續丟失較多的音頻幀,則會明顯聽到斷斷續續的聲音出現。特別是在弱網、丟包率高等不穩定網路環境下,很容易出現這種情況。

4.回聲消除

回聲一般出現在同時有音頻的採集和播放的場景,比如:連麥互動、混音返聽等等,採集到的音頻通過揚聲器又播放出來了,同時又被採集了進去,從而產生了回聲或者嘯叫聲。

這樣的場景下,一般需要通過系統的回聲消除 API,或者第三方回聲消除庫(如:speexdsp,webrtc 等)進行處理。

注意:很多 Android 機型硬體自帶的回聲消除效果並不是很好。

5.混音越界

音頻的 PCM 數據,通常用 short 數組來存放,當我們做一些多路音頻的混音功能的時候,如果不注意處理 short 類型的大小越界,則往往帶來爆音的問題。下面是一段參考 webrtc 的混音代碼,專門針對混音越界做了簡單處理,可以參考參考:

【六月大派送】


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 七牛雲 的精彩文章:

端午節的這條推送僅對最「牛」的技術人可見

TAG:七牛雲 |

您可能感興趣

【減壓白噪音】低淺的蟲鳴聲,給聒噪的世界按下了靜音符
既然聲音在固體中傳播最快,那為什麼我們關門能阻擋噪音?
編輯有話說:這些沒「噪音」的電動跑車
噪音計,把耳朵叫醒了!
白堊紀的噪音
什麼?車內噪音大?這幾招讓噪音根本不存在的!
你有噪音狂躁症嗎?跟噪音說再見我選了先馬黑洞7
煩人的噪音怎麼破?看看這幾點,別讓噪音影響寶寶聽力發育
不製冷?噪音?異味?關於冰箱的小問題,看這篇就夠了!
看得見聲音的視頻拍攝裝備,幫你搞定所有噪音
【減壓白噪音】把月光吹成笛聲,將整個世界的溫柔唱給你聽
為什麼安靜時 耳邊總聽到滋滋的噪音?
【減壓白噪音】置身森林深處,聽一曲鳥語蟲鳴的交響樂
聆聽音樂,頭戴式藍牙無線降噪耳機緩解撲耳噪音
【減壓白噪音】聽冰凌融化的聲音,就像春光歸來的倒計時
包了下水管為什麼還會有噪音?聰明人都流行這麼做,立馬沒聲了
沒想到本田傑德的噪音這麼多!看隔音如何一一化解這4大痛點問題
空調噪音大怎麼辦?小編教你幾招解決噪音問題!
禪語心燈——噪音
聲音相機『』,讓噪音映入眼帘