日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

H.264码流解析 一个SPS的nalu及获取视频的分辨率

發(fā)布時間:2023/12/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 H.264码流解析 一个SPS的nalu及获取视频的分辨率 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

00 00 00 01 67 42 00 28 E9 00??
A0 0B 77 FE 00 02 00 03 C4 80??
00 00 03 00 80 00 00 1A 4D 88??
10 94 00 00 00 01

00 00 00 01為NALu頭,?其余碼流由十六進制轉為二進制?

67 0110 0111
42 0100 0010
00 0000 0000
28 0010 1000
E9 1110 1001
00 0000 0000
A0 1010 0000
0B 0000 1011
77 0111 01/11
……

94 1001 01//00

說明:

"/"后的碼流要對照標準中AnnexE的句法表,是VUI(VideoUsabilityInformation?)的內容,

不懂,不寫了,只寫SPS部分先。

"//"后面兩個0是補齊用的。

NAL層句法:碼,值
forbidden_zero_bit(f(1)):0,0
nal_ref_idc(u(2)):11, 3
nal_unit_type(u(5)):?0 0111, ?7,? SPS

SPS序列參數(shù)集的句法:碼,值
profile_idc(u(8)) = 0100 0010,66 ,?baseline profile基礎檔次

constraint_set0_flag(u(1)):0,0
constraint_set1_flag(u(1)):0,0
constraint_set2_flag(u(1)):0,0
constraint_set3_flag(u(1)):0,0
reserved_zero_4bits(u(4)):0000,0

level_idc(u(8)) :00101000,40 ,級別

seq_parameter_set_id(ue(v)): 1, 0

log2_max_frame_num_minus4(ue(v): 1, 0
??????? ?MaxFrameNum = 2^(0+4) = 16

pic_order_cnt_type(ue(v)):1, 0

log2_max_pic_order_cnt_lsb_minus4(ue(v)):010 ,1
????? ??MaxPicOrderCntLsb = 2^(1+4) = 32

num_ref_frames(ue(v)):010, 1

gaps_in_frame_num_value_allowed_flag(u(1)):0,0

pic_width_in_mbs_minus1(ue(v)): 0000001010000, 2^6-1+16 = 79
????? ?PicWidthInMbs = pic_width_in_mbs_minus1 + 1 = 80

pic_height_in_map_units_minus1(ue(v)): 00000101101 ,2^5-1+13 = 44
??? ???PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1 =45

frame_mbs_only_flag(u(1)):1,1

direct_8x8_inference_flag(u(1)): 1,1
frame_cropping_flag(u(1)):0,0
vui_parameters_present_flag(u(1)):1 ,1
這個參數(shù)為1,說明下面的句法存在

vui_parameters( )
aspect_ratio_info_present_flag(u(1)):1


其中:
pic_width_in_mbs_minus1 : 79
pic_height_in_map_units_minus1 : 44
說的很清楚:
(79+1)x16=1280
(44+1)x16=720
果然是 1280x720 !




================================================================================================




摘 要:H.264是新一代視頻編碼標準,具有廣泛的應用前景。本文主要研究了H.264碼流的問題。首先,介紹了H.264的簡單框架;其次,對碼流結構進行了分析,并概括出了碼流結構圖;最后,結合一個簡單試驗,給出了從H.264碼流中取得圖像寬度和高度的方法。 關鍵詞:H.264;NAL;碼流結構 Analysis on the structure of coding streaming in H.264 GAO Qing, WANG Zhigang ( School of Computer Science & Technology, Soochow University,SuZhou 215006;) Abstract:?H.264 is the newest video coding standard, and it will be widely used. In this article, the problem of the structure of coding streaming in H.264 is discussed. Firstly, the simple profile of H.264 video is introduced. Secondly, the structure of coding streaming is discussed , and then give the graph on it. Finally, by a simple experiment, give the method of getting picture’s width and height from the coding stream. Keywords:?H.264;NAL;structure of coding streaming 引言 H.264是新一代視頻編碼標準,具有廣泛的應用前景,是ITU-T的視頻編碼專家組(VCEG)和 ISO/IEC的活動圖像編碼專家組(MPEG)的聯(lián)合視頻組開發(fā)的一個新的數(shù)字視頻編碼標準,它既是ITU -T的H.264,又是ISO/IEC的MPEG-4的第10部分。H.264和以前的標準一樣,也是DPCM加變換編碼的混合編碼模式。它的應用目標廣泛,可滿足各種不同速率、不同場合的視頻應用,具有較好的抗誤碼和抗丟包的處理能力。H.264的基本系統(tǒng)無需使用版權,具有開放的性質,能很好地適應IP和無線網(wǎng)絡的使用,這對目前因特網(wǎng)傳輸多媒體信息、移動網(wǎng)中傳輸寬帶信息等都具有重要意義。 1 H.264框架介紹?? H.264中定義了3個框架[2],每個框架都支持一系列的編解碼功能,相應的有一系列的應用。下面作下簡單的介紹: (1) 基線框架(Baseline Profile):它作為H.264的一個簡單版本,應用面很廣。它支持幀間和幀內編碼,支持I幀和P幀,支持CAVLC等,其主要應用是可視電話視頻會議,無線通信等。 (2) 主框架(Main Profile):包括支持交錯視頻,支持B幀,主要是在幀間編碼時使用,權重預測,熵編碼使用,支持CABAC等。它的主要應用是視頻存儲和電視廣播。采用了多項提高圖像質量和增加壓縮比的技術措施,可用于SDTV,HDTV,DVD等。 (3) 擴展框架(Extended Profile):不支持交錯視頻和CABAC,但增加了一些在進行比特流切換時有效的幀模式,SI Switching I幀和SP Switching P幀,能夠有效的提高從錯誤中恢復的能力。它的主要應用是各種網(wǎng)絡的視頻流傳輸應用。 2 H264碼流結構 2.1 H264分層結構 H.263定義的碼流結構是分級結構,共四層。自上而下分別為:圖像層(picturelayer)、塊組層(GOB layer)、宏塊層(macroblock layer)和塊層(block layer)。而與H.263相比,H.264的碼流結構和H.263的有很大的區(qū)別,它采用的不再是嚴格的分級結構。 H.264的功能分為兩層,視頻編碼層(VCL)和網(wǎng)絡提取層(NALVCL數(shù)據(jù)即被壓縮編碼后的視頻數(shù)據(jù)序列。在VCL數(shù)據(jù)要封裝到NAL單元中之后,才可以用來傳輸或存儲。 NAL單元格式[2]?表1所示:
表1 NAL單元格式
NAL頭 RBSP NAL頭 RBSP
RBSP:封裝于網(wǎng)絡抽象單元的數(shù)據(jù)稱之為原始字節(jié)序列載荷RBSP,它是NAL的基本傳輸單元。其中,RBSP又分為視頻編碼數(shù)據(jù)和控制數(shù)據(jù)。其基本結構是:在原始編碼數(shù)據(jù)的后面填加了結尾比特。一個bit“1”若干比特“0”,以便字節(jié)對齊。 2.2 H.264碼流結構圖 通過相關知識的查閱,概括出H.264的碼流結構圖[2]如圖1所示:

?

圖1?H.264的碼流結構

? 3 H.264碼流分析的應用 在有些時候,需要從H.264碼流中直接取得相關信息(如:圖像的寬度和圖像的高度等等信息)。下面介紹下取得相關信息的方法: 圖像的相關信息存儲在網(wǎng)絡提取層(NAL)的RBSP結構中,要取得圖像的相關信息,既要獲得圖像的相關位。需依據(jù)RBSP結構,獲得pic_width_in_mbs_minus1和pic_height_in_map_units_minus1兩個值,那么寬度為(pic_width_in_mbs_minus1+1)*16,高度為(pic_height_in_map_units_minus1+1)*16,但是有些情況還得考慮nNum_Ref_Frames的值,一般為1。 3.1獲得試驗數(shù)據(jù) 設備:SUNNIC?IP Cam 名字:ST100factory Firmware版本:p8b8 視頻格式:H.264 (1)?將設備分辨率設成176*144,使用Ethereal等抓包工具抓得一組數(shù)據(jù),并去掉相應的RTP頭后,該數(shù)據(jù)為0x00,0x00,0x00,0x01,0x67,0x42,0x00,0x1E,0x99,0xA0,0xB1,0x31 (2)?將設備分辨率設成720*240,使用Ethereal等抓包工具抓得一組數(shù)據(jù),并去掉相應的RTP頭后,該數(shù)據(jù)為0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDA,0x82,0xD1,0xF1 (3)?將設備分辨率設成720*480,使用Ethereal等抓包工具抓得一組數(shù)據(jù),并去掉相應的RTP頭后,該數(shù)據(jù)為0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDB,0x82,0xD1,0xF1 3.2?相關程序的書寫 程序的關鍵代碼如下: void GetH264Resolution(BYTE*pInBuf,int&nHeight,int&nWidth,int&nNum_Ref_Frames) { ?????? ……?????? ?????? UE_V(nIndex,nShiftCount,nShiftBuffer,nNum_Ref_Frames,pFrameHead);????????????? ?????? DWORD gaps_in_frame_num_value_allowed_flag=0;??????? ?????? MyShift(1,nIndex,nShiftCount,nShiftBuffer,gaps_in_frame_num_value_allowed_flag,pFrameHead); DWORD pic_width_in_mbs_minus1=0; UE_V(nIndex,nShiftCount,nShiftBuffer,pic_width_in_mbs_minus1,pFrameHead); ?????? DWORD pic_height_in_map_units_minus1=0;?????????? ?????? UE_V(nIndex,nShiftCount,nShiftBuffer,pic_height_in_map_units_minus1,pFrameHead); ?????? UE_V(nIndex,nShiftCount,nShiftBuffer,pic_height_in_map_units_minus1,pFrameHead); ?????? nWidth=(pic_width_in_mbs_minus1+1)*16; //圖像的寬度 ?????? nHeight=(pic_height_in_map_units_minus1+1)*16;???? //圖像的高度 } voidMyShift(intnCount,int&nIndex,int&nShiftCount,BYTE&nShiftBuffer,DWORD&nRecv,BYTE*pInBuf) {//從數(shù)據(jù)流取得相應位的值。 ?????? while (nCount!=0) ?????? { ????????????? if(nCount>nShiftCount) ????????????? {???? nRecv=nRecv<<nShiftCount; ???????????????????? nRecv|=nShiftBuffer>>(8-nShiftCount); ???????????????????? nShiftBuffer=pInBuf[++nIndex]; ???????????????????? nCount-=nShiftCount; ???????????????????? nShiftCount=8;????? ????????????? }else ????????????? {???? nRecv=nRecv<<nCount; ???????????????????? nRecv|=nShiftBuffer>>(8-nCount);??????????????????? ???????????????????? nShiftCount-=nCount; ???????????????????? nShiftBuffer<<=nCount; ???????????????????? nCount=0; ?????? }} } 3.3?試驗結果與結論 (1)將數(shù)據(jù)流0x00,0x00,0x00,0x01,0x67,0x42,0x00,0x1E,0x99,0xA0,0xB1,0x31放入GetH264Resolution,取得nWidth為176, nHeight為144,nNum_Ref_Frames為1。跟原數(shù)據(jù)比對,結果正確。 (2)將數(shù)據(jù)流0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDA,0x82,0xD1,0xF1放入GetH264Resolution,取得nWidth為720, nHeight為240,nNum_Ref_Frames為1。跟原數(shù)據(jù)比對,結果正確。 (3)將數(shù)據(jù)流0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDB,0x82,0xD1,0xF1放入GetH264Resolution,取得nWidth為720, nHeight為240,nNum_Ref_Frames為2。跟原數(shù)據(jù)比對,240正好是480的一半,而這里的nNum_Ref_Frames正好是2。查閱相關資料發(fā)現(xiàn),這里為了讓數(shù)據(jù)能夠正常顯示,需要將2幀數(shù)據(jù)進行Interleave操作后,方能正常顯示。 H.264是新一代視頻編碼標準,具有廣泛的應用前景。應用此種方法,在解碼前,取得圖像的高度和寬度,在某些需要知道圖像的寬度和高度的場合,特別是在一些播放H264視頻的應用程序中,會有很大幫助。 參考文獻: [1] ITU-TRec.H.264/ISO/IEC 14496-10:2005,H.264 Advanced video coding for generic audiovisual services[S]. [2]?嚴曉飛.?H.264碼流結構的分析及其實現(xiàn)的優(yōu)化[D].?西安電子科技大學西安電子科技大學,2007. [3]RICHARDSONI. H. 2 6 4 andMPEG-4Videocompression [M ].London: JohnW iley& Sons, 2003. 作者簡介: 高慶 (1985-),男,江蘇蘇州人,工程碩士,主要研究方向為視頻處理技術,嵌入式應用。E-mail:jggq710@yahoo.com.cn。 王志剛 (1984-),男,河南禹州人,工程碩士,主要研究方向為流媒體技術,嵌入式應用。E-mail:langang0207@126.com。





總結

以上是生活随笔為你收集整理的H.264码流解析 一个SPS的nalu及获取视频的分辨率的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。