使用联合抖动‑帧缓冲区的视频解码及渲染的制作方法

文档序号:11880972阅读:269来源:国知局
使用联合抖动‑帧缓冲区的视频解码及渲染的制作方法与工艺

本发明涉及视频编码及解码,更具体地,涉及使用联合抖动-帧缓冲区的视频解码及渲染。



背景技术:

数字视频位流可被编码后有效地把视频压缩成数字位流,所述数字位流可存储于非瞬时数字媒介或通过有限带宽的通信信道进行流传输。然而,在视频位流的传输或存储过程中,可能会发生丢包或其他错误,从而导致所述位流解码的错误。可用的信道带宽不时改变的情况也属常见,导致实时视频传输的问题。网络传播的变化可能会导致跨网接收的数据包信号产生抖动,即延迟时间的变化,其测量为数据包的延迟随时间的变化性;而在渲染前,所述抖动应予减轻。



技术实现要素:

有鉴于此,本发明公开了使用联合抖动-帧缓冲区的视频解码及渲染的系统、方法和装置的各个方面。

一方面,本发明实施例提出一种用计算设备在解码视频位流时减少抖动的方法,包括:

在所述计算设备中,接收所述视频位流中一个编码帧所关联的一个或多个数据包;

将所述编码帧所关联的所述一个或多个数据包存储至所述计算设备的一个配置为循环缓冲区的存储器;

在判定所述编码帧所关联的所有数据包都已存储至所述循环缓冲区后,立即解码所述编码帧;

以一个快于实时的速度渲染所述解码帧。

另一方面,本发明实施例提出一种用于在视频位流中减少抖动的装置,包括:

一个存储器,其包括一个构造为循环缓冲区的存储空间用以接收所述视频位流中一个编码帧所关联的一个或多个数据包;

一个处理器,配置用于执行存储在所述存储器中的指令,以:

接收所述视频位流中一个编码帧所关联的一个或多个数据包;

将所述编码帧所关联的所述一个或多个数据包存储至所述存储器;

在判定所述编码帧所关联的所有数据包都已存储至所述循环缓冲区后,立即解码所述编码帧;

以一个快于实时的速度渲染所述解码帧。

另一方面,本发明实施例提出一种用于在解码视频位流时减少抖动的系统,包括:

一个前向纠错解码器;

一个视频解码器,配置用以:

接收所述视频位流中一个编码帧所关联的一个或多个数据包;

将所述编码帧所关联的所述一个或多个数据包存储至一个循环缓冲区;

在判定所述编码帧所关联的所有数据包都已存储至所述循环缓冲区后,立即解码所述编码帧;

一个渲染器,配置用以渲染所述解码帧,其特征在于,所述渲染以一个快于实时的速度进行。

本发明的上述及其他方面,将通过对以下实施例、所附权利要求书和附图的详细描述。

附图说明

本发明在结合附图阅读时,可以从以下的详细描述中得到最好的理解。需要强调的是,根据通常的做法,附图的各种特征不是按比例的。相反,为解释清楚,所述各种特征的尺寸被任意地放大或缩小。本发明的公开材料提到所附附图时,类似的参照数字在所有视图中指代类似的部分。在附图中:

图1是依本发明公开的实施例提供的一个视频编码及解码系统的结构示意图;

图2是依本发明公开的实施例提供的一个视频位流分解的结构示意图;

图3是依本发明公开的实施例提供的一个视频编码器/压缩系统的结构示意图;

图4是依本发明公开的实施例提供的一个视频解码器/解压系统的结构示意图;

图5是依本发明公开的实施例提供的展示使用循环缓冲区的在视频解码流程中减少抖动的操作的流程图;

图6是依本发明公开的实施例提供的展示一个帧缓冲区的操作的流程图;

图7是依本发明公开的实施例提供的展示一个帧缓冲区的操作的流程图;

图8A是依本发明公开的实施例提供的一个使用单独的抖动缓冲区和帧缓冲区的用于视频解码处理的系统的结构示意图;

图8B是依本发明公开的实施例提供的一个使用循环缓冲区的用于视频解码处理的系统的结构示意图;

图9是依本发明公开的实施例提供的一个循环缓冲区的结构示意图。

具体实施方式

数字视频可以被用于娱乐、视频会议、广告和通常的信息共享。用户对数字视频质量的期望会很高,因为用户希望在带宽有限的共享互联网传播的视频与在专用有线频道传播的视频具有同样高的空间和时间质量。例如,数字视频编码可以压缩数字视频的位流,以允许高质量的数字视频在具有有限带宽的网络进行传输。例如,数字视频质量可以定义为输出的解压及解码的数字视频在何种程度上与输入的数字视频匹配。

视频编码和解码统合各种技术用以压缩和解压数字视频流,得以在有限带宽能力的网络中传输高质量的数字视频流。这些技术可以将数字视频流处理为一系列的数字数据块,并处理这些数据块以压缩用于传输或存储,并且在收到数据块后,解压缩所述数据块以重建原始数字视频流。

为了消除有限带宽导致的抖动和减少延迟,传统的视频网络应用采用数据包抖动缓冲区,而其会在系统中引入一个恒常的延迟。本发明公开的各方面可以联合数据包抖动缓冲区和专用的帧缓冲区,以联合消除抖动并减少延迟。在一些实施例中,数据包抖动缓冲区采用循环缓冲区数组,数组中每个循环缓冲区承载某个单帧所关联的一个或多个数据包。当所有的数据包——如属于所述单帧的所有必需的数据包——被接收时,循环缓冲区立即将它们传送到一个解码器进行解码。经解码的各帧(解码帧)被分配一个时间戳,并进一步被发送到一个渲染器的渲染缓冲区数组。基于当前帧和一个紧接的先前帧(前临帧)之间的时间戳差异,渲染器在渲染缓冲区数组中以稍微快于(例如,1%或3%)实时显示时间的速度渲染帧。

本文公开了使用循环缓冲区(本文中也称为“环形缓冲区”)的、用于解码及编码具有多帧的视频流的系统、装置和方法。解码时,解码器可从编码器接收数据包,并将它们存储到一个循环缓冲区。循环缓冲区可存储数据包,直到收到包括一个完整帧的数据包。在循环缓冲区存储多个部分或完整的帧,可以移除抖动,并通过有效聚合完整的帧来允许前向纠错继续进行且尽量减少延迟。

本发明公开的实施例的各方面,可以通过对视频位流的数据包执行前向纠错(Forward Error Correction,FEC),以允许经压缩的视频位流在“嘈杂”或易发潜在错误的网络中传输。所述各方面可以将FEC包添加到视频位流,以允许检测和校正丢失或损坏的数据包。通过用循环缓冲区接收经FEC保护的视频位流的数据包,所述各方面可以有效地聚合属于该视频位流的某个帧的所有数据包,并将待FEC解码的帧发出。

在某些情况下,FEC可以用一个帧的其他数据包重建该帧丢失或损坏的数据包而无需重传数据包,从而减少往返延迟。在其他情况下,丢失或损坏的数据包不能被FEC重建。在这些情况下,丢失或乱序的数据包可以由循环缓冲区检测到——循环缓冲区在其中具有最先帧编号的帧尚未完整时,收到了一个数据包,其来自的帧所具的帧编号却先于所述最先帧的帧编号。这意味着,要么数据包在传输中丢失了,要么数据包被乱序发出。当这种情况发生时,所公开实施例的各方面可以暂停所述帧从循环缓冲区到FEC解码器的传输。帧传输可以暂停至所述最先帧编号所关联的丢失数据包接收到或者后续帧完成为止。如果在后续帧完成前接收到所述最先帧编号所关联的丢失数据包,则可将所述最先帧发送到FEC解码器。如果在后续帧所关联的所有数据包都收到后,循环缓冲区仍未收到丢失的数据包,则其帧编号先于所述完整后续帧的不完整的帧可被删除,而完整的后续帧可被发送到FEC解码器。

丢弃具有不完全或损坏的数据包的帧,可以通过消除视频数据重传的需求来提高视频编码和解码的性能。在需要重传时,可从解码器通过网络传递一条消息给编码器,然后编码器可以重发所丢失的帧。这种消息传讯和数据重传可能导致解码视频流中的——例如——中断和延迟。所公开实施例的各方面丢弃不完整的帧而无需重发数据,从而避免了往返延迟。

有个问题是,解码器在后来执行帧间预测时可能需要被丢弃的帧。所公开实施例的各方面可以避免这种情况,例如,通过在编码器端仅使用解码器缓冲区内的良参考帧,使得所丢弃的帧不会被帧间预测使用。解码器缓冲区内的帧是否被成功重建可由——例如—-循环缓冲区和解码器来确定,并可由反向信道消息通告编码器。

图1是视频编码和解码系统10的示意图,图中本发明的一些方面可以实施。在一个示例中,计算设备12可以包括硬件的内部配置,包括一个处理器如中央处理单元(CPU)18和一个数字数据存储器如存储器20。例如,CPU 18可以是用于控制计算设备12的控制器,也可以是微处理器、数字信号处理器、场效可编程逻辑门阵列(FPGA)、布置于定制的专用集成电路(ASIC)上的离散电路元件或者任意其他数字数据处理器。例如,CPU 18可以通过存储器总线、电线、电缆、无线连接或任意其他连接连接到存储器20。存储器20可以作为或包含只读存储器(ROM)、随机存取存储器(RAM)、光存储器、磁存储器诸如磁盘或磁带、非易失性存储卡、云存储,或者任意其他合适的数字数据存储设备或设备的方式或组合。存储器20可存储CPU 18使用的数据和程序指令。计算设备12也有其他合适的可能的实现方式。例如,计算设备12的处理可以分布在以多个网络16通信的多个设备上进行。图1中,计算设备12可以是一个编码计算设备,即包括一个编码器的计算设备。如下文详述,编码计算设备12可以结合编码器元件300和可结合硬件和软件元件的流程及其关联的算法,以实现所述编码设备12。

在一个实例中,网络16可以连接计算设备12和计算设备14,用于编码和解码视频流。例如,所述视频流可以在计算设备12上进行编码,经编码的视频流可以在计算设备14上解码。网络16可以包括任意一个或多个适于即时应用的网络,诸如有线或无线的局域或广域网、虚拟专用网、蜂窝电话数据网络,或任意其他有线或无线的,对硬件、软件、通信协议的配置,以适用于图例中的从计算设备12向计算设备14传送视频位流,并从计算设备14传送关于所述网络的参数至计算设备12。

计算设备14可以包括CPU 22和存储器24,类似于以上讨论的系统10的组件。例如,如下文详述,计算设备14可以是一个解码计算设备14,其结合解码器元件400和可结合硬件和软件元件的流程及其关联的算法,以实现所述解码设备14,且配置用于显示视频流。显示器25可以连接到计算设备14,且可以有各种实现方式,包括液晶显示器(LCD)、阴极射线管(CRT)、有机或非有机发光二极管显示器(LED)、等离子体显示器、或任意其他用以向用户显示机器可读的视频信号的机制。例如,计算设备14可配置用于显示由计算设备14的解码器解码的所述视频位流的渲染。

编码器和解码器系统10有其他可能的实施方式。除了计算设备12和计算设备14,图1还展示了额外的计算设备26、28,其分别具有一个或多个CPU30、34及存储器32、36。这些计算设备可包括服务器,以及移动电话,移动电话也可以诸如创建、编码、解码、存储、转发或显示数字视频流。这些计算设备在处理能力和存储器可用性方面可具有不同的能力,包括用于创建视频的设备,如视频摄像机,和用于显示视频的设备。

图2展示的是待编码及随后解码的视频流200的结构示意图。视频流200可以包括视频序列202。视频序列202是视频流在时间上连续的子集,也称为图像组(GOP)。视频序列202可以包括多个相邻的视频帧204。尽管图中数帧204只描绘了四个帧,视频序列202可包括任意数目的数个帧。数帧204的单个实例表示为单帧206。进一步划分单帧206可以产生一系列的区块208。在本例中,区块208可以包含对应于单帧206内的一个N×M像素域的数据,比如对应像素的亮度和色度数据。区块208可以是任意合适的尺寸,例如128×128像素组或所述像素组中的任意矩形子集。

图3是依照公开的实施方式展示的编码器300的框图。编码器300可在计算设备中实现,如计算设备12,并可以使用硬件元件或以流程算法为形式的软件,而上述算法包括一系列存储于存储器18的、构建成在CPU 18上执行的软件模块。编码器300可以编码输入视频流200。编码器300包括数个级来执行前向路径的各个功能,以产生经编码和/或压缩的位流322:帧内预测级302、模式决定级304、帧间预测级306、变换及量化级308、滤波级314和熵编码级310。编码器300还可以包括一个重建路径,以重建用于预测和编码未来区块的帧。在图3中,编码器300包括逆量化及逆变换级312和用以存储视频数据多个帧的多帧存储器316,以重建用于预测的区块。编码器300的其他变体结构也可用于编码视频流200。

视频流200用于编码时,其中每个帧(例如图2中的单帧206)以区块为单位进行处理。每个区块可以从左上方的区块开始,以光栅扫描的顺序单独进行处理。在帧内预测级302,针对视频流200的区块,帧内预测的残差区块可被确定。通过检查先前处理的相邻区块以确定所述相邻区块的像素值是否类似于当前区块,帧内预测可以预测区块的内容。因为视频流200以光栅扫描顺序进行处理,光栅扫描顺序中领先于当前区块出现的区块可用于处理所述当前区块。光栅扫描顺序中出现于给定区块之前的区块之所以可用于帧内预测,是因为它们也可在解码器中使用,鉴于它们也将首先被重建。如果相邻区块与当前区块足够相似,所述相邻区块可被用作预测区块,并在步骤318中从当前区块中减去,以形成残差区块,并且表示当前区块是帧内预测的信息可以包含在所述视频位流里。

视频流200也可以在帧间预测级306进行帧间预测。帧间预测包含形成残差区块,其通过从时间数个帧转换像素以形成可从当前区块中减去(步骤318)的预测区块。时间数个帧可存储于帧存储器316并在帧间预测级306被访问,以形成可以传递给模式决定级304的残差区块——在级304中,帧内预测产生的残差区块可以和帧间预测产生的残差区块进行比较。模式决定级304可确定用何种预测模式——帧间或帧内——来预测当前区块。例如,在某些实施方式中,可以使用率失真值(rate distortionvalue)来确定使用何种预测模式。

率失真值的确定,可以通过计算用特定编码参数(例如预测模式)编码的视频位流中每单位时间的位元的数目,即位率,并结合计算输入视频流的区块和解码视频流的时间上和空间上相同的区块之间的差异。因为编码器300是“有损”的,所述解码视频流区块的像素值可以不同于所述输入视频流区块的像素值。例如,为了确定最佳的参数值,可以变化编码参数以比较相应的率失真值。

在相减步骤318中,由模式决定级304确定的残差区块可从当前区块中减去,并传递到变换及量化级308。由于残差区块的值可以小于当前区块的值,变换及量化后的残差区块具有的值可以比变换及量化后的当前区块少,因而可以在视频位流中通过较少的变换系数来表示。基于区块的变换的实例包括Karhunen-Loève变换(“KLT”),离散余弦变换(“DCT”)和奇异值分解变换(“SVD”),仅举几例。在一个实施例中,DCT将区块变换到频域。在DCT变换的例子中,变换系数的值是基于空间频率,直流系数(DC系数)或其他最低频率的系数在矩阵的左上角,最高频率的系数在矩阵的右下角。

变换和量化级308转换所述变换系数为离散量子值,它可被称为量化变换系数。量化可以减少以变换系数代表的离散状态的数目,同时少量降低图像质量,如果量化是在空间域而不是变换域中进行的话。量化后的变换系数可以通过熵编码级310进行熵编码。熵编码是一种可逆的、无损的算术编码方案,它可以减少视频位流中位元的数目,并在解码时不会在所述位流中引起变化。熵编码后的系数与其他用于解码所述区块的信息一起,诸如使用的预测类型、运动矢量、量化器的值和滤波强度等,被输出为压缩的位流322。

图3虚线所示的重建路径,可用于帮助确保编码器300和解码器400(参照下文图4)都使用相同的基准帧来形成帧内预测区块。重建路径执行的功能类似于下文详述的解码过程所执行的功能,包括:在逆量化及逆变换级312进行去量化和逆变换所述量化的变换系数,并在加法步骤320中与模式决定级304产生的残差区块一起,创建重建区块。环路滤波级314可应用于重建的区块以减少失真,例如区块效应,因为解码器400可以在过滤所述重建的视频流之前对其采样以形成基准帧。例如,图3展示,环路滤波级314发送环路滤波参数至熵编码器310,与输出的视频位流322进行组合,以允许解码器400使用和编码器300相同的环路滤波参数。

编码器300的其他变体可用于编码压缩的位流322。编码器300的各级可以以不同的顺序进行处理,或者可以无需改变其目的而组合成更少的级或分拆为更多的级。例如,不基于变换的编码器300可以无需变换级而直接量化残差区块信号。在另一实施例中,编码器300可以将变换和量化级308拆分为单一的步骤。

图4是依公开实施方式的各方面描述的解码器400的框图。在一个实施例中,解码器400可以在计算设备14上实现。解码器400包括以下级来执行各种功能,以从压缩位流322产生输出视频流418:熵解码级402,逆量化及逆变换级404,帧内预测级408,帧间预测级412,加法器410,模式决定级406和一个帧存储器414。解码器400的其他结构变体也可以用于解码压缩位流322。例如,逆量化及逆变换级404可以被表示为两个独立的级。

接收的视频位流322可以通过熵解码器402进行熵解码。熵解码器402执行编码器300在级310执行的熵编码的逆过程,以还原所述视频位流到熵编码前的原始状态。所述还原的视频位流可以进行逆量化和逆变换,类似于逆量化及逆变换级312的方式。逆量化及逆变换级404可以还原视频位流的残差区块322。注意,由于编码器300和解码器400能表示有损编码,所述还原的残差区块的像素值可不同于输入视频流200中相同的时间和空间位置的残差区块。

在逆量化及逆变换级404还原残差区块之后,通过在加法器410中加入所述残差区块的预测区块,所述视频位流的残差区块可被大致还原到其预测前的状态。加法器410从模式决定级406处接收用于加到残差区块的所述预测区块。模式决定级406可经由编码器300解释所述输入视频位流322包含的参数,例如,确定是使用帧内还是帧间预测以还原视频位流322的区块。模式决定级406对输入视频位流322也可以执行计算来确定对特定的区块使用何种预测。作为解码器,通过对相同的数据执行相同的计算,模式决定级406可以针对预测模式做出与编码器300相同的决定,从而减少了为指示要用的预测模式而在视频位流中传输位元的需要。

模式决定级406可以同时从帧内预测级408和帧间预测级412接收预测区块。因为帧内预测区块以光栅扫描顺序处理,帧内预测级408可以从加法器410输出的所述还原视频流接收区块以用作预测区块;并且由于帧内预测使用的区块是编码器300在还原残差区块之前以光栅扫描顺序选择的,帧内预测级408可以按需提供预测区块。如上面关于编码器300的讨论,帧间预测级412从储存在帧存储器414的帧中创建预测区块。帧存储器414从环路滤波器416接收经其滤波的还原区块。环路滤波可以去除基于区块的预测技术所引入的区块效应,如本文所述的编码器300和解码器400所用。

帧间预测级412可以使用帧存储器414里经环路滤波器416滤波的帧,以使用编码器300用过的相同数据形成预测区块。尽管使用有损压缩,对预测使用相同的数据可使解码器400重建的区块具有接近对应输入区块的像素值。模式决定级406从帧间预测级412接收的预测区块可以传递到加法器410,以还原视频位流322的区块。经环路滤波器416滤波后,还原的视频流418可以从解码器400输出。解码器400的其他变体可用于解码压缩位流322。例如,解码器400可以不经环路滤波级416产生输出视频流418。

根据所公开实施方式,图5所示的是用于解码一个视频位流的流程500的流程图。例如,流程500可以由一个解码计算设备14执行,以在解码视频位流322时减少抖动。图5中的流程图展示了包括在流程500里的若干步骤。实现流程500的步骤,可以包括在本文,或者多于或少于本文所述。例如,步骤可以组合或划分而改变执行的步骤的数目。流程500的所述步骤可以按本文包括的顺序或不同的顺序来执行,且仍然实现流程500的意图。流程500可以通过图8A、8B所示的各处理阶段进行,而图8A、8B将在紧邻的下文中描述,并在图5所示的流程500的语境中讨论。

图8A、8B是解码器800’和800的示意图。在图8A所示的解码器800’中,抖动缓冲区801被用于稳定所接收到的包含帧数据的数据包,而抖动减少后的帧被送到帧缓冲区803,并从那里输送信号到FEC解码器804。然而,同时使用抖动缓冲区801和帧缓冲区803可能会在随后送至FEC解码器804的信号中引入所不期望的延迟。

因此,图8B提供了一种更有利的方式,其仅用一个循环缓冲区802来缓冲数据包并将数据送入FEC解码器804,在此之后,经FEC解码的信号被送至视频解码器806和渲染器808。循环缓冲区802可以接收并暂存编码视频位流322的数帧204的数据包。循环缓冲区802可将编码视频位流数据的数帧204发送到FEC解码器804。所述FEC解码器可以检测并更正编码视频位流322丢失或损坏的数据包,并将编码视频位流数据的数帧204发送到视频解码器806。例如,视频解码器806可以是如图4所示的视频解码器。视频解码器806将解码的视频数据的帧发送到视频渲染器808,用以渲染并显示在一个——例如——操作时连接到计算设备14的显示器上。

在步骤510中,经编码的视频位流322中的数帧204所关联的一个或多个数据包在计算设备上接收。“接收”在本文可指输入、获取、读取、访问或以任何方式输入一个编码视频位流的行为。例如,所述已编码的视频位流可以是一个先前由计算设备12用编码器300进行编码、并经由网络16发送的视频位流。

在步骤520中,经编码的帧(编码帧)所关联的数据包被存储至所述计算设备的一个配置为循环缓冲区的存储器中。例如,数据包可存储至抖动缓冲区数组,而其可进一步包括两个或更多的循环缓冲区,并且各循环缓冲区都被配置用于在某个时间点存储单个编码帧所关联的数据包。循环缓冲区是所述数据包在汇集成编码帧时的专属存储空间,而通过在唯一的位置存储数据包,抖动在其中得以减少。

在步骤530中,循环缓冲区判断编码帧所关联的所有数据包是否已被存储。如果所有的数据包——如编码帧所关联的所有必需的数据包——已被存储,所述编码帧将在步骤540中被传递到解码器进行解码;否则流程返回至步骤510。所述解码器可以是一个视频解码器,或者可以包括串联的一个FEC解码器和一个视频解码器。解码时,每个帧都被分配一个显示时间戳,并一同储存在一个渲染器的渲染缓冲区中。渲染缓冲区可以实现为渲染缓冲区数组,其中数组的每个渲染缓冲区都具有在某个时间点存储解码帧的能力。

在步骤540中,渲染器将具有显示时间戳的解码帧在渲染缓冲区中以一个快于实时的速度渲染。例如,所述速度可被设定为从等待时间的角度来看的快于实时。例如,存储在渲染缓冲区数组中的解码帧以稍快于实时的速度渲染。所述速度的确定,可以基于当前解码帧所关联的显示时间戳与一个前临帧所关联的显示时间戳之间的差异。

图6是一个解码器将一个或多个帧204关联到所述一个或多个数据包的流程600的流程图。

图6开始于步骤602,通过检查所述收到的一个或多个数据包并将一个帧编号与所述收到的一个或多个数据包相关联。在数据包被编码器300构造时,它们被标记用以识别与之关联的帧。收到所述一个或多个数据包后,可以检查所述数据包,并确定与之关联的的帧的帧编号。在步骤602中,所述相关联的帧编号被检查并与当前存储在循环缓冲区802的帧的帧编号互相核对。如果所述相关联的帧编号小于或等于循环缓冲区所输出的末帧的帧编号(602:“是”),所述一个或多个数据包将在步骤604被丢弃,而流程600返回到流程500的步骤504。

如果所述相关联的帧编号大于循环缓冲区802所输出的末帧的帧编号(602:“否”),在步骤606中,循环缓冲区802可以检查网络并确定是否发生了网络错误。网络错误可包括丢包,而丢包可通过——例如——每一个包相关的包序列号被乱序接收来确定。网络错误也可以由网络16或计算设备12或14检测到并传递错误信息至循环缓冲区802。如果发生了错误(606:“是”),在步骤608中,循环缓冲区802都可以设置一个帧内请求标记,通过向编码器300发送带外消息的方式来请求重发丢失或损坏的数据。在此之后,流程600可以返回到流程500的步骤504。在步骤610中,流程600可以检查相关的帧编号,以确定与所述一个或多个数据包相关联的帧当前是否存储于循环缓冲区802。

图9是本文描述的循环缓冲区802的示意图,可用于帮助理解流程600其余的操作。循环缓冲区802包括多个帧,其存储于环/循环(或FIFO)缓冲区902;而循环缓冲区902可以起到合并图8A所示的抖动缓冲区801和帧缓冲区803的功能。循环缓冲区802包括从1到N的循环(帧)缓冲区902,每个循环缓冲区902可用以存储由帧编号标记的一个帧。每个循环缓冲区902包括多个数据包904,以P1到PM标记。循环缓冲区802可在多个循环缓冲区902中存储多个帧,并将接收到的数据包904添加到对应的循环缓冲区902。

回到图6,如果关联于所述一个或多个数据包的帧编号在循环缓冲区802中(610:“是”),则在步骤612中,由循环缓冲区802接收的、与当前存储在循环缓冲区802的帧编号相关联的所述一个或多个数据包,被存储于相应的循环缓冲区902。在步骤614中,所述循环缓冲区的相关标记被更新,以反映相关帧的状态。更新标记可包括“all_data_packets”标记和“this_frame_is_ready”标记,其表明每个帧在循环缓冲区802中的状态。循环缓冲区802可判断是否输出帧,至少部分地取决于所述标记的状态。更新标记后,流程600可以进行至步骤620来输出帧。

在步骤610中,如果确定相关的帧编号不在循环缓冲区802内(610:“否”),相关的帧编号将在步骤616被进一步检查,看它是否比循环缓冲区802内最先的帧编号还要先。这种情况可以是是因为——例如——数据包被乱序接收,或正在被重传。如果以上属实(616:“是”),说明与所述数据包相关联的帧已输出到FEC解码器804,则所述一个或多个数据包被丢弃(604)。然后流程600可以返回到流程500的步骤504。

在步骤616中,如果确定所述数据包并非比循环缓冲区802内最先的帧编号还要先(616:“否”),则在步骤620中,循环缓冲区802内最先的循环/帧缓冲区902被替换为新的、标有所述一个或多个数据包的相关帧编号的循环/帧缓冲区902。在步骤622中,所述一个或多个数据包904被存储于新的帧缓冲区902,并且在步骤624中,“all_data_packets”和“this_frame_is_ready”标记被重置或更新。然后流程600可以返回到流程500的步骤504。

回到图5,在步骤506中,流程500可以将帧从循环缓冲区802向FEC解码器804输出。图7是流程700的流程图,其用于根据所述一个或多个数据包的帧来判断是否将所述一个或多个帧从循环缓冲区802向FEC解码器804输出。步骤702将检查在步骤614和/或624中可能已被更新的更新标记的状态,以确定当前帧是否已准备好输出。如果当前帧已准备就绪(702:“是”),且如果之前或之后的更先的帧已被输出(702:“是”),则在步骤704中,所述帧被输出到FEC解码器804。输出该帧之后,流程700返回到流程500的步骤506。

如果当前帧尚未就绪(702:“否”),则在步骤706中,流程700检查标记,以确定帧编号+1的或后一个新的帧(后临帧)是否已准备好输出。如果后临帧准备就绪(706:“是”),则在步骤708中输出该帧,而流程700返回到流程500的步骤506。如果后一个新帧没有输出就绪(706:“否”),则在步骤710中,流程进行检查,以判断预设的时间期限是否已到期。如果预设的时间期限已到(710:“是”),则计时器复位、流程700结束等待,且在步骤712中,对帧缓冲区内的帧按从先到后的顺序进行检查,以确定它们是否输出就绪。如果步骤714找到了准备就绪的帧(712:“是”),则其中最先的帧被输出到FEC解码器804,而流程700返回到流程500的步骤506。如果预设的时间期限未到(710:“否”)或者未找到准备就绪的帧(712:“否”),则流程700返回到流程500的步骤506。

图8B展示一个促进平滑渲染和减少延迟的设计。某些视频网络应用(如图8A)可以采用一个位流(数据包)抖动缓冲区801来平滑网络抖动,即网络延迟的方差。然而,抖动缓冲区801在系统中引入了恒常的延迟。

在图8B和图9所示的设计中,循环缓冲区802结合了数据包抖动缓冲区801和专用的帧缓冲区803的功能,用于联合去除/减轻抖动及减少延迟。

数据包抖动/循环缓冲区802采用了一个循环缓冲区数组或多个循环缓冲区902,其中每个循环缓冲区902承载相当于一帧206的数据包。一旦循环缓冲区902中有了一个完整帧(如上所述),由数据包组合而成的完整帧206将被发送到视频解码器400进行解码。

解码器400尽可能快地解码所述位流,并将解码帧连带显示时间戳一起,推送到视频渲染器808的一个渲染缓冲区数组。

然后,渲染器808在它的渲染缓冲区中,以稍快于实时的速度(基于前临帧和当前帧之间的时间戳差异)渲染帧206,其中,“实时”与所述帧的显示速度有关。

上述编码和解码的实施例说明了一些示例性的编码和解码技术。然而,对用于权利要求中的这些术语,编码和解码可以意指压缩、解压、变换,或者任意其他对数据的处理或改变。

在本文中,用语“示例”或“示例性”用于表示充当实例、例子或说明。本文中描述为“示范性”的任何方面或设计,并不必然意味着优选或优于其他方面或设计。相反,用语“示例”或“示例性”的目的在于用具体的方式呈现一个概念。在本申请中使用的术语“或”,旨在表示包含性的“或”而不是排他性的“或”。即,除非另有指定,或从上下文清楚推断,“X包括A或B”旨在表示任何自然的包含性排列。也就是说,如果“X包含A;X包含B;或X包含A和B”,则“X包含A或B”在任何上述实例中都得以满足。此外,在本申请和所附的权利要求中使用的“一”和“一个”应被一般性地解释为表示“一个或多个”,除非另有所指,或从上下文中明确得知其针对于单一数目。此外,全文用语“一个实施例”或“一实施例”并非意指相同的实施例,除非如是描述。

计算设备12、14、26和/或28的实现方式,以及存储其上和/或由其执行的算法、方法、指令等,可以实现为硬件、软件或两者的任意组合。例如,所述硬件可以包括计算机、知识产权(IP)核心、专用集成电路(ASIC)、可编程逻辑阵列、光学处理器、可编程逻辑控制器、微代码、微控制器、服务器、微处理器、数字信号处理器或任意其他适合的电路。在权利要求中,术语“处理器”或单独或组合地包括任意上述硬件。术语“信号”和“数据”可互换使用。此外,计算设备12、14、26和/或28的各部分无须以相同的方式实现。

此外,例如,在一个实施例中,计算设备12、14、26和/或28可用通用计算机/处理器及计算机程序实现;且在执行时,所述计算机程序执行任意上述相应的方法、算法和/或指令。此外,例如,也可以另外使用专用计算机/处理器,而其可以包含专用硬件用于执行本文所述的任意所述方法、算法、或指令。

计算设备12、14、26和/或28可以,例如,在一个屏幕录制(screencasting)系统的计算机上实现。另外,计算设备12可以在服务器上实现,而计算设备14、26和/或28可以在独立于服务器的设备上实现,诸如手机或其他手持式通信装置。在这个例子中,计算设备12可以使用编码器300将内容编码为一个编码的视频信号,并发送所述编码的视频信号到通信设备。反过来,所述通信设备可以使用解码器400解码所述编码的视频信号。另外,通信设备也可以解码本地存储在所述通信设备上的内容,例如非由计算设备12传送的内容。计算设备12、14、26和/或28也可以有其他合适的实施方案。例如,计算设备14可以是大致固定的个人计算机而非便携通信设备,和/或包括编码器300的设备还可以包括解码器400。

此外,本发明的实施方式全部或部分可以以——例如,可从计算机可用或计算机可读介质访问的——计算机程序产品的形式存在。计算机可用或计算机可读介质可以是任意设备,例如,其有形地包含、存储、通信或传输所述程序以供任意处理器使用或与任意处理器连接。例如,所述介质可以是电子、磁性、光学、电磁、或半导体器件,也可以是其他合适的介质。

上述实施方式已经依序描述,以便容易理解、且不限制本发明。相反,本发明旨在覆盖包含在所附权利要求书的范围内的各种修改和等同布置,所附权利要求书的范围在法律范围内应被赋予最宽泛的解释,以包含所有上述修改和等同结构。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1