弹幕消息传输方法、装置、设备与存储介质与流程

文档序号:16202528发布日期:2018-12-08 06:45阅读:211来源:国知局
弹幕消息传输方法、装置、设备与存储介质与流程

本发明实施例涉及信息传输技术,尤其涉及一种弹幕消息传输方法、装置、设备与存储介质。

背景技术

在诸如斗鱼的音视频播放/直播应用软件中,会大量使用弹幕消息。通常,弹幕消息是由传输及处理弹幕消息的服务器(即弹幕服务器)发送至应用软件中接收弹幕消息的弹幕接收模块,并由弹幕接收模块进一步发送至分发弹幕消息的弹幕分发模块。其中,弹幕接收模块与弹幕分发模块之间的信息交互,是基于两个功能模块各自提供的交互接口来实现的。

但是,上述基于功能模块交互接口的交互方式,需要建立两个功能模块之间的依赖关系,这使得两个功能模块之间的耦合性较强,不利于功能模块的独立开发,且会造成弹幕消息的传输时效性低。另外,如果弹幕分发模块中的弹幕分发对象未被初始化,则上述交互方式便无法进行弹幕消息的传输。



技术实现要素:

本发明实施例提供一种弹幕消息传输方法、装置、设备与存储介质,以实现弹幕消息在弹幕接收模块与弹幕分发模块之间的快速传输,提高弹幕消息传输的时效性。

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

弹幕接收对象依据目标弹幕消息,通过预先获得的转发协议对象,调用第一弹幕传输函数,以将目标弹幕消息传输至转发协议对象,其中,转发协议对象是数据转发对象继承预先定义的第一弹幕传输协议而获得,第一弹幕传输协议包含第一弹幕传输函数;

转发协议对象回调第一弹幕传输函数,获得目标弹幕消息,并触发判断目标弹幕分发对象是否初始化;

若否,则广播发布对象依据目标弹幕分发对象的目标对象信息及目标弹幕消息,构建广播意图对象,并将广播意图对象进行广播;

广播接收对象接收广播意图对象,并将广播意图对象中的目标弹幕消息发送至目标弹幕分发对象,以使目标弹幕分发对象获得目标弹幕消息。

第二方面,本发明实施例还提供了一种弹幕消息传输装置,该装置包括:弹幕接收模块,数据转发模块,广播发布模块和广播接收模块;

弹幕接收模块,用于依据目标弹幕消息,通过预先获得的转发协议对象,调用第一弹幕传输函数,以将目标弹幕消息传输至转发协议对象,其中,转发协议对象是数据转发对象继承预先定义的第一弹幕传输协议而获得,第一弹幕传输协议包含第一弹幕传输函数;

数据转发模块,用于回调第一弹幕传输函数,获得目标弹幕消息,并触发判断目标弹幕分发对象是否初始化;

广播发布模块,用于若目标弹幕分发对象未初始化,则依据目标弹幕分发对象的目标对象信息及目标弹幕消息,构建广播意图对象,并将广播意图对象进行广播;

广播接收模块,用于接收广播意图对象,并将广播意图对象中的目标弹幕消息发送至目标弹幕分发对象,以使目标弹幕分发对象获得目标弹幕消息。

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

一个或多个处理器;

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

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

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

本发明实施例通过在弹幕接收对象和弹幕分发对象之间设置一个数据转发对象,以实现弹幕消息在两个独立模块之间的传输,解除了弹幕接收模块和弹幕分发模块之间的耦合关系,降低程序开发难度。通过弹幕接收对象预先获得转发协议对象,建立了弹幕接收对象与数据转发对象之间的数据传输通道,并基于作为回调函数的第一弹幕传输函数,将弹幕接收对象从弹幕服务器接收的目标弹幕消息传输至数据转发对象。通过在转发协议对象的第一弹幕传输函数中触发判断目标弹幕分发对象是否初始化,并在其未初始化时利用广播通道进行目标弹幕消息的传输,使得数据转发对象在其获得目标弹幕的同时,根据目标弹幕分发对象的初始化状态,确定出数据转发对象将目标弹幕消息传输至目标弹幕分发对象的通道,从而及时地将目标弹幕消息传输至目标弹幕分发对象,提高了弹幕消息传输的成功率及时效性。

附图说明

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

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

图3是本发明实施例三中的一种弹幕消息传输方法的流程图;

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

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

具体实施方式

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

实施例一

本实施例提供的弹幕消息传输方法可适用于android客户端中的音视频播放/直播应用软件,将弹幕接收模块接收到的弹幕消息传输至弹幕分发模块。该方法可以由弹幕消息传输装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在安装有适配于android系统的音视频播放/直播应用软件的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。参见图1,本实施例的方法具体包括如下步骤:

s110、弹幕接收对象依据目标弹幕消息,通过预先获得的转发协议对象,调用第一弹幕传输函数,以将目标弹幕消息传输至转发协议对象。

其中,弹幕接收对象是指用于接收从弹幕服务器发送而来的弹幕消息的弹幕接收模块中的对象。弹幕接收模块中为实现弹幕消息接收操作而定义了弹幕接收类,而弹幕接收对象则是弹幕接收类的一个实例,其是弹幕消息接收操作的具体执行者。目标弹幕消息是指等待由弹幕接收对象传输至目标弹幕分发对象的弹幕消息。这里,弹幕分发对象是指用于进行弹幕消息分发的弹幕分发模块中的对象,该弹幕分发模块中为实现弹幕消息分发操作而定义了弹幕分发类,而弹幕分发对象则是弹幕分发类的一个实例,其是弹幕消息分发操作的具体执行者。目标弹幕分发对象则是指分发目标弹幕消息的弹幕分发对象。

转发协议对象是数据转发对象继承预先定义的第一弹幕传输协议而获得,第一弹幕传输协议包含第一弹幕传输函数。这里,数据转发对象是指用于进行数据中转的模块中的对象,该数据中转模块中为实现数据中转操作而定义了数据转发类classdatadistribution,而数据转发对象则是数据转发类的一个实例,其是弹幕消息转发操作的实际执行者。第一弹幕传输协议是预先定义的、用于进行弹幕消息传输的组件间的通信协议,其包含用于实现弹幕消息传输操作的协议内部函数——第一弹幕传输函数。当数据转发对象通过java语言中规定的进行接口协议继承的关键字implements继承了第一弹幕传输协议之后,其便具有了第一弹幕传输协议的通信功能,也会复写并实现其协议内部函数,这样数据转发对象也具有了第一弹幕传输函数,其同时为数据转发对象和转发器协议对象。例如,第一弹幕传输协议的代码实现可以为:publicinterfaceidanmuprotocl{onreceivemsg(stringtype,stringinfo);}。

其中,public为公有权限修饰符,这样其他类和对象也可访问该第一弹幕消息传输协议idanmuprotocl。interface为接口类型限定符,其表明第一弹幕消息传输协议idanmuprotocl为接口实现机制,便于其他类的多态继承。stringtype和stringinfo分别为第一弹幕传输函数onreceivemsg的函数输入参数,该函数输入参数包括字符串string类型的弹幕消息标识type和字符串string类型的弹幕消息体信息info。弹幕消息标识是指能够标识弹幕消息的字符,其可以是数字、字母、符号及上述各种字符的任意组合,该弹幕消息标识应当是一条弹幕消息的唯一的、全局的标识。弹幕消息体信息是指弹幕消息的承载者,其内包含具体的弹幕消息内容。

具体地,弹幕接收对象从弹幕服务器接收目标弹幕消息。然后,弹幕接收对象根据第一弹幕传输函数的函数输入参数形式,解析目标弹幕消息,获得解析结果。之后,弹幕接收对象以解析结果作为函数输入参数,通过预先获得的转发协议对象,调用其继承而来的第一弹幕传输函数,即datadistribution.onreceivemsg(stringtype,stringinfo),以便将目标弹幕消息传输至转发协议对象。本发明实施例中将第一弹幕传输函数设计为一个回调函数,上述弹幕接收对象中的调用操作仅是通过第一弹幕传输函数的函数指针,将目标弹幕消息由转发协议对象提供的接口传输至转发协议对象,并自动触发第一弹幕传输函数体的执行,也就是触发s120的执行。

上述过程中,弹幕接收对象是在s110的执行之前,预先获取转发协议对象的,获取的方式可以是通过弹幕接收对象和数据转发对象提供的交互接口;也可以是通过函数调用方式,将相应的对象作为函数参数进行传输。

s120、转发协议对象回调第一弹幕传输函数,获得目标弹幕消息,并触发判断目标弹幕分发对象是否初始化。

具体地,第一弹幕传输函数在弹幕接收对象中被调用后,转发协议对象则被触发执行第一弹幕传输函数,以接收作为函数输入参数而传入的目标弹幕消息。该目标弹幕消息的接收又作为转发协议对象判断目标弹幕分发对象是否初始化的触发条件。具体实施时,转发协议对象中的第一弹幕传输函数的函数实现中,不仅包含目标弹幕消息的接收操作,也包含目标弹幕分发对象是否初始化的判断操作。这样,当转发协议对象通过第一弹幕传输函数接收到目标弹幕消息之后,自动触发目标弹幕分发对象是否初始化的判断。例如自动触发danmusender==null语句,以判断目标弹幕分发对象danmusender是否已经初始化。若结果为false,则表明目标弹幕分发对象已经初始化;如果结果为true,则表明目标弹幕分发对象未初始化,则执行s130。

判断目标弹幕分发对象是否初始化的目的,是确定是否可通过数据转发对象和目标弹幕分发对象之间建立的对象桥接引用的通信通道进行目标弹幕消息的传输。如果目标弹幕分发对象未初始化,则上述对象桥接引用的通信通道便无法预先成功建立,则无法正常传输弹幕消息,需要及时通过另外的通信通道传输弹幕消息,以提高弹幕消息传输的成功率。设置在第一弹幕传输函数内部进行初始化判断,是为了及时地自动触发判断操作,进而在确定目标弹幕分发对象已经初始化时,及时触发上述对象桥接引用的通信通道的弹幕消息传输,以提高弹幕消息传输的时效性。

s130、若否,则广播发布对象依据目标弹幕分发对象的目标对象信息及目标弹幕消息,构建广播意图对象,并将广播意图对象进行广播。

其中,广播发布对象是指android系统中发布系统广播的模块中的实例化对象。对象信息是指一个对象的属性信息,例如对象所在的java包package的包名(即对象包名)、对象所属的类的类名(即对象类名)及对象名称等信息。目标对象信息则是指目标弹幕分发对象的对象信息。广播意图对象是指发送广播时广播出去的意图对象intent,其是android系统中广播消息的数据承载者。

具体地,当转发协议对象判断目标弹幕分发对象未初始化时,需要启动另外的通信通道进行目标弹幕消息的传输。本发明实施例中另外的通信通道便是android系统的系统广播通道。具体实施时,可以将第一弹幕传输函数设置布尔类型的函数返回值,且当返回值为true时,广播发布对象便依据目标弹幕分发对象的目标对象信息和目标弹幕消息构建广播意图对象。之后,广播发布对象将该广播意图对象广播出去,完成广播消息的发布。

上述广播发布对象将广播意图对象进行广播包括:广播发布对象调用应用程序类的上下文环境获取函数,获取android系统的上下文环境对象;广播发布对象通过上下文环境对象,以广播意图对象为函数输入参数,调用广播发送函数,广播广播意图对象。

其中,应用程序类application是android系统开发方提供的一个系统类,其用于应用程序开发过程,开发一个应用程序时会实现一个application类的实例化。上下文环境对象是一个抽象类,并且android系统提供了类的实现,通过上下文环境对象允许访问应用程序特定的资源和类。

具体地,广播发布对象通过调用android系统中的应用程序类application中的上下文环境获取函数getapplicationcontext来获取到系统提供的上下文环境对象mcontext。之后,广播发布对象以广播意图对象intent为函数输入参数,调用上下文环境对象中的广播发送函数mcontext.sendbroadcast(intent),将广播意图对象intent作为系统广播消息进行广播。这样,包含目标弹幕消息的广播意图对象便被发送到android系统事件总线上。其他注册为可接收该广播意图对象的系统广播接收器的对象(即广播接收对象)便可接收该广播意图对象。

s140、广播接收对象接收广播意图对象,并将广播意图对象中的目标弹幕消息发送至目标弹幕分发对象,以使目标弹幕分发对象获得目标弹幕消息。

具体地,广播接收对象通过广播消息筛选以接收上述广播意图对象,并对其进行解析,以获得其中封装的目标弹幕消息。这里的广播消息筛选具体是广播接收对象将其注册时设置的至少一个广播接收动作描述与广播意图对象中封装的广播发送动作描述进行对比,如果对比结果中有一个配对成功(上述两种动作描述完全一致),则接收该广播意图对象。这里的广播接收动作描述与广播发送动作描述在后续实施例中进行说明。之后,将该目标弹幕消息发送至目标弹幕分发对象。这样,目标弹幕消息便通过广播通道,由数据转发对象对应的转发协议对象传输至目标弹幕分发对象。本发明实施例中将广播接收对象与目标弹幕分发对象设置为可以直接进行对象引用的情形,例如上述两个对象同处一个功能模块中,或者互为外部类和内部类等。这样,广播接收对象便可以直接引用的方式获得目标弹幕分发对象,进而将目标弹幕消息发送至目标弹幕分发对象。

本实施例的技术方案,通过在弹幕接收对象和弹幕分发对象之间设置一个数据转发对象,以实现弹幕消息在两个独立模块之间的传输,解除了弹幕接收模块和弹幕分发模块之间的耦合关系,降低程序开发难度。通过弹幕接收对象预先获得转发协议对象,建立了弹幕接收对象与数据转发对象之间的数据传输通道,并基于作为回调函数的第一弹幕传输函数,将弹幕接收对象从弹幕服务器接收的目标弹幕消息传输至数据转发对象。通过在转发协议对象的第一弹幕传输函数中触发判断目标弹幕分发对象是否初始化,并在其未初始化时利用广播通道进行目标弹幕消息的传输,使得数据转发对象在其获得目标弹幕的同时,根据目标弹幕分发对象的初始化状态,确定出数据转发对象将目标弹幕消息传输至目标弹幕分发对象的通道,从而及时地将目标弹幕消息传输至目标弹幕分发对象,提高了弹幕消息传输的成功率及时效性。

在上述技术方案的基础上,在广播接收对象接收广播意图对象之前,还包括:在广播接收对象对应的广播接收类为弹幕分发对象对应的弹幕分发类的内部类时,广播注册对象依据目标对象信息确定广播接收动作描述;广播注册对象依据目标对象信息、内部类标识及内部类信息确定广播接收对象描述;广播注册对象依据广播接收对象描述和广播接收动作描述,采用静态注册方式注册系统广播接收器,获得广播接收对象。

其中,广播注册对象是进行广播接收器注册的功能模块中的实例化对象。广播接收动作描述是指对可以接收的广播消息所具有的动作功能进行的描述或说明,其通常是广播接收动作的简称或关键词,可以为系统提供的动作描述,也可以是预先进行自定义的动作描述。广播接收动作描述通常是在注册广播接收器时设置在广播消息过滤段intent-filter中的动作描述,用于对系统广播消息进行过滤,筛选出包含与广播接收动作描述对应一致的广播发送动作描述的广播消息。也就是说,对于同一条广播消息,其发送时设置的广播发送动作描述,与接收该广播消息的广播接收器注册时设置的广播接收动作描述是完全一致的。这里的广播发送动作描述是指对发送的广播消息所具有的动作功能进行的描述或说明。内部类标识是指用于表征一个类是另一个类的内部类的标识,例如“$”。类信息是指一个类的属性信息,如类名等。内部类信息则是指一个内部类的类信息,如内部类的类名等。广播接收对象描述是指对可接收广播消息的对象的描述或说明。

具体地,如果一个对象要接收系统广播消息,那么其需要预先注册为系统广播接收器,而上述广播接收对象便是一个普通对象预先注册为系统广播接收器所得的注册对象。当广播接收对象所归属的广播接收类是弹幕分发类的内部类时,弹幕分发类实例化所得到的每个弹幕分发对象中均会对应一个内部类的实例化对象,则需要预先为每个弹幕分发对象均注册一个相应的系统广播接收器,本实施例中以目标弹幕分发对象为例对系统广播接收器的注册过程进行说明,且本实施例中的英文名称仅为举例说明。

由于本发明实施例中的弹幕消息是需要发送至特定的弹幕分发对象,故广播接收动作描述中至少需设置区分弹幕分发对象的信息,而对象包名和对象类名(必要时可追加对象名等信息)可用于唯一区分一个对象。所以,本实施例中广播注册对象根据目标对象信息中的对象包名com和对象类名myview确定广播接收动作描述,如"com.myview.newinstance"。要设置系统广播接收器,还需设置广播接收的对象的描述,故广播注册对象根据目标对象信息中的对象类名myview、内部类标识$和内部类类名staticreceiver等信息,确定广播接收对象描述,如"myview.$staticreceiver"。这里确定广播接收动作描述和确定广播接收对象描述的步骤顺序不限定。之后,为了实现系统广播接收器的快速注册,本实施例中采用了静态注册方式,减少了广播接收对象实例化的过程。具体则是,广播注册对象将广播接收对象描述和广播接收动作描述按照如下代码形式写入应用描述文件androidmanifest.xml,以便在程序编译期间通过对该文件的解析,将目标弹幕分发对象的内部类staticreceiver注册为系统广播接收器,获得广播接收对象。

<receiverandroid:name="myview.$staticreceiver">

<intent-filter>

<actionandroid:name="com.myview.newinstance"/>

</intent-filter>

</receiver>。

在上述技术方案的基础上,在广播接收对象接收广播意图对象之前,还包括:在广播接收对象对应的广播接收类为与弹幕分发对象同处一个功能模块的独立类时,广播注册对象依据功能模块中的各个弹幕分发对象的对象信息,确定各个广播接收动作描述;广播注册对象依据独立类信息确定广播接收对象描述;广播注册对象依据广播接收对象描述和各个广播接收动作描述注册系统广播接收器,获得广播接收对象。

其中,独立类信息是指一个与其他类没有依赖关系的类的信息,如独立类的类名等。

具体地,当广播接收对象所归属的广播接收类是一个与弹幕分发类没有依赖关系的独立类时,便可注册一个总的广播接收器,而不必再为每个弹幕分发对象均注册广播接收器。而为了实现快速地在广播接收对象与弹幕分发对象之间传输信息,本实施例中将需要注册为系统广播接收器的独立类设置为与弹幕分发类同处一个功能模块。这样,同处一个功能模块中的各个弹幕分发对象便共用一个系统广播接收器,既能一定程度上减少系统广播接收器的数量,从而节省系统内存与功耗,进而进一步提高弹幕消息传输的速率;又可快速地进行广播消息的传输,保证弹幕消息传输的时效性。

具体实施时,广播注册对象根据各个弹幕分发对象的对象信息,生成各个弹幕分发对象一一对应的各个广播接收动作描述。另外,广播注册对象根据独立类的类名等信息生成该独立类的广播接收对象描述。之后,广播注册对象采用动态注册方式或者静态注册方式,依据上述广播接收对象描述和各个广播接收动作描述生成广播注册器的注册代码。当应用程序编译或运行时,便将该独立类注册为系统广播接收器,获得广播接收对象。

实施例二

本实施例在上述实施例一的基础上,对“广播发布对象依据目标弹幕分发对象的目标对象信息及目标弹幕消息,构建广播意图对象”进行了进一步优化。在此基础上,还可以进一步对“广播接收对象将广播意图对象中的目标弹幕消息发送至目标弹幕分发对象”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图2,本实施例提供的弹幕消息传输方法包括:

s201、弹幕接收对象依据目标弹幕消息,通过预先获得的转发协议对象,调用第一弹幕传输函数,以将目标弹幕消息传输至转发协议对象。

s202、转发协议对象回调第一弹幕传输函数,获得目标弹幕消息,并触发判断目标弹幕分发对象是否初始化。

s203、若否,则广播发布对象依据目标对象信息确定广播发送动作描述,并以广播发送动作描述为函数输入参数,调用预先构建的初始意图对象的广播动作设置函数,为初始意图对象设置动作描述,获得中间意图对象。

其中,初始意图对象是指最初定义的意图对象,其内未进行数据的填充。例如通过android系统的意图对象构造函数,预先构建初始意图对象,代码实现可以为intentintent=newintent()。广播动作设置函数是指设置意图对象中动作action的函数。中间意图对象指设置了动作描述的意图对象,其对应于初始意图对象。

具体地,在目标弹幕分发对象未初始化时,同生成广播接收动作描述一致,广播发布对象根据目标对象信息中的对象包名和对象类名生成广播发送动作描述"com.myview.newinstance"。之后,广播发布对象以广播发送动作描述"com.myview.newinstance"为函数输入参数,调用初始意图对象的广播动作设置函数setaction,将广播发送动作描述设置为初始意图对象的动作描述,其代码实现可以为:intent.setaction("com.myview.newinstance"),获得中间意图对象。

s204、广播发布对象依据目标弹幕消息,调用预先构建的初始数据包裹器对象的数据存储函数,将目标弹幕消息存储至初始数据包裹器对象,获得目标数据包裹器对象。

其中,数据包裹器对象是android开发中的一个用于存储数据的数据容器类,其用于android系统中组件之间的数据传输。本实施例中的数据包裹器对象中存储目标弹幕消息。初始数据包裹器对象是指最初定义的数据包裹器对象,其内未进行数据的填充。例如通过android系统的数据包裹器对象构造函数,预先构建初始数据包裹器对象mbundle,代码实现可以为bundlembundle=newbundle()。目标数据包裹器对象与初始数据包裹器对象相对应,其是指填充了数据的数据包裹器对象。数据存储函数是数据包裹器对象中对其进行数据填充的函数。

具体地,转发协议对象在判断目标弹幕分发对象未初始化时,广播发布对象便获得目标弹幕消息。为了后续数据传输便捷性,广播发布对象所获得的目标弹幕消息仍保持弹幕消息标识type和弹幕消息体信息info的形式。之后,广播发布对象分别调用初始数据包裹器对象中的字符串类型数据存储函数和序列化类型数据存储函数,将弹幕消息标识type和弹幕消息体信息info存储至初始数据包裹器对象,代码实现分别是mbundle.setstring(type)和mbundle.setserializable(info)。这样,就获得了填充弹幕消息之后的目标数据包裹器对象mbundle。

s205、广播发布对象以目标数据包裹器对象为函数输入参数,调用中间意图对象的数据包设置函数,将目标数据包裹器对象存储至中间意图对象,获得广播意图对象。

其中,数据包设置函数是指意图对象中为意图对象设置数据data的函数。

具体地,要获得广播意图对象,还需将封装具体的广播消息数据的目标数据包裹器对象填充至中间意图对象。具体实施时,广播发布对象以上述获得的目标数据包裹器对象mbundle为函数输入参数,调用中间意图对象的数据包设置函数,将目标数据包裹器对象存储至中间意图对象,代码实现可以为intent.setbundle(mbundle)。这样,就获得了包含广播发送动作描述和目标弹幕消息的广播意图对象。

s206、广播发布对象将广播意图对象进行广播。

s207、广播接收对象接收广播意图对象。

s208、广播接收对象在目标弹幕分发对象未初始化时,调用初始化函数初始化目标弹幕分发对象。

其中,初始化函数是进行对象初始化的函数,其可以是诸如构造函数的系统函数,也可以是用户编程定义的自定义函数。

具体地,由于弹幕分发对象的初始化过程需要一定的时间,在转发协议对象确定其未初始化,并执行上述各个广播通道传输目标弹幕消息的操作之后,有可能目标弹幕分发对象便完成了初始化操作。所以为了避免重复执行初始化操作,本实施例在广播接收对象接收广播意图对象之后,再判断一次目标弹幕分发对象是否初始化。如果仍未初始化,则调用初始化函数进行初始化操作,获得初始化的目标弹幕分发对象。如果已经初始化,则执行s209。

s209、广播接收对象通过广播意图对象,调用数据包获取函数,获得目标数据包裹器对象。

其中,数据包获取函数是指从意图对象中获取数据包裹器对象的函数。

具体地,广播接收对象接收广播意图对象之后,需要对该广播意图对象进行解析,以获得其内包含的目标弹幕消息。具体过程为:广播接收对象首先调用广播意图对象中的数据包获取函数intent.getbundle(),获得广播意图对象中包含的目标数据包裹器对象mbundle。

s210、广播接收对象调用目标数据包裹器对象的数据获取函数,获取目标弹幕消息,并将目标弹幕消息发送至目标弹幕分发对象。

其中,数据获取函数是指从数据包裹器对象中获取其内包含的数据的函数。

具体地,广播接收对象获得目标数据包裹器对象之后,分别调用目标数据包裹器对象的字符串类型数据获取函数mbundle.getstring(type)和序列化类型数据获取函数mbundle.getserializable(info),获得目标弹幕消息对应的弹幕消息标识type和弹幕消息体信息info。这样,广播接收对象便获得了整条目标弹幕消息。然后,广播接收对象将该目标弹幕消息传输至目标弹幕分发对象。

本实施例的技术方案,通过广播发布对象依据目标对象信息确定广播发送动作描述,使得广播发送动作描述与广播接收动作描述设置相同。通过广播接收对象在目标弹幕分发对象未初始化时,调用初始化函数初始化目标弹幕分发对象,既实现了目标弹幕对象的初始化,也在一定程度上减少重复初始化操作,进而减少目标弹幕消息传输过程的时耗,进一步提高目标弹幕消息传输的时效性。通过将目标弹幕消息和广播发送动作描述构建为广播意图对象;广播接收对象解析广播意图对象,以获得目标弹幕消息,并将目标弹幕消息传输至目标弹幕分发对象,实现了通过广播通道将目标弹幕消息进行完整性传输,提高了目标弹幕消息的传输成功率。

实施例三

本实施例在上述实施例一的基础上,增加了判断目标弹幕分发对象初始化后的目标弹幕消息传输步骤。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图3,本实施例提供的弹幕消息传输方法包括:

s310、弹幕接收对象依据目标弹幕消息,通过预先获得的转发协议对象,调用第一弹幕传输函数,以将目标弹幕消息传输至转发协议对象。

s320、转发协议对象回调第一弹幕传输函数,获得目标弹幕消息,并触发判断目标弹幕分发对象是否初始化。

s330、若否,则广播发布对象依据目标弹幕分发对象的目标对象信息及目标弹幕消息,构建广播意图对象,并将广播意图对象进行广播。

s340、广播接收对象接收广播意图对象,并将广播意图对象中的目标弹幕消息发送至目标弹幕分发对象,以使目标弹幕分发对象获得目标弹幕消息。

s350、若是,则转发协议对象在第一弹幕传输函数中触发依据目标弹幕消息,通过预先获得的分发协议对象,调用第二弹幕传输函数,以将目标弹幕消息传输至分发协议对象。

其中,分发协议对象是目标弹幕分发对象继承预先定义的第二弹幕传输协议而获得,第二弹幕传输协议包含第二弹幕传输函数。这里,第二弹幕传输协议是预先定义的、用于进行弹幕消息传输的组件间的通信协议,其包含用于实现弹幕消息传输操作的协议内部函数——第二弹幕传输函数。当目标弹幕分发对象通过接口协议继承关键字implements继承了第二弹幕传输协议之后,其便具有了第二弹幕传输协议的通信功能,也会复写并实现其协议内部函数,这样目标弹幕分发对象也具有了第二弹幕传输函数,其同时为弹幕分发对象和分发协议对象。

示例性地,第一弹幕传输函数与第二弹幕传输函数的函数输入参数相同。例如函数输入参数的个数、数据类型和参数排序等均相同。这样设置的好处在于,后续利用两个弹幕传输函数进行数据传输过程中,所传输的数据不需进行协议转换,如数据格式或数据类型等的转换,进一步提高数据传输效率,进而提高目标弹幕消息传输的时效性。例如,第二弹幕传输协议iviewprotocl的代码实现可以为:publicinterfaceiviewprotocl{onreceivemsg(stringtype,stringinfo);}。

具体地,转发协议对象判断目标弹幕分发对象初始化之后,便不必启用广播通道,而是通过对象桥接引用的通信通道进行目标弹幕消息的传输。此时,转发协议对象中的第一弹幕传输函数中判断已初始化的结果false便作为转发协议对象调用第二弹幕传输函数的触发条件。具体实施时,转发协议对象中的第一弹幕传输函数的函数实现中,不仅包含目标弹幕消息的接收操作和初始化判断操作,也包含作为回调函数的第二弹幕传输函数的调用操作。这样,当第一弹幕传输函数接收到目标弹幕消息并判断目标弹幕分发对象初始化之后,自动触发第二弹幕传输函数的调用。该调用过程是在第一弹幕传输函数中,将接收的函数输入参数对应的目标弹幕消息,如弹幕消息标识type和弹幕消息体信息info,再次作为函数输入参数,通过预先获得的分发协议对象danmusender,调用其继承而来的第二弹幕传输函数,即danmusender.onreceivemsg(stringtype,stringinfo)。如此,转发协议对象中的第一弹幕传输函数便通过第二弹幕传输函数的函数指针,将目标弹幕消息由分发协议对象提供的接口传输至弹幕分发协议对象,并自动触发第二弹幕传输函数体的执行,也就是触发s360的执行。

同样地,上述过程中,转发协议对象至少是在本步骤执行之前,预先获取分发协议对象的,获取的方式可以是通过数据转发对象和弹幕分发对象提供的交互接口,也可以是通过函数调用方式,将相应的对象作为函数参数进行传输。

s360、分发协议对象回调第二弹幕传输函数,获得目标弹幕消息。

具体地,第二弹幕传输函数在转发协议对象中被调用后,分发协议对象则被触发执行第二弹幕传输函数,以接收作为函数输入参数而传入的目标弹幕消息。至此,目标弹幕消息便通过数据转发对象和目标弹幕分发对象之间建立的对象桥接引用的通信通道,由弹幕接收对象快速传输至弹幕分发对象中。

本实施例的技术方案,通过转发协议对象预先获得分发协议对象,建立了数据转发对象与目标弹幕分发对象之间的数据传输通道。通过在第一弹幕传输函数中触发作为回调函数的第二弹幕传输函数,使得数据转发对象在其获得目标弹幕的同时,将获得的目标弹幕消息传输至目标弹幕分发对象,提高了弹幕消息传输的时效性。

在上述技术方案的基础上,转发协议对象通过如下方式预先获得:

数据转发对象通过弹幕接收类,调用第一对象获取函数,获取弹幕接收对象;数据转发对象依据第一弹幕传输协议,将数据转发对象转换为转发协议对象;数据转发对象通过弹幕接收对象,以转发协议对象为函数输入参数,调用弹幕接收对象中的第一对象传输函数,将转发协议对象发送至弹幕接收对象。

其中,第一对象获取函数是弹幕接收类中的内部函数(也称成员函数),其用于获取弹幕接收类中的对象。第一对象传输函数是弹幕接收类中定义的,用于进行对象传输的函数。例如,第一对象传输函数可以定义为:publicvoidsetidanmuprotocl(idanmuprotoclmm){idanmuprotoclidanmu=mm;}。其中,第一对象传输函数setidanmuprotocl的函数输入参数mm是一个数据类型为第一弹幕传输协议idanmuprotocl类型的对象。idanmu是弹幕接收对象中的一个数据类型同样为第一弹幕传输协议idanmuprotocl类型的对象变量。

示例性地,弹幕接收对象为单例对象。本实施例中将弹幕接收类设置为单例模式,这样弹幕接收类仅可有一个弹幕接收对象。这样设置的好处在于将弹幕接收对象设置为全局对象,以便其他类或对象可以直接获取。

具体地,本发明实施例中构建弹幕接收对象与数据转发对象之间的通信通道,是通过互相获取相应对象的方式来实现的。由于弹幕接收对象为单例对象,故数据转发对象可以直接获取弹幕接收对象。具体实施时,数据转发对象首先通过弹幕接收类,调用其中的第一对象获取函数getinstence(),获取函数返回值,该函数返回值便为弹幕接收对象。此时,数据转发对象便持有了弹幕接收对象。

之后,需要实现弹幕接收对象持有数据转发对象。在这之前,考虑到弹幕接收对象所要获取的数据转发对象中需要具有第一弹幕传输函数,且数据转发对象应该仅具有第一弹幕传输协议对象的通信功能,以方便后续基于第一弹幕传输协议的函数调用。故在弹幕接收对象获得数据转发对象之前,需要在数据转发对象的生命周期函数内,先根据第一弹幕传输协议,将继承了第一弹幕传输协议的数据转发对象,强制转换为仅具有第一弹幕传输协议对象功能的转发协议对象。其代码实现可以为:

(idanmuprotocl)datadistribution。由于数据转发对象已经持有弹幕接收对象,故强制转换后的转发器协议对象也持有弹幕接收对象。

经过上述操作后,转发协议对象持有了弹幕接收对象,且弹幕接收对象中包含第一对象传输函数,故在数据转发对象的生命周期函数中,以转发协议对象为函数输入参数mm,通过转发协议对象持有的弹幕接收对象,调用其内的第一对象传输函数setidanmuprotocl(mm),将转发协议对象赋值给弹幕接收对象中的对象变量idanmu,如此弹幕接收对象便持有了转发协议对象。此时,弹幕接收对象和数据转发对象为互相持有对象的状态,则构建了弹幕接收对象和数据转发对象之间的通信通道。

进一步地,分发协议对象通过如下方式预先获得:目标弹幕分发对象通过数据转发类,调用第二对象获取函数,获取数据转发对象;目标弹幕分发对象依据第二弹幕传输协议,将目标弹幕分发对象转换为分发协议对象;目标弹幕分发对象通过数据转发对象,以分发协议对象为函数输入参数,调用数据转发对象中的第二对象传输函数,将分发协议对象发送至数据转发对象。

其中,第二对象获取函数是数据转发类中的内部函数(也称成员函数),其用于获取数据转发类中的对象。第二对象传输函数是数据转发类中定义的,用于进行对象传输的函数。例如,第二对象传输函数可以定义为:publicvoidsetiviewprotocl(iviewprotoclnn){iviewprotocliview=nn;}。其中,第二对象传输函数setiviewprotocl的函数输入参数nn是一个数据类型为第二弹幕传输协议iviewprotocl类型的对象。iview是弹幕接收对象中的一个数据类型同样为第二弹幕传输协议iviewprotocl类型的对象变量。

示例性地,数据转发对象为单例对象。本实施例中将数据转发类设置为单例模式,这样数据转发类仅可有一个数据转发对象。这样设置的好处在于将数据转发对象设置为全局对象,以便其他类或对象可以直接获取。

具体地,本发明实施例中构建数据转发对象与目标弹幕分发对象之间的通信通道,是通过互相获取相应对象的方式来实现的。由于数据转发对象为单例对象,故目标弹幕分发对象可以直接获取数据转发对象。具体实施时,目标弹幕分发对象首先通过数据转发类,调用其中的第二对象获取函数getinstence(),获取函数返回值,该函数返回值便为数据转发对象。此时,目标弹幕分发对象便持有了数据转发对象。

之后,需要实现数据转发对象持有目标弹幕分发对象。在这之前,考虑到数据转发对象所要获取的目标弹幕分发对象中需要具有第二弹幕传输函数,且目标弹幕分发对象应该仅具有第二弹幕传输协议对象的通信功能,以方便后续基于第二弹幕传输协议的函数调用。故在数据转发对象获得目标弹幕分发对象之前,需要在目标弹幕分发对象的生命周期函数内,先根据第二弹幕传输协议,将继承了第二弹幕传输协议的目标弹幕分发对象,强制转换为仅具有第二弹幕传输协议对象功能的分发协议对象。其代码实现可以为:(iviewprotocl)danmusender。由于目标弹幕分发对象已经持有数据转发对象,故强制转换后的分发协议对象也持有数据转发对象。

经过上述操作后,分发协议对象持有了数据转发对象,且数据转发对象中包含第二对象传输函数,故在目标弹幕分发对象的生命周期函数中,以分发协议对象为函数输入参数nn,通过分发协议对象持有的数据转发对象,调用其内的第二对象传输函数setiviewprotocl(nn),将分发协议对象赋值给数据转发对象中的对象变量iview,如此数据转发对象便持有了分发协议对象。此时,数据转发对象和目标弹幕分发对象为互相持有对象的状态,则构建了数据转发对象和目标弹幕分发对象之间的通信通道。

实施例四

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

弹幕接收模块410,数据转发模块420,广播发布模块430和广播接收模块440;

弹幕接收模块410,用于依据目标弹幕消息,通过预先获得的转发协议对象,调用第一弹幕传输函数,以将目标弹幕消息传输至转发协议对象,其中,转发协议对象是数据转发对象继承预先定义的第一弹幕传输协议而获得,第一弹幕传输协议包含第一弹幕传输函数;

数据转发模块420,用于回调第一弹幕传输函数,获得目标弹幕消息,并触发判断目标弹幕分发对象是否初始化;

广播发布模块430,用于若目标弹幕分发对象未初始化,则依据目标弹幕分发对象的目标对象信息及目标弹幕消息,构建广播意图对象,并将广播意图对象进行广播;

广播接收模块440,用于接收广播意图对象,并将广播意图对象中的目标弹幕消息发送至目标弹幕分发对象,以使目标弹幕分发对象获得目标弹幕消息。

可选地,广播发布模块430包括广播意图对象构建子模块,用于:

依据目标对象信息确定广播发送动作描述,并以广播发送动作描述为函数输入参数,调用预先构建的初始意图对象的广播动作设置函数,为初始意图对象设置动作描述,获得中间意图对象,其中,对象信息包含对象包名和对象类名;

依据目标弹幕消息,调用预先构建的初始数据包裹器对象的数据存储函数,将目标弹幕消息存储至初始数据包裹器对象,获得目标数据包裹器对象;

以目标数据包裹器对象为函数输入参数,调用中间意图对象的数据包设置函数,将目标数据包裹器对象存储至中间意图对象,获得广播意图对象。

可选地,广播接收模块440包括弹幕消息传输子模块,用于:

在目标弹幕分发对象未初始化时,调用初始化函数初始化目标弹幕分发对象;

通过广播意图对象,调用数据包获取函数,获得目标数据包裹器对象;

调用目标数据包裹器对象的数据获取函数,获取目标弹幕消息,并将目标弹幕消息发送至目标弹幕分发对象。

在上述装置的基础上,该装置还包括广播注册模块,用于:

在广播接收对象接收广播意图对象之前,在广播接收对象对应的广播接收类为弹幕分发对象对应的弹幕分发类的内部类时,依据目标对象信息确定广播接收动作描述;

依据目标对象信息、内部类标识及内部类信息确定广播接收对象描述;

依据广播接收对象描述和广播接收动作描述,采用静态注册方式注册系统广播接收器,获得广播接收对象。

可选地,广播注册模块还用于:

在广播接收对象接收广播意图对象之前,在广播接收对象对应的广播接收类为与弹幕分发对象同处一个功能模块的独立类时,依据功能模块中的各个弹幕分发对象的对象信息,确定各个广播接收动作描述;

依据独立类信息确定广播接收对象描述;

依据广播接收对象描述和各个广播接收动作描述注册系统广播接收器,获得广播接收对象。

可选地,在上述装置的基础上,该装置还包括弹幕分发模块;

数据转发模块420还用于:在转发协议对象判断弹幕分发对象是否初始化之后,若是,则转发协议对象在第一弹幕传输函数中触发依据目标弹幕消息,通过预先获得的分发协议对象,调用第二弹幕传输函数,以将目标弹幕消息传输至分发协议对象,其中,分发协议对象是目标弹幕分发对象继承预先定义的第二弹幕传输协议而获得,第二弹幕传输协议包含第二弹幕传输函数,第一弹幕传输函数与第二弹幕传输函数的函数输入参数相同;

弹幕分发模块,用于回调第二弹幕传输函数,获得目标弹幕消息。

进一步地,数据转发模块包括转发协议对象获取子模块,用于通过如下方式使得弹幕接收对象预先获得转发协议对象:

数据转发对象通过弹幕接收类,调用第一对象获取函数,获取弹幕接收对象,其中,弹幕接收对象为单例对象;

数据转发对象依据第一弹幕传输协议,将数据转发对象转换为转发协议对象;

数据转发对象通过弹幕接收对象,以转发协议对象为函数输入参数,调用弹幕接收对象中的第一对象传输函数,将转发协议对象发送至弹幕接收对象;

弹幕分发模块包括分发协议对象获取模块,用于通过如下方式使得数据转发对象预先获得分发协议对象:

目标弹幕分发对象通过数据转发类,调用第二对象获取函数,获取数据转发对象,其中,数据转发对象为单例对象;

目标弹幕分发对象依据第二弹幕传输协议,将弹幕分发对象转换为分发协议对象;

目标弹幕分发对象通过数据转发对象,以分发协议对象为函数输入参数,调用数据转发对象中的第二对象传输函数,将分发协议对象发送至数据转发对象。

通过本发明实施例四的一种弹幕消息传输装置,实现了弹幕消息在弹幕接收模块与弹幕分发模块之间的快速传输,提高了弹幕消息传输的时效性。

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

实施例五

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

图5显示的设备500仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图5所示,该设备500包括处理器520、存储装置510、输入装置530和输出装置540;设备中处理器520的数量可以是一个或多个,图5中以一个处理器520为例;设备中的处理器520、存储装置510、输入装置530和输出装置540可以通过总线或其他方式连接,图5中以通过总线550连接为例。

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

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

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

实施例六

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

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

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

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