流媒体系统中的I帧解析方法和I帧解析器转让专利

申请号 : CN200810035012.2

文献号 : CN101540899B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 包红强许待文凌勇

申请人 : 上海贝尔阿尔卡特股份有限公司

摘要 :

本发明提出了一种在流媒体系统中I帧实时解析方法和I帧实时解析器。该方法包括以下步骤:(a)从输入传输流中获得视频传输包,(b)缓存所述视频传输包,(c)识别打包的基本流、基本流,以找到I帧起始码/I码片起始码,(d)判断是否检索到I帧起始码,(e)判断是否检索到I码片起始码,以及(f)判断是否检索到新的I码片起始码。该方法进一步包括,当在步骤(d)中判断用于检索的剩余数据长度不足且符合I帧起始码比较条件时,保存当前检索地址,然后返回到步骤(a)。

权利要求 :

1.一种在流媒体系统中解析I帧的方法,包括以下步骤:(a)从输入传输流中获得视频传输包,(b)缓存所述视频传输包,(c)识别打包的基本流、基本流,以找到I帧起始码/I码片起始码,(d)判断是否检索到I帧起始码,(e)判断是否检索到I码片起始码,(f)判断是否检索到新的I码片起始码,该方法特征在于进一步包括:当在步骤(d)中判断缓存的数据剩余N字节且该N字节与I帧起始码的前N字节相同的情况下,或者在步骤(e)中判断缓存的数据剩余N字节且该N字节与I码片起始码的前N字节相同的情况下,保存当前检索地址,然后返回到步骤(a),其中N是小于4的整数。

2.如权利要求1所述的方法,进一步包括在判断未检索到I帧起始码或I码片起始码的情况下,清空当前缓存并返回步骤(a)。

3.如权利要求1或2所述的方法,进一步包括在判断检索到新的I码片起始码的情况下,备份I帧数据,清空当前缓存,并返回步骤(a)。

4.如权利要求1或2所述的方法,进一步包括在判断未检索到新的I码片起始码的情况下,备份当前缓存,清空当前缓存,并返回步骤(a)。

5.一种在流媒体系统中解析I帧的解析器,包括:视频传输包获取装置,用于从输入传输流中获得视频传输包;缓存装置,用于缓存所述视频传输包;识别装置,用于识别打包的基本流、基本流,以找到I帧起始码/I码片起始码;以及判断装置,用于判断是否检索到I帧起始码、是否检索到I码片起始码以及是否检索到新的I码片起始码,该解析器特征在于进一步包括处理装置,所述处理装置被配置为当所述判断装置判断所述缓存装置中的数据剩余N字节且该N字节与I帧起始码的前N字节相同的情况下,或者在所述判断装置判断所述缓存装置中的数据剩余N字节且该N字节与I码片起始码的前N字节相同的情况下,保存当前检索地址,然后触发所述视频传输包获取装置从输入传输流中继续获得视频传输包,其中N是小于4的整数。

6.如权利要求5所述的解析器,其中,所述处理装置被配置为在所述判断装置判断未检索到I帧起始码或I码片起始码的情况下,清空当前缓存并触发所述视频传输包获取装置从输入传输流中继续获得视频传输包。

7.如权利要求5或6所述的解析器,其中,所述处理装置被配置为在所述判断装置判断检索到新的I码片起始码的情况下,备份I帧数据,清空当前缓存,并触发所述视频传输包获取装置从输入传输流中继续获得视频传输包。

8.如权利要求5或6所述的解析器,其中,所述处理装置被配置为在所述判断装置判断未检索到新的I码片起始码的情况下,备份当前缓存、清空当前缓存,并触发所述视频传输包获取装置从输入传输流中继续获得视频传输包。

说明书 :

流媒体系统中的I帧解析方法和I帧解析器

技术领域

[0001] 本发明涉及流媒体通信领域,具体涉及在流媒体服务器中对视频流内部帧(I帧)的实时解析。

背景技术

[0002] 数字音视频编解码技术是数字广播电视、DVD、多媒体计算机与网络、宽带通信产业的关键技术。1994年MPEG(运动图像专家组)和ITU合作制定的MPEG-2是第一代音视频编解码标准的代表,也是近年来国际上最为通行的音视频标准。中国于2002年6月成立了数字音视频编解码技术工作组(即AVS工作组)。AVS标准是“信息技术先进音视频编码”系列标准的简称。经过十多年的发展,音视频编码技术本身产业应用背景发生了明显变化。目前音视频产业可以选择的信源编码标准有四个:MPEG-2、MPEG-4、MPEG-4AVC(简称H.264,也称为JVT、AVC)以及AVS。就AVS标准本身来说,编码效率比目前的MPEG-2国际标准高2-3倍,与H.264相当,同时具有MPEG-2简单的语法结构。
[0003] MPEG2传输流(以下简称MPEG2-TS)是承载MPEG2、MPEG4和其他视频/音频压缩格式的传输格式。AVS也采用了MPEG2-TS作为传输格式。但是需要扩展MPEG2-TS以支持AVS标准。下面简单介绍AVSTS的结构。
[0004] AVS传输流包的大小为188字节,并且以1字节前缀(0x47)开始,该前缀包括13比特的包ID(PI(D),如表1所示。PID经由节目特定信息(PSI)表标识了包含在传输包的数据内容。一个PID值的传输流包只携带一个基本流的数据,相同的基本流的分组都有相同的PID,以使得接收装置能够选择其想要的基本流并拒绝其余的。
[0005] 表1传输流(TS)包
[0006]
[0007] 传输流包中的PID是信道标识符。它包含发现、识别和重构节目所必需的导航信息。TS包由PID值标识,表2给出了PID中包含的PID值。
[0008]
[0009] 根据PID表,可以对每个TS分组进行分类。首先,节目关联表(PAT)应当在分析流之前找到,其PID为0x000。对于包含的节目,PAT包含了所有节目映射表(PMT)的PID。至少我们可以发现不同节目流的视频和音频TS包。
[0010] 表3定义了节目关联部分
[0011]
[0012] 表4是节目映射表(PMT)的结构。
[0013]
[0014]
[0015] 根据PMT表,包含基本流的TS包(打包的基本流,简称PES)可以从传输流中获得,PES是TS包的有效载荷。
[0016] 图1a给出了TS包的例子。
[0017] 基本流(ES)数据在PES包中携带。PES包由PES包头部和跟随其后的包数据构成。PES包插入到TS包中。每个PES包头部的第一字节位于TS流的第一可用有效载荷位置。
[0018] PES包头部可以包含解码和呈现时间戳(DTS和PTS)。PES包头部还包含其他可选字段。
[0019] 图1b给出AVS ES包结构。与该图相对应,表5给出AVS序列头部字段的含义。
[0020]
[0021]
[0022] 注意,32位起始码video_sequence_start_code是预定的字符串,由24比特前缀和8比特码类型组成。24比特前缀是“0000 0000 0000 0000 00000001”。8比特前缀如下表所示:
[0023] 表6AVS序列头中的8比特码类型
[0024]
[0025] 注意,I帧起始码(i_picture_start_code)为十六进制数的B3。
[0026] 对流服务器来说,由于处理能力、安全性等多方面考虑,它必须要求对所传输的流编码进行识别,然后按照特定的程序进行处理。由于AVS流已经进行了TS封装,标识AVS编码格式的识别符为Streaming-type,识别符隐藏在TS流中,需要完全解开TS流以后才能识别。
[0027] I帧是基于离散余弦变换DCT的帧内压缩技术而形成的,该帧是编码的、独立压缩的图片。在流中含有的I帧越多,视频的质量就越好,但压缩效率会相应地降低。在视频内容进入流服务器后,识别AVS流完成后,需要提取AVS编码中的I帧,形成纯I帧的索引文件,为响应终端用户快进快退(也称为trick-play模式)时用,即快进快退时用户看到的是纯I帧的不连续图片。
[0028] 在实时性要求非常高的流媒体应用环境,目前有两种解决方法进行I帧的识别和提取,分别存在一些技术上的不足:1.仅采用一个数据包的缓存,对于信息的缺失忽略,这种方法比较常见;2.采用固定长的缓存方法,该方法能够满足有效信息的提取,但还是会有缓存溢出的可能性,同时也会造成时间上的延迟。

发明内容

[0029] 为了克服现有技术中存在的问题,本发明在从TS流中提取I帧文件时采用了可变长度自适应缓存的实时解析算法。根据本发明的方法不仅针对AVS系统解决了I帧提取的问题,对于诸如MPEG-2以及H.264等的其他系统也同样适用。在这里采用可变长度缓存的主要原因在于视频有效信息(这里的视频有效信息是指包含在流中的诸如头部等的管理开销)跨越TS传输包的情况出现具有一定的必然性,须使用高速缓存对包含有效的信息的数据包进行缓存。
[0030] 为此,本发明提出了一种在流媒体系统中解析I帧的方法,该方法包括以下步骤:(a)从输入传输流中获得视频传输包,(b)缓存所述视频传输包,(c)识别打包的基本流、基本流,以找到I帧起始码/I码片起始码,(d)判断是否检索到I帧起始码,(e)判断是否检索到I码片起始码,(f)判断是否检索到新的I码片起始码,该方法进一步包括,当在步骤(d)中判断缓存的数据剩余N字节且该N字节与I帧起始码的前N字节相同的情况下,或者在步骤(e)中判断缓存的数据剩余N字节且该N字节与I码片起始码的前N字节相同的情况下,保存当前检索地址,然后返回到步骤(a),其中N是小于4的整数。本发明另一方面提供了一种在流媒体系统中解析I帧的解析器,该解析器包括:视频传输包获取装置,用于从输入传输流中获得视频传输包缓存装置,用于缓存所述视频传输包;识别装置,用于识别打包的基本流、基本流,以找到I帧起始码/I码片起始码;以及判断装置,用于判断是否检索到I帧起始码、是否检索到I码片起始码以及是否检索到新的I码片起始码,该解析器进一步包括处理装置,所述处理装置被配置为当所述判断装置判断所述缓存装置中的数据剩余N字节且该N字节与I帧起始码的前N字节相同的情况下,或者在所述判断装置判断所述缓存装置中的数据剩余N字节且该N字节与I码片起始码的前N字节相同的情况下,保存当前检索地址,然后触发所述视频传输包获取装置从输入传输流中继续获得视频传输包,其中N是小于4的整数。
[0031] 本发明的I帧自适应缓存实时解析机制中,采用了变长的缓存以解析实时数据。在有效信息不足的情况下,能够自适应增加缓存的数据。自适应缓存结合实时解析算法,有效地消除了视频数据在解析过程中与TS、PES数据包的相关性,也减少了缓存冗余的数据导致的处理时间的增加和用户体验的下降。

附图说明

[0032] 如附图所示,通过下面更具体的优选实施例的描述,本发明前述和其他目的、特征和优点将变得明显,其中:
[0033] 图1a说明了188字节的传输流TS的结构;图1b给出了AVS基本流的数据结构;
[0034] 图2示出根据本发明的自适应变长缓存方法来解析I帧的流程图;
[0035] 图3示出自适应变长缓存I帧解析器的实施例逻辑框图。

具体实施方式

[0036] 图2的流程图给出了根据本发明的方法解析I帧的实施例。
[0037] 在背景技术部分已经提到,解析I帧的基础是正确识别I帧起始码和I码片起始码,这里的术语“I帧起始码”i_frame_start_code在其他编码标准中也被称为“I帧图片起始信息”,这里的术语“I码片起始码”I_frame_slice_code也被称为“I图片起始码”或“I帧第一条带起始码”。
[0038] 另外,还需要说明的是,本发明的方法是对视频流媒体I帧信息的一种高效实时检索算法,并不涉及视频流的解码。在根据本发明的实施例中,以AVS系统作为例子,但并不限于AVS标准本身。
[0039] 首先,在图2中,如步骤201所示,流媒体服务器接收输入的188字节的传输流TS,并对其进行解复用,以获得PAT、PMT等相关信息。PAT包括用来确定哪个节目(也称为频道)在相应传输流中存在的数据。PAT指向若干PMT(每个节目一个),PMT依次指向由流传送的相应节目的视频、音频和数据内容。这一步骤是实施本发明方法的基础,但它涉及的具体方法是本领域公知的现有技术,这里不再详细描述。在步骤202,缓存具有有效负载的传输流包。具体地,将有效负载推入自适应可变长度缓存,下文中为了说明的简单,用VLC指代自适应可变长度缓存。下面将提到,在进行至少一次本发明的解析过程之后,VLC中可能还留有数据,在这种情况下,将新数据和原数据合并,这一点是本发明的缓存机制与传统缓存机制的不同之处。VLC的长度等于推入负载后视频传输流有效负载的长度。可以设置一个VLC偏移指针,用以指示缓存器中的检索地址,在这里我们称它为VLC偏移位或VLC.Offset。在开始检索时,偏移量指针VLC.Offset的默认值为1,以后在查到部分符合条件的数据时,VLC缓存不会被清空,VLC的偏移量指针会保存本次检索的位置,以在新的检索中找到正确的检索位置。在查到和未查到需要数据的情况下都会清空VLC,同时将VLC.Offset自动置1。
[0040] 然后,在步骤203,进一步根据相应的标识字段识别打包PES和ES流。根据TS流中的PAT表中的信息和相应节目的PMT表信息,可以检索到每一个节目的视频流和音频流数据。经过实时编码器编码的视频流和音频流,都会以比特流的方式进行传输层打包,将比特流先拆解成多个PES数据包,其长度没有限定,且PES数据和TS数据之间的相关性可以由用户自定义,如可以以帧单位打包为每个PES包,或以多个帧打包为一个PES包,也可以去除两者相关性。然后将每个PES包拆分成多个TS包,如最后数据不足TS包188字节,则会以增加TS头信息中的调整字段来进行填充补足。
[0041] 因此对于各种各样的码流,要实现I帧自适应缓存,要考虑各种情况,必须将PES包和TS包的关联性去除。在提取中,首先判断TS头信息中的1位payload_unit_start_indicator标志位,如1,即表明TS的负载以PES分组的第一个字节开始,根据PES头信息中的负载长度或直接解析,即可得到PES分组中的编码视频流数据;0表示如有有效负载,即为PES分组数据。补充判断有效负载的条件,根据TS头信息中的2位adaptation_field_control,除标记位为10以外,其他条件该TS包都有PES分组有效负载。
[0042] 接着,在步骤204中,判断是否检索到I帧起始码i_frame_start_code,即0x000001B3。只要VLC中的数据大于或等于4个字节(因为i_frame_start_code的长度是4个字节),就将VLC中的数据与0x000001B3每4个字节地进行比较。每比较一次,就将VLC.Offset值增加1。随着比较的不断进行,当前缓存中用于检索的剩余数据越来越少。
[0043] 因此,在比较中,会出现三种可能的情况。第一种情况对应于判断框204的“否”分支,即未检索到0x000001B3,这意味着当前缓存中的所有数据对于检索I帧而言都是没有意义的,于是在步骤206中,清空当前缓存,VLC.Offset置1,回到步骤201,继续接收TS流。第二种情况对应于判断框204的“是”分支,这意味着,在当前的缓存中,完整的i_frame_start_code,即0x000001B3已经被检索到,VLC的偏移量即VLC.Offset的增量值为1。第三种情况是“用于检索的剩余数据长度不足且符合比较条件”,举例来说,如果此时VLC中的数据只剩下3字节,而这3个字节与0x000001B3的前3个字节一致;或者此时VLC中的数据只剩下2字节,而这2个字节与0x000001B3的前2个字节一致;或者此时VLC中的数据只剩下1字节,而这1个字节与0x000001B3的第1个字节一致。这几种情况都属于“用于检索的剩余数据长度不足且符合比较条件”的情况。在本发明的自适应变长缓存解析I帧的方法中,遇到负载提供的比较数据长度不足且符合比较条件时,保存当前的检索状态和检索地址,即VLC.Offset不增加,回到步骤201,继续接收数据。
[0044] 在以上描述的第二种情况下,已经检索到完整的i_frame_start_code,则该处理流程前进到205,判断是否检索到I码片起始码I_frame_slice_code,0x00000100。
[0045] 与以上描述的过程类似,在比较中,会出现三种可能的情况。第一种情况对应于判断框205的“否”分支,即未检索到0x00000100,这意味着当前缓存中的所有数据对于检索I帧而言都是没有意义的,于是在步骤206中,清空当前缓存,VLC.Offset置1,回到步骤201,继续接收TS流。第二种情况对应于判断框205的“是”分支,这意味着,在当前的缓存中,完整的i_frame_slice_code,即0x00000100已经被检索到,VLC.Offset的增量值为1。第三种情况是“用于检索的剩余数据长度不足且符合比较条件”,举例来说,如果此时VLC中的数据只剩下3字节,而这3个字节与0x00000100的前3个字节一致;或者此时VLC中的数据只剩下2字节,而这2个字节与0x00000100的前2个字节一致;或者此时VLC中的数据只剩下1字节,而这1个字节与0x00000100的第1个字节一致。这几种情况都属于“用于检索的剩余数据长度不足且符合比较条件”的情况。在本发明的自适应变长缓存解析I帧的方法中,遇到负载提供的比较数据长度不足且符合比较条件时,保存当前的检索状态和检索地址,即VLC.Offset不增加,回到步骤201,继续接收数据。
[0046] 在205判断框的“是”分支情况下,前进到判断框208,判断是否检索到新的i_frame_slice_code。一旦检索到新的i_frame_slice_code,说明刚才已经检索到完整的I帧数据,则在步骤210,备份I帧数据,清空当前缓存并对I帧数据进行相应处理。如果当前缓存中没有检索到新的i_frame_slice_code,这意味着I帧中的剩余数据存在于即将到来的下一个TS流中。因此,在步骤209中,对当前缓存的数据进行备份,然后清空当前缓存,VLC.Offset置1,并回到步骤201。
[0047] 以上参照图2描述了根据本发明的自适应变长缓存解析I帧的方法实施例。和根据本发明的方法实施例相对应,图3给出了在流媒体系统中解析I帧的解析器300的实施例,该解析器包括:视频传输包获取装置301,用于获取需要的TS包;缓存装置302,用于缓存所述视频传输包;识别装置303,用于识别I帧起始码/I码片起始码;以及判断装置304,用于判断是否检索到I帧起始码、是否检索到I码片起始码以及是否检索到新的I码片起始码。该解析器300还包括处理装置305。
[0048] 当传输流输入时,视频传输包获取装置301接收输入传输流,对其进行解复用,并通过PAT、PMT等信息获得视频传输包。缓存装置302,即上文中提到的VLC对视频传输包进行高速缓存。与传统的传输包缓存不同的是,在进行至少一次本发明的解析过程之后,原缓存装置VLC中可能还留有上一次保存的数据。在这种情况下,将新数据和原数据合并。VLC的长度等于推入负载后视频传输流有效负载的长度。
[0049] 识别装置303根据相应的标识字段识别打包PES和ES流。根据TS流中的PAT表中的信息和相应节目的PMT表信息,可以检索到每一个节目的视频流和音频流数据。识别装置303在识别ES流的基础上进一步查找我们关心的信息,即I帧起始码和I码片起始码。
[0050] 与识别装置303协作的判断装置304判断是否检索到I帧起始码i_frame_start_code,即0x000001B3。
[0051] 前面提到三种比较结果,第一种情况是未检索到0x000001B3,这意味着当前缓存中的所有数据对于检索I帧而言都是没有意义的,于是触发处理装置305清空当前缓存,VLC.Offset置1,并命令视频传输包获取装置301继续接收TS流。第二种情况是检索到完整的i_frame_start_code,即0x000001B3已经被检索到。第三种情况是“用于检索的剩余数据长度不足且符合比较条件”,举例来说,如果此时VLC中的数据只剩下3字节,而这3个字节与0x000001B3的前3个字节一致;或者此时VLC中的数据只剩下2字节,而这2个字节与0x000001B3的前2个字节一致;或者此时VLC中的数据只剩下1字节,而这1个字节与0x000001B3的第1个字节一致。这几种情况都属于“用于检索的剩余数据长度不足且符合比较条件”的情况。在第三种情况下,判断装置304的比较结果触发处理装置305保存当前的检索状态和检索地址,即VLC.Offset不增加,命令视频传输包获取装置301继续接收TS流。
[0052] 在判断装置304已经检索到完整的i_frame_start_code的情况下,继续判断是否检索到I码片起始码I_frame_slice_code,0x00000100。
[0053] 简而言之,判断装置304在检索到I帧起始码时,触发识别装置303识别I码片起始码,在未检索到I帧起始码时,触发处理装置305清空当前缓存,并使得VLC.Offset置1,在检索到可能的I帧起始码时,处理装置305保存当前地址,并触发装置301继续接收新的TS流。
[0054] 判断装置304在判断是否检索到I码片起始码时,过程与判断是否检索到I帧起始码类似,只是在检索到I帧起始码和I码片起始码之后,如果没能在当前缓存中检索到新的I码片起始码,则触发处理装置305备份当前缓存、清空当前缓存,然后到新的传输流中寻找需要的数据。
[0055] 尽管参照特定实施例描述了本发明,对于本领域技术人员来说,显而易见的是,本发明并不限于之前说明性实施例所给出的细节,并且在不偏离本发明精神和范围的情况下,可以用各种变化和修改来实现本发明。例如,根据本发明的方法实施例中的步骤可以在本发明基本思想范围内进行合并或拆分,根据本发明的解析器的实施例可以根据具体实现中的需要对某些装置进行修改和替换。无论从哪一点来看,上述实施例都应当被认为是说明性的而不是限制性的,本发明的范围由附加的权利要求而不是由前面的描述来限定。