直播技术--H264的基本概念

逻辑概念-图片是如何被处理的

  • 对于输入的每一帧图片,首先将整张图片的数据划分成多个块,称之为宏块,一个宏块由16×16亮度像素和附加的一个8×8 Cb 和一个 8×8 Cr 彩色像素块组成
  • 若干个宏块组合在一起,称之为片,片存在的意义是,在处理数据的时候,片的预测是不能以其他片的数据为参考的,这样预测的误差就只会在这个片内,而不会扩散
  • 宏块有三种类型
    • I宏块:利用从当前片中已解码的像素作为参考进行帧内预测
    • P宏块:利用前面已编码图像作为参考进行帧内预测,一个帧内编码的宏块可进一步作宏块的分割,即 16×16、16×8、8×16 或 8×8 亮度像素块(以及附带的彩色像素);如果选了 8×8 的子宏块, 则可再分成各种子宏块的分割,其尺寸为 8×8、8×4、4×8 或 4×4 亮度像素块(以及附带的彩色像素)
    • B宏块:利用双向的参考图像(当前和未来的已编码图像帧)进行帧内预测

这样整个帧流的逻辑结构可以自上向下切分为如下的图


概念结构

编码器的码流结构

片是最上层的独立的数据单位,每个片必须自己携带关于所属图像的编号、大小等基本信息,这些信息在同一图像的每个片中都必须是一致的。在编码时,H.264 的规范要求将参数集、片这些独立的数据单位尽可能各自完整地放入一个分组中被传送。这样可以增强稳定性,一个片的丢失将不会影响其它片的解码,还可以通过该片前后的片来恢复该片的数据。


数据传输结构(信道为逻辑通道)

下图是一个码流中所包含的数据单位,这里的数据单位是指可以独立放入一个组传输的集合


码流中的数据单位

一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列 清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果在前一 个序列的传输中发生重大错误,如严重的丢包,或其他原因引起数据错位,在这里可以获得重新同步。IDR图像之后的图像永远不会引用IDR图像之前的图像数据来解码
IDR图像和I图像有区别,IDR图像一定是一个I图像,但是I图像不一定是IDR图像;一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考

除了参数集与片片还有其他的数据单位,这些数据单位可以提供额外的数据或同步信息

数据语法结构

  • 编码层数据VCL:这是编码处理的输出,表示被压缩编码后的视频数据序列
  • 网络层数据NAL:VCL数据在被发送到网络上传输或存储之前,会先被封装进NAL单元中;一个NALU包含一组对应于视频编码的NALU头部信息和一个原始字节序列负荷(RBSP)


    NAL单元序列
NALU结构
  • 一个NALU定义了可用于基于包和基于比特流系统的基本格式,区别这两种格式的方法在于每个比特流传输层都有一个起始代码
  • 一个NALU单元结构上是一个包含一定语法元素的可变长字节字符串,例如NALU可以携带一个编码片,ABC型数据分割或一个序列或图像参数集
  • 每个NAL单元由一个字节的头和一个包含可变场编码符号的字符串组成
NALU头
NALU头

头部包含三个定长比特区,NALU类型(T)、NAL-REFERENCE-IDC(R)和隐藏比特位(F)

  • T用5bit来表示32中不同类型特征,1-12是H264定义的,24-31是用于H264意外的,RTP负荷规范使用这些其中的一些值来定义包聚合和氛围,其他值为H264保留
  • R比特用于在重构过程中标记一个NAL单元的重要,0表示这个NAL单元没有用于预测,高于0表示NAL单元要用于无漂移重构,且值越高,对NAL单元丢失的影响越大
  • 隐藏比特位在H264中默认是0,当网络识别到单元中存在比特错误时,可以将其设置为1,如当一个NAL单元在通过网关时,校验和检测失败,网关可以选择从NAL流中去掉这个NAL单元,也可以把已知被破坏的NAL单元传给接收端,在这种情况下,智能的解码器将常识重构这个NAL单元,而非智能的解码器则直接简单地抛弃这个NAL单元
RBSP单元的类型

NAL单元的头信息定义了RBSP单元的类型


RBSP类型描述
  • 序列参数集SPS包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数、解码图像尺寸和帧场编码模式选择标识等等
  • 图像参数集PPS对应的是一个序列中某一副图像或几幅图像,其参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组书目、初始量化参数和去方块滤波洗漱调整标识等等
  • 通常,SPS和PPS在片头信息和数据解码前传送至解码器。每个片的头信息对应一个pic_parameter_set_id,PPS被其激活后一直有效到下一个PPS被激活;类似的,每个SPS对应一个seq_parameter_set_id,SPS被激活后将一直有效到下一个SPS被激活
  • 参数集机制讲一些重要的、改变少的序列参数和图像参数与编码片分离,并在编码片之前传送至解码端,或者通过其他机制传输
单元解码过程
  • 在进行NAL单元解码过程之前,首先通过RTP协议解析(采用RTP封装),或者通过起始码检测(采用比特流方式),从传输码流中获取NAL单元数据
  • 从NAL单元中提取出RBSP语法结构,按照下图的流程处理RBSP语法结构
  • 对于NAL单元的解码过程,其输入时NAL单元,输出结果是经过解码的当前图像的样点值


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

推荐阅读更多精彩内容