nalu模式多slice_H.264中NAL、Slice与frame意思及相互关系
H.264中NAL、Slice与frame意思及相互关系
NAL nal_unit_type中的1(非IDR图像的编码条带)、2(编码条带数据分割块A)、3(编码条带数据分割块B)、4(编码条带数据分割块C)、5(IDR图像的编码条带)种类型
与
Slice种的三种编码模式:I_slice、P_slice、B_slice
还有frame的3种类型:I frame、P frame、 B frame之间有什么映射关系么?
最后,NAL nal_unit_type中的6(SEI)、7(SPS)、8(PPS)属于什么帧呢?
不好意思,文档看得头晕晕的了,问题比较多~~~
PS:偶是新人 没多少分,要是哪位达人帮忙下的话 我就给我所有的分,好像只有十几分
1 frame的数据可以分为多个slice.
每个slice中的数据,在帧内预测只用到自己slice的数据, 与其他slice 数据没有依赖关系。
NAL 是用来将编码的数据进行大包的。 比如,每一个slice 数据可以放在NAL 包中。
I frame 是自己独立编码,不依赖于其他frame 数据。
P frame 依赖 I frame 数据。
B frame 依赖 I frame, P frame 或其他 B frame 数据。
建议楼主看一点视频编码的书吧, 自己看标准还是很难懂的。
那NAL nal_unit_type中的哪几种类型是I frame,现在只能确定nal_unit_type==5(IDR图像的编码条带)是I frame
sps、pps、SEI算不算I frame呢? 还有 属于编码条带分割的DPA、DPB、DPC呢?
能给个从视频流中提取I frame 和P frame的方法么?
谢谢楼上的回复,我也翻了两三本视频的书籍,感觉都是一个样的,都很少说到点的。楼主能推荐一两本好点的视频书籍么?
没人回答么??
直接给你代码吧 :)
//
// H.264 NAL type
enum H264NALTYPE{
H264NT_NAL = 0,
H264NT_SLICE,
H264NT_SLICE_DPA,
H264NT_SLICE_DPB,
H264NT_SLICE_DPC,
H264NT_SLICE_IDR,
H264NT_SEI,
H264NT_SPS,
H264NT_PPS,
};
int H264GetNALType(LPVOID pBSBuf, const LONG nBSLen)
{
if ( nBSLen < 5 ) // 不完整的NAL单元
return H264NT_NAL;
UINT8* pBS = (UINT8 *)pBSBuf;
ULONG nType = pBS[4] & 0×1F; // NAL类型在固定的位置上
if ( nType <= H264NT_PPS )
return nType;
return 0;
}
其中 H264NT_SLICE_IDR 是关键帧,H264NT_SLICE 是P帧
一个frame是可以分割成多个Slice来编码的,而一个Slice编码之后被打包进一个NAL单元,不过NAL单元除了容纳Slice编码的码流外,还可以容纳其他数据,比如序列参数集SPS。
1、NAL、Slice与frame意思及相互关系
NAL指网络提取层,里面放一些与网络相关的信息
Slice是片的意思,264中把图像分成一帧(frame)或两场(field),而帧又可以分成一个或几个片(Slilce);片由宏块(MB)组成。宏块是编码处理的基本单元。
2、NAL nal_unit_type中的1(非IDR图像的编码条带)、2(编码条带数据分割块A)、3(编码条带数据分割块B)、4(编码条带数据分割块C)、5(IDR图像的编码条带)种类型
与 Slice种的三种编码模式:I_slice、P_slice、B_slice
NAL nal_unit_type 里的五种类型,代表接下来数据是表示啥信息的和具体如何分块。
I_slice、P_slice、B_slice 表示I类型的片、P类型的片,B类型的片.其中I_slice为帧内预测模式编码;P_slice为单向预测编码或帧内模式;B_slice 中为双向预测或帧内模式。
3、还有frame的3种类型:I frame、P frame、 B frame之间有什么映射关系么?
I frame、P frame、 B frame关系同 I_slice、P_slice、B_slice,slice和frame区别在问题1中已经讲明白。
4、最后,NAL nal_unit_type中的6(SEI)、7(SPS)、8(PPS)属于什么帧呢?
NAL nal_unit_type 为序列参数集(SPS)、图像参数集(PPS)、增强信息(SEI)不属于啥帧的概念。表示后面的数据信息为序列参数集(SPS)、图像参数集(PPS)、增强信息(SEI)。
能给个从视频流中提取I frame 和P frame的方法么?
可以看slice中的头信息。
查找NAL起始码,然后读取NAL类型不就可以了吗
pBS[4] & 0×1F
怎么是第5个字节的第五位啊 前面4字节分别是什么(值)?
NAL单元的第1个字节的低五位吧?
然后在问个问题,怎么在一段视频流中检测 NAL的开始和结束?
引用 5 楼 hugeice 的回复:
直接给你代码吧 :)
//
// H.264 NAL type
enum H264NALTYPE{
H264NT_NAL = 0,
H264NT_SLICE,
H264NT_SLICE_DPA,
H264NT_SLICE_DPB,
H264NT_SLICE_DPC,
H264NT_SLICE_IDR,
H264NT_SEI,
H264NT_SPS,
H264NT_PPS,
};
int H264GetNALType(LPVOID pBSBuf, const LONG nBSLen)
{
if ( nBSLen < 5 ) // 不完整的NAL单元…
H.264视频流是以NAL单元传送的。。。但在一个NAL单元里面,可能既存放I-Slice(P-Slice或B-Slice),同事也可能存放图像的其他信息
那么 是不是说 I frame, P frame,B frame是把收到的NAL单元中的VCL的信息先提取出,然后按内容进行I、P、B frame分类?
而我们只能通过NAL nal_unit_type来判别NAL单元中数据的类型哈~~~
nalu模式多slice_H.264中NAL、Slice与frame意思及相互关系相关推荐
- H.264中帧、片、宏块和NAL的关系
怎么区分H.264视频流的I frame 和 P frame? 我是新手,前些天自己看那H.264规范文档及其他资料寻找答案时, 还有几个概念的关系还没能理解清楚,望达人指点一二: NAL.Slice ...
- H.264中NALU、RBSP、SODB的关系 (弄清码流结构)
NALU:Coded H.264 data is stored or transmitted as a series of packets known as NetworkAbstraction La ...
- H.264中的NAL技术
NAL技术 1.NAL概述 NAL全称Network Abstract Layer, 即网络抽象层. 在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象 ...
- H.264 中的 NAL 技术
1.NAL 概述 NAL 全称 Network Abstract Layer,即网络抽象层.在 H.264/AVC 视频编码标准中,整个系统框架被分为 了两个层面:视频编码层面(VCL)和网络抽象层面 ...
- H.264中的I_PCM模式
H.264中的I_PCM模式 I_PCM是一种帧内编码模式,在该模式下,编码器直接传输图像的像素值,而不经过预测和变换.在一些特殊的情况下,特别是图像内容不规则或者量化参数非常低时,该模式比常规的操作 ...
- 分布式视频编码对比实验中H.264/AVC Intra 模式与H.264/AVC Inter Motion模式分析
分布式视频编码(Distributed Video Coding, DVC)主要的特点是编码端简单.解码端复杂.解码传输延时大以及传输鲁棒性高等,这些特点可以使其很好地满足计算能力受限的低功耗编码终 ...
- H.264 中很有用的一些概念
Q:PSNR 峰值信噪比 是根据它来取qp是不是? A:不是 和QP没有直接关系但是QP的选择会影响到PSNR Q: 如果不用率失真最优化,为什么选择SATD+delta×r(mv,mode)作为模式 ...
- H.264中的一些易混淆概念
Q:PSNR 峰值信噪比 Q:是根据它来取qp是不是? A:不是, 和QP没有直接关系, 但是QP的选择会影响到PSNR Q: 如果不用率失真最优化, 为什么选择SATD+delta×r(mv,mod ...
- 八、H.264中的熵编码基本方法、指数哥伦布编码
GitHub代码地址:点击这里 本节视频免费 1. H.264中的熵编码基本方法 在成功从NAL Unit中获取到语法元素的码流之后,接下来就是对语法元素的码流进行解析.根据我们在前面的博文中所讲述的 ...
最新文章
- 为什么要研究游戏 AI 呢?
- JavaScript = TypeScript 类入门
- spring 源代码地址
- JavaScript教程之快速入门
- 获取redis实例绑定cpu的情况
- c实现三角形角度大于一个值_初中数学三角形知识点小结
- 【java】Java 中的 Exchanger 线程同步使用方法 线程之间交换数据
- 3dm游戏运行包_动作游戏ACT 逃离丧尸镇 Shadows of Kurgansk 电脑游戏资源
- libsvm3.22——使用指南
- redis数据丢失_Redis持久化Redis宕机或者出现意外删库导致数据丢失解决方案
- ajax获取checkbox循环出来的值_Django:前后端异步加载数据(循环大法)
- 阿里云祝顺民:云网络的十年“修路”历程
- centos7字体颜色改变_CentOS7.3中设置Shell终端文本外观自定义字体
- 牛客练习赛89 第一题(牛牛吃米粒)
- matlab单回路和串级控制回路,单回路和串级控制系统仿真应用研究.doc
- Python 地图行政区边界方案
- Hunger Snake
- 下载丨66页PDF,云和恩墨技术通讯(2022年7月刊)
- 如何将WPS中新建表格下的空白行去掉?
- 《孙子兵法》帮你玩转团队管理