聲卡直播聲音延遲是什么原因?
一、網絡延時
這里指的是從主播端采集,到觀眾端播放之間的時間差。就算不考慮主播端采集
對視頻進行編碼的時間,以及觀眾端觀看對視頻機型解碼的時間,那也會不可避免的造成延遲,原因就是信息從主播到觀眾的“路程”上,可能會經過很多CDN節點,經過一次,就會產生一次分發過程,而這種過程必然會造成延遲。另外,數據傳輸過程中還涉及到邏輯上的交互,例如包的重傳以及確認,以及緩存上的一些邏輯等,會在這個基礎上又增加很多很多。
?
二、網絡抖動
網絡抖動,是指數據包的到達順序、間隔和發出時不一致。比如說,發送N+1個數據包,每個表間隔1s發出,結果在第N-50個包在傳輸過程中遇到網絡擁塞,導致包N-50不是緊跟著N-51到達的,而是延遲到N后面才到達。這種情況就會造成不能依照接收順序把內容播放出來,否則會造成失真。為了不產生失真現象,就不可避免了造成播放延遲。
三、網絡丟包
直播中用到的RTMP、HLS等流媒體傳輸協議都是建立在TCP的基礎之上。TCP一個很重要的特性是其可靠性—不會發生數據丟失的問題。為了保證可靠性,TCP在傳輸過程中會有3次握手:首先客戶端會向服務端發送連接請求,服務端同意后,客戶端會確認這次連接,這就是3次握手。接著,客戶端就開始發送數據,每次發送一批數據,得到服務端的“收到”確認后,繼續發送下一批。那么問題就來了,TCP為了保證傳到,都會有自動重傳機制。如果傳輸中發生了丟包,沒有收到對端發出的“收到”信號,那么本端就會自動重傳丟失的包,一直到超時。網絡丟包是很難控制的因素,所以當網絡的丟包率開始升高時,重傳會導致延時不斷增大。
四、RTMP累積延遲
雖然在流媒體傳輸協議中,RTMP用的無疑是最多的,但是它也有一個比較顯著的弱點,即累積誤差。原因也比較簡單,就是RTMP基于TCP:當網絡狀態很差時,服務器會將包緩存起來,從而導致累積的延遲,當網絡狀況好了,就一起發給客戶端,這樣做的對策就是,造成客戶端的緩沖區很大,從而發生延遲。