專利名稱:可隨機(jī)訪問數(shù)據(jù)流的組織方法及其對(duì)應(yīng)的解碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信號(hào)處理中的音視頻編解碼技術(shù)領(lǐng)域,尤其涉及一種將音視頻編碼數(shù)據(jù)組織成可隨機(jī)訪問數(shù)據(jù)流的方法及其對(duì)應(yīng)的數(shù)據(jù)恢復(fù)方法。
背景技術(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ī)訪問數(shù)據(jù)流,以便解碼器可以從設(shè)置的隨機(jī)訪問點(diǎn)處開始解碼。在以上標(biāo)準(zhǔn)中都是通過開始碼來實(shí)現(xiàn)編碼數(shù)據(jù)的隨機(jī)訪問的,例如視頻序列開始碼、畫面組開始碼、畫面開始碼等等。這些開始碼都是由開始碼前綴和開始碼值兩部分組成。開始碼前綴是一個(gè)固定的二進(jìn)制位串,標(biāo)志一個(gè)開始碼的存在;開始碼值是一個(gè)數(shù)值,指出開始碼的含義。其中開始碼前綴相當(dāng)于本發(fā)明所說的隨機(jī)訪問點(diǎn)標(biāo)志碼。
如果在其他編碼數(shù)據(jù)中出現(xiàn)了與隨機(jī)訪問點(diǎn)標(biāo)志碼一樣的二進(jìn)制位串,則解碼器就有可能把該位串錯(cuò)誤地當(dāng)成隨機(jī)訪問點(diǎn)標(biāo)志碼,從而引起解碼錯(cuò)誤。因此必須防止在其他編碼數(shù)據(jù)中出現(xiàn)與隨機(jī)訪問點(diǎn)標(biāo)志碼一樣的二進(jìn)制位串。目前采取的方法是在設(shè)計(jì)碼流的語法結(jié)構(gòu)時(shí)設(shè)置一些禁止值和掩碼位。所謂禁止值是指禁止一些語法元素取某些值,因?yàn)槿绻撜Z法元素取了那些值,就有可能出現(xiàn)假的隨機(jī)訪問點(diǎn)標(biāo)志碼。所謂掩碼位,是指在可能出現(xiàn)假隨機(jī)訪問點(diǎn)標(biāo)志碼的語法元素之間插入一個(gè)固定的二進(jìn)制位。
以上的避免出現(xiàn)假隨機(jī)訪問點(diǎn)標(biāo)志碼的方法有以下缺點(diǎn)a.增加了語法設(shè)計(jì)的復(fù)雜性。設(shè)計(jì)語法結(jié)構(gòu)時(shí),要時(shí)時(shí)刻刻考慮到是否會(huì)出現(xiàn)假開始碼,是否需要禁止一些值,是否需要插入掩碼位。b.降低了語法結(jié)構(gòu)的易讀性。這些與視頻壓縮無關(guān)的因素混在語法結(jié)構(gòu)中,使人不容易抓住要點(diǎn)。c.效率不高。在有可能產(chǎn)生假開始碼的地方都必須采取措施,而不論語法元素的具體取值是否會(huì)真的產(chǎn)生假開始碼。
發(fā)明內(nèi)容
本發(fā)明所要解決的一個(gè)技術(shù)問題是提供一種將編碼音視頻數(shù)據(jù)封裝為可隨機(jī)訪問數(shù)據(jù)流的方法,使得在進(jìn)行編碼數(shù)據(jù)的語法結(jié)構(gòu)設(shè)計(jì)時(shí)不需要考慮碼流的可隨機(jī)訪問性,即不需要設(shè)置禁止值,也不需要插入掩碼位。
本發(fā)明所要解決的另一技術(shù)問題是提供一個(gè)從所述可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)編碼數(shù)據(jù)的方法。
為了解決上述技術(shù)問題,本發(fā)明采用如下的技術(shù)方案提供一種把編碼音視頻數(shù)據(jù)封裝為可隨機(jī)訪問數(shù)據(jù)流的方法,包括以下步驟a.用任何編碼方法產(chǎn)生音視頻編碼數(shù)據(jù);b.音視頻編碼數(shù)據(jù)按照隨機(jī)訪問點(diǎn)被分成若干數(shù)據(jù)段,對(duì)每一個(gè)數(shù)據(jù)段,重復(fù)步驟c,d直到將所有數(shù)據(jù)寫入數(shù)據(jù)流;c.將隨機(jī)訪問點(diǎn)標(biāo)志碼位串0x000001寫入數(shù)據(jù)流;d.將編碼數(shù)據(jù)的每一位依次寫入數(shù)據(jù)流。如果當(dāng)前寫入的位是一個(gè)字節(jié)的倒數(shù)第二位,則判斷最近寫入的22位是否均為0,如果最近寫入的22位均為0,則在寫入當(dāng)前數(shù)據(jù)位之前先寫入一個(gè)1,然后將當(dāng)前數(shù)據(jù)位寫入;否則將當(dāng)前數(shù)據(jù)位直接寫入。
當(dāng)要求字節(jié)對(duì)齊時(shí),還包括步驟e.當(dāng)一段數(shù)據(jù)寫完時(shí),用步驟d所述方法將一個(gè)0和若干個(gè)1寫入碼流,直到下一個(gè)字節(jié)對(duì)齊位置;本發(fā)明還提供一種從所述可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,包括以下步驟a.在數(shù)據(jù)流中的字節(jié)對(duì)齊位置尋找位串0x000001;b.找到后重復(fù)以下步驟c.預(yù)窺碼流下面的24位,記為peekstr;判斷peekstr是否與標(biāo)志碼0x000001相同,若不相同則,讀入一個(gè)二進(jìn)制位,若相同則,跳到h;e.如果剛剛讀入的位是一個(gè)字節(jié)的倒數(shù)第二位,且在該位之前讀入的22位都是0,則跳到步驟c;f.將最近讀入的1位作為數(shù)據(jù)輸出,跳到步驟c;h.如果數(shù)據(jù)流中已經(jīng)沒有剩余的數(shù)據(jù)了,則結(jié)束;i.讀入24位,跳到步驟c;當(dāng)要求字節(jié)對(duì)齊時(shí),還包括步驟g.當(dāng)遇到下一個(gè)隨機(jī)訪問點(diǎn)標(biāo)志碼時(shí),將最后輸出的一個(gè)0及其后輸出的1識(shí)別為填充位,不作為數(shù)據(jù)位輸出。
由于采用了上述方法,音視頻編碼器不再需要考慮隨機(jī)訪問點(diǎn)標(biāo)志碼的問題,因?yàn)檫@一工作是由底層的碼流操作來完成的。上述碼流的解碼過程,可以自動(dòng)識(shí)別哪些是插入的位并將其丟棄,從而可以完全恢復(fù)音視頻編碼器產(chǎn)生的編碼數(shù)據(jù)。
圖1是本發(fā)明的把編碼音視頻數(shù)據(jù)封裝為可隨機(jī)訪問數(shù)據(jù)流的方法的一個(gè)實(shí)施例的流程圖;
圖2是本發(fā)明的一種從可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法的一個(gè)圖1是本發(fā)明中把編碼音視頻數(shù)據(jù)封裝為可隨機(jī)訪問數(shù)據(jù)流方法的一個(gè)實(shí)施例的流程圖。如圖1所示,該實(shí)施例包括以下步驟a.用任何編碼方法產(chǎn)生音視頻編碼數(shù)據(jù);b.音視頻編碼數(shù)據(jù)按照隨機(jī)訪問點(diǎn)被分成若干數(shù)據(jù)段,對(duì)每一個(gè)數(shù)據(jù)段,重復(fù)步驟c,d,e直到將所有數(shù)據(jù)寫入數(shù)據(jù)流;c.將0x000001(計(jì)為S)寫入數(shù)據(jù)流;d.將編碼數(shù)據(jù)的每一位依次寫入數(shù)據(jù)流。如果當(dāng)前寫入的位是一個(gè)字節(jié)的倒數(shù)第二位,則判斷最近寫入的22位是否均為0。如果最近寫入的22位均為0,則在寫入當(dāng)前數(shù)據(jù)位之前先寫入一個(gè)1,然后將當(dāng)前數(shù)據(jù)位寫入;否則將當(dāng)前數(shù)據(jù)位直接寫入。
e.當(dāng)一段數(shù)據(jù)寫完時(shí),用步驟d所述方法將一個(gè)0和若干個(gè)1寫入碼流,直到下一個(gè)字節(jié)對(duì)齊位置;圖2是本發(fā)明中從可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)數(shù)據(jù)方法的一個(gè)實(shí)施例的流程圖。如圖2所示,該實(shí)施例包括以下步驟a.在數(shù)據(jù)流中的字節(jié)對(duì)齊位置尋找位串0x000001;b.找到后重復(fù)以下步驟c.如果碼流當(dāng)前位置是字節(jié)對(duì)齊的,則預(yù)窺碼流下面的24位,記為peekstr如果數(shù)據(jù)流中已經(jīng)沒有剩余的數(shù)據(jù)了,跳到步驟g;如果數(shù)據(jù)流中剩余的數(shù)據(jù)不足24位,則認(rèn)為peekstr不是0x000001。如果peekstr是0x000001,跳到步驟g;d.讀入一個(gè)二進(jìn)制位。
e.如果剛剛讀入的位是一個(gè)字節(jié)的倒數(shù)第二位,且在該位之前讀入的22位都是0,則跳到步驟c。
f.將最近讀入的1位作為數(shù)據(jù)輸出,跳到步驟c;g.如果隨機(jī)訪問點(diǎn)標(biāo)志碼要求字節(jié)對(duì)齊,則將最后輸出的一個(gè)0及其后輸出的1刪除。
h.如果數(shù)據(jù)流中已經(jīng)沒有剩余的數(shù)據(jù)了,則結(jié)束;i.讀入24位,跳到步驟c;
權(quán)利要求
1.一種可隨機(jī)訪問數(shù)據(jù)流的組織方法,其特征在于,包括以下步驟a.用任何編碼方法產(chǎn)生音視頻編碼數(shù)據(jù);b.音視頻編碼數(shù)據(jù)按照隨機(jī)訪問點(diǎn)被分成若干數(shù)據(jù)段,對(duì)每一個(gè)數(shù)據(jù)段,重復(fù)步驟c,d直到將所有數(shù)據(jù)寫入數(shù)據(jù)流;c.將隨機(jī)訪問點(diǎn)標(biāo)志碼位串0x000001寫入數(shù)據(jù)流;d.將編碼數(shù)據(jù)的每一位依次寫入數(shù)據(jù)流。如果當(dāng)前寫入的位是一個(gè)字節(jié)的倒數(shù)第二位,則判斷最近寫入的22位是否均為0,如果最近寫入的22位均為0,則在寫入當(dāng)前數(shù)據(jù)位之前先寫入一個(gè)1,然后將當(dāng)前數(shù)據(jù)位寫入;否則將當(dāng)前數(shù)據(jù)位直接寫入。
2.根據(jù)權(quán)利要求1所述的可隨機(jī)訪問數(shù)據(jù)流的組織方法,其特征在于,當(dāng)要求字節(jié)對(duì)齊時(shí),還包括步驟e.當(dāng)一段數(shù)據(jù)寫完時(shí),用步驟d所述方法將一個(gè)0和若干個(gè)1寫入碼流,直到下一個(gè)字節(jié)對(duì)齊位置;
3.根據(jù)權(quán)利要求1所述的可隨機(jī)訪問數(shù)據(jù)流的組織方法,其特征在于,所述的填充位為一個(gè)1,即如果被寫入的位是一個(gè)字節(jié)的倒數(shù)第二位且最近寫入的22位都是0,則在寫入數(shù)據(jù)位之前先寫入一個(gè)1。
4.根據(jù)權(quán)利要求1所述的可隨機(jī)訪問數(shù)據(jù)流的組織方法,其特征在于,將隨機(jī)訪問點(diǎn)標(biāo)志碼寫入時(shí)數(shù)據(jù)流時(shí)不插入任何附加位;
5.根據(jù)權(quán)利要求1所述的可隨機(jī)訪問數(shù)據(jù)流的組織方法,其特征在于,記錄最近寫入數(shù)據(jù)流的22位;
6.一種從可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,包括以下步驟a.在數(shù)據(jù)流中的字節(jié)對(duì)齊位置尋找位串0x000001;b.找到后重復(fù)以下步驟c.預(yù)窺碼流下面的24位,記為peekstr;判斷peekstr是否與標(biāo)志碼0x000001相同,若不相同則,讀入一個(gè)二進(jìn)制位,若相同則,跳到h;e.如果剛剛讀入的位是一個(gè)字節(jié)的倒數(shù)第二位,且在該位之前讀入的22位都是0,則跳到步驟c;f.將最近讀入的1位作為數(shù)據(jù)輸出,跳到步驟c;h.如果數(shù)據(jù)流中已經(jīng)沒有剩余的數(shù)據(jù)了,則結(jié)束;i.讀入24位,跳到步驟c;
7.根據(jù)權(quán)利要求6所述的從可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,其特征在于,還包括步驟g.當(dāng)遇到下一個(gè)隨機(jī)訪問點(diǎn)標(biāo)志碼時(shí),將最后輸出的一個(gè)0及其后輸出的1識(shí)別為填充位,不作為數(shù)據(jù)位輸出。
8.根據(jù)權(quán)利要求6所述的從可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,如果最近讀入的22位都是0且碼流位置處于一個(gè)字節(jié)的倒數(shù)第二位,則將該字節(jié)的倒數(shù)第二位識(shí)別為填充位,不作為數(shù)據(jù)位輸出;
9.根據(jù)權(quán)利要求6所述的從可隨機(jī)訪問數(shù)據(jù)流中恢復(fù)數(shù)據(jù)的方法,其特征在于,如果數(shù)據(jù)流中剩余的數(shù)據(jù)不足24位,則認(rèn)為peekstr不是0x000001。
全文摘要
本發(fā)明提供一種可隨機(jī)訪問數(shù)據(jù)流的組織方法,其包括以下步驟編碼音視頻數(shù)據(jù);在隨機(jī)訪問點(diǎn)插入隨機(jī)訪問點(diǎn)標(biāo)志碼;在編碼的音視頻數(shù)據(jù)中插入一些填充位,以避免出現(xiàn)與隨機(jī)訪問點(diǎn)標(biāo)志碼相同的位串。可隨機(jī)訪問數(shù)據(jù)流的解碼方法包括以下步驟在數(shù)據(jù)流中尋找隨機(jī)訪問點(diǎn)標(biāo)志碼,丟棄第一個(gè)隨機(jī)訪問點(diǎn)標(biāo)志碼以前的所有數(shù)據(jù);依次讀入每一個(gè)二進(jìn)制位;判斷該位是數(shù)據(jù)位還是填充位,如果是填充位,則丟棄,如果是數(shù)據(jù)位,則作為數(shù)據(jù)輸出;如果遇到下一個(gè)隨機(jī)訪問點(diǎn)標(biāo)志碼,則開始一個(gè)新的數(shù)據(jù)塊。
文檔編號(hào)G06F7/38GK1540495SQ20031010836
公開日2004年10月27日 申請(qǐng)日期2003年10月31日 優(yōu)先權(quán)日2003年10月31日
發(fā)明者趙海武 申請(qǐng)人:上海廣電(集團(tuán))有限公司中央研究院