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意思及相互关系相关推荐

  1. H.264中帧、片、宏块和NAL的关系

    怎么区分H.264视频流的I frame 和 P frame? 我是新手,前些天自己看那H.264规范文档及其他资料寻找答案时, 还有几个概念的关系还没能理解清楚,望达人指点一二: NAL.Slice ...

  2. H.264中NALU、RBSP、SODB的关系 (弄清码流结构)

    NALU:Coded H.264 data is stored or transmitted as a series of packets known as NetworkAbstraction La ...

  3. H.264中的NAL技术

    NAL技术 1.NAL概述 NAL全称Network Abstract Layer, 即网络抽象层. 在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象 ...

  4. H.264 中的 NAL 技术

    1.NAL 概述 NAL 全称 Network Abstract Layer,即网络抽象层.在 H.264/AVC 视频编码标准中,整个系统框架被分为 了两个层面:视频编码层面(VCL)和网络抽象层面 ...

  5. H.264中的I_PCM模式

    H.264中的I_PCM模式 I_PCM是一种帧内编码模式,在该模式下,编码器直接传输图像的像素值,而不经过预测和变换.在一些特殊的情况下,特别是图像内容不规则或者量化参数非常低时,该模式比常规的操作 ...

  6. 分布式视频编码对比实验中H.264/AVC Intra 模式与H.264/AVC Inter Motion模式分析

    分布式视频编码(Distributed Video  Coding, DVC)主要的特点是编码端简单.解码端复杂.解码传输延时大以及传输鲁棒性高等,这些特点可以使其很好地满足计算能力受限的低功耗编码终 ...

  7. H.264 中很有用的一些概念

    Q:PSNR 峰值信噪比 是根据它来取qp是不是? A:不是 和QP没有直接关系但是QP的选择会影响到PSNR Q: 如果不用率失真最优化,为什么选择SATD+delta×r(mv,mode)作为模式 ...

  8. H.264中的一些易混淆概念

    Q:PSNR 峰值信噪比 Q:是根据它来取qp是不是? A:不是, 和QP没有直接关系, 但是QP的选择会影响到PSNR Q: 如果不用率失真最优化, 为什么选择SATD+delta×r(mv,mod ...

  9. 八、H.264中的熵编码基本方法、指数哥伦布编码

    GitHub代码地址:点击这里 本节视频免费 1. H.264中的熵编码基本方法 在成功从NAL Unit中获取到语法元素的码流之后,接下来就是对语法元素的码流进行解析.根据我们在前面的博文中所讲述的 ...

最新文章

  1. 为什么要研究游戏 AI 呢?
  2. JavaScript = TypeScript 类入门
  3. spring 源代码地址
  4. JavaScript教程之快速入门
  5. 获取redis实例绑定cpu的情况
  6. c实现三角形角度大于一个值_初中数学三角形知识点小结
  7. 【java】Java 中的 Exchanger 线程同步使用方法 线程之间交换数据
  8. 3dm游戏运行包_动作游戏ACT 逃离丧尸镇 Shadows of Kurgansk 电脑游戏资源
  9. libsvm3.22——使用指南
  10. redis数据丢失_Redis持久化Redis宕机或者出现意外删库导致数据丢失解决方案
  11. ajax获取checkbox循环出来的值_Django:前后端异步加载数据(循环大法)
  12. 阿里云祝顺民:云网络的十年“修路”历程
  13. centos7字体颜色改变_CentOS7.3中设置Shell终端文本外观自定义字体
  14. 牛客练习赛89 第一题(牛牛吃米粒)
  15. matlab单回路和串级控制回路,单回路和串级控制系统仿真应用研究.doc
  16. Python 地图行政区边界方案
  17. Hunger Snake
  18. 下载丨66页PDF,云和恩墨技术通讯(2022年7月刊)
  19. 如何将WPS中新建表格下的空白行去掉?
  20. 《孙子兵法》帮你玩转团队管理

热门文章

  1. 关于c语言中 scanf 对多行字符的输入问题
  2. js获取对象的父元素,子元素,兄弟元素
  3. Tomcat部署服务成功,前端页面乱码问题处理
  4. Windows 下安装 Xdebug 受难记之(1)
  5. Unity Editor修改分辨率
  6. 破解linux系统的root密码
  7. 软件测试——基础篇(软件测试的生命周期和BUG的概念)
  8. 脱壳--03.exe OD脚本脱壳
  9. 登陆QQ时总显示QQ安全防护进程,而且点了确定后QQ还是登不上
  10. 变天!用小程序月入21000笔!狂吸粉165万,他们做对了什么?