国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種提升低速網(wǎng)絡(luò)中rtp視頻流處理效率的方法

      文檔序號(hào):7801015閱讀:1007來源:國知局
      一種提升低速網(wǎng)絡(luò)中rtp視頻流處理效率的方法
      【專利摘要】本發(fā)明公開了一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,視頻采集端負(fù)責(zé)視頻數(shù)據(jù)的實(shí)時(shí)獲取;視頻編碼打包模塊首先對(duì)視頻數(shù)據(jù)進(jìn)行壓縮編碼,形成標(biāo)準(zhǔn)的H.264格式的視頻,再對(duì)壓縮后的視頻進(jìn)行RTP封裝打包,將打包后的數(shù)據(jù)送往網(wǎng)絡(luò)緩存區(qū);網(wǎng)絡(luò)發(fā)送端獲取共享的網(wǎng)絡(luò)緩存區(qū)中的RTP包數(shù)據(jù),生成RTP幀數(shù)據(jù),通過基礎(chǔ)網(wǎng)絡(luò)將多對(duì)TCP套接字對(duì)上傳到網(wǎng)絡(luò)發(fā)送端上;網(wǎng)絡(luò)接收端作為視頻服務(wù)器,通過與網(wǎng)絡(luò)發(fā)送端建立多對(duì)TCP套接字來傳送RTP數(shù)據(jù)。實(shí)現(xiàn)了多對(duì)套接字共同傳輸實(shí)時(shí)RTP流,合理地合并多個(gè)小RTP包一次傳輸,提高了帶寬利用率和網(wǎng)絡(luò)傳輸效率,有效解決視頻流實(shí)時(shí)傳輸導(dǎo)致的丟幀、卡頓及花屏等問題。
      【專利說明】一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及一種網(wǎng)絡(luò)傳輸方法,尤其涉及的是一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法。
      【背景技術(shù)】
      [0002]隨著3G網(wǎng)絡(luò)的普及和LTE時(shí)代的到來,人們希望能隨時(shí)獲取到音視頻等多媒體信息。RTP協(xié)議就是為支持多媒體通信而設(shè)計(jì)的網(wǎng)絡(luò)傳輸協(xié)議,從而使流媒體播放器在各種網(wǎng)絡(luò)終端上得到普遍應(yīng)用。
      [0003]RTP封裝的數(shù)據(jù)包易于在網(wǎng)絡(luò)上傳輸,其序列號(hào)字段和時(shí)間戳字段保證接收端能實(shí)現(xiàn)丟包檢測(cè)和包順序的恢復(fù)。在RTP/RTSP協(xié)議中,RTP數(shù)據(jù)包和RTCP數(shù)據(jù)包都采用UDP協(xié)議傳輸,RTCP數(shù)據(jù)包用于實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)傳輸質(zhì)量和擁塞控制。UDP是基于消息的方式傳送數(shù)據(jù)包,傳送速度快,但不提供消息的確認(rèn)與重傳機(jī)制,不提供流量的擁塞控制,因此在低速網(wǎng)絡(luò)中容易導(dǎo)致丟包和亂序到達(dá),影響實(shí)時(shí)音視頻傳輸?shù)挠脩趔w驗(yàn)。
      [0004]低速網(wǎng)絡(luò)傳輸通常是基于無線廣域網(wǎng)。由于低速網(wǎng)絡(luò)的帶寬限制,數(shù)據(jù)包傳送速率慢,且容易因網(wǎng)絡(luò)狀況不穩(wěn)定而產(chǎn)生波動(dòng)。傳輸通道更有可能受信號(hào)覆蓋、自然環(huán)境、用戶稠密度、業(yè)務(wù)時(shí)間段等影響。因此低速網(wǎng)絡(luò)的流媒體傳輸需要將多媒體的編解碼和傳輸技術(shù)很好地結(jié)合在一起,才能確保用戶在復(fù)雜的網(wǎng)絡(luò)環(huán)境下也能得到穩(wěn)定的音視頻播放質(zhì)量。

      【發(fā)明內(nèi)容】

      [0005]本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供了一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,解決基于RTP/RTCP傳輸技術(shù)容易產(chǎn)生的丟包、卡頓問題,提升了數(shù)據(jù)傳輸?shù)姆€(wěn)定性和帶寬利用效率。
      [0006]本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的,本發(fā)明包括以下步驟:
      [0007](I)視頻采集端負(fù)責(zé)視頻數(shù)據(jù)的實(shí)時(shí)獲??;
      [0008](2)視頻編碼打包模塊首先對(duì)視頻數(shù)據(jù)進(jìn)行壓縮編碼,形成標(biāo)準(zhǔn)的H.264格式的視頻,再對(duì)壓縮后的視頻進(jìn)行RTP封裝打包,形成適合網(wǎng)絡(luò)傳輸?shù)腞TP視頻流,將打包后的數(shù)據(jù)送往網(wǎng)絡(luò)緩存區(qū);
      [0009](3)網(wǎng)絡(luò)緩存區(qū)是編碼打包模塊與網(wǎng)絡(luò)發(fā)送端之間共享的環(huán)形緩存存儲(chǔ)區(qū)域,網(wǎng)絡(luò)發(fā)送端獲取共享的網(wǎng)絡(luò)緩存區(qū)中的RTP包數(shù)據(jù),生成RTP幀數(shù)據(jù),通過基礎(chǔ)網(wǎng)絡(luò)的多對(duì)TCP套接字對(duì)將RTP數(shù)據(jù)幀上傳到網(wǎng)絡(luò)接收端上;
      [0010](4)網(wǎng)絡(luò)接收端作為視頻服務(wù)器,通過與網(wǎng)絡(luò)發(fā)送端建立多對(duì)TCP套接字來接收RTP數(shù)據(jù)幀并完成幀的分解、RTP包解析和H.264視頻的播放。
      [0011 ] 所述網(wǎng)絡(luò)發(fā)送端與網(wǎng)絡(luò)接收端之間采用基于連接的TCP傳輸層協(xié)議傳輸RTP數(shù)據(jù)幀,通信雙方通過TCP報(bào)文協(xié)商來確定雙方采用的傳輸線程數(shù)目、每個(gè)線程的TCP傳輸連接數(shù)目以及每個(gè)傳輸連接雙方所采用的TCP端口。[0012]在低速網(wǎng)絡(luò)中,如果采用UDP傳輸,發(fā)送方有數(shù)據(jù)則直接發(fā)送且無需確認(rèn)接收方是否能正確接收數(shù)據(jù),從而導(dǎo)致數(shù)據(jù)包丟包和亂序到達(dá)的現(xiàn)象比較嚴(yán)重,影響視頻播放的質(zhì)量。如果采用TCP的傳輸方式,依靠TCP的重傳、確認(rèn)和流量控制機(jī)制,實(shí)現(xiàn)數(shù)據(jù)的可靠傳輸,從而減少數(shù)據(jù)包的丟失,減少低速網(wǎng)絡(luò)中多種網(wǎng)絡(luò)環(huán)境因素可能對(duì)視頻傳輸產(chǎn)生的干擾。與UDP相比,TCP傳輸方式對(duì)可靠性的保障會(huì)影響傳輸?shù)男?,特別是在低速網(wǎng)絡(luò)中,很容易因?yàn)樗俾什粔驅(qū)е聦?shí)時(shí)視頻播放的卡頓,因此必須有效地提高帶寬的利用率。本發(fā)明的網(wǎng)絡(luò)發(fā)送端與網(wǎng)絡(luò)接收端采用多線程多連接,一方面提高網(wǎng)絡(luò)帶寬的利用效率,另一方面也提高通信雙方操作系統(tǒng)分配的CPU處理時(shí)間。
      [0013]所述TCP報(bào)文協(xié)商的具體過程為:處于廣域網(wǎng)的一端首先創(chuàng)建TCP套接字sockl并進(jìn)入監(jiān)聽狀態(tài),處于局域網(wǎng)的一端向sockl發(fā)起連接,通過此連接傳輸協(xié)商參數(shù),即協(xié)商連接;用戶在網(wǎng)絡(luò)發(fā)送端獲取用戶設(shè)置的線程數(shù),每個(gè)線程連接數(shù)以及每個(gè)連接雙方所采用的端口組裝成報(bào)文I后發(fā)送,通過協(xié)商連接發(fā)送給網(wǎng)絡(luò)接收端,網(wǎng)絡(luò)接收端接收到報(bào)文I并解析到協(xié)商參數(shù)后,先后建立對(duì)應(yīng)數(shù)目的接收線程數(shù),在每個(gè)線程中使用協(xié)商的端口進(jìn)行TCP監(jiān)聽,如果所有協(xié)商參數(shù)生效成功則通過協(xié)商連接返回設(shè)置成功,如果出現(xiàn)協(xié)商端口被占用,則自動(dòng)遞增獲取一個(gè)可用端口并進(jìn)行監(jiān)聽,并將生效的端口信息通過協(xié)商連接返回給發(fā)送端,從而建立好數(shù)據(jù)傳輸通道。
      [0014]H.264流中常會(huì)連續(xù)出現(xiàn)多幀長度較小的P圖像幀,對(duì)應(yīng)的RTP流中就會(huì)出現(xiàn)長度較小的RTP數(shù)據(jù)包以及長度較小的音頻信息和私有封裝子信息。為提升連續(xù)出現(xiàn)的小RTP包的傳輸效率,并在接收端與發(fā)送端之間形成足夠的視頻數(shù)據(jù)的緩沖,在本發(fā)明中通過合并小RTP包實(shí)現(xiàn)并包傳輸,以減少傳輸層發(fā)送幀、確認(rèn)幀的數(shù)目,從而進(jìn)一步提高傳輸?shù)男省?br> [0015]所述視頻數(shù)據(jù)的傳輸通過合并緩存區(qū)已有的、連續(xù)的、長度較小的RTP包實(shí)現(xiàn)并包傳輸,以RTP包為最小單元,RTP包前添加N字節(jié)RTP長度信息,按時(shí)間順序依次將一個(gè)或多個(gè)RTP包拼接起來,在首部封裝頭部信息,形成RTP數(shù)據(jù)幀,以RTP數(shù)據(jù)幀的形式實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收;對(duì)網(wǎng)絡(luò)緩存區(qū)已有的RTP數(shù)據(jù)進(jìn)行封包并立即發(fā)送,若網(wǎng)絡(luò)緩存區(qū)已沒有新數(shù)據(jù),即使已有數(shù)據(jù)幀總長度很小,也不必等待網(wǎng)絡(luò)緩存區(qū)的下一包數(shù)據(jù);所述RTP數(shù)據(jù)幀的幀頭信息包含幀序列號(hào)、幀長度信息和RTP數(shù)據(jù)幀所包含的RTP數(shù)據(jù)包個(gè)數(shù)。
      [0016]所述RTP數(shù)據(jù)幀的總長度根據(jù)網(wǎng)絡(luò)最大傳輸路徑單元MSS的長度來確定,單個(gè)RTP包的最大長度與幀頭長度之和或小于等于數(shù)據(jù)幀的最大長度限定值;拼接起來的若干RTP數(shù)據(jù)包的長度與幀頭長度之和小于或等于RTP數(shù)據(jù)幀的最大長度限定值,數(shù)據(jù)幀的最大長度限定值不超過底層MSS的N倍,I < N < 5。從而減少IP層分片傳輸?shù)拇螖?shù)以及發(fā)送和接收端網(wǎng)絡(luò)緩存區(qū)上下文切換的次數(shù)。以太網(wǎng)中典型的MSS值為1460字節(jié)。
      [0017]所述RTP長度的判斷方法如下:
      [0018]循環(huán)檢測(cè)并讀取緩存區(qū)中等待傳輸?shù)腞TP數(shù)據(jù)包并對(duì)RTP長度進(jìn)行判斷;若僅有一包等待傳輸,則僅將此包封裝成RTP數(shù)據(jù)幀并發(fā)送;若有N個(gè)RTP包等待傳輸且長度之和小于RTP數(shù)據(jù)幀的限定值,則將此N個(gè)RTP合并封裝成RTP數(shù)據(jù)幀并發(fā)送;若有N個(gè)RTP包等待傳輸且長度之和超過RTP數(shù)據(jù)幀的限定值,則僅將部分RTP包合并封裝成RTP數(shù)據(jù)幀并發(fā)送,將超過限定值的部分RTP包與下一次讀取到的RTP數(shù)據(jù)合并后再重新判斷封包。
      [0019]與UDP基于消息的傳輸方式不同,TCP是基于字節(jié)流的傳輸協(xié)議,有時(shí)會(huì)出現(xiàn)發(fā)送端的若干包數(shù)據(jù)到接收端時(shí)粘在一起形成一個(gè)數(shù)據(jù)包。本發(fā)明由于最大限度的提高網(wǎng)絡(luò)帶寬利用效率,故TCP的流量控制會(huì)頻繁地將數(shù)據(jù)幀粘起來發(fā)送。為解決此問題,所述網(wǎng)絡(luò)接收端對(duì)網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行分解接收工作和RTP數(shù)據(jù)包的解封裝工作:對(duì)每一個(gè)RTP幀分兩次讀取,首先讀取RTP數(shù)據(jù)幀的首部信息,確定RTP數(shù)據(jù)幀的序號(hào)、數(shù)據(jù)幀的長度以及此數(shù)據(jù)幀包含多少個(gè)RTP包信息,再根據(jù)數(shù)據(jù)幀的長度去讀取剩余的數(shù)據(jù)幀。
      [0020]在低速網(wǎng)絡(luò)中,數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)接收端是一個(gè)明顯的過程,從數(shù)據(jù)包的首部移入網(wǎng)絡(luò)接收端的網(wǎng)絡(luò)緩存區(qū)到數(shù)據(jù)包的最后一個(gè)字節(jié)到達(dá)網(wǎng)絡(luò)接收端的網(wǎng)絡(luò)緩存區(qū)是一個(gè)可以明顯感知到的過程。所述網(wǎng)絡(luò)接收端在讀取網(wǎng)絡(luò)緩存區(qū)的時(shí)候要等待數(shù)據(jù)均到達(dá)網(wǎng)絡(luò)緩存區(qū)后再去讀取,具體步驟如下:
      [0021]設(shè)RTP數(shù)據(jù)幀的首部長度為N字節(jié),網(wǎng)絡(luò)接收端在網(wǎng)絡(luò)緩存區(qū)發(fā)現(xiàn)有網(wǎng)絡(luò)數(shù)據(jù)到達(dá)后,先判斷網(wǎng)絡(luò)緩存區(qū)是否有超過N個(gè)字節(jié)可讀,如果超過N個(gè)字節(jié)可讀,讀取N字節(jié)并分解獲得幀首部信息;如果不夠N字節(jié)則延時(shí)一毫秒后繼續(xù)判斷緩存區(qū)可讀的數(shù)據(jù)長度,循環(huán)等待直到有超過N字節(jié)可讀為止;獲得幀長度信息后,判斷緩存區(qū)剩余可讀數(shù)據(jù)的長度,如果達(dá)到幀的長度,讀取此幀,如果緩存區(qū)剩余可讀數(shù)據(jù)的長度沒有達(dá)到幀的長度,延時(shí)一毫秒后繼續(xù)判斷緩存區(qū)可讀數(shù)據(jù)長度,循環(huán)等待直到有超過N字節(jié)可讀為止,至此一幀數(shù)據(jù)讀取完成。
      [0022]網(wǎng)絡(luò)接收端與發(fā)送端建立了多對(duì)套接字連接,數(shù)據(jù)幀在廣域網(wǎng)傳輸過程中可能會(huì)出現(xiàn)接收亂序現(xiàn)象,原因在于,一方面數(shù)據(jù)包在廣域網(wǎng)中傳輸會(huì)出現(xiàn)不同程度的延時(shí),后發(fā)送的數(shù)據(jù)可能會(huì)先到達(dá);另一方面如果有若干幀數(shù)據(jù)均已到達(dá)接收端,而接收端在接收數(shù)據(jù)時(shí)無法判斷先接收哪一幀數(shù)據(jù),可能會(huì)出現(xiàn)先到達(dá)接收端的數(shù)據(jù)卻后被處理的情況。為解決此問題,所述網(wǎng)絡(luò)接收端與發(fā)送端建立了多對(duì)套接字連接,通過select端口模型監(jiān)控套接字?jǐn)?shù)據(jù)的到達(dá)情況,對(duì)獲取到的數(shù)據(jù)進(jìn)行順序重建,具體步驟如下:
      [0023]a、通過鏈表管理接收到的RTP幀,根據(jù)Frame N0.字段遞增依次將連續(xù)的鏈表節(jié)點(diǎn)送入播放器;
      [0024]b、播放器緩存區(qū)是一個(gè)先進(jìn)先出的FIFO結(jié)構(gòu),對(duì)送進(jìn)來的每一個(gè)RTP幀分解成一個(gè)或多個(gè)RTP包,再對(duì)RTP包解析成H.264格式可播放的NALU裸流數(shù)據(jù),最后將完整的NALU幀送入播放庫進(jìn)行顯示;
      [0025]C、將每個(gè)從網(wǎng)絡(luò)緩存區(qū)接收到的一幀數(shù)據(jù),建立一個(gè)鏈表節(jié)點(diǎn),并根據(jù)FrameN0.值插入到鏈表中,如果有Frame N0.重復(fù)的巾貞則丟棄,如果Frame N0.小于已送入播放器的巾貞的Frame N0.則丟棄;
      [0026]d、根據(jù)select監(jiān)控套接字到達(dá),如果僅有一個(gè)套接字可讀,則讀取此套接字的一幀數(shù)據(jù)后,建立一個(gè)鏈表節(jié)點(diǎn)并插入鏈表,如果多個(gè)套接字可讀,則依次讀取每一個(gè)套接字的幀數(shù)據(jù),對(duì)每個(gè)RTP幀建立鏈表節(jié)點(diǎn),并插入鏈表。
      [0027]本發(fā)明相比現(xiàn)有技術(shù)具有以下優(yōu)點(diǎn):本發(fā)明實(shí)現(xiàn)了多對(duì)套接字共同傳輸實(shí)時(shí)RTP流,合理地合并多個(gè)小RTP包一次傳輸,接收端通過亂序重組、分解得到視頻流數(shù)據(jù),提高了帶寬利用率和網(wǎng)絡(luò)傳輸效率,有效解決視頻流實(shí)時(shí)傳輸導(dǎo)致的丟幀、卡頓及花屏等問題。
      【專利附圖】

      【附圖說明】
      [0028]圖1是本發(fā)明的結(jié)構(gòu)示意圖;[0029]圖2是對(duì)RTP包數(shù)據(jù)合并成RTP幀數(shù)據(jù)的示意圖。
      【具體實(shí)施方式】
      [0030]下面對(duì)本發(fā)明的實(shí)施例作詳細(xì)說明,本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
      [0031]如圖1和圖2所示,本實(shí)施例包括視頻采集端1、視頻編碼打包模塊2、網(wǎng)絡(luò)發(fā)送端
      3、網(wǎng)絡(luò)接收端4和基礎(chǔ)網(wǎng)絡(luò)5,
      [0032](I)視頻采集端I負(fù)責(zé)視頻數(shù)據(jù)的實(shí)時(shí)獲取;
      [0033](2)視頻編碼打包模塊2首先對(duì)視頻數(shù)據(jù)進(jìn)行壓縮編碼,形成標(biāo)準(zhǔn)的H.264格式的視頻,再對(duì)壓縮后的視頻進(jìn)行RTP封裝打包,形成適合網(wǎng)絡(luò)傳輸?shù)腞TP視頻流,將打包后的數(shù)據(jù)送往網(wǎng)絡(luò)緩存區(qū);
      [0034](3)網(wǎng)絡(luò)緩存區(qū)是編碼打包模塊與網(wǎng)絡(luò)發(fā)送端3之間共享的環(huán)形緩存存儲(chǔ)區(qū)域,網(wǎng)絡(luò)發(fā)送端3獲取共享的網(wǎng)絡(luò)緩存區(qū)中的RTP包數(shù)據(jù),生成RTP幀數(shù)據(jù),通過基礎(chǔ)網(wǎng)絡(luò)5的多對(duì)TCP套接字對(duì)將RTP數(shù)據(jù)幀上傳到網(wǎng)絡(luò)接收端4上;
      [0035](4)網(wǎng)絡(luò)接收端4作為視頻服務(wù)器,通過與網(wǎng)絡(luò)發(fā)送端3建立多對(duì)TCP套接字來接收RTP數(shù)據(jù)幀并完成幀的分解、RTP包解析和H.264視頻的播放。
      [0036]所述網(wǎng)絡(luò)發(fā)送端3與網(wǎng)絡(luò)接收端4之間采用基于連接的TCP傳輸層協(xié)議傳輸RTP數(shù)據(jù)幀,通信雙方通過TCP報(bào)文協(xié)商來確定雙方采用的傳輸線程數(shù)目、每個(gè)線程的TCP傳輸連接數(shù)目以及每個(gè)傳輸連接雙方所采用的TCP端口。
      [0037]所述TCP報(bào)文協(xié)商的具體過程為:處于廣域網(wǎng)的一端首先創(chuàng)建TCP套接字sockl并進(jìn)入監(jiān)聽狀態(tài),處于局域網(wǎng)的一端向sockl發(fā)起連接,通過此連接傳輸協(xié)商參數(shù),即協(xié)商連接;用戶在網(wǎng)絡(luò)發(fā)送端3獲取用戶設(shè)置的線程數(shù),每個(gè)線程連接數(shù)以及每個(gè)連接雙方所采用的端口組裝成報(bào)文I后發(fā)送,通過協(xié)商連接發(fā)送給網(wǎng)絡(luò)接收端4,網(wǎng)絡(luò)接收端4接收到報(bào)文I并解析到協(xié)商參數(shù)后,先后建立對(duì)應(yīng)數(shù)目的接收線程數(shù),在每個(gè)線程中使用協(xié)商的端口進(jìn)行TCP監(jiān)聽,如果所有協(xié)商參數(shù)生效成功則通過協(xié)商連接返回設(shè)置成功,如果出現(xiàn)協(xié)商端口被占用,則自動(dòng)遞增獲取一個(gè)可用端口并進(jìn)行監(jiān)聽,并將生效的端口信息通過協(xié)商連接返回給發(fā)送端,從而建立好數(shù)據(jù)傳輸通道。
      [0038]所述視頻數(shù)據(jù)的傳輸通過合并緩存區(qū)已有的、連續(xù)的、長度較小的RTP包實(shí)現(xiàn)并包傳輸,以RTP包為最小單元,RTP包前添加N字節(jié)RTP長度信息,按時(shí)間順序依次將一個(gè)或多個(gè)RTP包拼接起來,在首部封裝頭部信息,形成RTP數(shù)據(jù)幀,以RTP數(shù)據(jù)幀的形式實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收;對(duì)網(wǎng)絡(luò)緩存區(qū)已有的RTP數(shù)據(jù)進(jìn)行封包并立即發(fā)送,若網(wǎng)絡(luò)緩存區(qū)已沒有新數(shù)據(jù),即使已有數(shù)據(jù)幀總長度很小,也不必等待網(wǎng)絡(luò)緩存區(qū)的下一包數(shù)據(jù);所述RTP數(shù)據(jù)幀的幀頭信息包含幀序列號(hào)、幀長度信息和RTP數(shù)據(jù)幀所包含的RTP數(shù)據(jù)包個(gè)數(shù)。具體合并過程如圖2所示,RTP包數(shù)據(jù)包括RTP Header和RTP Data,需要將總長度添加到RTPLength字段形成RTP Group,控制若干RTP Group的總長度。生成Frame Header需要添加Frame N0.幀標(biāo)識(shí)字段,表示RTP Frame的先后順序,以便在網(wǎng)絡(luò)接收端4進(jìn)行亂序的重組,從而避免視頻播放的花屏。
      [0039]所述RTP數(shù)據(jù)幀的總長度根據(jù)網(wǎng)絡(luò)最大傳輸路徑單元MSS的長度來確定,單個(gè)RTP包的最大長度與幀頭長度之和或小于等于數(shù)據(jù)幀的最大長度限定值;拼接起來的若干RTP數(shù)據(jù)包的長度與幀頭長度之和小于或等于RTP數(shù)據(jù)幀的最大長度限定值,數(shù)據(jù)幀的最大長度限定值不超過底層MSS的N倍,I < N < 5,N通常取I或2,從而減少IP層分片傳輸?shù)拇螖?shù)以及發(fā)送和接收端網(wǎng)絡(luò)緩存區(qū)上下文切換的次數(shù)。
      [0040]所述RTP長度的判斷方法如下:
      [0041]循環(huán)檢測(cè)并讀取緩存區(qū)中等待傳輸?shù)腞TP數(shù)據(jù)包并對(duì)RTP長度進(jìn)行判斷;若僅有一包等待傳輸,則僅將此包封裝成RTP數(shù)據(jù)幀并發(fā)送;若有N個(gè)RTP包等待傳輸且長度之和小于RTP數(shù)據(jù)幀的限定值,則將此N個(gè)RTP合并封裝成RTP數(shù)據(jù)幀并發(fā)送;若有N個(gè)RTP包等待傳輸且長度之和超過RTP數(shù)據(jù)幀的限定值,則僅將部分RTP包合并封裝成RTP數(shù)據(jù)幀并發(fā)送,將超過限定值的部分RTP包與下一次讀取到的RTP數(shù)據(jù)合并后再重新判斷封包。
      [0042]所述網(wǎng)絡(luò)接收端4對(duì)網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行分解接收工作和RTP數(shù)據(jù)包的解封裝工作:對(duì)每一個(gè)RTP幀分兩次讀取,首先讀取RTP數(shù)據(jù)幀的首部信息,確定RTP數(shù)據(jù)幀的序號(hào)、數(shù)據(jù)幀的長度以及此數(shù)據(jù)幀包含多少個(gè)RTP包信息,再根據(jù)數(shù)據(jù)幀的長度去讀取剩余的數(shù)據(jù)幀。
      [0043]所述網(wǎng)絡(luò)接收端4在讀取網(wǎng)絡(luò)緩存區(qū)的時(shí)候要等待數(shù)據(jù)均到達(dá)網(wǎng)絡(luò)緩存區(qū)后再去讀取,具體步驟如下:
      [0044]設(shè)RTP數(shù)據(jù)幀的首部長度為N字節(jié),網(wǎng)絡(luò)接收端4在網(wǎng)絡(luò)緩存區(qū)發(fā)現(xiàn)有網(wǎng)絡(luò)數(shù)據(jù)到達(dá)后,先判斷網(wǎng)絡(luò)緩存區(qū)是否有超過N個(gè)字節(jié)可讀,如果超過N個(gè)字節(jié)可讀,讀取N字節(jié)并分解獲得幀首部信息;如果不夠N字節(jié)則延時(shí)一毫秒后繼續(xù)判斷緩存區(qū)可讀的數(shù)據(jù)長度,循環(huán)等待直到有超過N字節(jié)可讀為止;獲得幀長度信息后,判斷緩存區(qū)剩余可讀數(shù)據(jù)的長度,如果達(dá)到幀的長度,讀取此幀,如果緩存區(qū)剩余可讀數(shù)據(jù)的長度沒有達(dá)到幀的長度,延時(shí)一毫秒后繼續(xù)判斷緩存區(qū)可讀數(shù)據(jù)長度,循環(huán)等待直到有超過N字節(jié)可讀為止,至此一幀數(shù)據(jù)讀取完成。
      [0045]所述網(wǎng)絡(luò)接收端4與發(fā)送端建立了多對(duì)套接字連接,通過select端口模型監(jiān)控套接字?jǐn)?shù)據(jù)的到達(dá)情況,對(duì)獲取到的數(shù)據(jù)進(jìn)行順序重建,具體步驟如下:
      [0046]a、通過鏈表管理接收到的RTP幀,根據(jù)Frame N0.字段遞增依次將連續(xù)的鏈表節(jié)點(diǎn)送入播放器;
      [0047]b、播放器緩存區(qū)是一個(gè)先進(jìn)先出的FIFO結(jié)構(gòu),對(duì)送進(jìn)來的每一個(gè)RTP幀分解成一個(gè)或多個(gè)RTP包,再對(duì)RTP包解析成H.264格式可播放的NALU裸流數(shù)據(jù),最后將完整的NALU幀送入播放庫進(jìn)行顯示;
      [0048]C、將每個(gè)從網(wǎng)絡(luò)緩存區(qū)接收到的一幀數(shù)據(jù),建立一個(gè)鏈表節(jié)點(diǎn),并根據(jù)FrameN0.值插入到鏈表中,如果有Frame N0.重復(fù)的巾貞則丟棄,如果Frame N0.小于已送入播放器的巾貞的Frame N0.則丟棄;
      [0049]d、根據(jù)select監(jiān)控套接字到達(dá),如果僅有一個(gè)套接字可讀,則讀取此套接字的一幀數(shù)據(jù)后,建立一個(gè)鏈表節(jié)點(diǎn)并插入鏈表,如果多個(gè)套接字可讀,則依次讀取每一個(gè)套接字的幀數(shù)據(jù),對(duì)每個(gè)RTP幀建立鏈表節(jié)點(diǎn),并插入鏈表。
      [0050]本實(shí)施例的網(wǎng)絡(luò)接收端4是DVR?;A(chǔ)網(wǎng)絡(luò)5是局域網(wǎng)或?qū)拵Ы尤刖W(wǎng)絡(luò),包括FTTx, XDSL、IEEE802.11.x 或者無線通信網(wǎng)絡(luò)的 TD-LTE、FDD-LTE, CDMA-EVDO、CDMA2000、TD-CDMA。
      【權(quán)利要求】
      1.一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,包括以下步驟: (1)視頻采集端負(fù)責(zé)視頻數(shù)據(jù)的實(shí)時(shí)獲??; (2)視頻編碼打包模塊首先對(duì)視頻數(shù)據(jù)進(jìn)行壓縮編碼,形成標(biāo)準(zhǔn)的H.264格式的視頻,再對(duì)壓縮后的視頻進(jìn)行RTP封裝打包,形成適合網(wǎng)絡(luò)傳輸?shù)腞TP視頻流,將打包后的數(shù)據(jù)送往網(wǎng)絡(luò)緩存區(qū); (3)網(wǎng)絡(luò)緩存區(qū)是編碼打包模塊與網(wǎng)絡(luò)發(fā)送端之間共享的環(huán)形緩存存儲(chǔ)區(qū)域,網(wǎng)絡(luò)發(fā)送端獲取共享的網(wǎng)絡(luò)緩存區(qū)中的RTP包數(shù)據(jù),生成RTP幀數(shù)據(jù),通過基礎(chǔ)網(wǎng)絡(luò)的多對(duì)TCP套接字對(duì)將RTP數(shù)據(jù)幀上傳到網(wǎng)絡(luò)接收端上; (4)網(wǎng)絡(luò)接收端作為視頻服務(wù)器,通過與網(wǎng)絡(luò)發(fā)送端建立多對(duì)TCP套接字來接收RTP數(shù)據(jù)幀并完成幀的分解、RTP包解析和H.264視頻的播放。
      2.根據(jù)權(quán)利要求1所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述網(wǎng)絡(luò)發(fā)送端與網(wǎng)絡(luò)接收端之間采用基于連接的TCP傳輸層協(xié)議傳輸RTP數(shù)據(jù)幀,通信雙方通過TCP報(bào)文協(xié)商來確定雙方采用的傳輸線程數(shù)目、每個(gè)線程的TCP傳輸連接數(shù)目以及每個(gè)傳輸連接雙方所采用的TCP端口。
      3.根據(jù)權(quán)利要求2所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述TCP報(bào)文協(xié)商的具體過程為:處于廣域網(wǎng)的一端首先創(chuàng)建TCP套接字SOCkl并進(jìn)入監(jiān)聽狀態(tài),處于局域網(wǎng)的一端向sockl發(fā)起連接,通過此連接傳輸協(xié)商參數(shù),即協(xié)商連接;用戶在網(wǎng)絡(luò)發(fā)送端獲取用戶設(shè)置的線程數(shù),每個(gè)線程連接數(shù)以及每個(gè)連接雙方所采用的端口組裝成報(bào)文I后發(fā)送,通過協(xié)商連接發(fā)送給網(wǎng)絡(luò)接收端,網(wǎng)絡(luò)接收端接收到報(bào)文I并解析到協(xié)商參數(shù)后,先后建立對(duì)應(yīng)數(shù)目的接收線程數(shù),在每個(gè)線程中使用協(xié)商的端口進(jìn)行TCP監(jiān)聽,如果所有協(xié)商參數(shù)生效成功則通過協(xié)商連接返回設(shè)置成功,如果出現(xiàn)協(xié)商端口被占用,則自動(dòng)遞增獲取一個(gè)可用端口并進(jìn)行監(jiān)聽,并將生效的端口信息通過協(xié)商連接返回給發(fā)送端,從而建立好數(shù)據(jù)傳輸通道。
      4.根據(jù)權(quán)利要求1所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述視頻數(shù)據(jù)的傳輸通過合并緩存區(qū)已有的、連續(xù)的、長度較小的RTP包實(shí)現(xiàn)并包傳輸,以RTP包為最小單元,RTP包前添加N字節(jié)RTP長度信息,按時(shí)間順序依次將一個(gè)或多個(gè)RTP包拼接起來,在首部封裝頭部信息,形成RTP數(shù)據(jù)幀,以RTP數(shù)據(jù)幀的形式實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收;對(duì)網(wǎng)絡(luò)緩存區(qū)已有的RTP數(shù)據(jù)進(jìn)行封包并立即發(fā)送,若網(wǎng)絡(luò)緩存區(qū)已沒有新數(shù)據(jù),即使已有數(shù)據(jù)幀總長度很小,也不必等待網(wǎng)絡(luò)緩存區(qū)的下一包數(shù)據(jù);所述RTP數(shù)據(jù)幀的幀頭信息包含幀序列號(hào)、幀長度信息和RTP數(shù)據(jù)幀所包含的RTP數(shù)據(jù)包個(gè)數(shù)。
      5.根據(jù)權(quán)利要求4所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述RTP數(shù)據(jù)幀的總長度根據(jù)網(wǎng)絡(luò)最大傳輸路徑單元MSS的長度來確定,單個(gè)RTP包的最大長度與幀頭長度之和或小于等于數(shù)據(jù)幀的最大長度限定值;拼接起來的若干RTP數(shù)據(jù)包的長度與幀頭長度之和小于或等于RTP數(shù)據(jù)幀的最大長度限定值,數(shù)據(jù)幀的最大長度限定值不超過底層MSS的N倍,I≤N≤5。
      6.根據(jù)權(quán)利要求5所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述RTP長度的判斷方法如下: 循環(huán)檢測(cè)并讀取緩存區(qū)中等待傳輸?shù)腞TP數(shù)據(jù)包并對(duì)RTP長度進(jìn)行判斷;若僅有一包等待傳輸,則僅將此包封裝成RTP數(shù)據(jù)幀并發(fā)送;若有N個(gè)RTP包等待傳輸且長度之和小于RTP數(shù)據(jù)幀的限定值,則將此N個(gè)RTP合并封裝成RTP數(shù)據(jù)幀并發(fā)送;若有N個(gè)RTP包等待傳輸且長度之和超過RTP數(shù)據(jù)幀的限定值,則僅將部分RTP包合并封裝成RTP數(shù)據(jù)幀并發(fā)送,將超過限定值的部分RTP包與下一次讀取到的RTP數(shù)據(jù)合并后再重新判斷封包。
      7.根據(jù)權(quán)利要求1所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述網(wǎng)絡(luò)接收端對(duì)網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行分解接收工作和RTP數(shù)據(jù)包的解封裝工作:對(duì)每一個(gè)RTP幀分兩次讀取,首先讀取RTP數(shù)據(jù)幀的首部信息,確定RTP數(shù)據(jù)幀的序號(hào)、數(shù)據(jù)幀的長度以及此數(shù)據(jù)幀包含多少個(gè)RTP包信息,再根據(jù)數(shù)據(jù)幀的長度去讀取剩余的數(shù)據(jù)幀。
      8.根據(jù)權(quán)利要求7所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述網(wǎng)絡(luò)接收端在讀取網(wǎng)絡(luò)緩存區(qū)的時(shí)候要等待數(shù)據(jù)均到達(dá)網(wǎng)絡(luò)緩存區(qū)后再去讀取,具體步驟如下: 設(shè)RTP數(shù)據(jù)幀的首部長度為N字節(jié),網(wǎng)絡(luò)接收端在網(wǎng)絡(luò)緩存區(qū)發(fā)現(xiàn)有網(wǎng)絡(luò)數(shù)據(jù)到達(dá)后,先判斷網(wǎng)絡(luò)緩存區(qū)是否有超過N個(gè)字節(jié)可讀,如果超過N個(gè)字節(jié)可讀,讀取N字節(jié)并分解獲得幀首部信息;如果不夠N字節(jié)則延時(shí)一毫秒后繼續(xù)判斷緩存區(qū)可讀的數(shù)據(jù)長度,循環(huán)等待直到有超過N字節(jié)可讀為止;獲得幀長度信息后,判斷緩存區(qū)剩余可讀數(shù)據(jù)的長度,如果達(dá)到幀的長度,讀取此幀,如果緩存區(qū)剩余可讀數(shù)據(jù)的長度沒有達(dá)到幀的長度,延時(shí)一毫秒后繼續(xù)判斷緩存區(qū)可讀數(shù)據(jù)長度,循環(huán)等待直到有超過N字節(jié)可讀為止,至此一幀數(shù)據(jù)讀取完成。
      9.根據(jù)權(quán)利要求7所述的一種提升低速網(wǎng)絡(luò)中RTP視頻流處理效率的方法,其特征在于,所述網(wǎng)絡(luò)接收端與發(fā)送端建立了多對(duì)套接字連接,通過select端口模型監(jiān)控套接字?jǐn)?shù)據(jù)的到達(dá)情況,對(duì)獲取到的數(shù)據(jù)進(jìn)行順序重建,具體步驟如下: a、通過鏈表管理接收到的RTP幀,根據(jù)FrameN0.字段遞增依次將連續(xù)的鏈表節(jié)點(diǎn)送入播放器; b、播放器緩存區(qū)是一個(gè)先進(jìn)先出的FIFO結(jié)構(gòu),對(duì)送進(jìn)來的每一個(gè)RTP幀分解成一個(gè)或多個(gè)RTP包,再對(duì)RTP包解析成H.264格式可播放的NALU裸流數(shù)據(jù),最后將完整的NALU幀送入播放庫進(jìn)行顯示; C、將每個(gè)從網(wǎng)絡(luò)緩存區(qū)接收到的一幀數(shù)據(jù),建立一個(gè)鏈表節(jié)點(diǎn),并根據(jù)Frame N0.值插入到鏈表中,如果有Frame N0.重復(fù)的幀則丟棄,如果Frame N0.小于已送入播放器的幀的Frame N0.則丟棄; d、根據(jù)select監(jiān)控套接字到達(dá),如果僅有一個(gè)套接字可讀,則讀取此套接字的一幀數(shù)據(jù)后,建立一個(gè)鏈表節(jié)點(diǎn)并插入鏈表,如果多個(gè)套接字可讀,則依次讀取每一個(gè)套接字的幀數(shù)據(jù),對(duì)每個(gè)RTP幀建立鏈表節(jié)點(diǎn),并插入鏈表。
      【文檔編號(hào)】H04N21/6437GK103929681SQ201410140850
      【公開日】2014年7月16日 申請(qǐng)日期:2014年4月9日 優(yōu)先權(quán)日:2014年4月9日
      【發(fā)明者】李陽, 張乾坤, 王孝貴, 邱換春, 汪俊鋒 申請(qǐng)人:安徽超遠(yuǎn)信息技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1