音视频数据处理(一)-H264/AVC视频码流分析

一、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.png

如上图所示,我们可以清晰的看到在H264码流中,是以“0x00 0x00 0x00 0x01”为开始码的,找到开始码后,后面的一个字节表示NALU Header,上图所示分别标注了SPS、PPS、IDR类型。

结语

本文主要从数据处理的角度对H264视频码流数据进行了分析,这也是音视频数据处理的基础,后续会针对音视频开发技术进行详细的介绍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容