H.264格式分析

H.264码流分析

一、H.264简介

在这里插入图片描述
H.264是国际标准化组织(ISO)和国际电信联盟(ITU)在2002年12月共同提出的继MPEG-4之后的新一代数字视频压缩格式,其具有更高的编码效率,并注重对移动和IP网络的适应,考虑信道的特点,能控制误码扩散。
H.264的功能分为两层:视频编码层(VCL, Video Coding Layer)和网络提取层(NAL, Network Abstraction Layer)。VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进NAL单元中。每个NAL单元包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组对应于视频编码的NAL头信息。RBSP的基本结构是:在原始编码数据的后面填加了结尾比特。一个bit“1”若干比特“0”,以便字节对齐。
参考资料:H.264码流结构解析

在这里插入图片描述

二、H.264结构

我们首先看下MPEG-1的数据结构分析:
在这里插入图片描述
几乎所有视频编码标准的编码结构都是基于树状的分层结构,如图像组层,图像层,片层,宏块层和块层。在以往的标准中,每一层都有头部信息描述该层中的重要信息,数据部分包含该层的数据。一旦头部信息丢失,就会导致该层及以下各层的所有数据不可用

将片层以上很少变化的系统级信息放在**序列参数集(Sequence parameter set, SPS)和图像参数集(Picture parameter set,PPS)**中传送

由于参数集中的信息大多是系统级信息,与图像具体内容不相关,因此需要在编解码端建立会话连接时进行传送或者在会话过程中以可靠的异步传送方式进行参数集更新

1、NAL

NAL( Network Abstraction Layer),网络提取层。NAL用于定义适合于任何信道传输和存储的数据格式,并提供头信息,从而为视频编码提供与外界的统一接口

  • 所有的数据都包含于NAL单元(NAL units)中,每个NAL 单元包含整数个字节的数据。
  • 如果在有效载荷中包含位错误,则在NALU的头部设置标识
  • NAL单元由一个字节的头部和有效载荷组成
  • 在包交换系统中可直接处理NAL单元
  • 在电路交换系统中通过定义一种将NAL单元变换成这种流格式的变换机制:使用符合常规视频编码标准的起始码(start code)将NAL单元封装起来,如加入StartCode 0x000001
  • 将VCL层输出的SODB(String Of Data Bits)封装成nal_unit
  • 针对不同的传送网络(电路交换|包交换),将nal_unit 封装成针对不同网络的封装格式
    在这里插入图片描述
    在这里插入图片描述

2、SPS

(1)SPS简介

SPS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。而每一帧的编码后数据所依赖的参数保存于图像参数集中。

一般情况SPS和PPS的NAL Unit通常位于整个码流的起始位置。但在某些特殊情况下,在码流中间也可能出现这两种结构,主要原因可能为:

  • 解码器需要在码流中间开始解码;
  • 编码器在编码的过程中改变了码流的参数(如图像分辨率等);

在做视频播放器时,为了让后续的解码过程可以使用SPS中包含的参数,必须对其中的数据进行解析。

(2)SPS结构分析

序列参数集语法结构说明的是某一段视频序列的编码特性

  • 首先需
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值