`
weiyinchao88
  • 浏览: 1176095 次
文章分类
社区版块
存档分类
最新评论

图像、帧、片、NALU(firstime)

 
阅读更多

图像、帧、片、NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论:


H.264 是一次概念的革新,它打破常规,完全没有 I 帧、P帧、B 帧的概念,也没有 IDR 帧的概念。对于 H.264 中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明:
(1)、在 H.264 协议中图像是个集合概念,顶场、低场、帧都可以称为图像(本文后面内容用到图像概念时都是集合概念,不再重复说明)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了,即我们提到的“帧”通常就是指不分场的图像;
(2)、如果不采用 FMO(灵活宏块排序) 机制,则一幅图像只有一个片组
(3)、如果不使用多个片,则一个片组只有一个片;
(4)、如果不采用 DP(数据分割)机制,则一个片就是一个 NALU,一个 NALU 也就是一个片。否则,一个片由三个 NALU 组成(即标准“表7-1”中 nal_unit_type 值为 2、3、4 的三个 NALU 属于一个片);
(5)、以上所述的片和 NALU 的大小关系并不是抽象概念上的从属关系。从概念的从属关系上来看,NALU其实又是片的一个集合概念,例如:标准“表7-1”中 nal_unit_type 值为 5 的 NALU 包括 I 片或者 SI 片。

一幅图像根据组成它的片类型来分,可以分为标准“表7-5”中的 8 种类型。我们平常应用中所最常见到的其实是这些类型的特例。例如:我们平常所谓的“I 帧”和“IDR 帧”,其实是 primary_pic_type 值为 0 的图像,我们平常所谓的“P帧”其实是 primary_pic_type 值为 1 的图像的特例,我们平常所谓的“B帧”其实是 primary_pic_type 值为 2 的图像的特例。

一幅图像根据概念来分可以分为两种:IDR 图像和非 IDR 图像。一幅图像是否是 IDR 图像是由组成该图像的 NALU 决定的,如果组成该图像的 NALU 为标准“表7-1”中 nal_unit_type 值为 5 的 NALU,则该图像为 IDR 图像,否则为非 IDR 图像。这里也有几点值得说明:
(1)、nal_unit_type 值为 5 的 NALU 只会出现在 IDR 图像中,而 IDR 图像中的所有 NALU 都是nal_unit_type 值为 5 的 NALU;
(2)、我们以组成一幅图像的片的类型来区分该图像是否是 IDR 图像是错误的。例如:一幅图像中的所有片都是 I 片并不代表这幅图像就是 IDR 图像。因为 I 片也可以从属于 nal_unit_type 值为 1 的 NALU。只不过我们平常最常见到的形式是:所有片都是 I 片的图像就是 IDR 图像。其实这个时候 IDR 图像的概念也被我们具体化和细小化了。

一幅图像由 1~N 个片组组成,而每一个片组又由一个或若干个片组成。图像解码过程中总是按照片进行解码,然后按照片组将解码宏块重组成图像。从这种意义上讲,片实际是最大的解码单元。而一个片又包含哪些类型的宏块呢?标准“表7-10”做了最好的说明。一个 I 宏块又分为哪些类型呢?标准“表7-11”做了最好的说明。一个 P 宏块又分为哪些类型呢?标准“表7-13”做了最好的说明。一个 B 宏块又分为哪些类型呢?标准“表7-14”做了最好的说明。一个 P 宏块的亚宏块又分为哪些类型呢?标准“表7-17”做了最好的说明。一个 B 宏块的亚宏块又分为哪些类型呢?标准“表7-18”做了最好的说明。

楼上还是没看明白哈。例如一帧 CIF 图像尺寸为 352*288;不分场时可以叫图像,也可以叫帧,其大小为 352*288;分场后其中一半也可以叫图像,也可以叫顶场,其大小为 352*144,另一半也可以叫图像,也可以叫低场,其大小为 352*144。各个论文中提到的帧一般都是指不分场时候的图像
——(1)、在 H.264 协议中图像是个集合概念,顶场、低场、帧都可以称为图像(本文后面内容用到图像概念时都是集合概念,不再重复说明)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了

分享到:
评论

相关推荐

    一眼看出NALU中SPS与PPS与SEI与IDR与P帧

    一眼看出NALU中SPS与PPS与SEI与IDR与P帧

    H265 Nalu分割示例

    该示例用于演示H265码流的NALU分割,并保存成单帧文件。其中vps+sps+pps保存为第0帧。包含h265码流。可直接gcc编译运行。

    H264裸流帧解码器

    H264裸流帧解码器,可将H264裸流帧解码为opecv可使用的Iplimage类型 使用:先调用Init,传入正确的参数,然后调用H264toIplimage即可

    关于NALU的一些问题

    这是一个关于NALU的一些基本问题,是本人以前遇到过的,先告诉大家,希望有所帮助。

    H.264视频字节流解析成NALU

    该程序完成从XXX.h264编码文件中解析出视频的基本单元NALU,NALU是H.264码流解码的基本单元。NALU包括起始码和数据部分,对于起始码,程序可以解析出0x000001或者0x00000001开头的NALU。程序由main()、int parse_h...

    H264流式分析NALU单元代码实现

    h264的nalu单元流式分析实现,c++实现,支持h264裸流流式输入,按nalu单元回调出来。

    H264 NALU分析1

    H简介H 编解码解析H编码原理H中的I帧、P帧和B帧H编码结构解析NALU结构解析NALU补充讲解GOP group of picturesH.中的I帧,B帧和

    NALU单元的分离并播放

    自动加载一段test.264视频,分离其nal单元,将其解码并播放出来,程序可直接运行。

    nalu解析文件test.c

    AN平台中端人证及访客V1.0项目DSP设计文档linux-4.16.8 gdb.rar SpecialVH264.rar

    H.264 NALU nal_ref_idc 字段说明

    关于 H.264 中 NALU 的 nal_ref_idc 字段的说明,主要是和 Start Code Value 的关系

    c++封装从文件读取h264nalu.zip

    c++封装从文件读取h264nalu

    nalu.rar_SVC video coding_nalu_svc

    SVC视频编码,nalu文件解析,用于流提取

    C++ 读取h264中的nalu

    h264帧通常包含多个nalu,当我们需要封装为mp4的时候,就需要获取这些nalu,读取其中的sps和pps信息,以及视频帧。h264的打包格式有2种,一种是Annex-B,另一种是AVCC,本文提供Annex-B的解析方法。本资源为文章附件...

    RTP_Protocol.rar_h.264 NALU_nalu_rfc3984_rtp 264

    主要介绍遵循rfc3550以及rfc3984,以RTP(实时传送协议)打包H.264格式视频数据 NALU的方法。

    h264-Nalu-详解.docx

    h264-Nalu-详解,文档还可以,有需要的可以下载看看,学习一下。

    AVCC_Nalu_Parse.zip

    演示H264 AVCC转为Annex B格式,提供详细注释以及资源文件,可直接运行。生成的文件VLC可以直接播放。

    nalu-wind:针对百亿亿次计算平台的风场模拟求解器

    纳鲁·温德| | Nalu-Wind是用于风力涡轮机和风场模拟的通用,非结构化,大规模并行,不可压缩的流量求解器。 该代码库是; NaluCFD由Sandia国家实验室开发和维护。 Nalu-Wind由来自,和的专门的多机构团队积极开发和...

    从H264编码的sps解析出来图像参数

    从h264图像编码里的sps nalu里解析出来图像的宽和高,级别等参数。

    AnalysisAVP:音频视频学习,相关文件格式协议分析。h264nalu aac adts flv

    I帧图像采用帧内编码方式; I帧所占数据的信息量比较大; I帧图像是预测出现在图像序列中的,出现频率指向编码器选择; I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量); IDR帧是帧组GOP的...

    Nalu:娜露

    Nalu,一种通用的非结构化大规模并行低马赫流代码,旨在支持感兴趣的能源应用。 能源部(DOE)在日期为2014年5月13日的备忘录中已授予Sandia许可在名为“ Nalu v 1.0”的软件中主张其版权。 跟着我们! 引用纳鲁 在...

Global site tag (gtag.js) - Google Analytics