一種從實(shí)時(shí)傳輸協(xié)議數(shù)據(jù)包中重建編碼方式的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,特別涉及一種從實(shí)時(shí)傳輸協(xié)議(RTP)數(shù)據(jù)包中重建編碼方式的方法和裝置。
【背景技術(shù)】
[0002]當(dāng)前,在視頻監(jiān)控行業(yè)中,作為發(fā)送端的監(jiān)控設(shè)備產(chǎn)生的RTP數(shù)據(jù)包經(jīng)互聯(lián)網(wǎng)傳輸后到達(dá)接收端,接收端需要重建出RTP數(shù)據(jù)包中的數(shù)據(jù)的編碼方式,以便恢復(fù)出所需的基本碼流(ES)等。
[0003]現(xiàn)有技術(shù)中,主要通過(guò)以下兩種方式來(lái)重建出編碼方式:
[0004]方式一
[0005]發(fā)送端和接收端之間采用實(shí)時(shí)流傳輸協(xié)議(RTSP)來(lái)傳輸RTP數(shù)據(jù)包,接收端通過(guò)對(duì)RTSP協(xié)議中的會(huì)話(huà)描述協(xié)議(SDP)進(jìn)行解析來(lái)獲取編碼方式;
[0006]方式二
[0007]傳輸專(zhuān)門(mén)的私有數(shù)據(jù)包,利用私有數(shù)據(jù)包來(lái)指明編碼方式。
[0008]但是,上述兩種方式在實(shí)際應(yīng)用中均會(huì)存在一定的問(wèn)題,如:對(duì)于方式一來(lái)說(shuō),必須依賴(lài)于RTSP協(xié)議中的SDP信息,從而適用范圍有限;對(duì)于方式二來(lái)說(shuō),由于需要額外傳輸私有數(shù)據(jù)包,因此會(huì)增大對(duì)帶寬的占用。
【發(fā)明內(nèi)容】
[0009]有鑒于此,本發(fā)明提供了一種從RTP數(shù)據(jù)包中重建編碼方式的方法和裝置,適用范圍廣泛,且能夠節(jié)省帶寬。
[0010]為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0011]—種從RTP數(shù)據(jù)包中重建編碼方式的方法,包括:
[0012]對(duì)接收到的N個(gè)RTP數(shù)據(jù)包分別進(jìn)行解析,通過(guò)解析確定出每個(gè)RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式,N為大于1的正整數(shù);
[0013]分別統(tǒng)計(jì)確定出的每種編碼方式對(duì)應(yīng)的RTP數(shù)據(jù)包數(shù),將統(tǒng)計(jì)結(jié)果最大的編碼方式作為重建出的編碼方式。
[0014]一種從RTP數(shù)據(jù)包中重建編碼方式的裝置,包括:
[0015]第一處理模塊,用于對(duì)接收到的N個(gè)RTP數(shù)據(jù)包分別進(jìn)行解析,通過(guò)解析確定出每個(gè)RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式,N為大于1的正整數(shù);分別統(tǒng)計(jì)確定出的每種編碼方式對(duì)應(yīng)的RTP數(shù)據(jù)包數(shù),將統(tǒng)計(jì)結(jié)果最大的編碼方式作為重建出的編碼方式。
[0016]可見(jiàn),采用本發(fā)明所述方案,既無(wú)需依賴(lài)于RTSP協(xié)議中的SDP信息,也無(wú)需額外傳輸私有數(shù)據(jù)包,從而克服了現(xiàn)有技術(shù)中存在的問(wèn)題,使得本發(fā)明所述方案不但適用范圍廣泛,而且能夠節(jié)省帶寬等。
【附圖說(shuō)明】
[0017]圖1為本發(fā)明從RTP數(shù)據(jù)包中重建編碼方式的方法實(shí)施例的流程圖。
[0018]圖2為現(xiàn)有JPEG頭的組成結(jié)構(gòu)示意圖。
[0019]圖3為現(xiàn)有Single NALU模式下的數(shù)據(jù)結(jié)構(gòu)示意圖。
[0020]圖4為現(xiàn)有FU-A模式下的數(shù)據(jù)結(jié)構(gòu)示意圖。
[0021]圖5為圖4中所示的FU header字段的組成結(jié)構(gòu)示意圖。
[0022]圖6為現(xiàn)有STAP-A模式下的數(shù)據(jù)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0023]為了使本發(fā)明的技術(shù)方案更加清楚、明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明所述方案作進(jìn)一步的詳細(xì)說(shuō)明。
[0024]圖1為本發(fā)明從RTP數(shù)據(jù)包中重建編碼方式的方法實(shí)施例的流程圖。如圖1所示,包括以下步驟11?12。
[0025]步驟11:對(duì)接收到的N個(gè)RTP數(shù)據(jù)包分別進(jìn)行解析,通過(guò)解析確定出每個(gè)RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式,N為大于1的正整數(shù)。
[0026]步驟12:分別統(tǒng)計(jì)確定出的每種編碼方式對(duì)應(yīng)的RTP數(shù)據(jù)包數(shù),將統(tǒng)計(jì)結(jié)果最大的編碼方式作為重建出的編碼方式。
[0027]N的具體取值可根據(jù)實(shí)際需要而定,之所以要對(duì)多個(gè)RTP數(shù)據(jù)包進(jìn)行解析,主要是考慮到可通過(guò)增加解析樣本數(shù)來(lái)提高最終結(jié)果的準(zhǔn)確性。
[0028]在實(shí)際應(yīng)用中,所述編碼方式可包括:動(dòng)態(tài)圖像專(zhuān)家組4(MPEG4)、MPEG2、聯(lián)合圖像專(zhuān)家組(JPEG)和Η.264等。其中,Η.264編碼方式又可進(jìn)一步包括以下模式:單獨(dú)封包(Single NALU)模式、分片封包(FU-A)模式和組合封包(STAP-A)模式。以下分別對(duì)如何確定是否為上述編碼方式進(jìn)行說(shuō)明。
[0029]1.1)MPEG4
[0030]針對(duì)每個(gè)RTP數(shù)據(jù)包,可分別確定跳過(guò)該RTP數(shù)據(jù)包的RTP頭之后的起始碼是否為00 00 01 B0,如果是,則可確定該RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式為MPEG4。
[0031]1.2)MPEG2
[0032]針對(duì)每個(gè)RTP數(shù)據(jù)包,可分別確定跳過(guò)該RTP數(shù)據(jù)包的RTP頭之后的起始碼是否為00 00 01 B3,如果是,則可確定該RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式為MPEG2。
[0033]1.3) JPEG
[0034]針對(duì)每個(gè)RTP數(shù)據(jù)包,可分別確定跳過(guò)該RTP數(shù)據(jù)包的RTP頭之后的第7個(gè)字節(jié)是否符合JPEG寬度定義標(biāo)準(zhǔn)以及第8個(gè)字節(jié)是否符合JPEG高度定義標(biāo)準(zhǔn),如果均符合,則可確定該RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式為JPEG。
[0035]圖2為現(xiàn)有JPEG頭的組成結(jié)構(gòu)示意圖。如圖2所示,其中包括:類(lèi)型特定(Type-Specific)、分段偏移(Fragment Offset)、類(lèi)型(Type)、Q、寬度(Width)和高度(Height)等字段;其中,類(lèi)型特定、類(lèi)型、Q、寬度和高度字段均占用一個(gè)字節(jié),分段偏移字段占用3個(gè)字節(jié),而且,寬度字段占用RTP頭之后的第7個(gè)字節(jié),高度字段占用RTP頭之后的第8個(gè)字節(jié)。
[0036]1.4)H.264
[0037]針對(duì)每個(gè)RTP數(shù)據(jù)包,可分別讀取跳過(guò)該RTP數(shù)據(jù)包的RTP頭之后的第一個(gè)字節(jié)的后5位;
[0038]如果取值在1?23之間,則可確定該RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式為H.264中的Single NALU 模式;
[0039]如果取值為28,則可確定該RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式為H.264中的FU_A模式;
[0040]如果取值為24,則可確定該RTP數(shù)據(jù)包對(duì)應(yīng)的編碼方式為H.264中的STAP-A模式。
[0041]當(dāng)一個(gè)H.264的網(wǎng)絡(luò)適配層單元(NAL Unit,即NALU)的長(zhǎng)度不超過(guò)傳輸系統(tǒng)(MTU)對(duì)RTP數(shù)據(jù)包負(fù)載部分長(zhǎng)度的限制時(shí),可采用Single NALU模式;
[0042]當(dāng)一個(gè)H.264的NAL Unit的長(zhǎng)度超過(guò)MTU對(duì)RTP數(shù)據(jù)包負(fù)載部分長(zhǎng)度的限制時(shí),需要將一個(gè)NAL Unit進(jìn)行分片,即拆分成多個(gè)RTP數(shù)據(jù)包來(lái)進(jìn)行發(fā)送,即采用FU-A模式;
[0043]當(dāng)一個(gè)H.264的NAL Unit的長(zhǎng)度非常小時(shí),可以將多個(gè)NAL Unit封裝在一個(gè)RTP數(shù)據(jù)包中進(jìn)行發(fā)送,即采用STAP-A模式。
[0044]在實(shí)際應(yīng)用中,對(duì)于每個(gè)RTP數(shù)據(jù)包來(lái)說(shuō),可首先確定其對(duì)應(yīng)的編碼方式是否為MPEG4,如果是,則結(jié)束處理,否則,可進(jìn)一步確定其對(duì)應(yīng)的編碼方式是否為MPEG2,如果是,則結(jié)束處理,否則,可進(jìn)一步確定其對(duì)應(yīng)的編碼方式是否為JPEG,如果是,則結(jié)束處理,否貝U,可進(jìn)一步確定其對(duì)應(yīng)的編碼方式是否為H.264 ;當(dāng)然,以上僅為一種較佳的實(shí)施方式,具體采用何種順序可根據(jù)實(shí)際需要而定。
[0045]在重建出編碼方式之后,可針對(duì)接收到的各RTP數(shù)據(jù)包,根據(jù)重建出的編碼方式恢復(fù)出ES并輸出ο
[0046]根據(jù)重建出的編碼方式的不同,恢復(fù)出ES的方式也會(huì)不同,以下分別進(jìn)行說(shuō)明。
[0047]2.1)MPEG4
[0048]針對(duì)接收到的各RTP數(shù)據(jù)包,可分別將其去除RTP頭后輸出。
[0049]2.2)MPEG2
[0050]針對(duì)接收到的各RTP數(shù)據(jù)包,可分別將其去除RTP頭后輸出。
[0051]2.3) JPEG
[0052]針對(duì)接收到的各RTP數(shù)據(jù)包,可分別進(jìn)行以下處理:
[0053]將該RTP數(shù)據(jù)包中的負(fù)載數(shù)據(jù)提取出來(lái),即將該RTP數(shù)據(jù)包中跳過(guò)RTP頭和JPEG頭之后的數(shù)據(jù)提取出來(lái);
[0054]確定該RTP數(shù)據(jù)包的RTP頭中的時(shí)間戳相比于最近一次接收到的RTP數(shù)據(jù)包的RTP頭中的時(shí)間戳是否有更新,如果是,則將組幀緩存中的數(shù)據(jù)輸出,并在提取出的負(fù)載數(shù)據(jù)前添加一個(gè)量化表后添加到組幀緩存中,如果否,則將提取出的負(fù)載數(shù)據(jù)添加到組幀緩存中,如何添加量化表為現(xiàn)有技術(shù)。
[0055]舉例說(shuō)明:
[0056]假設(shè)一幀JPEG數(shù)據(jù)被封裝成4個(gè)RTP數(shù)據(jù)包,結(jié)構(gòu)分別為:RTP頭+JPEG頭+負(fù)載數(shù)據(jù)1、RTP頭+JPEG頭+負(fù)載數(shù)據(jù)2、RTP頭+JPEG頭+負(fù)載數(shù)據(jù)3、RTP頭+JPEG頭+負(fù)載數(shù)據(jù)4 ;那么,組幀緩存中輸出的數(shù)據(jù)將為:量化表+負(fù)載數(shù)據(jù)1+負(fù)載數(shù)據(jù)2+負(fù)載數(shù)據(jù)3+負(fù)載數(shù)據(jù)4。
[0057]時(shí)間戳發(fā)生更新,則表示更換為了下一幀JPEG數(shù)據(jù)。
[0058]2.4) H.264
[0059]2.4.1) Single NALU 模式
[0060]圖3為現(xiàn)有Single NALU模式下的數(shù)據(jù)結(jié)構(gòu)示意圖。如圖3所示,其中第一個(gè)字節(jié)包含的F、NRI和Type字段與H.264標(biāo)準(zhǔn)定義的NAL Unit第一個(gè)字節(jié)完全相同,因此,在恢復(fù)ES時(shí),只需要將RTP數(shù)據(jù)包去除RTP頭后并添加起始碼00000001或000001即可。
[0061]另外,在實(shí)際應(yīng)用中,如果沒(méi)有重建出序列參數(shù)集(SPS)或圖像參數(shù)集(PPS),得到的碼流是無(wú)法進(jìn)行解碼的,為此,在進(jìn)行上述處理之前,還需要先進(jìn)行以下處理:確定出接收到的各RTP數(shù)據(jù)包中第一個(gè)符合以下條件的RTP數(shù)據(jù)包:跳過(guò)該RTP數(shù)據(jù)包的RTP頭之后的第一個(gè)字節(jié)的后5位的取值為7或8,之