專(zhuān)利名稱(chēng):可隨機(jī)訪問(wèn)數(shù)據(jù)流的封裝方法及其對(duì)應(yīng)的數(shù)據(jù)恢復(fù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信號(hào)處理中的音視頻編解碼技術(shù)領(lǐng)域,尤其涉及一種將音視頻數(shù)據(jù)封裝成可隨機(jī)訪問(wèn)數(shù)據(jù)流的方法及其對(duì)應(yīng)的數(shù)據(jù)恢復(fù)方法,使得在進(jìn)行編碼數(shù)據(jù)的語(yǔ)法結(jié)構(gòu)設(shè)計(jì)時(shí)不需要考慮碼流的可隨機(jī)訪問(wèn)性。
背景技術(shù):
傳統(tǒng)的視頻編碼標(biāo)準(zhǔn)如ITU制定的H.261,H.263,H.263+,H.264標(biāo)準(zhǔn)以及ISO的MPEG組織制定的MPEG-1,MPEG-2,MPEG-4都需把音視頻編碼數(shù)據(jù)組織成可隨機(jī)訪問(wèn)數(shù)據(jù)流,以便解碼器可以從設(shè)置的隨機(jī)訪問(wèn)點(diǎn)處開(kāi)始解碼。在以上標(biāo)準(zhǔn)中都是通過(guò)開(kāi)始碼來(lái)實(shí)現(xiàn)編碼數(shù)據(jù)的隨機(jī)訪問(wèn)的,例如視頻序列開(kāi)始碼、畫(huà)面組開(kāi)始碼、畫(huà)面開(kāi)始碼等等。這些開(kāi)始碼都是由開(kāi)始碼前綴和開(kāi)始碼值兩部分組成。開(kāi)始碼前綴是一個(gè)固定的二進(jìn)制位串,標(biāo)志一個(gè)開(kāi)始碼的存在;開(kāi)始碼值是一個(gè)數(shù)值,指出開(kāi)始碼的含義。其中開(kāi)始碼前綴相當(dāng)于本發(fā)明所說(shuō)的隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼。
如果在其他編碼數(shù)據(jù)中出現(xiàn)了與隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼一樣的二進(jìn)制位串,則解碼器就有可能把該位串錯(cuò)誤地當(dāng)成隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,從而引起解碼錯(cuò)誤。因此必須防止在其他編碼數(shù)據(jù)中出現(xiàn)與隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼一樣的二進(jìn)制位串。目前采取的方法是在設(shè)計(jì)碼流的語(yǔ)法結(jié)構(gòu)時(shí)設(shè)置一些禁止值和掩碼位。所謂禁止值是指禁止一些語(yǔ)法元素取某些值,因?yàn)槿绻撜Z(yǔ)法元素取了那些值,就有可能出現(xiàn)假的隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼。所謂掩碼位,是指在可能出現(xiàn)假隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼的語(yǔ)法元素之間插入一個(gè)固定的二進(jìn)制位。
以上的避免出現(xiàn)假隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼的方法有以下缺點(diǎn)a.增加了語(yǔ)法設(shè)計(jì)的復(fù)雜性。設(shè)計(jì)語(yǔ)法結(jié)構(gòu)時(shí),要時(shí)時(shí)刻刻考慮到是否會(huì)出現(xiàn)假開(kāi)始碼,是否需要禁止一些值,是否需要插入掩碼位。b.降低了語(yǔ)法結(jié)構(gòu)的易讀性。這些與視頻壓縮無(wú)關(guān)的因素混在語(yǔ)法結(jié)構(gòu)中,使人不容易抓住要點(diǎn)。c.效率不高。在有可能產(chǎn)生假開(kāi)始碼的地方都必須采取措施,而不論語(yǔ)法元素的具體取值是否會(huì)真的產(chǎn)生假開(kāi)始碼。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種把音視頻數(shù)據(jù)封裝成可隨機(jī)訪問(wèn)數(shù)據(jù)流的封裝方法及其對(duì)應(yīng)的數(shù)據(jù)恢復(fù)方法。使得在進(jìn)行編碼數(shù)據(jù)的語(yǔ)法結(jié)構(gòu)設(shè)計(jì)時(shí)不需要考慮碼流的可隨機(jī)訪問(wèn)性,即不需要設(shè)置禁止值,也不需要插入掩碼位。
為了解決上述技術(shù)問(wèn)題,本發(fā)明采用如下技術(shù)方案首先,設(shè)計(jì)隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼并不是任何的N位固定二進(jìn)制位串s都適合做隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,對(duì)隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼的要求有以下幾個(gè)1.對(duì)任何0<n<N,s的前n位和后n位不能相同;例如當(dāng)N=8時(shí),位串‘00000000’和‘01010101’都不適合做隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼。
2.設(shè)將s的最后一位取反后,形成的二進(jìn)制位串為t,那么s的前N-1位和t的后N-1位不能完全相同。
例如當(dāng)N=8時(shí),位串‘00000001’和‘11111110’都不適合做隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼。
根據(jù)上述隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,本發(fā)明提供一種把編碼音視頻數(shù)據(jù)封裝為可隨機(jī)訪問(wèn)數(shù)據(jù)流的方法,包括以下步驟a.確定隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,假設(shè)為N位固定二進(jìn)制位串s,其前N-1位記為t;b.用任何編碼方法產(chǎn)生音視頻編碼數(shù)據(jù);c.音視頻編碼數(shù)據(jù)按照隨機(jī)訪問(wèn)點(diǎn)被分成若干數(shù)據(jù)段,對(duì)每一個(gè)數(shù)據(jù)段,重復(fù)下述步驟d,e,f直到將所有數(shù)據(jù)寫(xiě)入數(shù)據(jù)流;d.將s寫(xiě)入數(shù)據(jù)流;在寫(xiě)入s時(shí),首先將記錄最近寫(xiě)入的N-1位的緩沖區(qū)清空(注意不是清空數(shù)據(jù)流的最后N-1位),然后將s的每一位依次寫(xiě)入,寫(xiě)入時(shí)不插入任何附加位。
e.將編碼數(shù)據(jù)的每一位依次寫(xiě)入數(shù)據(jù)流,并根據(jù)需要插入填充位如果最近寫(xiě)入的N-1位與t完全相同,則在寫(xiě)入數(shù)據(jù)位之前先寫(xiě)入一個(gè)與s的最后一位不同的二進(jìn)制填充位,這個(gè)插入的填充位同時(shí)作為最近寫(xiě)入的位被記錄;否則將數(shù)據(jù)位直接寫(xiě)入。
f.當(dāng)一段數(shù)據(jù)寫(xiě)完時(shí),如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼需要字節(jié)對(duì)齊,則用步驟e所述方法將一個(gè)1和若干個(gè)0寫(xiě)入碼流,直到下一個(gè)字節(jié)對(duì)齊位置;相應(yīng)的,本發(fā)明還提供一種從上述可隨機(jī)訪問(wèn)數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,包括以下步驟
a.在數(shù)據(jù)流中尋找隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼是字節(jié)對(duì)齊的,則只在字節(jié)對(duì)齊位置尋找;b.找到隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼后,重復(fù)以下步驟c.預(yù)窺碼流下面的N位,記為peekstr;如果數(shù)據(jù)流中已經(jīng)沒(méi)有剩余的數(shù)據(jù)了,跳到步驟g;如果數(shù)據(jù)流中剩余的數(shù)據(jù)不足N位,則認(rèn)為peekstr與s不同。如果peekstr與s相同,跳到步驟g;d.讀入一個(gè)二進(jìn)制位。
e.如果最近讀入的N位與將s的最后一位取反后所得位串s’相同,跳到步驟c。
f.將最近讀入的1二進(jìn)制位作為數(shù)據(jù)輸出,跳到步驟c;g.如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼要求字節(jié)對(duì)齊,則將最后輸出的一個(gè)1及其后輸出的0刪除。
h.如果數(shù)據(jù)流中已經(jīng)沒(méi)有剩余的數(shù)據(jù)了,則結(jié)束;i.讀入N位,跳到步驟c;由于采用了上述編碼及解碼方法,音視頻編碼器不再需要考慮隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼的問(wèn)題,因?yàn)檫@一工作是由底層的碼流操作來(lái)完成的。上述碼流的解碼過(guò)程,可以自動(dòng)識(shí)別哪些是插入的位并將其丟棄,從而可以完全恢復(fù)音視頻編碼器產(chǎn)生的編碼數(shù)據(jù)。
圖1是本發(fā)明的把編碼音視頻數(shù)據(jù)封裝為可隨機(jī)訪問(wèn)數(shù)據(jù)流的方法的一個(gè)實(shí)施例的流程圖;圖2是本發(fā)明的一種從可隨機(jī)訪問(wèn)數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法的一個(gè)實(shí)施例的流程圖;圖3是本發(fā)明的可隨機(jī)訪問(wèn)數(shù)據(jù)流的數(shù)據(jù)結(jié)構(gòu)的示意圖。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例來(lái)進(jìn)一步說(shuō)明本發(fā)明的技術(shù)方案。
圖1是本發(fā)明中把編碼音視頻數(shù)據(jù)封裝為可隨機(jī)訪問(wèn)數(shù)據(jù)流方法的一個(gè)實(shí)施例的流程圖。如圖1所示,該實(shí)施例包括以下步驟a.確定隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,假設(shè)為24位固定二進(jìn)制位串s,即‘0110,0011,1110,0000,0111,1111’,其前23位記為t;b.用任何編碼方法產(chǎn)生音視頻編碼數(shù)據(jù);c.音視頻編碼數(shù)據(jù)按照隨機(jī)訪問(wèn)點(diǎn)被分成若干數(shù)據(jù)段,對(duì)每一個(gè)數(shù)據(jù)段,重復(fù)步驟d,e,f,g直到將所有數(shù)據(jù)寫(xiě)入數(shù)據(jù)流;d.首先判斷是否還有數(shù)據(jù)段,如果還有數(shù)據(jù)段,則將s寫(xiě)入數(shù)據(jù)流;否則直接轉(zhuǎn)到步驟h;e.在寫(xiě)入s時(shí),首先將記錄最近寫(xiě)入的23位的緩沖區(qū)清空(注意不是清空數(shù)據(jù)流的最后23位),然后將s的每一位依次寫(xiě)入,寫(xiě)入時(shí)不插入任何附加位。
f.將編碼數(shù)據(jù)的每一位依次寫(xiě)入數(shù)據(jù)流。如果最近寫(xiě)入的23位與t完全相同,則在寫(xiě)入數(shù)據(jù)位之前先寫(xiě)入一個(gè)與s的最后一位‘1’不同的二進(jìn)制位‘0’,這個(gè)插入的位同時(shí)作為最近寫(xiě)入的位被記錄;否則將數(shù)據(jù)位直接寫(xiě)入數(shù)據(jù)流,數(shù)據(jù)指針向后移動(dòng)一位。
g.當(dāng)一段數(shù)據(jù)寫(xiě)完時(shí),如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼需要字節(jié)對(duì)齊,則用步驟f所述方法將一個(gè)1和若干個(gè)0寫(xiě)入碼流,直到下一個(gè)字節(jié)對(duì)齊位置;h.最后將s寫(xiě)入數(shù)據(jù)流,結(jié)束。
圖2是本發(fā)明中從可隨機(jī)訪問(wèn)數(shù)據(jù)流中恢復(fù)數(shù)據(jù)方法的一個(gè)實(shí)施例的流程圖。如圖2所示,該實(shí)施例包括以下步驟a.在數(shù)據(jù)流中尋找隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s即‘0110,0011,1110,0000,0111,1111’如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼是字節(jié)對(duì)齊的,則只在字節(jié)對(duì)齊位置尋找,否則在任意位置尋找;b.找到隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼后,重復(fù)以下步驟c.預(yù)窺碼流下面的24位,記為peekstr;如果數(shù)據(jù)流中已經(jīng)沒(méi)有剩余的數(shù)據(jù)了,跳到步驟g;如果數(shù)據(jù)流中剩余的數(shù)據(jù)不足24位,則認(rèn)為peekstr與s不同。如果peekstr與s相同,跳到步驟g;d.讀入一個(gè)二進(jìn)制位。
e.如果最近讀入的24位與將s的最后一位取反后所得位串s’相同,跳到步驟c。
f.將最近讀入的1位作為數(shù)據(jù)輸出,跳到步驟c;g.如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼要求字節(jié)對(duì)齊,則將最后輸出的一個(gè)1及其后輸出的0刪除。
h.如果數(shù)據(jù)流中已經(jīng)沒(méi)有剩余的數(shù)據(jù)了,則結(jié)束;i.讀入24位,跳到步驟c;如圖3所示的是本發(fā)明的可隨機(jī)訪問(wèn)數(shù)據(jù)流的數(shù)據(jù)結(jié)構(gòu)的示意圖,本發(fā)明的隨機(jī)訪問(wèn)數(shù)據(jù)流包括n個(gè)隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s,以及對(duì)應(yīng)跟于隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s后的n個(gè)數(shù)據(jù)段,所述數(shù)據(jù)段包括若干個(gè)數(shù)據(jù)位db及填充位sb,所述填充位sb的位置隨機(jī),在需要時(shí)才插入,當(dāng)所述隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼需要字節(jié)對(duì)齊時(shí)插入的填充位為一個(gè)1和若干個(gè)0。
權(quán)利要求
1.一種可隨機(jī)訪問(wèn)數(shù)據(jù)流的封裝方法,其特征在于,包括如下步驟a.確定N位隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s,其滿(mǎn)足以下兩個(gè)條件1)、對(duì)任何0<n<N,s的前n位和后n位不能相同;2)、設(shè)將s的最后一位取反后,形成的二進(jìn)制位串為t,那么s的前N-1位和t的后N-1位不能完全相同;b.用任何編碼方法產(chǎn)生音視頻編碼數(shù)據(jù);c.音視頻編碼數(shù)據(jù)按照隨機(jī)訪問(wèn)點(diǎn)被分成若干數(shù)據(jù)段,對(duì)每一個(gè)數(shù)據(jù)段,分別重復(fù)下述步驟d,e直到將所有數(shù)據(jù)寫(xiě)入數(shù)據(jù)流;d.將隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s寫(xiě)入數(shù)據(jù)流;e.將編碼數(shù)據(jù)的每一位依次寫(xiě)入數(shù)據(jù)流,并根據(jù)需要插入填充位如果最近寫(xiě)入的N-1位與t完全相同,則在寫(xiě)入數(shù)據(jù)位之前先寫(xiě)入一個(gè)與隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s的最后一位不同的二進(jìn)制填充位,這個(gè)插入的填充位同時(shí)作為最近寫(xiě)入的位被記錄,否則將數(shù)據(jù)位直接寫(xiě)入;
2.根據(jù)權(quán)利要求1所述的可隨機(jī)訪問(wèn)數(shù)據(jù)流的封裝方法,其特征在于,還括步驟f.當(dāng)一個(gè)數(shù)據(jù)段寫(xiě)完時(shí),如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼需要字節(jié)對(duì)齊,則用步驟e所述方法將一個(gè)1和若干個(gè)0寫(xiě)入碼流,直到下一個(gè)字節(jié)對(duì)齊位置;
3.根據(jù)權(quán)利要求1所述的可隨機(jī)訪問(wèn)數(shù)據(jù)流的封裝方法,其特征在于,所述的將隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s寫(xiě)入數(shù)據(jù)流的方法為在寫(xiě)入隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s時(shí),首先將記錄最近寫(xiě)入的N-1位的緩沖區(qū)清空,然后將隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s的每一位依次寫(xiě)入,寫(xiě)入時(shí)不插入任何附加位。
4.一種從可隨機(jī)訪問(wèn)數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,包括以下步驟a.在數(shù)據(jù)流中尋找隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s;b.找到隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s后,重復(fù)以下步驟c.預(yù)窺碼流下面的N位,記為peekstr;判斷peekstr是否與s相同,若不相同,則讀入一個(gè)二進(jìn)制位;d.判斷peekstr是否與s最后一位取反的所得位串s’相同,若相同則將最后讀入的位識(shí)別為填充位,不作為數(shù)據(jù)位輸出,并返回步驟c;若不相同,則e.將最近讀入的1位二進(jìn)制位作為數(shù)據(jù)輸出,并返回步驟c;f.若判斷結(jié)果是peekstr與s相同,則判斷數(shù)據(jù)流中是否有剩余數(shù)據(jù),若有則讀入N位,若沒(méi)有則結(jié)束。
5.根據(jù)權(quán)利要求4所述的從可隨機(jī)訪問(wèn)數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,所述步驟f包括如下步驟f1.若判斷結(jié)果peekstr與s相同,則判斷隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼是否要求字節(jié)對(duì)齊;f2.若要求字節(jié)對(duì)齊,則刪除最后輸出的一個(gè)1和其后輸出的0;f3.判斷數(shù)據(jù)流中是否有剩余數(shù)據(jù),若有則讀入N位,若沒(méi)有則結(jié)束。f4.若不要求字節(jié)對(duì)齊,則直接執(zhí)行步驟f3。
6.根據(jù)權(quán)利要求4所述的從可隨機(jī)訪問(wèn)數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,如果數(shù)據(jù)流中剩余的數(shù)據(jù)不足N個(gè),則認(rèn)為peekstr與s不同。
7.根據(jù)權(quán)利要求4所述的從可隨機(jī)訪問(wèn)數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,如果隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼是字節(jié)對(duì)齊的,則只要在字節(jié)對(duì)齊位置尋找隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼s;
全文摘要
一種可隨機(jī)訪問(wèn)數(shù)據(jù)流的封裝方法,用于音視頻信號(hào)的編解碼,其包括以下步驟編碼音視頻數(shù)據(jù);在隨機(jī)訪問(wèn)點(diǎn)插入隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼;在編碼的音視頻數(shù)據(jù)中插入一些填充位,以避免出現(xiàn)與隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼相同的位串。及其對(duì)應(yīng)的可隨機(jī)訪問(wèn)數(shù)據(jù)的恢復(fù)方法包括以下步驟在數(shù)據(jù)流中尋找隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,丟棄第一個(gè)隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼以前的所有數(shù)據(jù);依次讀入每一個(gè)二進(jìn)制位;判斷該位是數(shù)據(jù)位還是填充位,如果是填充位,則丟棄,如果是數(shù)據(jù)位,則作為數(shù)據(jù)輸出;如果遇到下一個(gè)隨機(jī)訪問(wèn)點(diǎn)標(biāo)志碼,則開(kāi)始一個(gè)新的數(shù)據(jù)塊。
文檔編號(hào)H04N7/24GK1529507SQ03151460
公開(kāi)日2004年9月15日 申請(qǐng)日期2003年9月29日 優(yōu)先權(quán)日2003年9月29日
發(fā)明者趙海武, 陳勇, 王國(guó)中, 何蕓 申請(qǐng)人:上海廣電(集團(tuán))有限公司中央研究院