发明内容
本申请提供一种视频显示方法,以解决现有技术中对高分辨率视频显示存在无法显示或显示失真、模糊等问题。
本申请提供一种视频显示方法,包括:
主计算单元和至少一个从计算单元,主计算单元和从计算单元均读取同一视频文件;
所述主计算单元获取该视频文件中视频流的当前帧;
根据当前帧的帧号及主计算单元的本地计时,读取当前帧在主计算单元的显示时间和/或解码时间;
主计算单元将所述帧号、显示时间和/或解码时间作为同步控制信息块发送至从计算单元;
所述主计算单元对该当前帧的第一部分进行解码;
从计算单元根据所接收的同步控制信息块,在视频流中选择帧号与同步控制信息块中的帧号相同的帧包作为当前帧;
从计算单元根据其本地计时,读取该当前帧在所述从计算单元的显示时间和/或解码时间;
所述从计算单元根据事先指定的分工对当前帧的第N部分进行解码;
将各个从计算单元对当前帧的解码部分与主计算单元的解码部分相加,构成当前帧完整的解码内容,并通过显示器将完成的解码内容进行显示。
优选地,所述从计算单元为一个;
所述主计算单元对该当前帧的第一部分进行解码,是对当前帧的上半部分或者下半部分解码;相应的,所述从计算单元根据事先指定的分工对当前帧的第N部分进行解码,是对当前帧的下半部分或者上半部分解码;或者
所述主计算单元对该当前帧的第一部分进行解码,是对当前帧的左半部分或者右半部分解码;相应的,所述从计算单元根据事先指定的分工对当前帧的第N部分进行解码,是对当前帧的右半部分或者左半部分解码。
优选地,所述从计算单元根据其本地计时,获得该当前帧在该从计算单元的显示时间和/或解码时间,包括:计算所述从计算单元的显示时间和/或解码时间与所述同步控制信息块中的主计算单元的显示时间和/或解码时间的差值,判断该差值是否在预定的阈值范围内;
若是,则该从计算单元根据事先指定的分工对当前帧的第N部分进行解码;
若否,则根据所述同步控制信息块中的显示时间和/或解码时间,重置本地计时;然后,根据事先指定的分工对当前帧的第N部分进行解码。
优选地,所述根据所述同步控制信息块中的显示时间和/或解码时间,重置本地计时,具体为,将所述从计算单元中显示时间赋值为所述同步控制信息块中的显示时间;将所述从计算单元中的解码时间值赋值为同步控制信息块中的解码时间。
优选地,所述预定的阈值范围为人眼视觉暂留时间范围。
优选地,所述解码,通过调用ffmpeg中的解码与显示函数实现。
优选地,所述主计算单元和从计算单元之间,通过局域网、互联网或者数据总线、WIFI、蓝牙,进行所述同步控制信息块的发送。
优选地,所述同步控制信息块采用函数定义的数据块形式;该数据块包括帧号、显示时间和/或解码时间数据信息。
本申请还提供一种视频显示装置,包括:
主计算单元和至少一个从计算单元,所述主计算单元和所述从计算单元均读取同一视频文件;
所述主计算单元包括:
获取单元,用于获取该视频文件中视频流的当前帧;
读取单元,用于读取当前帧帧号,并根据主计算单元的本地计时,获取当前帧在主计算单元的显示时间和/或解码时间;
发送单元,用于将所述帧号、显示时间和/或解码时间作为同步控制信息块发送至从计算单元;
第一部分解码单元,用于该当前帧的第一部分进行解码;
从计算单元包括:
接收单元,用于接收所述发送单元发送的同步控制信息块,在视频流中选择帧号与同步控制信息块中的帧号相同的帧包作为当前帧;
读取单元,用于从计算单元根据其本地计时,读取该当前帧在所述从计算单元的显示时间和/或解码时间;
第N部分解码单元,用于所述从计算单元根据事先指定的分工对当前帧的第N部分进行解码;
显示单元,用于将各个从计算单元对当前帧的解码部分与主计算单元的解码部分相加,构成当前帧完整的解码,并通过显示器将完整的解码进行显示。
优选地,所述从计算单元为一个;
所述第一部分解码单元,对该当前帧的第一部分进行解码,是对当前帧的上半部分或者下半部分解码;相应的,第N部分解码单元,对所述从计算单元根据事先指定的分工对当前帧的第N部分进行解码,是对当前帧的下半部分或者上半部分解码;或者
所述第一部分解码单元,对该当前帧的第一部分进行解码,是对当前帧的左半部分或者右半部分解码;相应的,第N部分解码单元,对所述从计算单元根据事先指定的分工对当前帧的第N部分进行解码,是对当前帧的右半部分或者左半部分解码。
优选地,判断单元,根据所述从计算单元的本地计时,获得该当前帧在该从计算单元的显示时间和/或解码时间,计算所述从计算单元的显示时间和/或解码时间与所述同步控制信息块中的主计算单元的显示时间和/或解码时间的差值,判断该差值是否在预定的阈值范围内;若是,则发送解码信号至第N部分解码单元;若否,则发送重置控制信号至重置单元;
所述重置单元,根据所述同步控制信息块中的显示时间和/或解码时间,重置本地计时;然后,所述第N部分解码单元根据事先制定的分工对当前帧的第N部分进行解码。
优选地,所述重置单元,将所述从计算单元中显示时间赋值为所述同步控制信息块中的显示时间;将所述从计算单元中的解码时间值赋值为同步控制信息块中的解码时间。
优选地,所述判断单元的预定阈值范围为人眼视觉暂留时间范围。
优选地,所述第一部分解码单元和第N部分解码单元,是通过调用ffmpeg中的解码与显示函数实现。
与现有技术相比,本申请具有以下优点:
本申请提供的一种视频显示方法,主计算单元和从计算单元读取同一视频流,主计算单元对视频流的当前帧的第一部分进行解码,并将当前帧的帧号、显示时间和/或解码时间作为同步控制信息块发送至从计算单元,从计算单元根据在视频流中选择帧号与所述同步控制信息块中的帧号相同的帧包作为当前帧,并根据事先制定的分工对当前帧的第N部分进行解码,之后将主计算单元和从计算单元的解码部分相加,并将相加后完整的解码进行显示,从而实现高分辨视频文件的显示,由于该方法是将同一视频文件中视频流信息,由主计算单元和从计算单元根据事先指定的分工,对视频流当前帧的不同部分分别进行解码,之后将主计算单元和从计算单元解码的内容合并后显示于显示屏幕上。使用该方法后,当视频文件为高分辨率视频文件时,其解码不会受到计算单元的计算能力的限制,从而避免高分辨率视频文件因为计算能力的限制而出现显示失真、模糊等缺陷,实现对高分辨率视频源的显示。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
请参考图1所示,图1是本申请提供的一种视频显示方法的第一实施例的流程图。该流程图实际上包括主计算单元和从计算单元两者的流程图,两个流程之间存在信息传递关系。以下进行详细说明。
步骤S100:开始。
步骤S110:主计算单元和至少一个从计算单元,能够均读取同一视频文件。
该步骤S110中所述主计算单元和从计算单元读取同一视频文件,该视频文件可以采用通过主计算单元或从计算单元的本地硬盘上读取;或者通过网络读取网络中任何一个连接节点上的视频文件;或者读取存放在网络服务器上的视频文件;或者直接从视频采集设备读取等方式,获得视频文件信息。
主计算单元可以是本地计算单元,从计算单元可以是网络中的至少一个与所述主计算单元关联的分布式计算单元;或者主计算单元可以是网络中任何一个与所述从计算单元关联的分布式计算单元,从计算单元为本地计算单元;或者主计算单元与从计算单元都可以是网络中的分布式计算单元,进而完成相应的计算,从计算单元的数量可以根据计算需求增加或者减少,因此,主/从计算单元并不限于在本地计算单元上完成相应的计算功能,而且从计算单元可以为多个;由于主计算单元和从计算单元均读取同一视频文件,因此,两个计算单元可以随机的设定主从关系,当计算单位为多个时,仅需要确定其中一个为主计算单元,其他为从计算单元即可,因此,在计算单元的主从设定上没有特别的要求。
所述主/从计算单元没有特别的设置规定,仅需在计算处理时,将其中某一计算单元作为主计算单元,其他为从计算单元即可。主计算单元与从计算单元之间可以通过局域网、互联网或者数据总线、WIFI、蓝牙等方式实现关联。
步骤S120:所述主计算单元获取该视频文件中视频流的当前帧。
在该步骤中,可以通过调用opencv中的函数,例如:采用函数cvQueryFrame实现提取视频流中的当前帧;当然,可以理解的是,读取视频流的当前帧还可以通过其他方式。
步骤S130:根据当前帧的帧号及主计算单元的本地计时,读取当前帧在主计算单元的显示时间和/或解码时间。
该步骤S130中,通过当前帧的帧结构获取当前帧的帧号,主计算单元的本地计时可以通过主计算单元的本地系统时间进行计时;主计算单元根据本地计时确定该帧包的显示时间(PTS)和/或解码时间(DTS)。所述显示时间表示一个具体的帧包被送到显示器显示的时间,解码时间表示某个具体的帧包被送到计算单元进行解码的时间。通过这两个时间,可以确定帧包的显示顺序。显示时间和解码时间常常是一致的,但在一些情况下也会有所差异。大多数情况下,使用显示时间或者解码时间中的一个即可以实现主从计算单元的同步;但同时使用显示时间和解码时间能够更及时的发现同步误差的问题,更好的避免主从计算单元的不同步问题。
步骤S140:主计算单元将所述帧号、显示时间和/或解码时间作为同步控制信息块发送至从计算单元。
该步骤S140是定义一个数据结构类型,该数据结构类型是以数据块的形式体现,具体是将主计算单元读取的当前帧的帧号、显示时间和/或解码时间定义为同步控制信息块,该定义可以通过构造函数struct完成对同步控制信息块的定义;之后将该同步控制信息块发送至从计算单元中并存储。
例如,同步控制信息块具体定义如下:
上述同步控制信息块中包含了实现主从同步必须的帧号、显示时间和解码时间等信息。
步骤S150:所述主计算单元对该当前帧的第一部分进行解码。
该步骤S150所述当前帧的第一部分可以是当前帧的上半部分或者下半部分或者左半部分或者右半部分。需要说明的是,在对当前帧的第一部分进行解码时,可以通过调用ffmpeg中的解码函数实现解码。
步骤S160:从计算单元根据所述接收的同步控制信息块,在视频流中选择帧号与同步控制信息块中的帧号相同的帧包作为当前帧。
该步骤具体是指,从计算单元获取与主计算单元相同的视频流,并且接收主计算单元发送的同步控制信息块,在获取的视频流中将与同步控制信息块中帧号相同的帧包作为从计算单元获取视频流的当前帧,从而使主计算单元与从计算单元显示的为同一帧内的内容。
步骤S170:从计算单元根据其本地计时,读取该当前帧在该从计算单元的显示时间和/或解码时间,计算所述从计算单元的显示时间和/或解码时间与所述同步控制信息块中的主计算单元的显示时间和/或解码时间的差值,判断该差值是否在预定的阈值范围内。
应当说明,从计算单元的本地计时和主计算单元的本地计时理论上是通过网络保持同步的,彼此间的误差可以忽略。
该步骤同步骤S120,获取从计算单元中视频流的显示时间(PTS)和/解码时间(DTS),并将从计算单元在获取的显示时间和/或解码时间与所述同步控制信息块中的显示时间和/或解码时间进行计算,若二者差值在预定的阈值范围内,即人眼视觉暂留的时间范围内(视觉暂留时间通常认为在100-400毫秒,具体取值可以在此范围内即可,例如取值为200毫秒),则进入步骤S180;若否,则进入步骤S190。
所述步骤S180:从计算单元根据事先制定的分工对当前帧的第N部分进行解码。
该步骤S180中的第N部分与所述主计算单元当前帧的第一部分对应,例如:当所述主计算单元当前帧的第一部分为上半部分,则从计算单元当前帧的第N部分为下半部分,反之亦然;当所述主计算单元当前帧的第一部分为左半部分,则从计算单元当前帧的第N部分为右半部分,反之亦然。
需要说明的是,当从计算单元为多个时,对当前帧的解码同样适用于上述对应关系,能够将视频流的当前帧拆分成多个部分进行解码所采用的方式都可以,并不限于上述。
从计算单元在对当前帧的第N部分进行解码时,可以通过调用ffmpeg中的解码函数实现解码。
如果,主计算单元、从计算单元当前帧的显示时间和/或解码时间的差值超出预定阈值,即:人眼视觉暂留值200毫秒内,则进入步骤S190。
所述步骤S190:根据所述同步控制信息块中的显示时间和/或解码时间,重置本地计时;然后,执行步骤S170,即:根据事先指定的分工对当前帧的第N部分进行解码。
该步骤S190中的重置本地计时是指,将所述从计算单元中显示时间赋值为所述同步控制信息块中的显示时间;将所述从计算单元中的解码时间赋值为同步控制信息块中的解码时间,使从计算单元中的显示时间和/或解码时间与所述同步控制信息块中的显示时间和/解码时间一致;之后,从计算单元根据步骤S170,通过调用ffmpeg中的解码函数对当前帧的第N部分进行解码,进而实现对当前帧的第N部分的解码。
之所以采用上述有条件的重置方式,使为了使从计算单元能够按照其本地计时进行解码计算和显示输出,而无需频繁的改变自己的步调。同时,通过必要条件下的重置,可以避免主从计算单元显示内容的差异超出人眼可觉察的范围,以至于不能形成人眼感觉正常的画面。
步骤S200,将各个从计算单元对当前帧的解码部分与主计算单元的解码部分相加,构成当前帧完整的解码内容,并通过显示器将完成的解码内容进行显示。
该步骤具体实现为:所述主计算单元将第一部分解码内容发送至显示器的缓存区内,从计算单元也将第N部分的解码内容发送至显示器的缓存区,显示器将缓存区内的解码内容合并,并通过显示控制器将合并后的解码内容显示于显示器上。
可以理解的是,主计算单元可以在将第一部分解码完毕后,通过显示控制器将该第一部分解码内容显示在显示器上,从计算单元同样可以在将第N部分解码完毕后,将从计算单元解码内容显示在同一显示器上。
步骤S201:结束。
本申请提供的视频显示方法,是将同一视频文件中视频流信息,由主计算单元和从计算单元根据事先指定的分工,对视频流当前帧的不同部分分别进行解码,之后将主计算单元和从计算单元解码的内容合并后显示于显示屏幕上,该方法能够避免由于解码计算的计算量过大,超出计算单元的计算能力导致的显示失真或者无法显示。
上述实施例中,主计算单元和从计算单元可以是通过网络连接的相隔很远的两个网络节点,因此,可以实现对网络计算能力的充分调用,尤其是利用云计算方式实现高清视频的显示。
上述实施例中,对从计算单元的显示时间和/或解码时间与主计算单元传送的显示时间和/或解码时间进行比较,判断两者的差值是否在根据人眼视觉暂留确定的阈值范围内,并且在超过该阈值范围时,对显示时间和/或解码时间进行重置。通过该判断步骤能够避免主计算单元和从计算单元分别解码的同一帧的两个部分在显示屏上实际显示的时间出现较长的时间间隔,造成不佳的视觉效果。考虑到这种情况出现的几率并不高,也可以不进行该比较并重置的步骤。
以上公开了本申请提供的一种视频显示方法的实施例,与所述方法实施例相对应,本申请还公开了一种视频显示装置的实施例,请参看图2,其为本申请一种视频显示装置第一实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
所述装置实施例包括:
主计算单元100和从计算单元200,所述主计算单元100和从计算单元200均读取同一视频文件。
其中,所述主机算单元100包括:
获取单元101,用于获取视频文件中视频流的当前帧;
读取单元102,用于读取当前帧帧号,并根据主计算单元的本地计时,获取当前帧在主计算单元的显示时间和/或解码时间;
发送单元103,用于将所述帧号、显示时间和/或解码时间作为同步控制信息块发送至从计算单元;
第一部分解码单元104,用于该当前帧的第一部分进行解码。
其中,所述第一部分解码单元104是对该当前帧的第一部分进行解码,可以是对当前帧的上半部分或者下半部分解码;也可以是对当前帧的左半部分或者右半部分解码。
所述从计算单元200包括:
接收单元201,用于接收所述发送单元103发送的同步控制信息块,在视频流中选择帧号与同步控制信息块中的帧号相同的帧包作为当前帧;
判断单元202,根据其本地计时,获得该当前帧在该从计算单元200的显示时间和/或解码时间,计算所述从计算单元200的显示时间和/或解码时间与所述同步控制信息块中的主计算单元100的显示时间和/或解码时间的差值,判断该差值是否在预定的阈值范围内;若否,则发送重置信号至重置单元;若是,则发送解码信号至第N部分解码单元。
重置单元203,接收所述判断单元202发送的重置信号,根据所述同步控制信息块中的显示时间和/或解码时间,重置本地计时;然后,向第N部分解码单元204发送解码信号,所述第N部分解码单元204,接收重置单元203的解码信号,并根据事先制定的分工对当前帧的第N部分进行解码。
所述重置单元204是将从计算单元200中显示时间赋值为所述同步控制信息块中的显示时间;将所述从计算单元200中的解码时间值赋值为同步控制信息块中的解码时间。
所述第N部分解码单元204,接收所述判断单元202发送解码信号,并根据事先指定的分工对当前帧的第N部分进行解码。
其中,第N部分解码单元204是对从计算单元根据事先指定的分工对当前帧的第N部分进行解码,可以是与所述第一部分解码单元104相对应的下半部分或者上半部分解码;又或者是,与所述第一部分解码单元104相对应的右半部分或左半部分解码。
显示单元300,用于将各个从计算单元200对当前帧的解码部分与主计算单元100的解码部分相加,够成当前帧完整的解码,并通过显示器将完整的解码进行显示。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(traNsitorymedia),如调制的数据信号和载波。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。