具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受到下面公开的具体实施例的限制。
图1示出了根据本发明的实施例的多格式码流的解析方法的流程图。
如图1所示,根据本发明的实施例的多格式码流的解析方法,包括:步骤102,解析待解码的码流的头部,以获取码流的配置信息;步骤104,从预存储所有格式的码流的解码固件中,获取与配置信息相匹配的解码固件;步骤106,利用相匹配的解码固件对码流进行解码。
在该技术方案中,采用解码固件对相应的解码装置进行控制,以实现对视频的码流进行解码。不同格式的码流需要使用不同格式的解码固件,因此,可以事先将所有格式的码流的解码固件进行集中存储,然后通过对视频码流的头部的解析,获取码流的配置信息(码流格式,每帧图像的宽、高等关于该码流的所有信息均可以作为该配置信息进行获取,或者也可以仅对其中有助于码流格式的确定的信息进行获取,以便选择相应的解码固件进行码流的解码),从而选择对应的解码固件进行解码。此外,当出现新的码流格式以及相应的解码固件时,显然也可以将该新的解码固件与之前的其他解码固件进行一同存储,以实现对该格式的码流的解析。
在上述技术方案中,在步骤102之前,还可以包括:判断码流的格式,若码流为传送流,则从传送流中提取出相应的基本码流。
在该技术方案中,为了提高码流的传输速度和传输效率,通常需要将基本码流(ES,Elementary Stream)转换为传输流(TS,Transport Stream)之后,再对传输流进行直接传输。但在进行码流的解析时,需要直接对基本码流进行解码操作,因此当视频码流为传送流时,需要提取出相应的基本码流,然后进行解码操作。
在上述任一技术方案中,步骤102还包括:获取存储码流的码流缓冲区的可用空间,并判断待解码的码流大小是否大于可用空间的大小;若判断结果为是,以可用空间的大小为标准长度,将待解码的码流分为多个子码流,其中,每个子码流的大小小于或等于标准长度,以及若判断结果为否,将待解码的码流作为子码流;按子码流之间的顺序关系,依次将每个子码流存储至码流缓冲区中,以对每个子码流进行解析。
在该技术方案中,需要将视频码流读取到内存中的对应区域(即码流缓冲区),然后对该区域中的码流进行解码操作。但码流缓冲区的空间容量有限,当视频较大时,往往无法将整个视频的码流存储至码流缓冲区中进行解码,此时需要根据码流缓冲区的大小,将码流分成多个子码流,且子码流的大小小于或等于码流缓冲区的大小,可以实现对码流缓冲区的溢出控制,起到防止码流缓冲区溢出的作用。而通过对整个码流的头部的解析,从而选用适当的码流固件,以实现对每个添加至码流缓冲区中的子码流分别、依次进行解码。
另外,在对该码流缓冲区的可用空间进行获取时,可以根据定义读指针、写指针以及该码流缓冲区的总空间大小,从而计算出剩余的可用空间大小。这里的码流缓冲区可以为环形缓冲区。
在上述任一技术方案中,该待解码的码流的头部包含有至少一个标志位,则步骤102还包括:获取所述码流的头部的当前标志位信息,并将当前标志位信息与预设的标准标志位信息进行比较,其中,若相匹配,则判定该码流无误,并依次对码流缓冲区中的子码流进行解析,否则判定该码流存在错误,停止对该码流的解析。
在该技术方案中,可以实现对码流是否存在错误进行检测,并进行相应的处理。具体地,可以通过对码流的头部的标志位信息进行比较。当检测到码流存在错误时,将错误的子码流从码流缓冲区中清除,并停止对整个码流的解码,以开始对其他码流的解析,这样可以避免对错误信息的解析,提高解析速度,降低错误对其他视频解码的影响。
在上述任一技术方案中,优选地,配置信息中包含待解码的码流的格式,则在对待解码的码流进行解码之前,还包括:根据待解码的码流的格式,预留对应数目的帧缓冲区;以及在对待解码的码流进行解码的过程中,在每次预留的所有的帧缓冲区被填满后,利用所有的帧缓冲区中的数据构成相应的一帧图像。
在该技术方案中,解码操作进行过程中以帧为单位对视频码流进行解码,每帧解码后的图像对应多个帧缓冲区(通常为6~8个),即由多个帧缓冲区中的数据共同构成一帧图像;而对于帧缓冲区的数目,则跟待解码的码流的格式有关,即对于不同格式的码流,其构成一帧图像时,如对于H.264格式,需要8个帧缓冲区,而其他格式则为其他数目。
在上述任一技术方案中,优选地,还包括:实时播放解码单元解码得到的图像文件和/或待解码的码流的参数信息;和/或将解码单元解码得到的图像文件生成为指定格式的视频文件,并存储视频文件。
在该技术方案中,不仅可以对解码的视频实时播放,还可以显示正在解码的视频码流参数信息,可以方便研发人员对视频码流的参数信息进行查看和分析。还可以将解码得到的图像文件生成为视频文件后进行存储,可以满足解码后的码流实时回放的需求。这里生成的视频文件可以采用显示装置自身直接播放、无需解码的格式,比如YUV格式。
在上述任一技术方案中,步骤106中,还包括:在对待解码的码流进行解析的过程中,设置对应的解析状态;以及通过查询解析状态,判断对待解码的码流进行解析的过程的完成情况。
在该技术方案中,可能需要对当前的码流解析过程进行查询,则可以设置相应的解析状态,比如通过一相应的寄存器进行设置,若设置为“1”,则说明正在解析,若设置为“0”,则说明已经解析完毕,则通过查询该解析状态,即可判断解码操作是否完成。
在上述任一技术方案中,步骤106中,还包括:在完成对待解码的码流的解析后,向后续的处理装置发送完成信号。
在该技术方案中,除了主动查询,还可以由进行解码操作的部件在解码操作完成后,通过发送完成信号通知解码操作已结束,方便进行后续处理。
下面结合图2对用于本发明的实施例的多格式码流的解析方法的多格式码流的解析装置进行说明。
图2示出了根据本发明的实施例的多格式码流的解析装置的框图。
如图2所示,根据本发明的实施例的多格式码流的解析装置200包括:码流头解析单元202,用于解析待解码的码流的头部,以获取码流的配置信息;固件存储单元204,用于存储所有格式的码流的解码固件;固件匹配单元206,用于根据码流头解析单元202获取的配置信息,从固件存储单元204中获取与配置信息相匹配的解码固件;解码单元208,用于利用相匹配的解码固件对码流进行解码。
在该技术方案中,采用解码固件对相应的解码装置进行控制,以实现对视频的码流进行解码。不同格式的码流需要使用不同格式的解码固件,因此,可以事先将所有格式的码流的解码固件进行集中存储,然后通过对视频码流的头部的解析,获取码流的配置信息(码流格式,每帧图像的宽、高等关于该码流的所有信息均可以作为该配置信息进行获取,或者也可以仅对其中有助于码流格式的确定的信息进行获取,以便选择相应的解码固件进行码流的解码),从而选择对应的解码固件进行解码。此外,当出现新的码流格式以及相应的解码固件时,显然也可以将该新的解码固件与之前的其他解码固件进行一同存储,以实现对该格式的码流的解析。
在上述技术方案中,还包括:格式判断单元210,用于判断码流是否为传送流或基本码流;提取单元212,用于在格式判断单元210的判断结果为码流为传送流的情况下,从传送流中提取出相应的基本码流,以对基本码流进行解析。
在该技术方案中,为了提高码流的传输速度和传输效率,通常需要将基本码流(ES,Elementary Stream)转换为传输流(TS,Transport Stream)之后,再对传输流进行直接传输。但在进行码流的解析时,需要直接对基本码流进行解码操作,因此当视频码流为传送流时,需要提取出相应的基本码流,然后进行解码操作。
在上述任一技术方案中,解码单元208具体包括:缓存空间获取子单元2020,用于获取存储码流的码流缓冲区的可用空间;判断子单元2022,用于判断待解码的码流大小是否大于可用空间的大小;分组处理子单元2024,用于在判断子单元2022的判断结果为是的情况下,以可用空间的大小为标准长度,将待解码的码流分为多个子码流,其中,每个子码流的大小小于或等于标准长度,以及在判断子单元的判断结果为否的情况下,将待解码的码流作为子码流;存储子单元2026,用于按照子码流之间的顺序关系,依次将每个子码流存储至码流缓冲区中;以及处理子单元2028,用于依次对每个存储至码流缓冲区中的子码流进行解析。
在该技术方案中,需要将视频码流读取到内存中的对应区域(即码流缓冲区),然后对该区域中的码流进行解码操作。但码流缓冲区的空间容量有限,当视频较大时,往往无法将整个视频的码流存储至码流缓冲区中进行解码,此时需要根据码流缓冲区的大小,将码流分成多个子码流,且子码流的大小小于或等于码流缓冲区的大小,可以实现对码流缓冲区的溢出控制,起到防止码流缓冲区溢出的作用。而通过对整个码流的头部的解析,从而选用适当的码流固件,以实现对每个添加至码流缓冲区中的子码流分别、依次进行解码。
另外,在对该码流缓冲区的可用空间进行获取时,可以根据定义读指针、写指针以及该码流缓冲区的总空间大小,从而计算出剩余的可用空间大小。这里的码流缓冲区可以为环形缓冲区。
在上述任一技术方案中,该待解码的码流的头部包含有至少一个标志位,则解析装置还包括:错误检验单元214,用于获取该码流的头部的当前标志位信息,并将当前标志位信息与预设的标准标志位信息进行比较,若相匹配,则判定该码流无误,否则判定该码流存在错误;错误处理单元216,用于在码流无误时,依次对码流缓冲区中的子码流进行解析,以及在子码流存在错误时,停止对该码流的解析。
在该技术方案中,可以实现对码流是否存在错误进行检测,并进行相应的处理。具体地,可以通过对码流的头部的标志位信息进行比较。当检测到码流存在错误时,将错误的子码流从码流缓冲区中清除,并停止对整个码流的解码,以开始对其他码流的解析,这样可以避免对错误信息的解析,提高解析速度,降低错误对其他视频解码的影响。
在上述任一技术方案中,配置信息中包含待解码的码流的格式,则解析装置还包括:存储空间预留单元220,用于根据待解码的码流的格式,预留对应数目的帧缓冲区,其中,在对待解码的码流进行解码的过程中,在每次预留的所有的帧缓冲区被填满后,利用所有的帧缓冲区中的数据构成相应的一帧图像。
在该技术方案中,解码操作进行过程中以帧为单位对视频码流进行解码,每帧解码后的图像对应多个帧缓冲区(通常为6~8个),即由多个帧缓冲区中的数据共同构成一帧图像;而对于帧缓冲区的数目,则跟待解码的码流的格式有关,即对于不同格式的码流,其构成一帧图像时,如对于H.264格式,需要8个帧缓冲区,而其他格式则为其他数目。
在上述任一技术方案中,还包括:实时播放单元222,用于实时播放解码单元解码得到的图像文件和/或待解码的码流的参数信息;和/或视频存储控制单元224,用于将解码单元解码得到的图像文件生成为指定格式的视频文件,并存储视频文件。
在该技术方案中,不仅可以对解码的视频实时播放,还可以显示正在解码的视频码流参数信息,可以方便研发人员对视频码流的参数信息进行查看和分析。还可以将解码得到的图像文件生成为视频文件后进行存储,可以满足解码后的码流实时回放的需求。这里生成的视频文件可以采用显示装置自身直接播放、无需解码的格式,比如YUV格式。
图3示出了根据本发明的实施例的显示装置的框图。
如图3所示,为根据本发明的实施例的显示装置300,包括如图2所示的多格式码流的解析装置200。
在上述技术方案中,解析装置200还包括:状态设置单元226,用于根据待解码的码流的完成情况,设置对应的解析状态;以及显示装置300还包括:状态查询单元302,用于对解析状态进行查询,以判断解析装置200是否已完成对待解码的码流的解析。
在该技术方案中,可能需要对当前的码流解析过程进行查询,则可以设置相应的解析状态,比如通过一相应的寄存器进行设置,若设置为“1”,则说明正在解析,若设置为“0”,则说明已经解析完毕,则通过查询该解析状态,即可判断解码操作是否完成。
在上述任一技术方案中,解析装置200还包括:状态报告单元228,用于在解析装置200完成了对所述待解码的码流的解析后,向显示装置300中相应的控制装置发送完成信号。
在该技术方案中,除了主动查询,还可以由进行解码操作的部件在解码操作完成后,通过发送完成信号通知解码操作已结束,方便显示装置进行后续处理或关闭解析装置。
图4示出了通过本发明的实施例的多格式码流的解析方法解析视频的具体流程图。
如图4所示,通过本发明的实施例的多格式码流的解析方法解析视频的具体流程如下:
步骤402,加载视频,该视频的码流可能为基本码流或传送流。
步骤404,判断步骤402中已加载的码流的格式,若为基本码流,则可以直接进行步骤408,若为传送流,则需要进入步骤406进行处理。
步骤406,当码流为传送流时,需要首先从该传送流中提取出基本码流,然后再对该基本码流进行解析操作,具体地,“提取”过程可以采用解复用的方式完成。
步骤408,针对待解码的基本码流,首先创建一个解码实例。
步骤410,将码流填充至码流缓冲区。在对码流进行解析时,需要首先将该码流读取至内存中的预定区域,即该码流缓冲区。但码流缓冲区的空间有限,而码流的大小不定,可能超出码流缓冲区而导致溢出现象。因此,这里首先需要对码流缓冲区的可用空间进行获取,具体地,比如可以通过定义读指针、写指针以及码流缓冲区的总大小,从而进行可用空间的获取。然后,对于该码流的大小,若小于或等于该码流缓冲区的可用空间,则可以直接进行填充,否则需要对码流进行切分,得到多个子码流,每个子码流的大小小于或等于该码流缓冲区的可用空间,然后按顺序依次对每个子码流进行填充。这里的码流缓冲区可以采用环形缓冲区。
步骤412,解析码流的头部。具体地,是对填充至码流缓冲区中的码流的头部进行解析,从而获取该码流的配置信息,比如码流的格式、每帧图片的宽、高等信息等。
步骤414,判断码流缓冲区中的这段码流是否有错误,有错误时,停止对当前码流的解析,并回到步骤410,重新填充其他码流,否则进入步骤416。对于码流的错误检测,可以通过在码流的头部设置至少一个标志位,这样,通过将该码流的头部实时获取的标志位与预设的标准标志位进行比较,即可得知该码流是否发生错误。对于发生错误的码流,不再进行解析,直接从码流缓冲区中清除,然后对下一段码流进行错误判断和解析。
步骤416,解析码流。通过对码流的头部的配置信息的获取,并根据配置信息,获取对应于该码流的解码固件,以完成对该码流的解析,从而实现了对多种格式的码流的解析的支持。这里在进行图像解码之前,还需要通过配置信息确定码流的格式,并在解析码流之前,预设置对应数目的帧缓冲区,比如对于H.264格式,需要的帧缓冲区为8个。
步骤418,判断是否完成一帧图像的解码,完成则进入步骤420,否则继续解码。当然,对于解析得到的数据,首先应放置到对应的帧缓冲区中,并在每次所有的帧缓冲区都被填满后,利用此时所有的帧缓冲区中的数据合成相应的一帧图片。
步骤420,将解码的图像实时显示,或以YUV格式存储。这里可以对解析得到的图像进行解码,还可以对相关的配置信息进行显示,便于满足不同用户或工作人员内的需求。此外,通过以YUV等格式将解码得到的图像生成为视频文件进行存储,便于之后不再需要进行解码,以实现对视频的反复播放。
步骤422,判断码流是否结束,是则结束进程,否则回到步骤416,继续解码下一帧图像。对于码流的解析过程是否结束,可以采用多种方式,比如一种情况下,可以通过设置一个状态寄存器,比如该寄存器置“1”时,说明正在解码,该寄存器置“0”时,说明解码完成,从而通过查询该寄存器的状态,即可了解到当前的解码进度;另一种情况下,可以在解码过程完成后,由相关部件向下一步操作的执行部件发送完成信号,则该执行部件可以通过是否接收到该完成信号来判断解码过程是否已经完成。
图5示出了根据本发明的实施例的解码固件的搬移过程的示意图。
如图5所示,根据本发明的实施例的解码固件的搬移过程如下:
当用户需要在电视机500上进行视频播放时,需要由该电视机500中的解码装置501对该视频进行解码。Firmware(固件)一开始存储在硬盘502上,在解码之前要先由电视机500的处理器将其全部拷贝到SDRAM504(Synchronous Dynamic RandomAccess Memory,同步动态随机存储器)中。解析完视频的码流的头部后,根据获得的图像类型,处理器将负责解码相应类型图像的那部分Firmware下载到电视机500的编程内存506中,从而进行解码该格式的码流图像。例如,在对码流的头部进行解析时,发现要解码的图像类型为AVS,处理器就会将驻存在SDRAM504中的解码AVS格式的那部分Firmware拷贝到上述解码装置501的编程内存506中,然后电视机500就可以根据该Firmware控制AVS图像的解码。
以上结合附图详细说明了本发明的技术方案,考虑到在相关技术中,只能对一种格式的码流解码,并且未能对码流进行分析、错误处理和保存解码后的视频,本发明提供了一种视频解析技术,能够支持音视频产业常用的信源编码的码流的解析并保存解码后的视频,以满足数字电视功能需求;同时可以实现码流分析和实时显示,满足研发人员研发需要。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。