专利名称:响应于错误反馈的视频刷新自适应算法的制作方法
技术领域:
本发明涉及视频数据的编码和/或解码。
背景技术:
视频编码和压缩技术可通过减少帧序列中的视频帧之间的时间冗余且还减少视频帧内的空间冗余而实现有效压缩。视频编码和压缩技术的实例由以下各项描述=ITU-TH. 261、H. 263、运动图片专家组(MPEG) I、MPEG2和MPEG4标准,以及ITU-T H. 264标准及其对应物IS0/IEC MPEG-4第10部分(即,先进视频编码(AVC))。经巾贞内编码巾贞(intra-coded frame)是自含式的且减少视频巾贞内的空间冗余。然而,经巾贞间编码巾贞(inter-coded frame)经由来自其它经编码巾贞(例如,先前经编码巾贞)的运动补偿而进行预测以减少时间冗余。帧间编码可实现高压缩效率。然而,帧之间的帧间相依性使经帧间编码帧的经编码位流对于传播信道错误更敏感。引入于经压缩位流中的错误可导致由视频解码器所重建的视频帧中的错误。帧内编码可有助于最小化传播信道错误的可能性,因为这些帧中的视频数据的编码独立于先前或后续帧中的视频数据的编码。然而,经帧内编码帧可包含比经帧间编码帧的经编码数据多许多倍的经编码数据,且可因此引起发射带宽问题。因此,尤其在解码由实时或串流视频应用程序执行时,在经解码视频输出侧上可能存在质量降级。因此,在一些状况下,视频编码技术可仅对个别帧内的个别数据区段(例如,宏块)进行帧内编码,而不对所有帧数据进行帧内编码。经帧间编码帧(即,经预测帧(P-帧)或经双向预测帧(B-帧))内的任何给定宏块可经帧内编码为帧内宏块。类似于经帧内编码帧,经帧内编码宏块独立于来自另一(例如,先前)经编码帧的数据而经编码。迫使宏块经帧内编码的方法可称为编码器帧内刷新。
发明内容
大体来说,本发明涉及用于响应于接收到由视频解码器所提供的错误反馈而自适应地确定用于刷新视频单元(例如,帧)序列内的视频数据区段(例如,宏块)的速率的技术。此错误反馈可包含包遗失反馈,其指示视频解码器未能接收到帧序列的一个或一个以上帧内的包。
在一些状况下,错误反馈包含由视频解码器所发送的图片遗失指示(PLI)消息和/或一般否定确认(GNACK)消息。PLI消息指示属于一个或一个以上图片的未经界定量的经编码视频数据的遗失,而GNACK消息可识别已遗失的特定经编码视频数据包。可实施错误反馈算法以基于从视频解码器所接收的错误反馈而通过视频编码器来设定宏块帧内刷新速率。视频编码器可接着使用此帧内刷新速率以对帧序列的每一帧中的一个或一个以上宏块进行巾贞内编码。在一个方面中,一种方法包含从视频解码器接收指示与经编码视频数据相关联的错误的反馈;以及在接收到反馈后,便确定用于对视频单元序列内的每一视频单元的规定数目的视频数据区段进行帧内编码的速率,其中一个视频单元内的视频数据区段的帧内编码独立于序列内的其它视频单元内的视频数据区段的编码。在一个方面中,一种计算机可读媒体含有用于致使一个或一个以上处理器进行以
下操作的指令从视频解码器接收指示与经编码视频数据相关联的错误的反馈;以及在接收到反馈后,便确定用于对视频单元序列内的每一视频单元的规定数目的视频数据区段进行帧内编码的速率,其中一个视频单元内的视频数据区段的帧内编码独立于序列内的其它视频单元内的视频数据区段的编码。在一个方面中,一种装置包含存储装置和一个或一个以上处理器,所述处理器耦合到存储装置且经配置以进行以下操作从视频解码器接收指示与经编码视频数据相关联的错误的反馈;以及在接收到反馈后,便确定用于对视频单元序列内的每一视频单元的规定数目的视频数据区段进行帧内编码的速率,其中一个视频单元内的视频数据区段的帧内编码独立于序列内的其它视频单元内的视频数据区段的编码。在一个方面中,一种方法包含通过视频解码器而检测与从视频编码器所发送的经编码视频数据相关联的至少一个错误;确定用于视频解码器与视频编码器之间的数据通信的往返行进时间;确定视频解码器向视频编码器最后发送指示由视频解码器所检测的先前错误的反馈消息时的最后发送时间;将当前时间与最后发送时间和往返行进时间的和进行比较;以及基于所述比较,确定是否向视频编码器发送指示由视频解码器所检测的至少一个错误的第二反馈消息。在一个方面中,一种装置包含存储装置和耦合到存储装置的一个或一个以上处理器。所述一个或一个以上处理器经配置以检测与从视频编码器所发送的经编码视频数据相关联的至少一个错误,确定用于所述装置与视频编码器之间的数据通信的往返行进时间,确定所述装置向视频编码器最后发送指示由所述装置所检测的先前错误的反馈消息时的最后发送时间,且将当前时间与最后发送时间和往返行进时间的和进行比较。基于所述比较,所述一个或一个以上处理器进一步经配置以确定是否向视频编码器发送指示由所述装置所检测的至少一个错误的第二反馈消息。本发明中所描述的技术可以硬件、软件、固件或其任何组合来实施。如果以软件实施,那么所述软件可在可指代一个或一个以上处理器的处理器中执行,例如微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或数字信号处理器(DSP),或其它等效的集成或离散逻辑电路。包含用以执行所述技术的指令的软件可最初存储于计算机可读媒体中且由处理器载入并执行。因此,本发明还预期包含用以致使处理器执行如本发明中所描述的各种技术中的任一者的指令的计算机可读媒体。在一些状况下,计算机可读媒体可形成可出售给制造商和/或用于装置中的计算机程序产品的一部分。计算机程序产品可包括计算机可读媒体,且在一些状况下,还可包括封装材料。在附图和以下描述中阐述一个或一个以上方面的细节。从描述和图式中且从权利要求书中将了解其它特征、目的和优点。
图I是说明经由网络而通信地耦合到视频解码器的视频编码器的框图。图2是说明可包括于图I所示的视频编码器和/或视频解码器内的实例处理器的框图。图3A到图3F是说明帧序列的图,其中在序列的每一帧内某一数目的块经帧内编
码。图4是说明可由视频编码器执行以基于所接收的错误反馈而确定用于对视频数据区段进行帧内编码的速率的方法的流程图。图5是说明可由视频编码器执行以基于所接收的包遗失信息而确定用于对视频数据块进行帧内编码的帧内刷新速率的方法的流程图。图6是可由视频编码器执行以获得通过图5的方法而确定的帧内刷新速率的经修改值的方法的流程图。图7是可由视频编码器执行以在接收到一般否定确认(GNACK)消息后便计算包错误率的方法的流程图。图8是说明可由视频编码器执行以基于接收到包括包序列号的GNACK消息而确定经修改的帧内刷新速率的方法的流程图。图9是说明可由视频解码器执行以确定是否向视频编码器发送PLI (图片遗失指示)消息的方法的流程图。图10是可由视频解码器执行以确定向视频编码器发送GNACK还是PLI的方法的流程图。
具体实施例方式图I是说明经由网络16而通信地耦合到装置(视频解码器)20的实例装置(视频编码器)2的框图。视频编码器2和视频解码器20可包含独立的装置,或可为较大系统的一部分。举例来说,视频编码器2和视频解码器20中的每一者可包含以下各项或为以下各项的一部分无线通信装置(例如,无线移动手持机)、数码相机、视频相机、视频电话、数字多媒体播放器、个人数字助理(PAD)、视频游戏控制台、个人计算机或膝上型计算机装置,或其它视频装置。视频编码器2和视频解码器20也可每一者包括于可用于上文所描述的装置中的一些或全部中的一个或一个以上集成电路或芯片内。在一些状况下,网络16可包含有线或无线网络。在一个方面中,网络16可为专用或公用(例如,因特网)网络。仅出于说明和描述的目的,装置2被称为视频编码器,且装置20被称为视频解码器。在以下描述中,各种技术提供关于在执行编码(例如,压缩)的装置与执行解码(例如,解压缩)的装置之间的信息交换的细节,且因此,装置2(视频编码器)与装置20(视频解码器)经展示为经由网络16而通信地耦合。然而,应理解,在某些方面中,装置2和/或装置20可执行编码和/或解码操作。然而,仅出于说明的目的,在后续描述中假设装置2至少执行视频编码操作且因此被称为视频编码器,而装置20至少执行视频解码操作且因此被称为视频解码器。在一些状况下,视频编码器2和视频解码器20可每一者能够执行各种应用程序,例如图形应用程序、视频应用程序和/或其它多媒体应用程序。举例来说,视频编码器2和视频解码器20可用于图形应用程序、视频游戏应用程序、视频重放应用程序、数码相机应用程序、即时消息传递应用程序、视频电话会议应用程序、移动应用程序或视频串流应用程序。视频编码器2和视频解码器20可每一者能够处理各种不同数据类型和格式。举
例来说,其可能能够处理静态图像数据、移动图像(视频)数据或其它多媒体数据。如以下将更详细地描述,视频编码器2能够在帧内刷新程序期间对视频单元序列内的一个或一个以上视频单元(例如,视频帧)内的一个或一个以上区段(例如,块或宏块)或视频数据进行帧内编码以有助于减少序列内的空间冗余。经帧内编码区段为独立于来自先前或后续经编码视频单元的视频数据而经编码的区段。个别帧内的任何给定宏块可经帧内编码为帧内宏块。类似于经帧内编码帧,经帧内编码宏块独立于来自另一(例如,先前)经编码帧的数据而经编码。迫使宏块经帧内编码的方法可被称为编码器帧内刷新。宏块经帧内编码的速率可被称为帧内刷新速率。可能存在帧内刷新宏块的各种原因,例如由视频解码器20所进行的离散余弦逆变换(IDCT)失配控制,和错误复原(error resilience)。为了(例如)在H. 261和H. 263基于块的视频编码标准的情形下控制IDCT失配,图像中的每一宏块位置可在每发射用于所述宏块的系数预定次数时经帧内编码至少一次。宏块的帧内刷新可限制归因于DCT/IDCT失配的错误传播范围。为了改进错误复原,所选择宏块可经帧内编码以限制由使用已归因于信道错误而经不正确地重建或隐藏的恶化宏块引起的错误传播。这些恶化宏块可在解码后便为视觉不良的。此外,来自返回参考恶化宏块以用于时间预测的后续帧的经正确解码宏块也可为视觉不良的。这些类型的假象与DCT/IDCT失配错误相比可能为更不良的。因而,其可在经由易出错信道而传送数据时驱动帧内刷新策略。基于从视频解码器20所接收的错误(包遗失)反馈18,视频编码器2能够动态地调整经帧内编码块的帧内刷新速率。以此方式,视频编码器2能够优化到视频解码器20的视频数据发射的质量且减少到视频解码器20的视频数据发射中的错误数目,而且还通过控制随着时间而发送到视频解码器20的经帧内编码块的数目来管理发射带宽。在一些方面中,反馈18可包括关于与经编码视频数据相关联的不同类型的包错误的任何数目的指示,其包括包遗失的指示。仅出于说明的目的,将在以下描述中假设反馈18涉及包遗失反馈。视频编码器2包括存储媒体4、显示装置12和一个或一个以上处理器14。存储媒体4可包括能够存储指令和/或数据的任何永久性或易失性存储器,例如同步动态随机存取存储器(SDRAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、嵌入式动态随机存取存储器(eDRAM)、静态随机存取存储器(SRAM)或快闪存储器。显示装置12可为能够出于显示的目的而显示视频数据的任何装置,例如LCD (液晶显示器)、等离子显示装置或其它电视(TV)显示装置。处理器14可包括一个或一个以上处理器,例如,例如图2的实例中所展示的控制处理器、视频处理器、图形处理器和/或显示处理器。显示装置12和处理器14每一者能够从存储媒体4进行读取和向存储媒体4进行写入。举例来说,处理器14可执行来自存储于存储媒体4中的一个或一个以上功能模块的指令。这些模块可包含用无线电方式动态地下载到存储媒体4中的可下载模块。在一个方面中,这些模块中的一者或一者以上可包含从应用程序开发者所创建的应用编程接口(API)指令所产生或编译的二进制指令。图I展示存储于存储媒体4内的三个此类模块的实例,所述三个模块中的每一者可包含一个或一个以上指令或代码以供执行。如在图I中可见,存储媒体4存储用于帧内编码器6、预测性(帧间)编码器8和速率自适 应模块10的指令。帧内编码器6能够在执行后便对一个或一个以上视频单元(例如,帧)内的一个或一个以上视频数据区段(例如,块)进行帧内编码。由帧内编码器6所执行的帧内编码可包含不基于视频单元序列内的其它视频单元内所含有的数据区段的编码的独立编码。预测性编码器8能够对一个或一个以上视频数据区段进行帧间编码以减少跨越视频单元的时间冗余。帧间编码可实施预测性技术以基于来自先前或后续经编码帧的运动补偿而对视频数据进行编码。速率自适应模块10能够接收和处理由视频解码器20所提供的包遗失反馈18,以确定(例如,设定、修改)由帧内编码器6所实施的帧内编码的速率(或帧内刷新速率)。虽然图I的实例将帧内编码器6、预测性编码器8和速率自适应模块10展示为存储于存储媒体4内且可由处理器14执行的模块,但在其它状况下,这些模块可实施于硬件内(例如,处理器14的硬件内)。在一些状况下,处理器14可包括一种或一种以上类型的处理器,例如,例如图2的实例中所展示的通用微处理器和/或其它类型的处理器。视频编码器2随着时间而将经编码视频数据发送到视频解码器20以供解码和显示。如果视频解码器20确定其已遗失一个或一个以上视频数据包(例如,通过追踪包序列号),那么视频解码器20可向视频编码器2发送视频解码器20已遗失经编码视频数据的指示。在图I中,此指示包含包遗失反馈18。在一些状况下,包遗失反馈18可包括实时控制协议(RTCP)数据或消息。举例来说,包遗失反馈18可包括各自可识别一个或一个以上包(例如,已遗失的包)的一个或一个以上一般否定确认(GNACK)消息。包遗失反馈18可包括一个或一个以上图片遗失指示(PLI)消息,其通常指示属于一个或一个以上图片的未经界定量的经编码视频数据的遗失。在一些状况下,包遗失反馈18可包括也可提供关于包遗失的信息的一个或一个以上实时输送协议(RTP)消息,例如接收器报告消息。在图I的实例中,视频解码器20包括存储媒体22、显示装置28和一个或一个以上处理器30。类似于存储媒体4,存储媒体22可包括能够存储指令和/或数据的任何永久性或易失性存储器,例如同步动态随机存取存储器(SDRAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、嵌入式动态随机存取存储器(eDRAM)、静态随机存取存储器(SRAM)或快闪存储器。类似于显示装置12,显示装置28可为能够出于显示的目的而显示视频数据的任何装置,例如LCD(液晶显示器)、等离子显示装置或其它电视(TV)显示装置。处理器30可包括一个或一个以上处理器,例如控制处理器、视频处理器、图形处理器和/或显示处理器。显示装置28和处理器30每一者能够从存储媒体22进行读取和向存储媒体22进行写入。如图I所示,存储媒体22可包括用于两个功能模块的指令帧内解码器24和预测性(帧间)解码器26。帧内解码器24能够解码和显示由视频编码器2跨越网络16而发送的一个或一个以上视频单元(例如,帧)内所含有的经帧内编码视频数据区段(例如,块)。预测性解码器26能够解码和显示由视频编码器2所发送的经帧间编码区段。处理器30可执行这些模块24和26以将视频数据显示于显示装置28上。虽然图I的实例将帧内解码器24和预测性解码器26展示为存储于存储媒体22内且可由处理器30执行的模块,但在其它状况下,这些模块可实施于硬件内(例如,处理器30的硬件内)。在一些状况下,处理器30可包括一种或一种以上类型的处理器,例如,例如图2的实例中所展示的通用微处理器和/或其它类型的处理器。在一些状况下,视频解码器20进一步能够执行编码操作。在这些状况下,视频解码器20可包括类似于帧内编码器6、预测性编码器8和速率自适应模块10的模块。在一些状况下,视频编码器2进一步能够(例如)在从装置20接收经编码视频数据时执行解码操
作(其可执行解码操作和编码操作两者)。在这些状况下,视频编码器2可包括类似于帧内解码器24和预测性解码器26的模块。图2是说明根据一个方面可包括于图I所示的视频编码器2和/或视频解码器20内的实例处理器50的框图。当包括于视频编码器2内时,图2所示的处理器50可为处理器14的一部分。当包括于视频解码器20内时,处理器50可为处理器30的一部分。处理器14和处理器30可每一者包括一个或一个以上处理器,且在一些状况下,可包括图2的实例中所展示的处理器中的一者或一者以上。处理器50可包含多个可编程处理器。如图2所示,这些处理器可包括控制或通用处理器52、视频处理器54、图形处理器56和显示处理器58。控制处理器52可能能够控制视频处理器54、图形处理器56和/或显示处理器58。在一个方面中,处理器50可包括其它形式的多媒体处理器。视频处理器54可在视频编码和/或解码操作期间利用,且可实施各种编码算法。举例来说,在一些状况下,视频处理器54可实施H. 261、H. 263、运动图片专家组(MPEG)l、MPEG2和/或MPEG4视频编码标准,以及H. 264标准及其对应物IS0/IEC MPEG-4第10部分(即,先进视频编码(AVC))。视频处理器54还可在编码或解码视频数据时实施一个或一个以上离散余弦变换(DCT)或离散余弦逆变换(IDCT)操作。图形处理器56可为用以再现、操控和显示计算机化图形的专用图形再现装置。图形处理器56可实施各种复杂的图形相关算法。举例来说,复杂算法可对应于二维或三维计算机化图形的表示。图形处理器56可实施若干所谓的“基元”图形操作,例如形成点、线和三角形或其它多边形表面,以在例如显示装置12或28 (图I)的显示器上创建复杂的三维图像。显示处理器58管理像素数据在显示装置上的显示。显示装置58可对像素数据执行各种操作,例如旋转和/或按比例缩放操作。图3A到图3F是说明根据一个方面的帧序列的图,其中在序列的每一帧内某一数目的块经帧内编码。这些图将视频数据区段展示为块(例如,宏块),但可使用任何大小或形状的视频数据区段。块可(例如)包含例如16x16像素宏块的宏块,或在一些状况下,可包含较小子分割区(16x8、8xl6、8x8、4x8、8x4、4x4等)像素块。
在图3A到图3F的实例中,假设实例帧序列包括在时间序列中彼此邻接的六个帧。(当然,在其它状况或实例中,帧序列可包括六个以上更多帧。)每一帧可包括布置于不同位置的块阵列。图3A到图3F中的每一者出于说明的目的而展示这六个帧中的一者。视频编码器2 (图I)能够对每一帧内的视频数据块进行编码(例如,帧内编码和/或帧间编码)且向视频解码器20发送帧以供解码和显示。视频编码器2可使用其预测性编码器8对任何给定帧内的一个或一个以上视频数据块进行帧间编码,且可使用其帧内编码器6对任何给定帧内的一个或一个以上视频数据块进行帧内编码。视频编码器2可使用其速率自适应模块10来调整块的帧内编码速率(即,帧内刷新速率)或每一帧中的经帧内编码块的数目。在图3A到图3F中,时间上连续帧中的每一者包括六个经帧内编码块102。图3A到图3F还描绘尚未经帧内编码的块100且还描绘先前经帧内编码的块104。在一些状况下,给定帧内的未经帧内编码的任何块可能经帧间编码。然而,如在图3A到图3F的六帧序列中可见,如果无块经帧内编码两次(因为每一块可为唯一的,如同此实例中的状况),那
么所有块将在六帧序列中经帧内编码一次。应注意,在此实例中,相同数目的块(六个)在每一帧中经帧内编码,但此不是必要的。每一帧中的未经帧内编码的块可能经帧间编码,且可参考相应最佳匹配的块经帧内编码或帧间编码的一个或一个以上帧。在图3A到图3F中,因为在序列的每一帧中仅六个块经帧内编码,所以花费六个帧来完成整个帧中的所有位置处的每一块的帧内编码。然而,假定其它块经帧间编码,那么在帧之间可能存在互依性,此意味着经编码位流可对于传播信道错误敏感,其可导致由视频解码器20所解码的视频帧内的错误。增加每一所发射帧中的经帧内编码块的数目可减少错误和由信道错误所引起的错误传播。然而,假定多于用于帧间编码的位的位可用于帧内编码,那么增加每一帧中的经帧内编码块的数目还可增加发射带宽。因此,视频编码器2的速率自适应模块10可动态地确定或调整由帧内编码器6所执行的帧内编码的速率。举例来说,速率自适应模块10可确定序列中的每一帧的经帧内编码块的数目,且因此可增加或减少此数目,以尝试平衡带宽与错误减少参数。如先前所描述,在一些状况下,速率自适应模块10可基于从视频解码器20所接收的包遗失反馈18而确定帧内刷新速率。举例来说,如果视频解码器20指示存在显著量的包遗失或错误或者包遗失或错误的增加,那么速率自适应模块10可确定增加帧内刷新速率以有助于减少进一步传播错误的可能性。这将在下文更详细地描述。图4是说明根据一个方面可由视频编码器(例如,图I所示的视频编码器2)执行以基于所接收的错误反馈(例如,错误反馈18)而确定用于对视频数据区段进行帧内编码的速率的方法的流程图。图4展示可由视频编码器实施的高阶方法的细节,且例如图5到图8的后续图中还展示各个方面的进一步细节。在图4的以下描述中,仅出于说明的目的而将假设方法由视频编码器2执行。视频编码器2可从视频解码器20接收指示与经编码视频数据(例如,可能先前已由视频编码器2发送到视频解码器20的经编码视频数据)相关联的错误(例如,数据遗失)的反馈18(106)。在接收到反馈18后,视频编码器2便可确定用于对视频单元(例如,帧)序列内的每一视频单元的规定数目的视频数据区段(例如,块)进行帧内编码的速率,其中一个视频单元内的视频数据区段的帧内编码独立于序列内的其它视频单元内的视频数据区段的编码(108)。视频编码器2可针对多个视频单元和/或视频单元序列而重复处理所接收的反馈18和确定用于帧内编码的速率的动作。在一些状况下,从视频解码器20所发送的反馈18指示由视频解码器20造成的经编码视频数据的至少一部分的遗失。每一视频数据区段可包含一个或一个以上视频数据块,且视频单元序列内的每一视频单元可包含一个或一个以上视频数据帧或片层(slice)。一个帧内的视频数据块的帧内编码可独立于序列内的其它帧内的视频数据块的编码。在一个方面中,反馈18可包含图片遗失指示(PLI)和一般否定确认(GNACK)中的至少一者。反馈18可包含指示含有经编码视频数据的遗失包的数目的反馈,每一遗失包先前已由视频编码器2发送到视频解码器20,但未被视频解码器20接收到。在一些状况下,如下文将进一步详细地描述,确定用于帧内编码的速率可至少部分基于用于跨越序列内的一个或一个以上视频单元而校正错误的目标校正时间。当反馈18包括指示遗失包的数 目的GNACK时,确定用于帧内编码的速率可至少部分基于遗失包的数目。在一些状况下,视频编码器2还可从视频解码器20接收指示遗失包的第二数目的报告。举例来说,此报告可为由视频解码器20周期性地发送到视频编码器2的一系列RTCP接收器报告中的一者。如下文将进一步详细地描述,在一个方面中,视频编码器2可基于由GNACK所指示的遗失包的数目和由报告所指示的遗失包的第二数目中的至少一者而计算包错误率,其中确定用于帧内编码的速率至少部分基于包错误率。举例来说,视频编码器2可基于GNACK或报告中的哪一者指示较高量的遗失包而计算包错误率。确定帧内编码速率可进一步至少部分基于视频单元序列内的每一视频单元内所含有的包的所估计数目。如果错误反馈18包括GNACK消息,那么GNACK可识别每一遗失包,且视频编码器2可基于当前时间与经识别遗失包中的一者先前发送到视频解码器20时的时间之间的差而计算流逝时间,如下文参看图8而进一步详细地描述。视频编码器2可至少部分基于此流逝时间而确定帧内编码速率。在一些状况下,由GNACK所识别的每一遗失包具有相关联的序列号。当将包从视频编码器2发送到视频解码器20时,序列号最初可以升序而指派到包。视频解码器20可记住其已接收到哪些包且还记住这些包的相应序列号。因此,假设序列号呈升序,那么由视频解码器20所发送的GNACK可识别任何遗失包的序列号(或遗失包的序列号范围)。 在接收到通过序列号而识别遗失包的GNACK后,视频编码器2便可计算流逝时间。视频编码器2可确定由GNACK所识别的哪一遗失包具有大于具有经帧内编码区段的先前视频单元序列的第一包的序列号的序列号,所述先前视频单元序列先前由视频编码器2发送到视频解码器20。如参看图8更详细地描述,视频编码器2可接着基于如由视频编码器2所维持的当前时间与所确定遗失包先前从视频编码器2发送到视频解码器20时的时间之间的差而计算流逝时间。视频编码器2可通过记住如通过序列号而识别的每一包何时发送到视频解码器20而进行流逝时间的此计算。如上文所描述,视频编码器2可针对多个视频单元序列中的每一视频单元而重复反馈18的接收和用于帧内编码的速率的确定。在一些状况下,如下文进一步详细地描述,视频编码器2可基于跨越一个视频单元序列内的不同视频单元的所检测运动量是否超出运动阈值而确定是否重复所接收反馈18的处理和用于在多个视频单元序列中进行帧内编码的速率的确定。在一个方面中,运动阈值为可调整参数,在一些状况下,当视频编码器2使用对视频数据区段进行帧内编码的较高速率时,所述可调整参数可由视频编码器2设定为较高阈值。图5是说明根据一个方面用于基于所接收的包遗失信息而确定用于对视频数据块进行帧内编码的帧内刷新速率的方法的流程图。虽然图5的实例参考视频数据块或宏块,但各种其它视频数据区段(大小、形状)可在各种其它情境下经帧内编码。在一个方面中,图5所示的方法可由视频编码器2 (图I)基于从视频解码器20所接收的包遗失反馈18而执行。在各种情境下,视频编码器2 (且更特定来说,速率自适应模块10)可基于所接收的包遗失反馈而确定宏块帧内刷新速率,且可使用各种准则或因数来计算帧内刷新速率。举例来说,如将进一步详细地描述,视频编码器2可在计算帧内刷新速率时使用目标校正时间、未经校正错误的机率、所检测错误的数目、运动量和/或用户感知的错误的有限持续时间。参看图5和后续流程图来描述各种参数。下文界定这些参数中的一些参数Target_Correction_Time (以秒计)在通过视频编码器2而检测到例如包遗失等错误之后视频编码器2必须校正错误所历时的最大时间量。Current_Frame_Rate (以每秒巾贞计)由视频编码器2所使用的每秒巾贞的当前数目。如果视频编码器2随着target_enC_rate(目标编码速率)参数的改变而使此参数变化,那么速率自适应模块10可从来自视频编码器2的帧递送而估计此参数。在一些状况下,视频编码器2可向速率自适应模块10指示Current_Frame_Rate的值。Max_Intra_MB_%(0-100%):经帧内编码宏块的最大容许百分数。此参数可用以限制视频质量的降级,因为帧大小可根据数据和帧速率而为固定的。Intra_Repeat (整数)在检测到包遗失时将跨越整个图像执行全宏块帧内刷新序列(跨越帧序列)的次数。Intra_MB_%_No_Loss (0-100%):在不存在所检测的包遗失时经帧内编码(经刷新)宏块的百分数。Intra_MB_%(0-100%):视频编码器2将在每帧(或片层)插入的经帧内编码(经刷新)宏块的百分数。Num_Intra_Frames (整数)视频编码器2具有经巾贞内编码(经刷新)宏块的巾贞的数目。此外,以下所展示的各种公式和计算包括Max和Min运算。假设Max运算选择集合内的两个或两个以上可能值中的最大值,且Min运算选择集合内的两个或两个以上可能值中的最小值。图5所示的方法重复地检查以确定视频编码器2是否已从视频解码器20接收到RTCP反馈(110)。在接收到此反馈后,视频编码器便确定反馈是否指示由视频编码器2发射到视频解码器20的一个或一个以上包的遗失(112)。举例来说,由视频解码器20发送到视频编码器2的包遗失反馈18(图I)可指示由视频编码器所发送的一个或一个以上经编码视频数据包的此遗失。如果视频编码器2尚未接收到任何包遗失指示,那么其可使用速率自适应模块10来确定或设定宏块的巾贞内刷新速率或百分数(Intra_MB_%)等于Intra_MB_%_No_Loss,其可包含可调整参数(114)。在一些状况下,视频编码器2可自动地设定或调整Intra_MB_%_No_Loss。在一些状况下,用户可设定或调整此参数,(例如)以增加或减少每一帧中的经帧内编码宏块的数目。然而,如果视频编码器2已接收到例如包遗失反馈18等包遗失指示,那么视频编码器2可确定其已接收到GNACK还是PLI (116)。GNACK可指示已遗失或具有错误的一个或一个以上特定包。在接收到包遗失指示后便开始Intra_refresh例程(118)。最初,视频编码器2的速率自适应模块10可设定(120) Intra_MB_%等于Min{Max_Intra_MB_%, 100%/(Target_Correction_Time x Current_Frame_Rate)}。Max_Intra_MB_%和Target_Correction_Time各自为可具有初始预界定值的可调
整参数,其可针对由视频编码器2所执行的特定应用程序或操作而优化。这些参数还可针对由视频编码器2所执行的不同应用程序(例如,视频电话、视频串流、游戏)而具有不同值。速率自适应模块10在确定Intra_MB_%的值时使用这些参数中的每一者的值。在一些状况下,如下文将更详细地描述,速率自适应模块10可实施一个或一个以上可选增强功能(例如,图6到图8所示的功能)以获得Intra_MB_%的经修改值(122)。速率自适应模块10请求视频编码器2使用Intra_MB_%作为每一帧中的宏块的帧内刷新速率(例如,通过执行帧内编码器6和预测性编码器8)而开始用于视频帧序列的帧内刷新程序(124)。视频编码器2还可将Num_Intra_frames的值初始化为零。接着,视频编码器2提供帧内刷新程序已开始的输入。视频编码器2还指示何时已到达每一视频帧边界(126)。此可为用以设定RTP中的时戳和/或市场位(market bit)的同一指示的一部分。当已到达视频巾贞边界时,速率自适应模块10递增Num_Intra_Frames (128), Num_Intra_Frames为使用Intra_MB_%的当前值而记住包括经帧内编码宏块的视频帧的数目的参数。在每一帧边界处,速率自适应模块10确定(130)是否Num_Intra_Frames>=Ceil[100%/Intra_MB_%]。如果Num_Intra_Frames小于此上限(或最大阈值),那么视频编码器2检查以确定其是否已从视频解码器20接收到另一包遗失指示(131)。如果否,那么视频编码器2再次检查视频帧边界(126)。然而,如果视频编码器2已从视频解码器20接收到例如包遗失反馈18等另一包遗失指示,那么视频编码器2可确定其已接收到GNACK还是PLI (116)。在此状况下,视频编码器2接着继续进行Intra_refresh例程(118)。如果Num_Intra_Frames大于或等于此上限,那么视频编码器2针对全视频巾贞序列内的每一巾贞而使用Intra_MB_%的当前值已向视频解码器20发送此序列(借此每一巾贞中的经指示数目的宏块已经帧内编码)。速率自适应模块10接着执行图5所示的ItepeatJntra例程(132)。在此例程中,速率自适应模块10确定视频编码器2已对整个视频帧序列进行帧内刷新(经帧内刷新)的次数是否大于或等于Intra_Repeat (其为可具有为二的初始值的另一可调整参数)的值(134)。Intra_Itepeat的值可经调整以计及与经帧内刷新帧序列内的一个或一个以上宏块相关联的可能运动。此运动可潜在地导致可通过将视频序列的帧内刷新序列重复一次或一次以上而校正的错误。当已执行(巾贞内刷新)完整巾贞内刷新序列的次数大于或等于Intra_Repeat的值时,速率自适应模块10返回到未检测到遗失的操作,且设定Intra_MB_%=Intra_MB_%_No_Loss。然而,如图5所示,如果经巾贞内刷新小于Intra_Repeat的值,那么速率自适应模块10递增经帧内刷新的值(136),且再次针对后续视频帧序列而执行Intra_refresh例程
(118)。图6是可由图I所示的视频编码器2执行以获得Intra_MB_%的经修改值的方法的流程图。如在图5中的框“Intra_MB_%的可选增强”(122)内所规定,Intra_MB_%的此经修改值可用于图5的方法内。在一个方面中,视频编码器2可执行图5所示的方法以计算Intra_MB_%的初始值,但可接着另外执行图6所示的方法以确定Intra_MB_%的经修改值以供在对帧序列的每一视频帧内的宏块进行帧内编码时使用。通过执行图6所示的方法,视频编码器2可限制在帧序列内的一个帧内刷新经帧内编码宏块序列之后具有未经校正错误的机率。速率自适应模块10可至少部分基于在帧
内刷新序列期间RTP包遗失速率的估计值而确定Intra_MB_%的经修改值,且可利用包括于由视频解码器20所提供的RTCP接收器报告内的fractionjost参数,此指示从发送最后接收器报告起已由视频解码器20遗失的包的分数。此外,当速率自适应模块10已从视频解码器20检测到大量错误(例如,包遗失)时,速率自适应模块10可能能够增加Intra_MB_%的值。通过这样做,视频编码器2可能能够更快速地校正可由视频解码器20的用户见到的错误(如显示于显示装置28上)。参看图6和后续流程图来描述各种参数。下文界定这些参数中的一些参数Target_Err_Pr(0_l):在单一帧内刷新序列(即,视频帧序列)之后在图像中仍将存在错误的目标机率。在图6的实例中,此参数经设定为高于预期PER(包错误率)乘每帧的包数目。α (0-1):用于估计avg_norm_ppf (每巾贞的平均正规化包)的IIR(无限脉冲响应)滤波器更新因数。视频编码器2可以为O. I的值开始。β (0-10):用于确定Intra_MB_%的调谐因数。视频编码器2可以为I. O的值开始。PER(O-I):包错误率,其可经设定为等于来自从视频解码器20所接收的最近RTCP接收器报告的fraction_lost参数。avg_norm_ppf (实数)每巾贞的平均“正规化”包,其可经正规化为50kbps (每秒千位)和IOfps (每秒帧)的目标编码速率。inst_ppf (整数)当前巾贞中的每巾贞的包est_ppf (实数)每将来帧的包的所估计数目Target_enc_rate (每秒位):由速率自适应模块10所设定的target_encode_rate的当前值。如图6所示,视频编码器2可在计算Intra_MB_%的经修改值(163)时计算或估计aVg_n0rm_ppf的值(150)。一旦包已预备好且准备好由视频编码器2发射(152),视频编码器2便可递增inst_ppf,其为当前帧中的每帧的包的数目(154)。在一些状况下,inst_ppf指示巾贞中的RTP包的数目。针对巾贞内的每一包而进一步递增inst_ppf,直到最终包指示中贞的结束为止(156)。在此点处,视频编码器2能够如下计算(158)avg_norm_ppf的经更新值avg_norm_ppf = (1_α)χ avg_norm_ppf+ (αχ inst_ppf) χ (50kbps/target_encode_rate)x(Current_Frame_Rate/IOfps),其中在此特定实例中,可假设目标编码速率相对于50kbps的预界定值而经正规化,且当前帧速率相对于IOfps的预界定值而经正规化。这些预界定值仅用于某些实例情境下,且可在不同配置中具有各种不同值。可接着针对下一帧而将inst_ppf的值重设为零(160) ο 如所不,avg_norm_ppf 的值基于 inst_ppf> target_encode_rate 和 Current_Frame_Rate (其为当前巾贞的巾贞速率)的值。如图6所示,avg_norm_ppf的此值可接着用以计算est_ppf的值。在一个方面中,可如下计算est_ppf (每巾贞的所估计包)的值est_ppf = avg_norm_ppf x(target_enc_rate/50kbps)χ(10fps/Current_Frame_Rate),其中在此实例中,目标编码速率相对于50kbps的预界定值而经正规化,且当前帧速率相对于IOfps的预界定值而经正规化(166)。预界定值可经优化,且可在各种不同配置中具有不同值。目标编码速率(target_enC_rate)可作为一个输入参数而提供到等式,且来自图5所示的基本算法的Intra_MB_%的值可作为另一输入参数而提供(164)。在一个方面中,目标编码速率target_enc_rate可包含可基于(例如)由视频编码器2所执行的应用程序的类型而调谐的可调整参数。在一个方面中,目标编码速率可基于动态速率自适应算法而调谐,其中视频编码器2使其速率适应网络条件。视频编码器2的速率自适应模块10可设定PER(包错误率)的值等于由视频解码器20所发送的RTCP接收器报告内所含有的fraction_lost的值,所述fraction_lost如上文所描述指示从发送最后接收器报告起已由视频解码器20遗失的包的分数(168)。速率自适应模块10可接着如下计算Target_Err_Pr (其为在单一巾贞内刷新序列之后在图像中将仍存在错误的目标机率)的经更新值(170)Target_Err_Pr=Max{Target_Err_Pr, est_ppf x PER}。在进行此计算之后,速率自适应模块10能够基于如通过图5所示的方法或基本算法所确定的Intra_MB_%的初始值而计算ntra_MB_%的经更新或经修改值。如通过图5的方法所确定的Intra_MB_%的此初始值经指示为来自基本算法的Intra_MB_%(例如,在图6中,其中基本算法为图5所示的算法)。可如下计算(172) Intra_MB_%的经更新值Min{Max_Intra_MB_%, Max{β χ 100% χ log (I-PER)χ est_ppf/log(l~Target_Err_pr),来自基本算法的Intra_MB_%}}。当速率自适应模块10根据Intra_MB_%的此经更新值而对序列的帧内的宏块进行中贞内编码时,Intra_MB_%的此经更新值可接着由图5所示的基本算法使用(174)。图6所示的方法计算Intra_MB_%的经更新值以有助于视频编码器2限制在帧序列内的一个帧内刷新经帧内编码宏块序列之后具有未经校正错误的机率。因此,Intra_MB_%的经更新或经修改值通常将为增加值,使得宏块的帧内刷新更快速地且在序列内的较少帧中发生。在获得所述值且使用图6所示的计算的过程中,在一些状况下,可假设帧的每一片层(其中一个片层可含有一个或一个以上宏块)含有至少一个经帧内编码宏块。通过使用此假设,可进一步假设在整个经帧内刷新帧序列(具有以Intra_MB_%的速率而经刷新的经帧内编码宏块)期间的任何包遗失可在一些宏块中引起错误,因为可能遗失某些经帧内编码宏块。这些假设可包含关于如何快速地对帧序列进行帧内刷新的保守假设。假设包错误的机率贯穿帧序列而分布,那么贯穿序列的所有包可具有引起未经校正错误的相等机率。因此,在一个经帧内刷新帧序列之后不存在错误的机率可等于(l-PER)P,其中P为整个帧序列中的包的数目。因此,帧内刷新序列中的包的总数可经限制为小于log(l-Target_Err_Pr)/log (I-PER)。经帧内刷新(IR)帧序列中的包的数目可接着经计算为IR序列中的#帧χ在IR序列期间每帧的平均#包,其中IR序列中的#帧=100%/Intra—MB—%。因此,在IR序列期间每帧的包的所估计平均数目可经计算为est_ppf = Avg_norm_ppf x(target_enc_rate/50kbps)x(lOfps/Current_Frame_
Rate)。组合这些结果会提供关于通过图6所示的方法所确定的Intra_MB_%的经修改值的以下公式log(l-Target_Err_Pr)/log (I-PER)>=(100%/Intra_MB_%)x est_ppf。图7是根据一个方面可由视频编码器2(图I)的速率自适应模块10执行以在接收到GNACK消息后便计算包错误率(PER)的方法的流程图。如参看图6的用以计算Intra_MB_%的经修改值的方法所描述,PER的值经选择和设定为等于包括于由视频解码器20所发送的接收器报告内的fraction_lost参数的值。图7展示可由速率自适应模块10使用以基于接收到GNACK而获得PER的经修改值的方法。如图7所示,速率自适应模块10能够基于所接收的GNACK消息中所指示的包的数目而计算参数GNACK_PER的值(180)。从视频解码器20发送GNACK。视频解码器20可确定一个或一个以上帧内的具有错误(例如,已遗失)的包的数目,且可在GNACK内指示此数目。此外,在GNACK内,视频解码器20可通过序列号而识别具有错误的特定包。在一个方面中,当包经由网络16而第一次发送到视频解码器20时,这些包序列号最初由视频编码器2确定。在接收到GNACK后,速率自适应模块10便可将GNACK_PER的值与包括于从视频解码器20所发送的先前RTCP接收器报告内的fractionjost的值进行比较(182)。如果GNACK_PER大于或等于fraction_lost,那么速率自适应模块10将PER的值设定为等于GNACK_PER(184)。然而,如果GNACK_PER小于fraction_lost,那么速率自适应模块10将PER的值设定为等于来自最后接收器报告的fraction_lost的值(186)。因此,如从图7的方法可见,速率自适应模块10选择包错误率PER的值作为GNACK_PER和fraction_lost中的较大者。通过选择这两个值中的较大者,速率自适应模块10在图6的方法内计算经修改的帧内刷新速率Intra-MB_%时使用PER的较高值。在此方面中,当(例如)通过fraction_lost参数或通过GNACK消息而指示较高量的包错误时,速率自适应模块10增加Intra-MB_%。图8是说明根据一个方面可由视频编码器2(图I)的速率自适应模块10执行以基于从视频解码器20接收到可各自包括包序列号的一个或一个以上GNACK消息而确定经更新的帧内刷新速率的方法的流程图。通过执行图8的方法,视频编码器2可争取限制视频解码器20的用户可感知错误的总时间。视频编码器2的速率自适应模块10可针对较旧错误而使用Intra_MB_%的较大值,使得这些较旧错误可经更快速地校正。
速率自适应模块10可维持RTP包序列号到从视频编码器2发送包时的时间点或时戳的映射(190)。举例来说,视频编码器2可在第一时间点(例如,100ms)发送具有第一序列号的第一包,且可在第二时间点(例如,IlOms)发送具有第二序列号的第二包。速率自适应模块10可针对这两个包中的每一者以及从视频编码器2发送到视频解码器20的任何其它包而保持序列号到时戳的映射。当视频编码器2从视频解码器20接收到指示一个或一个以上包具有错误(例如,已遗失)的GNACK时,视频编码器2能够确定在GNACK内所识别的包中的每一者的序列号。举例来说,如果GNACK指示四个不同包具有错误,那么视频编码器2能够确定这四个包中的每一者的RTP序列号。这些序列号可与这四个包相关联,且包括于GNACK内。(如先前所描述,这些RTP序列号是在包由视频编码器2第一次发送到视频解码器20时最初指派到包的序列号。在一个方面中,所述序列号由视频编码器2以升序为循序地发送到视频解码器20的包指派。)在确定由所接收的GANCK所识别的包的序列号后,视频编码器2便可确定(192)经识别包的最早或最小序列号(RTP_SN),其大于含有经帧内编码宏块的最后经帧内刷新帧序列的第一包的序列号(RTP_SN_Last_IR_Sequence),或RTP_SN>RTP_SN_Last_IR_Sequence。视频编码器2使用其映射信息来确定在GNACK内所识别的具有此最早序列号RTP_SN的包的时戳。此时戳对应于视频编码器2最初将具有序列号RTP_SN的此包发送到视频解码器20时的时间点。此时戳因此基于由视频编码器2所维持的时钟。视频编码器2将此时戳(TS_of_earliest_GNACK_RTP_SN)与如由视频编码器2的时钟所指示的当前时间(current_time)进行比较,且如下计算(194)差(Time_elapsed)的值Time_elapsed=Current_Time-TS_of_ea;rliest_GNACK_RTP_SN。Time_elapsed参数的值指示从具有序列号RTP_SN的包已由视频编码器2发送起已流逝的时间周期。速率自适应模块10可接着基于此流逝的时间周期而修改Intra_MB_%的值(用于对后续经帧内刷新序列中的宏块进行帧内编码)。因为RTP_SN为GNACK中的经识别包的大于含有经帧内编码宏块的最后经帧内刷新帧序列的第一包的序列号的最早或最小序列号,所以速率自适应模块10尝试修改Intra_MB_%的值以更快速地争取校正较旧错误(其更早以前发生)。通常,速率自适应模块10在这些状况下将增加Intra_MB_%的值,且接着在图5所示的方法内(在Intra_refresh例程中)使用此经修改值。在一个方面中,速率自适应模块10可如下计算(196) Intra_MB_%的经修改值设定Intra_MB_%=Min {Max_Intra_MB_%, 100%/ [ (Target_Correction_Time-Time_elapsed)x Current_Frame_Rate]}。与先前所描述的公式或计算中的某些公式或计算一样,速率自适应模块10在某些状况下可通过Max_Intra_MB_%而限制Intra_MB_%的值。Max_Intra_MB_%的值可由视频编码器2或由用户基于由视频编码器2所执行的应用程序的类型或由视频编码器2所提供的环境而配置或调整。在以上状况下,速率自适应模块10还可至少部分基于Target_Correction_Time与Time_elapsed之间的差而确定Intra_MB_%的经修改值。如先前所描述,Target_Correction_Time参数指示在由视频编码器2检测到例如包遗失等错误之后视频编码器2必须校正错误所历时的最大时间量。在此状况下,此最大校正时间变为接收器经历错误传播的目标最大时间量。Target_Correction_Time的值可出于优化的目的而经配置或改变。在一些方面中,视频编码器2可实施用于确定可用于图5所示的Intra_refresh例程内的Intra_MB_%的经修改值的另一增强。在这些方面中,速率自适应模块10可尝试测量过去视频帧序列(在其期间,在检测到一个或一个以上包错误后便使用Intra_MB_%)上的运动量。如先前参看图5所描述,根据可调整参数Intra_repeat的值,速率自适应模块10可针对帧序列将帧内刷新序列潜在地重复一次或一次以上。此参数的值可基于所检测的运动而调整,其可为帧序列内的帧上的运动向量的函数。速率自适应模块10可将所检测的运 动量与运动阈值进行比较,所述运动阈值可包含由用户或由视频编码器2配置或调整的值。举例来说,假定帧内刷新正以较高速率而发生,那么在当前正使用Intra_MB_%的较高值的情况下,视频编码器2可使用较高阈值。所述阈值可应用于针对总帧或序列的运动统计,但同样也可应用于针对特定宏块的运动。如果所检测的运动量小于此阈值,那么速率自适应模块10可根据下式而修改Intra_MB_%的值以设定为等于无遗失值(如图5中所使用):Intra—MB—%=Intra—MB—%—No—Loss。然而,如果运动量超出此阈值,那么速率自适应模块10可重复整个视频帧序列的中贞内刷新程序,且/或可增加Intra_repeat的值,使得可执行额外刷新。巾贞内刷新序列的重复可有助于校正可能由一个或一个以上帧内的过量运动而引起的任何错误。图9是说明根据一个方面可由视频解码器20(图I)执行以确定向视频编码器2发送PLI (图片遗失指示)消息还是例如一般否定确认(GNACK)的另一指示的方法的流程图。如先前所描述,视频解码器20能够在由帧内解码器24和/或预测性解码器26检测到一个或一个以上包错误后便向视频编码器2发送错误(例如,包遗失)反馈18。此反馈18可包括一个或一个以上GNACK和/或PLI消息。GNACK消息可特定地识别具有错误的包,而PLI消息可在未必识别包的情况下更一般地识别解码错误。然而,随着时间(例如)向视频编码器2发送过多PLI消息可能存在某些缺点。举例来说,视频解码器20可向视频编码器2发送第一 PLI,所述第一 PLI可触发视频编码器2的速率自适应模块10通过增加Intra_MB_%的值而开始帧内刷新序列或增加对帧序列内的宏块进行帧内编码的速率。假设存在由视频解码器20所感知的新的或额外错误,那么在视频解码器20此后不久在接收到新刷新的宏块中的任一者之前向视频编码器2发送另一PLI的情况下,视频编码器2可再次但潜在地不必要地增加Intra_MB_%的值。在这些类型的情境下,来自视频解码器20的PLI消息可与由视频编码器2所发送的经帧内刷新宏块相遇以校正先前指示的错误。因此,在一些状况下,可能更有益的使视频解码器20在在短时间周期内向视频编码器2发送重复的PLI消息之前执行某些检查。根据图9的方法,视频解码器20可等待来自帧内解码器24和/或预测性解码器26的解码器输出(200)。视频解码器20可接着确定帧内解码器24和/或预测性解码器26是否检测到任何解码错误(202)。在一些状况下,视频解码器20可(例如)经由分析经编码视频数据的位流而检测到未由RTP层检测到的某些错误。如果检测到解码错误(例如,所接收的经编码包中的一者中的错误,或甚至一个或一个以上包的遗失),那么视频解码器20可根据其时钟而确定当前时间(current_time)。
视频解码器20还可确定或查找RTT的值,RTT的值为用于视频解码器20与视频编码器2之间的数据通信的往返行进时间的值。在一些状况下,RTT的值可在视频解码器20内经最初设定或配置为缺省值。然而,视频解码器20能够基于针对视频解码器20与视频编码器2之间的数据通信的实时计算而随着时间来动态地调整或更新RTT的值。举例来说,视频解码器20可能能够使用一个或一个以上RTCP接收器和/或发送器报告内所含有的信息,以便测量或估计RTT的值。在一个方面中,视频解码器20可基于在视频解码器20与视频编码器2之间所交换的至少一对消息而测量或估计RTT的值。在图9的实例中,视频解码器20可检查以确定(204)是否满足以下条件current_time>RTT+Time_Last_Sent_PLI,其中Time_Last_Sent_PLI等于视频解码器20向视频编码器2最后发送PLI的时间(根据视频解码器20的时钟)。根据视频解码器20的时钟,如果当前时间实际上大于RTT加上Time_Last_Sent_PLI,那么视频解码器20可向视频编码器2发送另一 PLI消息,且还将Time_Last_Sent_PLI的值设定为当前时间(206)。然而,如果当前时间小于或等于RTT加上Time_Last_Sent_PLI,那么视频解码器20将抑制向视频编码器2发送另一 PLI消息。在这些情境下,视频解码器20确定其在一个往返行进时间内先前已发送一 PLI,且不需要发送另一 PLI。在这些情境下,视频解码器20假设视频编码器2将响应于接收到由视频解码器20所发送的先前PLI而开始新的帧内刷新序列或可能甚至调整Intra_MB_%的值,且视频解码器20将在已发送先前PLI之后在一个往返行进时间内在极早时开始接收此经刷新序列内的包(和宏块)。因此,如果视频解码器20在此一个往返行进时间窗口内识别任何错误,那么认为此类错误可在接收到先前PLI后便通过视频编码器2所起始的帧内刷新序列而校正,且视频解码器20不需要在此时间窗口内发送另一 PLI。视频解码器20可针对从视频编码器2所接收的所有经编码包而继续执行图9所示的方法。图10是根据一个方面可由视频解码器20 (图I)执行以确定向视频编码器2发送GNACK还是PLI的方法的流程图。在一些状况下,如果(例如)从最后发送PLI起存在具有错误或已遗失的大量包,那么视频解码器20可确定向视频编码器2发送一般PLI消息。在一个方面中,如果在一个往返行进时间内(例如)尚未发送先前GNACK或PLI (例如,图9所示),那么视频解码器20可执行图10所示的方法。因此,如图10所示,视频解码器20可等待解码输出(210),且确定处理是否已到达帧边界(或是否已检测到新的帧)(211)。如果如此,那么视频解码器20可将被称作Number_of_packets_lost的变量的值重设为零。如下文所描述,视频解码器20在检测到包错误后便确定发送GNACK还是PLI的过程中使用此变量的值。当已检测到新的帧时,视频解码器20可将此变量的值重设为零。视频解码器20可识别由视频编码器2所发送的特定包已遗失,且可接着递增Number_of_packets_lost 变量(212)。视频解码器 20 可接着将 Number_of_packets_lost的值与包遗失阈值进行比较。此阈值可包含可由用户或由视频解码器20配置或调谐的可调整参数。在一些例子中,此阈值的值可视装置类型(例如,用于视频解码器20和/或视频编码器2的装置的类型)和/或所执行的应用程序的类型(例如,视频电话应用程序、游戏应用程序)而定。
在一个方面中,视频解码器20可确定(214)是否满足以下条件Number_of_packets_lost>=%Packet_Loss_Threshold)x avg_ppf,其中avg_ppf等于由视频解码器20所接收的每帧的包的平均数目。视频解码器20能够通过连续地确定由视频编码器2所接收的每一巾贞中的包的数目而估计avg_ppf的值。如果从最后发送PLI起已存在较高数目的遗失包,使得遗失包的数目超出阈值(其如上文所示也可基于avg_ppf),那么视频解码器20可向视频编码器2发送另一 PLI消息以起始全巾贞内刷新序列(218)。视频解码器20还可将Number_of_packets_lost的值重设为零。在一个方面中,在发送PLI之前,视频解码器20还可执行图9所示的方法以确定先前PLI是否已在一个往返行进时间窗口内被 发送,且可在为此情况时制止发送另一 PLI,如先前所描述。然而,如果视频解码器20确定从最后PLI的发射起遗失包的数目未超出阈值,那么视频解码器20可向视频编码器2发送GNACK而非PLI (216)。GNACK可识别具有错误(或已遗失)的特定包。在一些状况下,视频编码器2可接着使用与在GNACK中所识别的包相关联的序列号来执行更新帧内刷新速率的增强型方法,例如图8所示的方法。鉴于以上描述和图9到图10所示的方法,在一个方面中,例如视频解码器20的视频解码器可检测到与从例如视频编码器2的视频编码器所发送的经编码视频数据相关联的至少一个错误。视频解码器20可确定用于视频解码器20与视频编码器2之间的数据通信的往返行进时间,确定视频解码器20向视频编码器2最后发送指示由视频解码器20所检测的先前错误的反馈消息时的最后发送时间,且将当前时间与最后发送时间和往返行进时间的和进行比较。基于所述比较,视频解码器20可确定是否向视频编码器2发送指示由视频解码器20所检测的所述至少一个错误的第二反馈消息。在一些状况下,视频解码器20可在当前时间超出最后发送时间和往返行进时间的和的情况下发送第二反馈消息,且可将最后发送时间设定为等于当前时间。确定往返行进时间可包括基于在视频解码器20与视频编码器2之间所交换的至少一个消息而测量或估计往返行进时间。在一些状况下,视频解码器20可从视频编码器2接收经编码视频数据,且可至少通过在由视频解码器解码经编码视频数据后便检测至少一个解码错误来检测所述至少一个错误。在一个方面中,视频解码器20可至少通过检测包遗失而检测所述至少一个错误。在检测到包遗失后,视频解码器20便可递增遗失包的计数,将遗失包的计数与阈值进行比较,且在遗失包的计数超出阈值的情况下且在当前时间超出最后发送时间和往返行进时间的和的情况下向视频编码器2发送第二反馈消息。如果遗失包的计数未超出阈值,那么视频解码器20可向视频编码器2发送指示包遗失的另一类型的反馈消息。在一些状况下,在向视频编码器2发送第二反馈消息后,视频解码器2便可将遗失包的计数设定为等于零。所述阈值可至少部分基于包遗失阈值和每帧的包的平均数目。本发明中所描述的技术可实施于通用微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它等效逻辑装置中的一者或一者以上内。因此,如本文中所使用的术语“处理器”或“控制器”可指代前述结构中的任一者或一者以上或适于实施本文中所描述的技术的任何其它结构。本文中所说明的各种组件可通过硬件、软件、固件或其任何组合的任何合适组合来实现。在诸图中,各种组件经描绘为单独的单元或模块。然而,参看这些图而描述的各种组件中的全部或若干者可集成为共同硬件和/或软件内的组合式单元或模块。因此,将特征表示为组件、单元或模块希望为了易于说明而强调特定功能特征,且未必要求通过单独的硬件或软件组件来实现此类特征。在一些状况下,各种单元可实施为由一个或一个以上处理器执行的可编程过程。本文中描述为模块、装置或组件的任何特征可一起实施于集成逻辑装置中或单独地实施为离散但可交互操作的逻辑装置。在各个方面中,此类组件可至少部分形成为一个或一个以上集成电路装置(其可统称为集成电路装置),例如集成电路芯片或芯片组。此电路可提供于单一集成电路芯片装置中或多个可交互操作的集成电路芯片装置中,且可用于各种图像、显示、音频或其它多媒体应用程序和装置中的任一者中。在一些方面中,例如,此类组件可形成例如无线通信装置手持机等移动装置的一部分。如果以软件实施,那么可通过包 含具有指令的代码的计算机可读数据存储媒体而至少部分地实现所述技术,所述指令在由一个或一个以上处理器执行时执行上文所描述的方法中的一者或一者以上。计算机可读媒体可形成可包括封装材料的计算机程序产品的一部分。计算机可读媒体可包含随机存取存储器(RAM)(例如,同步动态随机存取存储器(SDRAM))、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、嵌入式动态随机存取存储器(eDRAM)、静态随机存取存储器(SRAM)、快闪存储器、磁性或光学数据存储媒体。作为替代或另外,可通过计算机可读通信媒体而至少部分地实现所述技术,计算机可读通信媒体携载或传送呈指令或数据结构的形式的代码且可由一个或一个以上处理器存取、读取和/或执行。可将任何连接适当地称为计算机可读媒体。举例来说,如果使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)或例如红外线、无线电和微波等无线技术而从网站、服务器或其它远程源发射软件,那么同轴电缆、光纤电缆、双绞线、DSL或例如红外线、无线电和微波等无线技术包括于媒体的定义中。上文的组合也应包括于计算机可读媒体的范围内。所利用的任何软件可由一个或一个以上处理器执行,例如一个或一个以上DSP、通用微处理器、ASIC、FPGA或其它等效集成或离散逻辑电路。本发明中已描述各个方面。这些和其它方面在所附权利要求书的范围内。
权利要求
1.一种方法,其包含 通过视频解码器而检测与从视频编码器所发送的经编码视频数据相关联的至少一个错误; 确定用于所述视频解码器与所述视频编码器之间的数据通信的往返行进时间; 确定所述视频解码器向所述视频编码器最后发送指示由所述视频解码器所检测的先前错误的反馈消息时的最后发送时间; 将当前时间与所述最后发送时间和所述往返行进时间的和进行比较;以及基于所述比较,确定是否向所述视频编码器发送指示由所述视频解码器所检测的所述至少一个错误的第二反馈消息。
2.根据权利要求I所述的方法,其中确定是否向所述视频编码器发送所述第二反馈消息包含 在所述当前时间超出所述最后发送时间和所述往返行进时间的所述和的情况下发送所述第二反馈消息;以及 将所述最后发送时间设定为等于所述当前时间。
3.根据权利要求I所述的方法,其中确定所述往返行进时间包含基于在所述视频解码器与所述视频编码器之间所交换的至少一对消息而测量或估计所述往返行进时间。
4.根据权利要求I所述的方法,其进一步包含从所述视频编码器接收所述经编码视频数据,且其中检测所述至少一个错误包含在由所述视频解码器解码所述经编码视频数据后便检测至少一个解码错误。
5.根据权利要求I所述的方法,其中检测所述至少一个错误包含检测包遗失,且其中所述方法进一步包含 在检测到所述包遗失后,便递增遗失包的计数; 将遗失包的所述计数与阈值进行比较; 如果遗失包的所述计数超出所述阈值,且如果所述当前时间超出所述最后发送时间和所述往返行进时间的所述和,那么向所述视频编码器发送所述第二反馈消息;以及 如果遗失包的所述计数未超出所述阈值,那么向所述视频编码器发送指示所述包遗失的另一类型的反馈消息。
6.根据权利要求5所述的方法,其进一步包含 在向所述视频编码器发送所述第二反馈消息后,便将遗失包的所述计数设定为等于零。
7.根据权利要求5所述的方法,其中所述阈值至少部分基于包遗失阈值和每帧的包的平均数目。
8.一种装置,其包含 存储装置;以及 一个或一个以上处理器,其耦合到所述存储装置且经配置以 检测与从视频编码器所发送的经编码视频数据相关联的至少一个错误; 确定用于所述装置与所述视频编码器之间的数据通信的往返行进时间; 确定所述装置向所述视频编码器最后发送指示由所述装置所检测的先前错误的反馈消息时的最后发送时间;将当前时间与所述最后发送时间和所述往返行进时间的和进行比较;以及基于所述比较,确定是否向所述视频编码器发送指示由所述装置所检测的所述至少一个错误的第二反馈消息。
9.根据权利要求8所述的装置,其中所述一个或一个以上处理器经配置以至少通过以下操作而确定是否向所述视频编码器发送所述第二反馈消息在所述当前时间超出所述最后发送时间和所述往返行进时间的所述和的情况下发送所述第二反馈消息,以及将所述最后发送时间设定为等于所述当前时间。
10.根据权利要求8所述的装置,其中所述一个或一个以上处理器经配置以至少通过基于在所述装置与所述视频编码器之间所交换的至少一对消息而测量或估计所述往返行进时间而确定所述往返行进时间。
11.根据权利要求8所述的装置,其中所述一个或一个以上处理器进一步经配置以从所述视频编码器接收所述经编码视频数据,且其中所述一个或一个以上处理器经配置以通过在由所述装置解码所述经编码视频数据后便检测至少一个解码错误而检测所述至少一个错误。
12.根据权利要求8所述的装置,其中所述至少一个错误包含包遗失,且其中所述一个或一个以上处理器进一步经配置以 在检测到所述包遗失后便递增遗失包的计数; 将遗失包的所述计数与阈值进行比较; 如果遗失包的所述计数超出所述阈值,且如果所述当前时间超出所述最后发送时间和所述往返行进时间的所述和,那么向所述视频编码器发送所述第二反馈消息;以及 如果遗失包的所述计数未超出所述阈值,那么向所述视频编码器发送指示所述包遗失的另一类型的反馈消息。
13.根据权利要求12所述的装置,其中所述一个或一个以上处理器进一步经配置以在向所述视频编码器发送所述第二反馈消息后便将遗失包的所述计数设定为等于零。
14.根据权利要求12所述的装置,其中所述阈值至少部分基于包遗失阈值和每帧的包的平均数目。
15.根据权利要求8所述的装置,其中所述装置包含无线通信装置手持机。
16.根据权利要求8所述的装置,其中所述装置包含一个或一个以上集成电路装置。
17.一种装置,其包含 用于检测与从视频编码器所发送的经编码视频数据相关联的至少一个错误的装置;用于确定用于所述装置与所述视频编码器之间的数据通信的往返行进时间的装置;用于确定所述装置向所述视频编码器最后发送指示由所述装置所检测的先前错误的反馈消息时的最后发送时间的装置; 用于将当前时间与所述最后发送时间和所述往返行进时间的和进行比较的装置;以及基于所述比较,确定是否向所述视频编码器发送指示由所述装置所检测的所述至少一个错误的第二反馈消息的装置。
18.—种包含指令的计算机可读媒体,所述指令用于致使一个或一个以上处理器 通过视频解码器而检测与从视频编码器所发送的经编码视频数据相关联的至少一个错误;确定用于所述视频解码器与所述视频编码器之间的数据通信的往返行进时间; 确定所述视频解码器向所述视频编码器最后发送指示由所述视频解码器所检测的先前错误的反馈消息时的最后发送时间; 将当前时间与所述最后发送时间和所述往返行进时间的和进行比较;以及基于所述比较,确定是否向所述视频编码器发送指示由所述视频解码器所检测的所述至少一个错误的第二反馈消息。
全文摘要
本发明涉及响应于错误反馈的视频刷新自适应算法。大体来说,本发明涉及用于响应于接收到由视频解码器所提供的错误反馈而自适应地确定用于对视频单元(例如,帧)序列内的视频数据区段(例如,宏块)进行帧内编码的速率的技术。一个实例方法包括从视频解码器接收指示与经编码视频数据相关联的错误的反馈;以及在接收到所述反馈后,便确定用于对视频单元序列内的每一视频单元的规定数目的视频数据区段进行帧内编码的速率,其中一个视频单元内的视频数据区段的帧内编码独立于所述序列内的其它视频单元内的视频数据区段的编码。
文档编号H04N7/50GK102857757SQ20121029884
公开日2013年1月2日 申请日期2009年4月6日 优先权日2008年4月7日
发明者尼古拉·康拉德·内波穆塞诺隆, 格尼恩·考尔·卡努加 申请人:高通股份有限公司