带反向信道消息管理的视频处理的方法和系统与流程

文档序号:11844838
带反向信道消息管理的视频处理的方法和系统与流程

本发明涉及视频编码及解码,更具体地,涉及针对实时传输使用反向信道消息的视频编码和解码。



背景技术:

数字视频位流可被编码后有效地把视频压缩成数字位流,所述数字位流可存储于非瞬时数字媒介或通过有限带宽的通信信道进行流传输。然而,在视频位流的传输或存储过程中,可能会发生丢包或其他错误,从而导致所述位流解码的错误。可用的信道带宽不时改变的情况也属常见,导致实时视频传输的问题。



技术实现要素:

有鉴于此,本发明公开了用计算设备解码视频位流的系统、方法和设备的各个方面,包括:

从一个编码计算设备接收用于带宽估计的信息;

根据所述接收到的用于带宽估计的信息,以一个反向信道消息控制器确定第一参数;

从所述反向信道消息控制器向所述编码计算设备传输所述第一参数;

从所述编码计算设备接收一个视频位流,其特征在于,所述视频位流用第二参数编码,其特征在于,所述第二参数是根据所述第一参数而确定;

解码所述视频位流。

另一方面,本发明实施例提出一种用于解码视频位流的设备,包括:

一个存储器;

一个处理器,其执行储存在所述存储器内的指令以:

从一个编码计算设备接收用于带宽估计的信息;

以一个反向信道消息控制器,确定关联于所述接收到的用于带宽估计的信息的第一参数;

从所述反向信道消息控制器向所述编码计算设备传输所述第一参数;

从所述编码计算设备接收一个视频位流,其特征在于,所述视频位流用第二参数编码,其特征在于,所述第二参数是根据所述第一参数而确定;解码所述视频位流。

另一方面,本发明实施例提出一种用计算设备编码视频位流的方法,包括:

向一个解码计算设备传输用于带宽估计的信息;

根据所述用于带宽估计的信息,从所述解码计算设备,接收包含第一参数的反向信道消息;

根据所述第一参数,以一个反向信道消息控制器确定第二参数;

根据所述第二参数,编码一个视频位流;

向所述解码计算设备传输所述已编码的视频位流。

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

附图说明

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

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

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

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

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

图5是依本发明公开的实施例提供的展示视频解码流程的流程图;

图6是依本发明公开的实施例提供的展示视频编码流程的流程图;

图7是依本发明公开的实施例提供的一个包括反向信道消息管理器的视频编码及解码系统的结构示意图;

图8是依本发明公开的实施例提供的一个用于确定位率的示例流程的示意图。

具体实施方式

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

视频编码和解码统合各种技术用以压缩和解压数字视频流,得以在有限带宽能力的网络中传输高质量的数字视频流。这些技术可以将数字视频流处理为一系列的数字数据块,并处理这些数据块以压缩用于传输或存储,并且在收到数据块后,解压缩所述数据块以重建原始数字视频流。这种压缩及解压序列可能是“有损”的;“有损”的意义是指所述解压的数字视频可能不完全匹配所述输入的数字视频。例如,这可以通过测量所述输入视频流的像素数据及对应的所述经编码、传输和解码的视频流的像素数据之区别来测定。一个数字视频流通过编码及解码所述数字视频流所引入的失真程度,可被认为是压缩程度的一个函数,从而所述解码视频的质量可被认为是所述传输带宽的一个函数。

本发明公开的实施例的各方面,可以通过调整所发送视频位流的位率以匹配其传输所经网络或信道的能力,允许经压缩的视频位流在“嘈杂”或易发潜在错误的网络中传输。所述各方面可以在传输压缩数字视频位流之前测试网络,通过发送一个或多个数据包到解码器并分析返回的数据包,以确定所述数字视频的最佳压缩比。所述各方面可以通过分析由所述解码器发送到所述编码器的包含有关网络的信息的数据包,周期性地重新测试网络。调节所述位率可以提高或降低相较于所述输入数字视频流的所述解码视频位流的所述空间和时间质量,其中较高的位率可以支持更高质量的数字视频。

本发明公开的实施例的各方面还可以通过在压缩视频位流中添加前向纠错(Forward Error Correction,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通信的多个设备上进行。

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

计算设备14可以包括CPU 22和存储器24,类似于以上讨论的系统10的组件。例如,计算设备14可配置用于显示视频流。连接到计算设备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。编码器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执行。图5中的流程图展示了包括在流程500里的若干步骤。实现流程500的步骤,可以包括在本文,或者多于或少于本文所述。例如,步骤可以组合或划分而改变执行的步骤的数目。流程500的所述步骤可以按本文包括的顺序或不同的顺序来执行,且仍然实现流程500的意图。

流程500开始于步骤502,接收——如在计算设备14——用于带宽估计的信息(例如在传送一个视频位流开始时的初始带宽估计)。例如,所述信息可以包括一个已编码的视频位流322,所述已编码的视频位流的一部分,或一个或多个随机数据包。所述随机数据包可以包括以随机数据人工分包的数据包。所谓“接收”,我们可指输入、获取、读取、访问或以任何方式接收一个编码视频位流的行为。例如,所述已编码的视频位流可以由计算设备12用编码器300进行编码,并经由网络16发送。用于初始带宽估计的信息可以包括,例如,在编码流程和解码流程500之间交换的呼叫及应答消息。例如,呼叫及应答消息可以是用于带宽估计的一系列用数据“填充”的数据包交换,所述数据包交换可以在建立呼叫前或建立呼叫后发生。例如,用于带宽估计的数据可以包括“虚拟”数据、随机数据或者真实的编码视频数据,如前两个视频帧;并且,所述数据在一个时间段内发送,所述时间段也可用于估计带宽。例如,呼叫及应答消息可以是伴随所述编码视频位流的带外数据包(out-of-band packets);所述编码视频位流的数据包各具有序列号、时间戳及一个以位元为单位的消息大小,所述消息大小基于一个变量“Psize”和一个预定的最大视频位率“Maxbitrate”,而“Maxbitrate”储存在与流程500相关联的配置文件中。

通过设置Psize,网络带宽可以在呼叫建立的过程中估计。当所述呼叫接通时,视频编码器可以用所估计的带宽开始初始编码所述视频位流,从而避免不合理地占用可用的网络带宽。这将呼叫及应答消息的使用降低到最低,从而防止了呼叫及应答消息在网络很慢时因短时间内发送过多数据包而拥塞所述网络。如果有足够数量的、包括呼叫及应答消息的数据包由编码计算设备12经网络16发送、并由解码计算设备14接收,呼叫及应答消息可被用来确定真实的网络带宽。公开实施例的各方面可以跟踪呼叫及应答消息,通过给每个数据包——包括呼叫及应答消息——分配一个唯一的包编号,从零开始、对每个视频流递增一。每个数据包——包括呼叫及应答消息——也可以包括一个时间戳,也从零开始并对每个发送的数据包递增,递增的分辨率至少是毫秒(ms),或者是关联于计算设备12或14的高分辨率计时器所允许的某个时间分辨率。

公开实施例的各方面可以创建两组呼叫及应答消息。例如,编码计算设备12可以创建一组25条呼叫消息并以约100毫秒的间隔发送。对于带宽比Maxbitrate更高的网络,所述网络带宽可估计为Maxbitrate。例如,继第一组25个数据包后,公开实施例的各方面可以等待约400毫秒后,发送第二组10个数据包。

发送和接收所述第一组和第二组数据包所需的时间可用于指示网络带宽。例如,一个100Kbps的网络可能要花费约一秒钟来传送包括在所述第一和第二组的35个数据包,假设每个包为400字节(Psize=400)。在包大小为1200字节(Psize=1200)时,同一个网络可能需要花费约三秒钟。发送和接收呼叫及应答消息包可以在视频流开始前执行,即在视频开始前处理完呼叫及应答消息之前,用户可能需要等待。

回到图5,流程500解码用于带宽估计的包含呼叫消息的信息,例如利用解码器400。当所述用于初始带宽估计的信息仅包括随机数据包时,该步骤可省略。在步骤504中,流程500可以用接收自步骤502的所述信息来确定第一参数。例如,流程500可以使用呼叫消息来确定第一参数(即,信道参数)。如上所述,每条呼叫消息在创建时可加盖时间戳。另外,流程500可以对每个包加盖一个额外的时间戳,用以指示它被接收到的时间。

由于音频和视频都占据同一网络带宽,公开实施例的各方面可以执行基于视频信道的动态带宽估计,并为音频增加预定带宽。例如,信道参数可以作为消息从解码计算设备14发送到编码计算设备12。视频位流322从编码计算设备12传送到解码计算设备14期间,解码设备14向编码计算设备12发送的消息可称为反向信道消息。公开实施例的各方面通过传输和处理反向信道消息来确定与网络带宽有关的网络参数,其可用于优化编码参数。

在启动时,流程500可以处在等待状态,随时准备接收作为第一视频位流322一部分的呼叫消息。流程500在接收到呼叫消息并在步骤504中确定第一信道参数后,流程500可以生成应答或确认(ACK)消息,并将它们生成为数据包,以从解码计算设备14传送到编码计算设备12。在步骤506中,流程500可以从反向信道消息控制器向所述编码计算设备传送确定于步骤504的第一参数。所述反向信道消息控制器的更多细节,可在与图7相关的进一步描述中找到。流程500可以用类似于传送呼叫消息包的技术来传送数据包,例如,连续发送生成的应答消息包,直到25个包已被发出或六秒钟已经过去。此时,所述解码计算设备可以,例如,暂停发送数据包;而所述编码计算设备可以用所述接收的应答消息包确定往返延迟,继而确定网络带宽及丢包率。

例如,在步骤506中,继暂停以允许所述编码计算设备确定网络带宽之后,解码计算设备14可以生成应答消息,创建并以一定的时间间隔(例如,以10毫秒的间隔)发送包含应答消息的数据包。一旦所述编码计算设备接收到所述应答消息包并估计出网络带宽和丢包状况,编码参数可以被重算,以反映所述的可用带宽、丢包率和往返延迟。根据所述的带宽、丢包率和往返延迟重算的编码参数,可以包括自适应编码长度(adaptive coding length)、FEC比率、视频编码器位率、空间分辨率(帧尺寸)、时间分辨率(帧率)。在编码计算设备12基于应答消息确定编码参数期间,所述编码计算设备可以暂停向解码计算设备14发送视频位流数据。在此期间,所述解码计算设备可以保持就绪状态,随时准备接收视频位流并进行解码。

流程500可以在步骤508接收视频位流。所述位流的编码,其编码位率可以通过初始带宽估计、所述第一参数或以上两者来确定。例如,所述视频位流可由编码计算设备12进行编码并传输到解码计算设备14。所述编码计算设备12能够用基于所述应答消息的编码参数生成所述视频流,而所述应答消息由解码计算设备14发送,其发送是响应于接收到所述视频位流的一部分或一些带外发送的随机数据包等。公开实施例的各方面可以调整所述编码参数以匹配网络带宽、丢包率和往返延迟,从而优化所述编码过程,以在给定的网络带宽、丢包率和往返延迟条件下,在解码设备14上提供最高质量的解码视频。

在步骤510中,流程500可以——例如,用解码器400——解码所述视频位流。所述视频流被解码后,流程500可以如上所述,基于接收到并解码的所述视频位流322的部分,继续确定网络参数。基于部分所述视频位流322的数据包上加盖的时间戳,通过间或确定网络参数,网络带宽在所述视频位流322的部分的接收期间所可能发生的变化可以被检测出来。例如,编码计算设备12可以是服务器,解码计算设备14可以是运动中的手机,而运动受不断变化的网络条件——包括网络带宽的变化——的影响。

在一些实施例中,解码器400可以从编码器300接收用所述第一参数编码的所述视频位流的第一部分(例如,“真实”的视频数据),然后解码所述视频位流的所述第一部分,并用反向信道消息控制器确定与所述视频位流的所述第一部分有关的第一参数。所述第一参数可从反向信道消息控制器发送到所述编码器300,作为反馈信息来控制所述编码器300。所述解码器400从所述编码器300接收所述视频流的第二部分并对其解码,其中所述视频流的所述第二部分使用第二参数编码。

当编码计算设备12正在传送编码的视频位流322,而其编码参数是基于比所述网络的实际带宽更高的期望带宽时,视频位流322可能无法足够快地传送,因而会增加网络延迟。这可以通过检测网络延迟来确定,而从网络延迟计算带宽是相当简单的。更困难的是检测到比所述预期带宽更高的实际带宽。如果没有可靠高效的方法来检测比预期带宽更高的实际带宽,解码器动态检测到的网络带宽就只能随着时间下降而永远不会上升。

带宽检测可以基于以下假设:如果预期带宽高于可用带宽,网络延迟将成比例地增加;而如果预期带宽低于可用带宽,网络延迟将不会增加。例如,如果预期带宽为200Kbps而可用带宽为100Kbps,传输一秒钟的视频将需要两秒钟,或者不得不丢弃一些数据包。如果预期带宽为200Kbps而可用带宽高于200Kbps,传输一秒钟的视频将需要一秒钟。这可以通过对视频位流322的数据包中包含的时间戳和视频位流322在解码处理设备14接收到时创建的本地时间戳作比较来确定。对应时间戳间的相对差异可以指示最高预期带宽是否已达到。

通过间或检测网络带宽的变化,公开实施例的各方面可以在所述视频位流的部分正在用反向信道消息传送的期间,自适应地响应网络带宽上升或降低的变化,其传送的速率高到足以克服网络带宽的变化而维持视频质量,又不因发送过多反向信道消息而过度降低带宽。这些方面可以在检测到网络带宽降低时降低解码参数——比如位率,并在网络延迟如预期时小量提高解码参数——比如位率。以这种方式,通过上述手段反复采样网络带宽,并每次在网络表现如预期时小量提高编码参数——如编码位率,所述网络的最高带宽可以在相当短的时间内确定下来。

公开实施例的各方面可以过滤所述对应时间戳间的相对差异,以滤除个体数据包到达时间的网络采样抖动(jitter)。由于该技术依赖于收到的时间戳和本地创建的时间戳之间的差异,而该差异受到网络采样抖动的影响,所述差异可能包括抖动产生的误差。例如,通过忽略一定小区间内的差异,一些技术可以滤除这些误差。在本例中,差异的小区间不视为过度占用所述网络。

流程500可以确定网络参数,例如,通过用一个滑动窗口(sliding window)执行带宽估计,而所述滑动窗口基于解码计算设备14的本地时间。所述窗口的长度可以是两秒或任意其他预定的窗口长度。

例如,可以计算实时传输协议(Real-Time Protocol,RTP)时间Tgap和预定的窗口时间Twindow的函数为一个带宽指标。带宽指标可被计算为Twindow与Tgap的比值,结果如下:(a)带宽指标小于1,表示因网络带宽不足引起的网络延迟上升。(b)带宽指标等于1,表示网络能够无碍传输所述视频。带宽有可能适应更高位率。(c)带宽指标大于1,表示数据包比实时更快地突发到达。这可能是网络拥塞正在缓解的指示。例如,这可能是文件下载被停止或带宽限制手段被解除的结果。数据包的突发到达也可能指示网络过度抖动(excessivelyjittery)。绝大多数网络抖动的条件下,带宽指标将接近1。

其他网络参数,诸如RTP时间和本地时间之间累积的时间差(Tdacc)和实际接收位率(Rbitrate),可用任何常规的方法来计算。例如,数据包的总数(Ptotal)及丢失的数据包的总数(Plost)可以通过以下步骤获得:用最末的RTP序列号减去最初的RTP序列号,并与接收到的包的计数作比较。Ptotal和Plost可以组合成丢包率Packetlossratio。

带宽估计之后,流程500可以返回到图5所示的步骤504。在步骤506中,步骤504确定的网络参数可以通过反向信道消息发送到编码计算设备12。所述网络参数可包括如上所述的带宽指标、Tdacc、Rbitrate和Packetlossratio。步骤510后,如果解码计算设备14仍在接收视频位流322的数据,流程500可以返回步骤508以接收下一个视频位流。如果流程500确定解码计算设备14没有收到更多的视频位流322的数据,流程500可以就此结束。

根据公开的实施方式,图6是用于编码视频流200的流程600的流程图。例如,流程600可以由编码计算设备12来执行。图6所示的流程图展示了包括在流程600中的若干步骤。实现流程600的步骤,可以包括在本文,或者多于或少于本文所述。例如,步骤可以组合或划分而改变执行的步骤的数目。流程600的所述步骤可以按本文包括的顺序或不同的顺序来执行,且仍然实现流程600的意图。

可选地,流程600开始于编码视频位流322的第一部分。视频位流322的所述第一部分可以与呼叫消息一起被编码,如上文关于图5的描述。当随机数据包被用于初始带宽估计时,这个步骤可以省略。在步骤602中,流程600将用于带宽估计的信息传输到一个解码设备。例如,所述呼叫消息可作为所述视频位流322的一部分传输,并被一个解码计算设备14接收。所述解码计算设备可以基于所接收的呼叫消息确定第一参数,并通过一个反向信道将应答消息发送回编码计算设备12。在步骤604中,流程600可以接收所述第一参数(例如,包括所述第一参数的反向信道消息),并如同上文关于图5所述,可在步骤606中计算下一批解码参数。

在步骤604中,编码计算设备12可通过反向信道消息接收第一网络参数。在步骤606中,流程600可从第一网络参数确定第二参数。例如,从解码计算设备14接收到反向信道消息后,编码计算设备12可以分析所述反向信道消息,并结合其他消息及含统计信息的已存储参数,可以确定第二参数,以用于编码视频位流322的第二部分。编码参数包括可被输入到编码流程的参数,以针对带宽和纠错调整所产生的输出位流。编码参数的范例包括但不限于:位率、FEC比率、基准帧选择和关键帧选择。图8所示的流程800展示了用网络参数选择编码参数的一个例子。

在步骤608中,流程600可以用步骤606决定的所述编码参数编码视频位流322。

在步骤610中,该视频位流322可有编码计算设备12经网络16传输到解码计算设备14。解码计算设备可以接收到所述视频位流322,并如上文关于图5所述,确定第二网络参数。

根据公开的实施例,图7是包括反向信道消息管理器的编解码器700的一个例子。编解码器700可以实现上文图5、图6和图8所述的流程500、600和800。编解码器700可以用计算设备12、14实现。编解码器700可以编码视频流200或解码视频位流322,取决于它在运行时受到的指示。编解码器700可以用录制器702采集视频流200的数据。通过实时数据采集——例如用摄像机,或通过读取视频流的数据——例如从存储设备或网络,录制器702可以采集未压缩的视频流数据。

当编解码器700作为编码器工作时,录制器702可以将未压缩的视频流200传递到编码器封装器704。编码器封装器704可以检查所述输入的未压缩的视频流200,从反向信道控制器708接收参数,并从非易失性存储设备读取储存的参数和统计信息以确定编码参数,再将编码参数与视频流200一起发送到编码器706。编码器706可以是类似于图3中编码器300的编码器。编码器706可以用所述接收到的编码器参数来编码视频流200,以产生一个编码视频位流322,而其具有由反向信道控制器708选择的期望位率。编码器可以将包含在所述编码视频位流中的所述数据包传递到前向纠错(FEC)编码器716,716可以创建,并依据包括例如FEC比率的FEC编码参数,添加FEC数据包到输出的视频位流中。随后,FEC编码器可以将包括在输出视频位流中的数据包经网络718传递到数据传出模块720进行传输。

当编解码器700作为解码器工作时,可以通过数据传入模块712,从网络718接收含在经编码的视频位流322中的数据包,并传递到前向纠错(FEC)解码器726。FEC解码器可以将FEC数据包从传入的视频位流中去除,并在需要并可行时,还原丢失或损坏的数据包。例如,FEC解码器可以将有关丢失或无法恢复数据包的信息发送到良/劣信息提供器714。然后,FEC解码器可以将视频位流322与解码器参数一起发送到解码器封装器732。解码器封装器可以检查视频位流,并将参数信息返回至解码器状态回调724。解码器730可以是类似于图4中解码器400的解码器。解码器730可以根据所述传递的解码器参数解码所述视频位流322,并将解码后的视频流输出到渲染器728;而在728中,所述视频流在渲染后,例如,可被显示在连接至解码计算设备14的一个显示设备上,或存储到一个非易失性存储设备中。

除了编码和解码视频数据,编解码器700包括反向信道消息管理器722。如上所述,反向信道消息管理器722负责创建、传输和接收呼叫及应答消息。运行于编码模式时,反向信道消息管理器722可以通过数据传出模块720将呼叫消息传送到网络718,并通过数据传入模块718从网络718接收应答消息。所接收到的应答消息,可以通过带宽估计模块710进行分析,以确定网络参数。反向信道消息管理器722可以通过传入端口712和传出端口720接收和发送反向信道信息,并通过解码器状态回调724和带宽估计710,针对用于设置编码器参数的所述网络参数管理其计算和收集。运行于解码模式时,反向信道消息管理器724可以通过传入端口712从网络718接收呼叫消息,用带宽估计710确定网络参数,并创建应答消息,以通过传出端口720传输到网络718。

基于所接收和计算出的网络参数,带宽估计模块710可以估计可用的网络带宽;所述网络参数包括往返延迟、解码器端接收位率、丢包率和解码器端带宽指标——包括带宽指标和累积指标。由反向信道控制器708确定的编码参数可以包括FEC强度、位率、基准帧的数目和供使用的基准帧。根据反向信道控制器708确定的编码参数,FEC编码器可以自适应地改变FEC强度和数据包大小。

编解码器700的一个特点,是其有能力为适应变化的网络条件而动态地改变用于帧内预测的基准帧的数目。

根据一个实施例,图8是用于确定位率的流程800的一个示例流程图。例如,流程800可以由编码计算设备12来执行。图8所示的流程图展示了包括在流程800中的若干步骤。实现流程600的步骤,可以包括在本文,或者多于或少于本文所述。例如,步骤可以组合或划分而改变执行的步骤的数目。流程800的所述步骤可以按本文包括的顺序或不同的顺序来执行,且仍然实现流程800的意图。

如上所述,前向纠错(FEC)是一种纠错技术,他在一个视频位流的数据包中增加额外的数据包,以允许接收器恢复丢失或损坏的数据包而无需重新传送所述包的数据。所述输出视频位流的每个数据包,可以通过零个或多个FEC包的数据来保护,例如:所述输出视频位流的一个数据包可能未被FEC包的数据保护,也可能被多个FEC包所保护,取决于所述包在解码所述视频位流中预定的重要性。例如,相对于一个中间帧的像素数据的系数,包含运动矢量的数据包可被更多的FEC包数据保护。使用FEC包保护视频位流的所述数据包的流程可被若干参数控制,其中之一是FEC比率(FEC_ratio),其描述的是视频位流的数据包和FEC包之间的比率。

流程800开始于步骤802,并假设FEC_ratio被设定为用于保护当前视频位流322的当前值,当前的编码器位率被设置为Ebitrate,允许的预定最高位率为Maxbitrate。在步骤802中,流程800测试FEC_ratio是否为0;如果是,就在步骤804中设定变量Sbitrate=Ebitrate。在步骤806中,如果设定Sbitrate=Ebitrate(1+1/FEC_ratio)。所达到的效果是,所述当前位率的增量正比于所述FEC保护的量。

步骤808可以测试接收到的网络参数,例如:带宽指标(BWidthI)是归化到0的,可测试其是否小于0.05,并同时测试当前累积时间差(Tdacc)是否小于200毫秒。如果以上条件同时为真,则意味着网络可以正常处理当前位率,因此在步骤814中流程800可以通过设置变量Newbitrate=Sbitrate*BWidthI*1.05来增高约5%的预期位率。如果在步骤808的测试为假,则在步骤810中进一步测试带宽指标BWidthI是否大于1.1;如果是,则如前文所述,所述网络可能处在快速突发传输中,因此在步骤816中流程800可以通过设置变量Newbitrate=Sbitrate*1.1,即增高10%的位率,来探测是否所述网络带宽有所增加。如果在步骤810中确定BWidthI<1.1,则意味着所述网络的延迟在上升,因此步骤812通过设置Newbitrate=Sbitrate*BWidthI来调低位率。

在步骤818中,预期位率被设定为Ebitrate=Newbitrate/(1+1/FEC_ratio),以补偿FEC增加到所述位流中的附加位元。在步骤820中,所述累积延迟被测试是否大于或等于200毫秒的预期值。如果是,则意味着网络延迟正在上升,因此在步骤822中预期位率Ebitrate被设定为其值的90%。如果在步骤820中所述网络延迟小于其预期值,则在步骤824中Ebitrate被测试是否大于允许的最大值Maxbitrate。如果是,则其在步骤826被降低到等于Maxbitrate。继上述步骤后,流程800可以返回到图6的步骤606以完成流程600。

回到图6,在步骤606确定第二参数后,流程600可以判断视频位流322是否还有额外部分有待编码。如果为真,流程600可以返回到步骤608,用步骤606中确定的编码参数来编码所述视频比特流322的第二部分。如上所述,确定编码参数的频率将决定流程600可以多快、多顺地响应网络带宽的变化,且不因增加反向信道消息而显著降低网络带宽。如果流程600确定没有余存的视频流数据,则流程600可以就此结束。

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

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

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

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

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

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

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