缓存更新方法及装置转让专利

申请号 : CN202110268550.1

文献号 : CN113014997B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李述博杨智慧王孟灰王玉伟朱思振龙春宇

申请人 : 上海哔哩哔哩科技有限公司

摘要 :

本申请提供缓存更新方法及装置,其中所述缓存更新方法包括:接收针对离散缓存中缓存单元的更新请求;基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测;在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元;在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付。

权利要求 :

1.一种缓存更新方法,其特征在于,包括:

接收针对离散缓存中缓存单元的更新请求;

基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间以及第二数据在所述目标对象中对应的推移时间区间,对所述更新请求进行合理性检测,其中,所述推移时间为所述第一数据在所述目标对象中出现的时间,所述推移时间区间为所述第二数据在所述目标对象中对应的时间区间,所述第一数据和所述第二数据与所述目标对象具有时间上的关联性;

在基于所述合理性检测的检测结果确定执行所述更新请求,在所述推移时间位于推移时间区间之间且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述目标缓存单元的缓存状态从所述第一状态更新为第二状态,再将所述第一数据填充至所述目标缓存单元,其中,所述第一状态包括所述缓存单元为可用的状态,所述第二状态包括所述缓存单元为不可用的状态;

在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付。

2.根据权利要求1所述的缓存更新方法,其特征在于,所述基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间以及第二数据在所述目标对象中对应的推移时间区间,对所述更新请求进行合理性检测,包括:确定所述目标对象中第二数据的缓存队列中存储的第二数据在所述目标对象中对应的推移时间区间;

基于所述更新请求中携带的所述推移时间,判断所述推移时间是否位于所述推移时间区间;

若是,确定所述合理性检测的检测结果为通过;

若否,确定所述合理性检测的检测结果为不通过。

3.根据权利要求1所述的缓存更新方法,其特征在于,所述离散缓存中存在缓存状态为第一状态的目标缓存单元,包括:在所述离散缓存中筛选出缓存状态为所述第一状态的至少一个缓存单元;

基于预设选取规则,确定所述至少一个缓存单元中的所述目标缓存单元。

4.根据权利要求1所述的缓存更新方法,其特征在于,所述将所述第一数据填充至所述目标缓存单元,包括:确定所述目标缓存单元对应的缓存标识;

基于所述缓存标识,将所述第一数据填充至所述目标缓存单元。

5.根据权利要求3所述的缓存更新方法,其特征在于,所述对所述目标缓存单元中的所述第一数据进行交付之后,还包括:将所述目标缓存单元的缓存状态从所述第二状态更新为所述第一状态。

6.根据权利要求2所述的缓存更新方法,其特征在于,所述第一数据包括:视频帧,所述目标对象包括:目标视频。

7.根据权利要求6所述的缓存更新方法,其特征在于,所述在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付,还包括:接收针对视频帧的使用请求;

响应于所述使用请求,确定所述离散缓存的缓存单元中的视频帧在所述目标视频中对应的推移时间;

根据所述离散缓存的缓存单元中的视频帧在所述目标视频中对应的推移时间与所述使用请求中携带的目标推移时间之间的差值,确定所述目标缓存单元,并将所述目标缓存单元中的视频帧进行交付。

8.根据权利要求6所述的缓存更新方法,其特征在于,在所述第二数据包括:音频切片的情况下,还包括:接收针对目标视频的音频切片的音频缓存队列的队列更新请求;

在所述音频缓存队列中存在空余的音频缓存单元的情况下,根据所述队列更新请求中携带的音频推移时间,将所述音频推移时间对应的音频切片填充至所述音频缓存队列。

9.根据权利要求8所述的缓存更新方法,其特征在于,还包括:接收针对所述音频缓存队列中音频切片的音频使用请求;

基于所述音频使用请求中携带的目标音频推移时间,将所述音频缓存队列中与所述目标音频推移时间对应的音频切片进行交付。

10.根据权利要求9所述的缓存更新方法,其特征在于,所述确定所述目标对象中第二数据的缓存队列中存储的第二数据在所述目标对象中对应的推移时间区间,包括:确定所述目标视频中音频切片的音频缓存队列中预设的滑动窗口;

根据所述滑动窗口,确定所述滑动窗口内存储的音频切片在所述目标视频中对应的推移时间区间;

相应的,在所述将所述音频推移时间对应的音频切片填充至所述音频缓存队列之后,和/或,在所述将所述音频缓存队列中与所述目标音频推移时间对应的音频切片进行交付之后,还包括:更新所述音频缓存队列中的滑动窗口,并更新所述滑动窗口内音频切片在所述目标视频中对应的推移时间区间。

11.一种缓存更新装置,其特征在于,包括:

接收模块,被配置为接收针对离散缓存中缓存单元的更新请求;

检测模块,被配置为基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间以及第二数据在所述目标对象中对应的推移时间区间,对所述更新请求进行合理性检测,其中,所述推移时间为所述第一数据在所述目标对象中出现的时间,所述推移时间区间为所述第二数据在所述目标对象中对应的时间区间,所述第一数据和所述第二数据与所述目标对象具有时间上的关联性;

填充模块,被配置为在基于所述合理性检测的检测结果确定执行所述更新请求,在所述推移时间位于推移时间区间之间且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述目标缓存单元的缓存状态从所述第一状态更新为第二状态,再将所述第一数据填充至所述目标缓存单元,其中,所述第一状态包括所述缓存单元为可用的状态,所述第二状态包括所述缓存单元为不可用的状态;

交付模块,被配置为在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付。

12.一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,其特征在于,所述处理器执行所述计算机指令时实现权利要求1‑10任意一项所述方法的步骤。

13.一种计算机可读存储介质,其存储有计算机指令,其特征在于,所述计算机指令被处理器执行时实现权利要求1‑10任意一项所述方法的步骤。

说明书 :

缓存更新方法及装置

技术领域

[0001] 本申请涉及数据处理技术领域,特别涉及一种缓存更新方法。本申请同时涉及一种缓存更新装置,一种计算设备,以及一种计算机可读存储介质。

背景技术

[0002] 随着视频产业的发展,用户对视频的播放质量要求越来越高,而提高视频的播放质量,不仅需要对视频进行复杂的渲染,还需要提高视频的刷新率,然而目前若满足上述需求,通常采用三级缓存的机构对视频进行播放处理,在这个过程中,所占用的缓存是非常大并且存在冗余的,而若不采用三级缓存结构,则在视频播放过程中不仅可能出现大量丢帧的情况,还会降低对GPU的使用率。

发明内容

[0003] 有鉴于此,本申请实施例提供了一种缓存更新方法。本申请同时涉及一种缓存更新装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的播放大量掉帧或视频播放处理中占用大量缓存的技术问题。
[0004] 根据本申请实施例的第一方面,提供了一种缓存更新方法,包括:
[0005] 接收针对离散缓存中缓存单元的更新请求;
[0006] 基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测;
[0007] 在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元;
[0008] 在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付。
[0009] 根据本申请实施例的第二方面,提供了一种缓存更新装置,包括:
[0010] 接收模块,被配置为接收针对离散缓存中缓存单元的更新请求;
[0011] 检测模块,被配置为基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测;
[0012] 填充模块,被配置为在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元;
[0013] 交付模块,被配置为在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付。
[0014] 根据本申请实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述计算机指令时实现所述缓存更新方法的步骤。
[0015] 根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,所述计算机指令被处理器执行时实现所述缓存更新方法的步骤。
[0016] 本申请提供的缓存更新方法,通过接收针对离散缓存中缓存单元的更新请求;基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测;在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元;在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付,实现了基于数据的合理性检测,从由至少一个缓存单元组成的离散缓存中选取第一状态的目标缓存单元进行更新,即通过时间的合理性以及对离散缓存中缓存单元的状态控制,实现对缓存单元的轮替更新,则无需完成前一帧第一数据的处理之后,再对下一第一数据进行处理,减少了各个第一数据之间进行处理的等待时间,还实现了较低的缓存的占用。

附图说明

[0017] 图1是本申请一实施例提供的第一种缓存更新方法中的视频播放策略的示意图;
[0018] 图2是本申请一实施例提供的第二种缓存更新方法中的视频播放策略的示意图;
[0019] 图3是本申请一实施例提供的一种缓存更新方法的流程图;
[0020] 图4是本申请一实施例提供的一种应用于视频播放场景中的缓存更新方法的处理流程图;
[0021] 图5是本申请一实施例提供的一种缓存更新装置的结构示意图;
[0022] 图6是本申请一实施例提供的一种计算设备的结构框图。

具体实施方式

[0023] 在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
[0024] 在本申请一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。在本申请一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本申请一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0025] 应当理解,尽管在本申请一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0026] 首先,对本申请一个或多个实施例涉及的名词术语进行解释。
[0027] 纹理(Texture):纹理是一种图形数据,主要用于在屏幕上包装不同的物体。
[0028] 纹理标识(Texture id):用于唯一指定表示一个纹理。
[0029] GL环境(OpenGL Environment):用于代指当前提供GPU通信信道及相关临界资源的闭包集合。
[0030] 音频切片(Audio Chunk):具有一段时长的音频片段,比如3毫秒的音频切片、5毫秒的音频切片等。
[0031] 每秒传输帧数(Frames Per Second,FPS):也可以理解为刷新率,是指视频中每秒播放的视频帧的个数,也是指视频的画面数,每秒钟帧数愈多,视频中所显示的动作就会越流畅。
[0032] 展示界面(Display Window):对视频进行播放的界面。
[0033] 数据通道(Data‑Pipeline):是指进行数据通信的通道。
[0034] 实际应用中,一种视频在播放过程中所采取的视频播放策略,具体如图1所示,图1示出了根据本申请一实施例提供的第一种缓存更新方法中的视频播放策略的示意图。
[0035] 以视频播放场景为例,在获取原始音视频数据(可以理解为下述实施例中的目标视频)后,建立一个数据缓冲池(可以理解为下述方法实施例中的视频缓存队列,用于存储解码后的视频数据)。再由生产者消费者模型配合PTS(Presentation Time Stamp,显示时间戳)同步策略,来满足其他模块对视频数据的消费。不过这样渲染到展示的过程,就变成了一个同步处理的过程。这样的处理过程即是同步无储刷新策略(refresh with uncache‑sync strategy)。
[0036] 具体的,如图1所示,当解码器完成对音视频数据的解码后,会将当前完成解码处理的视频帧放入到数据缓冲池,其中,数据缓冲池中包括已经解码完成的视频帧:Frame_0毫秒、Frame_40毫秒、Frame_80毫秒、Frame_120毫秒、Frame_160毫秒等,这些解码出的视频帧等待数据消耗(即视频帧渲染),该数据缓冲池中的视频帧在解码过程中存在解码耗时,其中,Frame_0毫秒可以理解为位于目标视频中0毫秒的视频帧(Frame);
[0037] 当渲染需要拿取指定时间戳的音视频频数据时,则会从该数据缓冲池中将指定数据(可以理解为目标视频帧)取出,经过渲染后同步的刷新(简称为:同传)到前台展示界面上。这一过程中耗时(解码耗时、渲染耗时以及展示耗时)是累积的,比如针对视频帧Frame_0毫秒进行展示前的单次耗时包括:视频帧Frame_0毫秒的解码耗时、render_Frame_0毫秒(视频帧Frame_0毫秒的渲染耗时)以及display_Frame_0毫秒(视频帧Frame_0毫秒的显示耗时),而在当次展示完成前,流程中其他部分处于被阻塞的状态。这使得下一次的操作,必须等待前一次处理全部完成后才能真正开始。
[0038] 显然的,在40毫秒的时候,因为还未完整针对视频帧Frame_0毫秒的展示处理,因此无法对视频帧Frame_40毫秒进行渲染处理,而为了对后续视频帧的正常播放,只有等待下一次渲染指令(即80毫秒时针对视频帧Frame_80毫秒的渲染指令),因此这个过程中出现了长时间的空余耗时,此外,针对Frame_80毫秒的展示处理也处于等待中。
[0039] 具体实施时,对于播放器的显示模块,视频获取到有效视频数据所需要的时间主要来自于解码消耗。但是在编辑过程中,除了解码耗时(Decoding‑Cost)之外,还有渲染耗时(Rendering‑Cost)。即渲染耗时才是主要矛盾。如果按照上述图1所示的方案,当渲染耗时超过了预留的两视频帧间窗口期时间时,为了保证后续环节的正常展示就需要动态丢帧了。丢帧策略会让目标视频,在展示过程中发生较为明显的刷新率下滑。
[0040] 若在视频刷新到前台页面(比如展示页面)进行展示的过程中,为了完成对视频进行实时刷新的诉求,可以采用二级缓存机制来实现,但面对编辑等包含有大量视频帧处理的场景时,二级缓存可能不能满足刷新需求。因此还可以在此基础上直接引入三级缓存的结构,但在这种情况下,则会占用大量的缓存。
[0041] 进一步的,为了扩展处理窗口期,并避免对缓存的大量占用,且保证刷新率的稳定性,图2示出了根据本申请一实施例提供的第二种缓存更新方法中的视频播放策略的示意图;
[0042] 如图2所示的异步刷新配合缓冲池即异步缓冲刷新策略(refresh with cache‑pool‑async strategy),具体的,当解码器完成对目标视频的解码后,会将当前完成解码处理的视频帧放入到数据缓冲池,其中,数据缓冲池中包括已经解码完成的视频帧:Frame_0毫秒、Frame_40毫秒、Frame_80毫秒、Frame_120毫秒、Frame_160毫秒等,这些解码出的视频帧等待数据消耗(即视频帧渲染),该数据缓冲池中的视频帧在解码过程中存在解码耗时;
[0043] 当渲染需要拿取指定时间戳的音视频频数据时,则会从该缓冲池中将指定的目标视频帧取出,经过渲染后异步的刷新到前台的展示界面上。这一过程中耗时(解码耗时、渲染耗时以及展示耗时)不是积累的,比如针对视频帧Frame_0毫秒进行展示前的单次耗时包括:视频帧Frame_0毫秒的解码耗时、render_Frame_0毫秒(针对视频帧Frame_0毫秒的渲染耗时)以及display_Frame_0毫秒(针对视频帧Frame_0毫秒的显示耗时),而在该视频帧展示完成前,其他视频帧已经可以开始处理了,比如40毫秒前,针对视频帧Frame_0毫秒未完成展示处理之前,即可针对视频帧Frame_40毫秒进行渲染处理,这一过程中存在针对Frame_0毫秒的渲染耗时(render_Frame_40毫秒)与针对视频帧Frame_0毫秒的展示耗时(display_Frame_0毫秒)可以存在处理时间上的重合,类似的,针对视频帧Frame_80毫秒的渲染耗时(render_Frame_80毫秒)也可以与针对视频帧Frame_40毫秒的展示耗时(display_Frame_40毫秒)存在处理时间上的重合,并继续处理过程,在120毫秒之前针对视频帧Frame_120毫秒进行渲染(即在120毫秒之前进行针对视频帧Frame_120毫秒的渲染耗时:render_Frame_120毫秒),即使得下一次操作可以与上一次单次耗时存在处理时间上的重合。
[0044] 本申请实施例,在渲染处理和显示展示的过程中,引入一级特殊的缓存(可以理解为下述方法实施例中的离散缓存)。具体的,离散缓存可以保留两个缓存单元(比如两个纹理,而纹理可以理解为视频帧所代表的缓存单元,也即图片所代表的缓存单元),这两个纹理可以交替分别作为前后台纹理。比如:将渲染后的数据(比如视频帧)输出到这两个纹理中实际空余的纹理上,而显示则可用另一个已完成数据填装的纹理进行更新展示。这样整个处理过程变成为异步处理方案。这个轮替进行数据存储的缓存交替机制,可以被称为交叉缓存(Cross‑Cache)机制。相应的,以此机制作为驱动的视频缓存,也可以被称为交叉缓存(Cross‑Cache),具体的,该交叉缓存也可以理解为下述离散缓存的一种可选实施方式。
[0045] 进一步的,在本申请中,提供了一种缓存更新方法,本申请同时涉及一种缓存更新装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
[0046] 图3示出了根据本申请一实施例提供的一种缓存更新方法的流程图,具体包括以下步骤:
[0047] 步骤302:接收针对离散缓存中缓存单元的更新请求。
[0048] 其中,所述离散缓存,是由至少两个离散的缓存单元组成的,也即所述离散缓存中包括至少两个离散的缓存单元,这至少两个缓存单元之间彼此独立,可以交替用于提供针对数据进行存储的存储空间,既避免了对大量缓存的占用,也通过这至少两个缓存单元之间的交替使用,实现了将数据存储以及数据消耗过程异步化,为数据预留了更多的处理时间,进一步的,针对离散缓存中缓存单元的更新请求,可以理解为请求将数据填充至缓存单元的请求。
[0049] 实际应用中,离散缓存中的缓存单元,可以用于填装任意的数据,比如,视频帧、业务数据等,在此不做限制。
[0050] 具体实施时,触发针对离散缓存中缓存单元的更新请求的触发条件是多种多样的,比如,可以通过手工触发(比如提交针对离散缓存中缓存单元的更新请求的指令)、可以按照预设时间间隔(比如1毫秒、3毫秒等)触发,可以按照预设请求个数(比如2个、3个等)进行触发,此外,还可以将预设请求个数和预设时间间隔进行结合,触发针对离散缓存中缓存单元的更新请求,在此不做限制。
[0051] 以离散缓存的缓存单元中存储的数据为视频帧为例,在对视频帧进行存储之前,需要对包含视频帧的视频进行解码,并将解码获得的视频帧以及音频数据进行存储,本申请实施例提供的一种可选实施方式中,所述接收针对离散缓存中缓存单元的更新请求之前,还包括:
[0052] 对目标视频进行解码,获得所述目标视频中包含的视频帧以及音频帧;
[0053] 基于所述音频帧创建预设时长的音频切片,并将创建的音频切片存储至音频缓存队列。
[0054] 实际应用中,对目标视频进行解码,可以采用解码器、解码程序等进行解码,在此不做限制。
[0055] 具体实施时,解码获得的视频帧可以在视频缓存队列中进行存储,而解码出的音频帧的音频时长可能与预设时长(预先设置的用于播放刷新的音频时长)是不同的。在音频播放过程中,采用预设时长的音频切片进行播放刷新,可以保障稳定的播放效果。因此可以通过将音频帧进行切片和/或拼接处理,创建预设时长的音频切片,再将处理获得的音频切片存储至音频缓存队列中。
[0056] 进一步的,将音频帧进行切片处理创建预设时长的音频切片,可以理解为将音频时长短于预设时长的音频帧进行拼接形成预设时长的音频切片,将音频时长长于预设时长的音频帧按照预设时长进行切分,创建预设时长的音频切片,并需要保障音频切片之间的连续性,实现了通过缓存队列对目标视频解码完成的数据进行缓冲存储,并以便后续从解码队列中获取解码后的视频帧以及音频切片进行渲染、展示等处理。
[0057] 其中,音频切片可以理解为预设时长的音频片段,比如3毫秒时长的音频片段,5毫秒时长的音频片段等,在此不做限制。
[0058] 步骤304:基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测。
[0059] 其中,所述第一数据,可以理解为任意数据,该数据与目标对象在时间上具有关联性;所述目标对象,可以理解为具有时间长度的对象,比如可以是视频、具有时间周期的项目、游戏等,在此不做限制,其中,视频,可以是任意种类的视频,比如直播视频、电影视频、教学视频等,在此不做限制,进一步的,该视频中的视频帧可以作为第一数据。
[0060] 具体的,所述推移时间,可以理解为第一数据在目标对象中出现的时间,比如视频帧在视频对应的推移时间,可以理解为视频帧在视频中出现的时间,比如视频的整体时长有3分钟,而某一视频帧出现在视频的3分钟时长中的第5毫秒,则5毫秒为该视频帧在视频中对应的推移时间。
[0061] 实际应用中,在对目标对象的使用或处理的过程中,涉及到对第一数据的使用或加工,因此,可以先请求将加工处理后的第一数据存储于离散缓存的缓存单元(即通过该第一数据更新离散缓存的缓存单元),以便从缓存单元中对该第一数据进行取用,也即请求对缓存单元进行更新的目的是:对待用于更新的第一数据进行使用,而对第一数据进行使用,需要检测是否有需要对该第一数据进行使用(即对更新请求所请求的第一数据的合理性进行检测),若没有需要,表明该更新请求不合理,则可不执行该更新请求;若有需要,表明该更新请求合理,则可以执行该更新请求(即基于该更新请求,对离散缓存中的缓存单元进行更新处理)。
[0062] 进一步的,检测是否有需要对该第一数据进行使用,则可以基于第一数据在目标对象中的推移时间进行检测,实际应用中,若所请求用于更新缓存单元的第一数据的推移时间早于或等于对目标对象的实际使用或处理时间,表明已无需使用该第一数据,则上述更新请求不合理,若所请求用于更新缓存单元的第一数据的推移时间晚于当前对目标对象的实际使用或处理时间,表明有需要使用该第一数据,则确定上述更新请求合理。
[0063] 具体实施时,为了避免采用已经或即将过期的第一数据(可以理解为无需使用到的数据)对离散缓存中的缓存单元进行更新,从而浪费计算资源,本申请实施例提供的一种可选实施方式中,所述基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测,具体采用如下方式实现:
[0064] 确定所述目标对象中第二数据的缓存队列中存储的第二数据在所述目标对象中对应的推移时间区间;
[0065] 基于所述更新请求中携带的所述推移时间,判断所述推移时间是否位于所述推移时间区间;
[0066] 若是,确定所述合理性检测的检测结果为通过;
[0067] 若否,确定所述合理性检测的检测结果为不通过。
[0068] 所述缓存队列,可以理解为存储与目标对象具有时间上关联的第二数据的连续的缓存队列,实际应用中,由于第一数据和第二数据都与目标对象具有时间上的关联性,因此,第一数据与第二数据也存在时间上的关联性,则可以基于缓存队列中存储的待取用的第二数据的有效时间范围(即推移时间区间),检测意图获取的第一数据在离散缓存中的顺序合理性,即检测更新请求的合理性。
[0069] 其中,推移时间区间,与上述推移时间类似,可以理解为第二数据在目标对象中对应的时间区间,由于缓存队列中存储了至少一个第二数据,在第二数据为多个的情况下,各个第二数据之间的在目标对象中对应的时间区间可以是彼此连续的。
[0070] 以目标对象为视频、第一数据为视频帧、第二数据为音频数据为例,存储队列中存储待播放的音频数据(比如音频切片),而缓存队列中的音频切片在视频中对应的推移时间区间,可以为该缓存队列中存储于起始位置的音频切片在视频中对应的起始推移时间,并该缓存队列中存储于末尾的音频切片在视频中对应的结束推移时间,这两个时间之间的时间区间,此外,还可以为预先设定的缓存队列中的起始位置以及终止位置之间的第二数据在目标对象中对应的起始推移时间以及结束推移时间之间的时间区间等,在此不做限制。
[0071] 进一步的,在缓存队列中存在预设的滑动窗口的情况下,还可以基于滑动窗口,确定推移时间区间,具体采用如下方式实现:
[0072] 确定所述目标对象中第二数据的缓存队列中预设的滑动窗口内存储的第二数据在所述目标对象中对应的推移时间区间。
[0073] 实际应用中,滑动窗口可以对缓存队列中的数据进行区域边界限定,因此,可以采用滑动窗口的方式,对用于计算推移时间区间的第二数据进行边界限定;缓存队列是一个先进先出的队列,先进入的第二数据在目标对象中的推移时间靠前,而后进入的第二数据在目标视频中的推移时间靠后,滑动窗口中可以限定缓存队列中位于左边界的第二数据的位置以及位于右边界的第二数据的位置。
[0074] 具体实施时,可以在确定滑动窗口的位置之后,根据位于其边界的第二数据在目标对象中对应的推移时间,确定所述推移时间区间,此外,也可以对滑动窗口中第二数据对应的推移时间区间进行记录,从而避免针对该值进行多次计算。
[0075] 再进一步的,在目标对象为目标视频,第二数据为音频数据的情况下,所述确定所述目标对象中第二数据的缓存队列中预设的滑动窗口内存储的第二数据在所述目标对象中对应的推移时间区间,包括;
[0076] 确定所述目标视频中音频切片的音频缓存队列中预设的滑动窗口;
[0077] 根据所述滑动窗口,确定所述滑动窗口内存储的音频切片在所述目标视频中对应的推移时间区间。
[0078] 比如,每个音频切片有3毫秒固定播放时长,即每个音频切片在视频中都有对应的起始推移时间以及结束推移时间,而音频缓存队列中存储了3个音频切片,其中,存储于音频缓存队列中起始位置的音频切片的起始推移时间为6毫秒,存储于音频缓存队列中末尾位置的音频切片的结束推移时间为14毫秒,则音频缓存队列中的音频切片在所述视频中对应的推移时间区间为[6毫秒,14毫秒]。
[0079] 需要说明的是,由于音频切片之间的推移时间间隔较短,同时也在视频播放过程中被快速消耗,因此,在请求以视频帧更新离散缓存的缓存单元之后,以音频切片的在缓存队列中的推移时间区间对当前所请求的视频帧进行合理性检测,是为了避免所请求的视频帧早于该推移时间区间(因为若早于该推移时间区间,则表明即使对该视频帧进行处理,也来不及在视频中进行播放),也避免所请求视频帧晚于该推移时间区间(因为若晚于该推移时间区间,则表明对该视频帧进行处理的时间尚早,若过早对该视帧进行处理,可能造成对计算资源的占用)。
[0080] 比如,在请求的视频帧的推移时间为5毫秒的情况下,由于音频切片在的播放过程中该推移时间在上述推移时间区间之前,表明该视频帧已经过了/即将过视频的当前播放时间,也表明更新请求是不合理的,则确定所述合理性检测的检测结果为不通过;继续执行下述步骤306;在请求的视频帧的推移时间为10毫秒的情况下,该推移时间在上述推移时间区间之间,表明该视频帧为有效的视频帧,也可以表明更新请求是合理的,则确定所述合理性检测的检测结果为通过,继续执行步骤306。
[0081] 步骤306:在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元。
[0082] 具体的,在合理性检测的检测结果为不通过的情况下,表明上述更新请求不合理,则可不做处理,或可以将该更新请求对应的第一数据丢弃,并可以重新获取下一第一数据,即确定不执行所述更新请求;此外,也可以将该检测结果发送至请求方,以便请求方基于该检测结果,下达是否执行该更新请求的指示,若仍指示执行该更新请求,则确定仍执行该更新请求;在合理性检测的检测结果为通过的情况下,表明上述更新请求合理,则可以直接确定执行所述更新请求。
[0083] 所述第一状态,可以理解为用于标记离散缓存中的缓存单元是可用状态/可更新状态,即该缓存单元是否是空余的。
[0084] 在离散缓存中存在至少两个缓存单元的情况下,本申请实施例提供的一种可选实施方式中,所述离散缓存中存在第一状态的目标缓存单元,具体采用如下方式实现:
[0085] 在所述离散缓存中筛选出缓存状态为所述第一状态的至少一个缓存单元;
[0086] 基于预设选取规则,确定所述至少一个缓存单元中的所述目标缓存单元。
[0087] 实际应用中,离散缓存中的缓存单元可能不止一个处于可用状态/可更新状态(即第一状态),则可以按照预先设置的选取规则(即预设选取规则,比如随机、或按照缓存单元对应的缓存地址从小到大的顺序等)进行目标缓存单元的选取,其中,所述目标缓存单元,是指更新请求对应的待进行数据更新的缓存单元,本申请实施例,通过在离散缓存中按照预设选取规则,筛选可用的缓存单元(即目标缓存单元)进行缓存更新,实现了针对目标缓存单元的灵活选取。
[0088] 进一步的,在本申请实施例提供的一种可选实施方式中,所述将所述第一数据填充至所述目标缓存单元之前,还包括:
[0089] 将所述目标缓存单元的缓存状态从所述第一状态更新为第二状态。
[0090] 其中,所述缓存状态,可以理解为针对缓存单元的一个缓存标记位,该值可以采用布尔值进行表示,其中,true表示该缓存单元为可用状态/可更新状态/未被占用的状态(即第一状态),false表示该缓存单元为不可用状态/不可更新状态/已被占用的状态(即第二状态),此外,该值也可以采用0、1或其他字符串进行表示,在此不做限制。
[0091] 实际应用中,在确定目标缓存单元之后,需要对该目标缓存单元进行更新,则将该目标缓存单元的缓存状态从第一状态更新为第二状态,用以表明该目标缓存单元已被占用,以避免被其他数据更新该目标缓存单元。
[0092] 本申请说明书,通过第一状态以及第二状态对目标缓存单元的缓存状态进行标记,以便可以获知该目标缓存单元是否可用,并通过对目标缓存单元的缓存状态进行及时更新,保障了对目标缓存单元的缓存状态进行及时标记。
[0093] 具体实施时,为了本申请实施例提供的一种可选实施方式中,所述将所述第一数据填充至所述目标缓存单元,包括:
[0094] 确定所述目标缓存单元对应的缓存标识;
[0095] 基于所述缓存标识,将所述第一数据填充至所述目标缓存单元。
[0096] 其中,缓存标识,也可以是用以唯一标识一个缓存单元,在第一数据为图片的情况下,该缓存标识也可以理解为纹理标识,用于标记一张图片所代表的内存空间(即缓存单元),该缓存标识和离散缓存中缓存单元的地址之间存在映射关系,缓存标识会映射到一个指向对应内存地址的指针上,也就是说缓存标识是间接代表的目标缓存单元的这一段显存空间。
[0097] 确定目标缓存单元对应的缓存标识之后,可以根据所述推移时间进一步确定并获取所述第一数据,并将所述第一数据填充至所述目标缓存单元。
[0098] 实际应用中,还可以通过第一数据的数据提供方(比如数据提供程序)将第一数据填充至目标缓存单元,而确定目标缓存单元对应的缓存标识,是为了将缓存标识提供至数据提供方,以便数据提供方对缓存标识对应的目标缓存单元进行数据填充(比如视频帧的填充)。
[0099] 具体实施时,在确定目标缓存单元的缓存标识之后,基于所述缓存标识,向所述第一数据对应的数据提供方发送针对所述目标缓存单元的数据获取请求/通知(具体的,该数据获取请求/通知可以通过构建的数据通道进行发送),其中,所述数据获取请求/通知中携带所述缓存标识以及第一数据在目标对象中对应的推移时间;
[0100] 数据提供方接收到所述数据获取请求/通知,可以基于该数据获取请求携带的第一数据在目标对象中对应的推移时间,确定待提供的第一数据;在确定待提供的第一数据之后,可以先对待提供的第一数据进行数据处理(比如先对视频帧进行渲染处理),再将处理后的第一数据填充至所述缓存标识指向的目标缓存单元;并在填充完成的情况下,发送针对所述目标缓存单元的填充完成通知,其中,所述填充完成通知中携带所述目标缓存单元的缓存标识;
[0101] 在接收到所述填充完成通知之后,基于所述缓存标识,确定所述目标缓存单元,并将所述目标缓存单元的填充状态从待填充状态标记为填充完成状态。
[0102] 其中,填充状态,用于表示该缓存单元中的数据是否已被填充完成,实际应用中,该状态标记为的值也可以采用布尔值表示,其中,true表示待填充状态,false表示填充完成状态。
[0103] 在第一数据为视频帧的情况下,数据提供方可以在确定待提供的视频帧之后,先对待提供的视频帧进行渲染处理,再将渲染后的视频帧填充至目标缓存单元。
[0104] 本申请实施例,通过提供缓存标识,对目标缓存单元进行更新,避免了直接暴露整个缓存机制的处理过程,也保障了缓存更新过程的安全性。
[0105] 步骤308:在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付。
[0106] 具体的,对目标缓存单元中的第一数据进行交付,可以理解为将目标缓存单元中的第一数据提供给数据请求方。
[0107] 实际应用中,对所述目标缓存单元中的第一数据进行交付之前,可以对该第一数据进行其他数据处理,比如,在第一数据为视频帧的情况下,在对视频帧进行交付之前,可以对目标缓存单元中的视频帧进行渲染,而对视频帧进行渲染是为了将其交付之后的播放展示做准备。
[0108] 具体的,在上述将所述目标缓存单元的缓存状态从所述第一状态更新为第二状态的基础上,在所述对所述目标缓存单元中的所述第一数据进行交付之后,还包括:
[0109] 将所述目标缓存单元的缓存状态从所述第二状态更新为所述第一状态。
[0110] 实际应用中,在选取第一状态的目标缓存单元之后,为了避免其他数据占用或再次更新该目标缓存单元,将该目标缓存单元的缓存状态更新为第二状态,进一步的,在对该目标缓存单元更新之后,并将该目标缓存单元中存储的第一数据交付之后,目标缓存单元变为空余,则为了表明该目标缓存单元是可用状态/可更新状态,需要将该目标缓存单元的缓存状态从第二状态更新为第一状态。
[0111] 本申请实施例,在交付完成后将目标缓存单元的缓存状态更新为第一状态,可以使该目标缓存单元重新用以存储其他数据,即被其他数据更新,也实现了基于状态控制对目标缓存单元进行更新。即通过对离散缓存中空余的目标缓存单元进行数据填充,有效地利用了离散缓存中至少两个缓存单元,并实现了在各个缓存单元中轮替进行数据更新,即无需完成上一第一数据的处理更新之后,再对下一第一数据进行处理更新,减少了各个第一数据之间进行处理更新的等待时间,也实现了较低的缓存单元的占用。
[0112] 实际应用中,在所述第一数据包括:视频帧,所述第二数据包括:音频切片,所述目标对象包括:目标视频的情况下,基于离散缓存中缓存单元的状态对缓存单元进行交替更新,也减少了各个视频帧之间进行处理更新的等待时间,还实现了较低缓存占用的稳定刷新率处理,即在相同刷新率情况下,使针对视频帧处理的特效及渲染操作变得更为丰富,还可以实现更多的复杂渲染过程,提高用户针对视频的观看体验。
[0113] 本申请实施例提供的一种可选实施方式中,所述缓存更新方法,所述在请求使用所述目标缓存单元中的所述第一数据时,还包括:
[0114] 接收针对视频帧的使用请求;
[0115] 响应于所述使用请求,确定所述离散缓存的缓存单元中的视频帧在所述目标视频中对应的推移时间;
[0116] 根据所述离散缓存的缓存单元中的视频帧在所述目标视频中对应的推移时间与所述使用请求中携带的目标推移时间之间的差值,确定所述目标缓存单元,并将所述目标缓存单元中的视频帧进行交付。
[0117] 其中,所述使用请求,可以理解为针对离散缓存中缓存单元中存储的视频帧的获取请求,实际应用中,在对目标视频进行播放的过程中,需要按照播放界面的播放推移时间(目标推移时间)获取目标视频的视频帧,并将获取的视频帧在目标视频的播放界面进行展示,也即通过获取的视频帧刷新目标视频的播放界面。
[0118] 进一步的,在接收针对视频帧的使用请求之后,响应于该使用请求,确定所述离散缓存的缓存单元中的视频帧在目标视频中对应的推移时间。并计算该推移时间与所述使用请求中携带的目标推移时间之间的差值,从而在至少一个缓存单元中确定推移时间与目标推移时间之间的差值最小的缓存单元,在该缓存单元为目标缓存单元的情况下,将目标缓存单元中的视频帧进行交付。
[0119] 具体实施时,可以每次获取一个缓存单元,并确定该缓存单元中视频帧在目标视频中对应的推移时间,计算该推移时间与所述使用请求中携带的目标推移时间之间的差值,再获取下一个缓存单元,确定该缓存单元中视频帧在目标视频中对应的推移时间,计算该推移时间与所述使用请求中携带的目标推移时间之间的差值,并比较两个差值,确定差值较小的缓存单元。接着,继续获取下一缓存单元,确定该缓存单元中视频帧在目标视频中对应的推移时间,计算该推移时间与所述使用请求中携带的目标推移时间之间的差值,并将该差值与上述确定的较小的差值进行比较,确定差值较小的缓存单元,以此类推,直至在至少一个缓存单元中确定推移时间与目标推移时间之间的差值最小的目标缓存单元,将目标缓存单元中的视频帧进行交付。
[0120] 进一步的,若在至少一个缓存单元中获取的任意一个缓存单元中的视频帧在目标视频中对应的推移时间与目标推移时间之间的差值不是最小,则可以继续判断推移时间是否小于目标推移时间,若推移时间小于目标推移时间,则表明该视频帧已经过期或无效,无需进行展示,则可以将该视频帧丢弃,或不做操作即可。
[0121] 其中,所述目标推移时间,可以理解为目标视频在播放界面的当前推移时间,比如目标视频的总时长为3分钟,当前播放到第50毫秒,则目标推移时间为50毫秒。
[0122] 需要说明的是,由于离散缓存中有些缓存单元是空余的(即没有填充视频帧),则可以不获取这些处于第一状态的缓存单元,只获取缓存状态为第二状态的缓存单元,并进一步确定这些第二状态的缓存单元中存储的视频帧在目标视频中对应的推移时间。
[0123] 此外,在缓存单元还存在填充状态的标记位的情况下,为了避免交付还未填充完成的视频帧,还需在确定目标缓存单元之前,判断该目标缓存单元的填充状态是否为填充完成状态。具体的,在确定所述离散缓存的缓存单元中的视频帧在所述目标视频中对应的推移时间之前或之后,判断该目标缓存单元的填充状态是否为填充完成状态,若目标缓存单元的填充状态是填充完成状态,则将所述目标缓存单元中的视频帧交付给数据请求方,若目标缓存单元的填充状态不是填充完成状态,则继续判断该目标缓存单元对应的推移时间是否在目标推移时间之前,若是,表明该目标缓存单元中存储的视频帧已过期或无效,则将该目标缓存单元的缓存状态更新为第一状态,并将其填充状态更新为待填充状态。
[0124] 实际应用中,在对目标缓存单元中的视频帧进行交付之前,还可以对该视频帧进行展示前的渲染,并将渲染完成的视频帧进行交付,以便将请求使用的视频帧对在播放界面进行展示。
[0125] 本申请实施例,通过将所述差值最小的缓存单元对应的视频帧作为待展示的视频帧进行交付,是为了确定推移时间距离目标视频的当前播放时间最接近的视频帧,此外,还需要确定目标缓存单元的填充状态是否为填充完成状态,即是否已经完成了对该缓存单元的数据填充,在完成数据填充的情况下,将目标缓存单元中的视频帧刷新至播放界面,保障了对播放界面的有效刷新。
[0126] 实际应用中,在目标视频进行播放的过程中,除了对存储视频帧的离散缓存进行更新之外,还需要对存储音频数据的音频缓存队列进行更新,以便针对目标视频的播放提供待播放的音频切片,本申请实施例提供的一种可选实施方式中,所述缓存更新方法,还包括:
[0127] 接收针对目标视频的音频切片的音频缓存队列的队列更新请求;
[0128] 在所述音频缓存队列中存在空余的音频缓存单元的情况下,根据所述队列更新请求中携带的音频推移时间,将所述音频推移时间对应的音频切片填充至所述音频缓存队列。
[0129] 具体的,对音频缓存队列的更新,是指将音频切片,填充至音频缓存队列,以实现对音频缓存队列中音频缓存单元的更新。实际应用中,由于针对音频数据的预处理速度相对于其消耗速度更快,因此,需要在确定音频缓存队列存在空余的频缓存单元(可以理解为音频缓存队列中的缓存空间)的情况下,才根据队列更新请求,对音频缓存队列进行更新。
[0130] 具体实施时,将音频推移时间对应的音频切片填充至所述音频缓存队列,可以理解为先根据音频推移时间,确定与音频推移时间对应的音频切片,并将确定的音频切片填充至音频缓存队列。
[0131] 此外,还可以通过音频提供方对该音频切片进行填充,具体的,在所述音频缓存队列中存在空余的音频缓存单元的情况下,向音频提供方发送针对音频数据的音频获取请求,所述音频获取请求中携带音频推移时间,音频提供方接收到该音频获取请求之后,基于音频推移时间,确定与音频推移时间对应的音频切片,并将音频切片填充至音频缓存队列,以对音频缓存队列进行更新。
[0132] 类似的,在对目标视频进行播放的过程中,除了进行播放界面的展示刷新之外,还需要从音频缓存队列获取待播放的音频切片,对播放界面的音频进行刷新,以实现针对目标视频中视频数据和音频数据的同步播放,本申请实施例提供的一种可选实施方式中,所述缓存更新方法,还包括:
[0133] 接收针对所述音频缓存队列中音频切片的音频使用请求;
[0134] 基于所述音频使用请求中携带的目标音频推移时间,将所述音频缓存队列中与所述目标音频推移时间对应的音频切片进行交付。
[0135] 具体实施时,基于音频使用请求,将音频缓存队列中于目标音频推移时间对应的音频切片进行交付,可以理解为,将目标音频推移时间对应的音频切片作为待播放的音频切片,并将缓存音频切片提供至播放界面进行播放(即音频刷新)。
[0136] 进一步的,在上述通过对音频缓存队列进行更新,或获取该音频缓存队列中的音频切片之后,由于音频缓存队列中包含的音频切片的数量发生了变化,则音频缓存队列中音频切片在目标视频中对应的推移时间区间可能也发生了变化,因此,在上述根据所述滑动窗口,确定所述滑动窗口内存储的音频切片在所述目标视频中对应的推移时间区间的情况下,在所述将所述音频推移时间对应的音频切片填充至所述音频缓存队列之后,和/或,在将所述音频缓存队列中与所述目标音频推移时间对应的音频切片进行交付之后,还包括:
[0137] 更新所述音频缓存队列中的滑动窗口,并更新所述滑动窗口内音频切片在所述目标视频中对应的推移时间区间。
[0138] 实际应用中,由于在确定更新请求是否合理的过程中(即所请求的视频帧是否有效的过程中),需要通过判断目标视频帧的推移时间是否在推移时间区间内,因此,为了避免每次判断过程中对推移时间区间进行计算,可以在音频缓存队列中的音频切片发生变更(存储/取出)后,重新计算该推移时间区间,并对已存储的推移时间区间进行更新。
[0139] 需要说明的是,由于在所述音频缓存队列添加了目标音频切片之后,音频缓存队列中所存放的音频切片在目标视频中对应的推移时间区间发生了改变,因此需要根据新增的目标音频切片的推移时长,对推移时间区间进行更新,即通过将推移时间区间的推移结束时间增加该推移时长,并以实现对推移时间区间的更新。
[0140] 此外,由于从所述音频缓存队列中获取(取出)缓存音频切片之后,音频缓存队列中存放的音频切片在目标视频中对应的推移时间区间也发生了改变,因此需要根据缓存音频切片的推移时长,对推移时间区间进行更新,即通过将推移时间区间的起始时间增加该推移时长,以实现对推移时间区间的更新。
[0141] 相应的,在使用滑动窗口音频缓存队列中用于计算推移时间区间的边界进行限定的情况下,由于音频缓存队列中音频切片发生了变更,则音频缓存队列中的滑动窗口的位置也会发生滑动,因此,基于音频缓存队列中音频切片的变更(存储或取出),对音频缓存队列中的滑动窗口的位置进行变更,且在滑动窗口变更后,重新计算其内音频切片在目标视频中对应的推移时间区间,并基于计算结果更新滑动窗口对应的推移时间区间,实现了对推移时间区间进行及时更新,避免了多次重复计算该推移时间区间。
[0142] 综上所述,本申请提供的缓存更新方法,通过接收针对离散缓存中缓存单元的更新请求;基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测;在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元;在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付,实现了基于数据的合理性检测,从由至少一个缓存单元组成的离散缓存中选取第一状态的目标缓存单元进行更新,即通过时间的合理性以及对离散缓存中缓存单元的状态控制,实现对缓存单元的轮替更新,则无需完成前一帧第一数据的处理之后,再对下一第一数据进行处理,减少了各个第一数据之间进行处理的等待时间,还实现了较低的缓存的占用。
[0143] 下述结合附图4,以本申请提供的缓存更新方法在视频播放场景中的应用为例,对所述缓存更新方法进行进一步说明。其中,图4示出了本申请一实施例提供的一种应用于视频播放场景中的缓存更新方法的处理流程图,具体包括以下步骤:
[0144] 步骤402:请求更新交叉缓存视频数据(时间戳)。
[0145] 具体的,本方法实施例为异步缓冲更新策略,在针对交叉缓存的更新请求触发(视频)的情况下,执行步骤402。
[0146] 其中,交叉缓存可以理解为上述实施例中的离散缓存,进一步,请求交叉缓存视频数据:是指通过请求指定时间戳(可以理解为上述实施例中的推移时间)的视频帧对交叉缓存进行更新。该对交叉缓存进行更新的请求可以理解为上述实施例中的缓存更新请求,是基于时钟信号进行触发的,而该请求(可以理解为上述实施例中的更新请求)中携带指定用于更新交叉缓存的视频帧的时间戳,具体的,交叉缓存中包括2个单元(即交叉存储单元,也可以理解为上述实施例中的缓存单元)。
[0147] 进一步的,步骤402,包括步骤404‑步骤414。
[0148] 步骤404:判断是否位于滑动窗口内。
[0149] 具体的,所述滑动窗口,可以理解为上述实施例音频缓存队列中滑动窗口内的音频切片在目标视频中对应的推移时间区间。而判断是否位于滑动窗口内,是指判断待用于更新交叉缓存的视频数据(即上述实施例中的目标视频帧)是否为有效视频帧,也即对上述更新请求进行合理性检测。
[0150] 步骤406:判断是否存在可更新交叉缓存单元。
[0151] 具体的,可以理解为判断上述离散缓存即交叉缓存中是否存在可用状态/可更新状态(即缓存状态为第一状态)的交叉缓存单元,该可更新交叉缓存单元可以理解为上述实施例中的目标缓存单元。
[0152] 步骤408:标记分配到的缓存单元。
[0153] 具体的,是指将上述可更新交叉缓存单元的可更新标志(可以理解为上述实施例中的缓存状态),标记为不可更新状态(即上述实施例中的第二状态),实际应用中该可更新标志的值可以采用布尔值(bool),比如:用true(真)表示可更新状态,可以理解为上述实施例中的第一状态,即该缓存单元可用,false(假)表示不可更新,通过查询该可更新标志的值,即表示对可用缓存单元的查询。
[0154] 步骤410:触发数据填充通知。
[0155] 即触发针对目标视频帧进行填充的通知,具体的,该通知中提供缓存单元纹理标识,可以理解为上述实施例中目标缓存单元的缓存标识。
[0156] 步骤412:标记可更新交叉缓存单元:可更新标志false。
[0157] 具体的,将可更新交叉缓存单元的可更新标志从true标记为false。
[0158] 步骤414:请求更新(视频)。
[0159] 具体的,是指在通过步骤410提供缓存单元的纹理标识,调用针对交叉缓存的更新接口,以实现对交叉缓存单元的视频帧的填充。
[0160] 步骤416:通知视频数据填充完成(纹理空间标识)
[0161] 具体的,是在视频更新完毕后通知视频数据填充(更新)完成。
[0162] 进一步的,步骤416包括步骤418‑步骤420。
[0163] 步骤418:获取关联交叉缓存单元。
[0164] 具体的,在通知对交叉缓存单元完成填充之后,需要获取该交叉缓存单元,具体的,是指获取交叉缓存单元的缓存标识等可以用以标识该交叉缓存单元的标识。
[0165] 步骤420:标记交叉缓存单元:数据已填充true。
[0166] 进一步的在对交叉缓存单元完成更新(填充)的基础上,根据获取上述获取的交叉缓存单元的缓存标识,将该交叉缓存单元的数据已填充(可以理解为上述实施例中的填充状态)的标志,可以理解为上述实施例中的填充状态,从false标记为true(可以理解为上述实施例中的填充完成状态)。
[0167] 以上是对交叉缓存进行更新的具体实现。此外,可以异步地执行步骤422,以对视频的播放界面进行刷新。
[0168] 步骤422:请求视频刷新界面(刷新时间戳)
[0169] 具体的,在使用请求(视频),即请求使用视频帧进行播放的情况下,通过获取交叉缓存单元中存储的视频帧对目标视频的播放界面(界面)进行刷新,其中,刷新时间戳,是指请求中携带的刷新时间戳,具体的,该刷新时间戳可以理解为目标视频在播放界面中的播放时间。
[0170] 进一步的,步骤422,包括步骤424‑步骤434。
[0171] 步骤424:获取交叉缓存单元。
[0172] 具体的,可以理解为对非空的交叉缓存单元中存储的视频帧进行获取。
[0173] 步骤426:判断是否是最近时间点缓存;
[0174] 在判断结果为是情况下,执行步骤428;
[0175] 在判断结果为否情况下,执行步骤430。
[0176] 具体的,是将在非空的交叉缓存单元中存储的视频帧的推移时间与播放界面的当前播放时间(最近时间点,也可以理解为上述目标推移时间)进行对比,从而确定推移时间与当前播放时间的时间差值,并根据时间差值确定是否是最近时间点缓存。
[0177] 在非空的交叉缓存单元存在多个的情况下,将获取的多个视频帧的推移时间分别与当前播放时间进行对比,确定哪个视频帧最邻近当前播放时间,实际应用中,可以采用循环的方式对每个交叉缓存单元中的视频帧进行获取并判断是否是与当前播放时间的时间差值最小的视频帧。
[0178] 步骤428:判断标志:数据已填充是否为true。
[0179] 在判断结果为是情况下,表明上述交叉缓存单元中存储的视频帧已完成填充,则执行步骤432;
[0180] 在判断结果为否情况下,表明上述交叉缓存单元中存储的视频帧还未完成填充,则执行步骤430。
[0181] 具体的,判断最邻近当前播放时间的交叉缓存单元中的数据已填充的标志是否为true。
[0182] 步骤430:判断缓存时间戳是否小于刷新时间戳;
[0183] 在判断结果为是的情况下,表明该交叉缓存中存储的视频帧的推移时间已经小于当前播放时间,则表明该视频帧已过期,执行步骤434;
[0184] 在判断结果为否的情况下,表明该交叉缓存中存储的视频帧的推移时间还未小于当前播放时间,执行步骤424。
[0185] 步骤432:提供可用刷新数据。
[0186] 具体实施时,将该缓存单元中的视频帧提供至播放界面,以对播放界面进行刷新。
[0187] 步骤434:重置交叉缓存单元:可更新标志:true,数据已填充:false。
[0188] 具体的,将过期的交叉缓存单元的可更新标志,标记为true,并将其数据已填充标志,标记为false,目的是将该交叉缓存单元重新提供出去,以便对新的视频帧进行填充处理。
[0189] 除上述对视频数据的处理之外,还包括针对音频数据的处理,可参见步骤436,该步骤与上述步骤之间是异步处理,因此无处理时间先后的区分。
[0190] 步骤436:请求更新缓存音频数据(时间戳)
[0191] 具体的,在更新请求触发(音频)的情况下,执行步骤436;
[0192] 进一步的,步骤436,包括步骤438‑步骤446。
[0193] 步骤438:查询音频缓存队列空间是否存在空余。
[0194] 具体的,是指查询所述音频缓存队列中是否存在空余的存储空间或音频缓存单元,而该音频缓存队列为先进先出(First In First Out,FIFO)队列(List)。
[0195] 判断结果为是情况下,执行步骤440。
[0196] 步骤440:触发数据填充通知。
[0197] 具体的,该通知为触发通过音频数据对音频缓存队列进行填充的通知,该通知中可以提供音频缓存队列的队列标识以及待填充音频数据对应的音频推移时间。
[0198] 步骤442:请求更新(音频)。
[0199] 具体的,是通过步骤440提供音频缓存队列中的队列标识,调用针对音频缓存队列的更新接口,以实现对音频缓存队列中的音频数据的填充。
[0200] 进一步的,在步骤442更新完毕的情况下,执行步骤444。
[0201] 步骤444:重新计算更新滑动窗口。
[0202] 具体的,重新计算更新滑动窗口,是指在提供音频切片之后,音频缓存队列中的音频切片数量发生了变更,则需要重新计算音频缓存队列中的滑动窗口,即对滑动窗口的边界位置,以及滑动窗口内音频切片对应的推移时间区间等进行计算并更新。
[0203] 步骤446:打包音频切片。
[0204] 具体的,打包音频切片,可以理解为对填充的音频数据按照预设时长进行切片处理,并将处理获得的音频切片存储/更新至音频缓存队列,其中处理获得音频切片包括预设时长的切片数据(chunk_data)以及切片索引(chunk_index),以便对音频切片进行标识/查找。
[0205] 进一步的在对音频缓存队列完成更新的基础上,可以异步地执行步骤448,以对音频进行刷新。
[0206] 步骤448:请求音频数据播放(刷新时间戳)。
[0207] 具体的,是在数据使用请求(音频),即请求使用音频数据(音频切片)对播放界面近刷新的情况下,通过音频缓存队列中的音频切片对目标视频的播放界面进行刷新。
[0208] 进一步的,步骤448,包括步骤450‑步骤456。
[0209] 步骤450:从音频缓存队列中获取先入数据。
[0210] 具体的,该数据可以理解为该音频缓存队列中存储在首位的待播放的音频切片。
[0211] 步骤452:提供可用播放切片。
[0212] 具体的,是指提供可用于对播放界面进行播放刷新的音频切片。
[0213] 步骤454:重新计算滑动窗口。
[0214] 具体的,是指在提供音频切片之后,音频缓存队列中的音频切片数量发生了变更,则需要重新计算音频缓存队列中的滑动窗口,即对滑动窗口的边界位置、切片长度、数据格式,以及滑动窗口内音频切片对应的推移时间区间等进行计算并更新。
[0215] 步骤456:清空使用切片,并更新队列空余。
[0216] 在更新完成后,对音频缓存队列中已经获取的音频切片进行清空,并通过更新音频缓存队列的队首以及队尾将音频缓存队列的空余进行更新。
[0217] 综上所述,本申请提供的缓存更新方法,通过接收针对离散缓存中缓存单元的更新请求;基于所述更新请求中携带的针对待用于更新的视频帧在目标对象中对应的推移时间,对所述更新请求进行合理性检测;在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述视频帧填充至所述目标缓存单元;在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述视频帧进行交付,实现了基于数据的合理性检测,从由至少一个缓存单元组成的离散缓存中选取第一状态的目标缓存单元进行更新,即通过时间的合理性以及对离散缓存中缓存单元的状态控制,实现对缓存单元的轮替更新,则无需完成前一帧第一数据的处理之后,再对下一第一数据进行处理,减少了各个第一数据之间进行处理的等待时间,还实现了较低的缓存的占用,提高了针对目标视频中的视频帧的处理效率,若在处理效率类似的情况下,则使能够针对视频帧处理的特效及渲染操作变得更为丰富,还可以实现更多的复杂渲染过程,提高用户针对目标视频的体验。
[0218] 与上述方法实施例相对应,本申请还提供了缓存更新装置实施例,图5示出了本申请一实施例提供的一种缓存更新装置的结构示意图。如图5所示,该装置包括:
[0219] 接收模块502,被配置为接收针对离散缓存中缓存单元的更新请求;
[0220] 检测模块504,被配置为基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测;
[0221] 填充模块506,被配置为在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元;
[0222] 交付模块508,被配置为在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付。
[0223] 可选地,所述检测模块504,包括:
[0224] 确定区间子模块,被配置为确定所述目标对象中第二数据的缓存队列中存储的第二数据在所述目标对象中对应的推移时间区间;
[0225] 判断子模块,被配置为基于所述更新请求中携带的所述推移时间,判断所述推移时间是否位于所述推移时间区间;若是,确定所述合理性检测的检测结果为通过;若否,确定所述合理性检测的检测结果为不通过。
[0226] 可选地,所述离散缓存中存在缓存状态为第一状态的目标缓存单元,包括:
[0227] 在所述离散缓存中筛选出缓存状态为所述第一状态的至少一个缓存单元;
[0228] 基于预设选取规则,确定所述至少一个缓存单元中的所述目标缓存单元。
[0229] 可选地,所述填充模块506,包括:
[0230] 确定所述目标缓存单元对应的缓存标识;
[0231] 基于所述缓存标识,将所述第一数据填充至所述目标缓存单元。
[0232] 可选地,所述缓存更新装置,还包括:
[0233] 第一状态更新模块,被配置为将所述目标缓存单元的缓存状态从所述第一状态更新为第二状态;
[0234] 相应的,所述缓存更新装置,还包括:
[0235] 第二状态更新模块,被配置为将所述目标缓存单元的缓存状态从所述第二状态更新为所述第一状态。
[0236] 可选地,所述第一数据包括:视频帧,所述第二数据包括:音频切片,所述目标对象包括:目标视频。
[0237] 可选地,所述交付模块508,进一步被配置为:
[0238] 接收针对视频帧的使用请求;
[0239] 响应于所述使用请求,确定所述离散缓存的缓存单元中的视频帧在所述目标视频中对应的推移时间;
[0240] 根据所述离散缓存的缓存单元中的视频帧在所述目标视频中对应的推移时间与所述使用请求中携带的目标推移时间之间的差值,确定所述目标缓存单元,并将所述目标缓存单元中的视频帧进行交付。
[0241] 可选地,所述缓存更新装置,还包括:
[0242] 接收更新请求模块,被配置为接收针对目标视频的音频切片的音频缓存队列的队列更新请求;
[0243] 音频填充模块,被配置为在所述音频缓存队列中存在空余的音频缓存单元的情况下,根据所述队列更新请求中携带的音频推移时间,将所述音频推移时间对应的音频切片填充至所述音频缓存队列。
[0244] 可选地,所述缓存更新装置,还包括:
[0245] 接收使用请求模块,被配置为接收针对所述音频缓存队列中音频切片的音频使用请求;
[0246] 音频交付模块,被配置为基于所述音频使用请求中携带的目标音频推移时间,将所述音频缓存队列中与所述目标音频推移时间对应的音频切片进行交付。
[0247] 可选地,所述确定区间子,进一步被配置为:
[0248] 确定所述目标视频中音频切片的音频缓存队列中预设的滑动窗口;
[0249] 根据所述滑动窗口,确定所述滑动窗口内存储的音频切片在所述目标视频中对应的推移时间区间;
[0250] 相应的,所述将所述音频推移时间对应的音频切片填充至所述音频缓存队列之后,和/或,将所述音频缓存队列中与所述目标音频推移时间对应的音频切片进行交付之后,还包括:
[0251] 更新所述音频缓存队列中的滑动窗口,并更新所述滑动窗口内音频切片在所述目标视频中对应的推移时间区间。
[0252] 综上所述,本申请提供的缓存更新装置,通过接收针对离散缓存中缓存单元的更新请求;基于所述更新请求中携带的针对待用于更新的第一数据在目标对象中对应的推移时间,对所述更新请求进行合理性检测;在基于所述合理性检测的检测结果确定执行所述更新请求,且在所述离散缓存中存在缓存状态为第一状态的目标缓存单元的情况下,将所述第一数据填充至所述目标缓存单元;在请求使用所述目标缓存单元中的所述第一数据时,对所述目标缓存单元中的所述第一数据进行交付,实现了基于数据的合理性检测,从由至少一个缓存单元组成的离散缓存中选取第一状态的目标缓存单元进行更新,即通过时间的合理性以及对离散缓存中缓存单元的状态控制,实现对缓存单元的轮替更新,则无需完成前一帧第一数据的处理之后,再对下一第一数据进行处理,减少了各个第一数据之间进行处理的等待时间,还实现了较低的缓存的占用。
[0253] 上述为本实施例的一种缓存更新装置的示意性方案。需要说明的是,该缓存更新装置的技术方案与上述的缓存更新方法的技术方案属于同一构思,缓存更新装置的技术方案未详细描述的细节内容,均可以参见上述缓存更新方法的技术方案的描述。
[0254] 图6示出了根据本说明书一个实施例提供的一种计算设备600的结构框图。该计算设备600的部件包括但不限于存储器610和处理器620。处理器620与存储器610通过总线630相连接,数据库650用于保存数据。
[0255] 计算设备600还包括接入设备640,接入设备640使得计算设备600能够经由一个或多个网络660通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备640可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi‑MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
[0256] 在本说明书的一个实施例中,计算设备600的上述部件以及图6中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图6所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
[0257] 计算设备600可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备600还可以是移动式或静止式的服务器。
[0258] 其中,处理器620用于执行所述计算机指令时实现所述的缓存更新方法的步骤。
[0259] 上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的缓存更新方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述缓存更新方法的技术方案的描述。
[0260] 本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,所述计算机指令被处理器执行时实现如前所述缓存更新方法的步骤。
[0261] 上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的缓存更新方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述缓存更新方法的技术方案的描述。
[0262] 上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0263] 所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0264] 需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
[0265] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0266] 以上公开的本申请优选实施例只是用于帮助阐述本申请。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本申请的内容,可作很多的修改和变化。本申请选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本申请仅受权利要求书及其全部范围和等效物的限制。