基于ARM的移動(dòng)視頻監(jiān)控終端設(shè)計(jì)與實(shí)現(xiàn)
2.1 H.264視頻流的傳輸
2.1.1 傳輸方式選擇
視頻的實(shí)時(shí)傳輸要求較低的時(shí)間延遲,并且允許一定的丟包率。由于TCP協(xié)議的3次握手以及丟包重傳機(jī)制會(huì)造成一定的延時(shí),在實(shí)時(shí)監(jiān)控系統(tǒng)中有一定缺陷,而UDP協(xié)議是面向無鏈接、不可靠的傳輸層協(xié)議,具有消耗資源小,傳輸速度快等特點(diǎn),在視頻傳輸過程中偶爾丟包不會(huì)對監(jiān)控畫面產(chǎn)生較大影響。UDP協(xié)議不提供數(shù)據(jù)包分包、封裝、數(shù)據(jù)包排序等缺點(diǎn),為保障視頻流傳輸?shù)目煽啃裕W(wǎng)絡(luò)傳輸部分采用建立在UDP協(xié)議之上的RTP(Real-time Transport Protocol)實(shí)時(shí)傳輸協(xié)議來實(shí)現(xiàn),通過套接字與前端建立連接,以接收視頻流數(shù)據(jù)。RTP提供帶有實(shí)時(shí)特性的端對端數(shù)據(jù)傳輸服務(wù),包括有效載荷類型的定義、序列號、時(shí)間戳和傳輸檢測控制。基于RTP/UDP/IP協(xié)議傳輸視頻流封裝格式如圖2所示。
2.1.2 視頻流傳輸
采用UDP協(xié)議傳輸RTP包時(shí)會(huì)出現(xiàn)亂序的現(xiàn)象,所謂亂序就是監(jiān)控終端接收到RTP包順序可能前端發(fā)送的順序不一致,因此,首先要對接收的RTP包排序。采用在內(nèi)存中建立一個(gè)雙向鏈表來保存接收的RTP包,按照RTP報(bào)頭的序列號(Sequence Number)順序存放到鏈表中,雙向鏈表結(jié)構(gòu)體定義如下,部分變量用于RTP分片封包模式。
每當(dāng)接收到一個(gè)新的RTP包后,根據(jù)序列號從鏈表尾開始搜索并插入到合適的位置,比如,接收到一個(gè)序列號SN=26的RTP包在鏈表中分配內(nèi)存,找到位于25,27之間的位置插入該包,RTP包排序過程如圖3所示。
H.264視頻流NALU單元封裝成RTP包時(shí),要遵循RTP負(fù)載格式標(biāo)準(zhǔn),H.264負(fù)載格式定義了3種類型的負(fù)載結(jié)構(gòu):單一NALU模式、組合封包模式、分片封包模式。單一NALU模式是一個(gè)RTP包僅由一個(gè)完整的NALU組成;組合封包模式是可能由多個(gè)NALU組成一個(gè)RTP包;分片封包模式是將一個(gè)NALU單元封裝成多個(gè)RTP包,采用分片封包模式的原因是網(wǎng)絡(luò)傳輸協(xié)議有最大傳輸單元(MTU)一般為1500B上限,如果NALU大于MTU,IP層將其自動(dòng)分割為幾個(gè)小于MTU的數(shù)據(jù)包,這樣無法檢測數(shù)據(jù)包是否有丟失,所以有必要采取分片封包模式,在接收端把擁有相同時(shí)間戳的多個(gè)RTP包按照序列號重組成一個(gè)完整的NALU。分片封包模式的RTP包格式如圖4所示。
評論