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