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

文档序号:16065681发布日期:2018-11-24 12:38阅读:198来源:国知局

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

背景技术

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

以弹幕分发目标为视图为例,目前,对于安装于android系统的音视频播放应用软件,其向各个视图分发弹幕消息的方式是逐层传递的方式。具体来说,android系统中的各个视图是按照层级关系布设的,那么基于该层级关系,可以构建各个视图之间的引用关系链。弹幕消息在各个视图之间的传递,便是按照上述引用关系链进行逐层传递的。参见图1,如果一个位于第三视图层104中的视图需要获取到弹幕消息101,那么该弹幕消息101需要按照引用关系链,先传递至第一视图层102,再由第一视图层102传递至第二视图层103,并最终由第二视图层103再传递至第三视图层104。这样,该视图获取弹幕消息的过程就比较复杂,用时较长,效率较低。而且,即便第一视图层102和第二视图层103中的视图不需要该弹幕消息,其也必须接收并传递该弹幕消息,无疑会造成系统资源的浪费。

此外,上述弹幕分发过程中,每当音视频播放应用软件获取到一条新的弹幕消息,其都会立即将该新的弹幕消息分发至各个视图中。如果接收弹幕消息的视图中有正在处理的弹幕消息,那么该视图就需要同时处理多条弹幕消息,会使得视图内部的业务逻辑复杂化,容易引入多线程问题。

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



技术实现要素:

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

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

弹幕分发器对象获取待分发弹幕消息及分发目标对象;

当检测到与所述分发目标对象对应的状态变量值为第一完成标识时,所述弹幕分发器对象通过所述分发目标对象,调用弹幕分发函数,将所述待分发弹幕消息分发至所述分发目标对象中;

其中,所述第一完成标识为所述分发目标对象在处理完已接收弹幕消息时,调用状态反馈函数,将所述分发目标对象中的第二完成标识反馈至所述弹幕分发器对象而获得;所述弹幕分发函数和所述状态反馈函数为所述分发目标对象继承预先定义的弹幕分发协议而获得。

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

数据获取模块,用于弹幕分发器对象获取待分发弹幕消息及分发目标对象;

消息分发模块,用于当检测到与所述分发目标对象对应的状态变量值为第一完成标识时,所述弹幕分发器对象通过所述分发目标对象,调用弹幕分发函数,将所述待分发弹幕消息分发至所述分发目标对象中;

其中,所述第一完成标识为所述分发目标对象在处理完已接收弹幕消息时,调用状态反馈函数,将所述分发目标对象中的第二完成标识反馈至所述弹幕分发器对象而获得;所述弹幕分发函数和所述状态反馈函数为所述分发目标对象继承预先定义的弹幕分发协议而获得。

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

一个或多个处理器;

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

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

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

本发明实施例通过分发目标对象在处理完已接收弹幕消息时,调用预先定义的弹幕分发协议中的状态反馈函数,将所述分发目标对象中的第二完成标识反馈至所述弹幕分发器对象,使得弹幕分发器对象能够及时地获得表征分发目标对象的弹幕消息处理状态的第一完成标识,从而确定待分发弹幕消息的分发时机,既确保了待分发弹幕消息分发的及时性,又实现了弹幕分发器中弹幕消息的分发状态与弹幕分发目标中弹幕消息的处理状态之间的同步,从而减少了分发目标对象内部的同步处理业务逻辑,进而提高了分发目标对象的性能稳定性。通过弹幕分发器对象通过分发目标对象,调用预先定义的弹幕分发协议中的弹幕分发函数,将所述待分发弹幕消息分发至所述分发目标对象中,实现了将弹幕消息直达式分发至分发目标对象,简化了弹幕消息的分发过程,提高了弹幕消息的分发效率。

附图说明

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

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

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

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

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

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

具体实施方式

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

实施例一

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

s110、弹幕分发器对象获取待分发弹幕消息及分发目标对象。

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

具体地,弹幕分发器对象在执行弹幕消息分发之前,先获取待分发弹幕消息。待分发弹幕消息可以是从存储并处理弹幕消息的弹幕服务器直接获取,也可以是从弹幕分发器对象中缓存的弹幕消息中获取,该缓存的弹幕消息是预先对弹幕服务器中获取的弹幕消息进行缓存而获取。上述待分发弹幕消息的获取方式需要根据弹幕服务器发送的弹幕消息的数量及分发目标对象的弹幕消息处理效率来确定。例如当服务器发送的弹幕消息数量较多,且分发目标对象的弹幕消息处理效率较低时,为了避免弹幕消息同步分发过程中弹幕消息未被及时分发而丢失,可以先将弹幕服务器发送的弹幕消息缓存至一个预先建立的列表(即消息列表)中,之后再在需要分发弹幕消息时,从消息列表中获取待分发弹幕消息。

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

分发目标对象的获取,则是将音视频播放/直播应用软件中的各个组件对象对应的可接收弹幕消息与待分发弹幕消息进行对比,以确定出与待分发弹幕消息对应的组件对象,作为分发目标对象。弹幕分发器对象获取了分发目标对象,意味着弹幕分发器对象持有了分发目标对象的引用关系,后续可以基于该引用关系进行待分发弹幕消息的分发。

s120、当检测到与分发目标对象对应的状态变量值为第一完成标识时,弹幕分发器对象通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中。

其中,状态变量值是指状态变量的变量值。状态变量是指弹幕分发器对象中,用于存储分发目标对象中对弹幕消息处理状态的消息处理标识的变量,其数量与分发目标对象的数量对应一致。消息处理标识是表征分发目标对象对弹幕消息处理状态的标识,该标识可以是字母、数字、符号及上述任意组合。消息处理标识可以包括弹幕消息处理完成的完成标识,例如state_end,以及弹幕消息未处理完成的未完成标识,例如state_on;未完成标识具体可以包含弹幕消息开始处理的开始标识,例如state_start,和弹幕消息正在处理中的正在处理标识,例如state_hand。

第一完成标识是指弹幕分发器对象中的完成标识。弹幕分发函数是用于进行弹幕消息分发的函数,其为弹幕分发协议的内部函数(或称成员函数)。弹幕分发协议是音视频播放/直播应用软件中预先定义的弹幕分发器对象进行同步弹幕分发时所遵循的组件间双向通信协议。

示例性地,第一完成标识为分发目标对象在处理完已接收弹幕消息时,调用状态反馈函数,将分发目标对象中的第二完成标识反馈至弹幕分发器对象而获得;弹幕分发函数和状态反馈函数为分发目标对象继承预先定义的弹幕分发协议而获得。其中,第二完成标识是指分发目标对象中的完成标识。状态反馈函数是用于进行消息处理标识反馈的函数,其将分发目标对象中的消息处理标识主动反馈至弹幕分发器对象,其是弹幕分发协议的内部函数。具体实施时,预先定义弹幕分发协议,其内至少包含弹幕分发函数和状态反馈函数,详细的弹幕分发协议定义将在后续进行说明。之后,分发目标对象继承上述定义的弹幕分发协议,以获得弹幕分发函数和状态反馈函数。详细的弹幕分发协议及内部函数的继承将在后续进行说明。分发目标对象继承了弹幕分发协议,意味着分发目标对象持有了弹幕分发协议接口及其内部函数。这样,分发目标对象就被注册至弹幕分发器对象所在的弹幕分发总线中,在弹幕分发器对象和各个分发目标对象之间也就建立了消息传输通道,且具备了实现弹幕消息同步地、透传式传输的实现函数。在完成上述弹幕分发协议定义及继承的弹幕消息分发的前提操作之后,分发目标对象就可以对其内部已经接收到的弹幕消息(即已接收弹幕消息)的处理状态进行检测,当检测到已经处理完已接收弹幕消息时,分发目标对象将其内部维护的消息处理状态变量的值修改为第二完成标识,并调用其继承的状态反馈函数,将第二完成标识反馈至弹幕分发器对象。弹幕分发器对象便获得第一完成标识,并将与分发目标对象对应的状态变量值修改为第一完成标识。这里的消息处理状态变量是分发目标对象中,用于存储消息处理标识的变量。由上述消息处理标识的说明可知,消息处理标识为至少两种标识,故为了便于消息处理标识的管理,将消息处理状态变量设计为枚举类型,例如消息处理状态变量danmustate可以是:

具体地,为了实现弹幕分发器对象中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态之间的同步,弹幕分发器对象在进行弹幕消息分发之前,需要先确定分发目标对象中对其已接收弹幕消息的处理状态,即弹幕分发器对象需要先检测其内部的状态变量值。当检测到状态变量值为第一完成标识时,说明分发目标对象内部已经完成对已接收弹幕消息的处理,其可以接收新的弹幕消息。之后,弹幕分发器对象可以将待分发弹幕消息解析并重构为字符串string类型的消息标识type和消息message类型的消息体msg的形式,并以获得的type和msg作为函数输入参数,通过分发目标对象调用其内部的弹幕分发函数onmessage(stringtype,messagemsg),将待分发弹幕消息分发至分发目标对象中。这里,消息标识是指能够标识弹幕消息的字符,其可以是数字、字母、符号及上述各种字符的任意组合,该消息标识应当是一条弹幕消息的全局的唯一标识。消息体是指弹幕消息的承载者,其内包含具体地弹幕消息内容。

示例性地,在弹幕分发器对象通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中之前,还包括:定义弹幕分发协议及弹幕分发协议中的状态反馈函数;依据弹幕消息获取协议,定义弹幕分发协议中的弹幕分发函数;分发目标对象通过协议继承关键字,继承弹幕分发协议,以获得弹幕分发函数和状态反馈函数;其中,弹幕分发协议为具有公有权限修饰符的接口类型;状态反馈函数具有公有权限修饰符,且函数返回值类型为枚举类型;弹幕分发函数具有公有权限修饰符,且函数返回值类型为无类型。

其中,弹幕消息获取协议是指android客户端从弹幕服务器获取弹幕消息时所遵循的通信协议,根据s110中所说明的,这里的弹幕消息获取协议是弹幕监听器接口对象及其内部所包含的回调函数。协议继承关键字是java语言中规定的进行协议继承的关键字。

具体地,为了实现弹幕分发器对象的直达式弹幕分发,本发明实施例中预先进行了双向通信的弹幕分发协议的实现。更进一步地,为了实现对弹幕消息的透传式分发,本发明实施例中的弹幕分发协议为透传分发协议。弹幕分发协议是通过与android客户端中弹幕消息获取协议采用一致的协议内部函数的形式来实现透传式分发的。

具体实施时,为了使得其他类也具有访问弹幕分发协议的权限,将双向通信的弹幕分发协议itwowaymsg定义为返回值为无类型void,且具有公有权限修饰符public的接口类型interface的协议。同样地,将其内部函数——弹幕分发函数onmessage和状态反馈函数onstatechange也定义为具有公有权限修饰符public的函数。由于状态反馈函数是一个返向通道函数,其用于将分发目标对象的消息处理标识反馈给弹幕分发器对象,故将状态反馈函数的返回值类型定义为与消息处理状态变量danmustate的数据类型一致的枚举类型。由于弹幕分发函数是一个透传函数,其用于将弹幕分发器对象中的待分发弹幕消息透传至分发目标对象,故根据弹幕消息获取协议的内部函数onmessage(stringtype,messagemsg),定义弹幕分发函数,且由于弹幕分发函数不关注返回值,故将其函数返回值类型为无类型void。通过上述协议的定义,将弹幕消息分发的功能集中在弹幕分发器对象中,而分发目标对象则只需适时反馈其内部的弹幕消息处理状态及接收分发下来的弹幕消息,可以达到应用软件实现代码的高内聚低耦合目的,使得后期代码易于维护,提高应用软件实现代码的扩展性。上述弹幕分发协议及其内部函数的定义代码可以为:

publicvoidinterfaceitwowaymsg{

publicdanmustateonstatechange();

publicvoidonmessage(stringtype,messagemsg);

}

之后,所有的分发目标对象均通过协议继承关键字implements,实现对弹幕分发协议itwowaymsg的继承,以获得状态反馈函数onstatechange及弹幕分发函数onmessage。

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

本实施例的技术方案,通过分发目标对象在处理完已接收弹幕消息时,调用预先定义的弹幕分发协议中的状态反馈函数,将分发目标对象中的第二完成标识反馈至弹幕分发器对象,使得弹幕分发器对象能够及时地获得表征分发目标对象的弹幕消息处理状态的第一完成标识,从而确定待分发弹幕消息的分发时机,既确保了待分发弹幕消息分发的及时性,又实现了弹幕分发器中弹幕消息的分发状态与弹幕分发目标中弹幕消息的处理状态之间的同步,从而减少了分发目标对象内部的同步处理业务逻辑,进而提高了分发目标对象的性能稳定性。通过弹幕分发器对象通过分发目标对象,调用预先定义的弹幕分发协议中的弹幕分发函数,将待分发弹幕消息分发至分发目标对象中,实现了将弹幕消息直达式分发至分发目标对象,简化了弹幕消息的分发过程,提高了弹幕消息的分发效率。

实施例二

本实施例在上述实施例一的基础上,对“弹幕分发器对象获取待分发弹幕消息”进行了进一步优化。在此基础上,可以对“弹幕分发器对象获取分发目标对象”进行进一步优化。在上述基础上,还可以增加弹幕消息未成功分发时的重试机制。在上述基础上,还可以进一步对“弹幕分发器对象通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图4,本实施例提供的弹幕消息分发方法包括:

s210、弹幕分发器对象依据消息列表类型,从消息列表中按序获取一条缓存弹幕消息,作为待分发弹幕消息。

其中,消息列表类型是指消息列表的数据类型,例如可以是堆栈类型或队列类型等,本实施例中优选为队列类型,以便能够按照弹幕消息的获取顺序进行弹幕消息的分发。缓存弹幕消息是指消息列表中缓存的、从弹幕服务器获取的弹幕消息。

具体地,由于弹幕分发器对象并不是在从弹幕服务器获取到弹幕消息时,实时地将其分发至分发目标对象,故为了避免丢失从弹幕服务器获取的弹幕消息,本实施例中先将获取到的弹幕消息缓存至一个消息列表中,该消息列表应该是一个有序列表,且其内部元素的可操作方式应该是先进先出方式。弹幕分发器对象在获取待分发弹幕消息时,按照消息列表类型,从消息列表中按序获取一个新的缓存弹幕消息,作为待分发弹幕消息。

示例性地,依据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为待分发弹幕消息包括:判断消息列表的元素个数是否大于0;若否,则间隔列表查询时间段,返回执行判断消息列表的元素个数是否大于0的步骤,直至消息列表中的元素个数大于0;若是,则依据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为待分发弹幕消息。

其中,列表查询时间段是指预先设定的、用于查询消息列表元素个数是否大于0的定时器时长。

具体地,由于是从消息列表中获取待分发弹幕消息,故在进行列表元素获取操作之前,需要先判断消息列表中是否已经存储了缓存弹幕消息,即判断消息列表元素个数是否大于0。如果元素个数大于0,则说明消息列表中仍有未分发的弹幕消息,则按照消息列表类型,从消息列表中按序获取一个新的缓存弹幕消息,作为待分发弹幕消息。如果元素个数等于0,则说明消息列表中没有需要分发的弹幕消息,此时需要等待弹幕服务器发送新的弹幕消息。为了均衡待分发弹幕消息获取的及时性和系统内存消耗,本实施例中设置了一个列表查询定时器,当定时器周期达到,即列表查询时间段到达时,再循环执行判断消息列表元素个数是否大于0的操作,直至判断列表元素个数大于0,则执行依据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为待分发弹幕消息的操作。

示例性地,在弹幕分发器对象依据消息列表类型,从消息列表中按序获取一条缓存弹幕消息,作为待分发弹幕消息之前,还包括:弹幕分发器对象依据待添加弹幕消息,构建待添加map映射关系;弹幕分发器对象以待添加map映射关系为输入参数,调用列表元素添加函数,将待添加map映射关系添加至预先创建的消息列表。

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

具体地,为了便于弹幕消息的管理,本实施例中以map数据类型对弹幕消息进行存储。预先创建并初始化一个map数据结构的消息列表,即消息列表中的元素均以map数据类型存储,其中的弹幕消息标识type为map结构中的键,消息体msg为map结构中的值。具体实施时,根据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)。

s220、依据待分发弹幕消息,确定消息标识。

具体地,获取待分发弹幕消息之后,对其进行解析及重构,以获取待分发弹幕消息的消息标识type。

s230、依据消息标识,确定分发目标对象标识。

其中,分发目标对象标识是指区分分发目标对象的标识,例如可以是名称或简称等。

具体地,每一个分发目标对象都有其可接收的弹幕消息,也就是说分发目标对象和弹幕消息之间有映射关系存在。那么,基于上述映射关系,根据待分发弹幕消息的消息标识,也可以确定出可接收待分发弹幕消息的分发目标对象标识。

s240、依据分发目标对象标识,从分发目标列表中获取分发目标对象。

其中,分发目标列表是指存储所有弹幕分发对象的列表,其是弹幕分发器对象持有弹幕分发对象的引用关系的表现形式,即弹幕分发对象存储至分发目标列表中,就意味着弹幕分发器对象持有了弹幕分发对象的引用关系,后续弹幕分发器对象可以基于该引用关系进行待分发弹幕消息的分发。这里弹幕分发对象是指需要接收弹幕消息,且满足直达式接收弹幕消息条件的组件对象,其包含分发目标对象。该分发目标列表的维护是一个动态过程,该过程可以是:当弹幕分发对象被加载时,在其对应的生命周期起始函数oncreated中,通过弹幕分发对象调用实例判断关键字instanceof,判断弹幕分发对象继承了弹幕分发协议时,将其添加至分发目标列表;当弹幕分发对象被销毁时,则在其对应的生命周期结束函数ondeatch中,将其从分发目标列表中移除。

具体地,以分发目标对象标识为查询关键词,在分发目标列表中查询分发目标对象。例如通过分发目标列表的元素判断函数contains(),查询分发目标列表中是否包含分发目标对象。若包含,则从分发目标列表中获取分发目标对象,例如调用分发目标列表的元素获取函数get(),获取分发目标对象。若不包含,则结束本次操作,以进行下一个待分发弹幕消息的处理。

s250、弹幕分发器对象依据弹幕分发协议,将分发目标对象转换为目标分发协议对象。

其中,弹幕分发协议对象是指基于弹幕分发协议而生成的对象。目标分发协议对象是分发目标对象进行对象转换之后的弹幕分发协议对象,其数据类型仅为弹幕分发协议对象。

具体地,弹幕分发器对象在进行待分发弹幕消息的直达式分发时,是依据弹幕分发协议进行分发的,其在识别分发目标对象时,是通过弹幕分发协议对象进行识别的。虽然分发目标对象已经继承了弹幕分发协议,属于一种弹幕分发协议对象,但是其同时还是组件对象。为了便于弹幕分发协议的执行,利用分发目标对象进行弹幕消息的分发,需将其设置为单纯的弹幕分发协议对象。故在进行待分发弹幕消息的分发之前,弹幕分发器对象需要先将其获得的分发目标对象转换为弹幕分发协议对象,即获得目标分发协议对象。

s260、弹幕分发器对象通过目标分发协议对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中。

具体地,弹幕分发器对象通过目标分发协议对象,调用其继承的弹幕分发函数,将待分发弹幕消息分发至分发目标对象中。

s270、在重获消息时间段内,若弹幕分发器对象检测到状态变量值不为第一接收标识,则执行通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中的步骤。

其中,重获消息时间段是指预先设定的、用于触发弹幕分发器对象重新发送待分发弹幕消息至分发目标对象的定时器时长。接收标识是消息处理标识中的一种,其用于表征分发目标对象接收到弹幕分发器对象分发的弹幕消息。第一接收标识是指弹幕分发器对象中的接收标识。示例性地,第一接收标识为分发目标对象在接收到待分发弹幕消息时,调用状态反馈函数,将分发目标对象中的第二接收标识反馈至弹幕分发器对象而获得。这里,第二接收标识是分发目标对象中的接收标识。具体实施时,分发目标对象对其是否接收到弹幕分发器对象分发的待分发弹幕消息进行检测,当检测到接收了待分发弹幕消息时,分发目标对象将其内部维护的消息处理状态变量的值修改为第二接收标识,并调用其继承的状态反馈函数,将第二接收标识反馈至弹幕分发器对象。弹幕分发器对象便获得第一接收标识,并将与分发目标对象对应的状态变量值修改为第一接收标识。

具体地,为了确保分发目标对象接收到了待分发弹幕消息,弹幕分发器对象将待分发弹幕消息分发之后,需要获知分发目标对象中对待分发弹幕消息的接收反馈,具体方式是弹幕分发器对象对状态变量值进行检测。考虑到弹幕消息的分发与接收需要一定的时耗,故本实施例中设置了重获消息定时器,当定时器周期达到,即重获消息时间段到达时,弹幕分发器对象获取状态变量值,并判断状态变量值是否为第一接收标识。若是,则表明分发目标对象接收到了待分发弹幕消息,此时不必重发待分发弹幕消息,而是执行下一条待分发弹幕消息的分发操作。若否,则表明分发目标对象接收待分发弹幕消息失败,此时需要弹幕分发器对象重发一次待分发弹幕消息,即返回执行s250。需要说明的是,为了节约系统内存消息,可以只进行设定次数的重试判定,即循环执行设定次数s250-s270。当然,也可以是循环执行s250-s270,直至弹幕分发器对象判断状态变量值为第一接收标识,即判断分发目标对象接收到了待分发弹幕消息为止。

本实施例的技术方案,通过依据预先创建的消息列表的消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为待分发弹幕消息,能够有效避免待分发弹幕消息的丢失,提高弹幕消息的分发完整性,也为弹幕消息的同步分发提供了基础。通过依据待分发弹幕消息,确定消息标识;依据消息标识,确定分发目标对象标识;依据分发目标对象标识,从分发目标列表中获取分发目标对象,能够提高分发目标对象获取的效率及准确性。通过在重获消息时间段内,若弹幕分发器对象检测到状态变量值不为第一接收标识,则执行通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中的操作,能够使得弹幕分发器对象及时判断分发目标对象是否接收待分发弹幕消息,并在分发目标对象接收待分发弹幕消息失败时,重新分发待分发弹幕消息,提高了分发目标对象对待分发弹幕消息的接收成功率,进一步提高弹幕消息的分发完整性及弹幕消息同步分发的有效性和效率。

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

实施例三

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

数据获取模块510,用于当检测到状态变量值为第一完成标识时,弹幕分发器对象获取待分发弹幕消息及分发目标对象;

消息分发模块520,用于当检测到与分发目标对象对应的状态变量值为第一完成标识时,弹幕分发器对象通过数据获取模块510获取的分发目标对象,调用弹幕分发函数,将数据获取模块510获取的待分发弹幕消息分发至分发目标对象中;

其中,第一完成标识为分发目标对象在处理完已接收弹幕消息时,调用状态反馈函数,将分发目标对象中的第二完成标识反馈至弹幕分发器对象而获得;弹幕分发函数和状态反馈函数为分发目标对象继承预先定义的弹幕分发协议而获得。

可选地,在上述装置的基础上,该装置还包括:弹幕分发协议设置模块,用于:

在弹幕分发器对象通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中之前,定义弹幕分发协议及弹幕分发协议中的状态反馈函数;

依据弹幕消息获取协议,定义弹幕分发协议中的弹幕分发函数;

分发目标对象通过协议继承关键字,继承弹幕分发协议,以获得弹幕分发函数和状态反馈函数;

其中,弹幕分发协议为具有公有权限修饰符的接口类型;状态反馈函数具有公有权限修饰符,且函数返回值类型为枚举类型;弹幕分发函数具有公有权限修饰符,且函数返回值类型为无类型。

可选地,数据获取模块510具体用于:

弹幕分发器对象依据消息列表类型,从消息列表中按序获取一条缓存弹幕消息,作为待分发弹幕消息。

进一步地,数据获取模块510具体用于:

判断消息列表的元素个数是否大于0;

若否,则间隔列表查询时间段,返回执行判断消息列表的元素个数是否大于0的步骤,直至消息列表中的元素个数大于0;

若是,则依据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为待分发弹幕消息。

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

在依据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为待分发弹幕消息之前,依据待添加弹幕消息,构建待添加map映射关系;以待添加map映射关系为输入参数,调用列表元素添加函数,将待添加map映射关系添加至预先创建的消息列表。

可选地,数据获取模块510具体用于:

依据待分发弹幕消息,确定消息标识;

依据消息标识,确定分发目标对象标识;

依据分发目标对象标识,从分发目标列表中获取分发目标对象。

可选地,消息分发模块520具体用于:

弹幕分发器对象依据弹幕分发协议,将分发目标对象转换为目标分发协议对象;

弹幕分发器对象通过目标分发协议对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中。

可选地,在上述装置的基础上,该装置还包括:消息重发模块,用于在弹幕分发器对象通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中之后,在重获消息时间段内,若弹幕分发器对象检测到状态变量值不为第一接收标识,则执行通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中的步骤;

其中,第一接收标识为分发目标对象在接收到待分发弹幕消息时,调用状态反馈函数,将分发目标对象中的第二接收标识反馈至弹幕分发器对象而获得。

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

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

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

实施例四

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

弹幕分发器对象获取待分发弹幕消息及分发目标对象;

当检测到与分发目标对象对应的状态变量值为第一完成标识时,弹幕分发器对象通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中;

其中,第一完成标识为分发目标对象在处理完已接收弹幕消息时,调用状态反馈函数,将分发目标对象中的第二完成标识反馈至弹幕分发器对象而获得;弹幕分发函数和状态反馈函数为分发目标对象继承预先定义的弹幕分发协议而获得。

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

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

如图6所示,该设备600包括处理器620、存储装置610、输入装置630和输出装置640;设备中处理器620的数量可以是一个或多个,图6中以一个处理器620为例;设备中的处理器620、存储装置610、输入装置630和输出装置640可以通过总线或其他方式连接,图6中以通过总线650连接为例。

存储装置610作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的弹幕消息分发方法对应的程序指令/模块(例如,弹幕消息分发装置中的数据获取模块和消息分发模块)。

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

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

实施例五

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

弹幕分发器对象获取待分发弹幕消息及分发目标对象;

当检测到与分发目标对象对应的状态变量值为第一完成标识时,弹幕分发器对象通过分发目标对象,调用弹幕分发函数,将待分发弹幕消息分发至分发目标对象中;

其中,第一完成标识为分发目标对象在处理完已接收弹幕消息时,调用状态反馈函数,将分发目标对象中的第二完成标识反馈至弹幕分发器对象而获得;弹幕分发函数和状态反馈函数为分发目标对象继承预先定义的弹幕分发协议而获得。

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

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

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

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