CN108833968A - 一种缓存视频的方法以及相关设备 - Google Patents
一种缓存视频的方法以及相关设备 Download PDFInfo
- Publication number
- CN108833968A CN108833968A CN201810526289.9A CN201810526289A CN108833968A CN 108833968 A CN108833968 A CN 108833968A CN 201810526289 A CN201810526289 A CN 201810526289A CN 108833968 A CN108833968 A CN 108833968A
- Authority
- CN
- China
- Prior art keywords
- video
- fragment
- fragment video
- message
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/83—Generation or processing of protective or descriptive data associated with content; Content structuring
- H04N21/845—Structuring of content, e.g. decomposing content into time segments
- H04N21/8456—Structuring of content, e.g. decomposing content into time segments by decomposing the content in the time domain, e.g. in time segments
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/433—Content storage operation, e.g. storage operation in response to a pause request, caching operations
- H04N21/4331—Caching operations, e.g. of an advertisement for later insertion during playback
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/47—End-user applications
- H04N21/472—End-user interface for requesting content, additional data or services; End-user interface for interacting with content, e.g. for content reservation or setting reminders, for requesting event notification, for manipulating displayed content
- H04N21/47202—End-user interface for requesting content, additional data or services; End-user interface for interacting with content, e.g. for content reservation or setting reminders, for requesting event notification, for manipulating displayed content for requesting content on demand, e.g. video on demand
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/83—Generation or processing of protective or descriptive data associated with content; Content structuring
- H04N21/845—Structuring of content, e.g. decomposing content into time segments
- H04N21/8455—Structuring of content, e.g. decomposing content into time segments involving pointers to the content, e.g. pointers to the I-frames of the video stream
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
- Television Signal Processing For Recording (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例提供了一种缓存视频的方法和播放设备,解决用户不停对点播视频的进行时间定位时,由于时间定位对应的分片视频未缓存到可播放的下载量而产生播放器卡死的感觉,提高用户体验。本发明实施例方法包括:获取目标视频的索引文件;根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系;接收用户发送的第一消息,所述第一消息用于将所述目标视频的播放位置定位至第一目标时刻,所述第一目标时刻包含于第二分片视频;中断所述目标视频当前缓存的分片视频,并缓存所述第二分片视频。
Description
技术领域
本发明涉及多媒体技术领域,尤其涉及一种缓存视频的方法以及相关设备。
背景技术
在视频网站的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、获取目标视频的索引文件;
在本发明实施例中,可以获取目标视频的索引文件,其中,该索引文件按播放顺序包括组成目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,且该目标视频为在线的点播视频。具体的,该目标视频可以为基于超文本传输协议(hyper texttransfer protocol,HTTP)实时流媒体(HTTP live streaming,HLS)协议的HLS视频流。其中,所谓HLS协议,为苹果公司(Apple Inc)实现的一种流媒体传输协议,可实现流媒体的直播和点播;HLS视频流的特点就是将一个完整的视频,分为一个playlist.m3u8的播放索引文件,以及N个分片的传送流(transport stream,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方法的原型如下:
int readPacket(void*opaque,uint8_t*buffer,int bufferSize),其功能就是向参数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_t seekPacket(int64_t offset,int flag)。
步骤6a:判断flag是否等于AVSEEK_SIZE,如果等于进入到下面的步骤6b,否则进入到步骤6c;
步骤6b:当flag等于AVSEEK_SIZE时,表示FFMPEG需要知道该文件的大小,此时直接将该结构中的代表文件总大小的totalSize成员返回即可;
步骤6c:当flag不等于AVSEEK_SIZE时,表示进行文件定位,首先将readOffset读取偏移量设置为offset,然后调用fseek函数,将文件读句柄fileRead定位到offset偏移处。
需要说明的是,当playlist.m3u8下载完成,并且解析出所有的TS分片视频后,在m_tsFiles成员中存储了所有的TsFileContext数据,此时把m_tsFiles中的第一个TsFileContext赋值给HlsDemuxer类中的m_currentTsFile成员(表示当前正在使用的TS文件块),所以在HlsDemuxer的Open方法中,填充完m_tsFiles成员之后,可以开始播放视频。但此时需要等待第一块TS分片视频可以被打开,所以此时调用HlsDemuxer类的waitTsFile等待一个指定的TS文件块(例如第二分片视频)可以被打开。waitTsFile函数原型如下:
bool waitTsFile(TsFileContext*tsFile);
可以看出,该函数接收一个TsFileContext结构的参数,并且返回一个bool类型的值,当该参数中的tsFile打开成功时,该函数返回true,否则返回false。该函数的实现步骤如下:
步骤7a:判断TsFileContext结构中的formatContext成员是否等于0,如果等于0,则进入到下面的步骤7b,否则说明该TsFileContext已经被打开,无需在该函数中做相关处理。
步骤7b:判断TsFileContext结构中的sizeDownloaded是否大于0,如果是,则执行步骤7c;否则继续循环执行步骤7b。
步骤7c:调用TsFileContext结构的open方法,判断该函数的返回值是否大于等于0,如果是,则说明该TS文件打开成功,waitTsFile返回true;否则该TS文件打开失败,waitTsFile返回false。其中在调用TsFileContext的open方法时,该函数是个阻塞函数,需要等到当前TS文件下载到所需要的大小时,才返回。当前TS文件下载到所需要的大小时,TS分片视频即可以播放,此时,可以确定出该分片视频的下载进度,即该分片视频缓存了多少。
需要说明的是,在打开本地的目标索引文件(即playlist.m3u8文件),并获取到一个AVFormatContext结构后,将该AVFormatContext结构中的iformat成员的read_seek成员替换为本发明实施例的HlsDemuxer中的readSeek方法,并且iformat成员的read_packet成员替换为本发明实施例中的HlsDemuxer中的readPacket方法,当在MediaDecoder模块中调用av_read_frame函数,获取一个AVPacket包时,就会进入到HlsDemuxer类中的readPacket函数中,从当前的TS文件块中读取一个AVPacket包,具体步骤如下:
步骤8a:调用waitTsFile函数,等待当前的TS文件块m_currentTsFile(初始值为第一个TS文件块)可以被打开,如果成功则进入到下面的步骤8b,否则退出该函数。
步骤8b:调用av_read_frame函数,将m_currentTsFile中的formatContext成员传递给该函数的第一个参数,并将readPacket函数中的唯一一个参数AVPacket,传入到av_read_frame的第二个参数中(此时就会进入到上面所述的TsFileContext的readPacket函数中,从TS文件上读取内容);判断该av_read_frame函数的返回值是否大于等于0,如果是,则表明成功读取到一个AVPacket,退出该av_read_frame函数,否则进入到下面的步骤8c。
步骤8c:当av_read_frame函数的返回值小于0,此时表明当前的TS文件块已经读取到文件尾,需要读取下一个TS文件,所以从m_tsFiles字典中,获取当前TS文件块的下一个TsFileConext;如果获取成功则进入下面的步骤8d,否则进入步骤8e。
步骤8d:获取下一个TsFileContext成功后,将该TsFileContext重新赋值给m_currentTsFile,并重新进入到步骤9a至步骤9c。
步骤8e:获取下一个TsFileContext失败,表示当前的TS文件块m_currentTsFile已经是最后一个TS分片,并且该TS分片已经达到文件尾,此时说明整个点播视频的文件数据已经读取完成,将HlsDemuxer成员中的m_eofReached变量设置为true。
具体如下:参阅上述描述的内容可知,调用waitTsFile函数将第二分片视频打开进行播放,并定位至目标时刻,之后,调用avformat_open_input函数,将下载后的playlist.m3u8的文件路径传递到该函数的第二个参数中,并从第一个参数中获取一个AVFormatContext的结构对象,以此类推,进而可以打开目标视频中的多个分片视频。
103、接收用户发送的第一消息。
本实施例中,可以接收用户发送的第一消息,该第一消息用于将目标视频的播放位置定位至第一目标时刻,第一目标时刻包含于第二分片视频,具体的,当接收到第一消息时,由于该第一消息是将目标视频的播放位置定位至第一目标时刻,此刻可以响应于该第一消息,根据第一目标时刻和信息索引关系确定第二分片视频。
需要说明的是,当该第一目标时刻以秒为单位时,还需将该目标时刻转换为以毫秒为单位,来获得seekTime,即播放设备根据该第一消息需要定位到seekTime这个时刻。
再根据信息索引关系即在m_tsFiles字典中找到该seekTime所位于的目标时间分片,例如,按照seekTime大于等于分片视频的起始播放时间,小于分片视频的起始播放时间加速播放时长的规则,可以定位出该seekTime位于哪个TsFileContext结构中,实现了第二分片视频的确定。即该seekTime在第二分片视频的起始时间和结束时间之间。
需要说明的是,当在MediaDecoder模块中调用av_seek_frame函数,定位到该函数中指定的seekTime(以微秒为单位)进行时间定位时,就会进入到HlsDemuxer类中的readSeek函数中,在readSeek函数中,获取到该目标时刻对应的TsFileContext,然后调用该TsFileContext的seekPacket函数,从而实现文件的定位。具体步骤如下:
步骤9a:时间单位转换;
由于在HlsDemuxer的seekPacket方法中,其第二个参数seekTime是以微秒为单位的,而m_tsFiles中,是以毫秒为单位作为索引来存储所有TsFileContext的,所以在查找TsFileContext之前,需要首先将seekTime除以1000,转为毫秒为单位。
步骤9b:获取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文件下载完成时,进入到步骤9d。
步骤9d:调用waitTsFile函数,等待该TS文件可以被打开,如果成功,进入到下面的步骤9e。
步骤9e:对TS文件块进行时间定位。
当步骤9a至步骤9d均成功后,调用av_seek_frame(此时就会进入到TSFileContext的seekPacket函数中)函数,将TsFileContext的FormatContext成员设置到该函数的第一个参数中,从而对当前的TS文件块(即第二分片视频)进行定位。
需要说明的是,由于第二分片视频有可能不是目标视频的头一个分片视频,且在具体的工作线程中缓存的顺序是按照TS文件的时间顺序依次下载的,所以在缓存第二分片视频进行时间定位时,需要将第二分片视频的缓存优先级设置为最高,(即需要将当前的TsFileContext下载优先级设置为最高),从而保证优先下载第二分片视频。
104、中断目标视频当前缓存的分片视频,并缓存第二分片视频。
本实施例中,用户在对目标视频进行时间定位之前,可能会有其他的分片视频正在进行缓存,此时,可以中断目标视频当前缓存的所有分片视频,转而缓存当前的时间定位对应的第二分片视频。
需要说明的是,为了满足这一中断机制,可以在waitTsFile以及TsFileContext的readPacket函数中加入本发明实施例中的可中断方法,从而当网速不够,引起数据等待时,当接收到用户的时间定位消息时,可以立即中断当前的等待操作,从而快速响应用户的时间定位操作。
首先,在上述所说的HlsDemuxer类中增加两个成员变量,一个是bool类型的m_isSeeking(初始值为false),用来记录当前是否正处于时间定位状态,一个是int类型的m_seekingCount(初始值为0),用来记录当前时间定位的次数。
canInterrupt实现的核心思路就是,若当前处于时间定位状态,如果m_seekingCount大于1,则说明在当前的时间定位操作之前还有时间定位操作,且之前的时间定位操作还未完成,此时又来了一个时间定位操作,那么立即中断之前的时间定位操作;如果当前不处于时间定位状态,也就是处于普通的读取TS文件数据状态,如果m_seekingCount大于0,则说明当前时刻发生了时间定位操作,那么立即中断当前的等待操作,所以m_isSeeking以及m_seekingCount两个变量值的设定显得尤为重要,这两个变量,在下面的三种情况中会发生值的切换:
当执行到HlsDemuxer的readSeek函数中时,将m_isSeeking设置为true,表示当前处于时间定位状态,并且将m_seekingCount值在原有基础上加1;
当HlsDemuxer的readSeek函数返回后,将m_seekingCount在原有值基础上减1;
当执行到HlsDemuxer的readPacket函数中时,将m_isSeeking设置为false,表示当前处于TS文件的读取状态。
还需要说明的是,该中断方法是在HlsDemuxer类中增加了一个中断判断canInterrupt的方法,该中断判断canInterrupt方法的原型如下:
bool canInterrupt();
可以看出该中断判断方法不接收任何参数,当该中断判断方法的返回值为true时,表示当前的等待操作可以被中断,当该中断判断方法的返回值为false时,表示不能中断。
所以有了这个canInterrupt中断判断方法,本发明实施例中上述所说的waitTsFile,以及TsFileContext中的readPacket方法的实现在原有基础上进行如下的该动:
中断waitTsFile包括:
步骤b1):判断TsFileContext结构中的sizeDownloaded是否大于0,如果是,进入下面的步骤c);否则调用canInterrupt方法,并判断该方法的返回值是否为true;如果为true,则退出该方法;否则继续循环该步骤
中断TsFileContext中的readPacket;
步骤b2):判断该TsFileContext结构中的已下载量sizeDownloaded是否大于等于readOffset,如果是,则进入到下面的步骤c);如果不是则调用HlsDemuxer类中的canInterrupt方法,并判断该方法的返回值是否为true;如果为true,则退出该中断方法;否则继续循环步骤b2。
所以根据m_isSeeking值、m_seekingCount值以及上述中断判断方法的情况,canInterrupt函数的实现过程如下:
步骤10a:判断m_isSeeking是否为true,若m_isSeeking为true,则执行步骤10b,若m_isSeeking为false,则执行步骤10c;
步骤10b:当m_isSeeking为true表示此时目标视频处于时间定位状态,此时可以继续判断m_seekingCount的值是否大于1,若m_seekingCount的值大于1,则canInterrupt返回true,若m_seekingCount的值不大于1,则canInterrupt返回false(也就是说,当目标视频当前时刻处于时间定位状态时,且第二个时间定位操作发起时,如果前面的操作没有完成,则中断前面的操作);
步骤10c:若m_isSeeking为true,则说明目标视频此时处于TS文件内容的读取状态,此时判断m_seekingCount的值是否大于0,如果m_seekingCount的值大于0,则canInterrupt返回true,如果m_seekingCount的值不大于0,则返回false(也就是当正在读取文件内容时,如果没有发生时间定位操作,那么继续等待当前的操作完成;否则立即中断当前的读取文件操作)。
需要说明的是,当第二分片视频缓存之第一目标时刻,且未接收到用户的第二消息时,从第一目标时刻播放第二分片视频。保证了用户观看目标视频的流畅度。
105、当第二分片视频未缓存至所述第一目标时刻,且接收到用户的第二消息时,中断缓存第二分片视频,并缓存第三分片视频。
本实施例中,当第二分片视频未缓存至所述第一目标时刻,且接收到用户的第二消息时,第二消息用于将目标视频的播放位置定位至第二目标时刻,第二目标时刻包含于第三分片视频,第三分片视频与第二分片视频为不同的分片视频,也就是说,在缓存第二分片视频的过程中,由于网络卡顿或者一些其他的原因,第二分片视频未缓存之第一目标时刻,用户进行了第二次的时间定位操作(即接收到用户的第二消息),此时,可以中断缓存第二分片视频,进而缓存第三分片视频。
需要说明的是,当第二分片视频未缓存至第一目标时刻,且接收到用户的第二消息时可以将第三分片视频的缓存优先级设置为最高,当第三分片视频缓存完毕,且第三分片视频未播放完毕时,从第二分片视频的缓存中断处缓存第二分片视频。由于是点播视频,且不确定用户的观看习惯,不排除用户喜欢先看后面的内容,转回头看前面的内容,此时,可以先将当前定位时刻对应的第三分片视频缓存完毕,并执行一个判断,此判断对应的是,确定当前定位时刻对应的第三分片视频是否播放完毕,当第三分片视频未播放完毕,此时可以缓存之前暂停的第二分片视频,同时实施监控第三分片视频的播放进度,若第三分片视频播放进度距离结束为预设时长,且未接收用户的时间定位操作,且第二分片视频未缓存完毕,此时,可以中断缓存第二分片视频,并开始缓存第三分片视频之后的分片视频,保证用户观看目标视频的流畅度,重复执行上述操作,直至目标视频的所有分片视频缓存完毕,这样,即充分利用网络资源,同时又给用户很好的体验。
综上所述,本发明实施例中,当用户在观看目标视频时,该目标视频为点播视频,当接收用户发送的第一消息,该第一消息用于将目标视频的播放位置定位至第一目标时刻,第一目标时刻包含于第二分片视频,则直接中断缓存目标视频当前缓存的分片视频,并缓存第二分片视频。由于是在接收到用户当前时刻的时间定位操作时,就中断缓存当前正在缓存的视频,因此可以解决用户不停对点播视频的进行时间定位操作时,由于时间定位对应的分片视频未缓存到可播放的下载量而产生播放器卡死的感觉,进而提高用户体验。
上面对本发明实施例中缓存视频的方法进行了描述,下面对本发明实施例中的播放设备进行描述,请参阅图2,本发明实施例中播放设备的一个实施例,包括:
获取单元201,用于获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;
索引单元202,用于根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;
接收单元203,用于接收用户发送的第一消息,所述第一消息用于将所述目标视频的播放位置定位至第一目标时刻,所述第一目标时刻包含于第二分片视频;
中断单元204,用于中断所述目标视频当前缓存的分片视频,并缓存所述第二分片视频。
在一种可能的实现方式中,所述中断单元204还用于:
当所述第二分片视频未缓存至所述第一目标时刻,且接收到所述用户的第二消息时,所述第二消息用于将所述目标视频的播放位置定位至第二目标时刻,所述第二目标时刻包含于第三分片视频,所述第三分片视频与所述第二分片视频为不同的分片视频,中断缓存所述第二分片视频,并缓存所述第三分片视频。
在一种可能的实现方式中,所述播放设备还包括:
设置单元205,用于当所述第二分片视频未缓存至所述第一目标时刻,且接收到所述用户的第二消息时,将所述第三分片视频的缓存优先级设置为最高;
所述中断单元204,还用于当所述第三分片视频缓存完毕,且所述第三分片视频未播放完毕时,从所述第二分片视频的缓存中断处缓存所述第二分片视频。
在一种可能的实现方式中,所述播放设备还包括:
播放单元207,用于当所述第二分片视频缓存至所述第一目标时刻,且未接收到所述用户的第二消息时,从所述第一目标时刻播放所述第二分片视频。
综上所述,本发明实施例中,当用户在观看目标视频时,该目标视频为点播视频,当接收用户发送的第一消息,该第一消息用于将目标视频的播放位置定位至第一目标时刻,第一目标时刻包含于第二分片视频,则直接中断缓存目标视频当前缓存的分片视频,并缓存第二分片视频。由于是在接收到用户当前时刻的时间定位操作时,就中断缓存当前正在缓存的视频,因此可以解决用户不停对点播视频的进行时间定位操作时,由于时间定位对应的分片视频未缓存到可播放的下载量而产生播放器卡死的感觉,进而提高用户体验。
上面图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对应实施例中的风电场数字化平台设计的方法中的流程。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修该,或者对其中部分技术特征进行等同替换;而这些修该或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种缓存视频的方法,其特征在于,包括:
获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;
根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;
接收用户发送的第一消息,所述第一消息用于将所述目标视频的播放位置定位至第一目标时刻,所述第一目标时刻包含于第二分片视频;
中断所述目标视频当前缓存的分片视频,并缓存所述第二分片视频。
2.根据权利要求1所述的方法,其特征在于,所述中断缓存所述目标视频当前缓存的分片视频,并缓存所述第二分片视频之后,所述方法还包括:
当所述第二分片视频未缓存至所述第一目标时刻,且接收到所述用户的第二消息时,所述第二消息用于将所述目标视频的播放位置定位至第二目标时刻,所述第二目标时刻包含于第三分片视频,所述第三分片视频与所述第二分片视频为不同的分片视频,中断缓存所述第二分片视频,并缓存所述第三分片视频。
3.根据权利要求2所述的方法,其特征在于,当所述第二分片视频未缓存至所述第一目标时刻,且接收到所述用户的第二消息时,所述方法还包括:
将所述第三分片视频的缓存优先级设置为最高;
当所述第三分片视频缓存完毕,且所述第三分片视频未播放完毕时,从所述第二分片视频的缓存中断处缓存所述第二分片视频。
4.根据权利要求2所述的方法,其特征在于,当所述第二分片视频缓存至所述第一目标时刻,且未接收到所述用户的第二消息时,所述方法还包括:
从所述第一目标时刻播放所述第二分片视频。
5.一种播放设置,其特征在于,包括:
获取单元,用于获取目标视频的索引文件,所述索引文件按播放顺序包括组成所述目标视频的多个分片视频的网络地址和对应于各分片视频的播放时长,所述目标视频为在线的点播视频;
索引单元,用于根据所述索引文件按所述播放顺序建立所述多个分片视频的信息索引关系,所述信息索引关系包括第一分片视频的起始时间和所述第一分片视频的描述信息的关联关系,所述第一分片视频的描述信息至少包括以下信息:所述第一分片视频的索引信息,所述第一分片视频的播放时长和所述第一分片视频的网络地址,所述第一分片视频为所述多个分片视频中的任一视频;
接收单元,用于接收用户发送的第一消息,所述第一消息用于将所述目标视频的播放位置定位至第一目标时刻,所述第一目标时刻包含于第二分片视频;
中断单元,用于中断所述目标视频当前缓存的分片视频,并缓存所述第二分片视频。
6.根据权利要求5所述的播放装置,其特征在于,所述中断单元还用于:
当所述第二分片视频未缓存至所述第一目标时刻,且接收到所述用户的第二消息时,所述第二消息用于将所述目标视频的播放位置定位至第二目标时刻,所述第二目标时刻包含于第三分片视频,所述第三分片视频与所述第二分片视频为不同的分片视频,中断缓存所述第二分片视频,并缓存所述第三分片视频。
7.根据权利要求6所述的播放装置,其特征在于,所述播放装置还包括:
设置单元,用于当所述第二分片视频未缓存至所述第一目标时刻,且接收到所述用户的第二消息时,将所述第三分片视频的缓存优先级设置为最高;
所述中断单元,还用于当所述第三分片视频缓存完毕,且所述第三分片视频未播放完毕时,从所述第二分片视频的缓存中断处缓存所述第二分片视频。
8.根据权利要求6所述的播放装置,其特征在于,所述播放装置还包括:
播放单元,用于当所述第二分片视频缓存至所述第一目标时刻,且未接收到所述用户的第二消息时,从所述第一目标时刻播放所述第二分片视频。
9.一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如权利要求1至4中任意一项所述的缓存视频的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机管理类程序,其特征在于:所述计算机管理类程序被处理器执行时实现如权利要求1至4中任意一项所述的缓存视频的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810526289.9A CN108833968B (zh) | 2018-05-29 | 2018-05-29 | 一种缓存视频的方法以及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810526289.9A CN108833968B (zh) | 2018-05-29 | 2018-05-29 | 一种缓存视频的方法以及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108833968A true CN108833968A (zh) | 2018-11-16 |
CN108833968B CN108833968B (zh) | 2021-09-07 |
Family
ID=64146518
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810526289.9A Active CN108833968B (zh) | 2018-05-29 | 2018-05-29 | 一种缓存视频的方法以及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108833968B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110620951A (zh) * | 2019-10-10 | 2019-12-27 | 东软集团股份有限公司 | 一种视频缓存的方法、装置、存储介质及处理器 |
CN111385315A (zh) * | 2018-12-27 | 2020-07-07 | 阿里巴巴集团控股有限公司 | 点对点资源下载方法和装置 |
CN112040302A (zh) * | 2019-06-03 | 2020-12-04 | 阿里巴巴集团控股有限公司 | 视频缓冲方法、装置、电子设备及计算机可读存储介质 |
CN115514684A (zh) * | 2021-06-07 | 2022-12-23 | 中国移动通信集团北京有限公司 | 音频卡顿评估的方法及装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105025343A (zh) * | 2015-07-21 | 2015-11-04 | 无锡天脉聚源传媒科技有限公司 | 一种ts视频的缓存方法及装置 |
US20150350714A1 (en) * | 2014-05-29 | 2015-12-03 | Apple Inc. | Playback of video on demand |
CN105208463A (zh) * | 2015-08-31 | 2015-12-30 | 北京暴风科技股份有限公司 | 针对m3u8文件进行帧确定的方法和系统 |
CN105516746A (zh) * | 2014-10-14 | 2016-04-20 | 鸿富锦精密工业(深圳)有限公司 | 视频预下载系统及其方法 |
CN105681874A (zh) * | 2015-06-02 | 2016-06-15 | 深圳Tcl数字技术有限公司 | 网络视频在线播放的方法和装置 |
CN105898535A (zh) * | 2015-12-30 | 2016-08-24 | 乐视致新电子科技(天津)有限公司 | 提高起播速度的方法、视频播放器及电子装置 |
CN106231343A (zh) * | 2016-10-11 | 2016-12-14 | 青岛海信电器股份有限公司 | 视频播放处理方法、装置及电视 |
CN106550263A (zh) * | 2015-09-16 | 2017-03-29 | 深圳市腾讯计算机系统有限公司 | 媒体播放方法及装置 |
WO2017054552A1 (zh) * | 2015-09-30 | 2017-04-06 | 华为技术有限公司 | 终端、缓存服务器及获取视频分片的方法及装置 |
-
2018
- 2018-05-29 CN CN201810526289.9A patent/CN108833968B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150350714A1 (en) * | 2014-05-29 | 2015-12-03 | Apple Inc. | Playback of video on demand |
CN105516746A (zh) * | 2014-10-14 | 2016-04-20 | 鸿富锦精密工业(深圳)有限公司 | 视频预下载系统及其方法 |
CN105681874A (zh) * | 2015-06-02 | 2016-06-15 | 深圳Tcl数字技术有限公司 | 网络视频在线播放的方法和装置 |
CN105025343A (zh) * | 2015-07-21 | 2015-11-04 | 无锡天脉聚源传媒科技有限公司 | 一种ts视频的缓存方法及装置 |
CN105208463A (zh) * | 2015-08-31 | 2015-12-30 | 北京暴风科技股份有限公司 | 针对m3u8文件进行帧确定的方法和系统 |
CN106550263A (zh) * | 2015-09-16 | 2017-03-29 | 深圳市腾讯计算机系统有限公司 | 媒体播放方法及装置 |
WO2017054552A1 (zh) * | 2015-09-30 | 2017-04-06 | 华为技术有限公司 | 终端、缓存服务器及获取视频分片的方法及装置 |
CN105898535A (zh) * | 2015-12-30 | 2016-08-24 | 乐视致新电子科技(天津)有限公司 | 提高起播速度的方法、视频播放器及电子装置 |
CN106231343A (zh) * | 2016-10-11 | 2016-12-14 | 青岛海信电器股份有限公司 | 视频播放处理方法、装置及电视 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111385315A (zh) * | 2018-12-27 | 2020-07-07 | 阿里巴巴集团控股有限公司 | 点对点资源下载方法和装置 |
CN112040302A (zh) * | 2019-06-03 | 2020-12-04 | 阿里巴巴集团控股有限公司 | 视频缓冲方法、装置、电子设备及计算机可读存储介质 |
CN110620951A (zh) * | 2019-10-10 | 2019-12-27 | 东软集团股份有限公司 | 一种视频缓存的方法、装置、存储介质及处理器 |
CN110620951B (zh) * | 2019-10-10 | 2022-02-18 | 东软集团股份有限公司 | 一种视频缓存的方法、装置、存储介质及处理器 |
CN115514684A (zh) * | 2021-06-07 | 2022-12-23 | 中国移动通信集团北京有限公司 | 音频卡顿评估的方法及装置 |
CN115514684B (zh) * | 2021-06-07 | 2023-11-10 | 中国移动通信集团北京有限公司 | 音频卡顿评估的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108833968B (zh) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108833968A (zh) | 一种缓存视频的方法以及相关设备 | |
JP4818562B2 (ja) | 漸進的により高品質のバージョンのオーディオおよび/またはビデオプログラムを得るための方法およびコンピュータネットワーク | |
CN102439578B (zh) | 动态可变速率媒体传送系统 | |
US9021537B2 (en) | Pre-buffering audio streams | |
CN103327415B (zh) | 一种加速网络视频下载的方法和装置 | |
EP2467956B1 (en) | Encoding video streams for adaptive video streaming | |
US20140297757A1 (en) | System and method for coordinating display of shared video data | |
CN107547940A (zh) | 视频播放处理方法、设备及计算机可读存储介质 | |
CN104378647B (zh) | 一种基于数字电视的智能空间存储系统及方法 | |
CN111277869B (zh) | 视频播放方法、装置、设备和存储介质 | |
WO2017096830A1 (zh) | 用于cdn平台的内容分发方法及调度代理服务器 | |
CN100393068C (zh) | 一种缓存流媒体数据的方法 | |
CN102845072A (zh) | 改进的媒体内容回放质量 | |
CN103339598A (zh) | 用于视频服务的分布式鉴定的系统和方法 | |
CN110099134A (zh) | 视频文件下载方法、装置、电子设备及存储介质 | |
CN108924630A (zh) | 一种显示缓存进度的方法和播放设备 | |
CN102790925A (zh) | 一种在线流媒体播放的方法及点播终端 | |
CN110139123A (zh) | 流媒体文件的播放、发送、处理方法和装置 | |
CN103414959B (zh) | 一种加快网络视频播放速度的方法和装置 | |
CN108769830A (zh) | 一种缓存视频的方法以及相关设备 | |
CN106993238A (zh) | 基于Html5的音视频播放方法及装置、音视频直播方法及系统 | |
EP1796095B1 (en) | Method and device for cache pre-storage of streamed multimedia data for editing in a network environment. | |
CN110113655A (zh) | 一种视频播放的方法、装置及用户终端 | |
CN113424553A (zh) | 用于响应于用户选择而推进交互式媒体项目的重放的技术 | |
CN105898392A (zh) | 在线直播视频播放器及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |