H264(4)---------h264码流

H264码流分为两层NAL层和VCL层。

什么是NAL层呢?

NAL英文全称Network Abstraction Layer,视频数据网络抽象层。这一层的作用是将视频数据进行封装便于在网络上进行传输。能够处理丢包,乱序等网络传输问题。在结构方面NAL层就是一个字节NAL  Header。

什么是VCL层?

VCL英文全称Video Codeing Layer,视频数据编码层。这一层就是通过帧间编码,帧内编码,无损压缩形成的真实视频数据。

VCL结构关系

图1

图1中展示了VCL的结构关系。一个视频序列是由很多编码后的视频帧数据组成的。帧可以看做是压缩的图像。一个图像(帧)可以包含很多片(slice)。实践过程中通常一个图像是由一个slice组成的,最多由两个。slice又是由一个个的宏块组成的。这个宏块是16*16, 8 *16等。宏块又可以有子宏块组成。子宏块可以是4x4  、4x8等。

一个帧分成很多slice,目的是为了便于在网络传输。

什么是SODB,RBSP,NALU?

SODB 全称String of Data Bits.原始数据比特流。按位保存的视频数据。为了压缩数据,视频数据的存储会按位存储。存储的时候就是一个位一个位紧密的排列。那么导致的问题就是不是字节(8bit)的倍数。举个例子,如果按字节存储,一个字节8位如果只用了2位,其余6位都是0,那么就造成了巨大的浪费。所以为了便于传输就按位存储了。SODB是VCL层产生的。

RBSP 全称 Raw Byte Sequence Payload. 为了便于处理数据,需要将SODB变为按字节的。为了变为字节通常就在最后一个字节进行补位,处里方式就是SODB + trailing bits

算法就是如果SODB最后一个字节不对齐,就补一个1和多个0,最后达到字节对齐。

NALU 是由一个NAL Header(1个字节) + RBSP组成的。

 

NAL UNIT

 

图2

图2标识了NAL单元。一个NALU单元包含NALU header 和 NALU Body.而NALU Body 是有RBSP组成的。RBSP是由SODB+补位(trail)组成的。SODB就是原始压缩的视频数据,其中是由slice Header和Slice Data组成的。Slice Data是由宏块组成的。宏块是由子宏块组成的。这样NAL和VCL就串起来了。

H264切片

 

图3

图3暂时一张图片是由多个slice组成,但是通常情况下一张图片是由一个slice组成。如果想理解的更清晰还是需要通过H264的分析工具来查看。

 

图4

图4我们可以看到Slice是由Slice头和Slice数据组成。而Slice数据由宏块组成。宏块包括宏块类型,宏块预测,残差值组成。每个宏块通过宏块类型和宏块预测获得预测的数据,在加上残差值进行获得原始数据。

码流分层

 

图5

保存文件在NAL Unit前面加上Start Code,就是上图的Annexb格式。如果只是了为了传输不许Start Code,就是上图的RTP格式。

 

H.264 是一次概念的革新,它打破常规,完全没有 I 帧、P帧、B 帧的概念,也没有 IDR 帧的概念。对于 H.264 中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明:
(1)、在 H.264 协议中图像是个集合概念,顶场、底场、帧都可以称为图像(本文图像概念时都是集合概念)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了。我们在 H.264 里提到的“帧”通常就是指不分场的图像;
(2)、如果不采用 FMO(灵活宏块排序) 机制,则一幅图像只有一个片组
(3)、如果不使用多个片,则一个片组只有一个片
(4)、如果不采用 DP(数据分割)机制,则一个片就是一个 NALU一个 NALU 也就是一个片

否则,一个片由 三个 NALU 组成(即标准“表7-1”中 nal_unit_type 值为 2、3、4 的三个 NALU 属于 一个片)

 

本文参考自慕课网李超老师的音视频基础课程视频。

以教为学才能更快的掌握。

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值