CN109086107B - 弹幕消息分发方法、装置、设备及存储介质 - Google Patents
弹幕消息分发方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109086107B CN109086107B CN201810689237.3A CN201810689237A CN109086107B CN 109086107 B CN109086107 B CN 109086107B CN 201810689237 A CN201810689237 A CN 201810689237A CN 109086107 B CN109086107 B CN 109086107B
- Authority
- CN
- China
- Prior art keywords
- bullet screen
- message
- distribution
- screen message
- target object
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4492—Inheritance
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/435—Processing of additional data, e.g. decrypting of additional data, reconstructing software from modules extracted from the transport stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/47—End-user applications
- H04N21/478—Supplemental services, e.g. displaying phone caller identification, shopping application
- H04N21/4788—Supplemental services, e.g. displaying phone caller identification, shopping application communicating with other users, e.g. chatting
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种弹幕消息分发方法、装置、设备及存储介质。该方法包括:分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象;在检测到上一条目标弹幕消息处理完成时,分发目标对象通过分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息,其中,弹幕消息获取函数为弹幕分发器对象继承弹幕消息获取协议而获得;分发目标对象依据初始弹幕消息,获取与分发目标对象对应的当前目标弹幕消息。通过上述技术方案,实现了将弹幕消息及时地直达式分发至分发目标对象,同时保持弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态同步,提高了弹幕消息的分发效率及分发目标对象的性能稳定性。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种弹幕消息分发方法、装置、设备及存储介质。
背景技术
在诸如斗鱼的音视频播放应用软件中,会大量使用弹幕消息。通常,这些弹幕消息是由音视频播放应用软件逐条分发给需要使用弹幕消息的各个弹幕分发目标对象,如视图、业务控制器或数据管理器等。
以弹幕分发目标对象为视图为例,目前,对于安装于Android系统的音视频播放应用软件,其向各个视图分发弹幕消息的方式是逐层传递的方式。具体来说,Android系统中的各个视图是按照层级关系布设的,那么基于该层级关系,可以构建各个视图之间的引用关系链。弹幕消息在各个视图之间的传递,便是按照上述引用关系链进行逐层传递的。参见图1,如果一个位于第三视图层104中的视图需要获取到弹幕消息101,那么该弹幕消息101需要按照引用关系链,先传递至第一视图层102,再由第一视图层102传递至第二视图层103,并最终由第二视图层103再传递至第三视图层104。这样,该视图获取弹幕消息的过程就比较复杂,用时较长,效率较低。而且,即便第一视图层102和第二视图层103中的视图不需要该弹幕消息,其也必须接收并传递该弹幕消息,无疑会造成系统资源的浪费。
此外,上述弹幕分发过程中,每当音视频播放应用软件获取到一条新的弹幕消息,其都会立即将该新的弹幕消息分发至各个视图中。如果接收弹幕消息的视图中有正在处理的弹幕消息,那么该视图就需要同时处理多条弹幕消息,会使得视图内部的业务逻辑复杂化,容易引入多线程问题。
现有的弹幕消息在音视频播放应用软件中的分发方式存在分发过程复杂,分发效率低以及容易引起弹幕分发目标对象处理性能不稳定的问题。
发明内容
本发明实施例提供一种弹幕消息分发方法、装置、设备及存储介质,以实现将弹幕消息及时地直达式分发至分发目标对象,同时保持弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态同步,提高了弹幕消息的分发效率及分发目标对象的性能稳定性。
第一方面,本发明实施例提供了一种弹幕消息分发方法,包括:
分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象;
在检测到上一条目标弹幕消息处理完成时,所述分发目标对象通过所述分发协议对象,调用弹幕消息获取函数,从所述弹幕分发器对象中的消息列表中获取初始弹幕消息,其中,所述弹幕消息获取函数为所述弹幕分发器对象继承所述弹幕消息获取协议而获得;
所述分发目标对象依据所述初始弹幕消息,获取与所述分发目标对象对应的当前目标弹幕消息。
第二方面,本发明实施例还提供了一种弹幕消息分发装置,该装置包括:
分发协议对象获取模块,用于分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象;
初始弹幕消息获取模块,用于在检测到上一条目标弹幕消息处理完成时,所述分发目标对象通过所述分发协议对象,调用弹幕消息获取函数,从所述弹幕分发器对象中的消息列表中获取初始弹幕消息,其中,所述弹幕消息获取函数为所述弹幕分发器对象继承所述弹幕消息获取协议而获得;
目标弹幕消息获取模块,用于所述分发目标对象依据所述初始弹幕消息,获取与所述分发目标对象对应的当前目标弹幕消息。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的弹幕消息分发方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的弹幕消息分发方法。
本发明实施例通过分发目标对象获取继承了弹幕消息获取协议及其内包含的弹幕消息获取函数的弹幕分发器对象,构建了弹幕分发器对象与分发目标对象之间的消息传输通道,使得弹幕分发器对象与分发目标对象之间能够直接进行弹幕消息的传输,简化了弹幕消息的分发过程,提高了弹幕消息的分发效率。通过在检测到上一条目标弹幕消息处理完成时,分发目标对象通过由弹幕分发器对象转换而得到的分发协议对象,调用弹幕消息获取函数,从所述弹幕分发器对象中的消息列表中获取当前目标弹幕消息,实现了分发目标对象根据其内部的弹幕消息处理状态主动获取当前目标弹幕消息,提高了弹幕消息分发的及时性,也使得弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态之间保持同步,从而减少了分发目标对象内部的弹幕消息并行处理业务逻辑,提高了分发目标对象的性能稳定性。
附图说明
图1是现有技术中弹幕消息分发的过程示意图;
图2是本发明实施例一中的一种弹幕消息分发方法的流程图;
图3是本发明实施例一中的弹幕消息分发的过程示意图;
图4是本发明实施例二中的一种弹幕消息分发方法的流程图;
图5是本发明实施例三中的一种弹幕消息分发装置的结构示意图;
图6是本发明实施例四中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
本实施例提供的弹幕消息分发方法,可适用于Android客户端中的音视频播放/直播应用软件将接收到的待分发弹幕消息,分发至应用软件内与待分发弹幕消息相对应的各个分发目标对象,尤其适用于待分发弹幕消息的条数比较多的情况。该方法可以由弹幕消息分发装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在安装有音视频播放/直播应用软件的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。参见图2,本实施例的方法具体包括如下步骤:
S110、分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象。
其中,分发目标对象是指音视频播放/直播应用软件中需要接收弹幕消息,且满足直达式接收弹幕消息条件的组件对象,例如可以是用于弹幕消息显示的视图对象,也可以是用于对弹幕消息进行数据处理的业务控制器对象,还可以是对弹幕消息进行存储或传输的数据管理器对象。上述直达式接收弹幕消息的条件将在后续进行说明。弹幕分发器是指用于进行弹幕消息分发的弹幕分发模块,该模块中为实现弹幕消息分发操作而定义了弹幕分发器类,而弹幕分发器对象则是弹幕分发器类的一个实例,其是弹幕消息分发操作的具体执行者。
弹幕消息获取协议是预先定义的、用于进行弹幕消息直达式分发的组件间的通信协议。示例性地,弹幕消息获取协议为具有公有权限修饰符的接口类型,且包含弹幕消息获取函数,弹幕消息获取函数具有公有权限修饰符,且函数返回值类型为初始弹幕消息对应的数据类型。其代码实现可以为:
public interface IGetDanmuMsg{
public Map<String,Message>onGetMessage();
}。
其中,public为公有权项修饰符,这样其他类也就具有了访问该弹幕消息获取协议IGetDanmuMsg的权限。interface为接口类型限定符,其表明弹幕消息获取协议IGetDanmuMsg为接口实现机制,便于其他类的多态继承。Map<String,Message>为弹幕消息获取函数onGetMessage的函数返回值类型,该函数返回值类型应当与分发目标对象从弹幕分发器对象中获取的弹幕消息(即初始弹幕消息)的数据类型一致,本发明实施例中以初始弹幕消息的数据类型为map数据类型为例。map数据类型是以键值对的形式进行存储的数据结构。该map数据类型中的键为字符串String类型的弹幕消息标识type,值为消息Message类型的弹幕消息体msg。这里,弹幕消息标识是指能够标识弹幕消息的字符,其可以是数字、字母、符号及上述各种字符的任意组合,该弹幕消息标识应当是一条弹幕消息的唯一的、全局的标识。弹幕消息体是指弹幕消息的承载者,其内包含具体地弹幕消息内容。通过上述弹幕消息获取协议和弹幕消息获取函数的定义,构建了弹幕消息直达式分发的协议基础。
弹幕分发协议对象是指基于弹幕分发协议而生成的对象。分发协议对象是弹幕分发器对象对应的弹幕分发协议对象,其数据类型仅为弹幕分发协议对象。
具体地,为了实现弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态之间的同步,且保证弹幕消息分发的及时性,本发明实施例中将弹幕消息分发过程设计为分发目标对象主动地从弹幕分发器对象中获取弹幕消息。具体实施时,分发目标对象需要先获取弹幕分发器对象,以便后续通过该弹幕分发器对象对其中存储的弹幕消息进行获取。而上述获取过程的实现,需要借助于弹幕消息获取协议,即弹幕分发器对象需要继承弹幕消息获取协议,以持有弹幕消息获取接口及弹幕消息获取函数,并基于此获取分发协议对象。
S120、在检测到上一条目标弹幕消息处理完成时,分发目标对象通过分发协议对象,调用弹幕消息获取函数,从弹幕分发器对象中的消息列表中获取初始弹幕消息。
其中,目标弹幕消息是指分发目标对象获取的弹幕消息。弹幕消息获取函数为弹幕消息获取协议的内部函数,由上述说明可知,弹幕消息获取函数为弹幕分发器对象继承弹幕消息获取协议而获得。
消息列表是指弹幕分发器对象中预先建立的列表,其用于存储从弹幕服务器获取的弹幕消息,之后再在需要分发弹幕消息时,从消息列表中获取已经存储的弹幕消息(即缓存弹幕消息),这样能够有效避免弹幕消息未被及时分发而丢失。
具体地,为了实现弹幕消息的分发状态与处理状态之间的同步,分发目标对象需要检测其内部的目标弹幕消息的处理状态。当检测到上一条目标弹幕消息处理完成时,分发目标对象通过S110中获得的分发协议对象,主动调用其继承的弹幕消息获取函数onGetMessage,获取函数返回值。这样分发目标对象就可以在其内部已获得的目标弹幕消息(即上一条目标弹幕消息)处理完成时,及时地从弹幕分发器对象中获得新的目标弹幕消息(即当前目标弹幕消息)。该弹幕消息获取函数的功能便是根据消息列表的数据类型(即消息列表类型),从消息列表中按序获取一个新的缓存弹幕消息,作为函数返回值。上述函数返回值便是分发目标对象获取的初始弹幕消息。
示例性地,弹幕消息获取函数通过如下步骤实现根据消息列表类型,从消息列表中按序获取一个新的缓存弹幕消息,作为函数返回值的功能:判断消息列表的元素个数是否大于0;若否,则间隔列表查询时间段,返回执行判断消息列表的元素个数是否大于0的步骤,直至消息列表中的元素个数大于0;若是,则根据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为函数返回值。
其中,列表查询时间段是指预先设定的、用于触发查询消息列表元素个数是否大于0的定时器时长。
具体地,由于是从消息列表中获取弹幕消息,故在进行列表元素获取操作之前,需要先判断消息列表中是否已经存储了缓存弹幕消息,即判断消息列表元素个数是否大于0。如果元素个数大于0,则说明消息列表中仍有未分发的弹幕消息,则按照消息列表类型,从消息列表中按序获取一个新的缓存弹幕消息,作为函数返回值。如果元素个数等于0,则说明消息列表中没有需要分发的弹幕消息,此时需要等待弹幕服务器发送新的弹幕消息。为了均衡待分发弹幕消息获取的及时性和系统内存消耗,本实施例中设置了一个列表查询定时器,当定时器周期达到,即列表查询时间段到达时,再循环执行判断消息列表元素个数是否大于0的操作,直至判断列表元素个数大于0,则执行依据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为函数返回值的操作。
示例性地,检测到上一条目标弹幕消息处理完成包括:分发目标对象检测消息处理状态变量值;当消息处理状态变量值为完成标识时,分发目标对象确定上一条目标弹幕消息处理完成。
其中,消息处理状态变量是指表征弹幕消息处理状态的处理状态变量,其是分发目标对象中用于存储对弹幕消息处理状态的消息处理标识。消息处理标识是指表征分发目标对象对弹幕消息处理状态的标识,该标识可以是字母、数字、符号及上述任意组合。消息处理标识可以包括弹幕消息处理完成的完成标识,例如STATE_END,以及弹幕消息未处理完成的未完成标识,例如STATE_ON;未完成标识具体可以包含弹幕消息开始处理的开始标识,例如STATE_START,和弹幕消息正在处理中的正在处理标识,例如STATE_HAND。由此可知消息处理标识为至少两种标识,故为了便于消息处理标识的管理,将消息处理状态变量设计为枚举类型。
具体地,分发目标对象检测其中上一条目标弹幕消息处理完成的过程为:分发目标对象获取消息处理状态变量的值(即消息处理状态变量值),当消息处理状态变量值为完成标识时,即可判定上一条目标弹幕消息处理完成。如果消息处理状态变量值不为完成标识,那么间隔标识判断时间段,执行检测消息处理状态变量值的步骤,直至消息处理状态变量值为完成标识。这里标识判断时间段是指预先设定的、用于触发判断消息处理标识是否为完成标识的定时器时长。分发目标对象在检测到消息处理状态变量值不为完成标识时,说明该分发目标对象内部有上一条目标弹幕消息,其暂时无法接收新的弹幕消息,需要等待分发目标对象处理完上一条目标弹幕消息。上述等待的过程中,分发目标对象需要不断获取其消息处理状态变量值。为了均衡弹幕消息分发的及时性和系统内存消耗,本实施例中设置了一个标识判断定时器,当定时器周期达到,即标识判断时间段到达时,再循环执行检测消息处理状态变量值的操作,直至消息处理状态变量值为完成标识,则判定上一条目标弹幕消息处理完成。
S130、分发目标对象依据初始弹幕消息,获取与分发目标对象对应的当前目标弹幕消息。
具体地,每一个分发目标对象都有其对应的可接收的弹幕消息(即需求弹幕消息),也就是说分发目标对象和需求弹幕消息之间有映射关系存在,只有初始弹幕消息是分发目标对象对应的需求弹幕消息时,分发目标对象才可进一步对其处理。所以,分发目标对象获取到初始弹幕消息后,需要判断该初始弹幕消息是否是其对应的需求弹幕消息。如果是,则可将初始弹幕消息确定为当前目标弹幕消息,并将消息处理状态变量值更改为未完成标识。如果不是,那么丢弃该初始弹幕消息,将消息处理状态变量值更改为完成标识,并触发执行下一条目标弹幕消息的获取。
参见图3,通过本发明实施例中的弹幕消息分发方法,弹幕消息301可以直接通过弹幕分发模块(或称为弹幕分发器)302发送至需要接收弹幕消息的视图中,即位于第三视图层305中的视图,而无需经过中间的第一视图层303和第二视图层304。
本实施例的技术方案,通过分发目标对象获取继承了弹幕消息获取协议及其内包含的弹幕消息获取函数的弹幕分发器对象,构建了弹幕分发器对象与分发目标对象之间的消息传输通道,使得弹幕分发器对象与分发目标对象之间能够直接进行弹幕消息的传输,简化了弹幕消息的分发过程,提高了弹幕消息的分发效率。通过在检测到上一条目标弹幕消息处理完成时,分发目标对象通过由弹幕分发器对象转换而得到的分发协议对象,调用弹幕消息获取函数,从弹幕分发器对象中的消息列表中获取当前目标弹幕消息,实现了分发目标对象根据其内部的弹幕消息处理状态主动获取当前目标弹幕消息,提高了弹幕消息分发的及时性,也使得弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态之间保持同步,从而减少了分发目标对象内部的弹幕消息并行处理业务逻辑,提高了分发目标对象的性能稳定性。
实施例二
本实施例在上述实施例一的基础上,对“分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象”进行了进一步优化。在此基础上,还可以进一步对“分发目标对象依据初始弹幕消息,获取与分发目标对象对应的当前目标弹幕消息”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图4,本实施例提供的弹幕消息分发方法包括:
S210、分发目标对象通过弹幕分发器类,调用对象获取函数,获取弹幕分发器对象。
其中,对象获取函数是弹幕分发器类中的内部函数(也称成员函数),其用于获取弹幕分发器类中的对象。
具体地,分发目标对象从弹幕分发器对象中获取目标弹幕消息的前提,是获取到弹幕分发器对象。具体实施时,分发目标对象通过弹幕分发器类DanMuManager,调用对象获取函数getInstence(),获取函数返回值。上述代码实现可以为:DanMuManager.getInstence(),该函数返回值即为弹幕分发器对象。
S220、分发目标对象依据弹幕消息获取协议,将弹幕分发器对象转换为分发协议对象。
具体地,分发目标对象在获取继承了弹幕消息获取协议的弹幕分发器对象之后,由于弹幕分发器对象既有弹幕分发器类的功能,也有弹幕分发协议对象的功能,故其无法直接对弹幕分发器对象进行弹幕消息获取的操作。所以,为了使得弹幕分发器对象仅具备弹幕分发协议对象的功能,以便于弹幕消息获取协议的执行,分发目标对象需要将继承了弹幕消息获取协议的弹幕分发器对象,再转换为与弹幕消息获取协议对应的分发协议对象。上述对象转换的代码实现可以为:(IGetDanmuMsg)DanMuManager.getInstence()。
S230、在检测到上一条目标弹幕消息处理完成时,分发目标对象通过分发协议对象,调用弹幕消息获取函数,从弹幕分发器对象中的消息列表中获取初始弹幕消息。
示例性地,在分发目标对象通过分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息之前,还包括:弹幕分发器对象依据待添加弹幕消息,构建待添加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=new ArrayList<Map<String,Message>>()。创建消息列表listMessage之后,可以对其进行元素添加。
具体实施时,首先是根据待添加弹幕消息构建待添加map映射关系。通过系统提供的map类,调用map对象创建函数HashMap创建一个map对象msgMap,其代码实现可以为Map<String,Message>msgMap=new HashMap<String,Message>()。基于该map对象,以待添加弹幕消息中的type和msg为函数输入参数,调用map对象的元素插入函数msgMap.put(type,msg),构建待添加map映射关系。然后,调用消息列表的列表元素添加函数add(),将待添加map映射关系添加至消息列表,其代码实现可以为listMessage.add(map)。
这里需要说明,从弹幕服务器获取弹幕消息,可以是Android客户端向弹幕服务器发送数据获取请求,弹幕服务器被动响应数据获取请求来获取;优选是通过Android客户端中预先建立的弹幕监听器接口对象及弹幕监听器接口对象中作为回调函数的消息传输函数,接收弹幕服务器中的弹幕库对象回调消息传输函数发送的弹幕消息,弹幕监听器接口对象用于监听弹幕服务器中的弹幕库对象。也就是说,Android客户端从服务器获取弹幕消息是通过在Android客户端中设置弹幕监听器接口对象,对弹幕服务器中的弹幕库对象进行监听,为弹幕服务器发送弹幕消息至Android客户端提供接口,且弹幕监听器中包含回调函数,为弹幕服务器发送弹幕消息至Android客户端提供调用函数指针。当弹幕消息到达弹幕服务器时,触发弹幕服务器主动调用回调函数,即弹幕服务器通过回调函数的函数指针,将弹幕消息由弹幕监听器接口发送至Android客户端,Android客户端则及时地、被动地接收弹幕消息。
S240、分发目标对象判断初始弹幕消息是否为需求弹幕消息。
具体地,分发目标对象将初始弹幕消息与需求弹幕消息进行对比,以判断其是否是分发目标对象对应的需求弹幕消息。若是,则执行S250;若否,则执行S260。
示例性地,分发目标对象判断初始弹幕消息是否为需求弹幕消息包括:分发目标对象依据初始弹幕消息,确定消息标识;分发目标对象依据消息标识及分发目标对象对应的需求消息标识列表,确定初始弹幕消息是否为需求弹幕消息。
其中,消息标识是指初始弹幕消息的弹幕消息标识。需求消息标识列表是指需求弹幕消息对应的需求消息标识构成的列表。
具体地,分发目标对象获取了初始弹幕消息之后,根据初始弹幕消息确定其对应的消息标识。之后,将该消息标识与需求消息标识列表进行对比,例如调用消息标识列表的元素判断函数contains(),以判断需求消息标识列表中是否包含上述消息标识。若包含,则说明初始弹幕消息是分发目标对象的需求弹幕消息;反之,若不包含,则说明初始弹幕消息不是分发目标对象的需求弹幕消息。
S250、分发目标对象将初始弹幕消息确定为当前目标弹幕消息。
S260、分发目标对象间隔消息重获时间段,执行通过分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息的步骤,并返回执行判断初始弹幕消息是否为需求弹幕消息的步骤,直至获取当前目标弹幕消息。
其中,消息重获时间段是指指预先设定的、用于触发重新执行弹幕消息获取操作的定时器时长。该消息重获时间段可以是预先设定的固定时长,也可以是按照预先设定的时长变化规则,动态变动的时长。该时长变化规则可以为分发目标对象获取下一条缓存弹幕消息为需求弹幕消息的概率。例如,设置一个数值固定的初始时长(如1s),当获取的下一条缓存弹幕消息不为需求弹幕消息时,认为获取下一条缓存弹幕消息为需求弹幕消息的概率较小,则将初始时长增加设定时间段(如1s),确定第一调整时间段;当再次获取的下一条缓存弹幕消息仍不为需求弹幕消息时,则第一调整时间段增加设定时间段(如1s),获得第二调整时间段,以此类推,直至获取的下一条缓存弹幕消息为需求弹幕消息,则定时器时长归0。
具体地,如果分发目标对象所获取的初始弹幕消息不是需求弹幕消息,那么分发目标对象需要重新从弹幕分发器对象的消息列表中获取初始弹幕消息。为了平衡系统内存消耗与弹幕消息获取的及时性,本实施例中设置了消息重获时间段,当定时器周期达到,即消息重获时间段到达时,再执行通过分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息的操作,并且返回执行S240,直至所获取的初始弹幕消息为需求弹幕消息,即获取当前目标弹幕消息。
本实施例的技术方案,通过对象转换的方式,获取了弹幕分发器对象对应的分发协议对象,使得弹幕消息获取协议便于实现,进一步提高了弹幕消息的分发效率。通过分发目标对象判断初始弹幕消息为需求弹幕消息时,将初始弹幕消息确定为当前目标弹幕消息;分发目标对象判断初始弹幕消息不为需求弹幕消息时,间隔消息重获时间段,执行通过分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息的步骤,并返回执行判断初始弹幕消息是否为需求弹幕消息的步骤,直至获取当前目标弹幕消息,降低了分发目标对象的系统内存消耗,减少了分发目标对象中无效弹幕消息的处理,从而提高了分发目标对象的弹幕消息处理性能。
以下是本发明实施例提供的弹幕消息分发装置的实施例,该装置与上述各实施例的弹幕消息分发方法属于同一个发明构思,在弹幕消息分发装置的实施例中未详尽描述的细节内容,可以参考上述弹幕消息分发方法的实施例。
实施例三
本实施例提供一种弹幕消息分发装置,参见图5,该装置具体包括:
分发协议对象获取模块510,用于分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象;
初始弹幕消息获取模块520,用于在检测到上一条目标弹幕消息处理完成时,分发目标对象通过分发协议对象获取模块510获取的分发协议对象,调用弹幕消息获取函数,从弹幕分发器对象中的消息列表中获取初始弹幕消息,其中,弹幕消息获取函数为弹幕分发器对象继承弹幕消息获取协议而获得;
目标弹幕消息获取模块530,用于分发目标对象依据初始弹幕消息获取模块520获取的初始弹幕消息,获取与分发目标对象对应的当前目标弹幕消息。
其中,弹幕消息获取协议为具有公有权限修饰符的接口类型,且包含弹幕消息获取函数,弹幕消息获取函数具有公有权限修饰符,且函数返回值类型为初始弹幕消息对应的数据类型。
可选地,分发协议对象获取模块510具体用于:
分发目标对象通过弹幕分发器类,调用对象获取函数,获取弹幕分发器对象;
分发目标对象依据弹幕消息获取协议,将弹幕分发器对象转换为分发协议对象。
可选地,初始弹幕消息获取模块520具体用于:
分发目标对象检测消息处理状态变量值;
当消息处理状态变量值为完成标识时,分发目标对象确定上一条目标弹幕消息处理完成。
可选地,目标弹幕消息获取模块530具体用于:
分发目标对象判断初始弹幕消息是否为需求弹幕消息;
若是,则分发目标对象将初始弹幕消息确定为当前目标弹幕消息;
若否,则分发目标对象间隔消息重获时间段,执行通过分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息的步骤,并返回执行判断初始弹幕消息是否为需求弹幕消息的步骤,直至获取当前目标弹幕消息。
进一步地,目标弹幕消息获取模块530具体用于:
分发目标对象依据初始弹幕消息,确定消息标识;
分发目标对象依据消息标识及分发目标对象对应的需求消息标识列表,确定初始弹幕消息是否为需求弹幕消息。
可选地,在上述装置的基础上,该装置还包括消息列表构建模块,用于:
在依据消息列表类型,从消息列表中按序获取一个缓存弹幕消息,作为待分发弹幕消息之前,依据待添加弹幕消息,构建待添加map映射关系;以待添加map映射关系为输入参数,调用列表元素添加函数,将待添加map映射关系添加至预先创建的消息列表。
通过本发明实施例三的一种弹幕消息分发装置,实现了将弹幕消息及时地直达式分发至分发目标对象,同时保持弹幕分发器中弹幕消息的分发状态与分发目标对象中弹幕消息的处理状态同步,提高了弹幕消息的分发效率及分发目标对象的性能稳定性。
本发明实施例所提供的弹幕消息分发装置可执行本发明任意实施例所提供的弹幕消息分发方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述弹幕消息分发装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例四
参见图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-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所提供的弹幕消息分发方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (9)
1.一种弹幕消息分发方法,其特征在于,包括:
分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象;
在检测到上一条目标弹幕消息处理完成时,所述分发目标对象通过所述分发协议对象,调用弹幕消息获取函数,从所述弹幕分发器对象中的消息列表中获取初始弹幕消息,其中,所述弹幕消息获取函数为所述弹幕分发器对象继承所述弹幕消息获取协议而获得;
所述分发目标对象依据所述初始弹幕消息,获取与所述分发目标对象对应的当前目标弹幕消息;
所述分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象包括:
所述分发目标对象通过弹幕分发器类,调用对象获取函数,获取所述弹幕分发器对象;
所述分发目标对象依据所述弹幕消息获取协议,将所述弹幕分发器对象转换为所述分发协议对象。
2.根据权利要求1所述的方法,其特征在于,所述弹幕消息获取协议为具有公有权限修饰符的接口类型,且包含所述弹幕消息获取函数,所述弹幕消息获取函数具有所述公有权限修饰符,且函数返回值类型为所述初始弹幕消息对应的数据类型。
3.根据权利要求1所述的方法,其特征在于,所述检测到上一条目标弹幕消息处理完成包括:
所述分发目标对象检测消息处理状态变量值;
当所述消息处理状态变量值为完成标识时,所述分发目标对象确定所述上一条目标弹幕消息处理完成。
4.根据权利要求1所述的方法,其特征在于,所述分发目标对象依据所述初始弹幕消息,获取与所述分发目标对象对应的当前目标弹幕消息包括:
所述分发目标对象判断所述初始弹幕消息是否为需求弹幕消息;
若是,则所述分发目标对象将所述初始弹幕消息确定为所述当前目标弹幕消息;
若否,则所述分发目标对象间隔消息重获时间段,执行所述通过所述分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息的步骤,并返回执行所述判断所述初始弹幕消息是否为需求弹幕消息的步骤,直至获取所述当前目标弹幕消息。
5.根据权利要求4所述的方法,其特征在于,所述分发目标对象判断所述初始弹幕消息是否为需求弹幕消息包括:
所述分发目标对象依据所述初始弹幕消息,确定消息标识;
所述分发目标对象依据所述消息标识及所述分发目标对象对应的需求消息标识列表,确定所述初始弹幕消息是否为所述需求弹幕消息。
6.根据权利要求1所述的方法,其特征在于,在所述分发目标对象通过所述分发协议对象,调用弹幕消息获取函数,从消息列表中获取初始弹幕消息之前,还包括:
所述弹幕分发器对象依据待添加弹幕消息,构建待添加map映射关系;
所述弹幕分发器对象以所述待添加map映射关系为输入参数,调用列表元素添加函数,将所述待添加map映射关系添加至预先创建的所述消息列表。
7.一种弹幕消息分发装置,其特征在于,包括:
分发协议对象获取模块,用于分发目标对象依据弹幕分发器对象及弹幕消息获取协议,获取分发协议对象;
初始弹幕消息获取模块,用于在检测到上一条目标弹幕消息处理完成时,所述分发目标对象通过所述分发协议对象,调用弹幕消息获取函数,从所述弹幕分发器对象中的消息列表中获取初始弹幕消息,其中,所述弹幕消息获取函数为所述弹幕分发器对象继承所述弹幕消息获取协议而获得;
目标弹幕消息获取模块,用于所述分发目标对象依据所述初始弹幕消息,获取与所述分发目标对象对应的当前目标弹幕消息;
所述分发协议对象获取模块具体用于:
分发目标对象通过弹幕分发器类,调用对象获取函数,获取弹幕分发器对象;
分发目标对象依据弹幕消息获取协议,将弹幕分发器对象转换为分发协议对象。
8.一种弹幕消息分发设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的弹幕消息分发方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-6中任一所述的弹幕消息分发方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810689237.3A CN109086107B (zh) | 2018-06-28 | 2018-06-28 | 弹幕消息分发方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810689237.3A CN109086107B (zh) | 2018-06-28 | 2018-06-28 | 弹幕消息分发方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109086107A CN109086107A (zh) | 2018-12-25 |
CN109086107B true CN109086107B (zh) | 2021-06-15 |
Family
ID=64834959
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810689237.3A Active CN109086107B (zh) | 2018-06-28 | 2018-06-28 | 弹幕消息分发方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109086107B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109062650B (zh) * | 2018-08-01 | 2021-06-15 | 武汉斗鱼网络科技有限公司 | 弹幕消息分发方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648640A (zh) * | 2016-12-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种简化代码的方法和装置 |
CN106775700A (zh) * | 2016-12-09 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种简化代码的方法和装置 |
CN107368311A (zh) * | 2017-07-10 | 2017-11-21 | 武汉斗鱼网络科技有限公司 | 一种多Fragment之间的通信方法及系统 |
CN107423143A (zh) * | 2017-06-29 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 一种浮层间通信管理方法及系统 |
-
2018
- 2018-06-28 CN CN201810689237.3A patent/CN109086107B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648640A (zh) * | 2016-12-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种简化代码的方法和装置 |
CN106775700A (zh) * | 2016-12-09 | 2017-05-31 | 武汉斗鱼网络科技有限公司 | 一种简化代码的方法和装置 |
CN107423143A (zh) * | 2017-06-29 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 一种浮层间通信管理方法及系统 |
CN107368311A (zh) * | 2017-07-10 | 2017-11-21 | 武汉斗鱼网络科技有限公司 | 一种多Fragment之间的通信方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109086107A (zh) | 2018-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110753129A (zh) | 消息传输方法、系统、装置、设备及计算机可读存储介质 | |
CN109413502B (zh) | 多线程弹幕消息分发方法、装置、设备及存储介质 | |
CN113452774B (zh) | 消息推送方法、装置、设备及存储介质 | |
CN109062650B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN115004673A (zh) | 消息推送方法、装置、电子设备及计算机可读介质 | |
CN108882053B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN111338710A (zh) | 应用程序控制方法、装置、电子设备及存储介质 | |
CN108810645B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109086107B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109005465B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109089163B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109274988B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109309848B (zh) | 基于重试机制的弹幕分发方法、装置、设备及存储介质 | |
CN107329842B (zh) | 基于Qt信号槽机制的获取数据的方法及终端 | |
CN106550021B (zh) | 推送消息的推送方法及装置 | |
CN108924653B (zh) | 弹幕消息分发方法、装置、设备和存储介质 | |
CN109144639B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109144520B (zh) | Android中不同对象间的信息交互方法、装置、设备和存储介质 | |
CN108881991B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109005468B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109005448B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN113127775A (zh) | 一种页面加载方法、装置、设备和存储介质 | |
CN109168079B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN111767104B (zh) | 一种语言种类切换方法、装置、计算机设备及存储介质 | |
CN109684009B (zh) | 基于协议的倒计时同步方法、装置、存储介质和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |