当前位置:网站首页>H264Nalu头部解析
H264Nalu头部解析
2020-11-09 16:06:00 【朱子龙2018】
一 NALU头部解析
F: forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0. NRI: nal_ref_idc. 取00~11,似乎指示这个NALU的重要性,如00的NALU解码器可以丢弃它而不影响图像的回放,0~3,取值越大,表示当前NAL越重要,需要优先受到保护。如果当前NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要的单位时,本句法元素必需大于0。 Type: 标识NAL单元中的RBSP数据类型,其中,nal_unit_type为1, 2, 3, 4, 5的NAL单元称为VCL的NAL单元,其他类型的NAL单元为非VCL的NAL单元。 二 NALU Type 解析nalu type的计算方式
在每一帧的起始码(00 00 00 01)之后取到nalu头部code 一个字节
用该公式计算nalutype :int type = code & 0x1fnalu type
nal_unit_type. 这个NALU单元的类型,1~12由H.264使用,24~31由H.264以外的应用使用,简述如下:0 没有定义
1-23 NAL单元 单个 NAL 单元包
1 不分区,非IDR图像的片
2 片分区A
3 片分区B
4 片分区C
5 IDR图像中的片
6 补充增强信息单元(SEI)
7 SPS
8 PPS
9 序列结束
10 序列结束
11 码流结束
12 填充
13-23 保留 24 STAP-A 单一时间的组合包
25 STAP-B 单一时间的组合包
26 MTAP16 多个时间的组合包
27 MTAP24 多个时间的组合包
28 FU-A 分片的单元
29 FU-B 分片的单元
30-31 没有定义
常见数据帧
序列参数集 SPS----7:
SPS即Sequence Paramater Set SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。而每一帧的编码后数据所依赖的参数保存于图像参数集中。一般情况SPS和PPS的NAL Unit通常位于整个码流的起始位置。但在某些特殊情况下,在码流中间也可能出现这两种结构,主要原因可能为: 1:解码器需要在码流中间开始解码; 2:编码器在编码的过程中改变了码流的参数(如图像分辨率等);
图像参数集 PPS----8:
除了序列参数集SPS之外,H.264中另一重要的参数集合为图像参数集Picture Paramater Set(PPS)。通常情况下,PPS类似于SPS,在H.264的裸码流中单独保存在一个NAL Unit中,只是PPS NAL Unit的nal_unit_type值为8;而在封装格式中,PPS通常与SPS一起,保存在视频文件的文件头中。
关键帧 IDR 帧----5:
I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
P帧 ----1:
P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
三 参考代码
h264nalu头部解析可参考ffmpeg源码 h264_parser.c的parse_nal_units函数
版权声明
本文为[朱子龙2018]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/3831427/blog/4710099
边栏推荐
- Service registration and discovery of go micro integration Nacos
- 用会声会影替换视频背景原来这么简单
- Echart sets the spacing between columns
- A quick start to Shell Scripting
- Data consistency of cache
- 什么是网站【新四化】?
- Arthas Install 快速安装文档
- Two ways for Tencent cloud server to build WordPress website
- MES系统在行业应用里区别于传统式管理
- 我叫Mongo,收了「查询基础篇」,值得你拥有
猜你喜欢
[share] interface tests how to transfer files in post request
On agile development concept and iterative development scheme
AUTOCAD2020安装包&安装教程
Full link stress testing of moral integrity -- the evolution of corpus intelligence
Echart sets the spacing between columns
自己实现printf函数
Set two ways of background image, and solve the mobile phone background image highly adaptive problem
shell脚本快速入门----shell基本语法总结
Express yourself with wechat expression translation, programmer's little romance, get up quickly!
你以为学编程很简单吗,其实它很难!你以为学编程很难吗,其实它很简单!
随机推荐
Native地图与Web融合技术的应用与实践
【运维思考】如何做好云上运维服务?
Autocad2020 full version installation text course, registration activation cracking method
echart 设置柱子之间的间距
博士在读时,把暗恋的师兄变成了老公是种怎样的体验?
要我说,多线程事务它必须就是个伪命题!
Why does it take more and more time to develop a software?
在Python中创建文字云或标签云
Programmers before and after buying a house, after reading has cried blind
布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.11
堆重启_uaf_hacknote
史上最惨黑客:偷走10亿美元比特币7年未花,最终被司法部全数缴获
Super discount, cloud server 88 yuan seconds
CAD2016下载AutoCAD2016下载安装详细教程CAD下载
Flink的安装和测试
Application and practice of native map and web fusion technology
High quality defect analysis: let yourself write fewer bugs
为什么现在开发一款软件的时间越来越长?
详解三种不同的身份验证协议
超大折扣力度,云服务器 88 元秒杀