前面講解了音視頻編解碼的基本知識,相信閱讀過的朋友,都有個基本的認識。音視頻除了存儲,還如何傳輸呢?比如直播互動,網上課堂等,這些場景中,音視頻是如何實現在網絡中傳輸呢?今天這篇文章,就講解下,音視頻的傳輸的基本知識。本文主要講解一些基本的傳輸協議、擁塞控制,音視頻同步,校驗,QOS服務質量等。
一.傳輸協議
流媒體的很多協議都是在傳統的TCP/UDP協議之上,加強流媒體在網絡傳輸中的穩定性。在端到端的結構中,發送端的音視頻數據通過流媒體協議發送給接收端,中間的傳輸過程重要的部分就是用TCP/UDP。下面是流媒體與TCP/UDP協議的結構圖。
流媒體協議結構圖
流媒體中有一些常用的協議,比如RTMP,RTSP,RTP等,這些協議底層或者說傳輸層,基本都是基于TCP/IP模型,也就是在局域網的實現還是TCP/IP。傳輸層有著承上啟下的作用,對上提供服務,對下提供網絡傳輸是否可靠,是否能夠增加網絡服務的質量。其作用如圖所示。
傳輸層作用
TCP協議都很熟悉了,具有如下這些特點:
1.面向連接的協議,可靠,順序包
2.一種字節流
3.滑動窗口,流量控制
TCP通過三次握手建立連接后,應用層的數據會不斷發到TCP緩沖中去,在流媒體中,數據這個層次需要切片,并加上header,形成segment,TCP報頭如圖所示:
TCP header
為什么音視頻在有些場景不直接用TCP呢?具有以下原因。
1.在實時語音,視頻等場景下,TCP的重傳會造成流媒體極大延時,用戶體驗差
2.擁塞控制會造成大量卡頓,主要體現在弱網環境中,碼率不變的情況。
3.TCP報頭要大于UDP,數據量更大。
4.TCP連接需要花大量的時間,對于畫面秒開會有一定的影響。
以上都是在實時互動的場景中,不用TCP的原因,這些場景使用UDP肯能更加合適。
UDP報頭如下:
UDP報頭
UDP更加適合一對多實時互動的流媒體場景中,在網絡帶寬足夠的情況,采用UDP,會更加符合實際,在UDP包加一個時標和序號,再加上適當的緩沖,也可以記錄無序包,同步音視頻數據等效果。
這里并不是說哪種協議更加好,關鍵是看使用場景。TCP與UDP對比。
TCP與UDP對比
編程思路,這里暫時不講解具體編程代碼,后面會有專欄來去分析。
TCP協議套接字編碼流程。
TCP編碼流程
UDP套接字編碼流程
UDP套接字編碼流程
RTP協議應用在組播,一對多的場景中比較多,它是基于UDP協議之上,RTP協議的應用部分主要是提供一些控制信息,比如同步,報文分割等,具體報文格式如下,PT(類型)、M(標記)、時間戳,RTP格式如下:
RTP格式
RTSP,也是一種流媒體協議,在很對安防場景中,使用的十分頻繁,一般工作在TCP之上,它也是采用一種流式傳輸,可以減小延遲。當接收端有足夠數據之后,就會解碼播放。RTSP主要特性如下:
RTSP主要特性
二.擁塞控制
擁塞控制主要是解決網絡堵塞的情況,解決好網絡堵塞的傳輸,一直是業內關注的問題,有很多的專家組建團隊去攻克這些難題。擁塞控制可以做些什么呢?在網絡資源和帶寬有限的情況,如何控制質量,盡可能提升質量,就是傳輸視頻的有效手段。網絡堵塞表現在數據包延時增加,丟棄率增加,性能下降。擁塞控制對網絡性能影響如下:
擁塞控制對網絡性能影響
產生擁塞控制主要是由以下幾點影響的?
1.帶寬,最大值受香農定理限制,發送速率小于或等于信道容量。
2.存儲空間,主要體現在數據報的丟棄上。
3.處理器能力,這個不僅僅指的是CPU,還有GPU,其它硬件編解碼器等。
根據服務模型不同,擁塞控制可分為預留策略和反饋策略。
預留策略主要是向網絡提交資源請求,在帶寬足夠,則會為主機預留響應資源。否則拒絕。
反饋策略主要是根據反饋,動態調整發送速率。
網絡層的擁塞控制
網絡層的擁塞控制主要利用路由器的包調度算法和緩存管理技術,也就數要處理好兩個基本問題。存儲和轉發。在技術上實現思想包括。
TCP擁塞控制分為4個階段:慢啟動、擁塞避免、快速重傳、恢復階段。如果在TCP啟動階段,向網絡發出了很多數據,這個時候可能造成網絡吞吐量下降。慢啟動階段就是為了避免出現數據爆發的情況。慢啟動流程就是當建立新的連接時,先初始化一個數據包大小,按照擁塞窗口大小發送數據,收到一個ACK,擁塞窗口就增加一個數據包的發送量,基于這種反饋的策略,保證不破壞網絡狀態平衡,使啟動階段能夠穩定。如果連續收到確認幀,則控制算法判定網絡要發生擁塞,這時就需要進入擁塞避免階段。若超時,窗口置1,就需要設置慢啟動閾值,如果慢啟動閾值小于擁塞窗口,TCP就執行擁塞避免算法,每收到一個確認幀,就需要增加一個數據包。反之TCP重新進入慢啟動。擁塞控制過程如下圖所示:
擁塞控制
當源端收到3個或3個以上確認時,TCP就斷定數據已經丟失,重傳該數據包,迅速進入快傳和恢復階段。
1.先進先出(FIFO)
比如FFmpeg、MediaCode等開源代碼或音視頻架構都是應用的非常多,基于此方法,路由轉發的壓力會下降。如圖所示:
FIFO處理擁塞
FIFO優點是通過緩存,可以提前得到一些信息,避免卡頓。缺點是對于特殊包的公平性較差,快速恢復的效率也不高。
2.公平排隊算法
這種算法表示每一路數據流都需要維護一個隊列,路由器以輪詢方式訪問,當路由器來回掃描所有隊列,將第一個包發出。FQ的工作原理如圖所示:
FQ處理擁塞
FQ的優點是在輪詢機制下表示什么時候可以發送完畢,通過結束時間去安排數據包發送,保證算法公平性,同時不會影響統計復用。缺點實現復雜,需要更多的資源和容錯處理。市面上也有一些改進算法,比如加權公平排隊算法、通過加權的方式分配緩存資源。
3.ECN
ECN將更平均分配在路由器和終端節點,這類通知是通過簡單的經過路由器的數據包中設置一個擁塞位來實現,先把ECN使能位發送,由路由器根據網絡設置CE比特位,如果接受到網絡反饋的這類CE置位的數據包,然后發出的數據包標記為丟棄包。
優點是不需要超時重傳,不依賴TCP定時,對于網絡的突發性變化更好。
4.REQ
這個算法可估計擁塞什么時候發生,按照一定的概率丟包,提高吞吐量。
基于網絡層和傳輸層的控制算法比較
在組播環境的音視頻的層次化傳輸方案如下圖所示,這種基于應用層的控制,需要把音視頻切分成更小的數據片,網絡發生堵塞時,丟掉一些不太重要的數據。這些類型的方法有3類,自適應算法,重傳和緩沖。
應用層的擁塞控制切片流程
三類算法的延時比較。
三、音視頻同步
音視頻同步是流媒體中十分重要的模塊,直接影響用戶體驗,如果音視頻不同步,不僅僅導致觀感效果差,而且還可能會引起視頻卡頓,音頻無法播放等。所以這個模塊與解碼,編碼等模塊都有著千絲萬縷的聯系。一般同步機制主要是分為三種,音頻同步視頻,視頻同步音頻,音視頻同步一個固定時鐘,字幕也有同步,這里暫且不討論。
音視頻同步背后的故事?
音視頻在傳輸過程中,延時抖動,時鐘偏差,網絡變化都會導致同步的過程發生變化。以下是延時抖動對流媒體同步的影響。
傳輸前
傳輸后
流媒體在采集,傳輸,解碼等過程中,都會實現相應的同步機制。
本地文件流同步方法:
(1)基于參考點同步
使用流媒體的音頻或者視頻的索引作為參考點,開始打開文件,讀取文件的頭信息,讀取第n幀的音頻數據,檢查前面的n-1幀是否播放完,如果已經播放完,則跳過下一幀視頻,只播放第n幀的視頻,重新返回到音頻的N+1幀讀取,如果前面的第N幀音頻還沒有播放完,則把第n幀音頻放到輸出隊列,然后讀取并顯示第n幀視頻,如果上述情況出現很多次,則顯示視頻時加入一定延時。
(2)基于參考時鐘同步
音視頻基于系統固定時鐘,實現同步,各自沿著時鐘線段進行播放,如果音視頻的時間戳與固定時鐘的誤差超過設置的同步門限,則重新同步。這個方法優點是,音頻和視頻的時間戳不用交集,相互不影響,缺點是,如果固定時鐘,音頻,視頻,這三者中的時間戳不準,或者跳變很大,就會出現災難性的體驗。大致的流程是,以參考時鐘的映射為標桿,進行同步控制,重置音視頻的起點,如果音頻或者視頻超越和落后對方,則就會等待或丟棄相應數據。
網絡傳輸同步
音視頻在網絡傳輸過程中,基于參考時鐘的這種方法很難實現,或者實現起來體驗很差,為什么呢?在復雜的網絡環境中,如果時鐘信息被丟失或者讀取錯誤,會導致解碼端和播放端,同步的效果很差。所以在網絡中,都是基于音頻同步視頻,或視頻同步音頻,這里以音頻的時間戳作為基準進行同步,音頻會以固定速率播放,而視頻會根據音頻的時間戳進行等待或者丟棄。
在客戶端和服務端,會同步實現一種反饋機制,客戶端會把不同步的信息,發送給服務端,由服務端根據這種反饋信息進行反饋檢測。當客戶端檢測到失調后,接收端會跳過或暫停。服務端則調整發送速率。
四、差錯控制
前面提到的擁塞控制,無法完全避免包的丟失,這就需要一定的差錯控制技術??梢园l送定義和識別幀邊界,并處理接收方回送的確認幀。如幀數計數法,首尾標志法等。
差錯控制的方式分為2類,即反饋糾錯和前向糾錯。反饋糾錯方式是指在發送端對輸入信息編碼時,加入少量監督符號,在接收端需要對編碼信息進行檢查,如果出錯,需要請求重發,指導收到的信息正確為止。前向糾錯就是在發送端使用一套相對復雜的編碼方法,從而能夠在解碼端去糾正傳輸的差錯,接收端不僅能發現錯碼,還要糾正。這些糾錯碼,市面上比較常用的海明碼,循環冗余碼等,這篇文章就不詳細分析。
五、QoS服務質量
上面介紹的音視頻同步,校驗,都是Qos的范疇。它是指提供服務質量的期望值以及考驗網絡性能的要求。Qos設計滿足一些基本原則,比如,透明原則,綜合原則,分離原則等。
端與端的Qos
Qos參數體系結構如下圖所示,用戶使用Qos來分析網絡性能。
Qos參數體系結構
網絡接口層,是解決傳輸介質問題。
網絡層需要解決延時,抖動,差錯控制等問題。
傳輸層解決吞吐量,延時,抖動,傳輸優先級等問題
應用層主要是實現不同場景的參數配置,及問題反饋。
關于Qos分析,先講解這么多,后面再補充
六、總結
前面五部分都是十分重要的環境,如果需要掌控整個系統,或者優化,這些基礎知識是必備,希望各位朋友認真閱讀并理解。






