专利名称:视频文件播放方法及系统、用户端设备、服务器设备的制作方法
技术领域:
本发明涉及互联网技术领域,具体涉及一种视频文件播放方法及系统、用户端设 备、服务器设备。
背景技术:
随着互联网的发展,视频监控与网络流媒体点播越来越得到广泛的应用,点播回 放远程视频需求日益强劲。在现有技术中,都是从远程服务器上下载码流缓存到内存进行 播放的。在服务器端,同一个时间轴的视频文件以一个视频文件的形式保存在服务器端供 用户端下载,该视频文件有索引区和二级索引区,其中索引区包括起始地址、文件长度、起 始时间、结束时间、文件信息及二级索引等,二级索引区包括各个帧内编码帧I帧信息,该I 帧信息具体有I帧的起始时间、I帧的地址以及私有信息等。在对现有技术的研究和实践过程中,本发明的发明人发现,在现有技术中,都是从 远程服务器上下载码流缓存到内存进行播放的,随着高清时代的来临,这对终端的内存的 消耗提出了更高的要求。并且,在同一时间轴上不同视频文件连续下载在当前的应用中几 乎是一片空白。
发明内容
本发明实施例提供一种视频文件播放方法及系统、用户端设备、服务器设备,解决 了用户端从远程服务器上下载视频文件进行播放时,在同一时间轴上不同视频文件不能够 连续下载的问题。一种视频文件播放方法,包括用户端从服务器下载视频文件;将所述视频文件添加索引区,所述索引区包括所述视频文件的起始地址、下一个 文件地址、起始时间;根据所述视频文件索引区的起始时间将所述视频文件插入到本地的视频文件队 列中,所述视频文件的上一个视频文件的索引区的下一个文件地址为所述视频文件的索引 区的起始地址,所述视频文件的索引区的下一个文件地址为所述视频文件的下一个视频文 件的索引区的起始地址,所述视频文件队列为由多个视频文件根据索引区的起始时间的先 后顺序前后拼接而成的大视频文件;播放所述视频文件。一种视频文件播放方法,包括接收用户端发送的视频文件下载请求消息,所述视频文件下载请求消息携带播放 时间;根据所述播放时间查找对应的视频文件;将所述视频文件发送给用户端;所述视频文件发送完后,根据所述视频文件索引区的下一个文件地址查找到下一个视频文件的起始地址,前一个视频文件索引区的下一个文件地址为后一个视频文件索引 区的起始地址,多个所述视频文件前后拼接成一个大视频文件,即视频文件队列;将所述下一个视频文件发送给用户端,直到所述视频文件队列中的最后一个视频 文件,或者直到停止时间对应的视频文件,所述停止时间由用户端发送。一种用户端设备,包括下载模块,用于从服务器下载视频文件;索引区添加模块,用于将存储模块存储的视频文件添加索引区,所述索引区包括 所述视频文件的起始地址、下一个文件地址、起始时间;视频文件队列管理模块,用于根据所述视频文件索引区的起始时间将所述视频文 件插入到本地的视频文件队列中,所述视频文件的上一个视频文件的索引区的下一个文件 地址为所述视频文件的索引区的起始地址,所述视频文件的索引区的下一个文件地址为所 述视频文件的下一个视频文件的索引区的起始地址,所述视频文件队列为一个大视频文 件,根据多个视频文件的索引区的起始时间的先后顺序前后拼接而成;播放模块,用于播放视频文件队列管理模块插入视频文件队列的视频文件。一种服务器设备,包括接收模块,用于接收用户端发送的视频文件下载请求消息,所述视频文件下载请 求消息携带播放时间;查找模块,用于根据接收模块接收的播放时间查找对应的视频文件;发送模块,用于将查找模块查找到的视频文件发送给用户端,并在所述视频文件 发送完后,根据所述视频文件索引区的下一个文件地址查找到下一个视频文件的起始地 址,并将所述下一个视频文件发送给用户端,直到视频文件队列中的最后一个视频文件,或 者停止时间对应的视频文件,所述停止时间由用户端发送;所述视频文件队列为一个大视 频文件,根据多个视频文件的索引区的起始时间的先后顺序前后拼接而成,前一个视频文 件索引区的下一个文件地址为后一个视频文件索引区的起始地址。一种视频文件播放系统,包括上述用户端设备,以及上述服务器设备。本发明实施例通过用户端从服务器下载视频文件,将该视频文件添加索引区,该 索引区包括起始地址、下一个文件地址、起始时间,再根据该视频文件索引区的起始时间将 该视频文件插入到本地的视频文件队列中,使得该视频文件的上一个视频文件的索引区的 下一个文件地址为该视频文件的索引区的起始地址,并且该视频文件的索引区的下一个文 件地址为该视频文件的下一个视频文件的索引区的起始地址,其中视频文件队列为由多个 视频文件根据索引区的起始时间的先后顺序前后拼接而成的大视频文件;然后播放接收的 视频文件;这样在同一时间轴上,不同的视频文件就能够不分先后连续下载,能够将不连续 存储的视频文件按照时间顺序播放,并且因为是保存在本地,所以在回放的时候,不会消耗 大量内存。
图1是本发明实施例一种视频文件播放方法的数据流程示意图;图2是本发明实施例一种视频文件播放方法的数据流程示意图3是本发明实施例一种视频文件播放方法的数据流程示意图;图4是本发明实施例视频文件索引区示意图;图5是本发明实施例视频文件二级索引区示意图;图6是本发明实施例I帧信息示意图;图7是本发明一应用例中搜索结果示意图;图fe是本发明实施例一种用户端设备逻辑结构示意图;图8b是本发明实施例一种用户端设备逻辑结构示意图;图9a是本发明实施例一种服务器设备逻辑结构示意图;图9b是本发明实施例一种服务器设备逻辑结构示意图;图10是本发明实施例一种视频文件播放系统逻辑结构示意图。
具体实施例方式本发明实施例提供一种视频文件播放方法,本发明实施例还提供相应的系统、用 户端设备和服务器设备。以下分别进行详细说明。请参阅图1,本发明实施例中视频文件播放方法的第一实施例,具体的101、用户端从服务器下载视频文件;102、将视频文件添加索引区;将下载的视频文件添加上索引区,该索引区包括视频文件的起始地址、下一个文 件地址、起始时间等项目。103、根据视频文件索引区的起始时间将下载的视频文件插入到本地的视频文件 队列中;视频文件的索引区有起始地址、下一个文件地址、起始时间等项目,根据视频文件 的索引区的起始时间将该视频文件插入到本地的视频文件队列中,其中,视频文件队列为 由多个视频文件根据索引区的起始时间的先后顺序前后拼接而成的大视频文件,组成视频 文件队列的视频文件都在同一时间轴上;将下载的视频文件插入到视频文件队列中,使得 该视频文件的上一个视频文件的索引区的下一个文件地址为该视频文件的索引区的起始 地址,并且该视频文件的索引区的下一个文件地址为该视频文件的下一个视频文件的索引 区的起始地址。104、播放视频文件。在本实施例中,用户端从服务器下载视频文件,将该视频文件添加索引区,该索引 区包括起始地址、下一个文件地址、起始时间,再根据该视频文件索引区的起始时间将该视 频文件插入到本地的视频文件队列中,使得该视频文件的上一个视频文件的索引区的下一 个文件地址为该视频文件的索引区的起始地址,并且该视频文件的索引区的下一个文件地 址为该视频文件的下一个视频文件的索引区的起始地址,其中视频文件队列为由多个视频 文件根据索引区的起始时间的先后顺序前后拼接而成的大视频文件;然后播放接收的视频 文件;这样在同一时间轴上,不同的视频文件就能够不分先后连续下载,能够将不连续存储 的视频文件按照时间顺序播放,并且因为是保存在本地,所以在回放的时候,不会消耗大量 内存。请参阅图2,本发明实施例中视频文件播放方法的第二实施例,具体的
201、用户端获取用户输入的播放时间;用户端获取用户输入的播放时间,具体的,用户端获取用户在播放进度条上搜索 (Seek)的位置,然后计算kek的位置占播放进度条总长度的比例,再将该比例与播放总时 间相乘得到的值加上第一个视频文件的起始时间,得到播放时间;或者是用户直接输入的 播放时间;202、判断本地是否有播放时间对应的视频文件;在步骤201中获取播放时间后,根据该播放时间到存储在本地的视频文件队列中 查找,判断是否有于该播放时间对应的视频文件,具体的同一时间轴上的不同视频文件,用户端在下载了视频文件后就会将视频文件保存 在本地,形成一个视频文件队列,该视频文件队列中的各个视频文件在物理存储顺序上是 不一定按顺序存储的,先下载的在前面,后下载的在后面,但是各个视频文件在播放时是按 照各个视频文件的索引区的起始时间的先后顺序播放的,例如第一次下载的视频文件A的 起始时间和结束时间为14:00至15:00 ;第二次下载的视频文件B的起始时间和结束时间 为10:00至11:00,因为视频文件B的起始时间小于视频文件A的起始时间,所以将视频文 件A的索引区的起始地址作为视频文件B的索引区的下一个文件地址;第三次下载的视频 文件C的起始时间和结束时间为16:00至18:00,因为视频文件C的起始时间大于视频文件 A的起始时间,所以将视频文件C的索引区的起始地址作为视频文件A的索引区的下一个文 件地址;那么,这三个视频文件的物理存储顺序为A — B — C,而播放顺序为B — A — C,在 播放完视频文件B后,根据视频文件B的索引区的下一个文件地址找到视频文件A的起始 地址,继续播放视频文件A,在播放完视频文件A后,根据视频文件A的索引区的下一个文件 地址找到视频文件C的起始地址,继续播放视频文件C ;从本地视频文件队列中的第一个视频文件开始,将播放时间与视频文件的索引区 的结束时间进行比较,如果播放时间大于视频文件的索引区的结束时间,则根据该视频文 件的索引区的下一个文件地址找到下一个视频文件,将播放时间与下一个视频文件的索引 区的结束时间进行比较,如此循环,直至比较到最后一个视频文件。203、如果没有,则发送视频文件下载请求消息给服务器;如果在步骤202中,比较的结果是播放时间小于第一个视频文件的索引区的起始 时间,或者播放时间大于视频文件队列中最后一个视频文件的索引区的起始时间,则说明 本地没有与播放时间对应的视频文件,需要到服务器下载相应视频文件,则发送视频文件 下载请求消息给服务器,该视频文件下载请求消息携带播放时间。204、接收服务器发送的视频文件;服务器接收用户端发送的视频文件下载请求消息后,根据该视频文件下载请求消 息携带的播放时间到存储在服务器端预先设置的视频文件队列中寻找与该播放时间对应 的视频文件的二级索引区的I帧,并从该I帧开始将视频文件发送给用户端,其中视频文件 队列由多个同一时间轴上的视频文件按索引区的起始时间的先后顺序组合而成,其中前一 个视频文件的索引区的下一个文件地址为下一个视频文件的索引区的起始地址;具体的先判断播放时间是否小于第一个视频文件的索引区的结束时间;如果不小于,则 根据第一个视频文件索引区的下一个文件地址找到下一个视频文件索引区,并判断播放时
9间是否小于下一个视频文件索引区的结束时间;依次循环,直至找到播放时间小于索引区 的结束时间的视频文件;再比较播放时间与播放时间小于索引区的结束时间的视频文件的二级索引区的 第一个I帧的起始时间的大小;如果播放时间大于该I帧的起始时间,则再判断播放时间是 否小于等于下一个I帧的起始时间;依次循环,直至找到该播放时间小于等于I帧的起始时 间的I帧,如果播放时间等于I帧的起始时间,则从该I帧开始向用户端发送视频文件;如 果播放时间小于I帧的起始时间,则从该I帧的前一个I帧开始向用户端发送视频文件;当接收第一个I帧时,根据该I帧的起始时间定位该I帧在视频文件队列中的位 置,具体的,将该I帧的起始时间与视频文件队列中第一个视频文件的起始时间比较,如 果I帧的起始时间大于第一个视频文件的起始时间,则根据第一个视频文件的索引区的下 一个视频文件找到第二个视频文件,再比较该I帧的起始时间和第二个视频文件的起始时 间,依次循环,直至查找到起始时间大于该I帧的视频文件,第一个I帧的位置查找到的视 频文件的前面;当接收第二个以后的I帧时,根据该I帧的起始时间判断视频文件队列中是否已 经存在该I帧,具体的,接收到第二个以后的I帧时,将I帧的起始时间与查找到的视频文 件的起始时间比较,如果该I帧的起始时间等于查找到的视频文件的起始时间时,说明该I 帧所在的视频文件用户端已经有了,此时,用户端发送停止下载的消息给服务器,服务器停 止发送视频文件给用户端。205、将下载的视频文件添加索引区;用户端接收的视频文件是没有索引区的,为了能将接收的视频文件插入到存储在 本地的视频文件队列中,需要将接收的视频文件添加索引区,索引区包括起始时间、文件 长度、起始时间、结束时间、文件信息、下一个文件地址、二级索引等项目。206、根据视频文件索引区的起始时间将下载的视频文件插入到本地的视频文件 队列中;因为在步骤204中,已经将第一个I帧定位好了,直接将接收的视频文件插到第一 个I帧定的位置。207、播放视频文件;进一步的,当播放到某个视频文件的最后一个帧内编码帧时,若根据该视频文件 的索引区的下一个文件地址查找到的物理地址没有视频文件时,向服务器发送视频文件下 载请求消息,该视频文件下载请求消息携带播放时间,该播放时间等于该视频文件的最后 一个帧内编码帧的起始时间。208、如果有,则根据播放时间获取并播放对应的视频文件;如果在步骤202中,比较的结果是本地有与播放时间对应的视频文件,则获取并 播放该视频文件,具体的判断播放时间是否小于等于本地视频文件队列中第一个视频文件的索引区的结 束时间;如果大于,则根据第一个视频文件的索引区的下一个文件地址找到下一个视频文 件,并判断播放时间是否小于等于下一个视频文件的索引区的结束时间;依次循环,直至找 到播放时间小于等于索引区的结束时间的视频文件;如果查找到播放时间等于索引区的结束时间的视频文件,则从该视频文件的二级索引区的第一个I帧开始播放;如果查找到播放时间小于索引区的结束时间的视频文件,再比较播放时间与该视 频文件的二级索引区的第一个I帧的起始时间的大小;如果播放时间大于该I帧的起始时 间,则再判断播放时间是否小于等于下一个I帧的起始时间;依次循环,直至找到播放时间 小于等于I帧的起始时间的I帧,如果播放时间等于I帧的起始时间,则从该I帧内编码帧 开始播放;如果播放时间小于I帧的起始时间,则从该I帧的前一个I帧开始播放。在本实施例中,用户端从服务器下载视频文件,将该视频文件添加索引区,该索引 区包括起始地址、下一个文件地址、起始时间,再根据该视频文件索引区的起始时间将该视 频文件插入到本地的视频文件队列中,使得该视频文件的上一个视频文件的索引区的下一 个文件地址为该视频文件的索引区的起始地址,并且该视频文件的索引区的下一个文件地 址为该视频文件的下一个视频文件的索引区的起始地址,其中视频文件队列为由多个视频 文件根据索引区的起始时间的先后顺序前后拼接而成的大视频文件;然后播放接收的视频 文件;这样在同一时间轴上,不同的视频文件就能够不分先后连续下载,能够将不连续存储 的视频文件按照时间顺序播放,并且因为是保存在本地,所以在回放的时候,不会消耗大量 内存。请参阅图3,本发明实施例中视频文件播放方法的第三实施例,具体的301、接收用户端发送的视频文件下载请求消息;服务器接收用户端发送的视频文件下载请求消息,该视频文件下载请求消息携带 播放时间。302、根据播放时间查找对应的视频文件;服务器根据接收的视频文件下载请求消息携带的播放时间到存储在服务器端预 先设置的视频文件队列中寻找与该播放时间对应的视频文件的二级索引区的I帧,并从该 I帧开始将视频文件发送给用户端,其中视频文件队列由多个同一时间轴上的视频文件按 索引区的起始时间的先后顺序组合而成,其中前一个视频文件的索引区的下一个文件地址 为下一个视频文件的索引区的起始地址;具体的先判断播放时间是否小于第一个视频文件的索引区的结束时间;如果不小于,则 根据第一个视频文件索引区的下一个文件地址找到下一个视频文件索引区,并判断播放时 间是否小于下一个视频文件索引区的结束时间;依次循环,直至找到播放时间小于索引区 的结束时间的视频文件;再比较播放时间与播放时间小于索引区的结束时间的视频文件的二级索引区的 第一个I帧的起始时间的大小;如果播放时间大于该I帧的起始时间,则再判断播放时间是 否小于等于下一个I帧的起始时间;依次循环,直至找到该播放时间小于等于I帧的起始时 间的I帧。303、发送视频文件给用户端;在步骤302中,如果找到视频文件的I帧,若播放时间等于I帧的起始时间,则从 该I帧开始向用户端发送视频文件;若播放时间小于I帧的起始时间,则从该I帧的前一个 I帧开始向用户端发送视频文件;在一个视频文件发送完毕后,如果还没有到达视频文件队列的末尾,或者还没有
11到达用户端发送的停止时间,则根据该视频文件的索引区的下一个文件地址找到下一个视 频文件,从下一个视频文件的第一个I帧开始,将该下一个视频文件发送给用户端。在本实施例中,通过在服务器端将同一时间轴上的多个视频文件前后拼接成一个 视频文件队列,用户端在下载视频文件时可以分别下载便可播放,而不需要将同一时间轴 上的所有视频文件都下载才能播放;并且服务器端都是从I帧开始将视频文件发送给用户 端进行播放,使得用户端在播放时不会出现不完整的图像。请参阅图4至图7,一下是本发明实施例中的一个应用例在服务器上的每个视频文件的存储格式如图4所示,包括索引区和数据区,索引 区包括起始地址、文件长度、起始时间、结束时间、文件信息、下一个文件地址和二级索引区 等等,二级索引区如图5所示,二级索引区存放各个I帧的信息,各个I帧信息的存储格式 如图6所示,存有各个I帧的起始时间,和各个I帧的地址以及私有信息,例如报警信息;例如服务器上有4个视频文件,第一个视频文件A的一级索引区的数据起始地址 为0,文件长度为3,起始时间为2010年9月1日,12:00:00,结束时间为2010年9月1日, 15:00:00,下一个文件的地址为3 ;第二个视频文件B的一级索引区的数据起始地址为3,文件长度为5,起始时间为 2010年9月1日,22:00:00,结束时间为2010年9月2日,03 00 00,下一个文件的地址为 8 ;第三个视频文件C的一级索引区的数据起始地址为8,文件长度为4,起始时间为 2010年9月2日,10:00:00,结束时间为2010年9月2日,14:00:00,下一个文件的地址为 12 ;第四个视频文件D的一级索引区的数据起始地址为12,文件长度为3,起始时间 为2010年9月2日,17:00:00,结束时间为2010年9月2日,20 00 00,下一个文件的地址 为15;用户在终端输入起始时间和结束时间,便可以非常方便地查看保存于远程服务器 上的视频文件的数据信息;具体的第一步,服务器将输入的结束时间与第一个视频文件的起始时间比较,如果第一 个视频文件的起始时间大于输入的结束时间,说明远程服务器中没有符合要求的视频文 件,搜索失败;第二步,如果视频文件A的起始时间小于输入的结束时间,则将视频文件A的结束 时间与输入的起始时间比较,如果输入的起始时间大于视频文件A的结束时间,则将视频 文件B的结束时间与输入的起始时间比较,依次循环,直至输入的起始时间小于本地存储 的视频文件的结束时间;第三步,再从搜索到的结束时间大于输入的起始时间的视频文件开始,将输入的 结束时间与该视频文件的结束时间比较,直至输入的结束时间小于或者等于视频文件的结 束时间;如果在第二步,没有搜索到输入的时间小于结束时间的存储在本地的视频文件, 则搜索失败;通过上述搜索方法,如果用户输入的起始时间为2010年9月2日00:00:00,结束 时间为2010年9月3日00:00:00,终端将起始时间和结束时间发送到远程服务器后,将符合条件的视频文件的数据信息在终端显示给用户,如图7阴影部分所示,搜索结果为2010 年 9 月 2 日的 00:00:00 至 03:00:00 文件,10:00:00 至 14:00:00 文件以及 17:00:00 至 20:00:00 文件。用户在时间轴上进行第一次Seek操作,如果Seek的播放时间为2010年9月1日, 22:00:00,计算播放时间具体的用户端获取用户在播放进度条上搜索(Seek)的位置,然 后计算Seek的位置占播放进度条总长度的比例,再将该比例与播放总时间相乘得到的值 加上视频文件A的起始时间,得到播放时间;或者也可以是由用户直接输入的播放时间;用户向服务器发送视频文件下载请求消息,该消息携带播放时间;服务器接收视频文件下载请求消息,根据该消息携带的播放时间查找对应的视频 文件,具体的服务器存储有同一时间轴的多个视频文件,并将多个视频文件根据起始时间的先 后顺序前后拼接成一个视频文件队列,前一个视频文件的索引区的下一个文件地址为下一 个视频文件的索引区的起始地址,视频文件队列的顺序是视频文件A—视频文件B—视频 文件C—视频文件D ;播放时间为2010年9月1日,22:00:00,视频文件A的索引区的结束时间为2010 年9月1日,15:00:00,播放时间大于视频文件A的索引区的结束时间,则根据视频文件A 索引区的下一个文件地址找到下一个视频文件索引区,即视频文件B的索引区,视频文件B 的索引区的结束时间为2010年9月2日,03 00 00,播放时间小于视频文件B的索引区的 结束时间,再比较播放时间和视频文件B的索引区的第一个I帧的起始时间的大小,视频文 件B的索引区的第一个I帧的起始时间为2010年9月1日,22:00:00,与播放时间相等,说 明找到了播放时间对应的I帧;服务器从查找到的I帧开始发送视频文件给用户端;用户端接收视频文件,播放该视频文件并将视频文件保存到本地硬盘,在播放到 2010年9月2日,03:00:00时间点时,用户做了停止播放的操作,这时,用户端发送停止时 间给服务器端,服务器停止发送视频文件;服务器给该视频文件,即视频文件B添加索引 区起始地址为0,文件长度为5,起始时间为2010年9月1日,22:00:00,结束时间为2010 年9月2日,03:00:00,下一个文件的地址为5 ;用户在时间轴上进行第二次Seek操作,如果Seek的播放时间为2010年9月1日, 12:00:00 ;用户端判断本地是否有播放时间对应的视频文件,具体的从本地视频文件队列中的第一个视频文件,即视频文件B开始,将播放时间与视 频文件的索引区的结束时间进行比较,如果播放时间大于视频文件的索引区的结束时间, 则根据该视频文件的索引区的下一个文件地址找到下一个视频文件,将播放时间与下一个 视频文件的索引区的结束时间进行比较,如此循环,直至比较到最后一个视频文件,因为本 地只有视频文件B,视频文件B的索引区的结束时间为2010年9月2日,03:00:00,播放时 间为2010年9月1日,12:00:00,播放时间大于视频文件B的索引区的结束时间,所以本地 视频文件队列中没有播放时间对应的视频文件,需要到服务器下载;用户向服务器发送视频文件下载请求消息,该消息携带播放时间;服务器接收视频文件下载请求消息,根据该消息携带的播放时间查找对应的视频文件,具体的播放时间为2010年9月1日,12:00:00,视频文件B的索引区的结束时间为2010 年9月2日,03:00:00,播放时间小于视频文件B的索引区的结束时间,再比较播放时间和 视频文件B的索引区的第一个I帧的起始时间的大小,视频文件B的索引区的第一个I帧 的起始时间为2010年9月1日,12:00:00,与播放时间相等,说明找到了播放时间对应的I 帧;服务器从查找到的I帧开始发送视频文件给用户端;用户端接收视频文件,用户端接收第一个I帧时,根据该I帧的起始时间迅速定 到该I帧应该插入本地视频文件队列中的位置,具体的,将该I帧的起始时间与视频文件 队列中第一个视频文件的起始时间比较,如果I帧的起始时间大于第一个视频文件的起始 时间,则根据第一个视频文件的索引区的下一个视频文件找到第二个视频文件,再比较该I 帧的起始时间和第二个视频文件的起始时间,依次循环,直至查找到起始时间大于该I帧 的视频文件;接收到第二个以后的I帧时,将I帧的起始时间与查找到的视频文件的起始时 间比较,如果该I帧的起始时间等于查找到的视频文件的起始时间时,用户端发送停止下 载的消息给服务器,服务器停止发送视频文件给用户端;在本应用例中,第二次Seek操作 接收的第一个I帧定位在视频文件B之前;用户端播放该视频文件并将视频文件保存到本地硬盘,在播放到2010年9月1 日,14:00:00时间点时,用户做了停止播放的操作,这时,用户端发送停止时间给服务器端, 服务器停止发送视频文件;服务器给该视频文件Al添加索引区,具体的起始地址为5,文 件长度为2,起始时间为2010年9月1日,12:00:00,结束时间为2010年9月1日,14:00:00, 下一个文件的地址为7 ;再根据视频文件索引区的起始时间将下载的视频文件插入到本地的视频文件队 列中,因为接收的视频文件的第一个I帧已经定位好了,直接将接收的视频文件插到视频 文件B的前面,具体的将接收的视频文件的索引区的下一个文件地址改成视频文件B的索引区的起始 地址;用户在时间轴上进行第三次Seek操作,如果Seek的播放时间为2010年9月1日, 14:30:00 ;用户端判断本地是否有播放时间对应的视频文件,具体的从本地视频文件队列中的第一个视频文件开始,将播放时间与视频文件的索引区 的结束时间进行比较,如果播放时间大于视频文件的索引区的结束时间,则根据该视频文 件的索引区的下一个文件地址找到下一个视频文件,将播放时间与下一个视频文件的索引 区的结束时间进行比较,如此循环,直至比较到最后一个视频文件;视频文件Al的索引区 的结束时间为2010年9月1日,14:00:00,播放时间为2010年9月1日,14:30:00,播放时 间大于视频文件Al的索引区的结束时间,在根据视频文件Al的索引区的下一个文件地址 找到视频文件B,再比较播放时间和视频文件B的索引区的结束时间,视频文件B的索引区 的结束时间为2010年9月2日,03:00:00,大于播放时间,再从视频文件B的第一个I帧开 始,比较播放时间和I帧的起始时间,视频文件B的第一个I帧的起始时间为2010年9月 1日,22 00 00,大于播放时间,说明本地视频文件队列中没有播放时间对应的视频文件,需要到服务器下载;用户向服务器发送视频文件下载请求消息,该消息携带播放时间;服务器接收视频文件下载请求消息,根据该消息携带的播放时间查找对应的视频 文件,具体的播放时间为2010年9月1日,14:30:00,视频文件队列中第一个视频文件,即视频 文件A的索引区的结束时间为2010年9月1日,15:00:00,播放时间小于第一个视频文件 的索引区的结束时间,再将视频文件A的第一个I帧的起始时间与播放时间比较,视频文件 A的第一个I帧的起始时间为2010年9月1日,12:00:00,小于播放时间,再将第二个I帧 的起始时间与播放时间比较,依次循环,直至找到起始时间大于等于播放时间的I帧,如果 I帧的起始时间与播放时间相等,从该I帧开始发送视频文件给用户端;如果I帧的起始时 间大于播放时间,则从该I帧的上一个I帧开始发送视频文件给用户端;用户端接收视频文件,接收第一个I帧时,根据该I帧的起始时间迅速定到该I帧 应该插入本地视频文件队列中的位置,在本应用例中,第三次Seek操作接收的第一个I帧 定位在视频文件B和视频文件Al之间;用户端播放该视频文件并将视频文件保存到本地硬盘,在播放到2010年9月1 日,14:45:00时间点时,用户做了停止播放的操作,这时,用户端发送停止时间给服务器端, 服务器停止发送视频文件;服务器给该视频文件A2添加索引区,具体的起始地址为7, 文件长度为0.25,起始时间为2010年9月1日,14:30:00,结束时间为2010年9月1日, 14:45:00,下一个文件的地址为7. 25 ;再根据视频文件索引区的起始时间将下载的视频文件A2插入到本地的视频文件 队列中,因为接收的视频文件的第一个I帧已经定位好了,直接将接收的视频文件插到视 频文件Al之后,视频文件B之前,具体的将视频文件A2的下一个文件地址改为视频文件Al的下一个文件地址,即视频文 件B的起始地址,再将视频文件Al的下一个文件地址改为视频文件A2的起始地址;所以, 视频文件队列的播放顺序为A1 — A2 — B ;用户在时间轴上进行第四次Seek操作,如果Seek的播放时间为2010年9月1日, 14:50:00 ;方法同第一至第三次Seek操作,此处不赘述;当接收的I帧的起始时间为2010年9月1日,22 00 00时,该I帧的起始时间与
视频文件B的起始时间相同,说明从该I帧开始的视频文科用户端本地已经有了,只需要从 本地硬盘获取数据播放即可,不需要从服务器下载,所以用户端发送停止下载的消息给服 务器,服务器停止发送视频文件给用户端;当用户端播放到起始时间为2010年9月2日,03:00:00的I帧时,发现视频文件 B的索引区的下一个文件地址没有视频文件,说明需要从服务器端下载视频文件,所以用 户端发送视频文件下载请求消息,该消息携带播放时间,此处即最后一个I帧的起始时间 2010年9月2日,03:00:00 ;服务器从起始时间为2010年9月2日,030000的I帧开始 向用户端发送视频文件,用户端接收该I帧后,将该I帧定位,然后接收后续的I帧;对于本 地已经有的I帧,用户端可以选择丢弃或者保留,此处不做限制。在本实施例中,用户端从服务器下载视频文件,将该视频文件添加索引区,该索引
15区包括起始地址、下一个文件地址、起始时间,再根据该视频文件索引区的起始时间将该视 频文件插入到本地的视频文件队列中,使得该视频文件的上一个视频文件的索引区的下一 个文件地址为该视频文件的索引区的起始地址,并且该视频文件的索引区的下一个文件地 址为该视频文件的下一个视频文件的索引区的起始地址,其中视频文件队列为由多个视频 文件根据索引区的起始时间的先后顺序前后拼接而成的大视频文件;然后播放接收的视频 文件;这样在同一时间轴上,不同的视频文件就能够不分先后连续下载,能够将不连续存储 的视频文件按照时间顺序播放,并且因为是保存在本地,所以在回放的时候,不会消耗大量 内存;并且,通过用户端发送起始时间和结束时间到服务器,服务器查找起始时间和结束时 间之间的所有视频文件的数据信息,并将该数据信息发送到用户端,用户端快速在时间轴 上显示,用户可以非常方便地查看保存于远程服务器上的视频文件的数据信息。请参阅图8a、图8b,本发明实施例中用户端设备的第五实施例,具体的下载模块801,用于从服务器下载视频文件;索引区添加模块802,用于将存储模块存储的视频文件添加索引区,其中索引区包 括视频文件的起始地址、下一个文件地址、起始时间;视频文件队列管理模块803,用于根据视频文件索引区的起始时间将该视频文件 插入到本地的视频文件队列中,视频文件的上一个视频文件的索引区的下一个文件地址为 该视频文件的索引区的起始地址,视频文件的索引区的下一个文件地址为该视频文件的下 一个视频文件的索引区的起始地址,其中视频文件队列为一个大视频文件,根据多个视频 文件的索引区的起始时间的先后顺序前后拼接而成;播放模块804,用于播放视频文件队列管理模块插入视频文件队列的视频文件。进一步的,请参阅图8b,下载模块801b,下载模块801包括第一获取单元801a,用于获取用户输入的播放时间;具体的,第一获取单元801a 包括获取单元,用于获取用户在播放进度条上搜索的位置;播放时间计算单元,用于计算 获取单元获取的搜索的位置占播放进度条总长度的比例,再将该比例与播放总时间相乘得 到的值加上第一个视频文件的起始时间,得到播放时间;判断单元801b,用于判断本地是否有与获取模块获取的播放时间对应的视频文 件;发送单元801c,用于当判断单元判断出本地没有与获取模块获取的播放时间对应 的视频文件时,则发送视频文件下载请求消息给服务器,其中视频文件下载请求消息携带 播放时间;第二获取模块801d,用于当判断单元判断出本地有获取模块获取的播放时间对应 的视频文件时,获取该视频文件;具体的,第二获取模块801d包括第一查找单元,用于从视频文件队列中的第一个视频文件开始,判断播放时间是 否小于等于视频文件队列的各个视频文件的索引区的起始时间,直至查找到播放时间小于 等于索引区的起始时间的视频文件;第二查找单元,用于当第一查找单元查找到播放时间小于索引区的起始时间的视 频文件时,从该视频文件的第一个I帧开始,判断播放时间是否小于等于各个I帧的起始时 间,直至查找到播放时间小于等I帧的起始时间的I帧;发送单元,用于当第一查找单元查找到播放时间等于索引区的起始时间的视频文件时,则将该视频文件的二级索引区的第一个I帧开始发送给播放模块进行播放;当第二 查找单元查找到播放时间等于I帧的起始时间的I帧时,则将该I帧开始发送给播放模块 进行播放;当第二查找单元查找到播放时间小于I帧的起始时间的I帧,则从该I帧的前一 个I帧开始发送给播放模块进行播放;接收单元801e,用于接收服务器发送的视频文件。在本实施例中,用户端从服务器下载视频文件,将该视频文件添加索引区,该索引 区包括起始地址、下一个文件地址、起始时间,再根据该视频文件索引区的起始时间将该视 频文件插入到本地的视频文件队列中,使得该视频文件的上一个视频文件的索引区的下一 个文件地址为该视频文件的索引区的起始地址,并且该视频文件的索引区的下一个文件地 址为该视频文件的下一个视频文件的索引区的起始地址,其中视频文件队列为由多个视频 文件根据索引区的起始时间的先后顺序前后拼接而成的大视频文件;然后播放接收的视频 文件;这样在同一时间轴上,不同的视频文件就能够不分先后连续下载,能够将不连续存储 的视频文件按照时间顺序播放,并且因为是保存在本地,所以在回放的时候,不会消耗大量 内存。请参阅图9a、图%,本发明实施例中用户端设备的第六实施例,具体的接收模块901,用于接收用户端发送的视频文件下载请求消息,该视频文件下载请 求消息携带播放时间;查找模块902,用于根据接收模块接收的播放时间查找对应的视频文件;发送模块903,用于将查找模块查找到的视频文件发送给用户端,并在该视频文件 发送完后,根据该视频文件索引区的下一个文件地址查找到下一个视频文件的起始地址, 并将下一个视频文件发送给用户端,直到视频文件队列中的最后一个视频文件,或者停止 时间对应的视频文件,其中停止时间由用户端发送;视频文件队列为一个大视频文件,根据 多个视频文件的索引区的起始时间的先后顺序前后拼接而成,前一个视频文件索引区的下 一个文件地址为后一个视频文件索引区的起始地址。如图%,进一步的,查找模块902包括第一查找单元902a,用于从视频文件队列中的第一个视频文件开始,判断播放时 间是否小于等于该视频文件队列的各个视频文件的索引区的起始时间,直至查找到播放时 间小于等于索引区的起始时间的视频文件;第二查找单元902b,用于当第一查找单元查找到播放时间小于索引区的起始时间 的视频文件时,从该视频文件的第一个I帧开始,判断播放时间是否小于等于各个I帧的起 始时间,直至查找到播放时间小于等于I帧的起始时间的I帧;发送单元902c,用于当第一查找单元查找到播放时间等于索引区的起始时间的视 频文件时,则将该视频文件的二级索引区的第一个I帧开始发送给用户端;当第二查找单 元查找到播放时间等于I帧的起始时间的I帧时,则将该I帧开始发送给用户端;当第二查 找单元查找到播放时间小于I帧的起始时间的I帧,则将该I帧的前一个I帧开始发送给
用户端。在本实施例中,通过在服务器端将同一时间轴上的多个视频文件前后拼接成一个 视频文件队列,用户端在下载视频文件时可以分别下载便可播放,而不需要将同一时间轴 上的所有视频文件都下载才能播放;并且服务器端都是从I帧开始将视频文件发送给用户端进行播放,使得用户端在播放时不会出现不完整的图像。请参阅图10,本实施例中视频文件播放系统的第七实施例,该视频文件播放系统 可以包括用户端设备1001和服务器设备1002。该用户端设备1001可以为上述用户端设备 实施例中描述的用户端设备,该服务器设备1002可以为上述服务器设备实施例中描述的 服务器设备。由于前述实施例已经进行了详细描述,此处不赘。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可 以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存 储介质可以包括只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。以上对本发明实施例所提供的一种视频文件播放方法以及系统、用户端设备和服 务器设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐 述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的 一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所 述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种视频文件播放方法,其特征在于,包括 用户端从服务器下载视频文件;将所述视频文件添加索引区,所述索引区包括所述视频文件的起始地址、下一个文件 地址、起始时间;根据所述视频文件索引区的起始时间将所述视频文件插入到本地的视频文件队列中, 所述视频文件的上一个视频文件的索引区的下一个文件地址为所述视频文件的索引区的 起始地址,所述视频文件的索引区的下一个文件地址为所述视频文件的下一个视频文件的 索引区的起始地址,所述视频文件队列为由多个视频文件根据索引区的起始时间的先后顺 序前后拼接而成的大视频文件; 播放所述视频文件。
2.根据权利要求1所述的方法,其特征在于,所述从服务器下载视频文件的步骤包括 用户端获取用户输入的播放时间;判断本地是否有与所述播放时间对应的视频文件;如果没有,则发送视频文件下载请求消息给服务器,所述视频文件下载请求消息携带 所述播放时间;接收服务器发送的视频文件。
3.根据权利要求2所述的方法,其特征在于,所述判断本地是否有与所述播放时间对 应的视频文件的步骤之后还包括如果有,则根据所述播放时间获取并播放对应的视频文件,具体的 判断所述播放时间是否小于等于所述视频文件队列中第一个视频文件的索引区的结 束时间;如果大于,则根据第一个视频文件的索引区的下一个文件地址找到下一个视频文件, 并判断所述播放时间是否小于等于所述下一个视频文件的索引区的结束时间; 依次循环,直至找到所述播放时间小于等于索引区的结束时间的视频文件; 如果查找到所述播放时间等于索引区的结束时间的视频文件,则从所述视频文件的二 级索引区的第一个帧内编码帧开始播放;如果查找到所述播放时间小于索引区的结束时间的视频文件,再比较所述播放时间与 所述视频文件的二级索引区的第一个帧内编码帧的起始时间的大小;如果所述播放时间大于所述帧内编码帧的起始时间,则再判断所述播放时间是否小于 等于下一个帧内编码帧的起始时间;依次循环,直至找到所述播放时间小于等于帧内编码帧的起始时间的帧内编码帧,如 果所述播放时间等于所述帧内编码帧的起始时间,则从所述帧内编码帧开始播放;如果所 述播放时间小于所述帧内编码帧的起始时间,则从所述帧内编码帧的前一个帧内编码帧开 始播放。
4.根据权利要求2所述的方法,其特征在于,所述接收服务器发送的视频文件的步骤 包括当接收第一个帧内编码帧时,根据所述帧内编码帧的起始时间定位所述帧内编码帧在 所述视频文件队列中的位置;当接收第二个以后的帧内编码帧时,根据所述帧内编码帧的起始时间判断所述视频文件队列中是否已经存在所述帧内编码帧;如果所述视频文件队列中已经存在所述帧内编码帧,则发送停止下载的消息给服务ο
5.根据权利要求4所述的方法,其特征在于,所述方法还包括当播放到某个视频文件的最后一个帧内编码帧时,若根据所述视频文件的索引区的下 一个文件地址查找到的物理地址没有视频文件时,向服务器发送视频文件下载请求消息, 所述视频文件下载请求消息携带播放时间,所述播放时间等于所述最后一个帧内编码帧的 起始时间。
6.根据权利要求5所述的方法,其特征在于,所述用户端获取用户输入的播放时间的 步骤包括获取用户在播放进度条上搜索的位置,然后计算所述搜索的位置占播放进度条总长度 的比例,再将所述比例与播放总时间相乘得到的值加上第一个视频文件的起始时间,得到 播放时间。
7.一种视频文件播放方法,其特征在于,包括接收用户端发送的视频文件下载请求消息,所述视频文件下载请求消息携带播放时间;根据所述播放时间查找对应的视频文件; 将所述视频文件发送给用户端;所述视频文件发送完后,根据所述视频文件索引区的下一个文件地址查找到下一个视 频文件的起始地址,前一个视频文件索引区的下一个文件地址为后一个视频文件索引区的 起始地址,多个所述视频文件前后拼接成一个大视频文件,即视频文件队列;将所述下一个视频文件发送给用户端,直到所述视频文件队列中的最后一个视频文 件,或者直到停止时间对应的视频文件,所述停止时间由用户端发送。
8.根据权利要求7所述的方法,其特征在于,所述根据播放时间查找对应的视频文件 的步骤具体的判断所述播放时间是否小于第一个视频文件的索引区的结束时间; 如果不小于,则根据第一个视频文件索引区的下一个文件地址找到下一个视频文件索 引区,并判断所述播放时间是否小于所述下一个视频文件索引区的结束时间; 依次循环,直至找到所述播放时间小于索引区的结束时间的视频文件; 再比较所述播放时间与所述播放时间小于索引区的结束时间的视频文件的二级索引 区的第一个帧内编码帧的起始时间的大小;如果所述播放时间大于所述帧内编码帧的起始时间,则再判断所述播放时间是否小于 等于下一个帧内编码帧的起始时间;依次循环,直至找到所述播放时间小于等于帧内编码帧的起始时间的帧内编码帧,如 果所述播放时间等于所述帧内编码帧的起始时间,则从所述帧内编码帧开始向用户端发送 视频文件;如果所述播放时间小于所述帧内编码帧的起始时间,则从所述帧内编码帧的前 一个帧内编码帧开始向用户端发送视频文件。
9.一种用户端设备,其特征在于,包括 下载模块,用于从服务器下载视频文件;索引区添加模块,用于将存储模块存储的视频文件添加索引区,所述索引区包括所述 视频文件的起始地址、下一个文件地址、起始时间;视频文件队列管理模块,用于根据所述视频文件索引区的起始时间将所述视频文件插 入到本地的视频文件队列中,所述视频文件的上一个视频文件的索引区的下一个文件地址 为所述视频文件的索引区的起始地址,所述视频文件的索引区的下一个文件地址为所述视 频文件的下一个视频文件的索引区的起始地址,所述视频文件队列为一个大视频文件,根 据多个视频文件的索引区的起始时间的先后顺序前后拼接而成;播放模块,用于播放视频文件队列管理模块插入视频文件队列的视频文件。
10.根据权利要求9所述的设备,其特征在于,所述下载模块包括 第一获取单元,用于获取用户输入的播放时间;判断单元,用于判断本地是否有与获取模块获取的播放时间对应的视频文件; 发送单元,用于当判断单元判断出本地没有与获取模块获取的播放时间对应的视频文 件时,则发送视频文件下载请求消息给服务器,所述视频文件下载请求消息携带所述播放 时间;第二获取模块,用于当判断单元判断出本地有获取模块获取的播放时间对应的视频文 件时,获取所述视频文件;接收单元,用于接收服务器发送的视频文件。
11.根据权利要求10所述的设备,其特征在于,包括 所述第一获取单元包括获取单元,用于获取用户在播放进度条上搜索的位置;播放时间计算单元,用于计算获取单元获取的搜索的位置占播放进度条总长度的比 例,再将所述比例与播放总时间相乘得到的值加上第一个视频文件的起始时间,得到播放 时间;所述第二获取单元包括第一查找单元,用于从所述视频文件队列中的第一个视频文件开始,判断所述播放时 间是否小于等于所述视频文件队列的各个视频文件的索引区的起始时间,直至查找到所述 播放时间小于等于索引区的起始时间的视频文件;第二查找单元,用于当第一查找单元查找到所述播放时间小于索引区的起始时间的视 频文件时,从所述视频文件的第一个帧内编码帧开始,判断所述播放时间是否小于等于各 个帧内编码帧的起始时间,直至查找到所述播放时间小于等于帧内编码帧的起始时间的帧 内编码帧;发送单元,用于当第一查找单元查找到所述播放时间等于索引区的起始时间的视频 文件时,则将所述视频文件的二级索引区的第一个帧内编码帧开始发送给播放模块进行播 放;当第二查找单元查找到所述播放时间等于所述帧内编码帧的起始时间的帧内编码帧 时,则将所述帧内编码帧开始发送给播放模块进行播放;当第二查找单元查找到所述播放 时间小于所述帧内编码帧的起始时间的帧内编码帧,则从所述帧内编码帧的前一个帧内编 码帧开始发送给播放模块进行播放。
12.一种服务器设备,其特征在于,包括接收模块,用于接收用户端发送的视频文件下载请求消息,所述视频文件下载请求消息携带播放时间;查找模块,用于根据接收模块接收的播放时间查找对应的视频文件;发送模块,用于将查找模块查找到的视频文件发送给用户端,并在所述视频文件发送 完后,根据所述视频文件索引区的下一个文件地址查找到下一个视频文件的起始地址,并 将所述下一个视频文件发送给用户端,直到视频文件队列中的最后一个视频文件,或者停 止时间对应的视频文件,所述停止时间由用户端发送;所述视频文件队列为一个大视频文 件,根据多个视频文件的索引区的起始时间的先后顺序前后拼接而成,前一个视频文件索 引区的下一个文件地址为后一个视频文件索引区的起始地址。
13.根据权利要求12所述的设备,其特征在于,所述查找模块包括第一查找单元,用于从所述视频文件队列中的第一个视频文件开始,判断所述播放时 间是否小于等于所述视频文件队列的各个视频文件的索引区的起始时间,直至查找到所述 播放时间小于等于索引区的起始时间的视频文件;第二查找单元,用于当第一查找单元查找到所述播放时间小于索引区的起始时间的视 频文件时,从所述视频文件的第一个帧内编码帧开始,判断所述播放时间是否小于等于各 个帧内编码帧的起始时间,直至查找到所述播放时间小于等于帧内编码帧的起始时间的帧 内编码帧;发送单元,用于当第一查找单元查找到所述播放时间等于索引区的起始时间的视频文 件时,则将所述视频文件的二级索引区的第一个帧内编码帧开始发送给用户端;当第二查 找单元查找到所述播放时间等于所述帧内编码帧的起始时间的帧内编码帧时,则将所述帧 内编码帧开始发送给用户端;当第二查找单元查找到所述播放时间小于所述帧内编码帧的 起始时间的帧内编码帧,则从所述帧内编码帧的前一个帧内编码帧开始发送给用户端。
14.一种视频文件播放系统,其特征在于,包括9至权11任一项权利要求所述的用户端 设备,以及权12至权13任一项权利要求所述的服务器设备。
全文摘要
本发明公开了一种视频文件播放方法,本发明实施例还提供相应的系统以及用户端和服务器设备。本发明技术方案通过用户端从服务器下载视频文件并添加索引区,该索引区包括起始地址、下一个文件地址、起始时间;再将该视频文件插入到本地的视频文件队列中,使得该视频文件的上一个视频文件的索引区的下一个文件地址为该视频文件索引区的起始地址,并且该视频文件索引区的下一个文件地址为该视频文件的下一个视频文件的索引区的起始地址,视频文件队列为由多个视频文件根据索引区的起始时间的先后顺序拼接成的大视频文件;然后播放该视频文件;解决了用户端从远程服务器上下载视频文件进行播放时,在同一时间轴上不同视频文件不能够连续下载的问题。
文档编号H04N21/438GK102075792SQ20101060276
公开日2011年5月25日 申请日期2010年12月23日 优先权日2010年12月23日
发明者李昭早 申请人:华为技术有限公司