基于弹幕顺序的弹幕分发方法、装置、设备和存储介质转让专利

申请号 : CN201811152571.1

文献号 : CN109379605A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张磊

申请人 : 武汉斗鱼网络科技有限公司

摘要 :

本发明实施例公开了一种基于弹幕顺序的弹幕分发方法、装置、设备和存储介质。该方法包括:在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取当前并发数量的待分发弹幕消息;将各待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;依据关联弹幕消息的关联数量和当前并发数量,确定剩余并发数量,并依据剩余并发数量确定修正并发数量的分发线程;基于弹幕消息分发机制,利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息。通过上述技术方案,实现了顺序且高效地分发弹幕消息,提高弹幕消息的分发时效性及分发准确性。

权利要求 :

1.一种基于弹幕顺序的弹幕分发方法,其特征在于,包括:

在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取所述当前并发数量的待分发弹幕消息;

将各所述待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;

依据所述关联弹幕消息的关联数量和所述当前并发数量,确定剩余并发数量,并依据所述剩余并发数量确定修正并发数量的分发线程;

基于弹幕消息分发机制,利用各所述分发线程串行式分发各所述关联弹幕消息,以及并行式分发各所述待分发弹幕消息中的各剩余弹幕消息。

2.根据权利要求1所述的方法,其特征在于,将各所述待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息包括:依据各所述待分发弹幕消息的消息标识,确定各所述待分发弹幕消息对应的对象集合;

将各所述对象集合中存在相同的弹幕接收对象的各关联对象集合对应的所述待分发弹幕消息,确定为各所述关联弹幕消息,其中,所述关联对象集合的数量为至少两个。

3.根据权利要求1所述的方法,其特征在于,利用各所述分发线程串行式分发各所述关联弹幕消息,以及并行式分发各所述待分发弹幕消息中的各剩余弹幕消息包括:利用所述剩余并发数量的所述分发线程并行分发各所述剩余弹幕消息,并利用各所述分发线程中的各剩余分发线程一一对应地分发各关联消息组内的各所述关联弹幕消息。

4.根据权利要求1所述的方法,其特征在于,利用各所述分发线程串行式分发各所述关联弹幕消息,以及并行式分发各所述待分发弹幕消息中的各剩余弹幕消息包括:依据各关联消息组内各所述关联弹幕消息的消息排序,将每个所述关联消息组内的第一个所述关联弹幕消息均作为并发关联弹幕消息;

利用各所述分发线程并行分发各所述并发关联弹幕消息和各所述剩余弹幕消息;

依据所述消息排序,依次从各剩余关联弹幕消息中确定一个目标弹幕消息,并利用各所述分发线程中的任一空闲线程分发所述目标弹幕消息。

5.根据权利要求1所述的方法,其特征在于,所述弹幕消息分发机制包括:依据弹幕消息的消息标识,从引用对象集合中获取与所述消息标识对应的目标弹幕接收对象,其中,所述引用对象集合存储继承了预先定义的弹幕分发协议的弹幕接收对象,所述弹幕分发协议为具有公有权限标识符的接口类型的协议;

依据所述弹幕分发协议,将所述目标弹幕接收对象转换为弹幕分发协议类型的对象,作为目标接收对象;

以所述弹幕消息为函数输入参数,通过所述目标接收对象调用弹幕分发函数,将所述弹幕消息分发至所述目标接收对象,其中,所述弹幕分发函数为所述弹幕分发协议的内部函数。

6.根据权利要求1所述的方法,其特征在于,所述满足多线程弹幕分发条件包括:消息并发定时器的当前定时周期到达,其中,所述当前定时周期依据所述当前并发数量的上一个历史并发数量确定。

7.根据权利要求1所述的方法,其特征在于,所述依据当前系统状态参数值确定弹幕消息的当前并发数量包括:当所述系统状态参数为所述当前CPU占用率时,依据所述当前CPU占用率和预先设定的并发数量求解公式确定所述当前并发数量。

8.一种基于弹幕顺序的弹幕分发装置,其特征在于,包括:

当前并发数量确定模块,用于在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取所述当前并发数量的待分发弹幕消息;

关联弹幕消息确定模块,用于将各所述待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;

分发线程确定模块,用于依据所述关联弹幕消息的关联数量和所述当前并发数量,确定剩余并发数量,并依据所述剩余并发数量确定修正并发数量的分发线程;

弹幕消息分发模块,用于基于弹幕消息分发机制,利用各所述分发线程串行式分发各所述关联弹幕消息,以及并行式分发各所述待分发弹幕消息中的各剩余弹幕消息。

9.一种设备,其特征在于,所述设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的基于弹幕顺序的弹幕分发方法。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一所述的基于弹幕顺序的弹幕分发方法。

说明书 :

基于弹幕顺序的弹幕分发方法、装置、设备和存储介质

技术领域

[0001] 本发明实施例涉及信息通信技术,尤其涉及一种基于弹幕顺序的弹幕分发方法、装置、设备和存储介质。

背景技术

[0002] 在音视频播放/直播应用软件中会大量使用弹幕消息。通常,弹幕消息是由传输及处理弹幕消息的服务器(即弹幕服务器)发送至应用软件,再由应用软件中具有分发弹幕消息功能的弹幕分发模块将接收的弹幕消息分发至各个需要接收弹幕消息的弹幕接收模块。
[0003] 当弹幕服务器发送的弹幕消息的数量较多,而弹幕分发模块无法及时进行弹幕消息的分发时,通常会在弹幕分发模块中建立一个消息集合,以存储未分发的弹幕消息。
[0004] 但是,现有的弹幕消息分发模式是弹幕分发模块按照弹幕服务器下发弹幕消息的顺序,逐条从消息缓存集合中获取缓存的弹幕消息并进行分发,这就会导致弹幕分发模块的分发效率低,降低弹幕消息的分发时效性。

发明内容

[0005] 本发明实施例提供一种基于弹幕顺序的弹幕分发方法、装置、设备和存储介质,以实现顺序且高效地分发弹幕消息,提高弹幕消息的分发时效性及分发准确性。
[0006] 第一方面,本发明实施例提供了一种基于弹幕顺序的弹幕分发方法,包括:
[0007] 在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取所述当前并发数量的待分发弹幕消息;
[0008] 将各所述待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;
[0009] 依据所述关联弹幕消息的关联数量和所述当前并发数量,确定剩余并发数量,并依据所述剩余并发数量确定修正并发数量的分发线程;
[0010] 基于弹幕消息分发机制,利用各所述分发线程串行式分发各所述关联弹幕消息,以及并行式分发各所述待分发弹幕消息中的各剩余弹幕消息。
[0011] 第二方面,本发明实施例还提供了一种基于弹幕顺序的弹幕分发装置,该装置包括:
[0012] 当前并发数量确定模块,用于在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取所述当前并发数量的待分发弹幕消息;
[0013] 关联弹幕消息确定模块,用于将各所述待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;
[0014] 分发线程确定模块,用于依据所述关联弹幕消息的关联数量和所述当前并发数量,确定剩余并发数量,并依据所述剩余并发数量确定修正并发数量的分发线程;
[0015] 弹幕消息分发模块,用于基于弹幕消息分发机制,利用各所述分发线程串行式分发各所述关联弹幕消息,以及并行式分发各所述待分发弹幕消息中的各剩余弹幕消息。
[0016] 第三方面,本发明实施例还提供了一种设备,该设备包括:
[0017] 一个或多个处理器;
[0018] 存储装置,用于存储一个或多个程序,
[0019] 当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的基于弹幕顺序的弹幕分发方法。
[0020] 第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的基于弹幕顺序的弹幕分发方法。
[0021] 本发明实施例通过在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息并行分发的数量,实现了在利用弹幕消息并行分发技术提高弹幕消息分发效率的基础上,有效降低因系统繁忙而导致弹幕消息并行分发进程的阻塞程度,进一步提高了弹幕消息的分发效率和分发时效性。通过确定关联弹幕消息,并利用关联弹幕消息的关联数量和当前并发数量确定修正并发数量,能够更加合理地确定分发线程的开辟数量,从而高效利用系统资源。通过利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息,既保证了多线程弹幕分发过程中弹幕消息的分发顺序性,提高了弹幕消息的分发准确性,又提高了弹幕消息的分发效率和分发时效性。

附图说明

[0022] 图1是本发明实施例一中的一种基于弹幕顺序的弹幕分发方法的流程图;
[0023] 图2是本发明实施例二中的一种基于弹幕顺序的弹幕分发方法的流程图;
[0024] 图3是本发明实施例三中的一种基于弹幕顺序的弹幕分发装置的结构示意图;
[0025] 图4是本发明实施例四中的一种设备的结构示意图。

具体实施方式

[0026] 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0027] 实施例一
[0028] 本实施例提供的基于弹幕顺序的弹幕分发方法可适用于Android客户端中的音视频播放/直播应用软件中的弹幕消息分发,尤其适用于在弹幕消息数量较多,且一条弹幕消息发送至至少一个弹幕接收对象的情况。该方法可以由基于弹幕顺序的弹幕分发装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在搭载Android系统的具有弹幕消息分发功能的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。本实施例中的执行主体为弹幕分发模块中定义的,用于实现弹幕分发功能的弹幕分发类的实例化对象——弹幕分发对象。参见图1,本实施例的方法具体包括如下步骤:
[0029] S110、在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取当前并发数量的待分发弹幕消息。
[0030] 其中,多线程弹幕分发条件是指预先设定的,用于触发弹幕消息多线程并行分发的条件,例如可以是新的弹幕消息的接收,也可以是弹幕消息分发进度,还可以是设置定时器等。系统状态参数是指能够表征系统运行状态的参数。当前系统状态参数值是指当前时刻的系统状态参数的值。示例性地,当前系统状态参数包括当前CPU占用率、当前内存占用率和当前系统温度中的至少一种。具体实施时,可以利用当前CPU占用率、当前内存占用率和当前系统温度中的至少一种来表征搭载Android系统的设备的运行状态。这样设置的好处在于可以从至少一个角度反映当前系统的繁忙程度。
[0031] 当前并发数量是指当前时刻的并行分发的弹幕消息的数量。消息集合是指弹幕分发对象中存储弹幕消息的集合,其数据结构可以是数组、列表或队列等。为了更好地保证弹幕消息的存储顺序及获取顺序,消息集合优选为具有先进先出特性的队列结构。本发明实施例中,为了实现弹幕消息的并行分发,弹幕分发对象在接收到弹幕服务器下发的弹幕消息时,并不是立即将其分发,而是将其存储至消息集合中。待分发弹幕消息是指本操作中要进行分发的弹幕消息。
[0032] 具体地,弹幕分发对象首先判断是否满足多线程弹幕分发条件,例如,判断其是否接收到弹幕服务器发送的新的弹幕消息,或者判断其是否将上一批弹幕消息分发完毕,或者判断设置的定时器的定时周期是否到达等。如果判断结果为是,那说明已经满足了多线程弹幕分发条件,弹幕分发对象便会获取当前系统状态参数值。如果当前系统状态参数值较高,则表明系统当前功耗较大,无法承担过多的并行弹幕消息分发任务,此时便可将当前并发数量设置为一个较小的数值;反之,表明系统的当前可用资源丰富,便可将当前并发数量设置为一个较大的数值。
[0033] 本实施例中可以将系统状态参数值与弹幕消息的并发数量的对应关系设置为具有离散数值的查找表,以存储系统状态参数值的各个取值范围及每个取值范围对应的并发数量。那么,上述依据当前系统状态参数值确定弹幕消息的当前并发数量的过程便为:根据当前系统状态参数值确定出其对应的取值范围,之后将查找表中该取值范围对应的并发数量确定为当前并发数量。这样设置的好处在于当前并发数量的确定速度快,可进一步提高弹幕消息的分发效率。
[0034] 本实施例中也可以将系统状态参数值与弹幕消息的并发数量的对应关系设置为数值计算公式,将系统状态参数值设置为因变量,而将并发数量设置为应变量。后续便可以直接根据当前系统状态参数值计算获得相应的当前并发数量。这样设置的好处在于,可以更加精确的确定当前并发数量,从而后续确定更加合适数量的并发线程,可进一步减少线程阻塞的情况,进而进一步提高弹幕消息的分发效率。
[0035] 上述操作之后,弹幕分发对象便从消息集合中按序获取当前并发数量的弹幕消息,作为待分发弹幕消息。例如,当前并发数量为5,则从消息集合中按序获取5条弹幕消息作为5条待分发弹幕消息。
[0036] S120、将各待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息。
[0037] 其中,顺序关联性是指弹幕消息之间具有先后顺序的关联关系,例如一条弹幕消息的处理须依赖于另一条弹幕消息的处理结果,则可将该两条弹幕消息确定为具有顺序关联性的弹幕消息(即关联弹幕消息)。由此可知,关联弹幕消息的数量为至少两个。
[0038] 具体地,弹幕分发对象通过对S110中获取的各个待分发弹幕消息的信息进行分析来确定各个待分发弹幕消息之间的顺序关联性,从而将具有顺序关联性的每个待分发弹幕消息均确定为关联弹幕消息。例如可以是分析每个待分发弹幕消息中携带的顺序关联消息的关联标识,将该待分发弹幕消息及其关联标识对应的待分发弹幕消息均确定为关联弹幕消息,该关联标识可以是在弹幕服务器或弹幕分发对象中根据弹幕消息之间的依赖性确定;也可以是分析每个待分发弹幕消息对应的弹幕接收对象,将具有相同的弹幕接收对象的所有待分发弹幕消息均确定为关联弹幕消息。这里,弹幕接收对象是指弹幕接收模块中需要接收弹幕消息的组件对象,例如可以是用于弹幕消息显示的视图对象,也可以是用于对弹幕消息进行数据处理的业务控制器对象,还可以是对弹幕消息进行存储或传输的数据管理器对象。
[0039] 示例性地,S120包括:依据各待分发弹幕消息的消息标识,确定各待分发弹幕消息对应的对象集合;将各对象集合中存在相同的弹幕接收对象的各关联对象集合对应的待分发弹幕消息,确定为各关联弹幕消息。
[0040] 其中,对象集合是由需要接收待分发弹幕消息的各个弹幕接收对象构成的集合。关联对象集合是指关联弹幕消息对应的对象集合。由于关联弹幕消息至少为两个,故该关联对象集合的数量为至少两个。
[0041] 具体地,弹幕分发对象根据待分发弹幕消息的消息标识和每个弹幕接收对象的可接收弹幕消息的消息标识列表,确定出该待分发弹幕消息对应的至少一个弹幕接收对象,构成该待分发弹幕消息对应的对象集合。针对每个待分发弹幕消息,均执行上述操作,便可获得每个待分发弹幕消息对应的对象集合。
[0042] 之后,预先根据弹幕服务器下发弹幕消息的顺序或者消息集合中弹幕消息的存储顺序确定待分发弹幕消息的排列顺序(即消息排序)。弹幕分发对象按照消息排序比较每两个相邻的待分发弹幕消息的对象集合,以判断每两个对象集合中是否存在相同的弹幕接收对象。针对上述任一对的两个对象集合,若判断结果为存在,则将该两个对象集合均确定为关联对象集合,并将两个关联对象集合对应的待分发弹幕消息确定为两个关联弹幕消息。如判断结果为不存在,则说明该两个对象集合对应的待分发弹幕消息之间没有顺序关联性。按照上述过程遍历完所有的对象集合之后,便可确定出当前并发数量的待分发弹幕消息中所有的关联弹幕消息。这样设置的好处在于能够简化关联弹幕消息的确定过程,从而一定程度上进一步提高弹幕消息的分发效率。
[0043] 例如,5条待分发弹幕消息中消息1对应的对象集合1包含弹幕接收对象A、B,消息2对应的对象集合2包含弹幕接收对象B、C,消息3对应的对象集合3包含弹幕接收对象D,消息4对应的对象集合4包含弹幕接收对象E、F,消息5对应的对象集合5包含弹幕接收对象E。那么,可将消息1和消息2确定为第一组关联弹幕消息,将消息4和消息5确定为第二组关联弹幕消息,且每组关联弹幕消息中包含2条关联弹幕消息,这时所有待分发弹幕消息中包含4条关联弹幕消息。上述一组关联弹幕消息便称为一个关联消息组。
[0044] S130、依据关联弹幕消息的关联数量和当前并发数量,确定剩余并发数量,并依据剩余并发数量确定修正并发数量的分发线程。
[0045] 其中,修正并发数量是指最终确定的分发线程的数量。分发线程是指本操作中需要专门用来进行弹幕消息分发的线程。
[0046] 具体地,根据上述说明可知每组关联弹幕消息之间具有顺序性,为了保证这些关联弹幕消息的分发顺序,本实施例中将每组内的所有关联弹幕消息设置为串行式分发,而其他非关联性的待分发弹幕消息及各组关联弹幕消息并行式分发。那么每组中的各个关联弹幕消息同一时间只会占用一个线程。例如,上述2组关联弹幕消息同一时间只会占用2个线程,而非4个线程。这种情况下,分发线程的数量应当少于待分发弹幕消息的数量。
[0047] 确定分发线程的数量的过程为:弹幕分发对象用当前并发数量减去S120中确定的关联弹幕消息的数量(即关联数量),获得需要并行分发的待分发弹幕消息(即剩余弹幕消息)的数量(即剩余并发数量)。例如,上述举例中可确定剩余并发数量为5-4=1。而后,将剩余并发数量与关联弹幕消息的组数相加便获得修正并发数量。例如,上述举例中可确定修正并发数量为1+2=3。
[0048] 确定修正并发数量之后,弹幕分发对象从对系统中的所有线程进行动态管理的线程池获取修正并发数量的线程,作为各个分发线程。并且,为每个剩余待分发弹幕消息均分配一个分发线程,该分配过程中需要保证一个分发线程对应有一个剩余待分发弹幕消息,且各个分发线程对应的剩余待分发弹幕消息不重复。最后剩余的分发线程便可作为每组关联弹幕消息中首个或全部关联弹幕消息的分发线程。后续便可利用各个分发线程来分发各个待分发弹幕消息。需要说明的是,本步骤中确定待分发弹幕消息的操作和确定分发线程的操作无执行顺序的限定,两者可以先后执行,也可以同步执行。只需保证当前并发数量的确定操作在分发线程的确定操作之前即可。
[0049] S140、基于弹幕消息分发机制,利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息。
[0050] 其中,弹幕消息分发机制是指弹幕分发对象向弹幕接收对象分发弹幕消息的实现机制。例如,当弹幕分发对象和弹幕接收对象处于同一个功能模块时,弹幕消息分发机制可以是通过两者之间的直接对象引用来进行弹幕消息分发。而当弹幕分发对象和弹幕接收对象处于不同功能模块时,弹幕消息分发机制可以是通过不同功能模块提供的模块间交互接口来建立两者之间的耦合式通信通道,弹幕分发对象通过该耦合式通信通道将弹幕消息直接分发至相应的弹幕接收对象;也可以是通过自定义接口类型的通信协议建立两者之间的桥接式通信通道,弹幕分发对象通过该桥接式通信通道将弹幕消息直接分发至相应的弹幕接收对象;还可以是通过Android系统中的系统通信通道,如系统广播通道或第三方开源事件总线EventBus,进行弹幕消息的传输。
[0051] 具体地,由于剩余弹幕消息之间不具有关联性,故所有的剩余弹幕消息均可以独立地并行分发。则弹幕分发对象利用各个剩余弹幕消息对应的分发线程并行分发这些剩余弹幕消息。而对于每个关联消息组中的各个关联弹幕消息,只需保证组内每两个相邻的关联弹幕消息为串联式的顺序分发即可,至于其所分配的分发线程,可以是同一个分发线程,也可以是其他没有分发任务而处于空闲状态的分发线程(即空闲线程)。这里每个分发线程中的弹幕消息分发过程均遵循弹幕消息分发机制。
[0052] 本实施例的技术方案,通过在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息并行分发的数量,实现了在利用弹幕消息并行分发技术提高弹幕消息分发效率的基础上,有效降低因系统繁忙而导致弹幕消息并行分发进程的阻塞程度,进一步提高了弹幕消息的分发效率和分发时效性。通过确定关联弹幕消息,并利用关联弹幕消息的关联数量和当前并发数量确定修正并发数量,能够更加合理地确定分发线程的开辟数量,从而高效利用系统资源。通过利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息,既保证了多线程弹幕分发过程中弹幕消息的分发顺序性,提高了弹幕消息的分发准确性,又提高了弹幕消息的分发效率和分发时效性。
[0053] 实施例二
[0054] 本实施例在上述实施例一的基础上,对“满足多线程弹幕分发条件”进行了进一步优化。在此基础上,可以进一步对“依据当前系统状态参数值确定弹幕消息的当前并发数量”进行优化。在上述基础上,还可以进一步对“利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。本实施例的执行主体仍为弹幕分发对象。参见图2,本实施例提供的基于弹幕顺序的弹幕分发方法包括:
[0055] S210、在消息并发定时器的当前定时周期到达时,依据当前CPU占用率和预先设定的并发数量求解公式确定当前并发数量,并从消息集合中获取当前并发数量的待分发弹幕消息。
[0056] 其中,消息并发定时器是用于触发弹幕消息多线程并行分发的定时器。当前定时周期是指当前时刻消息并发定时器的定时时长,其可以是预先设置的固定数值的时长(即预设时长),也可以是依据设定调整规则动态调整的动态时长。示例性地,当前定时周期依据当前并发数量的上一个历史并发数量确定。历史并发数量是指当前时刻之前的历史时刻的并发数量,其与当前并发数量相对应。上一个历史并发数量是指与当前时刻最接近的历史时刻的并发数量。具体实施时,在上一个历史并发数量确定之后,便可据其确定当前定时周期。本实施例中将当前定时周期与上一个历史并发数量的关系设定为负相关关系,如果上一个历史并发数量较大,则说明当前可用系统资源丰富,可以认为弹幕消息的分发速度较快,那么可以设置一个时长较短的当前定时周期,以便更加及时地分发各个弹幕消息;反之,设置一个时长较长的当前定时周期,以确保上一批并行分发的弹幕消息能够分发完毕,避免因多批弹幕消息并行分发而导致的系统功耗过大。当前定时周期是一次分发过程调整一次,且是S110执行之前便确定。这样设置的好处在于能够根据当前系统运行状态动态地确定消息并发定时器的当前定时周期,从而更加精确地触发弹幕消息的并行分发,进一步提高弹幕消息的分发效率和时效性。
[0057] 具体地,弹幕分发对象首先判断消息并发定时器的当前定时周期是否达到。在判断达到时,弹幕分发对象获取Android系统的当前CPU占用率。之后,弹幕分发对象根据当前CPU占用率与当前并发数量之间的并发数量求解公式计算当前并发数量。该并发数量求解公式具体为:
[0058] ParaNum=10-(int)(CpuOcRate*100/10)
[0059] 该公式中ParaNum为当前并发数量,int为取整关键字,CpuOcRate为当前CPU占用率。该公式的构建依据是:为了避免一次开辟的线程数量过多,本实施例中将一次开辟的线程数量最大值设置为10,也就是系统可用资源允许的情况下,最多一次可并行分发10条弹幕消息。然后,将百分比形式的当前并发数量CpuOcRate变为实数,即CpuOcRate*100;之后,为了确保最终确定的并发数量为小于或等于10的数值,而取上述获得的实数的十位及以上的数值,即CpuOcRate*100/10;同时为了确保计算结果为整数,利用int取整关键字对上述结果再向下取整。最后,为了使CPU占用率与并发数量呈负相关,从而符合S110中的相关说明,用并发数量最大值10与取整后结果做差。
[0060] S220、将各待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息。
[0061] S230、依据关联弹幕消息的关联数量和当前并发数量,确定剩余并发数量,并依据剩余并发数量确定修正并发数量的分发线程。之后执行S240或S250。
[0062] S240、基于弹幕消息分发机制,利用剩余并发数量的分发线程并行分发各剩余弹幕消息,并利用各分发线程中的各剩余分发线程一一对应地分发各关联消息组内的各关联弹幕消息。
[0063] 其中,剩余分发线程是指所有分发线程中除了并行执行弹幕消息分发操作的分发线程之外的其他分发线程。根据实施例一的S130的说明可知,剩余分发线程的数量与关联消息组的数量一致。
[0064] 具体地,弹幕分发对象利用剩余并发数量的分发线程来并行分发所有的剩余弹幕消息。并且,利用每个剩余分发线程独立地且顺序地分发一个关联消息组内的所有关联弹幕消息。以实施例一中的例子为例,有两个关联消息组,剩余分发线程便也为两个,则利用其中一个剩余分发线程顺序地分发消息1和消息2,利用另一个剩余分发线程顺序地分发消息4和消息5。该操作结束时,便完成所有待分发弹幕消息的分发操作,即可结束本次基于弹幕顺序的弹幕分发过程。
[0065] S250、依据各关联消息组内各关联弹幕消息的消息排序,将每个关联消息组内的第一个关联弹幕消息均作为并发关联弹幕消息。
[0066] 其中,并发关联弹幕消息是指与剩余弹幕消息并行分发的关联弹幕消息。
[0067] 具体地,本实施例的该方案中,将每个关联消息组内的第一个关联弹幕消息设置为与剩余弹幕消息并行分发,而剩余的关联弹幕消息在保证按照消息排序顺序分发的前提下,设置为选择所有分发线程中的任一个空闲线程进行分发,这样可以在确保弹幕消息顺序分发的前提下,避免因同一个分发线程分发多条弹幕消息而引起的分发速率降低问题,从而进一步提高关联弹幕消息的分发效率。
[0068] 具体实施时,弹幕分发对象根据各个关联消息组内弹幕消息的消息排序,将每个关联消息组内的第一个关联弹幕消息作为并发关联弹幕消息。例如,将第一个关联消息组内的消息1和第二个关联消息组内的消息4作为2个并发关联弹幕消息。之后执行S260。
[0069] S260、基于弹幕消息分发机制,利用各分发线程并行分发各并发关联弹幕消息和各剩余弹幕消息。
[0070] 具体地,弹幕分发对象利用所有的分发线程并行分发所有的剩余弹幕消息和所有的并发关联弹幕消息。例如,消息1、消息3和消息4同时利用3个分发线程并行分发。之后执行S270。
[0071] S270、依据消息排序,依次从各剩余关联弹幕消息中确定一个目标弹幕消息,并基于弹幕消息分发机制,利用各分发线程中的任一空闲线程分发目标弹幕消息。
[0072] 其中,剩余关联弹幕消息是指所有关联消息组中未分发的关联弹幕消息。
[0073] 具体地,上述S250和S260执行之后,便剩下所有的剩余关联弹幕消息。那么针对所有的剩余关联弹幕消息的分发过程,可以是每次按照各个关联消息组内的消息排序,只取一个剩余关联弹幕消息,然后从所有分发线程中任选一个空闲线程来分发该剩余关联弹幕消息。按照上述过程逐个分发所有的剩余关联弹幕消息。例如,针对消息2和消息5这两个剩余关联弹幕消息,可以先任选一个空闲线程来分发消息2(或消息5),分发操作完成后,再任选一个空闲线程来分发消息5(或消息2)。
[0074] 针对所有的剩余关联弹幕消息的分发过程,也可以是按照每个关联消息组内的消息排序,同时从每个关联消息组内各取一个剩余关联弹幕消息,然后从所有分发线程中任选N个空闲线程来并行分发该N个剩余关联弹幕消息。这里的N取值为关联消息组的组数。按照上述过程,有序且并行地分发各个关联消息组内的剩余关联弹幕消息。例如,按照消息排序,同时从第一个关联消息组和第二个关联消息组内各取消息2和消息5,选择两个空闲线程并行分发消息2和消息5。
[0075] 待所有的剩余关联弹幕消息分发完毕时,便完成所有待分发弹幕消息的分发操作,即可结束本次基于弹幕顺序的弹幕分发过程。
[0076] 应当理解,S240和S250~S270为并列步骤,可以根据具体的应用需求,择一执行。
[0077] 本实施例的技术方案,通过将多线程弹幕分发条件设置为消息并发定时器的当前定时周期到达,使得弹幕消息并行分发的触发条件更加常态化,避免了因触发条件无法满足而使得弹幕消息无法及时分发的问题,进一步提高弹幕消息分发的时效性。通过将当前系统状态参数值确定为当前CPU占用率,并利用当前CPU占用率与当前并发数量之间的并发数量求解公式确定当前并发数量,提高了当前并发数量确定的准确性,从而进一步提高弹幕消息分发效率。通过各剩余分发线程一一对应地分发各关联消息组内的各关联弹幕消息,简化了关联弹幕消息串行式分发的实现逻辑。通过利用各分发线程并行分发各并发关联弹幕消息和各剩余弹幕消息;依据消息排序,依次从各剩余关联弹幕消息中确定一个目标弹幕消息,并利用各分发线程中的任一空闲线程分发目标弹幕消息,实现了顺序性地并行分发各个关联弹幕消息,在确保弹幕消息顺序分发的前提下,避免了因同一个分发线程分发多条弹幕消息而引起的分发速率降低问题,从而在确保弹幕消息分发准确性的前提下,进一步提高了关联弹幕消息的分发效率。
[0078] 在上述技术方案的基础上,弹幕消息分发机制包括:依据弹幕消息的消息标识,从引用对象集合中获取与消息标识对应的目标弹幕接收对象;依据弹幕分发协议,将目标弹幕接收对象转换为弹幕分发协议类型的对象,作为目标接收对象;以弹幕消息为函数输入参数,通过目标接收对象调用弹幕分发函数,将弹幕消息分发至目标接收对象。
[0079] 其中,引用对象集合是指存储各个弹幕接收对象引用关系的集合,其设置于弹幕分发对象中。为了从引用对象集合中获取所需要的弹幕接收对象,引用对象集合中还可以存储用于查找集合元素的索引项,例如弹幕消息的消息标识,和/或弹幕接收对象的哈希值。
[0080] 示例性地,对象集合存储继承了预先定义的弹幕分发协议的弹幕接收对象。弹幕分发协议是指弹幕分发对象进行弹幕分发时所遵循的组件间通信协议,其内包含用于实现弹幕消息分发的弹幕分发函数。该弹幕分发协议是具有公有权限标识符public的接口interface类型的协议。例如,弹幕分发协议IMessage可以定义为:public interface IMessage{public void onMessage(String type,Message msg);}。该协议定义中,弹幕分发函数onMessage具有两个函数输入参数,分别是字符串String类型的消息标识和承载弹幕消息的消息Message类型的消息体。该函数的函数输入参数可以根据实际应用需求进行适应性调整。
[0081] 本实施例中弹幕分发对象和弹幕接收对象处于不同功能模块,故将弹幕消息分发机制设置为建立弹幕分发对象和弹幕接收对象之间的桥接式通信通道。具体实施时,预先定义一个全局作用域的应用对象集合以及包含弹幕分发函数的弹幕分发协议。弹幕接收类通过Java语言中的接口协议继承关键字implement继承该弹幕分发协议,并实现其内的弹幕分发函数。然后,在各个弹幕接收对象创建时,通过调用弹幕接收类的构造函数实例化生成各个弹幕接收对象,该弹幕接收对象同时也是协议接收对象,其内包含作为回调函数的弹幕分发函数OnMessage。在各个弹幕接收对象创建之后,将其存储至上述引用对象集合中,这样弹幕分发对象便可通过引用对象集合持有各个弹幕接收对象的引用关系,至此便构建了上述桥接式通信通道。
[0082] 具体地,弹幕分发对象中的引用对象集合中预先存储了各个弹幕接收对象,当弹幕分发对象需要进行弹幕消息分发时,其会先根据要分发的弹幕消息的消息标识从对象集合中确定出要接收该弹幕消息的弹幕接收对象,即目标弹幕接收对象。之后,为了后续调用目标弹幕接收对象时仅利用其继承而获得的通信功能,而不会调用弹幕接收对象内部的相应消息处理功能,根据弹幕分发协议对应的弹幕分发协议类型,将目标弹幕接收对象强制转换为弹幕分发协议类型,获得仅具有弹幕分发协议的通信功能的接收协议对象,将其作为目标接收对象。之后,弹幕分发对象以弹幕消息为函数输入参数,通过目标接收对象调用其内的弹幕分发函数,以触发目标接收对象回调相应的弹幕分发函数,从而接收弹幕分发对象作为函数输入参数发送的弹幕消息。这样设置的好处在于建立了弹幕分发对象和弹幕接收对象之间专门用于弹幕消息分发的通信通道,进一步提高弹幕消息的分发效率。
[0083] 以下是本发明实施例提供的基于弹幕顺序的弹幕分发装置的实施例,该装置与上述各实施例的基于弹幕顺序的弹幕分发方法属于同一个发明构思,在基于弹幕顺序的弹幕分发装置的实施例中未详尽描述的细节内容,可以参考上述基于弹幕顺序的弹幕分发方法的实施例。
[0084] 实施例三
[0085] 本实施例提供一种基于弹幕顺序的弹幕分发装置,参见图3,该装置具体包括:
[0086] 当前并发数量确定模块310,用于在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取当前并发数量的待分发弹幕消息;
[0087] 关联弹幕消息确定模块320,用于将各待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;
[0088] 分发线程确定模块330,用于依据关联弹幕消息的关联数量和当前并发数量,确定剩余并发数量,并依据剩余并发数量确定修正并发数量的分发线程;
[0089] 弹幕消息分发模块340,用于基于弹幕消息分发机制,利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息。
[0090] 可选地,关联弹幕消息确定模块320具体用于:
[0091] 依据各待分发弹幕消息的消息标识,确定各待分发弹幕消息对应的对象集合;
[0092] 将各对象集合中存在相同的弹幕接收对象的各关联对象集合对应的待分发弹幕消息,确定为各关联弹幕消息,其中,关联对象集合的数量为至少两个。
[0093] 可选地,弹幕消息分发模块340具体用于:
[0094] 利用剩余并发数量的分发线程并行分发各剩余弹幕消息,并利用各分发线程中的各剩余分发线程一一对应地分发各关联消息组内的各关联弹幕消息。
[0095] 可替代地,弹幕消息分发模块340具体用于:
[0096] 依据各关联消息组内各关联弹幕消息的消息排序,将每个关联消息组内的第一个关联弹幕消息均作为并发关联弹幕消息;
[0097] 利用各分发线程并行分发各并发关联弹幕消息和各剩余弹幕消息;
[0098] 依据消息排序,依次从各剩余关联弹幕消息中确定一个目标弹幕消息,并利用各分发线程中的任一空闲线程分发目标弹幕消息。
[0099] 可选地,弹幕消息分发机制包括:
[0100] 依据弹幕消息的消息标识,从引用对象集合中获取与消息标识对应的目标弹幕接收对象,其中,引用对象集合存储继承了预先定义的弹幕分发协议的弹幕接收对象,弹幕分发协议为具有公有权限标识符的接口类型的协议;
[0101] 依据弹幕分发协议,将目标弹幕接收对象转换为弹幕分发协议类型的对象,作为目标接收对象;
[0102] 以弹幕消息为函数输入参数,通过目标接收对象调用弹幕分发函数,将弹幕消息分发至目标接收对象,其中,弹幕分发函数为弹幕分发协议的内部函数。
[0103] 可选地,满足多线程弹幕分发条件包括:消息并发定时器的当前定时周期到达,其中,当前定时周期依据当前并发数量的上一个历史并发数量确定。
[0104] 可选地,当前并发数量确定模块310具体用于:
[0105] 当系统状态参数为当前CPU占用率时,依据当前CPU占用率和预先设定的并发数量求解公式确定当前并发数量。
[0106] 通过本发明实施例三的一种基于弹幕顺序的弹幕分发装置,实现了顺序且高效地分发弹幕消息,提高弹幕消息的分发时效性及分发准确性。
[0107] 本发明实施例所提供的基于弹幕顺序的弹幕分发装置可执行本发明任意实施例所提供的基于弹幕顺序的弹幕分发方法,具备执行方法相应的功能模块和有益效果。
[0108] 值得注意的是,上述基于弹幕顺序的弹幕分发装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
[0109] 实施例四
[0110] 参见图4,本实施例提供了一种设备400,其包括:一个或多个处理器420;存储装置410,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器420执行,使得一个或多个处理器420实现本发明实施例所提供的基于弹幕顺序的弹幕分发方法,包括:
[0111] 在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取当前并发数量的待分发弹幕消息;
[0112] 将各待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;
[0113] 依据关联弹幕消息的关联数量和当前并发数量,确定剩余并发数量,并依据剩余并发数量确定修正并发数量的分发线程;
[0114] 基于弹幕消息分发机制,利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息。
[0115] 当然,本领域技术人员可以理解,处理器420还可以实现本发明任意实施例所提供的基于弹幕顺序的弹幕分发方法的技术方案。
[0116] 图4显示的设备400仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图4所示,该设备400包括处理器420、存储装置410、输入装置430和输出装置440;设备中处理器420的数量可以是一个或多个,图4中以一个处理器420为例;设备中的处理器420、存储装置410、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线450连接为例。
[0117] 存储装置410作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于弹幕顺序的弹幕分发方法对应的程序指令/模块(例如,基于弹幕顺序的弹幕分发装置中的当前并发数量确定模块、关联弹幕消息确定模块、分发线程确定模块和弹幕消息分发模块)。
[0118] 存储装置410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置410可进一步包括相对于处理器420远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0119] 输入装置430可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
[0120] 实施例五
[0121] 本实施例提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种基于弹幕顺序的弹幕分发方法,该方法包括:
[0122] 在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,并从消息集合中获取当前并发数量的待分发弹幕消息;
[0123] 将各待分发弹幕消息中具有顺序关联性的弹幕消息均确定为关联弹幕消息;
[0124] 依据关联弹幕消息的关联数量和当前并发数量,确定剩余并发数量,并依据剩余并发数量确定修正并发数量的分发线程;
[0125] 基于弹幕消息分发机制,利用各分发线程串行式分发各关联弹幕消息,以及并行式分发各待分发弹幕消息中的各剩余弹幕消息。
[0126] 当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的基于弹幕顺序的弹幕分发方法中的相关操作。
[0127] 通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所提供的基于弹幕顺序的弹幕分发方法。
[0128] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。