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

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序列参数集的句法:码,值
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
这个参数为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)的联合视频组开发的一个新的数字视频编码标准,它既是ITU -T的H.264,又是ISO/IEC的MPEG-4的第10部分。H.264和以前的标准一样,也是DPCM加变换编码的混合编码模式。它的应用目标广泛,可满足各种不同速率、不同场合的视频应用,具有较好的抗误码和抗丢包的处理能力。H.264的基本系统无需使用版权,具有开放的性质,能很好地适应IP和无线网络的使用,这对目前因特网传输多媒体信息、移动网中传输宽带信息等都具有重要意义。
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帧,能够有效的提高从错误中恢复的能力。它的主要应用是各种网络的视频流传输应用。
2 H264码流结构
2.1 H264分层结构
H.263定义的码流结构是分级结构,共四层。自上而下分别为:图像层(picturelayer)、块组层(GOB layer)、宏块层(macroblock layer)和块层(block layer)。而与H.263相比,H.264的码流结构和H.263的有很大的区别,它采用的不再是严格的分级结构。
H.264的功能分为两层,视频编码层(VCL)和网络提取层(NALVCL数据即被压缩编码后的视频数据序列。在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。
NAL单元格式[2] 表1所示:
表1 NAL单元格式
NAL头 RBSP NAL头 RBSP
RBSP:封装于网络抽象单元的数据称之为原始字节序列载荷RBSP,它是NAL的基本传输单元。其中,RBSP又分为视频编码数据和控制数据。其基本结构是:在原始编码数据的后面填加了结尾比特。一个bit“1”若干比特“0”,以便字节对齐。
2.2 H.264码流结构图
通过相关知识的查阅,概括出H.264的码流结构图[2]如图1所示:

 

图1 H.264的码流结构

 
3 H.264码流分析的应用
在有些时候,需要从H.264码流中直接取得相关信息(如:图像的宽度和图像的高度等等信息)。下面介绍下取得相关信息的方法:
图像的相关信息存储在网络提取层(NAL)的RBSP结构中,要取得图像的相关信息,既要获得图像的相关位。需依据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获得试验数据
设备:SUNNIC IP Cam
名字:ST100factory
Firmware版本:p8b8
视频格式:H.264
(1) 将设备分辨率设成176*144,使用Ethereal等抓包工具抓得一组数据,并去掉相应的RTP头后,该数据为0x00,0x00,0x00,0x01,0x67,0x42,0x00,0x1E,0x99,0xA0,0xB1,0x31
(2) 将设备分辨率设成720*240,使用Ethereal等抓包工具抓得一组数据,并去掉相应的RTP头后,该数据为0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDA,0x82,0xD1,0xF1
(3) 将设备分辨率设成720*480,使用Ethereal等抓包工具抓得一组数据,并去掉相应的RTP头后,该数据为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)
{//从数据流取得相应位的值。
       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)将数据流0x00,0x00,0x00,0x01,0x67,0x42,0x00,0x1E,0x99,0xA0,0xB1,0x31放入GetH264Resolution,取得nWidth为176, nHeight为144,nNum_Ref_Frames为1。跟原数据比对,结果正确。
(2)将数据流0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDA,0x82,0xD1,0xF1放入GetH264Resolution,取得nWidth为720, nHeight为240,nNum_Ref_Frames为1。跟原数据比对,结果正确。
(3)将数据流0x00,0x00,0x00,0x01,0x67,0x42,0xE0,0x1E,0xDB,0x82,0xD1,0xF1放入GetH264Resolution,取得nWidth为720, nHeight为240,nNum_Ref_Frames为2。跟原数据比对,240正好是480的一半,而这里的nNum_Ref_Frames正好是2。查阅相关资料发现,这里为了让数据能够正常显示,需要将2帧数据进行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码流结构的分析及其实现的优化[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。





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小额贷款利息违法吗?

我们经常听到很多朋友说&#xff0c;小额贷款利息高&#xff0c;认为小额贷款的利息是高利贷&#xff0c;不合法。那到底小额贷款算不算高利贷呢&#xff0c;是不是合法的呢&#xff1f;在解释这个问题之前&#xff0c;我们先来看下国家法律对合法利息的定义。《最高人民法院关…

什么样的征信才算是好的?

有过贷款的朋友都知道征信报告对贷款有很大的影响&#xff0c;有时候贷款的前期工作都准备好了&#xff0c;突然发现征信有问题&#xff0c;结果贷款就黄了。可见征信报告对贷款的作用还是很大的&#xff0c;贷款机构之所以会看重征信记录&#xff0c;因为它是一个人过去信用的…

时钟 切换

时钟 切换 题目描述 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。 信号示意图 题目解读 通过在每个时钟源的选择路径中插入一个负边沿触发的D触发器,可以确保时钟在高电平时,输出保持不变。 通…

动态时间规整-DTW算法

作者&#xff1a;桂。 时间&#xff1a;2017-05-31 16:17:29 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6924911.html 前言 动态时间规整&#xff08;Dynamic Time Warping&#xff0c;DTW&#xff09;是孤立词识别的早期技术&#xff0c;梳理一下&#xff0c;主…

到底逾期几次才会影响贷款申请?

大家都知道&#xff0c;申请贷款时&#xff0c;贷款机构会重点考察借款人的征信记录&#xff0c;那么&#xff0c;评估标准是什么呢&#xff1f;到底逾期几次才会影响到贷款的申请&#xff1f;在信贷行业&#xff0c;对逾期标准的评判一般是按“连三累六”的原则&#xff0c;简…

状态机与时钟分频

状态机与时钟分频 题目描述 使用状态机实现时钟分频,要求对时钟进行四分频,占空比为0.25 信号示意图 题目解读 首先考虑输入输出,作为分频电路,有一个时钟输入端,clk,输出端div3,再加一个复位端(这里不加也可)所以输入 clk,rst输出 clk_out再考虑状态转换的问题。4分…

candence 16.6 win8.1 x64 破解

测试机系统截图&#xff1a; 破解说明具体的步骤&#xff1a; 1、安装licensemanager&#xff0c;问license时&#xff0c;单击cancel&#xff0c;然后finish. 2、接下来安装cadence的product,即第二项,直到结束. 2.1 安装cadence16.6最新补丁Hotfix_SPB16.60.003_wint_1of1.ex…

矢量量化(VQ)

作者&#xff1a;桂。 时间&#xff1a;2017-05-31 21:14:56 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6925955.html 前言 VQ&#xff08;Vector Quantization&#xff09;是一个常用的压缩技术&#xff0c;本文主要回顾&#xff1a; 1&#xff09;VQ原理 2&am…

超前进位加法器

超前进位加法器 题目描述 求两个四位的数据编写一个四位的超前进位加法器,建议使用子模块 提示:超前进位加法器的位公式如下 这里‘+’ ‘’符号不是‘加’和‘乘’,是‘或’和 ‘与’ 题目解析 题目要求 4级可以表示为如下,这里P和G是传播信号和生成信号: `timesc…

哪些职业申请贷款比较难?

贷款一般会重点考核借款人的收入&#xff0c;信用&#xff0c;资产&#xff0c; 工作等基本信息&#xff0c;有时候明明借款人有着较高的收入&#xff0c;信用也良好&#xff0c;可是最后还是被拒绝了。这其中有很大一部分是跟借款人的职业有一定的关系。那到底哪些职业的人贷款…

常用音频软件:Wavesufer

作者&#xff1a;桂。 时间&#xff1a;2017-06-02 10:23:39 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6932408.html 前言 只列举两个自己用过的&#xff08;wavesufer和praat&#xff09;&#xff0c;如果有其他更好的软件&#xff0c;还希望各位留下链接。 本…

等额本息和等额本金,哪个还款方式更划算?

贷款还款方式有很多种&#xff0c;其中等额本息和等额本金最常见的两种还款方式。但是有很多朋友对这两种还款方式没有概念&#xff0c;甚至分不清这两者到底有什么区别&#xff0c;所以今天我们就跟大家来详细解说下&#xff0c;什么是等额本金&#xff0c;什么是等额本息&…

全 加 器

全加器 题目描述 请用题目提供的半加器实现全加器电路 timescale 1ns/1nsmodule add_half(input A ,input B ,output wire S ,output wire C );assign S A ^ B; assign C A & B; endmodule/*****************…

申请表怎么填才能提高信用卡额度?

对于大多数朋友来说&#xff0c;申请信用卡都希望下卡的额度能高一些&#xff0c;但是对于很多人来说&#xff0c;最终下卡的额度一般在5000-2万之间比较多。其实信用卡的额度和申请人的综合评分有很大的关系&#xff0c;综合评分越高额度可能会越大&#xff0c;而综合评分与申…

串行进位加法器

串行进位加法器 题目描述 ② 请用全加器电路①实现串行进位的4位全加器电路 题目解读 可将4个全加器串行相连,实现四位数串行进位加法器。原理图如下: `timescale 1ns/1nsmodule add_half(input A ,input B ,output wire S ,…

个人贷款5级分类,来看看你是哪一级

第一类&#xff08;特优客户&#xff09;年龄&#xff1a;30周岁——50周岁之间。婚姻&#xff1a;已婚且家庭关系稳定。职业&#xff1a;副处级以公务员、事业单位正式编制人员&#xff0c;副团级以上军干部&#xff0c;学校领导人员&#xff0c;二甲以上医院副主治级以上正式…

异步复位同步释放

异步复位同步释放 题目描述 请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理 信号示意图 题目解读 复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引…

贷款不还会有什么后果?

我们经常听到一些贷款的朋友说&#xff0c;贷款是凭借自己的能力贷的&#xff0c;为什么要还&#xff1f;可能这句话是贷款的朋友拿来开玩笑的&#xff0c;但是如果贷款借了之后不还&#xff0c;那就将会面临很大的影响。一、高额罚息贷款合同一般都会有违约条例及有关罚息的规…

贷款都有哪些类型?

没经常接触贷款的朋友&#xff0c;如果初次接触贷款&#xff0c;经常会听到无抵押贷款&#xff0c;抵押贷款&#xff0c;质押贷款等等&#xff0c;这么多贷款类型让人摸不着头脑&#xff0c;那么究竟市场有多少贷款品种呢&#xff1f;一、无抵押贷款无抵押贷款顾名思义就是不需…

贷款用途有什么限制?非法用途有什么后果?

大家都知道&#xff0c;贷款审核的时候是必须核实贷款用途的&#xff0c;借款人贷款必须用于正常的用途&#xff0c;不能用于一些严禁的用途&#xff1a;1、不能用于黄、赌、毒黄赌毒本身就是法律禁止&#xff0c;更重要的是一旦贷款涉及黄赌毒&#xff0c;基本是有去无回的&am…