CN110968279A - 一种消息的降级方法及相关装置 - Google Patents

一种消息的降级方法及相关装置 Download PDF

Info

Publication number
CN110968279A
CN110968279A CN201811157668.1A CN201811157668A CN110968279A CN 110968279 A CN110968279 A CN 110968279A CN 201811157668 A CN201811157668 A CN 201811157668A CN 110968279 A CN110968279 A CN 110968279A
Authority
CN
China
Prior art keywords
bullet screen
time
queue
message
live broadcast
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.)
Granted
Application number
CN201811157668.1A
Other languages
English (en)
Other versions
CN110968279B (zh
Inventor
周志刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201811157668.1A priority Critical patent/CN110968279B/zh
Publication of CN110968279A publication Critical patent/CN110968279A/zh
Application granted granted Critical
Publication of CN110968279B publication Critical patent/CN110968279B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1454Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/435Processing of additional data, e.g. decrypting of additional data, reconstructing software from modules extracted from the transport stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/478Supplemental services, e.g. displaying phone caller identification, shopping application
    • H04N21/4788Supplemental services, e.g. displaying phone caller identification, shopping application communicating with other users, e.g. chatting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Human Computer Interaction (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明实施例公开了一种消息的降级方法及相关装置,用于使得弹幕量在变化时能够平滑过渡以显示好的表现效果。本发明实施例方法包括:通过调用http的get函数向服务器发送直播间请求信息;接收服务器返回的直播间信息;当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到弹幕阈值,第一时刻队列用于存储接收到消息的时刻;若达到,则将接收弹幕消息的时刻存入第二时刻队列;在第一时刻队列中确定目标弹幕消息,其中,接收到目标弹幕消息的时刻与当前时刻的时间差大于预定时长;通过删除接口DeleteOlderTime删除目标弹幕消息;当第一时刻队列中存储的时刻数量小于弹幕阈值时,将第二时刻队列中存储的时刻转移到第一时刻队列中以进行显示。

Description

一种消息的降级方法及相关装置
技术领域
本发明涉及计算机领域,尤其涉及一种消息的降级方法及相关装置。
背景技术
对于直播平台来说,在一个房间内的所有观众是可以看到该直播间的所有弹幕消息和礼物消息。然而对于大直播间由于消息过多导致移动端的设备的发热,以及性能消耗,会产生卡顿现象。因此在移动端对收到的弹幕和礼物进行降级则很有必要。
现有技术中,依据当前时刻设置来统计弹幕数量,并将在阈值内的弹幕存入队列中,超过数量则丢弃掉。
然而现有技术中,在弹幕量多的时候,给用户的表现是一会是没有弹幕了,即超过阈值后丢弃所有弹幕,一会是收到一大堆弹幕,即当超过时间阈值后可以开始收弹幕。故现有技术中,不是一种平滑的弹幕数量的降级控制,给用户的表现效果不好;同时由于此种做法是在应用层的显示层进行弹幕数量的控制,因此对整个系统的性能也会有一定的消耗。
因此如何在减少系统性能消耗的同时,能够在弹幕量多的时候平滑过渡以给用户好的表现效果,是一个急需解决的问题。
发明内容
本发明实施例提供了一种消息的降级方法及相关装置,用于使得弹幕量在变化时能够平滑过渡以显示好的表现效果。
本发明实施例的第一方面提供了一种消息的降级方法,包括:通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_t m_nLimit中;当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息;当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。
在一种可能的实施例中,所述客户端通过调用http的get函数向服务器发送直播间请求信息包括:所述客户端定义http对象http objhttp;所述客户端在所述http对象中填入所述直播间的域名信息和所述直播间的房间号信息;所述客户端通过所述get函数objhttp.get()将所述直播间请求信息发送给所述服务器。
在一种可能的实施例中,所述判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值之前,所述方法还包括:定义弹幕消息降级类MessageLimit,所述弹幕消息降级类用于对接收到的弹幕消息进行降级处理;定义STL容器的list容器作为所述第一时刻队列的数据结构,并定义用于存储所述弹幕阈值的所述变量size_t m_nLimit;定义所述弹幕消息降级类的查询接口Check,所述查询接口Check用于接收到所述弹幕信息后,判断所述当前弹幕消息的数量是否超过所述弹幕阈值;定义所述弹幕消息降级类的所述删除接口DeleteOlderTime。
在一种可能的实施例中,所述将接收所述弹幕消息的时刻存入第二时刻队列包括:通过函数m_nLimit=DanmuLimit将所述弹幕阈值存储到所述变量size_t m_nLimit中,所述DanmuLimit用于表示所述弹幕阈值;通过函数std::list<uint64_t>m_item_times在所述第二时刻队列中存储所述接收到所述弹幕信息的时刻,所述uint64_t用于表示所述接收到所述弹幕信息的时刻的类型。
在一种可能的实施例中,所述判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值包括:当通过所述查询接口Check接收到所述弹幕信息时,调用函数nowtime获取当前时刻并存储到now变量中;通过if函数if(m_item_times.size()<m_nLimit)判断所述第一时刻队列中存储的时刻数量是否超过所述弹幕阈值;若不超过,则调用push_back函数m_item_times.push_back(now)以存储所述当前时刻。
在一种可能的实施例中,通过删除接口DeleteOlderTime删除所述目标弹幕包括:通过删除接口DeleteOlderTime中的void函数void DeleteOlderTime(uint64_t_time)删除所述目标弹幕,所述uint64_t_time用于表示接收所述目标弹幕的时刻。
在一种可能的实施例中,所述方法还包括:若判断当前弹幕消息的数量未达到所述弹幕阈值,则显示所述接收到的弹幕信息。
本发明实施例的第二方面提供了一种降级装置,包括:收发单元,用于通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_t m_nLimit中;判断单元,用于当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;存储单元,用于若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;确定单元,用于在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;删除单元,用于通过删除接口DeleteOlderTime删除所述目标弹幕消息;转移单元,用于当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。
本发明第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述任意一项所述的获取数据的方法的步骤。
本发明第四方面提供了一种计算机可读存储介质,其上存储有计算机管理类程序,其特征在于:所述计算机管理类程序被处理器执行时实现如上述任意一项所述的获取数据的方法的步骤。
从以上技术方案可以看出,本发明实施例具有以下优点:通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_t m_nLimit中;当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息;当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。本发明实施例中,对收到的所有弹幕都放入到时刻队列中,而推送给应用层的展示则控制推送数量,即弹幕多时也推送一定数量,从而剩余的弹幕则会在后续弹幕量少的是进行展示,使得弹幕量在变化时能够平滑过渡以显示好的表现效果。
附图说明
图1为本发明实施例提供的一种可能的消息的降级方法的流程图;
图2为本发明实施例提供的一种可能的降级装置的结构示意图;
图3为本发明实施例提供的一种可能的电子设备的硬件结构示意图;
图4为本发明实施例提供的一种可能的计算机可读存储介质的硬件结构示意图。
具体实施方式
本发明实施例提供了一种消息的降级方法及相关装置,用于使得弹幕量在变化时能够平滑过渡以显示好的表现效果。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,为本发明实施例提供的一种消息的降级方法的流程图,具体包括:
101、通过调用http的get函数向服务器发送直播间请求消息;
客户端在进直播间观看时,会从服务器请求直播间的相关信息,包括直播间的视频流地址,房间内的贵族信息等和该直播间主播相关的一些信息等。即客户端通过调用http的get函数向服务器发送直播间请求消息,其中,该直播间请求消息用于请求直播间信息,直播间请求消息包括直播间的域名信息和所述直播间的房间号信息。具体地,首先定义一个http对象:http objhttp;然后填入直播间请求消息的域名url信息和参数信息,例如直播间请求消息的域名url信息可以如下:
objhttp.url=https://douyu.dz11.com/info?roomid=342;
其中url中包含了直播平台的域名信息,以及该直播间的房间号roomid=342。
在得到该http对象后,通过调用http的get函数,例如调用函数objhttp.get()来将请求发送给直播平台服务器。
102、接收服务器返回的直播间信息;
本申请实施例中,为了更好的考虑动态变化性,同时也可以应对实时调整策略,例如在直播平台观看直播间时的弹幕降级,服务器返回该直播间信息时还加入一个弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值。为便于理解,本申请实施例中,该弹幕阈值为整数数值DanmuLimit,此值用于给到客户端每秒钟接收弹幕的数量。客户端编写的每秒中的弹幕数量这个阈值是从服务器下发过来的,从而可以实现服务器随时依据当前情况进行调整,而客户端并不需要发布新的版本。同时还可以支持对于不同的直播间采取不同的阈值,更加灵活高效。
具体的,对应与步骤101中客户端通过调用http的get方法来将直播间请求消息发送给直播平台服务器,则客户端通过http返回的数据得到服务器发送的直播间信息,该直播间信息包括弹幕阈值,例如弹幕阈值等于100,即表示每秒钟最多收到100条弹幕消息,因此将其赋值给DanmuLimit=100。
103、定义弹幕消息降级类;
为了更好的设计和编码,本实施例中,采用C++编程语言,来将整个消息降级的功能封装到一个C++的类中,从而可以提供成一个通用的功能。实现更好的代码复用和逻辑的封装。具体实现如下:
定义一个类名为MessageQueue类:Class MessageQueue{
本实施例中会设计一个队列来存储收到弹幕消息。为了高效的存入和删除,则选取STL容器的list容器做为队列的数据结构,例如std::list<string>m_item_times;另外,由于存储的弹幕消息是一条字符串,所以其存储的是一个string对象,因此类型是string。
接着对于弹幕消息队列为了防止多线程操作,造成队列数据污染,所以需要加入锁来进行多线程的同步互斥。那么定义一个Mutex write_mutex;互斥变量,同时后续需要编写网队列中存储弹幕消息的接口和从队列中取出弹幕消息的接口。
在编写了一个弹幕消息队列后,消息队列需要编写存入弹幕消息的接口。并且对于消息队列可能存在多个线程对其进行操作,因此也需要编写线程安全的接口函数,具体如下:
Void WriteDanmuMessage(string strDanmu){
首先则定义一个自动锁对象ScopedLock lock,然后其传入本实施例定义的互斥变量write_mutex,并且该锁在函数执行完成时则会自动进行释放:ScopedLock lock(write_mutex);
然后调用list的接口push_back来将任务存入到队列的尾端:lst_buffer.push_back(strDanmu);}。
另外,本申请实施例中,客户端还会设计一个第一时刻队列来存储收到弹幕消息的时刻,实际应用中可以选取STL容器的list容器作为该第一时刻队列的数据结构,以实现高效的存入和删除,具体函数实现如下:
std::list<uint64_t>m_item_times;
需要说明的是,本申请实施例中,第一时刻队列存储的是收到弹幕消息的时刻,所以其存储的是一个时间的整数值,该时刻的类型是uint64_t。另外,为存储服务器下发的DanmuLimit阈值,客户端还需要定义一个存储阈值的成员变量size_t m_nLimit,即m_nLimit=DanmuLimit。
104、确定第一时刻队列中存储的时刻数量是否达到弹幕阈值;
需要说明的是,客户端还需设计弹幕消息降级类的接口信息,函数表现为boolCheck();此接口Check用于收到弹幕消息后,确定当前是否弹幕消息达到了阈值,如果没有则返回值为true,说明可以进行展示弹幕;如果达到了阈值,则返回值是false,说明不能存储弹幕消息了。
首先我们调用系统函数nowtime获取当前时刻并存储到now变量中,具体函数表示可以如下:
bool Check(){
uint64_t now=(uint64_t)nowtime();
通过调用if函数,如果小于m_nLimit则说明没有达到最大阈值,还可以存储当前时刻,那再调用list的push_back来存储当前时刻now到队列中。并且返回true;说明当前可以展示该条弹幕内容,具体函数表示可以如下:
if(m_item_times.size()<m_nLimit){
m_item_times.push_back(now);};
需要说明的是,客户端还需要判断当前时刻和队列最开头的时刻是否小于1的阈值,如果超过则返回false,即if((now-m_item_times.front())<=1000)urn false;},则返回false,其中1000表示1000毫秒也即是1秒。
105、将接收弹幕消息的时刻存入第二时刻队列;
当客户端接收到弹幕消息后,若客户端确定第一时刻队列中存储的时刻数量超过弹幕阈值,客户端将接收弹幕消息的时刻存入第二时刻队列,其中,第二时刻队列用于存储从第一时刻队列中溢出的时刻,即当第一时刻队列存储的时刻大于弹幕阈值时,则将当前接收弹幕消息的时刻,可以理解为第一时刻队列中溢出的时刻,存入到第二时刻队列中,则实现了将收到的所有弹幕存储到弹幕消息队列中。若当前弹幕量比较大时,则只显示部分弹幕,超过数量的弹幕对应的时刻存储于第二时刻队列中,即超出数量的弹幕在后面进行显示。
106、在第一时刻队列中确定目标弹幕消息;
当客户端接收到弹幕消息后,若客户端确定第一时刻队列中存储的时刻数量超过弹幕阈值,则去检查时刻队列中是否存在接收时刻与当前时刻的时间差大于预定时长如1秒钟的弹幕消息,若存在,则该接收时刻对应的弹幕消息为目标弹幕消息。
107、删除目标弹幕消息;
本申请实施例中,在编写了一个弹幕消息队列后,则弹幕消息队列需要编写取出弹幕消息的接口,并且对于消息队列可能存在多个线程对其进行操作,所以也需要编写线程安全的接口函数,具体函数实现如下:
string ReadDanmuMessage(){
首先则定义一个自动锁对象ScopedLock lock,然后其传入本文定义的互斥变量write_mutex。并且其锁在函数执行完成时则会自动进行释放:ScopedLock lock(write_mutex);
然后从队列中取出队列头部的一个弹幕消息strDanmu:string strDanmu=lst_buffer.front();接着则调用接口pop_front将队列头部的弹幕消息删除掉:lst_buffer.pop_front();然后返回取出的弹幕消息:Return strDanmu;}。
基于上述的删除接口,客户端在第一时刻队列中确定目标弹幕消息后,接下来设计从第一时刻队列中删除掉所有的超过预定时长如1秒钟阈值的时刻。本申请实施例中,通过删除接口删除该目标弹幕消息,此删除接口则会从时刻队列开头获取每一个时刻值与参数time即当前时刻来进行比较,看看其是否大于1秒钟,如果大于则删除掉该时刻值,否则不做任何操作。具体函数表现为:void DeleteOlderTime(uint64_t_time)。
需要说明的是,通过删除接口删除目标弹幕消息,接下来则需要去实现此删除接口,以将时刻队列中所有时刻超过了1秒钟的时刻值删除掉。具体的,通过编写循环来遍历时刻队列。首先定义一个迭代器std::list<uint64_t>::iterator iter;然后对迭代器进行赋值为队列的起始iter=m_item_times.begin();接下来编写for循环来遍历,通过if函数判断时刻队列中的时刻与当前时刻的差值是否大于阈值1000毫秒,如果是则将其从时刻队列中删除掉,否则队列开头的时刻小于阈值则中断循环,直接返回。具体函数实现如下:
for(iter!=m_item_times.end();){
if((time-(*iter))>1000)
iter=m_item_times.erase(iter);
},其中,iter!=m_item_times.end()表示遍历的时刻是否是队列结尾。
108、当第一时刻队列中存储的时刻数量小于弹幕阈值时,将第二时刻队列中存储的时刻转移到第一时刻队列中以进行显示。
当删除完成后,若第一时刻队列中存储的时刻数量小于弹幕阈值时,则从第二时刻队列中补充弹幕到第一时刻队列中,从而保障多余的弹幕可以进行显示不会丢弃掉。
本申请实施例中,对于控制类返回结果是可以显示弹幕时,则会讲弹幕消息队列中的弹幕推送到应用层进行展示,同时对于推送过的弹幕将其从弹幕消息队列中删除掉。
需要说明的是,本申请实施例中,还提供了多种降级方式以应用于各不同的应用场景,包括以下:
一、对弹幕消息进行降级。
可以理解的是,直播间中不仅有礼物消息还有弹幕消息,实际应用中,存在对弹幕消息的降级。本实施例中,具体对弹幕消息的降级处理还可以包括如下步骤:
1、从服务器获取客户端每秒钟显示弹幕的弹幕阈值。
该步骤与图1所示的实施例中的步骤102中描述的获取弹幕阈值的方式类似,此处不再赘述。
2、定义弹幕消息降级类;
为了更好的设计和编码,本申请实施例中,采用C++编程语言,来将整个消息降级的功能封装到一个C++的类中,从而可以提供成一个通用的功能,实现更好的代码复用和逻辑的封装。具体地,客户端定义一个弹幕消息降级类,该弹幕消息降级类用于对接收到的弹幕消息进行降级处理,本申请实施例中该弹幕消息降级类的类名为MessageLimit类,实现函数如Class MessageLimit{。
另外,本申请实施例中,客户端还会设计一个时刻队列来存储收到弹幕消息的时刻,实际应用中可以选取STL容器的list容器作为该时刻队列的数据结构,以实现高效的存入和删除,具体函数实现如下:
std::list<uint64_t>m_item_times;
需要说明的是,本申请实施例中,时刻队列存储的是收到弹幕消息的时刻,所以其存储的是一个时间的整数值,该时刻的类型是uint64_t。另外,为存储服务器下发的DanmuLimit阈值,客户端还需要定义一个存储阈值的成员变量size_t m_nLimit,即m_nLimit=DanmuLimit。
3、确定时刻队列中存储的时刻数量是否超过弹幕阈值;
需要说明的是,客户端还需设计弹幕消息降级类的接口信息,函数表现为boolCheck();此接口Check用于收到弹幕消息后,确定当前是否弹幕消息达到了阈值,如果没有则返回值为true,说明可以进行展示弹幕;如果达到了阈值,则返回值是false,说明不能存储弹幕消息了。
首先我们调用系统函数nowtime获取当前时刻并存储到now变量中,具体函数表示可以如下:
bool Check(){
uint64_t now=(uint64_t)nowtime();
通过调用if函数,如果小于m_nLimit则说明没有达到最大阈值,还可以存储当前时刻,那再调用list的push_back来存储当前时刻now到队列中。并且返回true;说明当前可以展示该条弹幕内容,具体函数表示可以如下:
if(m_item_times.size()<m_nLimit){
m_item_times.push_back(now);};
需要说明的是,客户端还需要判断当前时刻和队列最开头的时刻是否小于1的阈值,如果超过则返回false,即if((now-m_item_times.front())<=1000)urn false;},则返回false,其中1000表示1000毫秒也即是1秒。
4、在时刻队列中确定目标弹幕消息;
当客户端接收到弹幕消息后,若客户端确定时刻队列中存储的时刻数量超过弹幕阈值,则去检查时刻队列中是否存在接收时刻与当前时刻的时间差大于预定时长如1秒钟的弹幕消息,若存在,则该接收时刻对应的弹幕消息为目标弹幕消息。
5、删除目标弹幕消息。
客户端在时刻队列中确定目标弹幕消息后,接下来设计从时刻队列中删除掉所有的超过预定时长如1秒钟阈值的时刻。本申请实施例中,通过删除接口DeleteOlderTime删除该目标弹幕消息,此删除接口则会从时刻队列开头获取每一个时刻值与参数time即当前时刻来进行比较,看看其是否大于1秒钟,如果大于则删除掉该时刻值,否则不做任何操作。具体函数表现为:void DeleteOlderTime(uint64_t_time)。
需要说明的是,通过删除接口DeleteOlderTime删除目标弹幕消息,接下来则需要去实现此删除接口,以将时刻队列中所有时刻超过了1秒钟的时刻值删除掉。具体的,通过编写循环来遍历时刻队列。首先定义一个迭代器std::list<uint64_t>::iterator iter;然后对迭代器进行赋值为队列的起始iter=m_item_times.begin();接下来编写for循环来遍历,通过if函数判断时刻队列中的时刻与当前时刻的差值是否大于阈值1000毫秒,如果是则将其从时刻队列中删除掉,否则队列开头的时刻小于阈值则中断循环,直接返回。具体函数实现如下:
for(iter!=m_item_times.end();){
if((time-(*iter))>1000)
iter=m_item_times.erase(iter);
},其中,iter!=m_item_times.end()表示遍历的时刻是否是队列结尾。
二、对礼物消息进行降级。
可以理解的是,直播间中不仅有弹幕消息还有礼物消息,实际应用中,还存在对礼物消息的降级。而对于礼物消息的降级,由于礼物的特殊性,所以其处理方式和弹幕是有区别的,本申请实施例中,可通过图1所示的流程对弹幕消息进行降级处理,而对于礼物消息则需要区分其礼物的等级。可以理解的是,对于高等级的礼物需要优先进行展示,而不是直接丢弃掉,即需要优先丢弃低等级的礼物消息。同时对于低等级的礼物消息,由于其存在一个礼物的连击数目,如果直接丢弃会导致连击数目丢弃掉,因此在礼物消息降级时,既需要丢弃礼物消息不展示,同时又需要保留其连击数目。具体的实现方法如下所示:
1、编写礼物消息的解析获取礼物等级信息。
在礼物消息中有字段表明礼物消息的类型和礼物消息的等级。那么客户端在进行降级时,则需要考虑降级低等级的礼物,而对于高等级的礼物则尽量的都展示,从而不会影响用户观看。同时本身低等级的礼物数量也会偏多,而高等级的礼物数目则会偏少。为便于理解,设现有礼物消息如下:
type@=dgb/rid@=229346/giftype@=824/uid@=34135589/nn@=布拉克斯/ic@=avatar@S034@S13@S55@S89_avatar/eid@=0/level@=16/dw@=0/gfcnt@=1/hits@=6/bcnt@=6/bst@=2/ct@=0/el@=/bl@=5/brid@=78561/fc@=0/
其中type@=dgb表示是一条礼物消息,rid@=229346则表示直播间的房间号,giftype@=824则表示礼物的类型,nn@=布拉克斯则表示送礼物的用户的昵称,level@=16则表示礼物的等级等其他的字段信息,具体此处不再一一赘述。
那么则需要对此条礼物消息进行解析,从而获取其中需要的各个字段信息。
首先创建一个消息解析类SttDecoder的实例对象:SttDecoder*pDecoder=newSttDecoder();然后对收到的消息进行解析,pDecoder->Parse(NetMessage);其中NetMessage则表示收到的一条网络消息;解析后获取该条消息的消息类型,std::stringcmdtype=std::string(pDecoder->GetItem("type")),其中获取消息字段的type值表示其消息的类型。
通过if函数判断是否是礼物消息,若是礼物消息,则解析其他字段,如通过get函数获取礼物等级level和礼物类型giftype;若不是礼物消息,则直接返回。具体函数实现如下:
If(cmdtype==“dgb”){
Level=pDecoder->GetItemAsInt(“level”)
giftype=pDecoder->GetItemAsInt(“giftype”)
}
Else{
};
其中,dgb用于表示是一条礼物消息。
2、在消息降级类中增加礼物消息类型的映射表来存储消息的个数。
对于低等级的礼物消息,还需要对其进行展示连击的数目,所以并不能直接丢弃掉,还需要记录连击的数目,而由于消息类型不同,连击数目也是不同的,所以可采取使用stl容器的map容器来对每一种消息关联其连击次数;其中map的键存储礼物消息的type,而map的value存储该消息的连击次数。具体实现函数如下:
Class MessageLimit{
stl::map<int,int>gifTypeTimes;
}
3、修改存储消息的接口。
对于类MessageLimit中的接口Check,需要依据礼物消息重新进行定义,即boolCheck(int level,int giftype){
首先需要对礼物消息的等级进行判断,如果礼物消息的等级大于预设级别例如5级则说明是一个高等级的礼物消息,而对于高等级礼物消息不需要进行降级,则可以直接给应用层展示,如果低层级则需要进行降级,例如通过if函数If(level>5){returntrue;},如果level大于5,则返回true,反之,则返回false。
另外,还需要依据消息giftype类型来存储消息的连击数目。
首先定义一个迭代器stl::map<int,int>::iterator itr;然后对迭代器进行初始化,Itr=gifTypeTimes.find(giftype);其次调用查找方法来查找此消息类型,然后对此消息类型进行加1表示又收到了一条此消息,Itr.second++,从而实现了消息类型连击数目的增加。
4、将消息个数推送给应用层展示连击数目。
在底层收到礼物消息后,需要将当前连击数目推送给应用层。因此需要增加一个接口来获取对应消息的连击数目。在底层收到礼物消息后,需要将当前连击数目推送给应用层。因此需要增加一个GetGiftypeNum接口来获取所有消息的连击数目:
int GetGiftypeNum(int giftype){
首先定义一个迭代器itr:
stl::map<int,int>::iterator itr;
然后通过map容器的find方法来查找对应的消息类型。
itr=gifTypeTimes.find(giftype);
如果没有查找到则返回连击数目为0:
if(itr==gifTypeTimes.end()){
return 0;
}
如果查找到则返回连击数目:
Figure BDA0001819294390000141
三、基于客户端当前CPU和内存的使用率来设置滑动窗口的弹幕消息和礼物消息降级方法。
现有技术中,所有弹幕或者礼物降级的方法都是对所有设备所有时刻都是使用相同的阈值,并没有依据实际情况来对消息进行降级。例如对于iphoneX来说设置阈值为每秒100条弹幕消息,则阈值过于小了,因iphoneX性能完全可以胜任200条;而对于iphone4则可能只能承受50条弹幕。同样的,对于Android的设备也存在这样一种情况。因此,如果依据用户的设备来设置阈值,那么由于市面上设备种类非常之多,必须收集全所有的设备,而且对于iphone设备来说,即使是同一个设备,其所安装的系统版本,其性能也是不一样的。另外,对于同一个设备来说,即使系统相同,其当前接收弹幕的阈值也并不能设置的一样,因此对于用户使用设备来说,依据其当前的CPU使用率和内存使用率才是能够满足用户的实际情况。因此,本申请实施例中,可以依据用户当前实际的CPU使用情况和内存使用情况来动态的调整阈值,从而依据CPU和内存情况比较能真实的反映出用户的设备使用情况,同时也不需要去收集所有的设备类型。具体的实现方法如下所示:
1、编写功能获取当前的内存。
首先定义一个Android系统下的系统类Runtime对象Runtime runtime;然后调用系统函数来对对象进行赋值,具体函数实现如:runtime=Runtime.getRuntime();其中,对于Runtime类可以通过一些接口获取到当前内存的使用情况和总的内存。具体地,通过接口maxMemory来获取总的系统内存大小totalSize,long totalSize=runtime.maxMemory()>>10;然后获取系统当前没有被使用的内存大小long freesize=runtime.freeMemory()。获得了总的内存大小和空闲内存大小后,可以得到当前使用了多少内存以及内存使用率,具体地,Long usageSize=(runtime.totalMemory()-runtime.freeMemory())>>10;通过该函数得到了当前使用的内存,因此内存的使用率可以通过公式LongmemoryUsageRate=usageSize*100/totalSize获取,其中memoryUsageRate用于表示内存使用率。
2、编写功能获取当前的CPU使用情况。
对于系统CPU的使用情况,可以通过执行系统的命令来从命令返回的结果中获取到对应的数据。首先定义一个Android系统下的系统类Runtime对象Runtime runtime;然后调用系统函数来对对象进行赋值,具体函数实现如下:runtime=Runtime.getRuntime();然后调用其执行命令的接口来获取系统情况,Process p=runtime exec("top-n 1"),并将结果赋值给变量p。接下来再定义一个读取结果的对象,具体函数实现包括:BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())),则实现了从中得到CPU的其他数据。并根据string函数分别获取用户使用的CPU和系统使用的CPU,具体的,通过函数String[]CPUusage=CPUusr[0].split("User")得到用户使用的CPU,用CPUusage表示,通过函数String[]SYSusage=CPUusr[1].split("System")得到系统使用的CPU,用SYSusage表示。在得到系统使用的CPU和用户使用的CPU后,就可以得到总的CPU使用情况,即CPUusage+SYSusage。
3、设置定时器定期采用得到1分钟内的内存和CPU使用情况。
需要说明的是,每次获取的使用情况是当前时刻的,为了更为平稳和准确,则需要进行采用一段时间内的使用情况,从而比较准确的反映当前的真实情况。因此本申请实施例中,可以设置一个定时器来在一分钟内定期的进行采样,通过采样来得到最终的CPU使用情况和内存使用情况。其中则可以调用系统函数SetTimer,来设置定时器每隔5秒钟调用一次Check函数,例如SetTimer(Check(),5)。通过Check函数获取到内存使用情况和CPU使用情况,并将5次获取的结果进行平均得到最终的结果。
4、依据平均结果来设置弹幕的和礼物的阈值。
客户端获取到了客户端的CPU和内存的使用情况后,并将数据上报到服务器,服务器则可以依据上报的数据,来下发对应的每秒钟客户端展示的弹幕阈值和礼物阈值,并且服务器可以依据使用情况来动态调整阈值,从而可以最终得到一个比较合理的阈值。
5、客户端依据服务器下发的阈值来降级礼物消息和弹幕消息。
客户端获取到了服务器下发的阈值后,则依据阈值来对消息和礼物进行降级,从而是依据每个客户端当前的内存使用情况和CPU使用情况来进行的降级,而并不是所有客户端都使用同一套值,因此定制化的降级更能依据用户设备的实际情况来降级,效果更好。
上面从获取数据的方法的角度对本发明实施例进行了描述,下面从降级装置的角度对本发明实施例进行描述。
请参阅图2,图2为本发明实施例提供的一种可能的降级装置的实施例示意图,其中,该降级装置具体包括:
收发单元201,用于通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_t m_nLimit中;
判断单元202,用于当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;
存储单元203,用于若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;
确定单元204,用于在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;
删除单元205,用于通过删除接口DeleteOlderTime删除所述目标弹幕消息;
转移单元206,用于当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。
请参阅图3,图3为本发明实施例提供的电子设备的实施例示意图。
如图3所示,本发明实施例提供了一种电子设备,包括存储器310、处理器320及存储在存储器320上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_t m_nLimit中;当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息;当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。
可选的,在一种可能的实施例中,所述处理器320具体用于:定义http对象httpobjhttp;在所述http对象中填入所述直播间的域名信息和所述直播间的房间号信息;通过所述get函数objhttp.get()将所述直播间请求信息发送给所述服务器。
可选的,在一种可能的实施例中,所述处理器320具体用于:当通过所述查询接口Check接收到所述弹幕信息时,调用函数nowtime获取当前时刻并存储到now变量中;通过if函数if(m_item_times.size()<m_nLimit)判断所述第一时刻队列中存储的时刻数量是否超过所述弹幕阈值;若不超过,则调用push_back函数m_item_times.push_back(now)以存储所述当前时刻。
可选的,在一种可能的实施例中,所述处理器320具体用于:通过删除接口DeleteOlderTime中的void函数void DeleteOlderTime(uint64_t_time)删除所述目标弹幕,所述uint64_t_time用于表示接收所述目标弹幕的时刻。
可选的,在一种可能的实施例中,所述处理器320具体用于:若判断当前弹幕消息的数量未达到所述弹幕阈值,则显示所述接收到的弹幕信息。
由于本实施例所介绍的电子设备为实施本发明实施例中一种获取装置所采用的设备,故而基于本发明实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本发明实施例中的方法不再详细介绍,只要本领域所属技术人员实施本发明实施例中的方法所采用的设备,都属于本发明所欲保护的范围。
请参阅图4,图4为本发明实施例提供的一种计算机可读存储介质的实施例示意图。
如图4所示,本实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,该计算机程序411被处理器执行时实现如下步骤:通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_t m_nLimit中;当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;通过删除接口DeleteOlderTime删除所述目标弹幕消息;当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:定义http对象http objhttp;在所述http对象中填入所述直播间的域名信息和所述直播间的房间号信息;通过所述get函数objhttp.get()将所述直播间请求信息发送给所述服务器。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:当通过所述查询接口Check接收到所述弹幕信息时,调用函数nowtime获取当前时刻并存储到now变量中;通过if函数if(m_item_times.size()<m_nLimit)判断所述第一时刻队列中存储的时刻数量是否超过所述弹幕阈值;若不超过,则调用push_back函数m_item_times.push_back(now)以存储所述当前时刻。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:通过删除接口DeleteOlderTime中的void函数void DeleteOlderTime(uint64_t_time)删除所述目标弹幕,所述uint64_t_time用于表示接收所述目标弹幕的时刻。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:若判断当前弹幕消息的数量未达到所述弹幕阈值,则显示所述接收到的弹幕信息。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。

Claims (10)

1.一种消息的降级方法,其特征在于,包括:
通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;
接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_tm_nLimit中;
当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;
若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;
在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;
通过删除接口DeleteOlderTime删除所述目标弹幕消息;
当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。
2.根据权利要求1所述的方法,其特征在于,所述通过调用http的get函数向服务器发送直播间请求信息包括:
定义http对象http objhttp;
在所述http对象中填入所述直播间的域名信息和所述直播间的房间号信息;
通过所述get函数objhttp.get()将所述直播间请求信息发送给所述服务器。
3.根据权利要求1所述的方法,其特征在于,所述判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值之前,所述方法还包括:
定义弹幕消息降级类MessageLimit,所述弹幕消息降级类用于对接收到的弹幕消息进行降级处理;
定义STL容器的list容器作为所述第一时刻队列的数据结构,并定义用于存储所述弹幕阈值的所述变量size_t m_nLimit;
定义所述弹幕消息降级类的查询接口Check,所述查询接口Check用于接收到所述弹幕信息后,判断所述当前弹幕消息的数量是否超过所述弹幕阈值;
定义所述弹幕消息降级类的所述删除接口DeleteOlderTime。
4.根据权利要求3所述的方法,其特征在于,所述将接收所述弹幕消息的时刻存入第二时刻队列包括:
通过函数m_nLimit=DanmuLimit将所述弹幕阈值存储到所述变量size_tm_nLimit中,所述DanmuLimit用于表示所述弹幕阈值;
通过函数std::list<uint64_t>m_item_times在所述第二时刻队列中存储所述接收到所述弹幕信息的时刻,所述uint64_t用于表示所述接收到所述弹幕信息的时刻的类型。
5.根据权利要求3所述的方法,其特征在于,所述判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值包括:
当通过所述查询接口Check接收到所述弹幕信息时,调用函数nowtime获取当前时刻并存储到now变量中;
通过if函数if(m_item_times.size()<m_nLimit)判断所述第一时刻队列中存储的时刻数量是否超过所述弹幕阈值;
若不超过,则调用push_back函数m_item_times.push_back(now)以存储所述当前时刻。
6.根据权利要求3所述的方法,其特征在于,通过删除接口DeleteOlderTime删除所述目标弹幕包括:
通过删除接口DeleteOlderTime中的void函数void DeleteOlderTime(uint64_t_time)删除所述目标弹幕,所述uint64_t_time用于表示接收所述目标弹幕的时刻。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若判断当前弹幕消息的数量未达到所述弹幕阈值,则显示所述接收到的弹幕信息。
8.一种降级装置,其特征在于,包括:
收发单元,用于通过调用http的get函数向服务器发送直播间请求信息,所述直播间请求信息用于请求直播间信息,所述直播间请求信息包括所述直播间的域名信息和所述直播间的房间号信息;接收所述服务器返回的所述直播间信息,所述直播间信息包括弹幕阈值,所述弹幕阈值用于指示预定时长内接收弹幕消息的最大数值,所述弹幕阈值存储于定义的变量size_t m_nLimit中;
判断单元,用于当接收到弹幕消息时,判断第一时刻队列中存储的时刻数量是否达到所述弹幕阈值,所述第一时刻队列用于存储接收到消息的时刻;
存储单元,用于若达到,则将接收所述弹幕消息的时刻存入第二时刻队列,所述第二时刻队列用于存储从所述第一时刻队列中溢出的时刻;
确定单元,用于在所述第一时刻队列中确定目标弹幕消息,其中,接收到所述目标弹幕消息的时刻与当前时刻的时间差大于所述预定时长;
删除单元,用于通过删除接口DeleteOlderTime删除所述目标弹幕消息;
转移单元,用于当所述第一时刻队列中存储的时刻数量小于所述弹幕阈值时,将所述第二时刻队列中存储的时刻转移到所述第一时刻队列中以进行显示。
9.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-7任意一项所述的方法。
10.一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如权利要求1-7任意一项所述的方法。
CN201811157668.1A 2018-09-30 2018-09-30 一种消息的降级方法及相关装置 Active CN110968279B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811157668.1A CN110968279B (zh) 2018-09-30 2018-09-30 一种消息的降级方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811157668.1A CN110968279B (zh) 2018-09-30 2018-09-30 一种消息的降级方法及相关装置

Publications (2)

Publication Number Publication Date
CN110968279A true CN110968279A (zh) 2020-04-07
CN110968279B CN110968279B (zh) 2022-05-13

Family

ID=70028971

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811157668.1A Active CN110968279B (zh) 2018-09-30 2018-09-30 一种消息的降级方法及相关装置

Country Status (1)

Country Link
CN (1) CN110968279B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111586437A (zh) * 2020-04-08 2020-08-25 天津车之家数据信息技术有限公司 一种弹幕消息处理方法、系统、计算设备及存储介质
CN111782323A (zh) * 2020-06-29 2020-10-16 掌阅科技股份有限公司 弹幕获取方法、计算设备及计算机存储介质
CN113098781A (zh) * 2021-03-19 2021-07-09 北京达佳互联信息技术有限公司 会话列表处理方法、装置、服务器及存储介质
CN114520923A (zh) * 2020-11-20 2022-05-20 武汉斗鱼网络科技有限公司 弹幕信息的展示方法、第一终端、第二终端、介质及设备
CN115442635A (zh) * 2021-06-04 2022-12-06 武汉斗鱼鱼乐网络科技有限公司 一种跨平台安全过滤弹幕的方法、装置、设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105072504A (zh) * 2015-08-21 2015-11-18 广州弹幕网络科技有限公司 一种影院的弹幕播放方法、装置及系统
CN106162305A (zh) * 2016-06-28 2016-11-23 武汉斗鱼网络科技有限公司 一种网页弹幕默认加载控制方法及装置
CN106993234A (zh) * 2017-03-22 2017-07-28 北京潘达互娱科技有限公司 弹幕显示方法和装置
US20170251240A1 (en) * 2015-01-20 2017-08-31 Tencent Technology (Shenzhen) Company Limited Bullet screen information processing method, client, service platform and storage medium
CN108243346A (zh) * 2018-01-09 2018-07-03 武汉斗鱼网络科技有限公司 一种过滤弹幕信息的方法、服务器及计算机设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170251240A1 (en) * 2015-01-20 2017-08-31 Tencent Technology (Shenzhen) Company Limited Bullet screen information processing method, client, service platform and storage medium
CN105072504A (zh) * 2015-08-21 2015-11-18 广州弹幕网络科技有限公司 一种影院的弹幕播放方法、装置及系统
CN106162305A (zh) * 2016-06-28 2016-11-23 武汉斗鱼网络科技有限公司 一种网页弹幕默认加载控制方法及装置
CN106993234A (zh) * 2017-03-22 2017-07-28 北京潘达互娱科技有限公司 弹幕显示方法和装置
CN108243346A (zh) * 2018-01-09 2018-07-03 武汉斗鱼网络科技有限公司 一种过滤弹幕信息的方法、服务器及计算机设备

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111586437A (zh) * 2020-04-08 2020-08-25 天津车之家数据信息技术有限公司 一种弹幕消息处理方法、系统、计算设备及存储介质
CN111782323A (zh) * 2020-06-29 2020-10-16 掌阅科技股份有限公司 弹幕获取方法、计算设备及计算机存储介质
CN111782323B (zh) * 2020-06-29 2021-06-29 掌阅科技股份有限公司 弹幕获取方法、计算设备及计算机存储介质
CN114520923A (zh) * 2020-11-20 2022-05-20 武汉斗鱼网络科技有限公司 弹幕信息的展示方法、第一终端、第二终端、介质及设备
CN114520923B (zh) * 2020-11-20 2023-09-01 武汉斗鱼网络科技有限公司 弹幕信息的展示方法、第一终端、第二终端、介质及设备
CN113098781A (zh) * 2021-03-19 2021-07-09 北京达佳互联信息技术有限公司 会话列表处理方法、装置、服务器及存储介质
CN113098781B (zh) * 2021-03-19 2023-01-20 北京达佳互联信息技术有限公司 会话列表处理方法、装置、服务器及存储介质
CN115442635A (zh) * 2021-06-04 2022-12-06 武汉斗鱼鱼乐网络科技有限公司 一种跨平台安全过滤弹幕的方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN110968279B (zh) 2022-05-13

Similar Documents

Publication Publication Date Title
CN110968279B (zh) 一种消息的降级方法及相关装置
CN102932679B (zh) 一种网络视频预览系统和方法
CN111159436B (zh) 一种推荐多媒体内容的方法、装置及计算设备
CN108345524B (zh) 应用程序监控方法及应用程序监控装置
CN110971920B (zh) 一种消息的降级方法及相关装置
US20180027061A1 (en) Method and apparatus for elastically scaling virtual machine cluster
CN110018788A (zh) 分级存储方法、装置、电子设备及计算机可读存储介质
US20130162664A1 (en) Reconstructable digital image cache
CN104503887A (zh) 计算设备状态展示方法及装置
CN104850318B (zh) 瞬时消息显示控制的方法及设备
KR102061466B1 (ko) 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법
CN108021590A (zh) 一种目标对象属性确定方法、属性更新方法及装置
CN112799925A (zh) 数据采集方法、装置、电子设备和可读存储介质
CN106817388A (zh) 虚拟机、宿主机获取数据的方法、装置及访问数据的系统
EP2997715B1 (en) Transmitting information based on reading speed
CN110971919B (zh) 一种弹幕消息的降级方法及相关装置
CN103209212B (zh) 基于RIA的Web网管客户端中的数据缓存方法及系统
CN110971921B (zh) 一种礼物消息的降级方法及相关装置
CN109213534A (zh) 一种扩展直播软件功能的方法及装置
CN108121602B (zh) 一种确定垃圾收集触发点的方法、电子设备及存储介质
CN112698914B (zh) 一种工作流任务容器生成系统及方法
CN106998436B (zh) 录像备份方法及装置
CN115563423A (zh) 数据采集方法、装置、计算机设备及存储介质
CN112584237B (zh) 图像擦除方法、装置、电子设备及存储介质
CN111966557B (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