发明内容
本发明旨在提供一种多媒体码流识别的方法和装置,以解决当AVS、H.264、和MPEG-2三种类型的数据格式混合在网络媒体流中,无法对所获得的网络媒体流的数据类型进行识别并解码的问题。
根据本发明的一个方面,提供一种多媒体码流识别的方法,包括检测出码流中的起始码前缀和与其相邻的起始码后缀;按照起始码后缀判别出码流的类型,并去除码流中的起始码前缀;按照判别出的码流的类型对去除了起始码前缀的码流进行解码,其中,去除码流中起始码前缀的过程包括将被检测的码流存储于第一存储区;在检测出码流中的起始码前缀和与其相邻的起始码后缀之后,将第一存储区中的码流存储到第二存储区,并在存储过程中,丢弃起始码前缀。
优选地,存储过程还包括当第二存储区中的码流数据量大于阈值时,将第二存储区中丢弃了所述起始码前缀的码流按照字节对齐后保存到第三存储区中。
优选地,按照起始码后缀判别出码流的类型的过程包括以下步骤之一:
如果起始码后缀为表示H.264协议的序列参数集的标识,则判断出码流的类型为H.264协议的类型;
如果起始码后缀为表示AVS协议的视频序列起始码的标识,则判断出所述码流的类型为AVS协议的类型;
如果当前获得的起始码后缀为表示AVS协议的PB帧图像起始码的标识、且后续获得的起始码后缀为表示AVS协议的视频序列起始码的标识,则判断出码流的类型为AVS协议的类型;
如果首次获得的起始码后缀为表示MPEG-2协议的视频序列起始码或AVS协议的I图像起始码的标识,再次获得的起始码后缀为表示MPEG-2协议的图像起始码或AVS的条带起始码的标识,最后获得的起始码后缀为表示AVS的PB图像起始码的标识,则判断出码流的类型为AVS协议的类型;
如果首次获得的起始码后缀为表示MPEG-2协议的视频序列起始码或AVS协议的I图像起始码的标识,再次获得的起始码后缀为表示MPEG-2协议的图像起始码或AVS的条带起始码的标识,最后获得的起始码后缀为表示MPEG-2协议的图像起始码的标识,则判断出码流的类型为MPEG-2协议的类型。
优选地,当判别出的码流为H.264协议或AVS协议的码流时,还包括检测出第一存储区中的码流内的伪起始码;在所述存储过程中,还包括丢弃伪起始码中的位插入数据。
根据本发明的另一个方面,还提供一种多媒体码流识别的装置,包括存储单元,用于存储码流数据;处理单元,其包括检测模块,用于检测码流中的起始码前缀和与其相邻的起始码后缀;识别模块,用于通过检测模块检测出的起始码后缀,识别出码流的类型;起始码消除模块,用于去除码流中检测出的起始码前缀;传输单元,用于将获得码流数据存储在存储单元,在处理单元对码流数据处理后,按照识别出的码流类型输出;其中,存储单元包括第一寄存器,用于存储被检测的码流;第二寄存器,用于存储经过处理单元处理后的码流;传输单元用于将获得码流数据存储在第一寄存器,将处理单元处理后的码流存储在第二寄存器。
优选地,该装置还包括解码器,用于接收来自传输单元的码流数据并解码。
优选地,存储单元还包括第三寄存器,用于当第二寄存器中的码流数据量大于阈值时,存储第二寄存器中的按照字节对齐后的码流。
优选地,识别模块包括第一子模块,用于在识别出所述起始码后缀为表示H.264协议的序列参数集的标识时,判断码流的类型为H.264协议的类型;第二子模块,用于在识别出所述起始码后缀为表示AVS协议的视频序列起始码的标识时,判断码流的类型为AVS协议的类型;第三子模块,用于在识别出当前获得的起始码后缀为表示AVS协议的PB帧图像起始码的标识、且后续获得的起始码后缀为表示AVS协议的视频序列起始码的标识时,判断码流的类型为AVS协议的类型;第四子模块,用于在识别出首次获得的起始码后缀为表示MPEG-2协议的视频序列起始码或AVS协议的I图像起始码的标识,再次获得的起始码后缀为表示MPEG-2协议的图像起始码或AVS的条带起始码的标识,最后获得的起始码后缀为表示AVS的PB图像起始码的标识时,判断码流的类型为AVS协议的类型;第五子模块,用于在识别出首次获得的起始码后缀为表示MPEG-2协议的视频序列起始码或AVS协议的I图像起始码的标识,再次获得的起始码后缀为表示MPEG-2协议的图像起始码或AVS的条带起始码的标识,最后获得的起始码后缀为表示MPEG-2协议的图像起始码的标识时,判断码流的类型为MPEG-2协议的类型。
优选地,所述处理单元还包括伪起始码处理模块,用于在识别模块识别出的起始码类型为H.264协议或AVS协议的码流时,检测并去除所述第一寄存器中码流数据内的伪起始码。
本发明通过起始码后缀的识别,可快速检测出码流的类型,并按照检测出的码流类型选择相应的解码器进行解码,可处理混合有多种类型的码流的网络媒体流数据;对于识别出的码流类型,如果码流中具有伪起始码,则按照不同码流的类型删除码流中所插入的相应长度的伪起始码;在去除码流中起始码前缀和伪起始码的过程中,采用分级传输的方式,在码流数据向另一级寄存器传输时,丢弃起始码前缀和伪起始码,从而实现有效的去除,处理简便,易于实现;在传输过程中,如果寄存器中的数据已满,采用缓存的方式存储数据,从而避免数据溢出。
具体实施方式
为清楚说明本发明的方法和装置,下面给出优选的实施例并结合附图详细说明。本发明的实施例中,通过对各种格式码流内的各个标识进行识别,并在识别之后去除此标识,将识别出的码流进行解码。
在阐述本发明实施例之前,需要首先说明实施例中所涉及技术点的定义及概念,以便于理解本发明的实施例中的内容。
序列层(video sequence)是AVS、H.264、MPEG-2视频层的最高层,该层中包含整个视频节目序列的高层语法信息。该层语法信息如果不能获取并正确解析将造成整个视频序列无法正确解码。因此,每一个节目的搜索和切换都必须首先找到新的节目的序列信息,并从此开始一个新的节目内容的解码和显示。在搜索到新的节目的序列信息前将不能显示新的节目的视频画面。期间,解码器将丢失该序列之前的所有视频信息。
对于这三种格式的媒体流,每种媒体流中均存在各种作为标识的起始码值,不同的媒体流的某些起始码值可能相同。因此,在识别过程中,对于有些首次检测出的起始码值,可直接识别出码流的类型,即媒体流的格式,如H.264或AVS等,对于有些起始码值,则需要进一步依据识别出其它的起始码值,才能确定出此码流的类型。对于各个码流的类型,可分别参见以下的MPEG-2起始码类型值定义的表1、AVS基准档起始码类型值定义的表2和H.264起始码类型值定义的表3。
表1
起始码类型 |
起始码值(十六进制) |
图像起始码(picture_start_code) |
00 |
条带起始码(Slice_start_code) |
01~AF |
保留(Reserved) |
B0 |
保留(Reserved) |
B1 |
用户数据起始码(User_data_start_code) |
B2 |
视频序列起始码(sequence_header_code) |
B3 |
视频序列错误起始码(sequence_error_code) |
B4 |
视频扩展起始码(extension_start_code) |
B5 |
保留(Reserved) |
B6 |
视频序列结束码(Sequence_end_code) |
B7 |
系统起始码(system_start_codes) |
B9~FF |
表2
起始码类型 |
起始码值(十六进制) |
条带起始码(slice_start_code) |
00~AF |
视频序列起始码(video_sequence_start_code) |
B0 |
视频序列结束码(video_sequence_end_code) |
B1 |
用户数据起始码(user_data_start_code) |
B2 |
I图像起始码(i_picture_start_code) |
B3 |
保留 |
B4 |
视频扩展起始码(extension_start_code) |
B5 |
PB图像起始码(pb_picture_start_code) |
B6 |
视频编辑码(video_edit_code) |
B7 |
保留(Reserved) |
B8 |
系统起始码(system start codes) |
B9~FF |
[0045] 表3
由表1至表3可知AVS、H.264、MPEG-2的起始码值既有相似性又有差异性。其中,H.264的起始码值与AVS、MPEG-2差异较大,而AVS与MPEG-2则基本采用了相同的起始码值,只是在两个视频编码标准中的含义不尽相同。
所以模式识别及码流预处理模块的首要任务就是通过AVS、H.264、MPEG-2各自的起始码的差异,尽可能快的识别出当前视频节目码流的编码标准类型,进而通过CPU向相应的解码器下达正确的解码指令。在模式识别之后还要找到并删除当前视频节目码流中起始码前缀,同时标识出码流单元类型。
以AVS为例,一个原始的AVS码流如表4所示:
表4
其中,00 00 01 B0为起始码,00 00 01为起始码前缀,B0为起始码后缀,也就是起始码值,aa...aa序列头数据。
经过码识别并处理后,输出到码流FIFO里面的结果如表5内的AVS码流所示:
表5
Start_Code_Flag等于“1”表示当前字节是码流单元类型,每一个码流FIFO字节都有这个标志位。因为码流起始码是字节对齐的,因此码流单元类型字节也是按照相对应字节码流,实现字节对齐的。
如前面所述,AVS码流都由一个特殊的起始码前缀“0x000001”开始,为了防止码流内部正常图像内容与起始码前缀相同,在编码时将正常图像内容中连续的22个“0”比特后面需要加入两个填充比特“10”。因此AVS解码时每读入一个字节时,就检测当前字节和前面两个字节是否构成“0x000002”的特殊24比特图样,如果是则丢弃当前字节最低两位“10”。所以码流处理过程的第二个功能就是查找并删除特殊24比特图样最低两位的“10”比特。以下为几种24比特样图的示例:
例如原始的AVS码流是:...xx 00 00 01 93...xx...00 00 02 05 32...;其中,“00 00 01”是起始码,“00 00 02”是一个特殊的24比特图样。码流处理过程中将删除“00 00 02”的最低2比特。
在国际标准H.264中,为防止伪起始码添加了一个伪字节,在码流中16个长连零后插入8bit的伪字节“00000011”,AVS标准是在22个长连零后添加了2个伪比特,在编码效率上有所提高,但是在处理上增加了一些难度,伪比特后面的下一个起始码开始前的所有字节都需要进行左移操作。
由以上分析可知,AVS和H.264在码流中插入伪起始码的机制完全不同,一个是2比特的伪比特,一个是8比特的伪字节。因此,在删除各自的伪起始码时要充分考虑各自特点,并尽可能复用相应功能。
基于上述对各种码流类型的媒体数据的起始码和伪起始码分析,可充分利用起始码类型的特点,在识别出起始码前缀后,通过判别起始码的后缀,即起始码的类型值,从而识别出码流的类型是H.264、MPEG-2和AVS中的哪一种,并去除码流中的伪起始码。
本发明原理流程的示意图可参见图1,包括变长解码过程中,随时接收CPU发出的节目搜索或节目切换指令,该指令采用精简指令集RISC中的指令。该指令表明用户需要更换正在播出的电视节目,重新对用户选择的节目的视频编解码模式进行识别及码流预处理;即采用DMA方式读取码流并经过数据缓存后,进行模式识别码流预处理,根据识别出的码流类型,在此基础上启动相应的视频解码器decoder进行正常解码。
模式识别及码流预处理的过程主要包括:模式识别、起始码识别、和伪起始码的去除;过程如下:
1、接收到CPU发出的节目搜索或节目切换的开始(start)指令后,启动模式识别、码流预处理功能。通过寄存器对起始码前缀“0x 00 00 01”的搜索。
2、在每次搜索到起始码前缀“0x 00 00 01”后,在下一个字节即数据起始码后缀(即代表起始码类型的起始码值)到来时,启动用于码流类型识别的三级滤波器。首先启动第一级滤波器;并根据第一级滤波器搜索的结果顺序启动第二级和第三级滤波器,通过第一步到第三步完成模式识别;或者通过第一级滤波器直接完成模式识别工作,从而最终确定码流的类型。
3、在模式识别之后,根据不同的模式确定码流中的伪起始码,通过寄存器去除码流中的伪起始码。
基于上述各个表中起始码后缀之间的关系和本发明原理的阐述,通过本发明的方法实施例,详细说明对码流进行识别并处理的过程。
在该实施例中,详细说明了对码流中起始码和伪起始码的识别、码流类型识别和起始码及伪起始码的去除过程。参见图2所示的三级寄存器结构图,采用移位寄存器B和移位寄存器R对起始码进行识别并去除伪起始码;首先通过寄存器R0、寄存器R1和寄存器R2识别出起始码前缀,同时启动滤波器进行模式识别,即码流类型的识别;通过寄存器R2、寄存器R3和寄存器R4实现伪起始码的识别,并与移位寄存器B一起去除伪起始码,将去除伪起始码的数据缓存至第三级寄存器FIFO中。
在此实施例中,首先说明三级寄存器结构关系及功能。图2所示的移位寄存器R,即第一 级寄存器,采用5个8bit(字节对齐)宽度的寄存器组,分别为寄存器R0、R1、R2、R3、R4。码流类型的识别和起始码及伪起始码去除过程中,码流以字节为单位输入到寄存器R0中,每次输入码流时寄存器R0对R1赋值、寄存器R1对R2赋值、寄存器R2对R3赋值依次类推,以字节为单位向左侧传递。检测起始码是通过检测R2、R1和R0寄存器是否是起始码的前缀“0x 00 00 01”,如果是前缀则正要输入寄存器R0的8比特码流就是起始码的后缀,即代表起始码类型的起始码值,对AVS、H.264、MPEG-2视频标准都是如此。因此,当R2、R1和R0寄存器检测到起始码前缀时,下一个数据到来时即可启动三种滤波器进行各视频编码标准的起始码后缀、即起始码类型值进行识别。
在三种滤波器对起始码类型值识别出以后,确定出媒体流的数据模式,即码流类型,再由寄存器R4、R3和R2检测伪起始码,在模式识别后由于已经正确识别出了视频编解码标准,如果当前解码的为MPEG-2的视频节目流,则只需将起始码前缀去除后把有效视频数据送入第二级寄存器(即移位寄存器B);如果为AVS或者H.264的视频节目流则不仅需要去除起始码前缀,还需检测各自的伪起始码并将其去掉,再把有效数据送入第二级寄存器中。
对于解码的为AVS标准的视频节目流时,如果{R4,R3,R2}寄存器的值为“0x 00 00 02”,则此处为伪起始码,需要去除伪起始码中的位插入数据,去除寄存器R2中最后2比特,将寄存器R2的高6位移入到寄存器B中;对于解码的为H.264视频节目流时,如果{R4,R3,R2}寄存器的值为“0x000003”,则此处为位插入,需要去除寄存器R2中的8比特,8位都不移入到第二级寄存器B中。
第二级寄存器的宽度由缓存FIFO的宽度而定,缓存FIFO可以采用各种存储器,当采用寄存器时,即为文中所述的第三级寄存器,FIFO的宽度选择原则为NByte+1bit。其中的1bit为起始码标志位。标志位为“1”表示该组数据中包含起始码类型值信息;标志位为“0”表示是普通的码流数据。比如N=2,缓存FIFO有效数据宽度为2Byte,则FIFO的宽度为2Byte+1bit,即17bit。在确定了FIFO的宽度后,第二级寄存器的宽度为(N+1)Byte,即24bit;由于第二级寄存器中有一个字节用于存储来自第一级寄存器中的数据,如起始码后缀,因此第二级寄存器的宽度比FIFO的宽度多(1Byte-1bit)宽度,以便于在第一级寄存器向第二级寄存器存储数据时,不影响将第二级寄存器的数据写入到缓存FIFO中。
在去除起始码和伪起始码时,将数据通过寄存器R2移入第二级寄存器B0中,并通过寄存器B0传输至寄存器B1,寄存器B1中的数据传至寄存器B2。在寄存器R2的数据移入到第二级寄存器B的同时,第二级寄存器B中的数据同时由低位向高位移动相同的位数,以实现按照字节对齐,当第二级寄存器B内的数据大于或者等于N Byte时,将寄存器B1、寄存器B2 的内容与起始码标志位一起写入缓存FIFO。缓存FIFO中的数据及标志位由连接的解码模块读取。
以上这三级移位寄存器的存储空间可以是同一个寄存器上的三个存储区,也可以分别为三个独立的寄存器,将每个寄存器作为每一级寄存器;当然,采用其它类型存储器也可以实现,但处理速度不如寄存器处理速度快。
上面详细介绍了寄存器的结构以及功能,下面说明码流的起始码、模式识别以及伪起始码的去除过程。参见图3和图6,图3是本发明方法实施例的流程图,图6所示的应用本发明的设备示意图。本发明的多媒体码流处理过程由图6所示的多媒体处理芯片62执行以下步骤,包括:
S31:去除读入的数据流中的起始码前缀。
来自电视网络或计算机网络中的数据码流通过设备的通信接口63传输到多媒体处理芯片内。码流以字节为单位输入到多媒体处理芯片62的寄存器R0中,每次码流输入时,均为寄存器R0对R1赋值、寄存器R1对R2赋值、寄存器R2对R3赋值依次类推,以字节为单位向左侧传递。多媒体处理芯片62检测起始码是通过检测寄存器R2、R1和R0中的数据是否为起始码的前缀“0x 00 00 01”,从而识别出起始码前缀。
当寄存器R2、R1和R0中的数据是起始码前缀时,则正要输入R0的8比特码流就是起始码的后缀,即代表起始码类型的起始码值,待起始码前缀后的第一个数据即起始码后缀左移到R2处时,起始码后缀送入第二级寄存器B的同时,将第二级寄存器B中之前剩余的数据写入第三级寄存器FIFO中。这样就完成了起始码的去除工作。
S32:通过起始码后缀识别码流类型。
在从寄存器R2到R0获得起始码前缀“0x 00 00 01”后,在起始码后缀(即起始码类型值)到来时,多媒体处理芯片62启动其内部的用于模式识别的三级滤波器,从而实现对码流模式的识别,并在模式识别之后,多媒体处理芯片62启动相应的解码器,如图中的H.264解码器64、MPEG-2解码器65或AVS解码器66。由于各个不同码流类型下的相同起始码值代表的含义各不相同或完全相同。因此,在阐述识别码流类型流程的过程中,首先分析各个码流模式下起始码值与起始码类型之间的对应关系。
对于模式的识别过程,通过表1至表3可以得出,不同的视频编解码标准中序列层的起始值有所重合。如H.264的序列参数集的起始码及起始码值为“0x 00 00 01 07”,其中,“0x 00 0001”为起始码前缀,“07”为起始码值,即起始码后缀。
当模式识别过程中搜索到该起始码前缀及起始码值,即可马上确定该视频节目序列的编码 模式的类型,进而立即启动H.264解码器64(decoder)进行工作。
同理,AVS的序列参数的起始码为“0x 00 00 01 B0”,当模式识别过程中搜索到该起始码前缀即可马上确定该视频节目序列的编码模式,进而立即启动AVS解码器66进行工作。
MPEG-2的序列参数的起始码为“0x 00 00 01 B3”,而该参数序列同时也为AVS视频编码标准中的I帧图像起始码。因此,当搜索到“0x 00 00 01 B3”时只能初步判定该视频节目序列为MPEG-2或AVS视频编解码标准中的一种,不能由此确定最终的编解码模式,因此还要根据MPEG-2、AVS各自的起始码值的特点进行二次甚至三次搜索才能最终确定编码模式。
同理,当模式识别模块第一次搜索到“0x 00 00 01 B6”时,多媒体处理芯片62可立即判别出该视频节目序列为AVS视频编解码标准,因为该序列是AVS协议中的PB帧起始码,在H.264编解码标准中未曾用到,而在MPEG-2编解码标准中也被保留。但这一阶段只能判别是AVS视频节目流,而要正确解码还必须继续搜索到其第一个序列层起始码。
基于上述的技术点,针对起始码24bit数据采用三级滤波结构,从而实现快速的码流模式识别的目的。
第一级滤波器支持4路起始码的滤波,分别是“0x 00 00 01 07”、“0x 00 00 B0”、“0x 00 0001 B6”、“0x 00 00 01 B3”,基于这4个起始码值与起始码类型的对应关系,4路滤波器分别对应识别出H.264序列起始码、AVS序列起始码、AVS的PB帧起始码、MPEG-2的序列起始码或AVS的I帧起始码。
在第一级滤波器的基础上进一步设置第二级滤波器,同时支持2路起始码的滤波,分别是“0x 00 00 01 B0”、“0x 00 00 01 00”,基于这2个起始码与起始码类型的对应关系,2路滤波器识别AVS序列起始码、MPEG-2的图像起始码或AVS的第一条带起始码。
在第二级滤波器的基础上进一步设置第三级滤波器,同时支持2路起始码的滤波,分别是“0x 00 00 01 00”、“0x 00 00 01 B6”,基于这2个起始码值与起始码类型的对应关系,2路滤波器识别AVS序列起始码、MPEG-2的图像起始码或AVS的PB帧起始码。
由于节目搜索或节目切换时码流的获取具有完全的随机性,因此模式识别的流程和时间也不尽相同。某些情况下在第一级滤波器中就能顺利完成视频编解码模式的识别;但在某些情况下要连续进行到第三级滤波才能顺利完成视频编解码模式的识别。参见图4所示的示例码流类型的流程图,识别过程包括以下三个步骤:
第一步:第一级滤波器启动后,4路起始码“0x 00 00 01 07”、“0x 00 00 01 B0”、“0x 00 0001 B6”和“0x 00 00 01 B3”的滤波同时进行工作。在搜索滤波过程中根据首先搜索到的内容不同,模式识别工作将分别进入到以下四个阶段或状态:
1)若首先搜索到“0x 00 00 01 07”,则多媒体处理芯片62可以判别出该视频节目流的类型为H.264格式,即可向CPU发出准备完成(ready)信号,模式识别结束,无需进行第二步和第三步。
2)若首先搜索到“0x 00 00 01 B0”,则多媒体处理芯片62可以判别出该视频节目流的类型为AVS格式,即可向CPU发出ready信号,模式识别结束,无需进行第二步和第三步。
3)若首先搜索到“0x 00 00 01 B6”,则多媒体处理芯片62可以判别出该视频节目流的类型为AVS格式,但还需继续搜索AVS的序列起始码才能保证AVS解码器正常启动解码功能。因此,这时需要将AVS的标志位flag拉高,并进入第二步。
4)若首先搜索到“0x 00 00 01 B3”,多媒体处理芯片62则可以判别出该视频节目流的类型为AVS格式或者MPEG-2格式,因此,这时需要将AVS和MPEG-2的标志位flag同时拉高,并进入第二步进行进一步识别。
标志位是用于标识是否需要进一步判别的标识,仅在执行滤波处理时使用,上述中将标志位拉高,即将标志位置1或置0,通常置为1;这样,在进行下一步判别时,通过所置的标志位即可判别出是否需要进一步判别以及所判别的内容。
第二步:由于第一级滤波器未能完成最终的模式识别工作,因此,必需启动第二级滤波器,并根据第一步中第一级滤波器的结果启动相应的第二级滤波器,具体如下:
1)若此时只有AVS的标志位flag被拉高,说明在第一步中第一级滤波器已经识别出了起始码值为B6,该视频节目流为AVS格式,则多媒体处理芯片62只需启动第二级滤波器识别码流中是否还存在起始码“0x 00 00 01 B0”即可,待该起始码搜索完成后,多媒体处理芯片62即可向CPU61发出ready信号,模式识别结束,无需进行第三步;如果没有搜索到,模式识别结束,无需进行第三步。
2)若此时AVS的标志位flag和MPEG-2的标志位flag被拉高,说明在第一步中第一级滤波器的识别结果为该视频节目流为AVS格式或者MPEG-2格式中的一种,即识别出起始码值为B3。则多媒体处理芯片62需要启动第二级滤波器,识别码流中是否还存在“0x 00 00 01 00”,为进一步识别AVS和MPEG-2做准备。搜索完成后进入第三步。
第三步:由于第二级滤波器在第一级滤波器的基础上已经搜索到了起始码“0x 00 00 01 00”,所以此时需要同时启动第三级滤波器,多媒体处理芯片62进一步识别码流中是否存在“0x 00 0001 B6”或“0x 00 00 01 00”,具体如下:
1)若首先搜索到“0x 00 00 01 B6”,则可以判定该视频节目流的类型为AVS格式,即可向CPU发出ready信号,模式识别结束。
2)若首先搜索到“0x 00 00 01 00”,则可以判定该视频节目流的类型为MPEG-2格式,即可向CPU发出ready信号,模式识别结束。
对于在第二步和第三步中的起始码值的识别过程之前,也同样需要先执行识别起始码并去除的步骤。无论在哪个步骤识别出码流模式,都会启动相应的解码器进行解码。
步骤S33:按照码流的类型判断是否存在伪起始码。
由于不同的码流类型的编码结构不同,对应MPEG-2的码流中没有伪起始码,而AVS和H.264类型的码流中具有伪起始码。因此,多媒体处理芯片62需要按照码流的类型判断出码流中是否具有伪起始码,如果识别出正在解码的视频节目流为MPEG-2,则没有伪起始码,无需进行伪起始码的去除工作。可直接启动MPEG-2的解码器对码流执行步骤S35进行解码。当然,MPEG-2的数据类型只是本发明的实施例中的一个举例,还存在多种没有伪起始码类型的码流,可在去除起始码之后,直接进行解码,在此不一一赘述;如果有,则执行步骤S34。
步骤S34:去除码流中的伪起始码。
多媒体处理芯片62若识别出当前正在解码的视频节目流为AVS、或H.264格式,多媒体处理芯片62在去除起始码的同时还需要去除码流中可能含有的伪起始码。
多媒体处理芯片62内的寄存器R4、R3和R2则用于检测伪起始码,对于当前解码的模式为AVS标准的视频节目流时,如果寄存器{R4,R3,R2}的数据值为“0x 00 00 02”,则此处为位插入,需要去除寄存器R2中最后2比特,即将寄存器R2中的高6位移入到移位寄存器B中;对于解码的模式为H.264视频节目流时,如果寄存器{R4,R3,R2}的数据值为“0x 00 00 03”,则此处为位插入,需要去除R2寄存器中的8比特,此时寄存器R2中的8个比特位都不移入移位寄存器B中。
步骤S35:解码器按照码流类型对码流进行解码。
通过上述的步骤,实现去除了伪起始码后,按照识别出码流类型,将去除伪起始码后的码流选择相应的解码器进行解码,如图6中的H.264解码器64、MPEG-2解码器65、AVS解码器66。
在本发明的方法实施例中,在解码的同时也执行对码流类型的判别。当然,还可以在每次接收到用户切换电视节目信号时,执行一次判别码流类型的操作,在解码过程中,不再执行对码流的判别操作。
上面说明了本发明方法实施例的工作流程,下面给出本发明的装置实施例,详细说明本发明的装置实施例,参见图5所示的装置实施例的结构图,包括:
存储单元51,用于存储码流数据;
处理单元52,包括:
检测模块521,用于检测出所述码流中的起始码前缀和与其相邻的起始码后缀;
识别模块522,用于通过所述检测模块检测出的起始码后缀,识别出所述码流的类型;
起始码消除模块523,用于去除所述码流中检测出的起始码前缀;
传输单元53,用于将获得所述码流数据存储在所述存储单元51,在所述处理单元52对所述码流数据处理后,按照识别出的所述码流类型,将所述码流数据输出至相应的解码器。
优选地,所述存储单元51包括:
第一级寄存器511,用于存储所述被检测的码流;
第二级寄存器512,用于存储经过所述处理单元52处理后的码流;
所述传输单元53,用于将获得所述码流数据存储在所述第一级寄存器511,将所述处理单元52处理后的码流存储在所述第二级寄存器512。
优选地,所述存储单元51还包括:
第三级寄存器513,用于当所述第二级寄存器512中的码流数据量大于阈值时,存储所述第二级寄存器512中的码流数据。
优选地,所述识别模块522包括:
第一子模块5221,用于在识别出所述起始码后缀为表示H.264协议的序列参数集的标识时,判断出所述码流的类型为H.264协议的类型;
第二子模块5222,用于在识别出所述起始码后缀为表示AVS协议的视频序列起始码的标识时,判断出所述码流的类型为AVS协议的类型。
第三子模块5223,用于在识别出当前获得的起始码后缀为表示AVS协议的PB帧图像起始码的标识、且后续获得的起始码后缀为表示AVS协议的视频序列起始码的标识时,判断出所述码流的类型为AVS协议的类型;
第四子模块5224,用于在识别出首次获得的起始码后缀为表示MPEG-2协议的视频序列起始码或AVS协议的I图像起始码的标识,再次获得的起始码后缀为表示MPEG-2协议的图像起始码或AVS的条带起始码的标识,最后获得的起始码后缀为表示AVS的PB图像起始码的标识时,判断出所述码流的类型为AVS协议的类型;
第五子模块5225,用于在识别出首次获得的起始码后缀为表示MPEG-2协议的视频序列起始码或AVS协议的I图像起始码的标识,再次获得的起始码后缀为表示MPEG-2协议的图像起始码或AVS的条带起始码的标识,最后获得的起始码后缀为表示MPEG-2协议的图像起始码的标识时,判断出所述码流的类型为MPEG-2协议的类型。
优选地,所述处理单元52还包括:
伪起始码处理模块524,用于在所述识别模块识别出的起始码类型为H.264协议或AVS协议的码流时,检测并去除所述第一级寄存器中码流数据内的伪起始码。
上面说明了本发明装置实施例的结构图,当该装置应用在电视设备或计算机设备内时,可将该装置集成在具有多媒体处理功能的芯片62内,如图6所示的应用本发明装置的设备示意图,多媒体处理芯片62内的装置接收到CPU61发出的切换节目的信号后,重新对来自通信接口63的码流进行识别。通信接口63可以采用有线电视的网络接口或RJ45计算机网络接口等网络接口,经过多媒体处理芯片62内的装置处理后,按照码流类型输出。由于不同的码流类型有不同的解码器,如H.264解码器64、MPEG-2解码器65、AVS解码器66等,这些解码器接收到码流进行解码处理。
解码器可以集成在本发明的装置内,也可采用独立的解码芯片进行解码。
本发明的实施例,通过起始码后缀的识别,可快速检测出码流的类型,并按照检测出的码流类型选择相应的解码器进行解码,可处理混合有多种类型的码流的网络媒体流数据;对于识别出的码流类型,如果码流中具有伪起始码,则按照不同码流的类型删除码流中所插入的相应长度的伪起始码;在去除码流中起始码前缀和伪起始码的过程中,采用分级传输的方式,在码流数据向另一级寄存器传输时,丢弃起始码前缀和伪起始码,从而实现有效的去除,由于将去除起始码前缀和伪起始码的过程同时进行,提高了处理效率;在传输过程中,如果寄存器中的数据已满,采用缓存的方式存储数据,从而避免数据溢出。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。