本申請是原案的分案申請,原案的申請?zhí)?01410043596.3,申請日2014年1月29日,發(fā)明創(chuàng)造名稱“基帶幀的封裝方法及解封裝方法”。
本發(fā)明涉及無線傳輸基帶幀的傳輸技術(shù)領(lǐng)域,特別涉及一種基帶幀的封裝方法及解封裝方法。
背景技術(shù):
隨著無線廣播和通信業(yè)務(wù)的發(fā)展,無線鏈路中傳輸?shù)臄?shù)據(jù)內(nèi)容呈現(xiàn)多樣化的特征,ip數(shù)據(jù)包成為主要的數(shù)據(jù)類型。ip數(shù)據(jù)包由數(shù)據(jù)包頭和數(shù)據(jù)載荷兩部分組成,前者用于標(biāo)注發(fā)送和接收地址、協(xié)議類型等;后者用于承載所要傳輸?shù)臄?shù)據(jù)內(nèi)容,可以進(jìn)一步分為udp或tcp等不同協(xié)議。這兩部分?jǐn)?shù)據(jù)都存在一定的冗余度。此外,其他一些無線廣播和通信業(yè)務(wù)中所可能用的到數(shù)據(jù)類型,例如ts數(shù)據(jù)包等,也一定程度存在冗余度。為了提高無線鏈路的傳輸效率,在發(fā)送端對數(shù)據(jù)進(jìn)行壓縮并在接收端進(jìn)行解壓無損失地恢復(fù)出原數(shù)據(jù)是可行和有利的。
在現(xiàn)有技術(shù)中,一些無線廣播系統(tǒng)中并未考慮對輸入數(shù)據(jù)進(jìn)行壓縮優(yōu)化;在有些無線通信系統(tǒng)中,使用了帶反饋的包頭壓縮功能,并不適用于單向的廣播網(wǎng)絡(luò);在有些無線廣播系統(tǒng)中,使用了rohc協(xié)議等壓縮方法,只適用于特定的數(shù)據(jù)類型,無法適用類型更廣泛的其他數(shù)據(jù)類型或一些新型數(shù)據(jù)類型。
無線鏈路基帶幀中對數(shù)據(jù)的壓縮傳輸方法主要需要解決的問題包括:一方面針對不同的輸入數(shù)據(jù)類型與特征,以及基帶幀本身的參數(shù),適用不同的壓縮方法,以提高效率;另一方面考慮到無線傳輸環(huán)境的復(fù)雜和惡劣,能夠及時(shí)檢測出傳輸錯(cuò)誤并及時(shí)恢復(fù)正常工作狀態(tài)。但現(xiàn)有技術(shù)中沒有提供較理想的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明解決的問題是現(xiàn)有的廣播系統(tǒng)未考慮對輸入數(shù)據(jù)進(jìn)行壓縮優(yōu)化以及適應(yīng)不同數(shù)據(jù)類型進(jìn)行壓縮優(yōu)化。
為解決上述問題,本發(fā)明實(shí)施例提供一種基帶幀的封裝方法,包括如下步驟:將接收到的未壓縮數(shù)據(jù)包存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū);對當(dāng)前該輸入數(shù)據(jù)緩沖區(qū)內(nèi)的所有未壓縮數(shù)據(jù)包進(jìn)行壓縮以形成壓縮數(shù)據(jù)包;將該壓縮數(shù)據(jù)包替換壓縮數(shù)據(jù)緩沖區(qū)中已有的壓縮數(shù)據(jù)包;當(dāng)兩個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)長度都等于或大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度時(shí),選擇其中數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊;其中該待傳輸數(shù)據(jù)塊的長度為一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度;將所述待傳輸數(shù)據(jù)塊封裝為基帶幀,并在該基帶幀的幀頭內(nèi)標(biāo)識(shí)該待傳輸數(shù)據(jù)塊是否經(jīng)過壓縮。
可選的,基帶幀的封裝方法還包括如下步驟:若選擇的數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)存儲(chǔ)的所有數(shù)據(jù)包的長度大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度,則將剩余數(shù)據(jù)包存儲(chǔ)于該緩沖區(qū)的頭部,并將該剩余數(shù)據(jù)包復(fù)制存儲(chǔ)到另一個(gè)緩沖區(qū)的頭部。
可選的,基帶幀的封裝方法還包括如下步驟:無論該剩余數(shù)據(jù)包為未壓縮數(shù)據(jù)包或是壓縮數(shù)據(jù)包,該剩余數(shù)據(jù)包不再進(jìn)行壓縮。
可選的,基帶幀的封裝方法還包括如下步驟:每封裝完一個(gè)基帶幀后,將輸入數(shù)據(jù)緩沖區(qū)和壓縮數(shù)據(jù)緩沖區(qū)中除剩余數(shù)據(jù)包以外的其他數(shù)據(jù)包清零。
可選的,基帶幀的封裝方法還包括如下步驟:設(shè)定超時(shí)閾值,并在數(shù)據(jù)緩沖區(qū)清零時(shí)同時(shí)清零計(jì)時(shí)器;從執(zhí)行將接收到的未壓縮數(shù)據(jù)包存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)的步驟開始計(jì)時(shí),在計(jì)時(shí)器達(dá)到該超時(shí)閾值時(shí),無論壓縮數(shù)據(jù)緩沖區(qū)內(nèi)存儲(chǔ)的壓縮數(shù)據(jù)包的數(shù)據(jù)長度是否等于或大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度,將當(dāng)前該壓縮數(shù)據(jù)緩沖區(qū)內(nèi)已存儲(chǔ)的壓縮數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊;將所述待傳輸數(shù)據(jù)塊封裝為基帶幀,并在該基帶幀的幀頭標(biāo)識(shí)該待傳輸數(shù)據(jù)塊已經(jīng)過壓縮。
可選的,所述輸入數(shù)據(jù)緩沖區(qū)和所述壓縮數(shù)據(jù)緩沖區(qū)所能容納的數(shù)據(jù)長度至少大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度。
可選的,所述未壓縮數(shù)據(jù)包和壓縮數(shù)據(jù)包為ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包或其他未指定類型數(shù)據(jù)包。
可選的,所述對當(dāng)前該輸入數(shù)據(jù)緩沖區(qū)內(nèi)的所有未壓縮數(shù)據(jù)包進(jìn)行壓縮以形成壓縮數(shù)據(jù)包包括如下步驟:1)把所有未壓縮數(shù)據(jù)包作為一個(gè)整體進(jìn)行壓縮,并統(tǒng)計(jì)其壓縮后的長度;2)根據(jù)接收到的未壓縮數(shù)據(jù)包的不同類型,對所有未壓縮數(shù)據(jù)包進(jìn)行內(nèi)容重排;3)對經(jīng)過內(nèi)容重排的所有未壓縮數(shù)據(jù)包中的包頭進(jìn)行壓縮以形成壓縮數(shù)據(jù)包包頭;4)將所述壓縮數(shù)據(jù)包包頭與經(jīng)過內(nèi)容重排的所有未壓縮數(shù)據(jù)包中的數(shù)據(jù)負(fù)載拼接在一起以形成壓縮數(shù)據(jù)包,并統(tǒng)計(jì)該壓縮數(shù)據(jù)包的長度;5)比較上述步驟1)和步驟4)得到的長度,選擇其中長度較短的一個(gè)壓縮后數(shù)據(jù)包放入壓縮數(shù)據(jù)緩沖區(qū);6)在壓縮數(shù)據(jù)包的頭部設(shè)置壓縮信息,所述壓縮信息包括所述壓縮數(shù)據(jù)的壓縮方法與包的類型。
本發(fā)明實(shí)施例還提供了一種基帶幀的解封裝方法,包括如下步驟:接收基帶幀,其中所述基帶幀是采用上述基帶幀的封裝方法封裝而成;檢測該基帶幀的幀頭以判斷該基帶幀內(nèi)的傳輸數(shù)據(jù)包是否經(jīng)過壓縮;若判斷結(jié)果為是,則提取當(dāng)前基帶幀內(nèi)的傳輸數(shù)據(jù)包中除剩余數(shù)據(jù)包以外的所有壓縮數(shù)據(jù)包,以及下一個(gè)基帶幀內(nèi)的傳輸數(shù)據(jù)包中的剩余數(shù)據(jù)包拼接成一個(gè)完整的壓縮數(shù)據(jù)包;對該完整的壓縮數(shù)據(jù)包進(jìn)行解壓以得到原始數(shù)據(jù);將當(dāng)前基帶幀的幀頭與所述原始數(shù)據(jù)拼接在一起,并在當(dāng)前基帶幀的幀頭內(nèi)標(biāo)識(shí)該原始數(shù)據(jù)已解壓縮。
可選的,基帶幀的解封裝方法還包括如下步驟:若判斷結(jié)果為否,則提取當(dāng)前基帶幀內(nèi)的傳輸數(shù)據(jù)包中除剩余數(shù)據(jù)包以外的所有未壓縮數(shù)據(jù)包,以及下一個(gè)基帶幀內(nèi)的傳輸數(shù)據(jù)包中的剩余數(shù)據(jù)包拼接成一個(gè)完整的未壓縮數(shù)據(jù)包;將當(dāng)前基帶幀的幀頭與所述完整的未壓縮數(shù)據(jù)拼接在一起。
可選的,所述未壓縮數(shù)據(jù)包、壓縮數(shù)據(jù)包以及傳輸數(shù)據(jù)包為ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包或其他未指定類型數(shù)據(jù)包。
可選的,提取壓縮數(shù)據(jù)包中的壓縮數(shù)據(jù)包包頭;根據(jù)壓縮信息中的標(biāo)志位,選擇對剩下的數(shù)據(jù)進(jìn)行解壓;或只對壓縮數(shù)據(jù)包包頭進(jìn)行解壓以得到各個(gè)包頭,此后將各個(gè)包頭與其對應(yīng)的數(shù)據(jù)負(fù)載依照順序進(jìn)行重排并拼接以得到原始數(shù)據(jù)包。
與現(xiàn)有技術(shù)相比,本發(fā)明技術(shù)方案具有以下有益效果:
1)對接收到的存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)內(nèi)的未壓縮數(shù)據(jù)包進(jìn)行壓縮后存儲(chǔ)于壓縮數(shù)據(jù)緩沖區(qū),并比較兩個(gè)緩沖區(qū)內(nèi)的數(shù)據(jù)包的數(shù)據(jù)長度,選擇其中數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊,以實(shí)現(xiàn)基帶幀的傳輸效率最優(yōu)化。
2)在基帶幀封裝過程中,設(shè)定超時(shí)閾值,當(dāng)處理一個(gè)基帶幀封裝的時(shí)間超過該超時(shí)閾值時(shí),停止對未壓縮數(shù)據(jù)包的壓縮處理,將當(dāng)前該壓縮數(shù)據(jù)緩沖區(qū)內(nèi)已存儲(chǔ)的壓縮數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊,從而避免了因輸入的數(shù)據(jù)包信息冗余度高、壓縮效率高而導(dǎo)致需要花費(fèi)很長時(shí)間完成一個(gè)基帶幀的封裝,影響基帶幀的正常傳輸。
3)對于ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包,在壓縮過程中,先對所有未壓縮數(shù)據(jù)包進(jìn)行內(nèi)容重排,將其中的包頭取出合并進(jìn)行壓縮以形成壓縮數(shù)據(jù)包包頭,再與所有未壓縮數(shù)據(jù)包中的數(shù)據(jù)負(fù)載拼接在一起以形成壓縮數(shù)據(jù)包,從而減少運(yùn)算量,提高壓縮效率。
4)在壓縮過程中,對ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包或其他未指定類型數(shù)據(jù)包,還可將其看作一般數(shù)據(jù)進(jìn)行完整壓縮。通過比較該方法與上述重排-壓縮的方法所得到的壓縮數(shù)據(jù)包長度,選擇更優(yōu)的一種,以提高壓縮效率。
附圖說明
圖1是本發(fā)明的一種基帶幀的封裝方法的具體實(shí)施方式的流程示意圖;
圖2是本發(fā)明的一種基帶幀的解封裝方法的具體實(shí)施方式的流程示意圖。
具體實(shí)施方式
發(fā)明人發(fā)現(xiàn)現(xiàn)有的廣播系統(tǒng)未考慮對輸入數(shù)據(jù)進(jìn)行壓縮優(yōu)化以及適應(yīng)不同數(shù)據(jù)類型進(jìn)行壓縮優(yōu)化。
針對上述問題,發(fā)明人經(jīng)過研究,提供了一種基帶幀的封裝方法及解封裝方法,以實(shí)現(xiàn)基帶幀的傳輸效率最優(yōu)化。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式做詳細(xì)的說明。
如圖1所示的是本發(fā)明的一種基帶幀的封裝方法的具體實(shí)施方式的流程示意圖。參考圖1,基帶幀的封裝方法包括如下步驟:
步驟s11:將接收到的未壓縮數(shù)據(jù)包存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū);
步驟s12:對當(dāng)前該輸入數(shù)據(jù)緩沖區(qū)內(nèi)的所有未壓縮數(shù)據(jù)包進(jìn)行壓縮以形成壓縮數(shù)據(jù)包;
步驟s13:將該壓縮數(shù)據(jù)包替換壓縮數(shù)據(jù)緩沖區(qū)中已有的壓縮數(shù)據(jù)包;
步驟s14:當(dāng)兩個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)長度都等于或大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度時(shí),選擇其中數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊;其中該待傳輸數(shù)據(jù)塊的長度為一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度;
步驟s15:將所述待傳輸數(shù)據(jù)塊封裝為基帶幀,并在該基帶幀的幀頭內(nèi)標(biāo)識(shí)該待傳輸數(shù)據(jù)塊是否經(jīng)過壓縮。
本實(shí)施例中,在發(fā)送端作基帶幀封裝時(shí),可以設(shè)置兩個(gè)緩沖區(qū),分別為輸入數(shù)據(jù)緩沖區(qū)和壓縮數(shù)據(jù)緩沖區(qū),且所述輸入數(shù)據(jù)緩沖區(qū)和所述壓縮數(shù)據(jù)緩沖區(qū)所能容納的數(shù)據(jù)長度至少大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度。
在開始傳輸未壓縮數(shù)據(jù)包時(shí),先清零兩個(gè)緩沖區(qū)。然后,將接收到的未壓縮數(shù)據(jù)包存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)(如步驟s11所述),其中所述未壓縮數(shù)據(jù)包可以是ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包或其他未指定類型數(shù)據(jù)包。
然后,如步驟s12所述,對當(dāng)前該輸入數(shù)據(jù)緩沖區(qū)內(nèi)的所有未壓縮數(shù)據(jù)包進(jìn)行壓縮以形成壓縮數(shù)據(jù)包。如步驟s13所述,將該壓縮數(shù)據(jù)包替換壓縮數(shù)據(jù)緩沖區(qū)中已有的壓縮數(shù)據(jù)包。
具體來說,在接收到第一個(gè)未壓縮數(shù)據(jù)包并存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)后,啟用壓縮器對該第一個(gè)未壓縮數(shù)據(jù)包進(jìn)行壓縮以形成壓縮數(shù)據(jù)包。然后,將該壓縮數(shù)據(jù)包存儲(chǔ)于壓縮數(shù)據(jù)緩沖區(qū)中并替換已有的壓縮數(shù)據(jù)包。需要說明的是,此時(shí)壓縮數(shù)據(jù)緩沖區(qū)中尚未存儲(chǔ)任何壓縮數(shù)據(jù)包,替換已有的壓縮數(shù)據(jù)包為空數(shù)據(jù)包。
接下來,接收到第二個(gè)未壓縮數(shù)據(jù)包并存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)后,是將第一個(gè)未壓縮數(shù)據(jù)包和第二個(gè)未壓縮數(shù)據(jù)包作為整體進(jìn)行壓縮后以形成壓縮數(shù)據(jù)包。然后,再將該壓縮數(shù)據(jù)包存儲(chǔ)于壓縮數(shù)據(jù)緩沖區(qū)中并替換已有的壓縮數(shù)據(jù)包,此時(shí)替換的已有的壓縮數(shù)據(jù)包為先前的第一個(gè)壓縮數(shù)據(jù)包。
以此類推,依次對當(dāng)前該輸入數(shù)據(jù)緩沖區(qū)內(nèi)的所有未壓縮數(shù)據(jù)包進(jìn)行壓縮以形成壓縮數(shù)據(jù)包,并將該壓縮數(shù)據(jù)包替換壓縮數(shù)據(jù)緩沖區(qū)中已有的壓縮數(shù)據(jù)包。
接著,如步驟s14所述,當(dāng)兩個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)長度都等于或大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度時(shí),選擇其中數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊。其中,該待傳輸數(shù)據(jù)塊的長度為一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度。
具體來說,依照上述步驟s11至步驟s13的方式對接收到的未壓縮數(shù)據(jù)包進(jìn)行壓縮處理,直到兩個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)長度都等于或大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度時(shí),選擇其中數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊。
這里分為兩種情況:
1)當(dāng)兩個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)長度都等于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度時(shí),可以選擇其中任一個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊,而且在這種情況下,任一個(gè)緩沖區(qū)內(nèi)所有的數(shù)據(jù)包全部在一個(gè)基帶幀內(nèi)傳輸,沒有剩余數(shù)據(jù)包。
2)當(dāng)兩個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)長度都大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度時(shí),選擇其中數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊。具體地,當(dāng)輸入數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)長度大于壓縮數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)長度時(shí),說明壓縮后的數(shù)據(jù)包的數(shù)據(jù)長度更少,從而選擇壓縮數(shù)據(jù)包(即壓縮數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)包)作為待傳輸數(shù)據(jù)塊。當(dāng)輸入數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)長度小于壓縮數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)長度時(shí),說明壓縮后的數(shù)據(jù)包的數(shù)據(jù)長度反而更大(即沒有實(shí)現(xiàn)數(shù)據(jù)壓縮,數(shù)據(jù)包反而多了冗余),這時(shí)選擇未壓縮數(shù)據(jù)包(即輸入數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)包)作為待傳輸數(shù)據(jù)塊。
如步驟s15所述,將所述待傳輸數(shù)據(jù)塊封裝為基帶幀,并在該基帶幀的幀頭內(nèi)標(biāo)識(shí)該待傳輸數(shù)據(jù)塊是否經(jīng)過壓縮。其中,將待傳輸數(shù)據(jù)塊封裝為基帶幀的封裝過程可以現(xiàn)有技術(shù)來實(shí)現(xiàn),在此不再贅述。在基帶幀的幀頭內(nèi)設(shè)置一個(gè)標(biāo)志位(例如cmp,用于告知接收端當(dāng)前基帶幀的傳輸數(shù)據(jù)包是否經(jīng)過了壓縮,長度為1比特)。當(dāng)cmp=0時(shí),表示未啟用數(shù)據(jù)包壓縮功能,接收端可根據(jù)原有標(biāo)準(zhǔn)對數(shù)據(jù)域內(nèi)容進(jìn)行解析和使用;當(dāng)cmp=1時(shí),表示啟用數(shù)據(jù)包壓縮功能,接收端需把數(shù)據(jù)域內(nèi)容先進(jìn)行解壓縮后再行解析和使用。
需要說明的是,當(dāng)兩個(gè)緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)長度都大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度時(shí),選擇其中數(shù)據(jù)長度較短的緩沖區(qū)內(nèi)存儲(chǔ)的數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊,該待傳輸數(shù)據(jù)塊的長度為一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度。這樣緩沖區(qū)內(nèi)將有一部分?jǐn)?shù)據(jù)包(稱為剩余數(shù)據(jù)包)需要放在下一個(gè)基帶幀中傳輸,對于該剩余數(shù)據(jù)包的處理方式如下:
將剩余數(shù)據(jù)包存儲(chǔ)于所選擇的數(shù)據(jù)長度較短的緩沖區(qū)的頭部,并將該剩余數(shù)據(jù)包復(fù)制存儲(chǔ)到另一個(gè)緩沖區(qū)的頭部。例如,當(dāng)所選擇的緩沖區(qū)為輸入數(shù)據(jù)緩沖區(qū)時(shí),該剩余數(shù)據(jù)包存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)的頭部,并復(fù)制存儲(chǔ)于壓縮數(shù)據(jù)緩沖區(qū)的頭部。當(dāng)所選擇的緩沖區(qū)為壓縮數(shù)據(jù)緩沖區(qū)時(shí),該剩余數(shù)據(jù)包存儲(chǔ)于壓縮數(shù)據(jù)緩沖區(qū)的頭部,并復(fù)制存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)的頭部。
進(jìn)一步地,無論該剩余數(shù)據(jù)包為未壓縮數(shù)據(jù)包或是壓縮數(shù)據(jù)包,該剩余數(shù)據(jù)包不再進(jìn)行壓縮。也就是說,在后續(xù)輸入數(shù)據(jù)緩沖區(qū)內(nèi)接收新的未壓縮數(shù)據(jù)包并對其進(jìn)行壓縮時(shí),不再將存儲(chǔ)于頭部的剩余數(shù)據(jù)包進(jìn)行壓縮。
依照上述實(shí)施例的方式對每一個(gè)基帶幀進(jìn)行封裝,而每封裝完一個(gè)基帶幀后,將輸入數(shù)據(jù)緩沖區(qū)和壓縮數(shù)據(jù)緩沖區(qū)中除剩余數(shù)據(jù)包以外的其他數(shù)據(jù)包清零。
發(fā)明人進(jìn)一步考慮,若輸入的未壓縮數(shù)據(jù)包的信息冗余度高、而壓縮效率高、壓縮后的數(shù)據(jù)量很小,將會(huì)導(dǎo)致需要很多輸入的未壓縮數(shù)據(jù)包進(jìn)行壓縮才能填滿壓縮數(shù)據(jù)緩沖區(qū),從而花費(fèi)很長時(shí)間才能完成一個(gè)基帶幀的封裝。
因此,基于上述實(shí)施例,發(fā)明人做了如下改進(jìn):
1)設(shè)定超時(shí)閾值,并在數(shù)據(jù)緩沖區(qū)清零時(shí)同時(shí)清零計(jì)時(shí)器;
2)從執(zhí)行將接收到的未壓縮數(shù)據(jù)包存儲(chǔ)于輸入數(shù)據(jù)緩沖區(qū)的步驟開始計(jì)時(shí),在計(jì)時(shí)器達(dá)到該超時(shí)閾值時(shí),無論壓縮數(shù)據(jù)緩沖區(qū)內(nèi)存儲(chǔ)的壓縮數(shù)據(jù)包的數(shù)據(jù)長度是否等于或大于一個(gè)基帶幀所能容納的最大數(shù)據(jù)長度,將當(dāng)前該壓縮數(shù)據(jù)緩沖區(qū)內(nèi)已存儲(chǔ)的壓縮數(shù)據(jù)包作為待傳輸數(shù)據(jù)塊;
3)將所述待傳輸數(shù)據(jù)塊封裝為基帶幀,并在該基帶幀的幀頭標(biāo)識(shí)該待傳輸數(shù)據(jù)塊已經(jīng)過壓縮。
通過這樣改進(jìn),從而避免了因輸入的數(shù)據(jù)包信息冗余度高、壓縮效率高而導(dǎo)致需要花費(fèi)很長時(shí)間完成一個(gè)基帶幀的封裝,影響基帶幀的傳輸效率。
另一方面,對于對未壓縮數(shù)據(jù)包進(jìn)行壓縮的方式,本實(shí)施例提供如下實(shí)施方式,即上述步驟s12包括如下步驟:
1)把所有未壓縮數(shù)據(jù)包作為一個(gè)整體進(jìn)行壓縮,并統(tǒng)計(jì)其壓縮后的長度;
2)根據(jù)接收到的未壓縮數(shù)據(jù)包的不同類型,對所有未壓縮數(shù)據(jù)包進(jìn)行內(nèi)容重排;
3)對經(jīng)過內(nèi)容重排的所有未壓縮數(shù)據(jù)包中的包頭進(jìn)行壓縮以形成壓縮數(shù)據(jù)包包頭;
4)將所述壓縮數(shù)據(jù)包包頭與經(jīng)過內(nèi)容重排的所有未壓縮數(shù)據(jù)包中的數(shù)據(jù)負(fù)載拼接在一起以形成壓縮數(shù)據(jù)包,并統(tǒng)計(jì)該壓縮數(shù)據(jù)包的長度;
5)比較上述步驟1)和步驟4)得到的長度,選擇其中長度較短的一個(gè)壓縮后數(shù)據(jù)包放入壓縮數(shù)據(jù)緩沖區(qū);
6)在壓縮數(shù)據(jù)包的頭部設(shè)置壓縮信息,所述壓縮信息包括所述壓縮數(shù)據(jù)的壓縮方法與包的類型。
在本實(shí)施例中,對所有未壓縮數(shù)據(jù)包進(jìn)行內(nèi)容重排的實(shí)施過程是:將每一個(gè)未壓縮數(shù)據(jù)包的包頭提取出來,將這些包頭合并在一起并進(jìn)行壓縮處理以形成壓縮數(shù)據(jù)包包頭;而將每一個(gè)未壓縮數(shù)據(jù)包的數(shù)據(jù)負(fù)載提取出來,將這些數(shù)據(jù)負(fù)載合并在一起,但這些數(shù)據(jù)負(fù)載并不做壓縮處理,從而減少運(yùn)算量,提高壓縮效率。
需要說明的是,這樣的壓縮方式適用于ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包。對于其他類型的數(shù)據(jù)包,不進(jìn)行內(nèi)容重排,直接對其整體進(jìn)行壓縮處理。對于ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包,也可不進(jìn)行內(nèi)容重排,直接對其整體進(jìn)行壓縮處理。
本發(fā)明實(shí)施例還提供了一種基帶幀的解封裝方法。如圖2所示的是本發(fā)明的一種基帶幀的解封裝方法的具體實(shí)施方式的流程示意圖。參考圖2,基帶幀的解封裝方式包括如下步驟:
步驟s21:接收基帶幀,其中所述基帶幀是采用上述基帶幀的封裝方法封裝而成;
步驟s22:檢測該基帶幀的幀頭以判斷該基帶幀內(nèi)的傳輸數(shù)據(jù)包是否經(jīng)過壓縮;
步驟s23:若判斷結(jié)果為是,則提取當(dāng)前基帶幀內(nèi)的傳輸數(shù)據(jù)包中除剩余數(shù)據(jù)包以外的所有壓縮數(shù)據(jù)包,以及下一個(gè)基帶幀內(nèi)的傳輸數(shù)據(jù)包中的剩余數(shù)據(jù)包拼接成一個(gè)完整的壓縮數(shù)據(jù)包;
步驟s24:對該完整的壓縮數(shù)據(jù)包進(jìn)行解壓以得到原始數(shù)據(jù);
步驟s25:將當(dāng)前基帶幀的幀頭與所述原始數(shù)據(jù)拼接在一起,并在當(dāng)前基帶幀的幀頭內(nèi)標(biāo)識(shí)該原始數(shù)據(jù)已解壓縮。
在本實(shí)施例中,接收端接收到基帶幀后,檢測該基帶幀的幀頭以判斷該基帶幀內(nèi)的傳輸數(shù)據(jù)包是否經(jīng)過壓縮。
若判斷結(jié)果為是,則提取當(dāng)前基帶幀內(nèi)的傳輸數(shù)據(jù)包中除剩余數(shù)據(jù)包(若有的話)以外的所有壓縮數(shù)據(jù)包,以及下一個(gè)基帶幀內(nèi)的傳輸數(shù)據(jù)包中的剩余數(shù)據(jù)包拼接成一個(gè)完整的壓縮數(shù)據(jù)包。然后,對該完整的壓縮數(shù)據(jù)包進(jìn)行解壓以得到原始數(shù)據(jù);接著,將當(dāng)前基帶幀的幀頭與所述原始數(shù)據(jù)拼接在一起,并在當(dāng)前基帶幀的幀頭內(nèi)標(biāo)識(shí)該原始數(shù)據(jù)已解壓縮,交由接收端的下一級處理單元進(jìn)行處理。
其中,對該完整的壓縮數(shù)據(jù)包進(jìn)行解壓以得到原始數(shù)據(jù)包括如下步驟:
步驟s241:提取壓縮數(shù)據(jù)包中的壓縮信息;
步驟s242:根據(jù)壓縮信息中的標(biāo)志位,選擇對全部數(shù)據(jù)進(jìn)行解壓;或只對壓縮數(shù)據(jù)包包頭進(jìn)行解壓以得到各個(gè)包頭,此后將各個(gè)包頭與其對應(yīng)的數(shù)據(jù)負(fù)載依照順序進(jìn)行重排并拼接以得到原始數(shù)據(jù)包。
實(shí)際上,所述步驟s241和步驟s242是上文實(shí)施例中對未壓縮數(shù)據(jù)包進(jìn)行壓縮以形成壓縮數(shù)據(jù)包的逆過程。
若判斷結(jié)果為否,則提取當(dāng)前基帶幀內(nèi)的傳輸數(shù)據(jù)包中除剩余數(shù)據(jù)包以外的所有未壓縮數(shù)據(jù)包,以及下一個(gè)基帶幀內(nèi)的傳輸數(shù)據(jù)包中的剩余數(shù)據(jù)包拼接成一個(gè)完整的未壓縮數(shù)據(jù)包;然后,將當(dāng)前基帶幀的幀頭與所述完整的未壓縮數(shù)據(jù)拼接在一起,交由接收端的下一級處理單元進(jìn)行處理。
在本實(shí)施例中,所述未壓縮數(shù)據(jù)包、壓縮數(shù)據(jù)包以及傳輸數(shù)據(jù)包為ip數(shù)據(jù)包或udp數(shù)據(jù)包或tcp數(shù)據(jù)包或ts包或其他不指定類型的數(shù)據(jù)包。
本發(fā)明雖然已以較佳實(shí)施例公開如上,但其并不是用來限定本發(fā)明,任何本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以利用上述揭示的方法和技術(shù)內(nèi)容對本發(fā)明技術(shù)方案做出可能的變動(dòng)和修改,因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對以上實(shí)施例所作的任何簡單修改、等同變化及修飾,均屬于本發(fā)明技術(shù)方案的保護(hù)范圍。