当前位置:网站首页>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
边栏推荐
- Autocad2020 full version installation text course, registration activation cracking method
- 你以为学编程很简单吗,其实它很难!你以为学编程很难吗,其实它很简单!
- 程序员买房前后对比,看完后已哭瞎...
- 如何使用Camtasia制作动态动画场景?
- 5 minutes get I use GitHub's 5-year summary of these operations!
- Express yourself with wechat expression translation, programmer's little romance, get up quickly!
- 我叫Mongo,收了「查询基础篇」,值得你拥有
- 自己实现printf函数
- 我在传统行业做数字化转型(1)预告篇
- Echart sets the spacing between columns
猜你喜欢

It's so easy to replace the video background with the sound and shadow

超大折扣力度,云服务器 88 元秒杀

你以为学编程很简单吗,其实它很难!你以为学编程很难吗,其实它很简单!

High quality defect analysis: let yourself write fewer bugs

Get this template, double your salary

Object oriented magic method collection

程序员过高工资导致加班?应该降低程序员工资?网友:放过其他苦逼的程序员吧

嘉宾专访|2020 PostgreSQL亚洲大会阿里云数据库专场:王健

微服务框架 Go-Micro 集成 Nacos 实战之服务注册与发现

Openyurt in depth interpretation: how to build kubernetes native cloud edge efficient collaborative network?
随机推荐
shell脚本快速入门----shell基本语法总结
【运维思考】如何做好云上运维服务?
Why does it take more and more time to develop a software?
Using art template to obtain weather forecast information
Rongyun has completed several hundred million RMB round D financing, and will continue to build global cloud communication capability
Application of EMQ X in the Internet of things platform of China Construction Bank
The worst hacker in history: stealing $1 billion of bitcoin without spending it for seven years, and finally being seized by the Department of justice
5 minutes get I use GitHub's five-year summary of these complaints!
python中常见的一些错误异常类型
从一次需求改良漫谈php文件分片上传
我叫Mongo,收了「查询基础篇」,值得你拥有
使用art-Template模板获取天气预报信息
移动安全加固助力 App 实现全面、有效的安全防护
The way of a million year salary Architect: on the architecture design of application system
Cad2016 download autocad2016 download installation detailed tutorial CAD Download
Talking about PHP file fragment upload from a requirement improvement
Two ways for Tencent cloud server to build WordPress website
5分钟GET我使用Github 5 年总结的这些骚操作!
Low power Bluetooth single chip helps Internet of things
How can you be a big data worker with an annual salary of 40W if you don't work hard?