美文网首页
直播技术--H264的基本概念

直播技术--H264的基本概念

作者: d8893ea8ba05 | 来源:发表于2019-10-16 15:27 被阅读0次

    逻辑概念-图片是如何被处理的

    • 对于输入的每一帧图片,首先将整张图片的数据划分成多个块,称之为宏块,一个宏块由16×16亮度像素和附加的一个8×8 Cb 和一个 8×8 Cr 彩色像素块组成
    • 若干个宏块组合在一起,称之为片,片存在的意义是,在处理数据的时候,片的预测是不能以其他片的数据为参考的,这样预测的误差就只会在这个片内,而不会扩散
    • 宏块有三种类型
      • I宏块:利用从当前片中已解码的像素作为参考进行帧内预测
      • P宏块:利用前面已编码图像作为参考进行帧内预测,一个帧内编码的宏块可进一步作宏块的分割,即 16×16、16×8、8×16 或 8×8 亮度像素块(以及附带的彩色像素);如果选了 8×8 的子宏块, 则可再分成各种子宏块的分割,其尺寸为 8×8、8×4、4×8 或 4×4 亮度像素块(以及附带的彩色像素)
      • B宏块:利用双向的参考图像(当前和未来的已编码图像帧)进行帧内预测

    这样整个帧流的逻辑结构可以自上向下切分为如下的图


    概念结构

    编码器的码流结构

    片是最上层的独立的数据单位,每个片必须自己携带关于所属图像的编号、大小等基本信息,这些信息在同一图像的每个片中都必须是一致的。在编码时,H.264 的规范要求将参数集、片这些独立的数据单位尽可能各自完整地放入一个分组中被传送。这样可以增强稳定性,一个片的丢失将不会影响其它片的解码,还可以通过该片前后的片来恢复该片的数据。


    数据传输结构(信道为逻辑通道)

    下图是一个码流中所包含的数据单位,这里的数据单位是指可以独立放入一个组传输的集合


    码流中的数据单位
    一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列 清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果在前一 个序列的传输中发生重大错误,如严重的丢包,或其他原因引起数据错位,在这里可以获得重新同步。IDR图像之后的图像永远不会引用IDR图像之前的图像数据来解码
    IDR图像和I图像有区别,IDR图像一定是一个I图像,但是I图像不一定是IDR图像;一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考

    除了参数集与片片还有其他的数据单位,这些数据单位可以提供额外的数据或同步信息

    数据语法结构

    • 编码层数据VCL:这是编码处理的输出,表示被压缩编码后的视频数据序列
    • 网络层数据NAL:VCL数据在被发送到网络上传输或存储之前,会先被封装进NAL单元中;一个NALU包含一组对应于视频编码的NALU头部信息和一个原始字节序列负荷(RBSP)


      NAL单元序列
    NALU结构
    • 一个NALU定义了可用于基于包和基于比特流系统的基本格式,区别这两种格式的方法在于每个比特流传输层都有一个起始代码
    • 一个NALU单元结构上是一个包含一定语法元素的可变长字节字符串,例如NALU可以携带一个编码片,ABC型数据分割或一个序列或图像参数集
    • 每个NAL单元由一个字节的头和一个包含可变场编码符号的字符串组成
    NALU头
    NALU头

    头部包含三个定长比特区,NALU类型(T)、NAL-REFERENCE-IDC(R)和隐藏比特位(F)

    • T用5bit来表示32中不同类型特征,1-12是H264定义的,24-31是用于H264意外的,RTP负荷规范使用这些其中的一些值来定义包聚合和氛围,其他值为H264保留
    • R比特用于在重构过程中标记一个NAL单元的重要,0表示这个NAL单元没有用于预测,高于0表示NAL单元要用于无漂移重构,且值越高,对NAL单元丢失的影响越大
    • 隐藏比特位在H264中默认是0,当网络识别到单元中存在比特错误时,可以将其设置为1,如当一个NAL单元在通过网关时,校验和检测失败,网关可以选择从NAL流中去掉这个NAL单元,也可以把已知被破坏的NAL单元传给接收端,在这种情况下,智能的解码器将常识重构这个NAL单元,而非智能的解码器则直接简单地抛弃这个NAL单元
    RBSP单元的类型

    NAL单元的头信息定义了RBSP单元的类型


    RBSP类型描述
    • 序列参数集SPS包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数、解码图像尺寸和帧场编码模式选择标识等等
    • 图像参数集PPS对应的是一个序列中某一副图像或几幅图像,其参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组书目、初始量化参数和去方块滤波洗漱调整标识等等
    • 通常,SPS和PPS在片头信息和数据解码前传送至解码器。每个片的头信息对应一个pic_parameter_set_id,PPS被其激活后一直有效到下一个PPS被激活;类似的,每个SPS对应一个seq_parameter_set_id,SPS被激活后将一直有效到下一个SPS被激活
    • 参数集机制讲一些重要的、改变少的序列参数和图像参数与编码片分离,并在编码片之前传送至解码端,或者通过其他机制传输
    单元解码过程
    • 在进行NAL单元解码过程之前,首先通过RTP协议解析(采用RTP封装),或者通过起始码检测(采用比特流方式),从传输码流中获取NAL单元数据
    • 从NAL单元中提取出RBSP语法结构,按照下图的流程处理RBSP语法结构
    • 对于NAL单元的解码过程,其输入时NAL单元,输出结果是经过解码的当前图像的样点值


      NAL单元解码

    相关文章

      网友评论

          本文标题:直播技术--H264的基本概念

          本文链接:https://www.haomeiwen.com/subject/wwpsmctx.html