一种缓存视频的方法以及相关设备与流程

文档序号:15848951发布日期:2018-11-07 09:32阅读:234来源:国知局
一种缓存视频的方法以及相关设备与流程

本发明涉及多媒体技术领域,尤其涉及一种缓存视频的方法以及相关设备。

背景技术

在视频网站的pc客户端的开发过程中,对于在线的直播视频流,由于该直播视频流为实时的,因此用户不能对直播视频进行快进或者快退的操作;而对于点播视频流,由于该点播视频流可能是非实时的,因此针对某个特定的时刻,用户可以对该点播视频流进行快进或者快退的操作。

现有技术中,点播视频流采用和直播视频流类似的缓存策略,即不对视频流进行缓存,直接播放从网络上拉取视频流进行播放。那么用户在对点播视频流进行快进与快退的操作时,都要等待点播视频流缓冲完成后,再开始播放。

然而,现有技术中,每次进行时间定位时,都需要等待视频流下载完成,这样会造成用户的长时间等待,造成不良的用户体验。



技术实现要素:

本发明实施例提供了一种缓存视频的方法以及相关设备,用于解决用户在播放点播视频进行时间定位时,长时间等待的弊端,提升用户体验。

本发明实施例的第一方面提供了一种缓存视频的方法,包括:

获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;

根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;

当接收到用户发送的用于将所述目标视频的播放位置定位至目标时刻的第一消息时,根据所述第一消息以及所述信息索引关系确定第二分片视频,所述目标时刻在所述第二分片视频的起始时刻和结束时刻之间;

判断所述第二分片视频中的缓存视频的结束时刻是否到达所述目标时刻;

若是,则从所述目标时刻播放所述第二分片视频。

在一种可能的设计中,在本发明实施例第一方面的第一种实现方式中,所述判断所述第二分片视频中的缓存视频的结束时刻是否到达所述目标时刻之前,所述方法包括:

确定所述第二分片视频的缓存进度;

根据所述缓存进度以及所述第二分片视频的起始时刻计算所述第二分片视频的缓存视频的结束时刻。

在一种可能的设计中,在本发明实施例第一方面的第二种实现方式中,所述确定所述第二分片视频的缓存进度之前,所述方法还包括:

将所述第二分片视频的缓存优先级设置为最高。

在一种可能的设计中,在本发明实施例第一方面的第三种实现方式中,所述从所述目标时刻播放所述第二分片视频之后,所述方法还包括:

判断所述第二分片视频是否为所述目标视频的最后一个分片视频;

若是,则当所述第二分片视频播放完毕时,停止播放所述目标视频。

本发明实施例的第二方面提供了一种播放设备,包括:

获取单元,用于获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;

索引单元,用于根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;

第一确定单元,用于当接收到用户发送的用于将所述目标视频的播放位置定位至目标时刻的第一消息时,根据所述第一消息以及所述信息索引关系确定第二分片视频,所述目标时刻在所述第二分片视频的起始时刻和结束时刻之间;

第一判断单元,用于判断所述第二分片视频中的缓存视频的结束时刻是否到达所述目标时刻;

播放单元,用于当所述第二分片视频中的缓存视频的结束时刻到达所述目标时刻时,从所述目标时刻播放所述第二分片视频。

在一种可能的设计中,在本发明实施例第二方面的第一种实现方式中,所述播放设备还包括:

第二确定单元,用于确定所述第二分片视频的缓存进度;

计算单元,用于根据所述缓存进度以及所述第二分片视频的起始时刻计算所述第二分片视频的缓存视频的结束时刻。

在一种可能的设计中,在本发明实施例第二方面的第二种实现方式中,所述播放设备还包括:

设置单元,用于将所述第二分片视频的缓存优先级设置为最高。

在一种可能的设计中,在本发明实施例第二方面的第三种实现方式中,所述判断单元,还用于判断所述第二分片视频是否为所述目标视频的最后一个分片视频;

所述播放单元,还用于当所述第二分片视频为所述目标视频的最后一个分片视频,则当所述第二分片视频播放完毕时,停止播放所述目标视频。

本发明第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述任意一项所述的缓存视频的方法的步骤。

本发明第四方面提供了一种计算机可读存储介质,其上存储有计算机管理类程序,其特征在于:所述计算机管理类程序被处理器执行时实现如上述任意一项所述的缓存视频的方法的步骤。

从以上技术方案可以看出,本发明实施例具有以下优点,本发明实施例中,当目标视频为在线的点播视频时,获取目标视频的索引文件,并建立组成该目标视频的多个分片视频的信息索引关系,当用户对目标视频进行时间定为时,确定时间定位所处的分片视频,并当该分片视频中的缓存视频的结束时刻到达目标时刻时,从目标时刻开始播放该分片视频,因为无需等待缓存完整个分片视频之后才进行播放,而是缓存至目标时刻时就进行播放,因此相对于现有技术来说,可以解决用户在播放点播视频进行时间定位时,长时间等待的弊端,提升用户体验。

附图说明

图1为本发明实施例提供的一种可能的缓存视频的方法的流程示意图;

图2为本发明实施例提供的一种可能的播放设备的实施例示意图;

图3为本发明实施例提供的一种可能的播放设备的硬件结构示意图;

图4为本发明实施例提供的一种可能的电子设备的实施例示意图;

图5为本发明实施例提供的一种可能的计算机可读存储介质的实施例示意图。

具体实施方式

本发明实施例提供了一种缓存视频的方法和播放设备,用于解决用户在播放点播视频进行时间定位时,长时间等待的弊端,提升用户体验。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

需要说明的是,本发明实施例可应用于播放设备如视频网站客户端的mediadecoder音视频解码模块中,该mediadecoder音视频解码模块可以解码直播视频和点播视频。当mediadecoder音视频解码模块接收到一个字符串类型的视频地址时,若该地址为有效地址,那mediadecoder音视频解码模块会对该视频地址对应的视频进行解码,其中,该视频地址可以为网络地址,也可以是本地文件路径,具体此处不做限定。然而,由于直播视频和点播视频的视频流缓存机制不相同,因此在对视频进行解码之前,需判断该视频地址对应的视频是点播视频还是直播视频。只有当目标视频为点播视频时,才执行后续的操作。

故,播放设备在接收到目标视频的地址后,根据该目标视频的地址确定目标视频为在线的点播视频。具体的确定方式可以包括以下步骤:

步骤1a:通过mediadecoder音视频解码模块提供的open方法,调用ffmpeg的avformat_open_input函数,打开目标视频的地址,并获取一个类型为avformatcontext的结构。如果获取成功,则执行步骤1b;

步骤1b:调用fopen函数,将目标视频的地址输入该fopen函数中,获得fopen函数的返回值。若该返回值为0,则表示该目标视频为在线视频;若该返回值不为0,则表示该目标视频为一个本地文件。当确定该目标视频为在线视频后,再执行步骤1c;

步骤1c:当目标视频的地址满足预置条件时,确定该目标视频为在线的点播视频。具体地,判断步骤1a中获取到的avformatcontext结构中的iformat成员的name字段是否等于“hls,applehttp”,如果等于则说明目标视频是一个在线的点播视频流,即本发明实施例后续需要处理的点播视频;如果不等于则说明该目标视频是一个在线的直播视频流,在本发明实施例中不做处理。

请参阅图1,图1为本发明实施例提供的一种可能的缓存视频的方法的实施例示意图,该缓存视频的方法可以基于音视频解码库ffmpeg,所谓ffmpeg,可理解为一种用于记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。包括:

101、获取目标视频的索引文件;

在本发明实施例中,可以获取目标视频的索引文件,其中,该索引文件按播放顺序包括组成目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,且该目标视频为在线的点播视频。具体的,该目标视频可以为基于超文本传输协议(hypertexttransferprotocol,http)实时流媒体(httplivestreaming,hls)协议的hls视频流。其中,所谓hls协议,为苹果公司(appleinc)实现的一种流媒体传输协议,可实现流媒体的直播和点播;hls视频流的特点就是将一个完整的视频,分为一个playlist.m3u8的播放索引文件,以及n个分片的传送流(transportstream,ts)小视频文件,且每个ts小视频文件是这个完整视频的一部分,即n个ts小视频组成了该完整的视频。需要说明的是,在playlist.m3u8播放索引文件中,按播放顺序包含了所有ts分片视频的网络地址,以及每个ts分片视频的播放时长。因此,针对该playlist.m3u8播放索引文件,可以计算出该完整的视频的总时长。以及,在时刻定位时,通过给定的时间,定位到具体的ts分片视频。

因此,基于这样的认识,在确定目标视频为在线的点播视频后,获取该目标视频的索引文件,其中该索引文件按照播放顺序包括了组成该目标视频的多个分片视频的网络地址和对应于每个分片视频的播放时长。具体获取该目标视频的索引文件的方法可以包括以下步骤:

步骤2a:初始化hlsdemuxer类;

在mediadecoder音视频解码模块中,用hlsdemuxer类,来处理在线的点播视频流。该hlsdemuxer类的入口函数也是open函数,将该目标视频的地址传递给hlsdemuxer的open方法。

步骤2b:创建缓存文件夹;

在调用hlsdemuxer类的open方法时,第二个参数为保存下载文件的文件夹路径。根据该文件夹路径,调用boost开源库的boost::filesystem::create_directory方法,创建缓存文件夹。后续步骤中下载的目标视频的索引文件以及所有的分片视频,都将保存在该缓存文件夹里面。

步骤2c:创建工作线程;

创建一个工作线程,在该工作线程中,处理所有跟下载相关的任务。

步骤2d:下载目标视频的索引文件;

调用相关的http下载方法,将open方法中的地址,即目标视频的索引文件的下载地址所代表的索引文件下载到缓存文件夹中。

步骤2e:解析目标视频的索引文件;

将目标视频的索引文件下载到缓存文件夹后,对该索引文件的内容进行解析,获取该目标视频的总播放时长,以及所有的分片视频。并且在hlsdemuxer类中有一个m_tsfiles的字典成员,该字典成员是以分片视频的起始时间为键,以一个tsfilecontext的结构为值的键值对结构。其中,tsfilecontext结构如下:

其中,url成员表示该分片视频的下载地址;

status成员表示该分片视频的下载状态,其中tsfilestatus的定义如下

其中,none表示空闲状态,downloading表示正在下载状态,downloaded表示下载已完成状态,paused表示下载被暂停状态。

index成员表示该分片视频的索引,从0开始,第一个分片视频的索引为0,第n个分片视频的索引为n-1;

starttime成员表示该分片视频的起始时间,以毫秒为单位;

duration成员表示该分片视频的播放持续时间,以毫秒为单位;

localfilename成员表示该分片视频存储在本地文件夹中的名称;

file成员用来将下载后的分片视频数据存储在本地文件中;

sizedownloaded成员表示该分片视频已经下载的数据大小;

totalsize成员表示该分片视频的文件总大小。

因此,通过上述步骤2a-2e实现了目标视频的索引文件的获取和解析。需要说明的是,实际应用中,还有其他获取和解析目标视频的索引文件的方式,具体此处不再一一赘述。

102、根据索引文件按播放顺序建立多个分片视频的信息索引关系;

当目标视频的索引文件下载完成后,根据该索引文件按播放顺序建立多个分片视频的信息索引关系,其中该信息索引关系包括第一分片视频的起始时间和第一分片视频的描述信息得到关联关系。需要说明的是,该第一分片视频的描述信息至少包括以下信息:第一分片视频的索引信息,第一分片视频的播放时长和第一分片视频的网络地址,其中,该第一分片视频为多个分片视频中的任一视频。

本实施例中,建立信息索引关系的方式可以为:当目标视频的索引文件下载完成后,按行读取该索引文件中的所有文本内容,如果所读取的文本行从“#extinf”字符串开始,那么该字符串后面所跟的就是该分片视频的播放时长(该时长是以秒位单位的),该文本行后面的一行就是该分片视频的下载地址。因此根据该目标视频的索引文件,获取播放总时长,以及所有ts分片文件,以建立信息索引关系的方式如下:

步骤3a:初始化变量;

初始化一个类型为32位整数的starttime变量,用来记录每个分片视频的起始播放时间,以及一个32位整数的tsfileindex变量,用来记录每个分片视频的索引,并将它们均初始化为0;

步骤3b:获取每一个分片视频;

读取目标视频的索引文件中的每一行内容,当该行内容以字符串“#extinf”开头时,则该字符串后面即为一个分片视频的播放时长,然后紧接着读取下一行的文件内容,获取该分片视频的下载地址。

创建一个tsfilecontext的结构,将tsfileindex变量赋值该结构的index成员,将,“#extinf”后面紧跟的播放时长乘以1000转换为毫秒单位后,保存到该tsfilecontext结构的duration字段中,将starttime变量保存到该tsfilecontext结构的starttime成员,将该行紧跟的下一行内容所代表的分片视频的下载地址,保存到该tsfilecontext结构的url成员中。然后将该starttime和tsfilecontext以键值对的方式,存储到m_tsfiles字典中,以建立该分片视频的信息索引关系。

上述过程完成后,将tsfileindex在原有基础上加1,将starttime变量在原有基础上加上该分片视频的播放时长,即tsfilecontext结构的duration值。

重复上述的步骤,获取下一个分片视频,直到读取完目标视频的索引文件中的内容为止。

在完成上述3a~3b中的步骤后,建立了多个分片视频的信息索引关系,且m_tsfiles成员中记录了该目标视频的所有分片视频,以及在starttime变量中,保存有该分片视频的总时长。

需要说明的是,本发明实施例对tsfilecontext结构体进行了进一步的该造,在上述所述的tsfilecontext的结构增加了下面的成员:

formatcontext,其类型为avformatcontext,通过调用avformat_open_input方法获取该成员,然后通过自定义io读取的方式,来读取该ts文件块中的视频包;

iocontext,其类型为aviocontext,通过将该成员设置到formatcontext成员的pb字段中,从而将ffmpeg中默认读取文件内容,以及进行时间定位的方法替换为本发明实施例中该进后的tsfilecontext结构中的readpacket方法以及seek方法,从而实现自定义io读取的功能;

fileread,其类型为file,通过该成员从本地磁盘上读取相应的文件内容。当ffmpeg中需要读取数据时,就会进入到该结构的readpacket函数中,而在该readpacket函数中,通过调用fread函数,从本地磁盘文件上读取相应的文件内容;

readoffset,其类型为32位的整型int,用来标记当前该ts文件的读取位置;

并且,在该进后的tsfilecontext结构中,有三个非常重要的方法,利用这三个方法,来实现自定义io的读取以及时间定位过程。它们分别是open方法(实现ts文件的打开)、readpacket方法(实现ts文件内容的读取)、seekpacket方法(实现将ts文件内容定位到指定的时间点),下面进行详细说明:

1、open方法的实现步骤如下:

步骤4a:创建iocontext;

调用avio_alloc_context方法,创建aviocontext,并赋值给iocontext成员,在调用该方法时,将readpacket方法以及seekpacket方法设置到该函数的相应参数中;

步骤4b:创建formatcontext;

调用avformat_alloc_context方法,创建一个avformatcontext并赋值给formatcontext成员;

步骤4c:设置自定义io;

将iocontext成员赋值给formatcontext成员中的pb字段,完成自定义io的设置;

步骤4d:打开ts文件;

调用avformat_open_input方法,将该ts文件打开,并将待返回值返回。

2、readpacket方法的实现步骤如下:

需要说明的是,当在上述的open方法中调用avformat_open_input以及hlsdemuxer类中的readpacket中调用av_read_frame时,都会进入到该结构的readpacket方法中。

该readpacket方法的原型如下:

intreadpacket(void*opaque,uint8_t*buffer,intbuffersize),其功能就是向参数buffer中,填充不大于buffersize的数据,在本发明实施例中,具体实现步骤如下:

步骤5a:设置读取位置;

将tsfilecontext中的readoffset(初始值为0)在原有基础上加上buffersize;

步骤5b:判断下载量是否够读取的位置;

判断tsfilecontext结构中的已下载量sizedownloaded是否大于等于readoffset,如果是,则进入到下面的步骤5c;如果不是则继续循环该步骤。

需要说明的是,tsfilecontext结构中的sizedownloaded是在工作线程中下载ts分片视频时设置的,当每次下载到n个字节的数据时,就将当前正在下载的tsfilecontext结构中的sizedownloaded成员加上n。

步骤5c:读取文件数据;

调用fread函数,将需要读取的buffer传入到该函数的第一个参数中,将buffersize传入到该函数的第三个参数中,并将tsfilecontext结构中的fileread文件读句柄传入到该函数的第四个参数中,并记录该函数的返回值为size,如果该size大于0,表示成功读取到size个字节的内容,否则表面该文件已经读取到文件尾部,最终将该size返回。

3、seekpacket方法的实现步骤如下:

当在hlsdemuxer的readseek函数中调用av_seek_frame函数中,就会进入到tsfilecontext结构的seekpacket方法中。该av_seek_frame函数的功能有两个,一个是告诉ffmpeg该ts文件块的总字节大小,二是将该结构中的fileread文件读句柄,定位到指定的偏移位置。该av_seek_frame函数具体如下:

int64_tseekpacket(int64_toffset,intflag)。

步骤6a:判断flag是否等于avseek_size,如果等于进入到下面的步骤6b,否则进入到步骤6c;

步骤6b:当flag等于avseek_size时,表示ffmpeg需要知道该文件的大小,此时直接将该结构中的代表文件总大小的totalsize成员返回即可;

步骤6c:当flag不等于avseek_size时,表示进行文件定位,首先将readoffset读取偏移量设置为offset,然后调用fseek函数,将文件读句柄fileread定位到offset偏移处。

103、当接收到用户发送的用于将目标视频的播放位置定位至目标时刻的第一消息时,根据第一消息以及信息索引关系确定第二分片视频。

本发明实施例中,当用户在观看该目标视频,且需要进行快进或者快退操作时,接收用户发送的第一消息,该第一消息用于向播放设备指示定位到目标时刻,可以根据第一消息以及信息索引关系确定第二分片视频。具体的,响应于该第一消息,根据目标时刻和信息索引关系确定第二分片视频。需要说明的是,当该目标时刻以秒为单位时,还需将该目标时刻转换为以毫秒为单位,来获得seektime,即播放设备根据该第一消息需要定位到seektime这个时刻。

再根据信息索引关系即在m_tsfiles字典中找到该seektime所位于的目标时间分片,例如,按照seektime大于等于分片视频的起始播放时间,小于分片视频的起始播放时间加速播放时长的规则,可以定位出该seektime位于哪个tsfilecontext结构中,实现了第二分片视频的确定。即该seektime在第二分片视频的起始时间和结束时间之间。

具体如下:当在mediadecoder模块中调用av_seek_frame函数,定位到该函数中指定的seektime(以微秒为单位)进行时间定位时,就会进入到hlsdemuxer类中的readseek函数中,在readseek函数中,获取到该目标时刻对应的tsfilecontext,然后调用该tsfilecontext的seekpacket函数,从而实现文件的定位。具体步骤如下:

步骤7a:时间单位转换;

由于在hlsdemuxer的seekpacket方法中,其第二个参数seektime是以微秒为单位的,而m_tsfiles中,是以毫秒为单位作为索引来存储所有tsfilecontext的,所以在查找tsfilecontext之前,需要首先将seektime除以1000,转为毫秒为单位。

步骤7b:获取tsfilecontext;

调用hlsdemuxer类中的findtsfilebytime方法,从m_tsfiles中,找到目标时刻miniseconds所在的tsfilecontext,在findtsfilebytime函数中,对于在m_tsfiles中的第i(大于等于0,小于ts文件块的总个数)个tsfilecontext,如果tsfilecontext的starttime小于等于miniseconds,并且tsfilecontext的starttime加上分片播放时长duration大于等于miniseconds,那么该tsfilecontext就是miniseconds所在的ts文件。此时把获取到的tsfilecontext赋值给m_currenttsfile,使得该tsfilecontext成为当前ts文件。当该ts文件下载完成时,进入到步骤7d。

步骤7d:调用waittsfile函数,等待该ts文件可以被打开,如果成功,进入到下面的步骤7e。

步骤7e:对ts文件块进行时间定位。

当步骤7a至步骤7d均成功后,调用av_seek_frame(此时就会进入到tsfilecontext的seekpacket函数中)函数,将tsfilecontext的formatcontext成员设置到该函数的第一个参数中,从而对当前的ts文件块(即第二分片视频)进行定位。

需要说明的是,由于第二分片视频有可能不是目标视频的头一个分片视频,且在具体的工作线程中缓存的顺序是按照ts文件的时间顺序依次下载的,所以在缓存第二分片视频进行时间定位时,需要将第二分片视频的缓存优先级设置为最高,(即需要将当前的tsfilecontext下载优先级设置为最高),从而保证优先下载第二分片视频。

104、确定第二分片视频的缓存进度。

当playlist.m3u8下载完成,并且解析出所有的ts分片视频后,在m_tsfiles成员中存储了所有的tsfilecontext数据,此时把m_tsfiles中的第一个tsfilecontext赋值给hlsdemuxer类中的m_currenttsfile成员(表示当前正在使用的ts文件块),所以在hlsdemuxer的open方法中,填充完m_tsfiles成员之后,可以开始播放视频。但此时需要等待第一块ts分片视频可以被打开,所以此时调用hlsdemuxer类的waittsfile等待一个指定的ts文件块(例如第二分片视频)可以被打开。waittsfile函数原型如下:

boolwaittsfile(tsfilecontext*tsfile);

可以看出,该函数接收一个tsfilecontext结构的参数,并且返回一个bool类型的值,当该参数中的tsfile打开成功时,该函数返回true,否则返回false。该函数的实现步骤如下:

8a:判断tsfilecontext结构中的formatcontext成员是否等于0,如果等于0,则进入到下面的步骤8b,否则说明该tsfilecontext已经被打开,无需在该函数中做相关处理。

8b:判断tsfilecontext结构中的sizedownloaded是否大于0,如果是,则执行步骤8c;否则继续循环执行步骤8b。

8c:调用tsfilecontext结构的open方法,判断该函数的返回值是否大于等于0,如果是,则说明该ts文件打开成功,waittsfile返回true;否则该ts文件打开失败,waittsfile返回false。其中在调用tsfilecontext的open方法时,该函数是个阻塞函数,需要等到当前ts文件下载到所需要的大小时,才返回。当前ts文件下载到所需要的大小时,ts分片视频即可以播放,此时,可以确定出该分片视频的下载进度,即该分片视频缓存了多少。

105、根据缓存进度以及第二分片视频的起始时刻计算第二分片视频的缓存视频的结束时刻。

当知道第二分片视频的缓存进度,即可以根据该缓存进度以及第二分片视频的起始时刻确定分片视频的结束时刻。

106、判断第二分片视频中的缓存视频的结束时刻是否到达目标时刻,若是,则执行步骤107。

当知道了第二分片视频的结束时刻,同时又知道了目标时刻,既可以判断所述第二分片视频中的缓存视频的结束时刻是否到达目标时刻,若是,则执行步骤107。

107、当第二分片视频中的缓存视频的结束时刻到达目标时刻,则从目标时刻播放第二分片视频。

需要说明的是,在从所述目标时刻播放所述第二分片视频之后,还可以判断所述第二分片视频是否为所述目标视频的最后一个分片视频,且当第二分片视频为目标视频的最后一个分片视频时,则当第二分片视频播放完毕时,停止播放目标视频。

需要说明的是,在打开本地的目标索引文件(即playlist.m3u8文件),并获取到一个avformatcontext结构后,将该avformatcontext结构中的iformat成员的read_seek成员替换为本发明实施例的hlsdemuxer中的readseek方法,并且iformat成员的read_packet成员替换为本发明实施例中的hlsdemuxer中的readpacket方法,当在mediadecoder模块中调用av_read_frame函数,获取一个avpacket包时,就会进入到hlsdemuxer类中的readpacket函数中,从当前的ts文件块中读取一个avpacket包,具体步骤如下:

9a:调用waittsfile函数,等待当前的ts文件块m_currenttsfile(初始值为第一个ts文件块)可以被打开,如果成功则进入到下面的步骤9b,否则退出该函数。

9b:调用av_read_frame函数,将m_currenttsfile中的formatcontext成员传递给该函数的第一个参数,并将readpacket函数中的唯一一个参数avpacket,传入到av_read_frame的第二个参数中(此时就会进入到上面所述的tsfilecontext的readpacket函数中,从ts文件上读取内容);判断该av_read_frame函数的返回值是否大于等于0,如果是,则表明成功读取到一个avpacket,退出该av_read_frame函数,否则进入到下面的步骤9c。

步骤9c:当av_read_frame函数的返回值小于0,此时表明当前的ts文件块已经读取到文件尾,需要读取下一个ts文件,所以从m_tsfiles字典中,获取当前ts文件块的下一个tsfileconext;如果获取成功则进入下面的步骤9d,否则进入步骤9e。

步骤9d:获取下一个tsfilecontext成功后,将该tsfilecontext重新赋值给m_currenttsfile,并重新进入到步骤9a至步骤9c。

步骤9e:获取下一个tsfilecontext失败,表示当前的ts文件块m_currenttsfile已经是最后一个ts分片,并且该ts分片已经达到文件尾,此时说明整个点播视频的文件数据已经读取完成,将hlsdemuxer成员中的m_eofreached变量设置为true。

具体如下:参阅上述描述的内容可知,调用waittsfile函数将第二分片视频打开进行播放,并定位至目标时刻,之后,调用avformat_open_input函数,将下载后的playlist.m3u8的文件路径传递到该函数的第二个参数中,并从第一个参数中获取一个avformatcontext的结构对象,以此类推,进而可以打开目标视频中的多个分片视频。

综上所述,本发明实施例中,当目标视频为在线的点播视频时,获取目标视频的索引文件,并建立组成该目标视频的多个分片视频的信息索引关系,当用户对目标视频进行时间定为时,确定时间定位所处的分片视频,并当该分片视频中的缓存视频的结束时刻到达目标时刻时,从目标时刻开始播放该分片视频,因为无需等待缓存完整个分片视频之后才进行播放,而是缓存至目标时刻时就进行播放,因此相对于现有技术来说,可以解决用户在播放点播视频进行时间定位时,长时间等待的弊端,提升用户体验。

上面对本发明实施例中缓存视频的方法进行了描述,下面对本发明实施例中的播放设备进行描述,请参阅图2,本发明实施例中播放设备的一个实施例,包括:

获取单元201,用于获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;

索引单元202,用于根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;

第一确定单元203,用于当接收到用户发送的用于将所述目标视频的播放位置定位至目标时刻的第一消息时,根据所述第一消息以及所述信息索引关系确定第二分片视频,所述目标时刻在所述第二分片视频的起始时刻和结束时刻之间;

判断单元204,用于判断所述第二分片视频中的缓存视频的结束时刻是否到达所述目标时刻;

播放单元205,用于当所述第二分片视频中的缓存视频的结束时刻到达所述目标时刻时,从所述目标时刻播放所述第二分片视频。

在一种可能的实现方式中,所述播放设备还包括:第二确定单元206,用于确定所述第二分片视频的缓存进度;

计算单元207,用于根据所述缓存进度以及所述第二分片视频的起始时刻计算所述第二分片视频的缓存视频的结束时刻。

在一种可能的实现方式中,所述播放设备还包括:

设置单元208,用于将所述第二分片视频的缓存优先级设置为最高。

在一种可能的实现方式中,所述判断单元,还用于判断所述第二分片视频是否为所述目标视频的最后一个分片视频;

所述播放单元,还用于当所述第二分片视频为所述目标视频的最后一个分片视频,则当所述第二分片视频播放完毕时,停止播放所述目标视频。

综上所述,本发明实施例中,当目标视频为在线的点播视频时,获取目标视频的索引文件,并建立组成该目标视频的多个分片视频的信息索引关系,当用户对目标视频进行时间定为时,确定时间定位所处的分片视频,并当该分片视频中的缓存视频的结束时刻到达目标时刻时,从目标时刻开始播放该分片视频,因为无需等待缓存完整个分片视频之后才进行播放,而是缓存至目标时刻时就进行播放,因此相对于现有技术来说,可以解决用户在播放点播视频进行时间定位时,长时间等待的弊端,提升用户体验。

上面图2从模块化功能实体的角度对本发明实施例中的播放设备进行了描述,下面从硬件处理的角度对本发明实施例中的播放设备进行详细描述,请参阅图3,本发明实施例中的播放设备300一个实施例,包括:

输入装置301、输出装置302、处理器303和存储器304(其中处理器303的数量可以一个或多个,图3中以一个处理器303为例)。在本发明的一些实施例中,输入装置301、输出装置302、处理器303和存储器304可通过总线或其它方式连接,其中,图3中以通过总线连接为例。

其中,通过调用存储器304存储的操作指令,处理器303,用于执行如下步骤:

获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;

根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;

当接收到用户发送的用于将所述目标视频的播放位置定位至目标时刻的第一消息时,根据所述第一消息以及所述信息索引关系确定第二分片视频,所述目标时刻在所述第二分片视频的起始时刻和结束时刻之间;

判断所述第二分片视频中的缓存视频的结束时刻是否到达所述目标时刻;

若是,则从所述目标时刻播放所述第二分片视频。

可选的,通过调用存储器304存储的操作指令,处理器303,还用于执行如下步骤:

确定所述第二分片视频的缓存进度;

根据所述缓存进度以及所述第二分片视频的起始时刻计算所述第二分片视频的缓存视频的结束时刻。

可选的,通过调用存储器304存储的操作指令,处理器303,还用于执行如下步骤:

将所述第二分片视频的缓存优先级设置为最高。

可选的,通过调用存储器304存储的操作指令,处理器303,还用于执行如下步骤:

判断所述第二分片视频是否为所述目标视频的最后一个分片视频;

若是,则当所述第二分片视频播放完毕时,停止播放所述目标视频。

请参阅图4,图4为本发明实施例提供的电子设备的实施例示意图。

如图4所示,本发明实施例提供了一种电子设备,包括存储器410、处理器420及存储在存储器420上并可在处理器420上运行的计算机程序411,处理器420执行计算机程序411时实现以下步骤:

获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;

根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;

当接收到用户发送的用于将所述目标视频的播放位置定位至目标时刻的第一消息时,根据所述第一消息以及所述信息索引关系确定第二分片视频,所述目标时刻在所述第二分片视频的起始时刻和结束时刻之间;

判断所述第二分片视频中的缓存视频的结束时刻是否到达所述目标时刻;

若是,则从所述目标时刻播放所述第二分片视频。

在具体实施过程中,处理器420执行计算机程序411时,可以实现图1对应的实施例中任一实施方式。

由于本实施例所介绍的电子设备为实施本发明实施例中一种播放设备所采用的设备,故而基于本发明实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本发明实施例中的方法不再详细介绍,只要本领域所属技术人员实施本发明实施例中的方法所采用的设备,都属于本发明所欲保护的范围。

请参阅图5,图5为本发明实施例提供的一种计算机可读存储介质的实施例示意图。

如图5所示,本实施例提供了一种计算机可读存储介质500,其上存储有计算机程序511,该计算机程序511被处理器执行时实现如下步骤:

获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;

根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;

当接收到用户发送的用于将所述目标视频的播放位置定位至目标时刻的第一消息时,根据所述第一消息以及所述信息索引关系确定第二分片视频,所述目标时刻在所述第二分片视频的起始时刻和结束时刻之间;

判断所述第二分片视频中的缓存视频的结束时刻是否到达所述目标时刻;

若是,则从所述目标时刻播放所述第二分片视频。

在具体实施过程中,该计算机程序511被处理器执行时可以实现图1对应的实施例中任一实施方式。

需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本发明实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,当计算机软件指令在处理设备上运行时,使得处理设备执行如图1对应实施例中的风电场数字化平台设计的方法中的流程。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修该,或者对其中部分技术特征进行等同替换;而这些修该或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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