iOS开发攻城狮的集散地iOS直播视频OpenGL

音视频学习从零到整-- H264码流结构

2019-02-23  本文已影响0人  CC老师_HelloCoder

音视频学习从零到整(1)
音视频学习从零到整(2)
音视频学习从零到整(3)
音视频学习从零到整(4)
音视频学习从零到整(5)
音视频学习从零到整(6)
音视频学习从零到整(7)

一.H264结构图

H264结构图

H264视频压缩后会成为一个序列帧.帧里包含图像,图像分为很多片.每个片可以分为宏块.每个宏块由许多子块组成.这就是H264结构图.非常的情绪简单.

H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成,一个宏块由16x16的yuv数据组成。宏块作为H264编码的基本单位

二. H264编码分层

H264编码分层,分为了2层.

三.码流的基本概念

每个NAL前有一个起始码 0x00 00 01(或者0x00 00 00 01),解码器检测每个起始码,作为一个NAL的起始标识,当检测到下一个起始码时,当前NAL结束。
同时H.264规定,当检测到0x00 00 01时,也可以表征当前NAL的结束。那么NAL中数据出现0x000001或0x000000时怎么办?H.264引入了防止竞争机制,如果编码器检测到NAL数据存在0x000001或0x000000时,编码器会在最后个字节前插入一个新的字节0x03,这样:
解码器检测到0x000003时,把03抛弃,恢复原始数据(脱壳操作)。解码器在解码时,首先逐个字节读取NAL的数据,统计NAL的长度,然后再开始解码。

四. 详解NAL Unit

NAL Unit

NAL 单元是由一个NALU头部+一个切片.切片又可以细分成"切片头+切片数据".我们之间了解过一个H254的帧是由多个切片构成的.因为一帧数据一次有可能传不完.

切片与宏块的关系(Slice & MacroBlock)

切片与宏块的关系

每个切片都包括切片头+切片数据. 那每个切片数据包括了很多宏块.每个宏块包括了宏块的类型,宏块的预测,残差数据.

图解H264切片

在一副压缩的H264的帧里,可以包含多个切片.至少有一个切换.


图解H264切片

H264码流分层结构图.

H264码流分层结构图

这个图比较重要.大家可以多看看.

上一篇下一篇

猜你喜欢

热点阅读