H.264编码

简介: H.264编码

1.为什么要对视频进行编码

      视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像,由于人眼的视觉暂留效应,当帧序列以一定的速率播放时,我们看到的就是动作连续的视频,这么多连续的图像数据如果不经过编码则数据量太大了。

2.H.264编码框架

H.264码流文件分为两层

(1)VCL(Video Coding Layer,视频编码层): 负责高效的视频内容表示,VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。

(2)NAL (Network Abstraction layer,网络提取层): 负责以网络所要求的恰当的方式对数据进行打包和传送,是传输层。I不管在本地播放还是网络播放,都要通过这一层来传输。

VCL就是被压缩编码后的原始数据

将VCL数据封装到NAL单元中,才可以用于传输和存储

3.H.264码流分析

一般H.264编码器的默认输出为:起始码+NAL单元(NALU)。起始码为:0x00000001或者0x000001

(1)NAL单元

H.264的编码视频序列包括一系列的NAL单元。

一个NAL单元=一个原始字节序列负载(RBSP)+一个对应于视频编码的NAL头文件

H.264码流NAL单元序列如图

(2)NAL Header

通过解析NAL头部,可以确定每个NAL单元的帧类型IPB帧。

l帧:帧内编码帧,关键帧,l帧可以看作一个图像经过压缩之后的产物,可以单独解码出一个完整的图像。

P:前向预测编码,记录了本帧跟之前的一个关键帧(或P)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。

B帧:双向预测编码帧,记录了本帧与前后帧的差别,解码需要参考前面一个I帧或者P帧,同时也需要后面的P帧才能解码一张完整的图像。

NAL头的组成:

NAL头由一个字节组成,如下所示:

语法:禁止位(1位)、重要性指示位(2位)、NALU类型(5位)

|0|1|2|3|4|5|6|7|

|F|NRI| Type|

NAl头信息的每一位说明如表所示

0 1~2 3~7
简称 F NRI TYPE
全称 forbidden_zero_bit nal_ref_idc nal_unit_type
中文 禁止位 重要性指示位 NALU类型
作用 当网络发现NAL单元有比特错误时,可设置该比特为1,以便接收方丢掉该单元 标志该NAL单元用于重建时的重要性,值越大,越重要,取值为00~11 1~23表示单个NAL包,24~31需要分包或者组合发送。

nal_unit_type取值的含义如下:

   

(3)原始字节序列负载(RBSP)

每个NAL单元包含一个RBSP。典型的RBSP单元序列如图

每个单元都独立的NAL单元传送。NAL单元的信息头(1字节)定义了RBSP单元的类型,NAL单元的其余部分为RBSP数据。

RBSP各部分的解释:

RBSP 描述
参数集PS 序列的全局参数
增强信息SEI 视频序列解码的增强信息
图像定界符 视频图像的边界
编码 片(Slice)的头信息和数据
数据分割 DP片层的数据,用于错误恢复解码
序列结束符 表明下一图像为IDR图像
流结束符 表明该流中已没有图像
填充数据 元数据,用于填充字节

片(Slice):

一帧图片经过 H.264 编码器之后,就被编码为一个或多个片 (slice),每片包含整数个宏块(至少一个宏块,最多包含整个图像宏块),NAL单元就是装载着这些片 (slice)的载体。

片的语法结构:片头规定了片的类型,属于哪个图像、有关的参考图像等;片的数据包含了一系列宏块和不编码数据。

4.H.264编码原理

      H.264编码的原理是通过利用帧内和帧间的相关性、运动估计、变换、量化和熵编码等技术来减小视频数据的体积,从而实现高效的视频压缩。解码器在接收到H.264编码的视频流后,通过反向过程将其还原为可视的视频序列,以实现视频的播放和显示。

目录
相关文章
|
8月前
|
存储 编解码 算法
H.264编码及AAC编码基础 1
H.264编码及AAC编码基础
81 0
|
8月前
|
存储 编解码 算法
H.264编码及AAC编码基础 3
H.264编码及AAC编码基础
108 0
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
编码和解码的未来之路
编码和解码的未来之路
|
10月前
|
存储 Java 数据安全/隐私保护
什么是编码和解码
什么是编码和解码
206 0
|
8月前
|
存储 编解码 算法
H.264编码及AAC编码基础 2
H.264编码及AAC编码基础
63 0
|
机器学习/深度学习 存储 编解码
Opus从入门到精通(八)Opus编码基础之压缩编码
莫尔斯码就是大家熟悉的电报码,它的发明为人类做出了巨大的贡献.该码采用"."和"-"来表示26个英文字母,这实质上还是二进制码(点为"0",而杠为"1"),但是它没有采用固定字长的编码方式,而是采用了常用字母用短码表示(如E用"."表示,T用"-"表示),不常用字母用长码表示(如Z用"--.."表示,j用"-..-"表示)的变长编码方式.通过对英文单词进行大量统计,找出各字母的概率,最后确定有12个字母出现概率最低,用4bit数字表示,有8个字母出现概率较低,用3bit数字表示;有4个字母出现概率较高,用2bit数字表示;有两个字母出现概率最高,用1bit表示,共26个字母.
421 0
|
编解码 算法
白话H.265/HEVC和H.264/AVC编码结构
写在前面 在信息化时代,视频技术和应用的发展,特别是高清(HD)、超高清(UHD)、多视点(MultiView)视频、VR/AR技术的兴起,海量的视频信息已如潮涌般深入到我们工作和生活的方方面面。随着5G通信技术逐渐铺开落地,移动端设备的传输数据量会进一步增加。
2474 0
|
编解码 缓存 BI
h.264码率控制
h.264的码流传输是基于目前有限的网络带宽来进行的,以目前的压缩效率来说,运动不算剧烈、细节不多的影像,在720p的情况下,1000kbps压缩损耗较少(psnr较大),能达到比较好的观赏效果,1080p则需要2000kbps。
1197 0
|
编解码
h.264 FMO
在H.264之前的标准中,比如H.263,其比特流中的数据是按照一个宏块接一个宏块的方式排列的,一旦发生丢包,很多相邻宏块信息都会丢失,很难进行错误隐藏处理。在H.264中加入了一项新特性:把宏块在比特流中的数据按照一定的映射规则进行排列,而不一定按照原本的光栅扫描顺序排列,这种方称为灵活的宏块重拍FMO(Flexible Macroblock Ordering)。
691 0