离线缓存方法、装置、终端及可读存储介质与流程

文档序号:18739766发布日期:2019-09-21 01:38阅读:226来源:国知局
离线缓存方法、装置、终端及可读存储介质与流程

本说明书实施例涉及缓存技术领域,尤其涉及一种离线缓存方法、装置、终端及可读存储介质。



背景技术:

在终端播放资源的场景,例如数字标牌场景,往往会使用视频进行广告内容的展现,一般都是基于流媒体播放视频方案,即云端(服务器端)下发视频资源地址,终端无需等到资源下载完就可以播放,也就是一边播放一边下载。但是,由于视频文件往往比较大,一次下载的成本较高,因此,资源的离线缓存就显得非常有必要。这就要求每个资源只要在终端上播放完毕一次后,能够完成离线缓存,也就是即使终端网络端口或系统重启等情况下,缓存的资源仍然能够有效,可供随时播放。



技术实现要素:

本说明书实施例提供及一种离线缓存方法、装置、终端及可读存储介质。

第一方面,本说明书实施例提供一种离线缓存方法,用于在终端进行资源离线缓存,所述终端的操作系统包括框架层和应用程序层,所述方法包括在所述框架层创建缓存数据源模块和媒体缓存模块;所述缓存数据源模块从云端下载媒体资源,并将所述媒体资源写入所述媒体缓存模块,生成离线缓存文件;存储所述离线缓存文件,并将存储的离线缓存文件供给所述应用程序层访问。

第二方面,本说明书实施例提供一种离线缓存装置,用于在终端进行资源离线缓存,所述终端的操作系统包括框架层和应用程序层,所述装置包括在所述框架层创建的缓存数据源模块和媒体缓存模块;所述缓存数据源模块,用于从云端下载媒体资源,并将所述媒体资源写入所述媒体缓存模块;所述媒体缓存模块,用于根据所述缓存数据源模块写入的媒体资源,生成离线缓存文件;存储模块,用于存储所述离线缓存文件,并将存储的离线缓存文件供给所述应用程序层访问。

第三方面,本说明书实施例提供一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一项所述离线缓存方法的步骤。

第四方面,本说明书实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述离线缓存方法的步骤。

本说明书实施例有益效果如下:

本说明书实施例提供了一种离线缓存方法,通过在操作系统的框架层创建缓存数据源模块和媒体缓存模块,既保持了流媒体的播放解码能力,又将内存缓存进行了持久化,生成离线缓存文件,从而实现一次下载随时播放的能力,中间没有经过任何的代理服务器,大大降低了整个系统的IO,能够达到非常流畅的播放效果

附图说明

图1为本说明书实施例离线缓存场景示意图;

图2为本说明书实施例第一方面提供的离线缓存方法流程图;

图3为本说明书实施例第二方面提供的离线缓存系统结构示意图;

图4为本说明书实施例第三方面提供的离线缓存方法实例流程图;

图5为本说明书实施例第四方面提供的离线缓存装置结构示意图;

图6为本说明书实施例第五方面提供的终端结构示意图。

具体实施方式

为了更好的理解上述技术方案,下面通过附图以及具体实施例对本说明书实施例的技术方案做详细的说明,应当理解本说明书实施例以及实施例中的具体特征是对本说明书实施例技术方案的详细的说明,而不是对本说明书技术方案的限定,在不冲突的情况下,本说明书实施例以及实施例中的技术特征可以相互组合。

本技术领域技术人员可以理解,本说明书实施例所使用的“终端”或“终端设备”)可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视等设备。

本技术领域技术人员可以理解,本说明书实施例所使用的“云端”,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云。在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。本说明书实施例中,终端与云端之间可通过任何通信方式实现通信,包括但不限于,基于3GPP、LTE、WIMAX的移动通信、基于TCP/IP、UDP协议的计算机网络通信以及基于蓝牙、红外传输标准的近距无线传输方式。

本领域技术人员应当理解,本说明书实施例所称的“应用”、“应用程序”、“应用软件”以及类似表述的概念,是业内技术人员所公知的相同概念,是指由一系列计算机指令及相关数据资源有机构造的适于电子运行的计算机软件。除非特别指定,这种命名本身不受编程语言种类、级别,也不受其赖以运行的操作系统或平台所限制。理所当然地,此类概念也不受任何形式的终端所限制。

本领域技术人员理解,操作系统包括应用程序层(App层)和框架层(Framework层),至于从功能划分上有可能包括的的其他层本说明书实施例则不作讨论。其中,通常App层可以理解为上层,负责与用户交互的界面,例如应用程序维护、以及点击页面时识别不同种类的点击内容从而显示不同的上下文菜单等。通常Framework层作为中间层,这一层的主要职责是,将App层获得的用户请求,如启动视频播放之类,转发往下层去;将下层处理好的内容,或者通过消息,或者通过中间代理类,来分发至上层,对用户展现出来。

本说明书实施例一种实现方式是,对App层和Framework层进行改进,从而利用这两层的协同配合实现在终端上进行资源的离线缓存。具体的,可以在框架层创建缓存数据源模块和媒体缓存模块,由缓存数据源模块从云端下载媒体资源,并将媒体资源写入媒体缓存模块,生成离线缓存文件;存储离线缓存文件,并将存储的离线缓存文件暴露给应用程序层(应用程序层可访问离线缓存文件)。

请参见图1,为本说明书实施例离线缓存场景示意图。该场景示出了云端10和终端20。云端存储有供终端下载播放的资源,例如视频资源;终端20从云端10下载并存储视频资源。进一步,终端20示出了App层201和Framework层202,其中,App层201启动视频播放时,控制Framework层202从云端10下载并播放视频资源,特别的,本说明书实施例中,Framework层202首次下载完某一资源后,将该资源进行内存缓存,生成离线缓存文件,并将离线缓存文件暴露给App层201,由此,当下次再播放该资源时,就无需重复下载,而可以直接读取离线缓存文件进行播放,并且,通过将内存缓存进行持久化操作,即将离线缓存文件进行单独存储,从而避免内存缓存失效的问题。

第一方面,本说明书实施例提供一种离线缓存方法,用于在终端进行资源离线缓存,终端的操作系统包括框架层和应用程序层,请参考图2,该离线缓存方法包括步骤S201-S203。

S201:在框架层创建缓存数据源模块和媒体缓存模块。

为了说明方便,本说明书实施例以终端运行安卓(Android)操作系统、对视频资源进行离线缓存为例进行说明。但是需要说明的是,本说明书实施例不限于安卓系统,并且不限于对视频资源的离线缓存,例如还可以对音频进行离线缓存等。

在Android中,会使用框架层中的MediaPlayer(媒体播放器)组件对视频的播放进行控制。例如,使用MediaPlayer播放视频,基本步骤是,首先生成MediaPlayer对象,根据播放文件的地址使用不同的生成方法然后得到MediaPlayer对象后,根据实际需要调用不同方法,如start()(开始)、stop()(停止)、pause()(暂停)、release()(释放)等进行资源播放的控制。其中,MediaPlayer对象的一种状态是,调用setDataSource()(设置数据源)方法会使处于Idle(空闲)状态的对象迁移到Initialized(初始化)状态。

本说明书实施例中,可通过对框架层中MediaPlayer组件的源代码进行修改,将原来的DataSource(数据源)模块进行功能升级,具体的,修改MediaPlayer组件的源代码,保留MediaPlayer组件中原DataSource模块的流媒体播放及下载功能,并修改缓存策略,新增内存缓存持久化功能。由此,可在框架层的MediaPlayer组件中创建以下两个模块:

缓存数据源(CacheDataSource)模块:用于下载流媒体;

媒体缓存模块(MediaCache)模块:用于从CacheDataSource模块获取并写入流媒体的视频资源。

S202:缓存数据源模块从云端下载媒体资源,并将媒体资源写入媒体缓存模块,生成离线缓存文件。

如前描述的,本说明书实施例中通过修改MediaPlayer组件的源代码,由CacheDataSource模块和MediaCache模块代替原来的DataSource模块,保持原有的流媒体播放能力,但是修改了缓存策略部分,即将内存缓存写入到MediaCache模块进行持久化,形成离线缓存文件。

MediaCache模块生成的离线缓存文件可供App层后续直接读取,而无需启动MediaPlayer组件重复下载。

而且,由于将下载和存储两个功能在不同模块实现,可有效避免内存缓存失效的问题。这是因为,传统的Android视频缓存是通过DataSource模块来进行资源的下载,当下载到一定数量时将这些内容送到Extractor(提取器)进行解码播放,同时会把资源缓存到本地,但是这个缓存是一个内存缓存,不能持久化,一旦DataSource被销毁,与它关联的所有内存缓存都会失效。而本说明书实施例中,下载功能由CacheDataSource模块实现,缓存功能由MediaCache模块实现,通过在MediaCache模块生成离线缓存文件而使得内存缓存持久化,即使CacheDataSource模块被销毁,由于离线缓存文件的存在,也不会导致内存缓存的失效。

S203:存储离线缓存文件,并将存储的离线缓存文件供给应用程序层访问。

考虑到MediaCache模块是在Android系统中框架层的一个模块,没有暴露给App层,所以需要通过某种方式暴露给App层。

例如,可以通过创建一个媒体播放器(MediaPlayer)数据库将MediaCache模块暴露给App层,具体的,在App层和Framework层之间,创建一个MediaPlayer数据库,该MediaPlayer数据库可获取MediaCache模块传来的离线缓存文件,并且提供访问接口给App层,供App层读取到离线缓存文件。

再如,还可以通过Android系统的SharedPreferences(共享参数)的方式存储离线缓存文件。SharedPreferences是一种轻量级的数据存储方式,采用Key/value的方式进行映射,最终会在终端以xml的格式存储文件。SharedPreferences可以理解为android.content(内容)下的一个接口:用于访问和修改getSharedPreferences(获取共享参数)返回偏好设置数据(preference data)的一个接口。本说明书实施例中,当MediaCache模块生成离线缓存文件时,调用操作系统中的SharedPreferences方法,存储离线缓存文件。

可见,本说明实施例中,将存储的离线缓存文件供给应用程序层访问的方式可以包括:通过播放器数据库或共享参数方法向应用程序层提供访问接口,应用程序层通过访问接口读取离线缓存文件。当然,上述两种方式仅是示例性说明,还可以采取其他方式进行离线缓存文件的存储以及提供给应用程序层,本说明书实施例对此不做限定。

在应用程序层通过播放器数据库或共享参数方法提供的访问接口可以读取离线缓存文件的前提下,每次播放视频资源就不必都进行重复下载,而是可以首先查找是否存在有离线缓存文件,如果有,则直接读取离线缓存文件进行视频的播放,如果没有,再启动框架层的MediaPlayer组件进行视频的播放和下载。因此,当应用程序层启动资源播放时,查询媒体播放器数据库或共享参数方法是否保存有离线缓存文件,如果有,直接读取离线缓存文件进行资源播放;如果没有,调用媒体播放器组件,由媒体播放器组件从云端进行视频的下载及播放。

第二方面,基于同一发明构思,图3示出了本说明书实施例提供的一种离线缓存系统的结构示意图。

该系统包括云端30和终端31。云端30可以包括私有云和内容私发网络等,对此不作限定。终端31示出了与本说明书实施例相关的部分,包括位于应用程序层的应用程序311和位于框架层的媒体播放器组件312,以及媒体播放器数据库313。其中,应用程序311进一步包括资源查询模块3111和媒体播放启动模块3112,媒体播放器组件312进一步包括缓存数据源模块3121和资源缓存模块3122,另外,媒体播放器组件312还包括客户池(client池)、播放器(player)和提取器(extractor)。

其中,缓存数据源模块3121从云端下载资源,并提交给资源缓存模块3122,生成离线缓存文件,资源缓存模块3122将离线缓存文件发送到媒体播放器数据库313进行存储。当应用程序311进行资源播放时,首先通过资源查询模块3111查询媒体播放器数据库313是否有离线缓存文件,如果有,直接读取文件进行资源播放,如果没有,则通过资源播放启动模块3112,启动媒体播放器组件312进行视频的播放和下载。

本说明实施例中,资源查询模块3111、媒体播放器数据库313、缓存数据源模块3121和资源缓存模块3122这四部分协同工作,实现离线缓存的存储及读取。

如前分析的,传统的Android视频缓存是通过一个DataSource模块来进行资源的下载,当下载到一定数量时将这些内容送到extractor进行解码播放,同时会把资源缓存到本地,但是这个缓存是一个内存缓存,不能持久化,一旦DataSource被销毁,与它关联的所有内存缓存都会失效。

为了解决这个问题本说明书实施例引入了缓存数据源模块3121(CacheDataSource)和资源缓存模块3122、(MediaCache)替换了原有的DataSource模块,保持原有的流媒体播放能力,但是修改了缓存策略部分,也就是将内存缓存写入到MediaCahe模块进行持久化,形成离线缓存文件,然后通过MediaCahe将离线缓存记录写入到媒体播放器数据库313(MediaPlayer数据库)中。

每次应用程序在播放视频前都会通过资源查询模块3111查询这个MediaPlayer数据库是否存在离线缓存文件,如果存在离线缓存文件就直接播放这个文件,从而达到了一次下载随时播放的效果。

请参见图4,为本说明书实施例第三方面提供的离线缓存方法实例流程图,该流程图是参考图3的系统结构示意图实施的,仅作为一个示例给出。

图4包括如下步骤:

S401:终端启动视频播放;

S402:获取云端下发的视频URL;

S403:根据视频URL查询MediaPlayer数据库,获取资源记录;

S404:资源记录中是否存储有离线缓存文件?如果有,执行S405,如果没有执行S406;

S405:播放离线缓存文件;

S406:媒体播放启动模块调用MediaPlayer组件,设置播放资源的地址为视频URL;

S407:MediaPlayer组件为视频URL创建一个client,client中的extractor负责视频的编解码;

S408:Extractor会自动创建一个CacheDataSource模块;

S409:CacheDataSource从云端下载视频,并在每次下载完一定数量大小的内容后就交给extractor进行播放,同时将这部分资源写入MediaCache;

S410:CacheDataSource下载完资源所有内容,通知MediaCache缓存写入完成;

S411:MediaCache完成离线资源的保存,并将缓存资源记录到MediaPlayer数据库。

本说明书一个或多个实施例,至少具有以下有益效果:通过修改Android源代码中的MediaPlayer组件中的DataSource模块形成CacheDataSource模块和MediaCache模块,既保持了流媒体的播放解码能力,又将内存缓存进行了持久化,生成离线缓存文件,从而实现一次下载随时播放的能力,中间没有经过任何的代理服务器,大大降低了整个系统的IO,能够达到非常流畅的播放效果。

第四方面,基于同一发明构思,本说明书实施例提供一种离线缓存装置,该装置用于在终端进行资源离线缓存,终端的操作系统包括框架层和应用程序层。

请参考图5,为该装置结构示意图,该装置包括:位于所述框架层的缓存数据源模块501和媒体缓存模块502,以及存储模块503;其中:所述缓存数据源模块501,用于从云端下载媒体资源,并将所述媒体资源写入所述媒体缓存模块;所述媒体缓存模块502,用于根据所述缓存数据源模块写入的媒体资源,生成离线缓存文件;所述存储模块503,用于存储所述离线缓存文件,并将存储的离线缓存文件供给所述应用程序层访问。

在一种可选方式中,所述缓存数据源模块501和媒体缓存模块502,是通过修改所述框架层中媒体播放器组件的源代码,分别得到的用于流媒体下载的缓存数据源模块501以及用于写入内存缓存的所述媒体缓存模块502。

在一种可选方式中,所述缓存数据源模块501和媒体缓存模块502,是通过修改所述媒体播放器组件的源代码,保留所述媒体播放器组件中原数据源模块的流媒体播放及下载功能,并修改缓存策略,新增内存缓存持久化功能而得到的。

在一种可选方式中,所述存储模块503包括媒体播放器数据库5031;所述媒体缓存模块502生成离线缓存文件时,将所述离线缓存文件写入到所述媒体播放器数据库5031。

在一种可选方式中,所述存储模块503包括共享参数方法调用子模块5032;所述媒体缓存模块502生成所述离线缓存文件时,通过共享参数方法调用子模块5032,调用所述操作系统中的共享参数方法,存储所述离线缓存文件。

在一种可选方式中,所述播放器数据库5031或共享参数方法调用子模块5032,还用于向所述应用程序层提供访问接口,使得所述应用程序层通过访问接口读取所述离线缓存文件。

在一种可选方式中,所述应用程序层包括资源播放查询模块504;所述资源查询模块504用于,当启动资源播放时,查询所述媒体播放器数据库5031或所述共享参数方法子模块5032是否保存有所述离线缓存文件;如果有,读取所述离线缓存文件直接进行资源播放;如果没有,调用所述媒体播放器组件,由所述媒体播放器组件从云端进行视频的下载及播放。

第五方面,基于与前述实施例中离线缓存方法同样的发明构思,本发明还提供一种终端,如图6所示,包括存储器604、处理器602及存储在存储器604上并可在处理器602上运行的计算机程序,所述处理器602执行所述程序时实现前文所述离线缓存方法的任一方法的步骤。

其中,在图6中,总线架构(用总线600来代表),总线600可以包括任意数量的互联的总线和桥,总线600将包括由处理器602代表的一个或多个处理器和存储器604代表的存储器的各种电路链接在一起。总线600还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口606在总线600和接收器601和发送器603之间提供接口。接收器601和发送器603可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器602负责管理总线600和通常的处理,而存储器604可以被用于存储处理器602在执行操作时所使用的数据。

第六方面,基于与前述实施例中离线缓存方法的发明构思,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文所述离线缓存方法的任一方法的步骤。

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

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

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

尽管已描述了本说明书的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本说明书范围的所有变更和修改。

显然,本领域的技术人员可以对本说明书进行各种改动和变型而不脱离本说明书的精神和范围。这样,倘若本说明书的这些修改和变型属于本说明书权利要求及其等同技术的范围之内,则本说明书也意图包含这些改动和变型在内。

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