zoukankan      html  css  js  c++  java
  • 如何理解H264 编码

    H264 结构 https://blog.csdn.net/andywang201001/article/details/80274886

    H264 源码  https://www.cnblogs.com/TaigaCon/p/5215448.html

    一、视频编码标准化组织

    H.264标准是属于MPEG-4家族的一部分,即MPEG-4系列文档ISO-14496的第10部分,因此又称作MPEG-4/AVC。

    二、视频压缩编码的基本技术

    预测编码

      帧间预测编码,前后两帧之间有数据冗余,差分之后数据量非常小,可以进行帧间预测编码

      帧内预测编码,帧内有数据冗余,可以进行帧内预测编码,帧内编码后可以进行独立解码,不用参考其他帧

    变换编码:(变换到另一个数据域上)

      编码方式:DCT(离散余弦变换), DST(离散正弦变换),K-L变换  

    熵编码:

      由于一个数据块的符号出现的概率并不一样, 这就导致使用同样长度的码字表示所有的符号会造成浪费。通过熵编码,针对不同的语法元素分配不同长度的码元,可以有效消除视频信息中由于符号概率导致的冗余。

    三、VCL NAL

    视频编码中采用的如预测编码、变化量化、熵编码等编码工具主要工作在slice层或以下,这一层通常被称为“视频编码层”(Video Coding Layer, VCL)。

    相对的,在slice以上所进行的数据和算法通常称之为“网络抽象层”(Network Abstraction Layer, NAL)。设计定义NAL层的主要意义在于提升H.264格式的视频对网络传输和数据存储的亲和性。

    四、档次与级别

    为了适应不同的应用场景,H.264也定义了三种不同的档次:

    • 基准档次(Baseline Profile):主要用于视频会议、可视电话等低延时实时通信领域;支持I条带和P条带,熵编码支持CAVLC算法, 实时通信领域不使用B帧(双向预测帧)
    • 主要档次(Main Profile):主要用于数字电视广播、数字视频数据存储等;支持视频场编码、B条带双向预测和加权预测,熵编码支持CAVLC和CABAC算法。
    • 扩展档次(Extended Profile):主要用于网络视频直播与点播等;支持基准档次的所有特性,并支持SI和SP条带,支持数据分割以改进误码性能,支持B条带和加权预测,但不支持CABAC和场编码。

    CAVLC支援所有的H.264 profiles,CABAC则不支援Baseline以及Extended profiles。

    名词解释:

    VCL :Video Coding Layer   视频编码层

    NAL: Network Abstraction Layer  网络抽象层

    RBSP   : Raw Byte Sequence Payload,原始字节序列载荷

     MB:   宏块

    GOP: 画面组, 

    OP一般有两个数字,如M=3,N=12.M制定I帧与P帧之间的距离,N指定两个I帧之间的距离。那么现在的GOP结构是

    I BBP BBP BBP BB I

    NALU 分析

    NALU =   NAL Header  |  RBSP   

    RBSP = Slice Header | SliceData

    SliceData = flags | MB MB MB...

    帧      :有1个或多个片组,如果不采用FMO(灵活宏块排序)机制,则一帧只有一个片组

    片组  :包含1个片(slice)或多个片

    片      :slice,由宏块组成,如果不采用DP(数据分割)机制,1个片只包含1个NALU,

                   否则1个片由3个NALU组成,nal_unit_type值等于2、3、4的NALU属于同一个片

                   分片的目的是限制误码的扩撒和传输,使片间保持独立,[ [slice header] [slice data] ]

                   [slice header] 说明了片类型、属于哪个帧、参考帧等

                   [slice data] 里是整数个宏块

    宏块   :编码处理的基本单元,由多个块组成,通常宏块大小为16X16像素,分为I、B、P宏块

    块       :一个编码图像要划分成多个块才能进行处理,一个块是4X4像素

    图像解码过程是按照slice进行解码,然后按照片组将解码宏块重组成图像

  • 相关阅读:
    转《编程之美——微软技术面试心得》勘误表
    第一次 学习使用 智能指针
    test _todel
    (转 todo阅读)Android 官方博客 Android应用程序的内存分析(翻译)
    msdn snmp trap 研究可否 重入 转《Multiple Trap Registrations》
    wpbars在博客园开博客了
    创业失败的10个教训总结
    winform 的一种登录方法。
    快速建立Subversion
    (转)SQL Server 按某一字段分组取最大(小)值所在行的数据
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/11571011.html
Copyright © 2011-2022 走看看