基于IP的H.264关键技术

一、 引言
H.264是ITU-T最新的视频编码标准,被称作ISO/IEC14496-10或MPEG-4 AVC,是由运动图像专家组(MPEG)和ITU的视频编码专家组共同开发的新产品。H.264分两层结构,包括视频编码层和网络适配层。视频编码层处理的是块、宏块和片的数据,并尽量做到与网络层独立,这是视频编码的核心,其中包含许多实现错误恢复的工具;网络适配层处理的是片结构以上的数据,使H.264能够在基于RTP/UDP/IP、H.323/M、MPEG-2传输和H.320协议的网络中使用。
二、 IP网络对视频压缩的限制
  1. H.264的应用场合   < type="text/javascript"> < type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 
  在讨论基于IP的H.264之前,有必要先阐述一下H.264与IP网络有关的应用场合及其对传输和编解码器的要求。下面介绍对话应用、下载服务和流媒体应用三种场合。
  对话应用,比如像视频电话和视频会议,有严格的时延限制,要求端到端时延小于1s,最好小于100ms。编解码器的参数能实时调整,错误恢复机制要根据实际网络变化而改变。编解码的复杂度不能很高,比如双向预测的模式就不能被采用。
  下载服务,可使用可靠的传输协议如FTP和HTTP将数据全部传输。由于这种应用的非实时性,编码器可以通过优化进行高效编码,而且对时延和错误恢复机制没有要求。
  流媒体服务应用,对时延要求介于上面两者之间,初始化时延是10s以内。与实时编码相比对时延要求降低,编码器可以进行优化实现高效编码(比如双向预测)。然而通常流媒体服务使用不可靠的传输协议,所以编码时要进行差错控制并进行信道纠错编码。
  本文主要讨论对话应用和流媒体应用,这两种应用基于IP网络。IP网络又可分为三种类型:不可控IP网络(如Internet)、可控IP网络(广域网)和无线IP网络(如3G网络)。这三种IP网络有不同的最大传输单元尺寸(MTUsize)、比特出错概率和TCP使用标记。最大传输单元尺寸是网络层最大的分组长度,H.264编码时要使片的长度小于MTU尺寸,这样可避免在网络层再进行一次数据的分割。两个IP节点之间的MTU尺寸是动态变化的,通常假定有线IP网络的MTU尺寸是1.5千字节,无线网络的MTU尺寸是100字节。可见要适用于无线网络的H.264必须采用数据分割技术使得片的长度小于MTU尺寸。TCP传输控制协议能够解决网络拥塞引起的分组丢失问题,而在无线网络中,分组丢失是由于链路层错误引起的,TCP并非很好的解决办法,要采用差错控制协议。
  2. H.264使用的协议环境
  对话应用和流媒体应用使用同一协议组,下面进行讨论。
  网络层协议:使用IP(网际协议)。每个IP分组单独从发方出发,经过一系列的路由器到达收方。IP将大于MTU尺寸的分组进行数据分割、重组。每个分组的传输时间都有所不同。IP头20个字节由校验码来保证,但数据没有保护。IP分组最大值为64千字节,但由于MTU尺寸的限制,一般没有这么大。
  传输层协议:主要有两个协议,TCP和UDP。TCP提供面向字节的可靠传输服务,以重传和超时等机制作为差错控制的基础。由于对时延的不可预测,并不适用于实时通信传输。UDP提供不可靠的数据报传输业务。UDP头包含的校验数(8字节)可以发现和去掉含有比特错误的分组。UDP允许分组传输过程中出现丢失、复制、改序等。使用UDP协议时,高层必须使用错误恢复协议。
  应用层传输协议:使用RTP(实时传输协议)。该协议和IP/UDP结合使用,是面向会话的协议。每个RTP分组包含RTP头标,载荷头标(可选)和载荷本身。RTP头标的内容见图1,基本选项占用12字节,标记位标记有同一时间戳的一组分组的结束。RTP协议使发送方将数据分为大小合理的分组,并将解码方观察到的网络特征反馈给发送方,使发送方可以动态调整比特率和抗误码机制。RTP分组和RTP载荷规范在第四部分讨论。
应用层控制协议:有H.245协议、SIP和SDP,或RTSP。这些协议可以实现流媒体的控制,收发方的协商和控制动态会话层。
三、H.264的错误恢复工具
  错误恢复的工具随着视频压缩编码技术的提高在不断改进。旧的标准(H.261、H263、MPEG-2的第二部分)中,使用片和宏块组的划分、帧内编码宏块、帧内编码片和帧内编码图像来防止错误的扩散。之后改进的标准(H.263+、MPEG-4)中,使用多帧参考和数据分割技术来恢复错误。H.264标准在以前的基础上提出了三种关键技术:(1)参数集合,(2) 灵活的宏块次序(FMO),(3)冗余片(RS)来进行错误的恢复。
  1. 帧内编码
  H.264中帧内编码的技术和以前标准一样,值得注意的是:
  (1)H.264中的帧内预测编码宏块的参考宏块可以是帧间编码宏块,帧内预测宏块并不像H.263中的帧内编码一样,而采用预测的帧内编码比非预测的帧内编码有更好的编码效率,但减少了帧内编码的重同步性能,可以通过设置限制帧内预测标记来恢复这一性能。
  (2)只包含帧内宏块的片有两种,一种是帧内片(Islice),一种是立即刷新片(IDRslice),立即刷新片必存在于立即刷新图像(IDRpicture)中。与短期参考图像相比,立即刷新图像有更强壮的重同步性能。
  在无线IP网络环境下,为了提高帧内图像的重同步性能,要采用率失真优化编码和设置限制帧内预测标记。
  2. 图像的分割
  H.264支持一幅图像划分成片,片中宏块的数目是任意的。在非FMO模式下,片中的宏块次序是同光栅扫描顺序,FMO模式下比较特殊。片的划分可以适配不同的MTU尺寸,也可以用来交织分组打包。
  3. 参考图像选择
  参考图像数据选择,不论是基于宏块、基于片,还是基于帧,都是错误恢复的有效工具。对于有反馈的系统,编码器获得传输中丢失图像区域的信息后,参考图像可以选择解码已经正确接收的图像对应的原图像区域作参考。在没有反馈的系统中,将会使用冗余的编码来增加错误恢复性能。
  4. 数据的划分
  通常情况下,一个宏块的数据是存放在一起而组成片的,数据划分使得一个片中的宏块数据重新组合,把宏块语义相关的数据组成一个划分,由划分来组装片。在H.264中有三种不同的数据划分。 (1)头信息划分:包含片中宏块的类型,量化参数和运动矢量,是片中最重要的信息。 (2)帧内信息划分:包含帧内CBPs和帧内系数,帧内信息可以阻止错误的蔓延。 (3)帧间信息划分:包含帧间CBPs和帧间系数,通常比前两个划分要大得多。
  帧内信息划分结合头信息解出帧内宏块,帧间信息划分结合头信息解出帧间宏块。帧间信息划分的重要性最低,对重同步没有贡献。当使用数据划分时,片中的数据根据其类型被保存到不同的缓存,同时片的大小也要调整,使得片中最大的划分小于MTU尺寸。
  解码端若获得所有的划分,就可以完整重构片;解码端若发现帧内信息或帧间信息划分丢失,可用的头信息仍然有很好的错误恢复性能。这是因为宏块类型和宏块的运动矢量含有宏块的基本特征。
  5. 参数集的使用
  序列的参数集(SPS)包括了一个图像序列的所有信息,图像的参数集(PPS)包括了一个图像所有片的信息。多个不同的序列和图像参数集经排序存放在解码器。编码器参考序列参数集设置图像参数集,依据每一个已编码片的片头的存储地址选择合适的图像参数集来使用。对序列的参数和图像的参数进行重点保护才能很好地增强H.264错误恢复性能。
  在差错信道中使用参数集的关键是保证参数集及时、可靠地到达解码端。例如,在实时信道中,编码器用可靠控制协议及早将他们以带外传输的方式发送,使控制协议能够在引用新参数的第一个片到达之前把它们发给解码器;另外一个办法就是使用应用层保护,重发多个备份文件,确保至少有一个备份数据到达解码端;第三个办法就是在编解码器的硬件中固化参数集设置。
  6. 灵活的宏块次序(FMO)
  灵活的宏块次序是H.264的一大特色,通过设置宏块次序映射表(MBAmap)来任意地指配宏块到不同的片组,FMO模式打乱了原宏块顺序,降低了编码效率,增加了时延,但增强了抗误码性能。FMO模式划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。当然FMO模式也可以使一帧中的宏块顺序分割,使得分割后的片的大小小于无线网络的MTU尺寸。经过FMO模式分割后的图像数据分开进行传输,以棋盘模式为例,当一个片组的数据丢失时可用另一个片组的数据(包含丢失宏块的相邻宏块信息)进行错误掩盖。实验数据显示,当丢失率为(视频会议应用时)10%时,经错误掩盖后的图像仍然有很高的质量。
  7. 冗余片方法
前边提到了当使用无反馈的系统时,就不能使用参考帧选择的方法来进行错误恢复,应该在编码时增加冗余的片来增强抗误码性能。要注意的是这些冗余片的编码参数与非冗余片的编码参数不同,也就是用一个模糊的冗余片附加在一个清晰的片之后。在解码时先解清晰的片,如果其可用就丢弃冗余片;否则使用冗余模糊片来重构图像。
 
四、H.264中实时传输协议(RTP)
  1. RTP载荷规范
  在第二部分已经对H.264的网络协议环境作了阐述,这里要详细讨论RTP的载荷规范和抗误码性能。RTP通过发送冗余信息来减少接收端的丢包率,会增加时延,与冗余片不同的是它增加的冗余信息是个别重点信息的备份,适合于应用层的非等重保护。下边阐述与多媒体传输有关的3个规范。
  (1)分组复制多次重发,发送端对最重要的比特信息分组进行复制重发,使得保证接收端能至少正确接收到一次,同时接收端要丢弃已经正确接收的分组的多余备份。
  (2)基于分组的前向纠错,对被保护的分组进行异或运算,将运算结果作为冗余信息发送到接收方。由于时延,不用于对话型应用,可用于流媒体。
  (3)音频冗余编码,可保护包括视频在内的任何数据流。每个分组由头标、载荷以及前一分组的载荷组成,H.264中可与数据分割一起使用。
  2. H.264 NAL单元的概念
  H.264 NAL单元对编码数据进行打包,NAL单元由1字节的头,3个定长的字段和一个字节数不定的编码段组成。
  头标的语法:NALU类型(5bit)、重要性指示位(2bit)、禁止位(1bit)。
  NALU类型:1~12由H.264使用,24~31由H.264以外的应用使用。
  重要性指示:标志该NAL单元用于重建时的重要性,值越大,越重要。
  禁止位:网络发现NAL单元有比特错误时可设置该比特为1,以便接收方丢掉该单元。
  3. 分组打包的规则
  (1)额外开销要少,使MTU尺寸在100~64k字节范围都可以;
  (2)不用对分组内的数据解码就可以判别该分组的重要性;
  (3)载荷规范应当保证不用解码就可识别由于其他的比特丢失而造成的分组不可解码;
  (4)支持将NALU分割成多个RTP分组;
  (5)支持将多个NALU汇集在一个RTP分组中。
  RTP的头标可以是NALU的头标,并可以实现以上的打包规则。
  4. 简单打包
  一个RTP分组里放入一个NALU,将NALU(包括同时作为载荷头标的NALU头)放入RTP的载荷中,设置RTP头标值。为了避免IP层对大分组的再一次分割,片分组的大小一般都要小于MTU尺寸。由于包传送的路径不同,解码端要重新对片分组排序,RTP包含的次序信息可以用来解决这一问题。
  5. NALU分割
  对于预先已经编码的内容,NALU可能大于MTU尺寸的限制。虽然IP层的分割可以使数据块小于64千字节,但无法在应用层实现保护,从而降低了非等重保护方案的效果。由于UDP数据包小于64千字节,而且一个片的长度对某些应用场合来说太小,所以应用层打包是RTP打包方案的一部分。
  新的讨论方案(IETF)应当符合以下特征:
  (1)NALU的分块以按RTP次序号升序传输;
  (2)能够标记第一个和最后一个NALU分块;
  (3)可以检测丢失的分块。
  6. NALU合并
  一些NALU如SEI、参数集等非常小,将它们合并在一起有利于减少头标开销。已有两种集合分组:
  (1)单一时间集合分组(STAP),按时间戳进行组合;
(2)多时间集合分组(MTAP),不同时间戳也可以组合。
五、结束语
  本文重点讲述了在IP网络的限制条件下H.264进行错误恢复的几种有力工具,但在不同的IP网络中要组合使用各种工具才能实现高效率编码和传输。因为目前无线网络对MTU尺寸和时延的限制,所以错误恢复工具可以结合使用图像的分割、数据的划分和RTP分组技术,避免使用冗余信息和反馈来提高错误恢复性能;另外高效率的FMO编码模式可以大大提高编码的抗分组丢失性能。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fengyv/archive/2006/05/09/714972.aspx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“光伏进社区” 应及早谋划布局

所谓“光伏进社区”就是全国城乡居民家庭大批量的利用家庭光伏系统&#xff0c;甚至出现光伏的社区化联网交换、合作等更深入的活动。虽然“光伏进社区”还有很长的路要走&#xff0c;但“光伏进社区”的各种经济、技术、社会条件正越来越向有利方向发展。 城乡居民集聚社区是光…

python中的装饰器和抽象类

装饰器和抽象类 装饰器就是对函数或者方法或者类进行修饰 #第一步&#xff1a;创建一个普通函数 def laxi():print(噗哧噗哧噗哧噗哧&#xff5e;&#xff5e;&#xff5e;)#调用函数 laxi() laxi()#第二步&#xff1a;扩展函数的功能(不是装饰器) #声明一个扩展函数 def deco…

eigen库安装_OpenCV+Eigen上位机程序移植(七十一)

1、给硬盘分区现在小伙伴们对于给电脑硬盘分区想必比较头疼&#xff0c;给电脑硬盘分区分为两种情况&#xff0c;一是在安装系统之前给系统硬盘分区&#xff0c;二是在安装系统之后给硬盘分区&#xff0c;我们现在购买的品牌机和笔记本的用户比较多&#xff0c;而且笔记本和品牌…

【实战操作】使用FFmpeg将一个视频文件中音频合成到另一个视频中 只需三秒

直接进入主题 主要参数&#xff1a; -i——设置输入文件名。-f——设置输出格式。-y——若输出文件已存在时则覆盖文件。-fs——超过指定的文件大小时则结束转换。-t——指定输出文件的持续时间&#xff0c;以秒为单位。-ss——从指定时间开始转换&#xff0c;以秒为单位。-t从…

苹果依旧强大 物联网领域举足轻重

近几天科技界最火爆的话题就是苹果和谷歌两家公司&#xff0c;一是苹果发布财报&#xff0c;二是谷歌人工智能围棋战胜欧洲冠军以及谷歌母公司Alphabet或将超越苹果&#xff0c;成为世界上市值最大的公司。而在我眼里&#xff0c;未来五年内依然属于苹果。回顾下苹果公司公布的…

linux之SQL语句简明教程---SUBSTRING

SQL 中的 substring 函数是用来抓出一个栏位资料中的当中一部分。这个函数的名称在不同的资料库中不全然一样&#xff1a; MySQL: SUBSTR( ), SUBSTRING( )Oracle: SUBSTR( )SQL Server: SUBSTRING( )最经常使用到的方式例如以下 (在这里我们用 SUBSTR( ) 为例)&#xff1a; SU…

H.264/AVC技术进展及其务实发展策略思考

随着NGN、3G及3G演进和NGBW等对视频、多媒体业务与网络应用的飞速发展需求&#xff0c;作为视频业务及存储应用核心技术的高效率 视频数字压缩编(译码)技术&#xff0c;愈来愈引起人们的关注&#xff0c;成为目前广播、视频与多媒体通信领域中的亮点与热点。制定视频编码标准的…

python中错误和异常处理

错误和异常处理 在python中一共有2种错误&#xff1a;一种是语法错误&#xff0c;另外一种是异常。 语法错误 语法错误也叫做解析错误&#xff0c;是指python无法正确的识别代码的造成的。根本原因在于人的行为&#xff1a;手残&#xff0c;脑残和眼残的行为。 解决方法&#x…

listview 每行后面的小箭头_主卧带小衣帽装修,这几个装修方案,你喜欢哪个?...

南京装修交流圈 - 知乎​www.zhihu.com现在大部分人购买的房子面积还是普遍偏小的&#xff0c;每行每业都有自己的服装讲究&#xff0c;不同的场地、见不同的人等等。家中能有一个衣帽间自然也就是心中所向往和追求的。能够有独立的一个房间来做衣帽间当然更好&#xff0c;今天…

【养成好习惯】使用pipreqs导出本项目使用的环境

pipreqs pipreqs可以帮你找到当前项目的所有组件及其版本。就是当别人给你一个程序的时候&#xff0c;你要在自己电脑上运行起来&#xff0c;就需要安装程序所依赖的组件&#xff0c;总不能自己一个一个找吧。 # 安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simpl…

开放医疗交通大数据技术 服务于公共便民领域

孙丕恕还建议&#xff0c;交通拥堵的数据也可以开放&#xff0c;孙丕恕介绍&#xff0c;目前已有导航软件有部分数据&#xff0c;但还有些滞后&#xff0c;如果能够做到实时更新数据&#xff0c;那么也可以为出行者避开拥堵&#xff0c;节约时间。此外&#xff0c;如果二手车的…

Nagios_在不同平台下的安装

Nagios 是一款开源的免费网络监视工具&#xff0c;致力于打造符合行业标准的 IT 基础架构的监控系统。Nagios 提供了服务器、网络和应用的完整的 IT 监控和报警&#xff0c;可以有效监控 Windows、Linux 和 Unix 的主机状态&#xff0c;以及交换机、路由器、打印机等网络设备。…

python中的模块和包

模块和包 一个模块就是一个包含python代码的文件。一个文件就是一个模块 为什么要使用模块 1.现在程序开发文件比较大&#xff0c;都放在一个文件中维护不方便&#xff0c;拆分成多个文件方便维护与管理 2.模块可以增加代码的重用率 3.模块可以当作命名空间如何定义自己的模块 …

2005年全球H.264编解码器荟萃

2005年全球H.264编解码器荟萃videosky.9126.com Peter Lee 2005-0920【摘要】H.264/AVC作为最新的视频编码标准&#xff0c;研究领域和产业界都非常看好该标准。尤其是产业界&#xff0c;针对H.264的软硬件编解码器可谓是百花齐放、百家争鸣。本文中&#xff0c;笔者对2005年全…

【Tensorflow】基于卷积神经网络实现车牌的识别

引言&#xff1a; 过去几周我一直在涉足深度学习领域&#xff0c;尤其是卷积神经网络模型。最近&#xff0c;谷歌围绕街景多位数字识别技术发布了一篇不错的paper。该文章描述了一个用于提取街景门牌号的单个端到端神经网络系统。然后&#xff0c;作者阐述了基于同样的网络结构…

脚本启动显示查询频繁被服务器防御_面对CC攻击,该如何进行防御

网站被攻击是一件十分让人恼火的事情&#xff0c;不仅仅是让网站速度变慢、访问异常&#xff0c;导致用户体验变差&#xff0c;用户大量流失&#xff0c;而且还会导致网站关键词排名下降甚至被降权&#xff0c;极大干扰了网站的正常稳定运行。那面对CC攻击&#xff0c;该如何进…

面对SDN/NFV部署挑战 网络厂商能做什么?

近年来&#xff0c;随着云计算的不断发展&#xff0c;网络虚拟化受到广泛关注&#xff0c;而作为网络虚拟化的实现方式&#xff0c;SDN自诞生之日起就担负着网络变革的使命。那么&#xff0c;SDN技术的驱动力是什么&#xff1f;SDN在引入现网的过程中&#xff0c;如何实现平滑无…

python中的tkinter模块

tkinter介绍 tkinter是python自带的GUI库&#xff0c;是对图形库TK的封装 tkinter是一个跨平台的GUI库&#xff0c;开发的程序可以在win&#xff0c;linux或者mac下运行 除此之外还存在很多图形库&#xff0c;例如 pythonWin 仅适合window的界面编程库 wxPython 第三方界面编…

PAT甲题题解-1011. World Cup Betting (20)-误导人的水题。。。

题目不严谨啊啊啊啊式子算出来结果是37.975样例输出的是37.98我以为是四舍五入的啊啊啊&#xff0c;所以最后输出的是sum0.005结果告诉我全部错误啊结果直接保留两位小数就可以了啊啊啊啊 水题也不要这么坑人啊啊啊啊 #include <iostream> #include <algorithm> #i…

【Django】文件上传以及celery的使用

上传文件、异步、初始化脚本 面试题&#xff1a; 项目中的静态文件处理&#xff08;JS/CSS/image&#xff09; 自己在机房内优化的方法&#xff1a;1. Nginx/lighttpd(lighty-douban)&#xff1a;Nginx 处理静态资源速度非常快&#xff0c;并且自身还带有缓存。2. 80: Nginx -&…