一种用于解决播放网络视频时短时停顿的装置及方法
技术领域
本发明涉及网络视频领域,尤其是涉及一种用于解决播放网络视频时短时停顿的装置及方法。
背景技术
上网用浏览器看视频的用户越来越多,其中很多视频是电影或者电视剧等长视频,而且用户对视频清晰度的要求也越来越高。这些导致视频文件越来越大,对浏览器缓存的要求越来越高。如果是http方式下载视频,也就是说,播放器(flash脚本)在网页上播放视频时,通过约定的机制得到视频文件的http地址,然后发出请求,边下载边播放(目前flash播放常用的视频格式为flv和mp4)。用户拖拽和没看完视频造成了带宽的浪费。因此多数视频网站都采取对视频进行分段的方式来解决这个问题。
将一个视频分段为几个视频是指:把一个视频文件的视频和音频部分,按照约定时间分成多组(或称多个分段),对每一组按照视频格式要求重新组成新的视频文件。分段完的每一个文件都是一个独立的视频文件。播放器在处理不同分段连接的时候,由于是多个独立的视频文件,因此会有短时间停顿现象。
Flash播放器播放的时候之所以会有停顿的感觉,主要是因为flash播放器判断一个分段文件结束了,要初始化下一个分段文件(包括分析分段视频的格式,宽、高等,解码器的初始化)。而且分段处音视频也不会与时间戳正好对上。一个分段视频文件分为视频部分和音频部分。分段是拿出一部分视频和音频组成一个新文件。由于视频和音频都是离散的,所以就有可能时间长度不是正好相等,也就是说时间戳不能对上。例如假设高清视频视频部分帧率为25,音频为22050Hz,这样一个视频帧时间长度为40ms,音频帧为46.4ms(1024000/22050),如果一个分段按7分钟(即约定的时间)来切割的话,需要10500个视频帧和9044(420000/1024000*22050=9043.9453125)个音频帧,结果音频比视频长2.5ms。实际上因为切割点必须为视频的关键帧,这是因为视频文件的视频帧是由一个个图片组成,视频编码就是压缩图片。有的图片是独立压缩,不需要其它图片就可以解压缩,这样的图片叫做关键帧;有的图片需要前一个或者其它图片才能解压缩,这样的图片叫做非关键帧。如果从非关键帧开始播放,因为解码信息不完全,就会出现花屏的效果,直到下一个关键帧才会正常播放,所以理论上最大的差距可能为音频帧的一半,既为46ms的一半23ms。假如音频比视频长20ms,播放器在播放完视频的时候,还有20ms的音频,它在播最后20ms音频的时候,是没有视频可以播放的。
如果在把视频给flash播放器播放之前,用脚本把两个分段视频合成一个,就不会有这个问题了。
因此,本发明提供了一种用于解决播放网络视频时短时停顿的技术方案。
发明内容
本发明提供了一种用于解决播放网络视频时短时停顿的装置,该装置包括:
转码子系统:用于将flv格式或mp4格式的视频进行分段后放入数据缓存模块,或者转码子系统利用开源软件程序把视频转成一个flv格式的视频后再分段;
flash播放器,包括用来存放下载的视频数据的数据缓存模块,用于去掉flv开头和metadata信息、保留视频和音频tag、并且去掉记录解码信息的伪帧、修改tag的时间戳的过滤器,用于给flv数据添加上元信息和/或flv头信息的数据组装模块,用于计算需要的视频数据的地址并从数据缓存模块取出已经缓存的视频数据进行拼接和格式转换的视频数据拼接和转换模块,用于对取出的视频数据进行播放的播放模块。
进一步,flash播放器中的过滤器按如下方式修改tag的时间戳:后一分段视频中视频帧和音频帧的时间戳加上前面分段视频的视频时长和音频时长。
进一步,当视频进行拖动的时候,flash播放器中的数据组装部分根据关键帧元数据判断出拖动的位置,并且取出正确的缓存数据进行播放。
进一步,数据组装部分还用于判断一个flv分段视频文件是否已经播放结束,如果播放结束就自动拼接下一个flv分段视频文件。
本发明还提供了一种用于解决播放网络视频时短时停顿的方法,该方法包括:
步骤(1)将flv格式或mp4格式的视频进行分段后放入数据缓存模块,或者利用开源软件程序把视频转成一个flv格式的视频后再分段;
步骤(2)去掉flv开头和metadata信息、保留视频和音频tag、并且去掉记录解码信息的伪帧、修改tag的时间戳;
步骤(3)给flv数据添加上元信息和/或flv头信息;
步骤(4)计算需要的视频数据的地址并从数据缓存模块取出已经缓存的视频数据进行拼接和格式转换;
步骤(5)对取出的视频数据进行播放。
进一步,步骤(2)中按如下方式修改tag的时间戳:后一分段视频中视频帧和音频帧的时间戳加上前面分段视频的视频时长和音频时长。
进一步,当视频进行拖动的时候,根据关键帧元数据判断出拖动的位置,并且取出正确的缓存数据进行播放。
进一步,判断一个flv分段视频文件是否已经播放结束,如果播放结束就自动拼接下一个flv分段视频文件。
附图说明
图1是根据本发明的flash播放器的结构示意图。
图2是根据本发明的方法的流程图。
具体实施方式
为使本发明的上述目的、特征和优点更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明:
根据本发明的装置包括:
1.转码子系统:用于将flv格式或mp4格式的视频进行分段后放入数据缓存模块,或者转码子系统利用开源软件程序把视频转成一个flv格式的视频后再分段。
2.flash播放器:如图1所示,对于数据缓存模块中的第一分段视频文件,不做任何修改,直接提供给播放模块进行播放。但是需要记下最后的时间戳;举例来说,分段视频文件的第一个视频帧应该在0秒播放,其时间戳就是0s,第二个视频帧应该在第40ms时播放(假设帧率为25),时间戳就是40ms,依次类推,第三个图片就是80ms,第四个120ms......。最后的时间戳为最后一个视频帧的时间戳加上最后一个视频帧的播放时长。按照上面的例子,每一个视频帧的播放时长就是40ms。同理,音频帧的播放时长为46.439909297052154ms。对于其它分段视频,由于同一视频的不同分段的flv开头和metadata信息是相同的,因此丢掉flv开头(FLV头文件,共9字节,前3个字节是文件格式标识.第4个字节是版本,第5个字节的前5个bit是保留的必须是0.第5个字节的第6个bit音频类型标志(TypeFlagsAudio),第5个字节的第7个bit也是保留的必须是0,第5个字节的第8个bit视频类型标志(TypeFlagsVideo)第6-9的四个字节还是保留的)和metadata信息(flv文件中的元信息,是一些描述flv文件各类属性的信息。这些信息以AMF格式保存在文件的起始部分),只留下视频和音频tag(flv文件的基本单元是tag,根据tag的类型字节区分为视频和音频,tag头包括类型、时间戳、内容长度,共有11比特,tag中有3字节表示时间戳)。并且丢掉记录解码信息的伪帧(对于h264和aac解码来说,为了支持flv格式,需要一个单独的tag,该tag既不属于视频类型也不属于音频类型,因此也不需要播放,该tag称为伪帧)。flash播放器中的过滤器修改tag的时间戳(加上以前面分段视频累计的视频时长和音频时长),也就是说,第二分段视频中视频帧和音频帧的时间戳都要加上第一分段视频的视频时长和音频时长,以此类推,时间戳是放入tag中的,因此需要修改tag,然后重新放入数据缓存模块。举一个具体的例子,一个视频8分钟(帧率25),切割成两个分段,根据视频信息,决定第一分段共有6335个视频帧,其时长为6335*40=253400ms,音频部分5457帧,时长5457*1024000/22050.=253422.585,音频比视频长22.585ms。播放完第一分段视频的时候,要记录这两个时长,然后把这两个时长分别加到第二分段视频文件中的每一个视频帧和音频帧。
flash播放器中的播放模块在播放flv分段视频时,边下边拼成一个视频。具体过程如下:Flash播放器包括数据缓存模块,用来存放下载的视频数据;以及数据拼接和转换模块,把缓存的视频数据拼接和转换为flv格式。在Flash播放器中的播放模块需要视频数据的时候,数据拼接和转换模块会计算需要的视频数据的地址,然后从数据缓存模块取出已经缓存的视频数据,转换为flv格式的视频数据,交给播放模块进行播放。Flash播放器会在内部实现一个数据缓存和数据组装。数据缓存部分用来存储不同的flv视频流信息。然后在播放的时候,通过数据组装部分,给flv数据添加上元信息(即metadata信息),比如说在切换flv文件的时候,需要添加上flv头和metadata信息。数据组装部分还负责判断一个flv文件是否已经播放结束,如果播放结束就自动拼接下一个flv文件。在视频进行拖动的时候,数据组装部分根据关键帧元数据判断出拖动的位置,并且取出正确的缓存数据进行播放。经过这些处理,将以前flash播放器播放两个分段视频进行切换的工作,转换为一个瞬间完成的数据取出,转换和拼接,播放的工作,尽可能地减少了两个分段视频切换的停顿现象。
如图2所示,根据本发明的方法包括以下步骤:
步骤(1)将flv格式或mp4格式的视频进行分段后放入数据缓存模块,或者利用开源软件程序把视频转成一个flv格式的视频后再分段;
步骤(2)去掉flv开头和metadata信息、保留视频和音频tag、并且去掉记录解码信息的伪帧、修改tag的时间戳;
步骤(3)给flv数据添加上元信息和/或flv头信息;
步骤(4)计算需要的视频数据的地址并从数据缓存模块取出已经缓存的视频数据进行拼接和格式转换;
步骤(5)对取出的视频数据进行播放。
本发明所取得的技术效果为用flash播放flv分片视频不会在分片点有短时停顿现象了。
以上是对本发明的优选实施例进行的详细描述,但本领域的普通技术人员应该意识到,在本发明的范围内和精神指导下,各种改进、添加和替换都是可能的。这些都在本发明的权利要求所限定的保护范围内。