H.264入门学习(1)

来源:互联网 发布:游戏程序员的职业诉求 编辑:程序博客网 时间:2024/06/06 10:47

        在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。H264采用的核心算法是帧内压缩和帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。

----------------------

H.264 分层

--------------

    1、H.264 的功能分为两层,即视频编码层(VCL)和网络提取层(NAL,Network Abstraction Layer)。VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在VCL 数据传输或存储之前,这些编码的VCL 数据,先被映射或封装进NAL 单元中。每个NAL 单元包括一个原始字节序列负荷(RBSP)、一组对应于视频编码数据的NAL 头信息。


    2、一个视频图像可编码成一个或更多个片,每片包含整数个宏块(MB),即每片至少一个MB,最多时每片包含整个图像的宏块。总之,一幅图像中每片的宏块数不一定固定。
     设片的目的是为了限制误码的扩散和传输,应使编码片相互间是独立的。某片的预测不能以其它片中的宏块为参考图像,这样某一片中的预测误差才不会传播到其它片中去。
    编码片共有5 种不同类型,除已讲过的I 片、P 片、B 片外,还有SP 片和SI 片。其中SP(切换P)是用于不同编码流之间的切换;它包含P 和/或I 宏块。它是扩展档次中必须具有的切换,它包含了一种特殊类型的编码宏块,叫做SI 宏块,SI 也是扩展档次中的必备功能。片的句法结构见图6.7,其中片头规定了片的类型,该片属于哪个图像,有关的参考图像等,片的数据包含一系列的编码MB,和/或跳编码(不编码)数据。每个MB 包含头单元(见表6.1)和残
差数据。




----------------------

序列的说明

----------------------

        在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流,以I帧开始,到下一个I帧结束。

        一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。

        一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧





0 0