一种提高FLV视频跳播速度和定位精确性的方法与流程

文档序号:16703041发布日期:2019-01-22 21:51阅读:770来源:国知局
一种提高FLV视频跳播速度和定位精确性的方法与流程

本发明涉及视频播放技术领域,具体涉及一种提高FLV视频跳播速度和定位精确性的方法。



背景技术:

现有技术在处理FLV视频跳播时主要有两种视频帧位置定位方法,一种是在开始播放前解析头信息时把视频中所有关键帧搜集起来建立关键帧索引表,这种方式在处理大视频文件时,启动播放的时间过长;另一种方法是根据跳播时间、文件大小和视频总时长计算出视频帧位置,再依据计算出来的值跳到该关键帧附近位置,这种方式无法对跳播位置对应的关键帧进行精确定位。关键帧是一幅具有一帧完整画面的视频帧,在解码的时候可用于其他帧(P帧、B帧)的参考。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的不足,提供一种提高FLV视频跳播速度和定位精确性的方法,克服现有技术处理跳播的方法造成播放启动时间过长、跳播定位不精确的缺陷。

本发明为解决上述技术问题所采用的技术方案为:

一种提高FLV视频跳播速度和定位精确性的方法,包括步骤:

A1、建立一数据结构,用于存储FLV视频关键帧索引表,所述FLV视频关键帧索引表的内容包括同一关键帧的时间戳和视频文件位置;

A2、FLV视频播放过程中需要跳播时,获取跳播时间点;

A3、将所述跳播时间点与所述FLV视频关键帧索引表中的时间戳依次进行比较,如果有相符者,则根据拥有该时间戳的关键帧的视频文件位置对该关键帧进行定位并重新开始播放;

A4、如果没有找到与所述跳播时间点相符的时间戳,则执行步骤A5;

A5、计算关键帧间隔最大值,在所述FLV视频关键帧索引表中寻找两个相邻的关键帧,计算所述两个相邻的关键帧各自的时间戳与所述跳播时间点的差值,如果所述差值中一个为正数,一个为负数,确定与较小的所述差值的绝对值对应的所述时间戳,如果所述时间戳与所述跳播时间点的差值小于所述关键帧间隔最大值,则根据拥有该时间戳的关键帧的视频文件位置对该关键帧进行定位并重新开始播放。

根据本发明的实施例,还包括步骤A6:如果所述FLV视频关键帧索引表为空表或者在步骤A3、步骤A5中没有找到相应的关键帧,则在所述视频文件中确定一个起始搜寻位置并读取所述起始搜寻位置附近一定数量的关键帧的时间戳,计算所述时间戳与所述跳播时间点的差值的绝对值,并从最小的所述绝对值对应的关键帧开始重新播放。

根据本发明的实施例,根据跳播时间*视频容量字节数/视频总时长的计算结果来确定所述起始搜寻位置。

根据本发明的实施例,还包括步骤A7:将搜索出的关键帧的时间戳和视频文件位置保存到所述FLV视频关键帧索引表中。

实施本发明的技术方案,具有以下有益效果:采用本发明的技术方案可以快速启动播放,快速定位跳播位置,在跳播过程中分析关键帧,并建立关键帧索引表,每次跳播都会把相应的关键帧信息添加到关键帧索引表中,这样如果下次跳播的位置在关键帧索引表里有记录,可以直接根据关键帧索引表的时间戳来快速定位到跳播位置,本发明由此提高了FLV视频跳播速度和定位精确性。

附图说明

下面通过参考附图并结合实例具体地描述本发明,本发明的优点和实现方式将会更加明显,其中附图所示内容仅用于对本发明的解释说明,而不构成对本发明的任何意义上的限制,在附图中:

图1为本发明流程图。

具体实施方式

如图1所示,建立一个双向链表数据结构,用于存储关键帧索引表:

KeyframeTab:即关键帧索引表,里面记录着关键帧时间戳和对应的位置,按关键帧时间戳从小到大顺序排列。关键帧是具有一帧完整的画面,在解码的时候可用于其他帧(P帧、B帧)的参考。

(1)在开始播放视频时先初始化索引表KeyframeTab,如果播放的视频头信息里面携带有关键帧索引表,用这部分数据填充KeyframeTab。

(2)用户在正常播放的时候,关键帧索引表不会使用到,播放完时销毁初始化时建立的关键帧索引表。

(3)当用户进行跳播时,先检查KeyframeTab链表里是否有关键帧结点,结点不为空说明关键帧索引表中已经存在关键帧,并计算关键帧间隔最大值(关键帧间隔最大值=20*1000/帧率)。

(4)如果KeyframeTab链表中已经存在一部分关键帧,先和跳播时间点进行匹配,匹配分三种情况:

第一种,KeyframeTab链表中找到关键帧时间戳和跳播时间点相等的关键帧结点,从结点中获取关键帧位置,并跳到该关键帧位置,转入步骤(6)结束跳播;

第二种,KeyframeTab链表中找到关键帧时间戳与跳播时间点绝对值在关键帧最大间隔值以内,如果该关键帧时间戳比跳播时间点大,与上一个关键帧结点是相邻的(prv->continuity等于1),并且上一个关键帧结点中时间戳比跳播时间点小,在这两个结点中选择与跳播时间最接近(跳播时间点和关键帧时间戳差值最小)的关键帧,跳到该关键帧位置keyframePos,再转入步骤(6)结束跳播。

第三种,KeyframeTab链表中找到关键帧时间戳与跳播时间点绝对值在关键帧最大间隔值以内,如果该关键帧时间戳比跳播时间点小,与下一个关键帧结点是相邻的(当前结点continuity等于1),并且下一个关键帧结点中时间戳比跳播时间点大,在这两个结点中选择与跳播时间最接近(跳播时间点和关键帧时间戳差值最小)的关键帧,跳到该关键帧位置keyframePos,再转入步骤(6)结束跳播。

(5)如果KeyframeTab链表不存在关键帧或者步骤(4)中在KeyframeTab链表中没有匹配到关键帧,则进入逐个关键帧帧搜索:

A)根据跳播时间、文件大小和视频总时长计算出关键帧搜索的起始搜寻位置(起始搜寻位置=跳播时间*视频容量字节数/视频总时长),并跳到该起始搜寻位置。

B)在该起始搜寻位置附近逐帧搜索关键帧,获取搜索过的关键帧时间戳,并与跳播时间比较,选择差值最小的关键帧,然后跳到该关键帧位置。

C)把搜索过的关键帧按时间戳从小到大保存到KeyframeTab链表中。因为是逐帧搜索,所以搜索过的关键帧都是相邻的(continuity置1),但搜索过的最后一个关键帧(这个关键帧后面没有关键帧了)除外。

(6)根据确定的关键帧的视频文件位置对视频文件中的关键帧进行定位并重新开始播放。

本领域技术人员不脱离本发明的实质和精神,可以有多种变形方案实现本发明,以上所述仅为本发明较佳可行的实施例而已,并非因此局限本发明的权利范围,凡运用本发明说明书及附图内容所作的等效结构变化,均包含于本发明的权利范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1