zoukankan      html  css  js  c++  java
  • H.264---码流格式分析

    1、H.264的基本流结构

    H.264 的基本流(elementary stream,ES)的结构分为两层,包括视频编码层(VCL)和网络适配层(NAL)。视频编码层负责高效的视频内容表示,而网络适配层负责以网络所要求的恰当的方式对数据进行打包和传送。引入NAL并使之与VCL分离带来的好处包括两方面:1、使信号处理和网络传输分离,VCL 和NAL 可以在不同的处理平台上实现;2、VCL 和NAL 分离设计,使得在不同的网络环境内,网关不需要因为网络环境不同而对VCL比特流进行重构和重编码。

    ☆VCL(Video Coding Layer):VCL是对核心算法引擎,块,宏块及片的语法级别的定义,他最终输出编码完的数据 SODB

    ☆NAL(Net Abstraction Layer):NAL将SODB打包成RBSP然后加上NAL头,组成一个NALU(NAL单元)

    2、VLC层中的结构

    常见的I、B、P帧组成图像序列sequence,这里I帧和IDR帧的区别参考https://www.cnblogs.com/qing1991/p/10085696.html,一帧图片中可以有一个火多个Slice,一个Slice有多个宏块(Macro BLock) ,一个宏块包含一个亮度块和两个色度块。

    SODB :数据比特串 ---->最原始的编码数据,即VCL数据

    3、NAL层中的结构

    一个典型的NALU如下图所示

    3.1 NAL头介绍

    占一个字节,由三部分组成forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)。

    forbidden_bit:

    禁止位,默认为0,1为语法有错误

    nal_reference_bit:

     用于在重构过程中标记一个NAL单元的重要性,值越大,越重要。值为0表示这个NAL单元没有用于预测,因此可被解码器抛弃而不会有错误扩散;值高于0表示此NAL单元要用于无漂移重构,且值越高,对此NAL单元丢失的影响越大

    nal_unit_type :NAL类型。参见下表

    3.2 RBSP、EBSP

    SODB 数据比特串-->最原始的编码数据

    RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐。EBSP 扩展字节序列载荷-- >在RBSP基础上填加了仿校验字节(0X03)它的原因是: 在NALU加到Annexb上时,需要填加每组NALU之前的开始码 StartCodePrefix,如果该NALU对应的slice为一帧的开始则用4位字节表示,ox00000001,否则用3位字节表示 ox000001.为了使NALU主体中不包括与开始码相冲突的,在编码时,每遇到两个字节连续为0,就插入一个字节的0x03。解码时将0x03去掉。

     

  • 相关阅读:
    常用配色方案
    js一个典型的对象写法,推荐使用这种格式,用于处理图像的基本方法、
    jquery 插件开发分析
    理解js 的作用域链 原型链 闭包 词法分析
    根据入栈判断出栈是否合法
    动态规划之数字三角形(三种解法:递归,递推,记忆化搜索)
    memset用法详解
    刘汝佳算法竞赛入门经典中的运算符>?问题
    算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)
    自适应流体布局
  • 原文地址:https://www.cnblogs.com/qing1991/p/10085239.html
Copyright © 2011-2022 走看看