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