CN109005468B - 弹幕消息分发方法、装置、设备及存储介质 - Google Patents
弹幕消息分发方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109005468B CN109005468B CN201810711925.5A CN201810711925A CN109005468B CN 109005468 B CN109005468 B CN 109005468B CN 201810711925 A CN201810711925 A CN 201810711925A CN 109005468 B CN109005468 B CN 109005468B
- Authority
- CN
- China
- Prior art keywords
- broadcast
- bullet screen
- distribution
- function
- message
- 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
-
- 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/488—Data services, e.g. news ticker
- H04N21/4884—Data services, e.g. news ticker for displaying subtitles
-
- 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/431—Generation of visual interfaces for content selection or interaction; Content or additional data rendering
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明实施例公开了一种弹幕消息分发方法、装置、设备及存储介质。该方法包括:广播发布模块依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象,并广播广播意图对象;广播处理模块依据广播发送动作描述和弹幕分发对象的广播接收动作描述,将广播意图对象发送至弹幕分发对象,弹幕分发对象预先注册为***广播接收器,广播发送动作描述和广播接收动作描述对应一致;弹幕分发对象调用广播接收函数,接收广播意图对象,并依据广播意图对象获取待分发弹幕消息。通过上述技术方案,实现了基于Android***的广播机制,将弹幕消息直达式分发至音视频播放/直播应用软件中的各个弹幕分发对象,提高了弹幕消息的分发效率。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种弹幕消息分发方法、装置、设备及存储介质。
背景技术
在诸如斗鱼的音视频播放应用软件中,会大量使用弹幕消息。通常,这些弹幕消息是由音视频播放应用软件逐条分发给需要使用弹幕消息的各个弹幕分发目标,如视图、业务控制器或数据管理器等。
以弹幕分发目标为视图为例,目前,对于安装于Android***的音视频播放应用软件,其向各个视图分发弹幕消息的方式是逐层传递的方式。具体来说,Android***中的各个视图是按照层级关系布设的,那么基于该层级关系,可以构建各个视图之间的引用关系链。弹幕消息在各个视图之间的传递,便是按照上述引用关系链进行逐层传递的。参见图1,如果一个位于第三视图层104中的视图需要获取到弹幕消息101,那么该弹幕消息101需要按照引用关系链,先传递至第一视图层102,再由第一视图层102传递至第二视图层103,并最终由第二视图层103再传递至第三视图层104。这样,该视图获取弹幕消息的过程就比较复杂,用时较长,效率较低。而且,即便第一视图层102和第二视图层103中的视图不需要该弹幕消息,其也必须接收并传递该弹幕消息,无疑会造成***资源的浪费。
现有的弹幕消息在音视频播放应用软件中的分发方式存在分发过程复杂,分发效率低以及***资源消耗较高的问题。
发明内容
本发明实施例提供一种弹幕消息分发方法、装置、设备及存储介质,以实现音视频播放/直播应用软件中弹幕消息的直达式分发,使得各个弹幕分发对象能够直接获得弹幕消息,提高了弹幕消息的分发效率。
第一方面,本发明实施例提供了一种弹幕消息分发方法,包括:
广播发布模块依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象,并广播所述广播意图对象;
广播处理模块依据所述广播发送动作描述和弹幕分发对象的广播接收动作描述,将所述广播意图对象发送至所述弹幕分发对象,所述弹幕分发对象预先注册为***广播接收器,所述广播发送动作描述和所述广播接收动作描述对应一致;
所述弹幕分发对象调用广播接收函数,接收所述广播意图对象,并依据所述广播意图对象获取所述待分发弹幕消息。
第二方面,本发明实施例还提供了一种弹幕消息分发装置,该装置包括:
广播发布模块,用于依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象,并广播所述广播意图对象;
广播处理模块,用于依据所述广播发送动作描述和弹幕分发对象的广播接收动作描述,将所述广播意图对象发送至所述弹幕分发对象,所述弹幕分发对象预先注册为***广播接收器,所述广播发送动作描述和所述广播接收动作描述对应一致;
弹幕消息接收模块,用于所述弹幕分发对象调用广播接收函数,接收所述广播意图对象,并依据所述广播意图对象获取所述待分发弹幕消息。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的弹幕消息分发方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的弹幕消息分发方法。
本发明实施例通过预先将弹幕分发对象注册为***广播接收器,使得弹幕分发对象能够直接接收Android***中广播的***广播消息,为弹幕消息的直达式分发提供基础。通过广播发布模块依据待分发弹幕消息和与弹幕分发对象注册为***广播接收器时设置的广播接收动作描述对应一致的广播发送动作描述,构建广播意图对象,并将该广播意图对象进行***广播;广播处理模块依据广播发送动作描述和弹幕分发对象的广播接收动作描述,将广播意图对象发送至弹幕分发对象;弹幕分发对象调用广播接收函数,接收广播意图对象,并依据广播意图对象获取待分发弹幕消息。实现了基于Android***的广播机制,将弹幕消息直达式分发至音视频播放/直播应用软件中的各个弹幕分发对象,提高了弹幕消息的分发效率。
附图说明
图1是现有技术中弹幕消息分发的过程示意图;
图2是本发明实施例一中的一种弹幕消息分发方法的流程图;
图3是本发明实施例一中的弹幕消息分发的过程示意图;
图4是本发明实施例二中的一种弹幕消息分发方法的流程图;
图5是本发明实施例三中的一种弹幕消息分发装置的结构示意图;
图6是本发明实施例四中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
本实施例提供的弹幕消息分发方法,可适用于Android客户端将接收到的弹幕消息,分发至音视频播放/直播应用软件内的各个弹幕分发对象。该方法可以由弹幕消息分发装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在安装有音视频播放/直播应用软件的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。参见图2,本实施例的方法具体包括如下步骤:
S110、广播发布模块依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象,并广播广播意图对象。
其中,广播发布模块是Android***中发布***广播的模块。待分发弹幕消息是指等待分发至弹幕分发对象的弹幕消息,其是Android客户端从弹幕服务器中获取。具体的获取方式可以是Android客户端向弹幕服务器发送数据获取请求,弹幕服务器被动响应数据获取请求来获取;优选是通过Android客户端中预先建立的弹幕***接口对象及弹幕***接口对象中作为回调函数的消息传输函数,接收弹幕服务器中的弹幕库对象回调消息传输函数发送的弹幕消息,弹幕***接口对象用于监听弹幕服务器中的弹幕库对象。也就是说,Android客户端从服务器获取弹幕消息是通过Android客户端中设置弹幕***接口对象,对弹幕服务器中的弹幕库对象进行监听,为弹幕服务器发送弹幕消息至Android客户端提供接口,且弹幕***中包含回调函数,为弹幕服务器发送弹幕消息至Android客户端提供调用函数指针。当弹幕消息到达弹幕服务器时,触发弹幕服务器主动调用回调函数,即弹幕服务器通过回调函数的函数指针,将弹幕消息由弹幕***接口发送至Android客户端,Android客户端则及时地、被动地接收弹幕消息,即待分发弹幕消息。
广播发送动作描述是指对发送的广播消息所具有的动作功能进行的描述或说明,其通常是广播发送动作的简称或关键词,其可以为***动作描述,也可以是预先进行自定义的广播动作描述。由于本发明实施例中只需进行弹幕消息的分发与接收,故广播发送动作描述action只需描述发送的消息为弹幕消息即可,例如广播发送动作描述action可以为“android.danmu.message”。广播意图对象是指发送广播时广播出去的意图对象intent,其是Android***中广播消息的数据承载者。
具体地,在利用Android***提供的广播机制进行弹幕消息的分发之前,需要先将待分发弹幕消息和广播发送动作描述构建为可用于广播发送的数据格式。具体实施时,将广播发送动作描述作为广播意图对象intent构建的动作action,将待分发弹幕消息作为广播意图对象intent构建的数据data,按照意图对象intent的数据格式,构建广播意图对象。之后,利用Android***中进行广播的广播发送函数,将构建的广播意图对象作为全局广播消息进行广播。
S120、广播处理模块依据广播发送动作描述和弹幕分发对象的广播接收动作描述,将广播意图对象发送至弹幕分发对象,弹幕分发对象预先注册为***广播接收器,广播发送动作描述和广播接收动作描述对应一致。
其中,广播处理模块是对广播消息进行过滤及广播接收器匹配等处理的模块。弹幕分发对象是指音视频播放/直播应用软件中需要接收弹幕消息的组件对象,例如可以是用于弹幕消息显示的视图对象,也可以是用于对弹幕消息进行数据处理的业务控制器对象,还可以是对弹幕消息进行存储或传输的数据管理器对象。广播接收动作描述是指对可以接收的广播消息所具有的动作功能进行的描述或说明,其通常是广播接收动作的简称或关键词,可以为***提供的动作描述,也可以是预先进行自定义的动作描述。广播接收动作描述通常是在注册广播接收器时设置在广播消息过滤段intent-filter中的动作描述,用于对***广播消息进行过滤,筛选出广播发送动作描述与广播接收动作描述对应一致的广播消息。例如本实施例中的广播接收动作描述action同样可以设置为“android.danmu.message”,这样,包含广播接收动作描述的所有广播接收器便可以接收所有发布为弹幕消息的***广播消息。***广播接收器是指可以接收***广播消息的接收器。
通常情况下,以弹幕为例,是将Android***中音视频播放/直播应用软件中的专门处理弹幕消息的弹幕类注册为***广播接收器,然后通过应用软件内的原生引用关系链,从上述弹幕类中向下层视图层层传递弹幕消息,直至弹幕消息到达目标视图层中的弹幕分发对象。这种传统的基于广播机制的弹幕消息分发方式的分发过程复杂且分发效率低。
本发明实施例中是在***广播消息发布之前,预先将弹幕分发对象注册为***广播接收器,以便其直接接收Android***所发出的***广播,省略了中间视图层的弹幕消息传输过程。注册为***广播接收器的方式可以是动态注册方式,也可以是静态注册方式。无论采用何种方式注册,其注册代码中均需包含广播接收动作描述。
广播处理模块在接收到广播发布模块发布的广播消息时,获取广播意图对象中的广播发送动作描述,并将其与所有注册为***广播接收器的广播消息过滤段中的广播接收动作描述进行比较,确定出与广播发送动作描述一致的广播接收动作描述对应的***广播接收器,即弹幕分发对象。之后,将广播意图对象直接发送至弹幕分发对象,以触发弹幕分发对象中的广播接收函数的执行。
示例性地,弹幕分发对象预先注册为***广播接收器包括:确定包含***广播接收器注册注解及广播接收函数的***广播接收器注册基类,***广播接收器注册注解为编译时注解;弹幕分发对象继承***广播接收器注册基类,以获得***广播接收器注册注解及广播接收函数,以使弹幕分发对象在程序编译期间预先注册为***广播接收器。
其中,注解,也叫元数据,以“@+关键字”的形式出现,例如@Receive。注解与类、接口和枚举等处于同一个层次,并可以应用于包、类型、构造方法、方法、成员变量、参数或本地变量的声明中,用来对这些元素进行说明注释。***广播接收器注册注解是指Android***中用于进行***广播接收器自动注册的注解,其注解属于编译时注解,即在程序编译期间被扫描和处理的注解。当***广播接收器注册注解被处理后,会生成将弹幕分发对象注册为***广播接收器的注册代码,该注册代码中包含广播消息过滤段intent-filter及其中的广播接收动作描述。本发明实施例中的***广播接收器注册注解设置在***广播接收器注册基类中。广播接收函数是广播接收器中用于接收广播消息的函数,其在接收到广播消息时自动触发执行。本发明实施例中广播接收函数的定义为Public void onReceive(Context context,Intent intent),其具有公有权项修饰符,且函数返回值类型为无类型,其包含数据类型为上下文环境对象类型及意图对象类型的两个函数参数。***广播接收器注册基类是指包含***广播接收器注册共性的类。
具体地,在将所有的弹幕分发对象注册为***广播接收器时,为了简化注册流程及提高注册效率,从而进一步简化弹幕消息直达式分发的流程,本发明实施例中采用了编译时注解的形式。为了进一步提高注解在编译期间的编译效率及弹幕消息分发效率,本发明实施例中采用了基类的形式。在音视频播放/直播应用软件中定义一个***广播接收器注册基类,该基类中包含了***广播接收器注册注解及***广播接收器对应的广播接收函数,并进一步对上述定义的基类进行实现,即完成***广播接收器注册注解的编译实现代码和广播接收函数的实现代码。之后,所有的弹幕分发对象通过类继承关键字extends,继承上述定义并实现了的***广播接收器注册注解基类。这样,所有的弹幕分发对象均具有了基类所具有的功能,即弹幕分发对象中也设置了***广播接收器注册注解,其在编译期间会被扫描并处理,从而使得弹幕分发对象在编译期间被注册为***广播接收器。且弹幕分发对象具有了广播接收函数onReceive,其可以接收并处理***广播消息。
示例性地,***广播接收器注册注解通过调用预定义的注解处理器中的注解处理函数,在程序编译期间,将弹幕分发对象预先注册为***广播接收器;注解处理函数通过如下步骤实现在程序编译期间将弹幕分发对象注册为***广播接收器的功能:通过调用文件对象中的文件写入对象创建函数,构建文件写入对象,文件对象通过文件创建函数预先创建;将文件写入对象转换为缓存写入对象;以弹幕分发对象标识及广播接收动作描述为函数输入参数,调用缓存写入对象中的写入函数,将***广播接收器注册代码写入Android***的应用描述文件,应用描述文件在编译期间被调用。
其中,注解处理器是一个java语言编程编译器(java compiler,javac)工具,用于在程序编译时对注解进行扫描和处理。一个注解处理器以Java代码或者编译过的字节码作为输入,生成文件(通常是java文件)。这些生成的java文件不能修改,并且会同其手动编写的java代码一样被javac编译。也就是说,注解处理器的输入为标记了注解的类或变量等,经过注解处理器处理,自动生成对应的java代码。本实施例中注解处理器的输入便是***广播接收器注册基类和继承了上述基类的弹幕分发对象,输出便是***广播接收器自动注册的java文件,该java文件包含了***广播接收器自动注册的注册代码,且注册代码是自动生成,而非人工编程。注解处理函数是注解处理器中具体执行注解处理的函数。弹幕分发对象标识是指能够表征弹幕分发对象的标识,其可以是弹幕分发对象的名称或简称。应用描述文件是指Android***中的Android应用描述符,其用于描述Android***中的应用具有哪些特点,应用描述文件在编译期间被调用及解析。
具体地,为了提高注解的执行效率,从而进一步提高弹幕消息分发的速率,本发明实施例中将实现注解的注解处理函数设定为文件自动写入的执行过程。***广播接收器注册注解的实现过程为:预先通过继承Android***的抽象解析器AbstractProcessor,定义注解处理器ReceiveAbstractProcessor,注解处理器ReceiveAbstractProcessor中包含注解处理函数process,该注解处理函数process用于程序编译期间对注解进行扫描及处理。
注解处理函数process的实现过程具体为:首先通过调用文件创建函数new File(),对Android***的应用描述文件进行新建或打开操作,代码实现可以为:File file=new File(“AndroidManifest.xml”),也就是如果***中没有应用描述文件AndroidManifest.xml,则新建该文件,如果***中已经存在该文件,则直接打开文件。然后,通过调用文件对象file中的文件写入对象创建函数FileWriter(),构建文件写入对象FileWriter,代码实现可以为:FileWriter fileWriter=new FileWriter(file)。之后,以文件写入对象FileWriter为函数输入参数,通过调用缓存写入对象创建函数BufferedWriter(),将文件写入对象FileWriter转换为缓存写入对象bufferedWriter,代码实现可以为:BufferedWriter bufferedWriter=new BufferedWriter(fileWriter),该缓存写入对象bufferedWriter具有缓存写入文件的功能。最后,以弹幕分发对象标识(例如“***View”)及广播接收动作描述(例如“android.danmu.message”)为函数输入参数,调用缓存写入对象bufferedWriter中的写入函数writer,将***广播接收器注册代码写入Android***的应用描述文件AndroidManifest.xml。通过上述的执行过程,可以实现在编译期间将如下的***广播接收器注册代码自动写入应用描述文件AndroidManifest.xml,并通过编译期间对应用描述文件AndroidManifest.xml的解析,将弹幕分发对象自动注册为***广播接收器。
<receiver android:name="XXXView">
<intent-filter>
<action android:name="android.danmu.message"/>
</intent-filter>
</receiver>。
S130、弹幕分发对象调用广播接收函数,接收广播意图对象,并依据广播意图对象获取待分发弹幕消息。
具体地,弹幕分发对象接收到作为广播消息的广播意图对象之后,自动触发调用广播接收函数,接收到广播意图对象。之后,通过对该广播意图对象的解析,获得其中包含的待分发弹幕消息。
参见图3,通过本发明实施例中的弹幕消息分发方法,弹幕消息301可以直接通过基于***广播机制进行弹幕消息分发的注解式广播分发器302发送至需要接收弹幕消息的视图中,即位于第三视图层305中的视图,而无需经过中间的第一视图层303和第二视图层304。
本实施例的技术方案,通过预先将弹幕分发对象注册为***广播接收器,使得弹幕分发对象能够直接接收Android***中广播的***广播消息,为弹幕消息的直达式分发提供基础。通过广播发布模块依据待分发弹幕消息和与弹幕分发对象注册为***广播接收器时设置的广播接收动作描述对应一致的广播发送动作描述,构建广播意图对象,并将该广播意图对象进行***广播;广播处理模块依据广播发送动作描述和弹幕分发对象的广播接收动作描述,将广播意图对象发送至弹幕分发对象;弹幕分发对象调用广播接收函数,接收广播意图对象,并依据广播意图对象获取待分发弹幕消息。实现了基于Android***的广播机制,将弹幕消息直达式分发至音视频播放/直播应用软件中的各个弹幕分发对象,提高了弹幕消息的分发效率。
实施例二
本实施例在上述实施例一的基础上,对“广播发布模块依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象”进行了进一步优化。在此基础上,还可以进一步对“广播发布模块广播广播意图对象”进行优化。在上述基础上,还可以进一步对“广播处理模块依据广播发送动作描述和弹幕分发对象的广播接收动作描述,将广播意图对象发送至弹幕分发对象”进行进一步优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图4,本实施例提供的弹幕消息分发方法包括:
S210、广播发布模块以广播发送动作描述为函数输入参数,调用预先构建的初始意图对象的广播动作设置函数,为初始意图对象设置动作描述,获得中间意图对象。
其中,初始意图对象是指最初定义的意图对象,其内未进行数据的填充。示例性地,通过Android***的意图对象构造函数,预先构建初始意图对象,代码实现可以为Intent intent=new Intent()。广播动作设置函数是指设置意图对象中动作action的函数。中间意图对象指设置了动作描述的意图对象,其对应于初始意图对象。
具体地,广播发布模块以广播发送动作描述android.danmu.message为函数输入参数,调用初始意图对象的广播动作设置函数setAction,将广播发送动作描述设置为初始意图对象的动作描述,其代码实现可以为:intent.setAction(“android.danmu.message”),获得中间意图对象。
S220、广播发布模块依据待分发弹幕消息,调用预先构建的初始数据包裹器对象的数据存储函数,将待分发弹幕消息对应的消息标识和消息体对象存储至初始数据包裹器对象,获得目标数据包裹器对象。
其中,数据包裹器对象是Android开发中的一个用于存储数据的数据容器类,其用于Android***中组件之间的数据传输。本实施例中的数据包裹器对象中存储待分发弹幕消息。初始数据包裹器对象是指最初定义的数据包裹器对象,其内未进行数据的填充。示例性地,通过Android***的数据包裹器对象构造函数,预先构建初始数据包裹器对象mBundle,代码实现可以为Bundle mBundle=new Bundle()。目标数据包裹器对象与初始数据包裹器对象相对应,其是指填充了数据的数据包裹器对象。数据存储函数是数据包裹器对象中对其进行数据填充的函数。消息标识是指能够标识弹幕消息的字符,其可以是数字、字母、符号及上述各种字符的任意组合,该消息标识应当是一条弹幕消息的唯一的、全局的标识。消息体对象是指弹幕消息的承载者,其内包含具体地弹幕消息内容。
具体地,广播发布模块对待分发弹幕消息进行解析,获得其对应的消息标识type和消息体对象msg。之后,分别调用初始数据包裹器对象中的不同数据类型对应的数据存储函数,将相应的消息标识和消息体对象存储至初始数据包裹器对象。具体实施时,调用初始数据包裹器对象中的字符串类型数据存储函数,将消息标识type存储至初始数据包裹器对象,代码实现可以是mBundle.setString(type)。同样地,调用初始数据包裹器对象中的序列化类型数据存储函数,将消息体对象对应的序列化数据内容存储至初始数据包裹器对象,代码实现可以是mBundle.setSerializable(msg)。这样,就获得了填充弹幕消息之后的目标数据包裹器对象mBundle。
S230、广播发布模块以目标数据包裹器对象为函数输入参数,调用中间意图对象的数据包设置函数,将目标数据包裹器对象存储至中间意图对象,获得广播意图对象。
其中,数据包设置函数是指意图对象中为意图对象设置数据data的函数。
具体地,要获得广播意图对象,还需将具体的广播消息数据填充至中间意图对象。具体实施时,广播发布模块以上述获得的目标数据包裹器对象mBundle为函数输入参数,调用中间意图对象的数据包设置函数setBundle(),将目标数据包裹器对象存储至中间意图对象,代码实现可以为intent.setBundle(mBundle)。这样,就获得了包含广播发送动作描述和待分发弹幕消息的广播意图对象。
S240、广播发布模块调用应用程序类的上下文环境获取函数,获取Android***的上下文环境对象。
其中,应用程序类Application是Android***开发方提供的一个***类,其用于应用程序开发过程,开发一个应用程序时会实现一个application类的实例化。上下文环境对象是一个抽象类,并且Android***提供了类的实现,通过上下文环境对象允许访问应用程序特定的资源和类。
具体地,广播发布模块通过调用Android***中的应用程序类Application中的上下文环境获取函数getApplicationContext来获取到***提供的上下文环境对象mContext。
S250、广播发布模块通过上下文环境对象,以广播意图对象为函数输入参数,调用广播发送函数,广播广播意图对象。
具体地,广播发布模块以广播意图对象intent为函数输入参数,调用上下文环境对象mContext中的广播发送函数sendBroadcast(),即mContext.sendBroadcast(intent),将广播意图对象作为***广播消息进行广播。这样,包含待分发弹幕消息的广播意图对象便被发送到Android***事件总线上。
S260、广播处理模块依据弹幕分发对象中的***广播接收器注册注解,确定弹幕分发对象的广播接收动作描述。
具体地,广播处理模块监测到Android***事件总线中有新的广播消息时,会筛选出可以接收该广播消息的广播接收器。具体实施时,广播处理模块通过弹幕分发对象对应的***广播接收器注册注解的实现结果,获得弹幕分发对象对应的广播接收动作描述。
S270、广播处理模块依据广播发送动作描述和广播接收动作描述,将广播意图对象发送至弹幕分发对象。
具体地,广播处理模块将广播发送动作描述和获得的广播接收动作描述进行对比,将对比结果为一致的弹幕分发对象确定为广播接收器,并将广播意图对象发送至弹幕分发对象。
S280、弹幕分发对象调用广播接收函数,接收广播意图对象,并依据广播意图对象获取待分发弹幕消息。
示例性地,广播接收函数通过如下步骤实现依据广播意图对象获取待分发弹幕消息的功能:通过广播意图对象,调用数据包获取函数,获得目标数据包裹器对象;调用目标数据包裹器对象的数据获取函数,获取待分发弹幕消息的消息标识和消息体对象。
其中,数据包获取函数是指从意图对象中获取数据包裹器对象的函数。数据获取函数是指从数据包裹器对象中获取其内包含的数据的函数。
具体地,广播接收函数被触发后,其会获得广播意图对象,之后需要对该广播意图对象进行解析,以获得其内包含的待分发弹幕消息。具体过程为:广播接收函数调用广播意图对象中的数据包获取函数intent.getBundle(),获得广播意图对象中包含的目标数据包裹器对象mBundle。之后,广播接收函数分别调用目标数据包裹器对象的字符串类型数据获取函数mBundle.getString(type)和序列化类型数据获取函数mBundle.getSerializable(msg),获得待分发弹幕消息对应的消息标识type和消息体对象msg。这样,弹幕分发对象便获得了待分发弹幕消息的具体消息内容。
本实施例的技术方案,通过将待分发弹幕消息和广播发送动作描述构建为目标数据包裹器对象,并进一步构建为广播意图对象;弹幕分发对象通过广播接收函数获取广播意图对象中的目标数据包裹器对象,并进一步获得待分发弹幕消息,保证了弹幕消息作为广播消息传输的完整性与便捷性,进一步提高了弹幕消息的分发效率。
以下是本发明实施例提供的弹幕消息分发装置的实施例,该装置与上述各实施例的弹幕消息分发方法属于同一个发明构思,在弹幕消息分发装置的实施例中未详尽描述的细节内容,可以参考上述弹幕消息分发方法的实施例。
实施例三
本实施例提供一种弹幕消息分发装置,参见图5,该装置具体包括:
广播发布模块510,用于依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象,并广播广播意图对象;
广播处理模块520,用于依据广播发送动作描述和弹幕分发对象的广播接收动作描述,将广播发布模块510构建的广播意图对象发送至弹幕分发对象,弹幕分发对象预先注册为***广播接收器,广播发送动作描述和广播接收动作描述对应一致;
弹幕消息接收模块530,用于弹幕分发对象调用广播接收函数,接收广播处理模块520广播的广播意图对象,并依据广播意图对象获取待分发弹幕消息。
可选地,在上述装置的基础上,该装置还包括:广播接收器注册模块,用于:
确定包含***广播接收器注册注解及广播接收函数的***广播接收器注册基类,***广播接收器注册注解为编译时注解;
弹幕分发对象继承***广播接收器注册基类,以获得***广播接收器注册注解及广播接收函数,以使弹幕分发对象在程序编译期间预先注册为***广播接收器。
进一步地,广播接收器注册模块具体用于:
***广播接收器注册注解通过调用预定义的注解处理器中的注解处理函数,在程序编译期间,将弹幕分发对象预先注册为***广播接收器;
注解处理函数通过如下步骤实现在程序编译期间将弹幕分发对象注册为***广播接收器的功能:
通过调用文件对象中的文件写入对象创建函数,构建文件写入对象,文件对象通过文件创建函数预先创建;
将文件写入对象转换为缓存写入对象;
以弹幕分发对象标识及广播接收动作描述为函数输入参数,调用缓存写入对象中的写入函数,将***广播接收器注册代码写入Android***的应用描述文件,应用描述文件在编译期间被调用。
相应地,广播处理模块520具体用于:
广播处理模块依据弹幕分发对象中的***广播接收器注册注解,确定弹幕分发对象的广播接收动作描述;
广播处理模块依据广播发送动作描述和广播接收动作描述,将广播意图对象发送至弹幕分发对象。
可选地,广播发布模块510具体用于:
广播发布模块以广播发送动作描述为函数输入参数,调用预先构建的初始意图对象的广播动作设置函数,为初始意图对象设置动作描述,获得中间意图对象;
广播发布模块依据待分发弹幕消息,调用预先构建的初始数据包裹器对象的数据存储函数,将待分发弹幕消息对应的消息标识和消息体对象存储至初始数据包裹器对象,获得目标数据包裹器对象;
广播发布模块以目标数据包裹器对象为函数输入参数,调用中间意图对象的数据包设置函数,将目标数据包裹器对象存储至中间意图对象,获得广播意图对象。
可选地,广播发布模块510具体用于:
广播发布模块调用应用程序类的上下文环境获取函数,获取Android***的上下文环境对象;
广播发布模块通过上下文环境对象,以广播意图对象为函数输入参数,调用广播发送函数,广播广播意图对象。
可选地,弹幕消息接收模块530还包括广播接收函数执行子模块,用于通过如下步骤实现依据广播意图对象获取待分发弹幕消息的功能:
通过广播意图对象,调用数据包获取函数,获得目标数据包裹器对象;
调用目标数据包裹器对象的数据获取函数,获取待分发弹幕消息的消息标识和消息体对象。
通过本发明实施例三的一种弹幕消息分发装置,实现了基于Android***的广播机制,将弹幕消息直达式分发至音视频播放/直播应用软件中的各个弹幕分发对象,提高了弹幕消息的分发效率。
本发明实施例所提供的弹幕消息分发装置可执行本发明任意实施例所提供的弹幕消息分发方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述弹幕消息分发装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例四
参见图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 (10)
1.一种弹幕消息分发方法,其特征在于,包括:
广播发布模块依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象,并广播所述广播意图对象;
广播处理模块依据所述广播发送动作描述和弹幕分发对象的广播接收动作描述,将所述广播意图对象发送至所述弹幕分发对象,所述弹幕分发对象预先注册为***广播接收器,所述广播发送动作描述和所述广播接收动作描述对应一致;
所述弹幕分发对象调用广播接收函数,接收所述广播意图对象,并依据所述广播意图对象获取所述待分发弹幕消息。
2.根据权利要求1所述的方法,其特征在于,所述弹幕分发对象预先注册为***广播接收器包括:
确定包含***广播接收器注册注解及所述广播接收函数的***广播接收器注册基类,所述***广播接收器注册注解为编译时注解;
所述弹幕分发对象继承所述***广播接收器注册基类,以获得所述***广播接收器注册注解及所述广播接收函数,以使所述弹幕分发对象在程序编译期间预先注册为所述***广播接收器。
3.根据权利要求2所述的方法,其特征在于,所述广播处理模块依据所述广播发送动作描述和弹幕分发对象的广播接收动作描述,将所述广播意图对象发送至所述弹幕分发对象包括:
所述广播处理模块依据所述弹幕分发对象中的所述***广播接收器注册注解,确定所述弹幕分发对象的广播接收动作描述;
所述广播处理模块依据所述广播发送动作描述和所述广播接收动作描述,将所述广播意图对象发送至所述弹幕分发对象。
4.根据权利要求2所述的方法,其特征在于,所述***广播接收器注册注解通过调用预定义的注解处理器中的注解处理函数,在程序编译期间,将所述弹幕分发对象预先注册为所述***广播接收器;
所述注解处理函数通过如下步骤实现所述在程序编译期间将所述弹幕分发对象注册为所述***广播接收器的功能:
通过调用文件对象中的文件写入对象创建函数,构建文件写入对象,所述文件对象通过文件创建函数预先创建;
将所述文件写入对象转换为缓存写入对象;
以弹幕分发对象标识及所述广播接收动作描述为函数输入参数,调用所述缓存写入对象中的写入函数,将***广播接收器注册代码写入Android***的应用描述文件,所述应用描述文件在编译期间被调用。
5.根据权利要求1所述的方法,其特征在于,所述广播发布模块依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象包括:
所述广播发布模块以所述广播发送动作描述为函数输入参数,调用预先构建的初始意图对象的广播动作设置函数,为所述初始意图对象设置动作描述,获得中间意图对象;
所述广播发布模块依据所述待分发弹幕消息,调用预先构建的初始数据包裹器对象的数据存储函数,将所述待分发弹幕消息对应的消息标识和消息体对象存储至所述初始数据包裹器对象,获得目标数据包裹器对象;
所述广播发布模块以所述目标数据包裹器对象为函数输入参数,调用所述中间意图对象的数据包设置函数,将所述目标数据包裹器对象存储至所述中间意图对象,获得所述广播意图对象。
6.根据权利要求1所述的方法,其特征在于,所述广播发布模块广播所述广播意图对象包括:
所述广播发布模块调用应用程序类的上下文环境获取函数,获取Android***的上下文环境对象;
所述广播发布模块通过所述上下文环境对象,以所述广播意图对象为函数输入参数,调用广播发送函数,广播所述广播意图对象。
7.根据权利要求5所述的方法,其特征在于,所述广播接收函数通过如下步骤实现所述依据所述广播意图对象获取所述待分发弹幕消息的功能:
通过所述广播意图对象,调用数据包获取函数,获得所述目标数据包裹器对象;
调用所述目标数据包裹器对象的数据获取函数,获取所述待分发弹幕消息的所述消息标识和所述消息体对象。
8.一种弹幕消息分发装置,其特征在于,包括:
广播发布模块,用于依据待分发弹幕消息及预定义的广播发送动作描述,构建广播意图对象,并广播所述广播意图对象;
广播处理模块,用于依据所述广播发送动作描述和弹幕分发对象的广播接收动作描述,将所述广播意图对象发送至所述弹幕分发对象,所述弹幕分发对象预先注册为***广播接收器,所述广播发送动作描述和所述广播接收动作描述对应一致;
弹幕消息接收模块,用于所述弹幕分发对象调用广播接收函数,接收所述广播意图对象,并依据所述广播意图对象获取所述待分发弹幕消息。
9.一种弹幕消息分发设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的弹幕消息分发方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一所述的弹幕消息分发方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810711925.5A CN109005468B (zh) | 2018-06-29 | 2018-06-29 | 弹幕消息分发方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810711925.5A CN109005468B (zh) | 2018-06-29 | 2018-06-29 | 弹幕消息分发方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109005468A CN109005468A (zh) | 2018-12-14 |
CN109005468B true CN109005468B (zh) | 2021-01-01 |
Family
ID=64598109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810711925.5A Active CN109005468B (zh) | 2018-06-29 | 2018-06-29 | 弹幕消息分发方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109005468B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109857637B (zh) * | 2018-12-25 | 2022-04-15 | 杭州茂财网络技术有限公司 | 基于注解的Java语言方法覆盖率和方法输入输出统计方法 |
CN113132121B (zh) * | 2019-12-30 | 2023-01-31 | 成都鼎桥通信技术有限公司 | 广播消息的处理方法、装置和终端设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009152865A2 (en) * | 2008-06-20 | 2009-12-23 | Telefonaktiebolaget Lm Ericsson (Publ) | System and method for ingesting media content in a peer-to-peer network |
CN105338410A (zh) * | 2014-07-07 | 2016-02-17 | 乐视网信息技术(北京)股份有限公司 | 视频的弹幕显示方法及装置 |
CN106060674A (zh) * | 2016-06-27 | 2016-10-26 | 武汉斗鱼网络科技有限公司 | 一种在前端实现智能视频直播的***及方法 |
CN106210861B (zh) * | 2016-08-23 | 2020-08-07 | 上海幻电信息科技有限公司 | 显示弹幕的方法及*** |
-
2018
- 2018-06-29 CN CN201810711925.5A patent/CN109005468B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109005468A (zh) | 2018-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108882053B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN108536524B (zh) | 资源更新方法、装置、终端及存储介质 | |
CN102819452B (zh) | 一种从android***获取数据的方法 | |
CN109005468B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN110753129A (zh) | 消息传输方法、***、装置、设备及计算机可读存储介质 | |
CN110321120B (zh) | 数据处理方法、数据处理装置及计算机可读存储介质 | |
CN110096380B (zh) | Android内部通讯方法、***、装置及存储介质 | |
CN110769018A (zh) | 一种消息推送方法及装置 | |
CN113687958A (zh) | 数据处理方法、***、计算机设备和存储介质 | |
CN110324722B (zh) | 直播间中数据的获取方法、装置、设备和存储介质 | |
CN109062650B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109388388B (zh) | 功能模块间的信息交互方法、装置、设备及存储介质 | |
CN110457132B (zh) | 一种功能对象的创建方法、装置和终端设备 | |
CN108810633B (zh) | 弹幕消息传输方法、装置、设备及存储介质 | |
US20220245080A1 (en) | Method for communication of a componentized application, computing device and computer storage medium | |
CN109144520B (zh) | Android中不同对象间的信息交互方法、装置、设备和存储介质 | |
CN108924653B (zh) | 弹幕消息分发方法、装置、设备和存储介质 | |
CN109089163B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109274988B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
WO2023124657A1 (zh) | 微应用的运行方法、装置、设备、存储介质及程序产品 | |
CN109005448B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN108810644B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN110943971A (zh) | 一种事件业务处理方法及*** | |
EP4369203A1 (en) | Cloud platform docking debugging method and apparatus, and electronic device and storage medium | |
CN108966035B (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 |