一段H264数据的分析


         
       

目录(?)[-]

  1. 分析00 00 00 01 67 42 00 1E 99 A0 B1 31 00 00 00 01
  2. 分析00 00 00 01 68 CE 38 80 00 00 00 01

 

分析00 00 00 01 67 42 00 1E 99 A0 B1 31 00 00 00 01

H264的数据流分为两种,一种是NAL UNIT stream(RTP),一种是 bits stream,
两者可以互相转换。我们分析的这个是 bit stream,根据Annex B
00 00 00 01 67 42 00 1E 99 A0 B1 31 是 一个NAL,在两个00 00 00 01之间
0110 0111 0100 0010 0000 0000 0001 1110 1001 1001 1010 0000 1011 0001 0011 0001
forbidden_zero_bit(1) = 0
nal_ref_idc(2)= 11
nal_unit_type(5) = 0 0111:
seq_parameter_set_rbsp( )
所以 processSPS

0110 0111 0100 0010 0000 0000 0001 1110 1001 1001 1010 0000 1011 0001 0011 0001
profile_idc(8):42:0100 0010


0110 0111 0100 0010 0000 0000 0001 1110 1001 1001 1010 0000 1011 0001 0011 0001

constraint_set0_flag(1):0
constraint_set1_flag(1):0
constraint_set2_flag(1):0
constraint_set3_flag(1):0
reserved_zero_4bits(4):0

0110 0111 0100 0010 0000 0000 0001 1110 1001 1001 1010 0000 1011 0001 0011 0001

level_idc(8):1E
seq_parameter_set_id(UE(V)):

ue(v): unsigned integer Exp-Golomb-coded syntax element with the left bit first. The parsing process for this descriptor is specified in subclause 9.1
uvlC: 1001:根据Table9.1 , value= 0,只占1bit.
根据profile_idc忽略掉一部分。
log2_max_frame_num_minus4(ue(v): 001 10,len = 5,value= 5
pic_order_cnt_type(ue(v)):01 1,len = 3,value = 2
根据pic_order_cnt_type忽略几个参数
num_ref_frames(ue):010,len = 3,value = 1


0110 0111 0100 0010 0000 0000 0001 1110 1001 1001 1010 0000 1011 0001 0011 0001
gaps_in_frame_num_value_allowed_flag(1) = 0
pic_width_in_mbs_minus1(ue):000 1011 ,len = 7,value = 10;
pic_height_in_map_units_minus1(ue):0001 001,len = 7,value = 8
frame_mbs_only_flag(1) = 1
忽略1
direct_8x8_inference_flag(1):0
忽略
vui_parameters_present_flag(1):0
忽略
NALU结束

分析00 00 00 01 68 CE 38 80 00 00 00 01

0110 1000(68)
forbidden_zero_bit(1) = 0
nal_ref_idc(2)= 11
nal_unit_type(5) =01000:
pic_parameter_set_rbsp( ),7.3.2.2
1100 (C)
pic_parameter_set_id (ue)=0
seq_parameter_set_id(ue)=0
entropy_coding_mode_flag(1) :0, 重要的flag,0 表示编码Exp-Golomb coded and CAVLC,1表示CABAC
pic_order_present_flag(1):0

1110 (E)
num_slice_groups_minus1(ue):0
忽略
num_ref_idx_l0_active_minus1(ue):0
num_ref_idx_l1_active_minus1(ue):0
weighted_pred_flag(1);0
0011 1000 1000 0000 
(38 80)
weighted_bipred_idc(2):00
pic_init_qp_minus26 /
* relative to 26 */(se):0
pic_init_qs_minus26 /* relative to 26 */(se):0
chroma_qp_index_offset(se):0
deblocking_filter_control_present_flag(1);0
constrained_intra_pred_flag(1):0
redundant_pic_cnt_present_flag(1):0
忽略
NALU结束

65 88 80 21 71 27 1B 88…….3888*16 byte
65:0110 0101
forbidden_zero_bit(1) = 0
nal_ref_idc(2)= 11
nal_unit_type(5) =0 0101:
slice_layer_without_partitioning_rbsp( ),IDR浈
Slice
Slice_Header:
first_mb_in_slice(ue):0
slice_type(ue):000 1000 = 7
pic_parameter_set_id(ue) = 0
80 21:000 0000 0010 0001
frame_num(u(v): frame_num
 is used as an identifier for pictures and shall be represented by log2_max_frame_num_minus4 + 4 bits,9 bits = 0
忽略
if( nal_unit_type = = 5 ) //IDR frame
idr_pic_id(u(e)):0
忽略N多

ref_pic_list_reordering( ) 见7。3。3。1忽略,Islice,SI slice,B slice
nal_ref_idc   =11 所以dec_ref_pic_marking( )
nal_unit_type = 5,所以
no_output_of_prior_pics_flag(1):0
long_term_reference_flag(1):0
忽略

。。71 27
001 0111 0001 0010 0111
slice_qp_delta(se(v):001 01 ,4:-2
忽略

slice_data( ):7.3.4
对I-Slice:忽略N多
进入
if( moreDataFlag ) { if( MbaffFrameFlag && ( CurrMbAddr % 2 = = 0 | |                  ( CurrMbAddr % 2 = = 1 && prevMbSkipped ) ) )mb_field_decoding_flag
macroblock_layer( )
}
mb_field_decoding_flag忽略
macroblock_layer( )
mb_type(ue(v):0
mb_pred( mb_type )
prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] (1bit, 对babac是ae(v)):1
1 27:0001 0010 0111
prev_intra4x4_pred_mode_flag[
 1 ] : 0001,0,001
0010 0111
prev_intra4x4_pred_mode_flag[ 2 ] : 0010,0,010
prev_intra4x4_pred_mode_flag[
 3] : 0111,0,111
……16个
1b 88 00 3e cf. 
intra_chroma_pred_mode(ue(v)) : 最后的一个1bit:0

接下来是macroblock_layer的coded_block_pattern和run level,既系数
c0 06 ad a0 18
1100 0000 0000 0110 1010 0000 0001 1000
coded_block_pattern(me(v):0,根据
,= 47,0x2f
mb_qp_delta(se(v):0 len =1
residual( )见7.3.5.3
residual_block( LumaLevel[ i8x8 * 4 + i4x4 ], 16 )
coeff_token(ce(v): 00 0000 0000 0110 1
nc = 0(left block and top block 相关的):

len: {   // 0702

{ 1, 6, 8, 9,10,11,13,13,13,14,14,15,15,16,16,16,16},

{ 0, 2, 6, 8, 9,10,11,13,13,14,14,15,15,15,16,16,16},

{ 0, 0, 3, 7, 8, 9,10,11,13,13,14,14,15,15,16,16,16},

{ 0, 0, 0, 5, 6, 7, 8, 9,10,11,13,14,14,15,15,16,16},

},

{

{ 2, 6, 6, 7, 8, 8, 9,11,11,12,12,12,13,13,13,14,14},

{ 0, 2, 5, 6, 6, 7, 8, 9,11,11,12,12,13,13,14,14,14},

{ 0, 0, 3, 6, 6, 7, 8, 9,11,11,12,12,13,13,13,14,14},

{ 0, 0, 0, 4, 4, 5, 6, 6, 7, 9,11,11,12,13,13,13,14},

},

{

{ 4, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9,10,10,10,10},

{ 0, 4, 5, 5, 5, 5, 6, 6, 7, 8, 8, 9, 9, 9,10,10,10},

{ 0, 0, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,10},

{ 0, 0, 0, 4, 4, 4, 4, 4, 5, 6, 7, 8, 8, 9,10,10,10},

},

code:

{ 1, 5, 7, 7, 7, 7,15,11, 8,15,11,15,11,15,11, 7,4},

{ 0, 1, 4, 6, 6, 6, 6,14,10,14,10,14,10, 1,14,10,6},

{ 0, 0, 1, 5, 5, 5, 5, 5,13, 9,13, 9,13, 9,13, 9,5},

{ 0, 0, 0, 3, 3, 4, 4, 4, 4, 4,12,12, 8,12, 8,12,8},

},

{

{ 3,11, 7, 7, 7, 4, 7,15,11,15,11, 8,15,11, 7, 9,7},

{ 0, 2, 7,10, 6, 6, 6, 6,14,10,14,10,14,10,11, 8,6},

{ 0, 0, 3, 9, 5, 5, 5, 5,13, 9,13, 9,13, 9, 6,10,5},

{ 0, 0, 0, 5, 4, 6, 8, 4, 4, 4,12, 8,12,12, 8, 1,4},

},

{

{15,15,11, 8,15,11, 9, 8,15,11,15,11, 8,13, 9, 5,1},

{ 0,14,15,12,10, 8,14,10,14,14,10,14,10, 7,12, 8,4},

{ 0, 0,13,14,11, 9,13, 9,13,10,13, 9,13, 9,11, 7,3},

{ 0, 0, 0,12,11,10, 9, 8,13,12,12,12, 8,12,10, 6,2},

},
根据表查的:
code = 13,len = 15,i= 12,j=2
所以numcoeff = 12,numtrailingones = 2
010 0000 0001 1000: totalzeros:根据numcoeff

int lentab[TOTRUN_NUM][16] =

{

 

{ 1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},

{ 3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},

{ 4,3,3,3,4,4,3,3,4,5,5,6,5,6},

{ 5,3,4,4,3,3,3,4,3,4,5,5,5},

{ 4,4,4,3,3,3,3,3,4,5,4,5},

{ 6,5,3,3,3,3,3,3,4,3,6},

{ 6,5,3,3,3,2,3,4,3,6},

{ 6,4,5,3,2,2,3,3,6},

{ 6,6,4,2,2,3,2,5},

{ 5,5,3,2,2,2,4},

{ 4,4,3,3,1,3},

{ 4,4,2,1,3}, numcoeff开始

{ 3,3,1,2},

{ 2,2,1},

{ 1,1},

};

int codtab[TOTRUN_NUM][16] =

{

{1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},

{7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},

{5,7,6,5,4,3,4,3,2,3,2,1,1,0},

{3,7,5,4,6,5,4,3,3,2,2,1,0},

{5,4,3,7,6,5,4,3,2,1,1,0},

{1,1,7,6,5,4,3,2,1,1,0},

{1,1,5,4,3,3,2,1,1,0},

{1,1,1,3,3,2,2,1,0},

{1,0,1,3,2,1,1,1,},

{1,0,1,3,2,1,1,},

{0,1,1,2,1,3},

{0,1,1,1,1}, numcoeff开始

{0,1,1,1},

{0,1,1},

{0,1},

};

 

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

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

相关文章

海华模组:WIFI、BT、SoC模组列表

各种模块广泛应用于网络摄像头、智能机器人、儿童故事机、词典笔、智能音箱、智能家电等需要实现无线联网设备的消费类电子产品。 模块化有很大的有点:集成设计、减少调试工作,避开开发盲区、加速将产品推向市场! 下面介绍下海华各类通讯模…

JAVA-初步认识-第七章-构造函数和一般函数的区别

一. 构造函数是对象一创建,就被调用了。(调用这个词很特殊,是涉及到实体时,才会有调用的过程) 还有一点想说的是,构造函数的声明应该是固定的,不然没法随着对象的创建一起执行,必须是类名括号的形式。 二. …

深入理解哈希表

转自:https://bestswifter.com/hashtable/ 这篇文章由一个简单的问题引出: 有两个字典,分别存有 100 条数据和 10000 条数据,如果用一个不存在的 key 去查找数据,在哪个字典中速度更快? 有些计算机常识的读者都会立刻回…

Linux服务器ftp+httpd部署

一、ftp安装 1、安装vsftpd 命令:yum -y install vsftpd 2、修改ftp配置文件 命令:vim /etc/vsftpd/vsftpd.conf 3、按i进入insert模式后,按以下要求修改 anonymous_enableYES 改为anonymous_enableNO chroot_local_userYES #去掉前面的注释 …

高清网络摄像机主流芯片方案之安霸、TI和海思对比

高清网络视频监控发展到今天,市场也开始进入真正的高清时代,诸多有实力的高清摄像机厂家的产品线也逐渐完善起来,高清网络视频监控的配套产品有更加丰富和成熟。与此同时困扰很多人的高清网络摄像机与后端平台或者与后端NVR互联互通的问题也在…

ios审核4.3被拒,快速通过IOS4.3问题

最近有许多开发者遇到了因为审核条款 4.3(后文统一简称 4.3)审核条款 4.3(后文统一简称 4.3),这种情况 常见于大家上传重复应用的时候,因为App Store 已经有了很多相似的应用 而被打回,今天我们…

正基模组:WIFI/BT/GPS/FM模组列表

各种模块广泛应用于网络摄像头、智能机器人、儿童故事机、词典笔、智能音箱、智能家电等需要实现无线联网设备的消费类电子产品。 模组由于其特性,给终端硬件开发带来巨大的便利性和实用性,具体小结如下: Feature特点:1. 模块均采用邮票孔形…

计算机网络基础教程---强烈推荐!来自锐捷官方网站

一、计算机网络基础教程 说明:每个教程的时间大约为6分钟,以问题为导向,以项目为驱动。1、第一章 IPV4地址介绍 http://www.ruijie.com.cn/fw/zxpx/4092、第二章 TCP/IP协议簇介绍 http://www.ruijie.com.cn/fw/zxpx/4103、第三章 ARP协议工作…

杨幂掐点祝福唐嫣,打破不和传言,情感营销还能这么玩?

发现今天的蜂蜜泡水特别地甜,舍友说,同样地蜂蜜同样多的水泡出来的水有什么不一样,肯定是你心情变好了。说得好像也有道理,想想最近这么多甜蜜的事,一开始是颖宝结婚,不久唐嫣和罗晋也宣布结婚,…

RTP/RTCP协议介绍

1流媒体协议 当前在Internet上传输音频和视频等信息主要有两种方式:下载和流式传输。 下载情况下,用户需要先下载整个媒体文件到本地,然后才能播放媒体文件。流式传输是指传输之前首先对多媒体进行预处理(降低质量和高效压缩),然后…

推荐一款软件(作业)

在过去,每当我遇见不认识的英文单词时我的解决方法是:查阅英汉词典,后来在我拥有手机之后,我的解决方法是:上网百度,而现在我的解决方法是:“有道翻译官”。是的,我要介绍的这款软件便是“有道翻…

网易有道最新力作 有道词典笔3 结构拆解

2020年12月1日,有道品牌推出了一款硬件新品,名叫有道词典笔3。 网易有道于2019年8月推出可以“一扫查词”的有道词典笔2代,搭载了OCR(光学字符识别)技术的产品,大大改变了传统的学习方式,查词效…

DataGridView动态添加新行的两种方法

简单介绍如何为DataGridView控件动态添加新行的两种方 法: 方法一: int indexthis.dataGridView1.Rows.Add();this.dataGridView1.Rows[index].Cells[0].Value "1"; this.dataGridView1.Rows[index].Cells[1].Value "2"; this.dat…

使用glew和glad 新建窗口

一、添加头文件 首先&#xff0c;将头文件加到项目的.cpp文件中 1 #include <glad/glad.h> 2 #include <GLFW/glfw3.h> 注&#xff1a; 包含glad的头文件一定要在包含glfw的头文件之前使用。因为glad的头文件包含了正确的openGL头文件&#xff08;例如GL/gl.h&…

有道词典笔3新增功能扫读和点读是怎么集成的?

2020年12月1日&#xff0c;有道品牌推出了一款硬件新品&#xff0c;名叫有道词典笔3。 相对有道于2019年8月推出后来被称为“爆品”的有道词典笔2来说&#xff0c;有道3硬件最大最明显差别是屏幕变的更大了&#xff0c;同时增加了点读功能&#xff08;点读笔点读特定教材的功能…

RTP协议分析

RTP协议分析 一&#xff0e; RTP协议背景.......................................................................................................... 1 二&#xff0e; RTP协议原理及工作机制........................................................................…

mongodb 部署

安装mongodb-3.4 1&#xff09;将安装包上传至服务器 2&#xff09;对压缩文件进行解压 tar -zxvf mongodb-linux-x86_64-suse12-v3.4-latest.tar.gz 3&#xff09;把解压出来的文件修改一下名字&#xff0c;并挪到指定安装路径 sudo mv mongodb-linux-x86_64-suse12-3.4.6-22-…

如何选择一款优秀的儿童读写台灯?

如何选择一款优秀的儿童阅读台灯&#xff1f;除了品牌、外观、材质、价格等因素外&#xff0c;最关键的是技术参数。 先说结论&#xff0c;满足如下几点参数&#xff0c;当数优选&#xff1a; 1-光通量&#xff1a;500lm以上 2-显色指数&#xff1a;≥95 3-色温&#xff1a…

Python与操作系统有关的模块

Os模块Python的标准库中的os模块主要涉及普遍的操作系统功能。可以在Linux和Windows下运行&#xff0c;与平台无关。os.sep 可以取代操作系统特定的路径分割符。os.name字符串指示你正在使用的平台。比如对于Windows&#xff0c;它是’nt’&#xff0c;而对于Linux/Unix用户&am…

数据对拍代码 c++

码了一晚上才码出这个&#xff0c;有点简陋&#xff0c;待更新 注意&#xff1a;1、数据路径自己在代码中修改&#xff0c;直接重定向即可 2、要配置好环境&#xff0c;将cb安装路径里的MinGW\bin路径放到path中 3、三份代码记得先编译一遍&#xff0c;再运行这份代码 #include…