H264学习1 手解NAL单元

本文详细介绍了H264编码的学习过程,从文件结构开始,包括NAL单元的起始码、NAL头和RBSP,重点讲解了哥伦比亚指数编码的无符号和有符号数解码,并展示了如何将NAL数据转换为RBSP数据,最后通过手动解析具体数据来验证理解的正确性。
摘要由CSDN通过智能技术生成

作为一名向进军流媒体行业的工程师,学习H264太过于枯燥一时间理解不了H264的算法概念什么的就先从解析H264的源数据开始吧。

1.文件结构

H264的源文件是由NAL单元组成,一个完整的NAL数据由起始码前缀,NAL头和RBSP三部分组成。

起始码前缀为:0X00 0X00 0X00 0X01四个连续的字符组成。

NAL头由一个字节组成:

bit[7]固定为0即必须为0 表示:forbidden_zero_bit

bit[6:5]:表示:nal_ref_idc

bit[4:0]:表示NAL单元的类型,nal_unit_type

剩余的部分就是整个文件的主题部分RBSP

2.准备工作

在这里需要重要的提一下分析H264文件数据的时候一般是以bit 流的形式去分析数据除了常见的整形数据类型还有哥伦比亚指数编码。还有就是需要将NAL单元的除起始码前缀和NAL头部分的数据转换为RBSP形式。

2.1哥伦比亚指数编码解析

2.1.1哥伦比亚指数编码无符号数的解码

(1)首先读取当前位置的bit位,记录连续0的个数N

(2)对于连续0的个数为0值为0,对于连续0的个数不为0 跳过第一个非0的bit位

(3)再读取N个数据,此数据以无符号形式解析num

(4)num=num-1+2的N次方

2.1.2哥伦比亚指数编码有符号数的解码 

(1)按照2.1.1的讲述先获取此段数据的哥伦比亚指数编码的无符号形式

(2)如果数据为奇数num=(num+1)/2;如果是偶数num=-(num/2)

2.2将NAL数据转换为RBSP数据

其实这个部分需要做的就是将NAL单元除头部的数据剔除连续两个0x00数据后面的0x03数据。

3.手动解析

当前获取的源数据为:

00     00    00    01    67    64    00    0C

AC    D9   41    41    FB   01    10    00

00     03    00    10    00    00    03    01

E0    F1    42    99    60

NAL头部的数据为0x67(0110 0111)所以forbidden_zero_bit(0)的值为0,nal_ref_idc(11)的值为(3),nal_unit_type(00111)的值为7表示后面的RBSP数据为参数序列集

将后面的数据转换为RBSP格式的数据为:

64    00    0C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值