前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >H264_AVC 分析

H264_AVC 分析

原创
作者头像
派大星在吗
发布2021-12-18 11:07:24
2850
发布2021-12-18 11:07:24
举报
文章被收录于专栏:我的技术专刊

一、H264概述

H264是MPEG-4的第十部分,是由ITU-

T和ISO/IEC两大组织联合提出的视频编解码标准,这个标准通常被称之为H.264/AVC。H264编码是一种主流编码方式,本文主要从数据处理的角度对H264视频码流进行分析。

二、H264码流结构

H264原始码流(裸流)是由多个NAL单元组成的,具体如下图所示:

......

NALU

NALU

NALU

......

NALU单元是由什么组成的呢?NALU单元主要由三部分组成,具体如下图所示:

Start Code

NALU Header

NALU Payload

1.Start Code

Start Code,即开始码,一般为4字节或3字节,必须是“0x00 0x00 0x00 0x01”或“0x00 0x00

0x01”,用来表示一个NALU单元的开始。

2.NALU Header

NALU

Header,1个字节,由forbidden_bit(1bit),nal_reference_bit(2bits),nal_unit_type(5bits)三部分组成,具体如下图所示:

NALU Header.png

(1)forbidden_bit(1bit)

F禁止位,占用NALU Header的第一个位,值默认0,值为1时表示错误,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元。

(2)nal_reference_bit(2bits)

NRI重要性指示位,占用NALU Header的第二、三位,用来表示NAL单元的重要性,取值00~11,取值越大,表示此NAL单元越重要。

(3)nal_unit_type(5bits)

Type类型,占用NALU Header的第四到八位,用来表示NAL单元的类型,具体取值如下图所示:

nal_unit_type.png

3.NALU Payload

NALU Payload,即视频压缩数据RBSP,但是严格意义上来说,Payload数据应该是EBSP,接下来详细介绍一下H264码流数据中的相关概念。

(1)编码分层

H264编码主要分为两层:视频编码层(VCL层)和视频数据网络抽象层(NAL层),其中,VCL层对视频的原始数据进行压缩,NAL层负载将视频数据组合成NALU单元进行网络传输。

(2)码流相关概念

SODB (String Of Data Bits):原始数据比特流

由VCL层产生的的原始数据流,由于数据长度不一定是8的倍数,为方便计算机进行处理,就用到了RBSP。

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

即在SODB的后面添加了trailing bits,即一个bit 1和若干个bit 0,以便字节对齐。

EBSP (Encapsulated Byte Sequence Payload):扩展字节序列载荷

NALU单元是通过开始码“0x00 0x00 0x00 0x01”或者“0x00 0x00

0x01”来表示一个NALU单元的开始,同时H264规定,当检测到0x00 0x00

0x00时,也可以表示当前NALU的结束。那这样就会产生一个问题,就是如果在NALU的内部,出现了"0x00 0x00 0x01"或"0x00 0x00

0x00"时该怎么办?所以在h264码流中规定每有两个连续的00 00,就增加一个0x03,从而预防压缩后的数据与开始码产生冲突,防止竞争。

三、H264数据示例

利用UItraEdit工具打开一个H264文件进行数据分析,如下图所示:

如上图所示,我们可以清晰的看到在H264码流中,是以“0x00 0x00 0x00 0x01”为开始码的,找到开始码后,后面的一个字节表示NALU

Header,上图所示分别标注了SPS、PPS、IDR类型。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、H264概述
  • 二、H264码流结构
  • 三、H264数据示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档