用于在经编码的视频中嵌入数据的框架的制作方法

文档序号:15886019发布日期:2018-11-09 18:54阅读:148来源:国知局
用于在经编码的视频中嵌入数据的框架的制作方法

本公开一般涉及用于提供能够将数据嵌入到视频流中的框架的方法和系统。

背景技术

视频水印可用于付费电视领域中的各种目的,例如允许水印检测器识别视频的创建者、广播视频的运营商、或甚至是接收视频的订户的身份。后者被称为取证水印(forensicwatermarking),并且可以用于识别背叛者(traitor),即,正在泄露被盗视频内容并且例如在线流式传输被盗视频内容的付费电视服务的合法订户。

传统上在付费电视系统中,如果水印意图作为对终端用户的身份进行编码的取证水印,则将水印嵌入到用户的客户端设备(例如,机顶盒(stb))中的视频中是自然的。通常,stb具有有限的计算能力和其他限制,这阻止其将某些类型的(即,不可察觉的、弹性的、高容量的等)强水印嵌入到其显示的视频中。因此,在从视频头端发布视频之前,需要在视频头端嵌入取证水印。为此,视频头端通常广播视频的部分的多个版本,每个版本在视觉上彼此略微不同。

h.264和h.265视频编码器通常将基于上下文的自适应二进制算术编码(cabac)熵编码系统用于宏块级语法元素的熵编码层。cabac是一种极具状态的、非常自适应的熵层,其可以将类似的语法元素流编码为显著不同的位流,这是由于cabac随着其处理输入流而调整其上下文模型的方式。换句话说,即使两个视频帧仅在单个语法元素(例如,单一宏块的预测模式、某个宏块的残差中的系数等)上不同,根据视频编码标准,所得到的后cabac位流通常完全不同,从语法元素不同的点开始直到cabac引擎被重置。由于cabac的状态性本质,只要cabac引擎未被重置(这通常不会发生在切片(slice)的解码期间,该切片通常包括整个图片),则将水印嵌入到视频流中就具有挑战性。

附图说明

通过以下结合附图的详细描述,将更全面地理解和了解本发明,其中:

图1是系统的简化框图图示,该系统包括根据本发明的实施例构建和操作的覆盖水印嵌入子系统、客户端设备、以及内容分发网络和检测子系统;

图2是包括由图1的水印覆盖嵌入子系统嵌入其中的水印覆盖的视频流的简化框图图示;

图3a是在被覆盖由图1的水印覆盖嵌入子系统嵌入的水印覆盖之前的视频帧的部分图示说明的部分框图;

图3b是在被覆盖由图1的水印覆盖嵌入子系统嵌入的水印覆盖之后的视频帧的部分图示说明的部分框图;以及

图4是用于在图1的系统中产生和插入帧内预测覆盖切片的方法的简化流程图。

具体实施方式

概览

在一个实施例中,接收视频流,并且识别所接收的视频流中要修改的帧的空间上不同的区域,该帧的空间上不同的区域与帧中的任何其他区域分开编码。提取要修改的帧的空间上不同的区域的区段(segment)。修改所提取的空间上不同区域的区段。将所提取的空间上不同区域的区段编码成单区段空间上不同的区域。网络抽象层(nal)报头与经编码的单区段空间上不同的区域相关联。将经编码的单区段空间上不同的区域及其相关联的nal报头插入到所接收的视频流中要修改的帧的所识别的空间上不同的区域的后面。还描述了相关的方法、系统和装置。

示例实施例

现在参考图1,图1是系统10的简化框图图示,系统10包括根据本发明的实施例构造和操作的通常设置在广播头端100处的覆盖水印嵌入子系统、客户端设备200、以及内容分发网络及检测子系统300。现在描述图1的系统10的三个子系统100、200、300。可以理解的是,上面提到的各种子系统本身可以在本文被描述为“系统”而非“子系统”,具体是因为图1的一些子系统在独立系统中或者本身就是独立系统。

头端100是将视频覆盖水印110插入到经编码的视频流120的地方,如下所述。

客户端设备200是对由头端100产生的带水印视频130进行解码,从而产生经解码的带水印视频210的地方,其中经解码的带水印视频210可以可选地由本地播放系统220显示。在经解码的带水印视频210被解码之后,然后可以捕获视频并使其可用于内容分发网络310,如下所述。

内容分发网络及检测子系统300是可以将捕获的经解码的带水印视频210上传到内容分发网络310的地方。在视频流210可用于在内容分发网络310中的进一步下载之后,可以将视频流210下载并输入到检测系统320,以便使用由覆盖水印嵌入器150嵌入在广播头端100处的覆盖水印110,从而确定从中捕获内容并将内容上传到内容分发网络310的设备的身份。

现在将解释图1的子系统的操作。

转向头端100,头端100包括h.264(有时可选地被称为mpeg-4part10或avc)或h.265(有时可选地被称为高效视频编码,hevc)视频编码器140。视频编码器140产生经编码的视频流120。经编码的视频流120被描绘为具有两个部分,第一部分120a和第二部分120b。经编码的视频流120被输入到水印嵌入器150。覆盖水印嵌入器150创建覆盖水印110,其作为覆盖被嵌入在经编码的视频流120中(如下所述)。包括覆盖水印110的经编码的视频流120(现在被称为带水印视频130)被输入到复用器(mux)160。复用器160还可以包括对带水印视频130进行加密的加密器。经加密、复用、嵌入水印、编码的视频流170然后被准备好并随后被广播,如本领域中已知的。

嵌入vs编码vs加密

在整个说明书和权利要求中,所有语法形式的术语“嵌入”用于指代涉及将水印或其部分放置在视频流中的任何类型的活动。例如,“嵌入水印”、“嵌入位”、“水印嵌入设备”等。

在整个本说明书和权利要求中,所有语法形式的术语“编码”用于指代任何类型的数据流编码,包括(例如但不限制定义的范围)公知类型的编码,例如但不限于mpeg-2编码、h.264编码、vc-1编码、以及诸如可缩放矢量图形(svg)和laser(iso/iec14496-20)之类的合成编码等。应理解的是,经编码的数据流通常比未经编码的数据流需要更多处理并且通常需要更多时间来读取。经编码的数据的任何接收者(无论经编码的数据的接收者是否是预期接收者)至少有可能能够在不需要密码分析的情况下读取经编码的数据。应理解的是,编码可以在若干阶段中执行,并且可以包括多个不同的过程,包括但不必限于:压缩数据;将数据转换为其他形式;并使数据更鲁棒(例如,复制数据或使用纠错机制)。

在整个说明书和权利要求中,所有语法形式的术语“压缩”用于指代任何类型的数据流压缩。压缩通常是编码的一部分,并且可以包括图像压缩和运动补偿。通常,数据压缩减少了构成数据的位数。由于压缩是编码的子集,因此在所有语法形式中,术语“编码”和“压缩”通常在本说明书和权利要求中可互换使用。

类似地,在本说明书和权利要求中使用所有语法形式的术语“解码”和“解压缩”以指代所有语法形式的“编码”和“压缩”的反向操作。

所有语法形式的术语“加扰”和“加密”在本说明书和权利要求中可互换使用,以指代用于加扰和/或加密数据流的任何适当的加扰和/或加密方法,和/或旨在使数据流除了对于其预期的(一个或多个)接收者之外都难以理解的任何其他适当的方法。公知的加扰或加密类型包括但不限于des、3des、和aes。类似地,所有语法形式的术语“解扰”和“解密”在本说明书和权利要求中用于指代所有语法形式的“加扰”和“加密”的反向操作。

根据以上定义,术语“编码”;“压缩”;以及术语“加扰”和“加密”用于指代不同且排他类型的处理。因此,特定数据流可以是,例如:

经编码,但既未被加扰也未被加密;

经压缩,但既未被加扰也未被加密;

经加扰或加密,但未被编码;

经加扰或加密,但未被压缩;

经编码、加扰或加密;或

经压缩、加扰或加密。

类似地,一方面术语“解码”和“解压缩”,另一方面术语“解扰”和“解密”用于指代不同且排他类型的处理。

覆盖水印嵌入器150被设计为嵌入水印,同时使用尽可能少的由水印引起的额外带宽。为简单起见,考虑一种单纯的情况,其中给定视频的两个不同版本被分开广播。然后使用的总带宽比原始的无水印情况高100%。然而,可以通过以下操作来大大减少额外的带宽使用:创建短视频区段,使得通过将这些视频区段排序在一起,视觉上不同的视频的多个版本(通常每个加密周期两个,但可能不止两个)被创建,其中所需的额外带宽最多保持在几个百分点。也就是说,头端100从给定视频流120准备出多个格式良好的视频的经编码版本,这些视频的经编码版本将仅在其经编码的表示的短区段中彼此不同,因此将导致广播场景中有限的带宽开销。

现在转到客户端设备200,客户端设备可以包括任何适当的视频客户端,例如,机顶盒(stb)230或执行与stb230相同或类似功能的任何其他适当的视频客户端(例如并且不限制前述的一般性,个人录像机(pvr);手持计算设备、桌面计算设备等)。如本领域已知的,stb230对经加密、复用、嵌入水印、编码的视频流170进行解复用、解密和解码,并产生带水印的经解码的视频流210。

客户端设备200可以可选地使用本地播放系统220在本地显示设备(例如,观看屏幕或监视器)上显示带水印的经解码的视频流210。

客户端设备200的用户(或已获得对客户端设备200的访问权限的某其他人)可能能够捕获带水印的经解码的视频流210,并将该带水印的经解码的视频流210上载到内容分发网络310。内容分发网络310不是合法广播系统的一部分,因此可以被认为是“流氓(rogue)”内容分发网络310。经由流氓内容分发网络310来分发内容通常是非法的,并且嵌入的覆盖水印的目的是为了能够找到客户端设备200的用户的id,该用户被假定(除非另有证明)为已将内容上载到流氓内容分发网络310。

现在转到内容分发网络及检测子系统300,应理解的是,分发及检测网络300由两个不同且不一定相关的子系统组成,即内容分发网络310和检测系统320。然而,为了便于描绘和描述,一起描述内容分发网络310和检测系统320。内容分发网络310是本领域已知的内容共享网络,在该内容共享网络上,第一用户(即,泄露者,其可能是客户端设备200的用户)可以上载不一定需要合法获得的内容,使得其他用户然后可以下载内容分发网络310中可用的内容。

例如,带水印的经解码的视频流210可能已被上传到内容分发网络310。内容分发网络310通常不受网站阻碍地(intheclearfromwebsites)进行操作,其中网站受到被认为对于版权执法宽容的本地管辖。然后,其他用户能够从内容分发网络310下载和消费该带水印的经解码的视频流210。可以获得带水印的经解码的视频流210的至少一个副本并将其输入到检测系统320。因此,可以通过监视已知的内容分发网络310并主动访问盗版内容(就像任何其他非付费用户将进行的操作一样)来获得针对检测系统320获得的带水印的经解码的视频流210。

检测系统320尝试识别所获得的内容的泄漏者-即,被假定为与客户端设备200相关联的带水印的经解码的视频流210的泄漏者。为此,带水印的经解码的视频流210被输入到水印检测设备或机构340。水印检测设备或机构340尝试从与视频相关联的嵌入的覆盖水印110取回用户id330(即,与客户端设备200相关联的用户id330)。

应理解的是,本领域中已知各种用于嵌入和检测水印的系统。作为非限制性示例,cain等人的美国专利9,208,534以及cain等人的尚未公开的序列号为14/790,028的美国专利申请描述了这样的系统。

现在参考图2,图2是包括由图1的覆盖水印嵌入子系统(即,覆盖水印嵌入器150)嵌入到其中的水印覆盖的视频流的简化框图图示。经编码的视频流500出现在图2的顶部。经编码的视频流500对应于图2的经编码的视频流120。

经编码的视频流500包括已根据h.264或h.265编码方案中的一个编码的视频。(已经指出图1的视频编码器140包括h.264或h.265视频编码器。)

如上所述,诸如视频编码器140(图1)之类的h.264和h.265视频编码器通常将基于上下文的自适应二进制算术编码(cabac)熵编码系统用于宏块级语法元素的熵编码层。因此,为了克服由cabac产生的限制并且实现在其绝大多数编码表示中覆盖的多个视频版本,附加的小切片被构造使得由客户端设备200在现有切片之上呈现附加的小切片(即,覆盖)。如下面将更详细地解释的,该过程在图1的覆盖水印嵌入器150中执行。应理解的是,术语“小切片”意图指代通常包括少量宏块(例如,一个宏块)的切片。

根据本文描述的实施例,如下所述,经编码的视频流500被分解为连续的部分500a、500b、500c、500d。每个部分之后是至少一个附加切片,该至少一个附加切片包括至少一个具有水印的宏块。因此,部分500a被描绘为之后是切片510a,部分500b被描绘为之后是切片510b等,对于部分500c和500d,之后分别是帧510c和510d。在解码期间,切片510a……510d被用于创建经解码的内容的不同版本,如下面将参考图3a和3b所解释的。应理解的是,在对图2的讨论中使用四个连续的部分500a、500b、500c、500d是示例性的,并且在实践中可以使用任何数目的适当部分。

可以在重新编码之前使用本领域已知的方法来在未压缩域中修改覆盖切片中的宏块。

在显示时,客户端设备200能够产生经解码的带水印的视频,例如,带水印的视频流540。应理解的是,带水印的视频流540可以在每个客户端设备200的基础上产生,如本领域已知的那样。现在参考图3a和图3b提供产生嵌入有覆盖水印的帧的细节。

现在参考图3a,图3a是在被覆盖由图1的覆盖水印嵌入器150嵌入的覆盖水印之前的h.264视频帧的部分图示的部分框图。图3a旨在用作与“之后”图片(图3b)形成对比的“之前”图片。这里提到的“之前”和“之后”状态是在由图1的覆盖水印嵌入器150进行覆盖之前和之后。现在转到图3a的具体细节,在图3a中仅描绘了与本讨论相关的(以及,加以必要的变更,图3b)h.264编码的那些部分。在h.265环境中对图3a(和以下附图)的理解的简要讨论在对图4的描述之后。

图3a的细节描绘了h.264视频图像的单个视频帧。如本领域中已知的,经编码的视频图像(例如,图3a中描绘的单个视频帧)包括由cabac熵层压缩成位流的语法元素610的流。所描绘的一系列语法元素610包括实际h.264编码中所包括的各种字段。图3a还描绘了图像620,该图像620上叠加有网格630。图中示出了网格630(网格630未出现在实际图像中,其既不被编码也不会在解码时被显示)以描绘图像620如何被编码为一系列宏块(网格630中的每个块可以被视为例如宏块),例如,宏块640。最后是对经解码的图像670的描绘,其描绘了例如当本地播放系统220(图1)显示图像620时、当stb230(图1)通过对数据元素610的h.264编码进行解码来显示经编码的图像620(没有网格)时图像将如何出现。

转到h.264图像的数据元素610的具体细节,数据元素610包括nal(网络抽象层)报头675。如本领域已知的,经h.264编码的视频数据被组织成nal单元,每个单元包含整数数目的字节。h.264nal单元具有报头字节(例如,nal报头675),其包含对nal单元中的数据类型的指示。例如,在图3a中,nal报头675指示经编码的图像620包括i切片。应理解的是,一些nal单元包括切片,而其他nal单元不包括切片而是包括其他数据(例如,图片参数设置),如h.264规范中所描述的。

对于包括切片的nal单元,nal报头675之后是切片报头680。切片报头680包括“first_mb_in_slice”字段。应理解的是,尽管切片报头680也包括其他字段,但为了简洁起见,仅描绘了first_mb_in_slice字段。first_mb_in_slice字段指示一系列语法元素610中的第一个宏块的地址。切片报头680之后是视频切片中的数据685,其被描绘为包括多个宏块690(包括经编码的宏块640)。宏块和宏块地址在h.264规范的3.75、3.77、和3.80节中定义。

现在参考图3b,图3b是在被覆盖由图1的覆盖水印嵌入器150嵌入的覆盖水印之后的h.264视频帧的部分图示的部分框图。除了在被覆盖了覆盖水印之前的h.264视频帧的细节(在图3a中找到的,在图3b的左侧出现的)之外,还添加了第二切片703。与图3a类似,h.264视频帧被描绘为作为一系列数据元素700的位流,其示出h.264切片并且详述被包含在图3b中所描绘的h.264视频帧的实际h.264编码中的各种字段。图3b还描绘了h.264编码的图像720,其中每个经编码的图像示出覆盖在图像上的网格。如图3a中所示,注意到网格不出现在实际图像中,并且旨在描绘每个图像如何被编码为一系列宏块。最后,图3b示出了对经h.264解码的图像770的描绘,其描绘了在stb230(图1)通过对h.264系列的数据元素700进行解码来显示经编码的图像时(例如,当本地播放系统220(图1)显示图像时)图像将如何出现。

第二切片703具有nal报头715,其指示切片包括i切片。第二切片703还具有切片报头725。第二切片703的切片报头725包括被设置为等于17的first_mb_in_slice字段。第二切片703的数据部分包括单个宏块740,其对应于如在经编码的图像720中的第二切片中描绘的宏块740。

当经编码的图像720被图1的stb230解码时,经解码的图像770被描绘为覆盖有第二切片703的宏块740。因此,经解码的帧770出现,其中宏块740覆盖在经解码的帧770中的图像上。这是因为第二切片703的数据735中的单个宏块被图1的stb230中所包含的h.264解码器放置在位置17处,即,以上讨论的切片中的第一个宏块的地址。因此,宏块740如图3b所描绘的那样被放置。

现在将描述用于产生和插入覆盖宏块(例如,现在将描述的宏块740)的实现细节。

现在参考图4,图4是用于在图1的系统中产生和插入帧内预测覆盖切片的方法的简化流程图。

应理解的是,所覆盖的宏块740可以作为帧内预测宏块(即,宏块完全以适合于仅使用其自身内包含的信息来对帧进行解码的帧的方式来编码,而不参考任何其他帧)或者作为帧间预测宏块(即,宏块以适合于依赖包含在其他帧内的用于对帧进行解码的信息的帧的方式来编码)来生成。

在h.264中的每个切片的开始处初始化cabac熵层。因此,只要具有nal报头(例如,nal报头715)的附加切片被插入到视频流500(图2)中,则当前切片(例如,包括视频图像630的切片)在其熵层就不受影响并且它们的二进制编码保持完全相同。因此,不需要针对这些切片重新计算二进制编码。

因此,为了针对i切片、p切片、或b切片中的任何一者添加帧内预测覆盖,在h.264视频流上执行以下操作:

解析nal单元(步骤800)。

然后识别包含要覆盖宏块的切片的nal单元(步骤810)。

然后完全解码所识别的切片,使得经解码的切片的未压缩平面像素值被确定(步骤820)。应理解的是,为了构造单宏块帧内预测切片来覆盖帧内预测切片,在那些单宏块帧内切片(one-macroblockintra-slice)中将实际上根本不存在预测(即,将在这些宏块中使用dc预测)。因此,必须对单宏块帧内切片进行重新编码,因为那些宏块最初是从输入切片中的相邻宏块预测出的,因而只有很小的残差。参见h.264标准的章节8.3.1.2.3公式8-51和章节8.3.2.2.4公式8-94、章节8.3.3.3公式8-121以及公式8-138和8-141。注意,当没有用于预测宏块的相邻帧时,预测模式是dc模式,对于所有像素具有恒定/固定值。

从i切片的未压缩表示中提取多个宏块(步骤830)。应理解的是,数目、位置、以及这些位置是恒定的还是随时间变化的与本方法的实现方式无关。例如,在cain等人的美国专利9,208,534中提供了关于如何可以确定这些参数的描述。

例如,为了在未压缩宏块中创建隐蔽(或明显)水印,适当地修改每个所提取的未压缩宏块的y、u、和v域中的像素值(步骤840)。可以通过本领域中已知的任何适当方式来嵌入水印。作为非限制性示例,可以使用如cain等人的上述美国专利9,208,534中所描述的水印嵌入技术来嵌入水印。

本领域技术人员将理解的是,除了水印之外,对上述所提取的未压缩宏块的修改还可以用于需要在压缩域中进行视频操纵的目的,并且对水印的讨论是通过非限制示例方式的一个实施例。例如,本发明的实施例可能需要修改宏块以用于:

徽标插入;

去除或模糊要修改的宏块的至少一部分,例如但不限于视频中的面部或其他细节(例如,未成年人的面部);或者

可以在编码之后对视频执行的其他适当的修改。

然后,将已经嵌入了水印的所提取的宏块中的每一个编码为新的独立的单宏块i切片(步骤850)。作为被编码为新的独立单宏块i切片的结果,本领域技术人员将理解的是,新的切片将具有dc预测模式,如上所解释的。替代地并且可选地,可以针对切片中的单个宏块使用i_pcm模式(即,编码器140(图1)绕过预测和变换编码过程,而是直接输出经编码的样本的值)。如果使用i_pcm模式,则编码在计算上就变得微不足道(因为i_pcm宏块基本上是未压缩的),但出于同样的原因,i_pcm宏块需要更高的额外带宽。

然后,将得到的新的单宏块i切片中的切片报头中的first_mb_in_slice字段从其默认值0改变为与单宏块i切片中的单个宏块的期望位置的宏块地址相同(步骤860)。应理解的是,切片报头中的first_mb_in_slice字段使用h.264标准(参见章节7.3.3)所规定的指数哥伦布(expgolomb)编码来编码。另外,如h.264标准所规定的(参见例如章节7.3.4),在slice_data()开头需要填充的任何字节对齐都是固定的。

然后将每个新的单宏块i切片包装(wrap)在nal报头中,以便为单宏块i切片创建nal单元(步骤870)。注意,如h.264标准的章节7.3.4和7.3.2.8中所规定的,对于切片报头存在单独的字节对齐,然后对于整个nal存在单独的字节对齐。

将新的nal单元插入到视频流中原始i切片之后,在该原始i切片上其单个宏块被认为将被覆盖(步骤880)。当要将不止一个新的nal单元插入视频流中时,应根据first_mb_in_slice值的递增顺序放置新的nal单元,以符合h.264标准的章节7.4.3。

上述方法将插入至少一个单宏块i切片,其将呈现在符合h.264附录b的字节流中的现有切片的上面,而不管所述现有切片是帧间预测还是帧内预测切片。

应理解的是,nal报头675(图3a和3b)中的slice_type字段可以强制给定图片中的所有其他切片是相同类型的(参见h.264标准,表7-6,和相关的文字)。因此,在需要时,可以通过在视频流中搜索要根据其在相邻帧中进行预测的宏块,来产生单宏块p切片或b切片。然后,可以使用运动矢量等来预测使用了帧内预测的单宏块p切片或b切片,如h.264规范中详述的。图4中描述的其他步骤保持不变。

应理解的是,尽管以h.264的方式提供了以上描述,但本发明的实施例可以应用于h.265,并且可能应用于本领域技术人员将理解的其他视频编码标准。还应理解的是,在以上讨论中,视频流因此被理解为指代符合h.264的视频流或符合h.265的视频流中的一个。当视频流包括符合h.264的视频流时,切片包括符合h.264的切片,宏块包括符合h.264的宏块,并且first_mb_in_slice包括符合h.264的first_mb_in_slice。替代地,当视频流包括符合h.265的视频流时,该切片包括符合h.265的切片区段,该宏块包括符合h.265的编码树块,并且first_mb_in_slice包括符合h.265的slice_segment_address。本领域技术人员将理解从h.264到h.265的术语的类似调整,例如但不限于与h.265slice_segment_data()字段相对应的h.264slice_data()字段等。应理解的是,符合h.264的切片和符合h.265的切片区段可被视为视频帧的空间上不同的区域,例如,帧510c和510d。该视频帧的该空间上不同的区域包括可以独立于同一视频帧的其他这种空间上不同的区域来解码的数据结构。符合h.264的宏块和符合h.265的编码树块包括视频帧的空间上不同的区域的一个区段。对于h.264系统,在nal报头中设置first_mb_slice字段包括将报头与视频帧的经编码的一个(单个)区段空间上不同的区域相关联。类似地,在h.265系统中,在nal报头中设置slice_segment_address字段包括将报头与视频帧的经编码的一个(单个)区段空间上不同的区域相关联。

因此,在依赖于与“切片”或“切片区段”、“宏块”或“编码树块”等相对应的构造的任何其他编码方案中,通用术语:“帧的空间上不同的区域”和“帧的空间上不同的区域的区段”将被本领域技术人员理解为适用。

应理解的是,如果需要,本发明的软件组件可以以rom(只读存储器)形式实现。如果需要,软件组件通常可以使用传统技术以硬件实现。还应理解的是,软件组件可以被实例化,例如:作为计算机程序产品或在有形介质上。在一些情况下,可以将软件组件实例化为能由适当的计算机解释的信号,但在本发明的某些实施例中可以排除这种实例化。

应理解的是,为了清楚起见,在单独的实施例的上下文中描述的本发明的各种特征也可以在单个实施例中组合提供。相反,为简洁起见,在单个实施例的上下文中描述的本发明的各种特征也可以单独提供或以任何适合的子组合提供。

本领域技术人员将理解的是,本发明不限于上文具体示出和描述的内容。相反,本发明的范围由所附权利要求及其等同物限定。

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