一種h264幀中提取sps和pps的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及視頻技術(shù)領(lǐng)域,特別涉及一種H264幀中提取SPS和PPS的方法及裝 置。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,互聯(lián)網(wǎng)應(yīng)用越來越多,形式也越來越多樣化。由于遠(yuǎn)程教 學(xué)具有方便快捷、費用低廉等特點,越來越受到廣大師生的喜愛,通過互聯(lián)網(wǎng),學(xué)生可以方 便的獲取教學(xué)資料進行學(xué)習(xí)。為了提高遠(yuǎn)程教學(xué)互動性,目前師生間常采用視頻和語音方 式在互聯(lián)網(wǎng)上進行交流。如學(xué)生端與教師端建立連接后,學(xué)生端開啟攝像頭錄制視頻,并實 時上傳給教師端。但是由于是直接傳輸視頻流,而不是視頻文件,所以沒有文件頭,也就沒 有視頻的描述信息。教師端在沒有描述信息的情況下是無法對視頻進行解碼和播放的。故 為了使教師端能對視頻進行解碼和播放,必須在發(fā)送視頻之前,將視頻描述信息發(fā)送給教 師端,以使教師端更夠根據(jù)該視頻描述信息生成視頻的文件頭,從而達到正常播放視頻的 目的。另外由于H264具有很高的數(shù)據(jù)壓縮比,在網(wǎng)絡(luò)傳輸過程中所要帶寬更少,故廣泛的 用于網(wǎng)絡(luò)視頻傳輸。
[0003] 綜上所述,急需一種從H264幀中提取視頻描述信息的方法,在發(fā)送視頻之前,將 視頻描述信息發(fā)送給遠(yuǎn)程教學(xué)對端,從而達到對端能正常播放視頻的目的。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明提供一種H264幀中提取SPS和PPS的方法及裝置,用以在發(fā)送視頻之前, 將視頻描述信息發(fā)送給遠(yuǎn)程教學(xué)對端,從而實現(xiàn)對端能正常播放視頻的目的。
[0005] 本發(fā)明提供一種H264幀中提取SPS和PPS的方法,包括:
[0006] 從H264幀開始位置開始,根據(jù)同步碼確定NAL單元的數(shù)目N及每個NAL單元開始 位置;
[0007] 根據(jù)每個NAL單元開始位置,遍歷N個NAL單元的NAL頭;
[0008] 根據(jù)NAL單元的NAL頭信息,定位序列參數(shù)集SPS和圖像參數(shù)集PPS的NAL單元 的位置;
[0009] 根據(jù)SPS和PPS的NAL單元的位置,將SPS和PPS數(shù)據(jù)分別保存在第一緩存、第二 緩存中。
[0010] 本發(fā)明實施例的一些有益效果可以包括:
[0011] 根據(jù)H264幀結(jié)構(gòu),從該幀中提取出視頻的描述信息SPS和PPS數(shù)據(jù),并在傳輸視 頻流數(shù)據(jù)到遠(yuǎn)程教學(xué)的對端前,將該視頻描述信息發(fā)送給對端,對端根據(jù)收到的視頻描述 信息,從而可以正常的播放接收到的視頻流數(shù)據(jù)。
[0012] 在一個實施例中,所述同步碼為4字節(jié)的0x00 00 00 01。
[0013] 該實施例中,通過簡單的查找H264幀中的同步碼0x00 00 00 01,即可以定位到 每個NAL單元的位置信息,然后根據(jù)NAL單元的NAL頭信息,獲取SPS和PPS數(shù)據(jù)并保存, 待傳輸給遠(yuǎn)程教學(xué)的對端。
[0014] 在一個實施例中,所述根據(jù)NAL單元的NAL頭信息,定位SPS的NAL單元的位置的 方法為:判斷當(dāng)前NAL頭是否為0x67,是則該NAL單元為SPS的NAL單元,并記錄該NAL單 元的位置為SPS的NAL單元的位置;否則不是SPS的NAL單元。
[0015] 該實施例中,因為SPS的NAL單元的NAL頭為0x67,因此,若NAL單元的NAL頭為 0x67,則該NAL單元為SPS的NAL單元。從而達到獲取SPS數(shù)據(jù)的目的。
[0016] 在一個實施例中,所述根據(jù)NAL單元的NAL頭信息,定位PPS的NAL單元的位置的 方法為:判斷當(dāng)前NAL頭是否為0x68,是則該NAL單元為PPS的NAL單元,并記錄該NAL單 元的位置為PPS的NAL單元的位置;否則不是PPS的NAL單元。
[0017] 該實施例中,因為PPS的NAL單元的NAL頭為0x68,因此,若NAL單元的NAL頭為 0x68,則該NAL單元為PPS的NAL單元。從而達到獲取PPS數(shù)據(jù)的目的。
[0018] 本發(fā)明還提供一種H264幀中提取SPS和PPS的裝置,包括:NAL單元信息獲取模 塊、NAL頭獲取模塊、位置獲取模塊和保存模塊;
[0019] 所述NAL單元信息獲取模塊,用于從H264幀開始位置開始,根據(jù)同步碼確定NAL 單元的數(shù)目N及每個NAL單元開始位置,并將信息發(fā)送給所述NAL頭獲取模塊;
[0020] 所述NAL頭獲取模塊,用于接收所述NAL單元信息獲取模塊發(fā)來的NAL單元的數(shù) 目N及每個NAL單元開始位置,并根據(jù)每個NAL單元開始位置,遍歷N個NAL單元的NAL頭, 并將NAL頭信息發(fā)送給所述位置獲取模塊;
[0021] 所述位置獲取模塊,用于接收所述NAL頭獲取模塊發(fā)來的NAL頭信息,定位SPS和 PPS的NAL單元的位置,并將該信息發(fā)送給所述保存模塊;
[0022] 所述保存模塊,用于根據(jù)SPS和PPS的NAL單元的位置,將SPS和PPS數(shù)據(jù)分別保 存在第一緩存、第二緩存中。
[0023] 在一個實施例中,所述位置獲取模塊包括SPS位置獲取模塊和PPS位置獲取模 塊;
[0024] 所述SPS位置獲取模塊,接收所述NAL頭獲取模塊發(fā)來的NAL頭信息,定位SPS的 NAL單元的位置,并將該位置發(fā)送給所述保存模塊;
[0025] 所述PPS位置獲取模塊,接收所述NAL頭獲取模塊發(fā)來的NAL頭信息,定位PPS的 NAL單元的位置,并將該位置發(fā)送給所述保存模塊。
[0026] 在一個實施例中,所述SPS位置獲取模塊包括SPS判定單元和SPS位置記錄單元;
[0027] 所述SPS判定單元,用于判斷當(dāng)前NAL頭是否為0x67,是則判定該NAL單元為SPS 的NAL單元,并向SPS位置記錄單元發(fā)送第一通知消息,否則不是SPS的NAL單元;
[0028] 所述SPS位置記錄單元,用于根據(jù)所述第一通知消息,將當(dāng)前NAL單元的位置記錄 為SPS的NAL單元的位置,并將SPS的NAL單元的位置發(fā)送給所述保存模塊。
[0029] 在一個實施例中,所述PPS位置獲取模塊包括PPS判定單元和PPS位置記錄單元;
[0030] 所述PPS判定單元,用于判斷當(dāng)前NAL頭是否為0x68,是則判定該NAL單元為PPS 的NAL單元,并向SPS位置記錄單元發(fā)送第二通知消息,否則不是PPS的NAL單元;
[0031] 所述PPS位置記錄單元,用于根據(jù)所述第二通知消息,將當(dāng)前NAL單元的位置記錄 為PPS的NAL單元的位置,并將PPS的NAL單元的位置發(fā)送給所述保存模塊。
[0032] 本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變 得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在所寫的說明 書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
[0033] 下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進一步的詳細(xì)描述。
【附圖說明】
[0034] 附圖用來提供對本發(fā)明的進一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實 施例一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中:
[0035] 圖1為本發(fā)明實施例中一種H264幀中提取SPS和PPS的方法的流程圖;
[0036] 圖2為本發(fā)明實施例一中提供一種H264幀中提取SPS的方法的流程圖;
[0037] 圖3為本發(fā)明實施例二中提供一種H264幀中提取PPS的方法的流程圖;
[0038] 圖4為本發(fā)明實施例一中一種H264幀中提取SPS和PPS的裝置的結(jié)構(gòu)示意圖;
[0039] 圖5為本發(fā)明實施例中位置獲取模塊的結(jié)構(gòu)示意圖;
[0040] 圖6為本發(fā)明實施例中SPS位置獲取模塊的結(jié)構(gòu)示意圖;
[0041] 圖7為本發(fā)明實施例中PPS位置獲取模塊的結(jié)構(gòu)示意圖。
【具體實施方式】
[0042] 以下結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實 施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
[0043] 圖1為本發(fā)明實施例中一種H264幀中提取SPS和PPS的方法的流程圖。如圖1 所示,該方法包括以下步驟S101-S104 :
[0044] 步驟SlOl :從H264幀開始位置開始,根據(jù)同步碼確定NAL單元的數(shù)目N及每個NAL 單元開始位置。
[0045] H264的功能分為兩層:視頻編碼層(VCL,Video Coding Layer)和網(wǎng)絡(luò)提取層 (NAL,Network Abstraction Layer)。VCL數(shù)據(jù)即編碼處理的輸出,它表示被壓縮編碼后的 視頻數(shù)據(jù)序列。在VCL數(shù)據(jù)傳輸或存儲之前,這些編碼的VCL數(shù)據(jù),先被映射或封裝進NAL 單元中。
[0046] 每個NAL單元包括一個原始字節(jié)序列負(fù)荷(RBSP,Raw Byte Sequence Payload)、 一組對應(yīng)于視頻編碼的NAL頭信息。NAL頭信息(一個字節(jié))定義了 RBSP單元的類型,NAL 單元的其余部分為RBSP數(shù)據(jù)。H264的編碼視頻序列包括一系列的NAL單元。但是由于NAL 單元中沒有給出其長度信息,實際的傳輸、存儲系統(tǒng)需要增加額外的頭(同步碼)實現(xiàn)各個 NAL單元的定界。從而能根據(jù)同步碼確定NAL單元的數(shù)目N及每個NAL單元開始位置。
[0047] 步驟S102 :根據(jù)每個NAL單元開始位置,遍歷N個NAL單元的NAL頭。
[0048] 其中,NAL頭信息定義了 RBSP單元的類型,占用了一個字節(jié)的長度,按照比特自高 至低排列可以表示如下:〇AABBBBB。其中,AA用于表示該NAL是否可以丟棄(有無被其后 的NAL參考),OOb表示沒有參考作用,可丟棄,如B slice、SEI等,非零--包括01b、10b、 lib--表示該NAL不可丟棄,如SPS、PPS、I Slice、P Slice等。