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