【转载】视频编码(H264概述)

视频编码介绍

1.1 视频压缩编码的目标

1)保证压缩比例

2)保证恢复的质量

3)易实现,低成本,可靠性

1.2 压缩的出发点(可行性)

1)时间相关性

在一组视频序列中,相邻相邻两帧只有极少的不同之处,这便是时间相关性。

2)空间相关性

在同一帧中,相邻象素之间有很大的相关性,两象素越近,侧相关性越强。

根据采用的信源的模型分类:

1)基于波形的编码

如果采用“一幅图像由许多象素构成”的信源模型,这种信源模型的参数就是象素的亮度和色度的幅度值,对这些参数进行编码的技术即为基于波形编码。

2)基于内容的编码

如果采用一个分量有几个物体构成的信源模型,这种信源模型的参数事各个物体的形状,纹理,运动,对这些参数进行编码的技术就是基于内容的编码。

h264应用可分为3个级别:

1)基本档次:(简单版本, 应用面广 , 支持帧内和帧间编码,基于可变程度的熵编码.)

应用领域:视频会话,会议电视, 无线通信等实时通信.

2)主要档次:(采用了多项提高图像质量和增加压缩比的技术措施, 支持隔行视频, 支持基于上下文的自适应的算术编码.)

应用领域:  数字广播与数字视频存储

3)扩展档次: 应用领域: 可用于各种网络的视频流传输,视频点播

4)高清档次:

视频编码的原理

2.1 一个图像或者一个视频序列进行压缩,产生码流。

对图像的处理即是:帧内预测编码

其预测值P,是由已编码的图像做参考,经运动补偿得到的。预测图像P和当前帧Fn相减,得到两图像的残差值Dn,Dn在经过转换T,量化Q,去处空间冗余,得到系数X,将X重排(使数据更加紧凑),熵编码(加入运动矢量。。。一些图像相关得信息),得到nal数据。

对视频序列的处理:帧间预测编码

预测值P,是由当前片中,己编码的宏块预测得到的(亮度4×4或者16×16预测,色度8×8预测)。当前待处理的块,减去预测值P,得残差值Dn,Dn在经过转换T,量化Q,得到系数X,将X重排(使数据更加紧凑),熵编码,得到nal数据

2.2 场 、帧、图像

场:隔行扫描的图像,偶数行成为顶场行。奇数行成为底场行。

所有顶场行称为顶场。所有底场行称为底场.

帧:逐行扫描的图像

图像:场和帧都可认为是图像.

2.3宏块、片

宏块(MB:一个宏块由一个16×16亮度块、一个8×8Cb和一个8×8Cr组成

片(slice:一个图像可以划分成一个或多个片,一个片由一个或多个宏块组成。

H264结构和应用

H.264从框架结构上将NAL与VCL分离,主要有两个目的:

其一,可以定义VCL视频压缩处理与NAL网络传输机制的接口,这样允许视频编码层VCL的设计可以在不同的处理器平台进行移植,而与NAL层的数据封装格式无关;
     
其二,VCL和NAL都被设计成工作于不同的传输环境,异构的网络环境并不需要对VCL比特流进行重构和重编码。

3.1
H264的编码格式

h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)

VCL功能是进行视频编解码,包括运动补偿预测,变换编码和熵编码等功能;

NAL用于采用适当的格式对VCL视频数据进行封装打包

1)VCL数据即被压缩编码后的视频数据序列。

在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。

2)NAL单元格式

NAL单元由1字节的头,3个定长的字段和一个字节数不定的编码段组成。

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

NALU类型:1~12由H.264使用,24~31由H.264以外的应用使用。

重要性指示:标志该NAL单元用于重建时的重要性,值越大,越重要。

禁止位:网络发现NAL单元有比特错误时可设置该比特为1,以便接收方丢掉该单元


Nal头


Rbsp


Nal头


Rbsp


Nal头


Rbsp

1NAL
Units
视频数据封装在整数字节的NALU中,它的第一个字节标志该单元中数据的类型。H.264定义了两种封装格式。基于包交换的网络(如H.323系统)可以使用RTP封装格式封装NALU。而另外一些系统可能要求将NALU作为顺序比特流传送,为此H.264定义了一种比特流格式的传输机制,使用start_code_prefix将NALU封装起来,从而确定NAL边界。

2)参数集:以往视频编解码标准中GOB\GOP\图像等头信息是至关重要的,包含这些信息的包的丢失常导致与这些信息相关的图像不能解码。为此H.264将这些很少变化并且对大量VCL NALU起作用的信息放在参数集中传送。参数集分为两种,即序列参数集和图像参数集。为适应多种网络环境,参数集可以带内传送,也可以采用带外方式传送。

序列的参数集(SPS):包括了一个图像序列的所有信息,

图像的参数集(PPS):包括了一个图像所有片的信息。

3.2 H264的网络传输

H.264能够在基于RTP/UDP/IP、H.323/M、MPEG-2传输和H.320协议的网络中使用

H.264的RTP封装参考RFC 3550,载荷类型(PT)域未作规定

3.3数据的划分

通常情况下,一个宏块的数据是存放在一起而组成片的,数据划分使得一个片中的宏块数据重新组合,把宏块语义相关的数据组成一个划分,由划分来组装片。在H.264中有三种不同的数据划分。

(1)头信息划分:包含片中宏块的类型,量化参数和运动矢量,是片中最重要的信息。

(2)帧内信息划分:包含帧内CBPs和帧内系数,帧内信息可以阻止错误的蔓延。

(3)帧间信息划分:包含帧间CBPs和帧间系数,通常比前两个划分要大得多。

帧内信息划分结合头信息解出帧内宏块,帧间信息划分结合头信息解出帧间宏块。帧间信息划分的重要性最低,对重同步没有贡献。当使用数据划分时,片中的数据根据其类型被保存到不同的缓存,同时片的大小也要调整,使得片中最大的划分小于MTU尺寸。

解码端若获得所有的划分,就可以完整重构片;解码端若发现帧内信息或帧间信息划分丢失,可用的头信息仍然有很好的错误恢复性能。这是因为宏块类型和宏块的运动矢量含有宏块的基本特征。

3.4灵活的宏块次序(FMO)

通过设置宏块次序映射表(MBAmap)来任意地指配宏块到不同的片组,FMO模式打乱了原宏块顺序,降低了编码效率,增加了时延,但增强了抗误码性能。FMO模式划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。当然FMO模式也可以使一帧中的宏块顺序分割,使得分割后的片的大小小于无线网络的MTU尺寸。经过FMO模式分割后的图像数据分开进行传输,以棋盘模式为例,当一个片组的数据丢失时可用另一个片组的数据(包含丢失宏块的相邻宏块信息)进行错误掩盖。实验数据显示,当丢失率为(视频会议应用时)10%时,经错误掩盖后的图像仍然有很高的质量。


H264
的网络传输

NAL支持众多基于包的有线/无线通信网络,诸如H.320、MPEG-2和RTP/IP等。但目前,绝大部分的视频应用所采用的网络协议层次是RTP/UDP/IP,因此在下面的描述中主要基于这个传输框架。下面首先分析NAL层的基本处理单元NALU以及它的网络封装、分割和合并的方法。

4.1. NAL单元

每个NAL单元是一个一定语法元素的可变长字节字符串,包括包含一个字节的头信息(用来表示数据类型),以及若干整数字节的负荷数据。一个NAL单元可以携带一个编码片、A/B/C型数据分割或一个序列或图像参数集。

NAL单元按RTP序列号按序传送。其中,T为负荷数据类型,占5bit;R为重要性指示位,占2个bit;最后的F为禁止位,占1bit。具体如下:

(1)NALU类型位

可以表示NALU的32种不同类型特征,类型1~12是H.264定义的,类型24~31是用于H.264以外的,RTP负荷规范使用这其中的一些值来定义包聚合和分裂,其他值为H.264保留。

(2)重要性指示位

用于在重构过程中标记一个NAL单元的重要性,值越大,越重要。值为0表示这个NAL单元没有用于预测,因此可被解码器抛弃而不会有错误扩散;值高于0表示此NAL单元要用于无漂移重构,且值越高,对此NAL单元丢失的影响越大。

(3)禁止位

编码中默认值为0,当网络识别此单元中存在比特错误时,可将其设为1,以便接收方丢掉该单元,主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。例如对于从无线到有线的网关,一边是无线的非IP环境,一边是有线网络的无比特错误的环境。假设一个NAL单元到达无线那边时,校验和检测失败,网关可以选择从NAL流中去掉这个NAL单元,也可以把已知被破坏的NAL单元前传给接收端。在这种情况下,智能的解码器将尝试重构这个NAL单元(已知它可能包含比特错误)。而非智能的解码器将简单地抛弃这个NAL单元。NAL单元结构规定了用于面向分组或用于流的传输子系统的通用格式。在H.320和MPEG-2系统中,NAL单元的流应该在NAL单元边界内,每个NAL单元前加一个3字节的起始前缀码。在分组传输系统中,NAL单元由系统的传输规程确定帧界,因此不需要上述的起始前缀码。一组NAL单元被称为一个接入单元,定界后加上定时信息(SEI),形成基本编码图像。该基本编码图像(PCP)由一组已编码的NAL单元组成,其后是冗余编码图像(RCP),它是PCP同一视频图像的冗余表示,用于解码中PCP丢失情况下恢复信息。如果该编码视频图像是编码视频序列的最后一幅图像,应出现序列NAL单元的end,表示该序列结束。一个图像序列只有一个序列参数组,并被独立解码。如果该编码图像是整个NAL单元流的最后一幅图像,则应出现流的end。

H.264采用上述严格的接入单元,不仅使H.264可自适应于多种网络,而且进一步提高其抗误码能力。序列号的设置可发现丢的是哪一个VCL单元,冗余编码图像使得即使基本编码图像丢失,仍可得到较“粗糙”的图像。

4.2.
H.264中的RTP

上面阐述了NAL单元的结构和实现,这里要详细讨论RTP的载荷规范和抗误码性能。RTP可通过发送冗余信息来减少接收端的丢包率,会增加时延,与冗余片不同的是它增加的冗余信息是个别重点信息的备份,适合于非平等保护机制。相应的多媒体传输规范有:

(1)分组复制多次重发,发送端对最重要的比特信息分组进行复制重发,使得保证接收端能至少正确接收到一次,同时接收端要丢弃已经正确接收的分组的多余备份。

(2)基于分组的前向纠错,对被保护的分组进行异或运算,将运算结果作为冗余信息发送到接收方。由于时延,不用于对话型应用,可用于流媒体。

(3)音频冗余编码,可保护包括视频在内的任何数据流。每个分组由头标、载荷以及前一分组的载荷组成,H.264中可与数据分割一起使用。

RTP的封装规范总结如下:

(1)额外开销要少,使MTU尺寸在100~64千字节范围都可以;

(2)易于区分分组的重要性,而不必对分组内的数据解码;

(3)载荷规范应当保证不用解码就可识别由于其他比特丢失而造成的分组不可解码;

(4)支持将NALU分割成多个RTP分组;

(5)支持将多个NALU汇集在一个RTP分组中。

H.264采用了简单打包的方案,即一个RTP分组里放入一个NALU,将NALU(包括同时作为载荷头标的NALU头)放入RTP的载荷中,设置RTP头标值。理想情况下,VCL不会产生超过MTU尺寸的NAL单元,来避免IP层的分拆。在接收端,通过RTP序列信息识别复制包并丢弃,取出有效RTP包里的NAL单元。基本档次和扩展档次允许片的无序解码,这样在抖动缓存中就不必对包重新排序。在使用主档次时(不允许片的乱序),要通过RTP序列信息来对包重新排序,解码顺序号(DON)的概念现正在IETF的讨论中。

存在如下情况,例如当使用内容预编码时,编码器不了解底层网络的MTU大小,将产生许多大于MTU尺寸的NALU。这就需要涉及NALU的分割和合并。

(1)NALU的分割

虽然IP层的分割可以使数据块小于64千字节,但无法在应用层实现保护,从而降低了非平等保护方案的效果。由于UDP数据包小于64千字节,而且一个片的长度对某些应用场合来说太小,所以应用层打包是RTP打包方案的一部分。目前的拆分方案正在IETF的讨论之中,大致具有以下特点:①NALU的分块以按RTP次序号升序传输;②能够标记第一个和最后一个NALU分块;③可以检测丢失的分块。

(2)NALU的合并

一些NALU如SEI、参数集等非常小,将它们合并在一起有利于减少头标开销。现有的两种集合分组:①单一时间集合分组(STAP),按时间戳进行组合,一般用于低时延环境;②多时间集合分组(MTAP),不同时间戳也可以组合,一般用于高时延环境,比如流应用

【转载】视频编码(H264概述),布布扣,bubuko.com

时间: 2024-11-17 06:02:24

【转载】视频编码(H264概述)的相关文章

嵌入式 视频编码(H264)hi3518

这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用    摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的ITU 656 YUV格式的数字信号以帧为单位送到编码卡上的DSP和内存中.分别供视频实时预览.移动侦测处理以及编码等使用.其中编码的作用是将编码卡内存中的YUV数据送到H264编码器中,进过H.264编码产生压缩好的码流,送到主机内存中,供录像或网络传输使用.编码模块完成各个协议编码,协调 MD.VP

【转】H264视频编码级别说明profile level Encoder

版权声明:本文为博主原创文章,未经博主允许不得转载. 首先要阐明所谓的AVC其实就是H.264标准,是由ITU-T和ISO/IEC组成的联合视频组(JVT,Joint Video Team)一起开发的,ITU-T给这个标准命名为H.264(以前叫做H.26L),而ISO/IEC称它为MPEG-4 高级视频编码(Advanced Video Coding,AVC)它定位于覆盖整个视频应用领域,包括:低码率的无线应用.标准清晰度和高清晰度的电视广播应用.Internet上的视频流应用,传输高清晰度的

音视频编码基础知识

本文转载自 http://blog.csdn.net/ljzcom/article/details/7336258 ,如有需要,请移步查看. Technorati 标签: 音视频 编码 基础知识 --------------------------------分割线开始----------------------------------------------- 编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中

视频编码与封装方式详解

http://blog.csdn.net/attilax/article/details/5807047 1.    编码方式和封装格式    1 2.    视频编码标准两大系统    2 MPEG-1. 2 MPEG-2. 3 MPEG-3. 3 MPEG-4. 3 ITU-T. 4 WMV.. 4 3.    常用视频编码方式有Xvid( 4 4.    常见存储封装格式    6 5.    几种常见的转换格式设置    7 6.    无损视频编码    9 1.   编码方式和封装格

(转)视频编码标准汇总及比较

MPEG-1 类型:Audio&Video 制定者:MPEG(Moving Picture Expert Group) 所需频宽:2Mbps 特性:对动作不激烈的视频信号可获得较好的图像质量,但当动作激烈时,图像就会产生马赛克现象.它没有定义用于额外数据流进行编对码的格式,因此这种技术不能广泛推广.它主要用于家用VCD,它需要的存储空间比较大. 优点:对动作不激烈的视频信号可获得较好的图像质量. 缺点:当动作激烈时,图像就会产生马赛克现象.它没有定义用于额外数据流进行编对码的格式,因此这种技术不

视频直播技术-视频-编码-传输-秒开等<转>

转载地址:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547042&idx=1&sn=26d8728548a6b5b657079eeab121e283&scene=21#wechat_redirect 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集.美颜/滤镜/特效处理.编码.封包.推流.转码.分发.解码/渲染/播放等. 视频.直播等基础知识 什么是视频?

Atitit 视频编码与动画原理attilax总结

1.1. 第一步:实现有损图像压缩和解压1 1.2. 接着将其量化,所谓量化,就是信号采样的步长,1 1.3. 第二步:实现宏块误差计算2 1.4. 那么所谓运动预测编码,其实就是P帧的生成过程3 1.5. 第五步:实现GOP生成3 要彻底理解视频编码原理,看书都是虚的,需要实际动手,实现一个简单的视频编码器: 知识准备:基本图像处理知识,信号的时域和频域问题,熟练掌握傅立叶正反变换,一维.二维傅立叶变换,以及其变种,dct变换,快速dct变换. 1.1. 第一步:实现有损图像压缩和解压 参考

几种流行的视频编码比较(入门级别)

转:http://blog.csdn.net/wcl0715/article/details/676137 目前比较流行的几种适合网络传输的视频编码有:MPEG4.H263.H264.下面简要介绍下这些编码. (1)MPEG4:MPEG-4标准主要应用于视像电话(Video Phone),视像电子邮件(Video Email)和电子新闻(Electronic News)等,其传输速率要求较低,在4800-64000bits/sec之间,分辨率为176X144.MPEG-4利用很窄的带宽,通过帧重

刨根究底字符编码之八——Unicode编码方案概述

Unicode编码方案概述 1. 前面讲过,随着计算机发展到世界各地,于是各个国家和地区各自为政,搞出了很多既兼容ASCII但又互相不兼容的各种编码方案.这样一来同一个二进制编码就有可能被解释成不同的字符,导致不同的字符集在交换数据时带来极大的不便. 比如大陆和台湾是只相隔150海里.使用着同一种语言的兄弟地区,也分别采用了不同的DBCS双字节字符集编码方案. 以前大陆地区必须装上类似于"UCDOS希望汉字系统"这样的中文处理系统专门来处理简体汉字的显示.输入问题. 而台湾地区由于采用