带反向信道消息管理的视频编码及解码的制作方法

文档序号:18403286发布日期:2019-08-10 00:07阅读:140来源:国知局
带反向信道消息管理的视频编码及解码的制作方法

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



背景技术:

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



技术实现要素:

有鉴于此,本发明公开了带反向信道消息管理的视频编码及解码的系统、方法和设备的各个方面。

一方面,本发明公开了一种用计算设备编码视频位流的方法,包括:

从一个解码计算设备接收用于编码所述视频位流的数据;

基于所述用于编码所述视频位流的数据,确定编码参数;

由所述计算设备,针对编码所述视频位流的一个当前帧,从按显示顺序先于所述当前帧的多个基准帧中确定一个选中基准帧,所述多个基准帧中包括一个良基准帧,其特征在于,所述良基准帧是编码器已知无错的一个基准帧;

以所述选中基准帧和所述编码参数,编码所述视频位流的所述当前帧。

在一些实施例中,为使一个基准帧为良基准帧,其所依赖的基准帧(例如,使用多个基准帧时其本身解码所需的多个基准帧)也必须没有任何错误。

另一方面,本发明公开了一种用计算设备解码视频位流的方法,包括:

向一个编码计算设备传输用于解码所述视频位流的数据;

从所述编码计算设备接收所述视频位流的编码,其特征在于,所述编码的位流包括一个当前帧,其编码使用的基准帧选自按显示顺序先于所述当前帧的多个基准帧,所述多个基准帧包括一个良基准帧,其特征在于,所述良基准帧是所述编码器已知无错的一个基准帧;

在所述计算设备,用所述选中基准帧解码所述视频位流。

另一方面,本发明公开了一种用于编码视频位流的设备,包括一个存储器和一个处理器。所述处理器执行储存在所述存储器内的指令以:

从一个解码计算设备接收用于编码所述视频位流的数据;

基于所述用于编码所述视频位流的数据,确定编码参数;

针对编码所述视频位流的一个当前帧,从按显示顺序先于所述当前帧的多个基准帧中确定一个选中基准帧,所述多个基准帧中包括一个良基准帧,其特征在于,所述良基准帧是所述编码器已知无错的一个基准帧;

以所述选中基准帧和所述编码参数,编码所述视频位流的所述当前帧。

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

附图说明

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

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

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

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

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

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

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

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

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

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

图10是依本发明公开的实施例提供的一个编码及解码基准帧选择的示意图;

图11是依本发明公开的实施例提供的一个视频基准帧结构的示意图。

具体实施方式

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

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

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

本发明公开的实施例的各方面还可以通过在压缩视频位流中添加前向纠错(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 distortion value)来确定使用何种预测模式。

率失真值的确定,可以通过计算用特定编码参数(例如预测模式)编码的视频位流中每单位时间的位元的数目,即位率,并结合计算输入视频流的区块和解码视频流的时间上和空间上相同的区块之间的差异。因为编码器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,通过向一个编码计算设备传输用于编码所述视频位流的数据。所述用于编码所述视频位流的数据可以包括,例如丢包率、往返延迟、接收位率、带宽数据、指示一个基准帧属良或劣的数据,或上述的任意组合。所接收的数据可以被编码计算设备12用于确定编码参数。用于这种目的的其他数据并不限于本文所述。

例如,用于编码所述视频位流的数据可包括可用于生成初始带宽估计的反馈数据。例如,所述数据可包括要被解码的视频数据或以随机数据人工填充的数据包,如后文详述的在编码流程和解码流程间交换的呼叫和应答消息。

在步骤504,在计算设备14中,所述编码位流从所述编码计算设备被接收,而所述编码位流包含一个当前帧,其编码使用的基准帧选自按显示顺序先于所述当前帧的多个基准帧,所述多个基准帧包括一个良基准帧。所述良基准帧是所述编码器已知无错的一个基准帧。在一些实施例中,为使一个基准帧为良基准帧,其本身解码所需的多个基准帧也不含任何错误。所谓“接收”,我们可指输入、获取、读取、访问或以任何方式接收一个编码视频位流的行为。例如,所述已编码的视频位流可以由计算设备12用编码器300进行编码,并经由网络16发送。

编码参数可以包括可被输入到编码流程的参数,以针对带宽和纠错调整所产生的输出位流。例如,编码参数的范例包括但不限于:位率、FEC比率、基准帧选择和关键帧选择。又例如,所述编码参数可以包括基于包含在前述接收的数据中的所述带宽数据所确定的估计带宽。图8所示的流程800展示了用网络参数选择编码参数的一个例子。

在一些实施例中,所选中的基准帧可以选自多个当前帧按显示顺序之前的基准帧。所述多个先前基准帧可以包括至少一个良基准帧,其定义为所述编码器已知的、可被无错误解码的一个基准帧。例如,选中基准帧可以是一个良基准帧,而这个良基准帧可用于编码当前帧。又例如,作为选中基准帧的良基准帧可用于编码包括当前帧的一定数目的连续帧,在这种情况下,用同一良基准帧编码的连续帧的所述数目,可以基于一个或多个以下数据自适应地选取:丢包率、带宽数据,和FEC强度。例如,FEC强度可以基于从解码计算设备14接收到的用于编码视频位流322的数据,由一个FEC编码器所确定;而基于所接收的数据(例如反馈信息),所述FEC编码器可以自适应地改变FEC强度和数据包大小。在一些实施例中,操作704中确定的编码参数可以基于一个或多个以下数据被更新:FEC强度、位率,和用同一良基准帧编码的连续帧的数目。

在步骤506中,流程500可以在所述计算设备14上,用所述选中基准帧解码所述视频位流。

在一些实施例中,呼叫及应答消息可以是伴随所述编码视频位流的带外数据包(out-of-band packets);所述编码视频位流的数据包各具有序列号、时间戳及一个以位元为单位的消息大小,所述消息大小基于一个变量“Psize”和一个预定的最大视频位率“Maxbitrate”,而“Maxbitrate”储存在与流程500相关联的配置文件中。例如,基于Maxbitrate,Psize可以根据下列伪代码来确定:

通过以这种方式设置Psize,网络带宽可以在发送呼叫及应答消息之前得以估计,从而防止了呼叫及应答消息在网络很慢时因短时间内发送过多数据包而拥塞所述网络。如果有足够数量的、包括呼叫及应答消息的数据包由编码计算设备12经网络16发送、并由解码计算设备14接收,呼叫及应答消息可被用来确定真实的网络带宽。对于任意带宽高于100Kbps的网络,流程500的设计可以应对单向三倍的预期位率,又不会长时间拥塞所述网络。

公开实施例的各方面可以跟踪呼叫及应答消息,通过给每个数据包——包括呼叫及应答消息——分配一个唯一的包编号,从零开始、对每个视频流递增一。每个数据包——包括呼叫及应答消息——也可以包括一个时间戳,也从零开始并对每个发送的数据包递增,递增的分辨率至少是毫秒(ms),或者是关联于计算设备12或14的高分辨率计时器所允许的某个时间分辨率。

一些实施例中,可以创建两组呼叫及应答消息。第一组消息可以包括25各数据包,而第二组消息可以包括10各数据包。例如,编码计算设备12可以创建一组25条呼叫消息并以约100毫秒的间隔发送。用以下公式

Maxbitrate=(25*8*Psize)/0.1={0.8Mbps,1.6Mbps,2.4Mbps}

可以确定,以上伪代码计算的Psize的值用以估计的最大位率可以是0.8Mbps,1.6Mbps或2.4Mbps。对于带宽比Maxbitrate更高的网络,所述网络带宽可估计为Maxbitrate。例如,继第一组25个数据包后,公开实施例的各方面可以等待约400毫秒后,发送第二组10个数据包。

发送和接收所述第一组和第二组数据包所需的时间可指示网络带宽。例如,一个100Kbps的网络可能要花费约一秒钟来传送包括在所述第一和第二组的35个数据包,假设每个包为400字节(Psize=400)。在包大小为1200字节(Psize=1200)时,同一个网络可能需要花费约三秒钟。发送和接收呼叫及应答消息包可以在视频流开始前执行,即在视频开始前处理完呼叫及应答消息之前,用户可能需要等待。例如,在其他实施例中,继初始带宽估计之后,可以使用编码视频位流数据的前两帧来估计网络带宽。所述视频位流中的数据可以是真实的已编码的视频数据或随机数据。

另外,流程500可以对每个包加盖一个额外的时间戳,用以指示它被接收到的时间。例如,当所述第一视频位流开始时,流程500可以开始接收和存储数据包,并持续到接收到25个数据包或三秒钟结束。如果已收到的数据包少于25个,则可认为它们有丢包。可以用以下等式来计算平均带宽:

Bandwidth=(24–Nloss)*Psize/(Tlast–Tfirst)

带宽以Kbps计算,Nloss是第一组25个数据包中丢失的数据包的总数。这不包括在第二组10个数据包中丢失的任何数据包。Tlast是以毫秒测量的数据包25——不含丢失的包——之前最后一个数据包的到达时间戳,Tfirst是以毫秒测量的第一个接收到的数据包的的到达时间。注意,被用来确定带宽的是所述第一个数据包和所述最后一个数据包的到达时间的相对差值,因为传输所述第一个数据包所需的时间无法得知。

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

根据所述的带宽、丢包率和往返延迟重算的编码参数,可以包括自适应编码长度(adaptive coding length)、FEC比率、视频编码器位率、空间分辨率(帧尺寸)、时间分辨率(帧率)。

公开实施例的各方面可以调整所述编码参数以匹配网络带宽、丢包率和往返延迟,从而优化所述编码过程,以在给定的网络带宽、丢包率和往返延迟条件下,在解码设备14上提供最高质量的解码视频。基于部分所述视频位流322的数据包上加盖的时间戳,通过间或确定网络参数,网络带宽在所述视频位流322的部分的接收期间所可能发生的变化可以被检测出来。例如,编码计算设备12可以是服务器,解码计算设备14可以是运动中的手机,而运动受不断变化的网络条件——包括网络带宽的变化——的影响。

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

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

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

在步骤502中,流程500可以通过图6所示的流程确定网络参数。在图6中,通过用一个滑动窗口(sliding window)执行带宽估计,流程600可以确定网络参数;而所述滑动窗口基于解码计算设备14的本地时间。所述窗口的长度可以是两秒或任意其他预定的窗口长度,依程序提供给流程600。在操作602中,在接收到关联于视频位流322的第一个数据包时,流程600可初始化时标基T0为所述第一个数据包收到时的本地时间,Trtp0为视频位流322的所述第一视频数据包的实时传输协议(Real-Time Protocol,RTP)时间戳。在操作604中,流程600检查所述两秒窗口中的第一个和最后一个数据包的同步源标识(Synchronization Source,SSRC)。如果它们相同,则继续执行带宽估计;否则,重置T0和Trtp0,以与新的SSRC的第一个数据包同步。在这种情况下,反向信道信息将不会发送,因为时间戳的基础已经改变,使得带宽估计无效。

在操作606中,流程600可以以本地时间抓取所述两秒窗口中的第一个数据包(Tr0)和最后一个数据包(Tr1)的RTP时间戳间隔,通过使用时钟速度为90KHz及以上的高精度计时器计算

Tgap=Tr1–Tr0

并使用

Twindow=2*90000

来转换所述时间窗口到秒以统一为跟RTP时间戳相同的时标。

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

在操作610中,流程600可以计算RTP时间和本地时间之间累积的时间差Tdacc,根据以下公式:

Tdacc=(Tr1–Trtp0)–(Tcurrent–T0)

其中Tr1是当前窗口中最后一个数据包的时间戳,Trtp0是与所述最后一个数据包有相同SSRC的视频位流322的第一个数据包的时间戳,Tcurrent是当前本地时间,而T0是所述数据包被接收时的本地时间。Tdacc的持续增长可以指示所述网络带宽不足以传输所述视频位流。当延迟的小量增加无法探测时,这可以用来校正所述两秒窗口的调整。

在操作612,实际接收位率(Rbitrate)可计算为收到的数据包——包括FEC数据包——的总字节数除以所述窗口的总时长——本例中为两秒。在操作614中,数据包的总数和丢失的数据包的总数可以通过校检数据包序列号来检查。数据包的总数(Ptotal)及丢失的数据包的总数(Plost)可以通过以下操作获得:用最末的RTP序列号减去最初的RTP序列号,并与接收到的包的计数作比较。Ptotal和Plost可以组合成丢包率Packetlossratio。

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

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

流程700开始于操作702,从解码计算设备14接收用于编码视频位流322的数据。在一些实施例中,所接收的数据可包括丢包率、往返延迟、接收位率、带宽数据、指示一个基准帧属良或劣的数据,或上述的任意组合。所接收的数据可被编码计算设备12用于确定编码参数。用于这种目的的其他数据并不限于本文所述。

在操作704,所接收的数据被用于确定编码参数。编码参数包括可被输入到编码流程的参数,以针对带宽和纠错调整所产生的输出位流。例如,编码参数的范例包括但不限于:位率、FEC比率、基准帧选择和关键帧选择。又例如,所述编码参数可以包括基于包含在前述接收的数据中的所述带宽数据所确定的估计带宽。图8所示的流程800展示了用网络参数选择编码参数的一个例子。

在操作706中,编码计算设备12确定用于编码视频位流322的当前帧的一个选中基准帧。在一些实施例中,所选中的基准帧可以选自多个当前帧按显示顺序之前的基准帧。所述多个先前基准帧可以包括至少一个良基准帧,其定义为所述编码器已知的、可被无错误解码的一个基准帧。例如,选中基准帧可以是一个良基准帧,而这个良基准帧可用于编码当前帧。又例如,作为选中基准帧的良基准帧可用于编码包括当前帧的一定数目的连续帧,在这种情况下,用同一良基准帧编码的连续帧的所述数目,可以基于一个或多个以下数据自适应地选取:丢包率、带宽数据,和FEC强度。例如,FEC强度可以基于从解码计算设备14接收到的用于编码视频位流322的数据,由一个FEC编码器所确定;而基于所接收的数据(例如反馈信息),所述FEC编码器可以自适应地改变FEC强度和数据包大小。在一些实施例中,操作704中确定的编码参数可以基于一个或多个以下数据被更新:FEC强度、位率,和用同一良基准帧编码的连续帧的数目。

在操作708中,视频流322的当前帧使用所选择的基准帧和编码参数进行编码。在一些实施例中,编码过程可在以下描述中阐述。

例如,编码视频位流322的第一部分可以与呼叫消息一起被编码,而呼叫消息可作为视频位流322的一部分传输并被解码计算设备14接收。解码计算设备14可以基于所接收的呼叫消息确定第一网络参数,并通过一个反向信道将应答消息发回。例如,编码计算设备12可以接收所述第一网络参数并计算下一批编码参数,然后用所确定的下一批编码参数编码视频位流322的第二部分。所述视频位流的第二部分可以用基于所述第一网络参数的第二网络参数编码。例如,所述第一编码参数可以包括第一数目个基准帧,而所述第二编码参数可以包括第二数目个基准帧,详述见图10和图11。编码之后,视频位流322的第二部分可以由编码计算设备12经网络16传输到解码计算设备14。例如,解码计算设备可以确定第二网络参数,并通过反向信道消息将所确定的第二网络参数发回到编码计算设备12

例如,从解码计算设备14接收到反向信道消息后,编码计算设备12可以分析所述反向信道消息,并结合其他消息及含统计信息的已存储参数,可以确定第二编码参数,以用于编码视频位流322的第二部分。例如,一个良基准帧或任一基准帧可以针对编码而被选定,取决于其时的编码效率和带宽条件。例如,为了更好地适应当前网络条件,编码计算设备12可以基于反馈信息,在基准帧的不同选项中切换,也可以切换使用同一基准帧的各图像群组中帧的不同数目。

例如,针对编码视频位流322的一个当前帧,编码计算设备12(发送者)可以在使用已知的良基准帧和使用任一基准帧(例如当前帧的前一帧)之间切换。例如,所述选择可以基于编码效率和质量之间的权衡。例如,选择任一基准帧(例如当前帧的前一帧)时,编码效率更好,但由于传输过程中发生的错误,经解码的视频质量可能更低。

根据公开的实施例,图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可以返回到图7的操作706以完成流程700。

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

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

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

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

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

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

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

图10示出的是编码器1002正在输入视频流200以待编码成视频位流322。视频编码器1002可使用某个数目1018个的基准帧R1,R2,...,Rn,即1012、1014、1016,来编码视频位流322。使用更多基准帧可以提高所传输视频位流的质量,但也可能需要更大的网络带宽。调整要用的基准帧的数目为1018,可以将传输所需基准帧的数目匹配到可用的网络带宽。视频解码器1004可以调节解码的基准帧R1,R2,...,Rn即1020、1022、1024的数目1026,用于解码视频位流322,以匹配编码器1002用来编码所述视频位流的的基准帧的所述数目;所述匹配可以根据从编码器1002接收描述帧的数目的参数及关联于所述基准帧的其他数据,而所述接收可以直接经由所述视频位流或经由反向信道消息来进行。

根据公开的实施例,图11示出了选择基准帧的一个例子。图11示出的视频流1100包括帧群组M1,M2和M3。群组M1包括一个帧内编码的基准帧I及其若干预测帧P。预测帧P可用包含在I的信息和编码在所述视频位流中的预测信息重建。群组M2包括首帧PI,而PI帧是用解码器缓存中已知的良基准帧编码而成。如果解码器(接收者)可以无错误地解码一个基准帧,所述基准帧是一个良基准帧。在一些实施例中,为使一个基准帧为良基准帧,其所依赖的基准帧也必须没有任何错误。如果编码器已知所述良基准帧无错,则所述良基准帧是一个已知良基准帧。良基准帧不必须是一个I帧,且可以从先前(正确地)解码的帧被重建,例如从群组M1的帧I。这意味着,针对群组M2传输一个独立的I帧并无必要。例如,一旦解码器(接收者)确定PI是在解码器缓存中的良好基准帧,就可以向编码器(发送者)指示PI是编码器的良基准帧,而指示可以直接在所述位流中或通过反向信道消息来进行。因此,所述编码器(发送者)得知PI是良基准帧,且可以用于预测后续帧。同样地,帧群组M3包含一个PI帧,而其也可以从一个由运行时反向信道消息提示的已知良基准帧重建,因此无需传输独立的I帧以重建群组M3的预测帧P。如图11中的省略号所示,该方案可以继续用于更多群组的帧。

通过反向信道消息管理器908,视频编码器可使用来自解码器的反馈信息来确定应当用哪个帧来编码。例如,一个良基准帧或任一基准帧可以针对编码而被选定,取决于其时的编码效率和带宽条件。例如,为了更好地适应当前网络条件,编码计算设备12可以基于反馈信息,在基准帧的不同选项中切换,也可以切换使用同一基准帧的各图像群组中帧的不同数目。

例如,针对编码视频位流322的一个当前帧,编码器(发送者)可以在使用已知良基准帧和使用任一基准帧(例如当前帧的前一帧)之间切换。例如,所述选择可以基于编码效率和质量之间的权衡。例如,选择任一基准帧(例如当前帧的前一帧)时,编码效率更好,但由于传输过程中发生的错误,经解码的视频质量可能更低。

当所选的基准帧是一个良基准帧时,同一良基准帧可用于编码,例如,一定数目的包括当前帧的连续帧。使用同一良基准帧编码的连续帧的数目(如图11中的M2、M3)可以基于以下因素自适应地选择:丢包率、带宽数据、FEC强度,或上述的任意组合。如在图11中,各群组中帧的数目,如M1,M2,M3...Mi,可以在帧边界动态地变化,并且各群组M1,M2,M3...Mi的值可以通过以下因素确定:丢包率、带宽、FEC强度,或上述的任意组合。例如,基于以下因素,编码参数可以被更新:FEC强度、位率、使用同一良基准帧编码的连续帧的数目,或上述的任意组合。

在一些实施例中,FEC强度可以基于从解码计算设备接收到的用于编码视频位流的数据,由一个FEC编码器所确定;而基于接收自所述解码计算设备的用于编码所述视频位流的数据(例如反馈信息),所述FEC编码器可以自适应地改变FEC强度和数据包大小。例如,所述用于编码视频位流的数据(例如反馈信息),可以进一步包括丢包率、往返延迟、接收位率、带宽数据、指示一个基准帧属良或劣的数据,等等。例如,所述编码参数可以包括估计带宽,而其确定是基于在反馈信息中接收到的所述带宽数据。

以上描述的编码和解码的实施例说明了一些示例性的编码和解码技术。然而,“编码”和“解码”,如同在权利要求中使用时一样,可以意指压缩、解压缩、转换,或任意其他处理或变化数据。

在本文中,用语“示例”或“示例性”用于表示充当实例、例子或说明。本文中描述为“示范性”的任何方面或设计,并不必然意味着优选或优于其他方面或设计。相反,用语“示例”或“示例性”的目的在于用具体的方式呈现一个概念。在本申请中使用的术语“或”,旨在表示包含性的“或”而不是排他性的“或”。即,除非另有指定,或从上下文清楚推断,“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