弹幕消息分发方法、装置、设备及存储介质与流程

文档序号:16390183发布日期:2018-12-22 11:18阅读:159来源:国知局
弹幕消息分发方法、装置、设备及存储介质与流程

本发明实施例涉及计算机技术,尤其涉及一种弹幕消息分发方法、装置、设备及存储介质。

背景技术

在诸如斗鱼的音视频播放/直播应用软件中,会大量使用弹幕消息。通常,这些弹幕消息是由音视频播放/直播应用软件逐条分发给需要使用弹幕消息的各个分发目标对象,如视图对象、业务控制器对象或数据管理器对象等。

以视图对象为例,对于安装于android系统的音视频播放/直播应用软件,其向各个视图对象分发弹幕消息的方式是按照视图层级的引用关系链逐层地将弹幕消息传递至目标视图对象。参见图1,如果一个位于第三视图层104中的视图需要获取到弹幕消息101,那么该弹幕消息101需要按照引用关系链,先传递至第一视图层102,再由第一视图层102传递至第二视图层103,并最终由第二视图层103再传递至第三视图层104,使得弹幕消息的分发过程复杂,耗时长,效率低。并且在上述过程中,即便第一视图层102和第二视图层103中的视图对象不需要该弹幕消息,其也必须接收并传递该弹幕消息,无疑会造成系统资源的浪费。另外,上述弹幕消息分发操作是实时触发的,即接收到新的弹幕消息时触发执行弹幕消息分发。如果接收弹幕消息的视图对象中有正在处理的弹幕消息,那么该视图对象就需要同时处理多条弹幕消息,会使得视图对象内部的业务逻辑复杂化,容易引入多线程问题。

总之,现有的弹幕消息在音视频播放/直播应用软件中的分发方式存在分发过程复杂,分发效率低以及容易引起弹幕分发目标对象处理性能不稳定的问题。



技术实现要素:

本发明实施例提供一种弹幕消息分发方法、装置、设备和存储介质,以实现弹幕消息的直达式分发,简化弹幕消息分发过程,提高弹幕消息分发效率。同时保持弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态同步,提高分发目标对象的性能稳定性。

第一方面,本发明实施例提供了一种弹幕消息分发方法,包括:

分发目标对象依据弹幕分发器对象及弹幕消息获取协议,确定分发协议对象;

在检测到上一条目标弹幕消息处理完成时,所述分发目标对象以消息标识列表为函数输入参数,通过所述分发协议对象调用弹幕消息获取函数,以使所述弹幕分发器对象回调所述弹幕消息获取函数,获得函数返回值,其中,所述弹幕消息获取函数为所述弹幕分发器对象继承所述弹幕消息获取协议而获得;

若所述函数返回值不为空对象,则所述分发目标对象将所述函数返回值确定为当前目标弹幕消息。

第二方面,本发明实施例还提供了一种弹幕消息分发装置,该装置包括:

协议对象确定模块,用于分发目标对象依据弹幕分发器对象及弹幕消息获取协议,确定分发协议对象;

函数返回值确定模块,用于在检测到上一条目标弹幕消息处理完成时,所述分发目标对象以消息标识列表为函数输入参数,通过所述分发协议对象调用弹幕消息获取函数,以使所述弹幕分发器对象回调所述弹幕消息获取函数,获得函数返回值,其中,所述弹幕消息获取函数为所述弹幕分发器对象继承所述弹幕消息获取协议而获得;

弹幕消息确定模块,用于若所述函数返回值不为空对象,则所述分发目标对象将所述函数返回值确定为当前目标弹幕消息。

第三方面,本发明实施例还提供了一种设备,该设备包括:

一个或多个处理器;

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

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的弹幕消息分发方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的弹幕消息分发方法。

本发明实施例通过分发目标对象获取继承了弹幕消息获取协议及其内包含的弹幕消息获取函数的弹幕分发器对象,构建了弹幕分发器对象与分发目标对象之间的消息传输通道,使得弹幕分发器对象与分发目标对象之间能够直接进行弹幕消息的传输,简化了弹幕消息的分发过程,提高了弹幕消息的分发效率。通过在检测到上一条目标弹幕消息处理完成时,分发目标对象获取其对应的当前目标弹幕消息,实现了分发目标对象根据其内部的上一条目标弹幕消息处理状态主动获取当前目标弹幕消息,提高了弹幕消息分发的及时性,也使得弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态之间保持同步,从而减少了分发目标对象内部的弹幕消息并行处理业务逻辑,提高了分发目标对象的性能稳定性。通过分发目标对象以消息标识列表为函数输入参数,由弹幕分发器对象转换而得到的分发协议对象调用作为回调函数的弹幕消息获取函数,获得弹幕分发器对象反馈的函数返回值,且在函数返回值不为空对象时,将函数返回值确定为当前目标弹幕消息,使得分发目标对象直接获取其对应的当前目标弹幕消息,减少了无关弹幕消息的获取过程,进一步简化了弹幕消息的分发过程,从而进一步提高了弹幕消息的分发效率。

附图说明

图1是现有技术中弹幕消息分发的过程示意图;

图2是本发明实施例一中的一种弹幕消息分发方法的流程图;

图3是本发明实施例一中的弹幕消息分发的过程示意图;

图4是本发明实施例二中的一种弹幕消息分发方法的流程图;

图5是本发明实施例三中的弹幕消息获取函数实现过程的流程图;

图6是本发明实施例四中的一种弹幕消息分发装置的结构示意图;

图7是本发明实施例五中的一种设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

本实施例提供的弹幕消息分发方法,可适用于android客户端中的音视频播放/直播应用软件将接收到的待分发弹幕消息,分发至应用软件内与待分发弹幕消息相对应的各个分发目标对象,尤其适用于待分发弹幕消息的条数比较多的情况。该方法可以由弹幕消息分发装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在安装有音视频播放/直播应用软件的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。参见图2,本实施例的方法具体包括如下步骤:

s110、分发目标对象依据弹幕分发器对象及弹幕消息获取协议,确定分发协议对象。

其中,分发目标对象是指音视频播放/直播应用软件中需要接收弹幕消息,且满足直达式接收弹幕消息条件的组件对象,例如可以是用于弹幕消息显示的视图对象,也可以是用于对弹幕消息进行数据处理的业务控制器对象,还可以是对弹幕消息进行存储或传输的数据管理器对象。上述直达式接收弹幕消息的条件将在后续进行说明。弹幕分发器是指用于进行弹幕消息分发的弹幕分发模块,该模块中为实现弹幕消息分发操作而定义了弹幕分发器类,而弹幕分发器对象则是弹幕分发器类的一个实例,其是弹幕消息分发操作的具体执行者。

弹幕消息获取协议是预先定义的、用于进行弹幕消息直达式分发的组件间的通信协议。示例性地,弹幕消息获取协议为具有公有权限修饰符的接口类型,且包含弹幕消息获取函数;弹幕消息获取函数具有公有权限修饰符,且函数返回值类型为java-object数据类型。其代码实现可以为:

publicinterfaceifetchmsg{

publicobjectfetchmsg(list<string>listtype)

}。

其中,public为公有权项修饰符,这样其他类也就具有了访问该弹幕消息获取协议ifetchmsg的权限。interface为接口类型限定符,其表明弹幕消息获取协议ifetchmsg为接口实现机制,便于其他类的多态继承。object为弹幕消息获取函数fetchmsg的函数返回值类型,其表示函数返回值可以是任意数据类型,例如可以是空对象void类型、字符串string类型、键值对map类型、javabean类型或消息message类型等,其取决于fetchmsg函数中的返回值return语句。listtype是弹幕消息获取函数fetchmsg的函数输入参数,其是一个内部元素数据类型为字符串string类型的列表list对象。上述键值对map类型中的键为字符串string类型的弹幕消息标识type,值为string类型、message类型或javabean类型的弹幕消息体msg。这里,弹幕消息标识是指能够标识弹幕消息的字符,其可以是数字、字母、符号及上述各种字符的任意组合,该弹幕消息标识应当是一条弹幕消息的唯一的、全局的标识。弹幕消息体是指弹幕消息的承载者,其内包含具体地弹幕消息内容。通过上述弹幕消息获取协议和弹幕消息获取函数的定义,构建了弹幕消息直达式分发的协议基础。

协议对象是指对接口协议进行继承与实例化后而获得的对象,需要理解的是继承接口协议的对象既是继承之前的原生对象,也是继承之后的协议对象。分发协议对象是指继承并实例化弹幕消息获取协议而生成的对象,本实施例中是弹幕分发器对象对应的协议对象,且数据类型仅为协议对象。

具体地,为了实现弹幕分发器对象中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态之间的同步,且保证弹幕消息分发的及时性,本发明实施例中将弹幕消息分发过程设计为分发目标对象主动地从弹幕分发器对象中获取弹幕消息。具体实施时,分发目标对象先获取弹幕分发器对象,以便后续通过该弹幕分发器对象对其中存储的弹幕消息进行获取。而上述直达式获取过程的实现,需要借助于弹幕消息获取协议,即弹幕分发器对象需要继承弹幕消息获取协议,以持有弹幕消息获取接口及弹幕消息获取函数,并基于此获取分发协议对象。

s120、在检测到上一条目标弹幕消息处理完成时,分发目标对象以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值。

其中,目标弹幕消息是指分发目标对象可接收的弹幕消息,其与分发目标对象之间具有对应关系。上一条目标弹幕消息是指执行上一次弹幕消息分发操作所获得的目标弹幕消息。弹幕消息获取函数为弹幕消息获取协议的内部函数,其是一个回调函数,且由s110说明可知弹幕消息获取函数为弹幕分发器对象继承弹幕消息获取协议而获得,故弹幕消息获取函数的函数执行者为弹幕分发器对象。消息标识列表是指存储至少一个弹幕消息标识的列表,其可以是存储分发目标对象对应的所有目标弹幕消息的弹幕消息标识的列表。

具体地,为了实现弹幕消息的分发状态与处理状态之间的同步,分发目标对象需要检测其内部的上一条目标弹幕消息的处理状态。当检测到上一条目标弹幕消息处理完成时,分发目标对象以消息标识列表listtype为函数输入参数,触发调用s110中获得的分发协议对象中的弹幕消息获取函数fetchmsg(listtype)。该触发调用操作会使得弹幕分发器对象执行弹幕消息获取函数。弹幕消息获取函数具体用于遍历弹幕分发器对象中的第一消息列表,并确定与消息标识列表相对应的函数返回值。这里,第一消息列表是指弹幕分发器对象中预先建立的列表,其用于按照消息获取顺序存储从弹幕服务器获取的弹幕消息,且用于后续弹幕消息分发时的消息遍历,以有效避免弹幕消息未被及时分发而丢失,同时保持弹幕消息的分发顺序性。通过该步骤的操作,分发目标对象就可以在上一条目标弹幕消息处理完成时,及时地从弹幕分发器对象中获得新的函数返回值,进而获得本次弹幕消息分发操作而获得的目标弹幕消息(即当前目标弹幕消息)。

示例性地,在分发目标对象以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,获得当前目标弹幕消息之前,还包括:弹幕分发器对象依据待添加弹幕消息,构建待添加map映射关系;弹幕分发器对象以待添加map映射关系为函数输入参数,调用列表元素添加函数,将待添加map映射关系添加至预先创建的第一消息列表。

其中,待添加弹幕消息是指需要添加至第一消息列表中的弹幕消息。map映射关系是指以键值对map数据类型存储的映射关系。待添加map映射关系是与待添加弹幕消息对应的map映射关系。列表元素添加函数是预先定义的,可以对第一消息列表进行元素添加操作的函数。

具体地,为了便于弹幕消息的管理,本发明实施例在弹幕分发器对象中以map数据类型对从弹幕服务器获取的弹幕消息进行存储。预先创建并初始化一个map数据结构的第一消息列表,即第一消息列表中的元素均以map数据类型存储,其中的弹幕消息标识type为map结构中的键,弹幕消息体msg为map结构中的值,同样地,值的数据类型可以是string类型、message类型或javabean类型,本发明实施例中以message类型为例进行说明。具体实施时,根据type的数据类型string和msg的数据类型message,通过列表类list创建第一消息列表listmessage,并利用android系统的动态数组类arraylist进行第一消息列表listmessage的初始化,其代码可以为list<map<string,message>>listmessage=newarraylist<map<string,message>>()。创建第一消息列表listmessage之后,可以对其进行元素添加。

首先根据待添加弹幕消息构建待添加map映射关系,例如通过系统提供的map类,调用map对象创建函数hashmap创建一个map对象msgmap,其代码实现可以为map<string,message>msgmap=newhashmap<string,message>()。基于该map对象,以待添加弹幕消息中的type和msg为函数输入参数,调用map对象的元素插入函数msgmap.put(type,msg),构建待添加map映射关系。然后,调用第一消息列表的列表元素添加函数add(),将待添加map映射关系添加至第一消息列表,其代码实现可以为listmessage.add(map)。

这里需要说明,从弹幕服务器获取弹幕消息可以是android客户端中的音视频播放/直播应用软件向弹幕服务器发送数据获取请求,弹幕服务器被动响应数据获取请求来获取;优选是通过android客户端中预先建立的弹幕监听器接口对象及弹幕监听器接口对象中作为回调函数的消息传输函数,接收弹幕服务器中的弹幕库对象回调消息传输函数发送的弹幕消息,其中,弹幕监听器接口对象用于监听弹幕服务器中的弹幕库对象。也就是说,android客户端从弹幕服务器获取弹幕消息是通过在android客户端中设置弹幕监听器接口对象,对弹幕服务器中的弹幕库对象进行监听,为弹幕服务器发送弹幕消息至android客户端提供接口,且弹幕监听器中包含回调函数onmessage(stringtype,messagemsg),为弹幕服务器发送弹幕消息至android客户端提供调用函数指针。当弹幕消息到达弹幕服务器时,触发弹幕监听事件,则弹幕服务器主动调用回调函数onmessage,即弹幕服务器通过回调函数的函数指针,将弹幕消息由弹幕监听器接口对象发送至android客户端,android客户端中的弹幕分发器对象则可以及时地、被动地接收弹幕消息。

s130、若函数返回值不为空对象,则分发目标对象将函数返回值确定为当前目标弹幕消息。

具体地,如果s120获得的函数返回值不是空对象null,说明此次s120的执行获得了与分发目标对象相对应的目标弹幕消息,则分发目标对象将获得的函数返回值确定为当前目标弹幕消息,本次弹幕消息分发操作结束。

参见图3,通过本发明实施例中的弹幕消息分发方法,弹幕消息301可以直接通过弹幕分发器302传输至需要接收弹幕消息的视图对象中,即位于第三视图层305中的视图对象,而无需经过中间的第一视图层303和第二视图层304。

本实施例的技术方案,通过分发目标对象获取继承了弹幕消息获取协议及其内包含的弹幕消息获取函数的弹幕分发器对象,构建了弹幕分发器对象与分发目标对象之间的消息传输通道,使得弹幕分发器对象与分发目标对象之间能够直接进行弹幕消息的传输,简化了弹幕消息的分发过程,提高了弹幕消息的分发效率。通过在检测到上一条目标弹幕消息处理完成时,分发目标对象获取其对应的当前目标弹幕消息,实现了分发目标对象根据其内部的上一条目标弹幕消息处理状态主动获取当前目标弹幕消息,提高了弹幕消息分发的及时性,也使得弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态之间保持同步,从而减少了分发目标对象内部的弹幕消息并行处理业务逻辑,提高了分发目标对象的性能稳定性。通过分发目标对象以消息标识列表为函数输入参数,由弹幕分发器对象转换而得到的分发协议对象调用作为回调函数的弹幕消息获取函数,获得弹幕分发器对象反馈的函数返回值,且在函数返回值不为空对象时,将函数返回值确定为当前目标弹幕消息,使得分发目标对象直接获取其对应的当前目标弹幕消息,减少了无关弹幕消息的获取过程,进一步简化了弹幕消息的分发过程,从而进一步提高了弹幕消息的分发效率。

实施例二

本实施例在上述实施例一的基础上,对“分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象”进行了进一步优化。在此基础上,也可以对“检测到上一条目标弹幕消息处理完成”进行进一步优化。在上述基础上,还可以增加“函数返回值为空对象”时的步骤。本实施例中的执行主体为分发目标对象。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图4,本实施例提供的弹幕消息分发方法包括:

s210、通过弹幕分发器类调用对象获取函数,获取弹幕分发器对象。

其中,对象获取函数是弹幕分发器类中的内部函数(也称成员函数),其用于获取弹幕分发器类的实例化对象。

具体地,分发目标对象从弹幕分发器对象中获取目标弹幕消息的前提,是获取到弹幕分发器对象,以为分发目标对象和弹幕分发器对象之间建立桥接关系建立基础。具体实施时,分发目标对象通过弹幕分发器类danmumanager,调用对象获取函数getinstence(),获取函数返回值。上述代码实现可以为:danmumanager.getinstence(),该函数返回值即为弹幕分发器对象。

s220、依据弹幕消息获取协议,将弹幕分发器对象转换为分发协议对象。

具体地,分发目标对象在获取继承了弹幕消息获取协议的弹幕分发器对象之后,由于弹幕分发器对象既有弹幕分发器类的功能,也有分发协议对象的功能,故在后续使用该对象时无法确定其执行哪种功能,即无法直接对弹幕分发器对象进行弹幕消息获取的操作。所以,为了使得弹幕分发器对象仅具备弹幕分发协议对象的功能,以便于弹幕消息获取协议的执行,分发目标对象需要将继承了弹幕消息获取协议的弹幕分发器对象,再强制转换为与弹幕消息获取协议对应的分发协议对象,其代码实现可以为:(ifetchmsg)danmumanager.getinstence()。

s230、检测消息处理状态变量值。

其中,消息处理状态变量是指表征弹幕消息处理状态的处理状态变量,其是分发目标对象中用于存储对目标弹幕消息处理状态的消息处理标识。消息处理标识是指表征分发目标对象对目标弹幕消息处理状态的标识,该标识可以是字母、数字、符号及上述任意组合。消息处理标识可以包括弹幕消息处理完成的完成标识,例如state_end,以及弹幕消息未处理完成的未完成标识,例如state_on;未完成标识具体可以包含弹幕消息开始处理的开始标识,例如state_start,和弹幕消息正在处理中的正在处理标识,例如state_hand。由此可知消息处理标识为至少两种标识,故为了便于消息处理标识的管理,将消息处理状态变量设计为枚举类型。

具体地,分发目标对象获取消息处理状态变量的值(即消息处理状态变量值)。

s240、当消息处理状态变量值为完成标识时,确定上一条目标弹幕消息处理完成。

具体地,当s230中获取的消息处理状态变量值为完成标识时,即可判定上一条目标弹幕消息处理完成。

如果消息处理状态变量值不为完成标识,那么间隔标识判断时间段,返回执行检测消息处理状态变量值的步骤,直至消息处理状态变量值为完成标识。这里标识判断时间段是指预先设定的、用于触发判断消息处理标识是否为完成标识的定时器时长。分发目标对象在检测到消息处理状态变量值不为完成标识时,说明该分发目标对象内部有开始处理或正在处理的上一条目标弹幕消息,其暂时无法接收新的弹幕消息,需要等待分发目标对象处理完上一条目标弹幕消息。上述等待的过程中,分发目标对象需要不断获取其消息处理状态变量值。为了均衡弹幕消息分发的及时性和系统内存消耗,本实施例中设置了一个标识判断定时器,当定时器周期达到,即标识判断时间段到达时,再循环执行s230的操作,直至消息处理状态变量值为完成标识,则判定上一条目标弹幕消息处理完成。

s250、以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值。

s260、判断函数返回值是否为空对象。

具体地,分发目标对象比较函数返回值与空对象null,以判断函数返回值是否为空对象。如果函数返回值不是空对象,则执行s270;如果函数返回值是空对象,则执行s280。

s270、将函数返回值确定为当前目标弹幕消息。

s280、间隔消息重获时间段,返回执行以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值的步骤,直至确定当前目标弹幕消息。

其中,消息重获时间段是指指预先设定的、用于触发重新执行弹幕消息获取操作的定时器时长。该消息重获时间段可以是预先设定的固定时长,也可以是按照预先设定的时长变化规则,动态变动的时长。该时长变化规则可以为分发目标对象获取下一条缓存弹幕消息为需求弹幕消息的概率。例如,设置一个数值固定的初始时长(如1s),当获取的下一条缓存弹幕消息不为需求弹幕消息时,认为获取下一条缓存弹幕消息为需求弹幕消息的概率较小,则将初始时长增加设定时间段(如1s),确定第一调整时间段;当再次获取的下一条缓存弹幕消息仍不为需求弹幕消息时,则第一调整时间段增加设定时间段(如1s),获得第二调整时间段,以此类推,直至获取的下一条缓存弹幕消息为需求弹幕消息,则定时器时长归0。

具体地,如果分发目标对象所获取的函数返回值是空对象,说明弹幕分发器对象的第一消息列表中暂时没有分发目标对象对应的目标弹幕消息。那么,分发目标对象需要等待弹幕分发器对象中获取到目标弹幕消息之后,重新从弹幕分发器对象的第一消息列表中获取函数返回值。为了平衡系统内存消耗与弹幕消息获取的及时性,本实施例中设置了消息重获时间段,当定时器周期达到,即消息重获时间段到达时,再返回执行s250及其后续步骤的操作,直至获得当前目标弹幕消息。

本实施例的技术方案,通过对象转换的方式,获取了弹幕分发器对象对应的分发协议对象,使得弹幕消息获取协议便于实现,进一步提高了弹幕消息的分发效率。通过间隔标识判断时间段循环检测消息处理状态变量值直至确定上一条目标弹幕消息处理完成,一定程度上降低了分发目标对象的系统内存消耗,从而进一步提高弹幕消息分发速度。通过函数返回值为空对象时,间隔消息重获时间段,返回执行以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值的步骤,直至确定当前目标弹幕消息,进一步平衡弹幕消息分发时效性与系统内存消耗,从而更进一步地提高弹幕消息分发效率。

实施例三

本实施例在上述各实施例的基础上,对“弹幕消息获取函数”的功能实现过程进行了进一步优化。本实施例中的执行主体为弹幕分发器对象。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图5,本实施例提供的弹幕消息分发方法包括:

s301、从第一消息列表中按序获取一条弹幕消息,作为当前弹幕消息。

其中,当前弹幕消息是指本次操作中用于进行弹幕消息筛选的弹幕消息,其是第一消息列表中的弹幕消息。

具体地,由于弹幕消息的处理具有顺序性,故弹幕分发器对象在从第一消息列表中筛选目标弹幕消息时,也需按照弹幕消息的获取顺序进行筛选,具体则是按照第一消息列表中弹幕消息的存储顺序进行弹幕消息遍历。该过程中,按序从第一消息列表中获取当前弹幕消息时,需要依据第一消息列表的数据类型确定列表中弹幕消息的获取顺序。以具有先进先出特性的队列为例,弹幕分发器对象获取第一消息列表队头的第一个弹幕消息作为当前弹幕消息。需要说明的是,第一消息列表中的弹幕消息是以type-msg的映射关系形式存储,优选以键值对map结构存储。另外,为了保持弹幕消息的顺序性,从第一消息列表中获取一条弹幕消息进行后续操作时,将该弹幕消息从第一消息列表中删除。

s302、依据当前弹幕消息确定当前消息标识。

具体地,弹幕分发器对象解析当前弹幕消息,如通过map.getkey等方式获取当前弹幕消息的键信息type作为当前弹幕消息对应的弹幕消息标识(即当前消息标识)。

s303、依据当前消息标识和消息标识列表,确定消息标识列表中是否包含当前消息标识。

具体地,弹幕分发器对象将当前弹幕消息标识与消息标识列表中的各个弹幕消息标识进行比较,以确定消息标识列表中是否包含当前消息标识。如果包含,则执行s304;如果不包含,则执行s305。

s304、按序逐条获取第一消息列表中的剩余弹幕消息,并按照剩余弹幕消息的获取顺序,逐条将剩余弹幕消息存储至第二消息列表。

其中,剩余弹幕消息是指第一消息列表中存储顺序在当前弹幕消息之后的弹幕消息。第二消息列表是指弹幕分发器对象中预先建立的列表,其是弹幕消息获取函数中的一个过渡列表,用于按照消息获取顺序存储除当前目标弹幕消息之外的其他弹幕消息。例如第二消息列表按照第一消息列表中弹幕消息的存储顺序,存储第一消息列表中除本次操作中被确定为函数返回值的弹幕消息之外的其他所有弹幕消息。这样既能避免操作第一消息列表过程中弹幕消息的丢失,又能保持弹幕消息的分发顺序性。

具体地,当s303中确定消息标识列表中包含当前弹幕消息标识时,说明当前弹幕消息属于分发目标对象对应的目标弹幕消息,那么应当将其作为函数返回值返回至分发目标对象,同时不再对第一消息列表中当前弹幕消息之后的各个弹幕消息进行遍历与判断。但是为了保持弹幕消息的顺序性,且简化程序处理逻辑,本实施例中将第一消息列表中的剩余弹幕消息逐条按序取出,并逐条按序地存储至第二消息列表。根据后续说明可知,第一消息列表中当前弹幕消息之前的各个弹幕消息已经逐条存储至第二消息列表,那么此时,第二消息列表中便存储了第一消息列表中除当前弹幕消息之外的所有弹幕消息,而第一消息列表则相应被清空。之后,执行s308。

s305、将当前弹幕消息存储至第二消息列表。

具体地,当s303中确定消息标识列表中不包含当前弹幕消息标识时,说明当前弹幕消息不属于分发目标对象对应的目标弹幕消息,则弹幕分发器对象应当进行下一条弹幕消息的判断。但是,考虑到当前弹幕消息可能是其他分发目标对象对应的目标弹幕消息,故弹幕分发器对象不应当丢弃该当前弹幕消息,而是按序将其存储至第二消息列表中。之后,执行s306。

s306、从第一消息列表中按序获取下一条弹幕消息,更新当前弹幕消息。

具体地,按照第一消息列表的数据类型,按序从第一消息列表中获取当前弹幕消息之后的下一条弹幕消息,并将其作为新的当前弹幕消息,即更新当前弹幕消息。之后,执行s307。

s307、返回执行依据当前弹幕消息确定当前消息标识的步骤,直至确定消息标识列表中包含当前消息标识或遍历完第一消息列表。

具体地,更新当前弹幕消息之后,需要继续判断其是否是分发目标对象的目标弹幕消息,即返回执行s302及其后续步骤,直到弹幕分发器对象确定消息标识列表中包含当前消息标识,则后续执行s304及其后续步骤;或者直到遍历完第一消息列表,此时说明第一消息列表中没有分发目标对象对应的目标弹幕消息,同时第一消息列表也被清空,第二消息列表中则完全存储了第一消息列表中的弹幕消息。之后,执行s308。

s308、将第二消息列表中的所有弹幕消息按序存储至第一消息列表。

具体地,由于弹幕分发器对象每次都是从第一消息列表中获取弹幕消息进行判断,故在第一消息列表被清空之后,还需将作为过渡列表的第二消息列表中的各个弹幕消息,按照弹幕消息获取时间先后顺序,按序存储至第一消息列表。之后再执行返回函数返回值的操作,以结束弹幕消息获取函数。具体则是,若在本步骤之前的操作为s304,则后续相应地执行s309;若本步骤之前的操作为s307中遍历完第一消息列表的操作,则后续相应地执行s310。

s309、将当前弹幕消息确定为函数返回值。

具体地,以弹幕消息以map数据结构存储为例,将当前弹幕消息对应的map键信息,即弹幕消息体msg作为函数返回值。该弹幕消息体msg可以是字符串类型,也可以是解析为javabean对象类型。当然,也可以直接将整个map结构的当前弹幕消息作为函数返回值。

s310、将空对象确定为函数返回值。

具体地,由于整个第一消息列表中均未找到分发目标对象对应的目标弹幕消息,故弹幕消息获取函数直接返回一个空对象null作为函数返回值。

本实施例的技术方案,以消息标识为媒介,而非以整个弹幕消息为媒介,对第一消息标识进行遍历查找,提高了函数返回值的确定速度,进而进一步提高弹幕消息分发效率。通过在对第一消息列表的遍历过程中,将第一消息列表中的某些弹幕消息按序存储至第二消息列表,并在返回函数返回值之前,将第二消息列表中的所有弹幕消息按序存储至第一消息列表,保证了弹幕消息的顺序性和完整性。

以下是本发明实施例提供的弹幕消息分发装置的实施例,该装置与上述各实施例的弹幕消息分发方法属于同一个发明构思,在弹幕消息分发装置的实施例中未详尽描述的细节内容,可以参考上述弹幕消息分发方法的实施例。

实施例四

本实施例提供一种弹幕消息分发装置,参见图6,该装置具体包括:

协议对象确定模块610,用于分发目标对象依据弹幕分发器对象及弹幕消息获取协议,确定分发协议对象;

函数返回值确定模块620,用于在检测到上一条目标弹幕消息处理完成时,分发目标对象以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值,其中,弹幕消息获取函数为弹幕分发器对象继承弹幕消息获取协议而获得;

弹幕消息确定模块630,用于若函数返回值不为空对象,则分发目标对象将函数返回值确定为当前目标弹幕消息。

可选地,在上述装置的基础上,该装置还包括循环模块,用于:

在获得函数返回值之后,若函数返回值为空对象,则分发目标对象间隔消息重获时间段,返回执行以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值的步骤,直至确定当前目标弹幕消息。

可选地,函数返回值确定模块620包括函数执行子模块,用于通过如下步骤实现获得函数返回值的功能:

弹幕分发器对象从第一消息列表中按序获取一条弹幕消息,作为当前弹幕消息;

弹幕分发器对象依据当前弹幕消息确定当前消息标识;

弹幕分发器对象依据当前消息标识和消息标识列表,确定消息标识列表中是否包含当前消息标识;

若是,则弹幕分发器对象将当前弹幕消息确定为函数返回值;

若否,则弹幕分发器对象从第一消息列表中按序获取下一条弹幕消息,更新当前弹幕消息,返回执行依据当前弹幕消息确定当前消息标识的步骤,直至遍历完第一消息列表,并将空对象确定为函数返回值。

进一步地,函数执行子模块还具体用于:

在弹幕分发器对象将当前弹幕消息作为函数返回值之前,弹幕分发器对象按序逐条获取第一消息列表中的剩余弹幕消息,并按照剩余弹幕消息的获取顺序,逐条将剩余弹幕消息存储至第二消息列表;

在弹幕分发器对象从第一消息列表中按序获取下一条弹幕消息之前,弹幕分发器对象将当前弹幕消息存储至第二消息列表;

在弹幕分发器对象确定函数返回值之前,弹幕分发器对象将第二消息列表中的所有弹幕消息按序存储至第一消息列表。

可选地,协议对象确定模块610具体用于:

分发目标对象通过弹幕分发器类调用对象获取函数,获取弹幕分发器对象;

分发目标对象依据弹幕消息获取协议,将弹幕分发器对象转换为分发协议对象。

可选地,函数返回值确定模块620具体用于:

分发目标对象检测消息处理状态变量值;

当消息处理状态变量值为完成标识时,分发目标对象确定上一条目标弹幕消息处理完成。

可选地,在上述装置的基础上,该装置还包括第一消息列表获取模块,用于:

在分发目标对象以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,获得当前目标弹幕消息之前,弹幕分发器对象依据待添加弹幕消息,构建待添加map映射关系;

弹幕分发器对象以待添加map映射关系为函数输入参数,调用列表元素添加函数,将待添加map映射关系添加至预先创建的第一消息列表。

通过本发明实施例四的一种弹幕消息分发装置,实现了弹幕消息的直达式分发,简化了弹幕消息分发过程,提高了弹幕消息分发效率。同时保持了弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态同步,提高了分发目标对象的性能稳定性。

本发明实施例所提供的弹幕消息分发装置可执行本发明任意实施例所提供的弹幕消息分发方法,具备执行方法相应的功能模块和有益效果。

值得注意的是,上述弹幕消息分发装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

实施例五

参见图7,本实施例提供了一种设备700,其包括:一个或多个处理器720;存储装置710,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器720执行,使得一个或多个处理器720实现本发明实施例所提供的弹幕消息分发方法,包括:

分发目标对象依据弹幕分发器对象及弹幕消息获取协议,确定分发协议对象;

在检测到上一条目标弹幕消息处理完成时,分发目标对象以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值,其中,弹幕消息获取函数为弹幕分发器对象继承弹幕消息获取协议而获得;

若函数返回值不为空对象,则分发目标对象将函数返回值确定为当前目标弹幕消息。

当然,本领域技术人员可以理解,处理器720还可以实现本发明任意实施例所提供的弹幕消息分发方法的技术方案。

图7显示的设备700仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图7所示,该设备700包括处理器720、存储装置710、输入装置730和输出装置740;设备中处理器720的数量可以是一个或多个,图7中以一个处理器720为例;设备中的处理器720、存储装置710、输入装置730和输出装置740可以通过总线或其他方式连接,图7中以通过总线750连接为例。

存储装置710作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的弹幕消息分发方法对应的程序指令/模块(例如,弹幕消息分发装置中的协议对象确定模块、函数返回值确定模块和弹幕消息确定模块)。

存储装置710可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置710可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置710可进一步包括相对于处理器720远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置730可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置740可包括显示屏等显示设备。

实施例六

本实施例提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种弹幕消息分发方法,该方法包括:

分发目标对象依据弹幕分发器对象及弹幕消息获取协议,确定分发协议对象;

在检测到上一条目标弹幕消息处理完成时,分发目标对象以消息标识列表为函数输入参数,通过分发协议对象调用弹幕消息获取函数,以使弹幕分发器对象回调弹幕消息获取函数,获得函数返回值,其中,弹幕消息获取函数为弹幕分发器对象继承弹幕消息获取协议而获得;

若函数返回值不为空对象,则分发目标对象将函数返回值确定为当前目标弹幕消息。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的弹幕消息分发方法中的相关操作。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的弹幕消息分发方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

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