H264中NAL帧识别
2015-12-11 08:43
204 查看
NAL单元类型定义(图从《新一代视频压缩编码标准H.264》摘录):
假设一段h264的码流为:00 00 00 01 41 E6 60……
其中的00 00 00 01为起始码,而起始码之后的下一个字节就可以检测出这一帧的类型。
在上面的码流中起始码之后的字节位 0x41,换算成二进制为 0100 0001。
注:我解读顺序为从左往右算。
对于0100 0001
(1)第1位禁止位,值为1表示语法出错
(2)第2~3位为参考级别
(3)第4~8为是nal单元类型,在此处为 0 0001换算成十进制为1。根据上图可知道这段码流是【不分区、非IDR图像的片】,在baseline的档次中就是P帧,因为baseline没有B帧。
如果是另一段码流:00 00 00 01 65 E8……
那么根据0x65字节(0110 0101)根据后5位换算十进制为5,也就是【IDR图像中的片】,即I帧。
用代码的方式可以这样写,int type = 0x65 & 0x1f,然后根据type在表中查找即可获得需要的结果。
假设一段h264的码流为:00 00 00 01 41 E6 60……
其中的00 00 00 01为起始码,而起始码之后的下一个字节就可以检测出这一帧的类型。
在上面的码流中起始码之后的字节位 0x41,换算成二进制为 0100 0001。
注:我解读顺序为从左往右算。
对于0100 0001
(1)第1位禁止位,值为1表示语法出错
(2)第2~3位为参考级别
(3)第4~8为是nal单元类型,在此处为 0 0001换算成十进制为1。根据上图可知道这段码流是【不分区、非IDR图像的片】,在baseline的档次中就是P帧,因为baseline没有B帧。
如果是另一段码流:00 00 00 01 65 E8……
那么根据0x65字节(0110 0101)根据后5位换算十进制为5,也就是【IDR图像中的片】,即I帧。
用代码的方式可以这样写,int type = 0x65 & 0x1f,然后根据type在表中查找即可获得需要的结果。
相关文章推荐
- Xcode 7.1 - Unable to find execution service for selected run destination
- 有穷自动机
- 重载
- 第十二周项目4-利用遍历思想求解图问题(6)
- 第十二周项目三 图遍历算法实现
- 我是ptspzy
- MVC框架基础
- 第四周 项目3 单链表应用(1)
- LeetCode 221 Maximal Square
- Quartz.NET学习系列
- Xcode iOS布局autolayout和sizeclass的使用
- cs231n 问题
- 要引入java吸管工具
- 第15周项目1-验证算法
- 第十四周 项目3 是否二叉排序树
- Linux控制器(Controller)与适配器(Adapter)
- Remove Duplicates from Sorted Array II
- 第十五周项目1-验证算法(3)
- 第十三周项目5
- 2763: [JLOI2011]飞行路线