CN117014689A - 弹幕的显示方法、装置以及电子设备 - Google Patents

弹幕的显示方法、装置以及电子设备 Download PDF

Info

Publication number
CN117014689A
CN117014689A CN202211501740.4A CN202211501740A CN117014689A CN 117014689 A CN117014689 A CN 117014689A CN 202211501740 A CN202211501740 A CN 202211501740A CN 117014689 A CN117014689 A CN 117014689A
Authority
CN
China
Prior art keywords
barrage
image
window
application program
handle
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.)
Pending
Application number
CN202211501740.4A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211501740.4A priority Critical patent/CN117014689A/zh
Publication of CN117014689A publication Critical patent/CN117014689A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • G06F16/9566URL specific, e.g. using aliases, detecting broken or misspelled links
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/21Server components or server architectures
    • H04N21/218Source of audio or video content, e.g. local disk arrays
    • H04N21/2187Live feed
    • 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/431Generation of visual interfaces for content selection or interaction; Content or additional data rendering
    • H04N21/4312Generation of visual interfaces for content selection or interaction; Content or additional data rendering involving specific graphical features, e.g. screen layout, special fonts or colors, blinking icons, highlights or animations
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本申请实施例提供了一种弹幕的显示方法、装置以及电子设备,其涉及多媒体显示领域中的弹幕领域,该方法包括:获取直播应用程序的网页弹幕的弹幕地址;基于该弹幕地址,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄;获取该直播应用程序的弹幕窗口的子窗口句柄;基于该图像句柄和该子窗口句柄,将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像。本申请提供的弹幕的显示方法能够提供一种具备网页弹幕的多样化特性的桌面弹幕,提升了弹幕的显示效果以及用户体验。

Description

弹幕的显示方法、装置以及电子设备
技术领域
本申请实施例涉及多媒体显示领域中的弹幕领域,并且更具体地,涉及弹幕的显示方法、装置以及电子设备。
背景技术
对于游戏直播,直播弹幕为直播平台的基础且必不可少的功能,也是与主播与用户之间主流的互动方式。通过直播弹幕来制造主播和用户之间的互动氛围,其不仅能够促进主播和用户之间的交流沟通,也可以带动直播间中用户的活跃度;主播和用户之间的互动氛围越频繁,用户的礼物贡献度以及与平台的活跃粘性越强。
弹幕的显示方式主要有两种常见形式,一种是存在于桌面客户端的弹幕,其可以称之为桌面弹幕;另一种是网页上的弹幕,其可以称之为网页弹幕。但是,由于桌面弹幕通常是基于图形设备接口(Graphics Device Interface,GDI)方式绘制的弹幕,因此其开发效率低,且弹幕样式比较简单,但好处在于可以灵活设置弹幕窗口的属性;而对于网页弹幕,其可以通过嵌入一个浏览器嵌入框架(Chromium Embedded Framework,CEF)组件,进而通过CEF组件打开浏览器的一个网页地址的方式显示弹幕,网页弹幕的样式虽然丰富,但无法灵活设置弹幕窗口的属性。因此,为满足不同需求,直播平台通常需要开发两套弹幕系统,不仅需要付出多倍的工作量,还降低了弹幕的显示效果以及降低了用户体验。
发明内容
本申请实施例提供了一种弹幕的显示方法、装置以及电子设备,能够提供一种具备网页弹幕的多样化特性的桌面弹幕,提升了弹幕的显示效果以及用户体验。
第一方面,本申请提供了一种弹幕的显示方法,包括:
获取直播应用程序的网页弹幕的弹幕地址;
基于该弹幕地址,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄;该图像句柄用于唯一性标识该第一弹幕图像的存储地址;
获取该直播应用程序的弹幕窗口的子窗口句柄;该子窗口句柄用于唯一性标识该弹幕窗口中的第一子窗口的属性信息,该第一子窗口为该弹幕窗口中除标题栏之外的区域形成的窗口;
基于该图像句柄和该子窗口句柄,将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像;该离屏缓冲区和该屏幕缓冲区为相互独立的缓冲区。
第二方面,本申请提供了一种弹幕的显示装置,包括:
第一获取单元,用于获取直播应用程序的网页弹幕的弹幕地址;
第一渲染单元,用于基于该弹幕地址,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄;该图像句柄用于唯一性标识该第一弹幕图像的存储地址;
第二获取单元,用于获取该直播应用程序的弹幕窗口的子窗口句柄;该子窗口句柄用于唯一性标识该弹幕窗口中的第一子窗口的属性信息,该第一子窗口为该弹幕窗口中除标题栏之外的区域形成的窗口;
第二渲染单元,用于基于该图像句柄和该子窗口句柄,将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像;该离屏缓冲区和该屏幕缓冲区为相互独立的缓冲区。
第三方面,本申请实施例提供了一种电子设备,包括:
处理器,适于实现计算机指令;以及,
计算机可读存储介质,计算机可读存储介质存储有计算机指令,计算机指令适于由处理器加载并执行上文涉及的第一方面的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机指令,该计算机指令被计算机设备的处理器读取并执行时,使得计算机设备执行上文涉及的第一方面的方法。
第五方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上文涉及的第一方面的方法。
本申请实施例中,一方面,获取直播应用程序的网页弹幕的弹幕地址;基于该弹幕地址,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄,相当于,通过图像句柄能够获取在浏览器控件的离屏缓冲区中离屏渲染的第一弹幕图像,进而能够使得第一弹幕图像保留有网页弹幕的多样性特征;另一方面,获取该直播应用程序的弹幕窗口的子窗口句柄;基于该图像句柄和该子窗口句柄,将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像;相当于,直播应用程序可以利用图像句柄获取第一弹幕图像并利用子窗口句柄获取第一子窗口的属性信息,然后将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像,即将该第二弹幕图像实现为具备网页弹幕的多样化特性的桌面弹幕,提升了弹幕的显示效果以及用户体验。
附图说明
图1是本申请实施例提供的系统框架的示例。
图2是本申请实施例提供的桌面弹幕的示意图。
图3是本申请实施例提供的网页弹幕的示意图。
图4是本申请实施例提供的网页弹幕的弹幕窗口和直播间窗口之间的位置关系的示例图。
图5是本申请实施例提供的直播应用程序的直播窗口的示例。
图6是本申请实施例提供的弹幕的显示方法的示意性流程图。
图7是本申请实施例提供的弹幕窗口的示意图。
图8是本申请实施例提供的用于弹幕的显示的组件框架的示例。
图9是本申请实施例提供的离屏渲染框架的示例。
图10是本申请实施例提供的渲染系统的示例。
图11是本申请实施例提供的弹幕窗口的另一示例。
图12是本申请实施例提供的透明度控件控制的对话框的示例。
图13是本申请实施例提供的直播窗口包括弹幕窗口的示例。
图14是本申请实施例提供的直播窗口包括弹幕窗口的另一示例。
图15是本申请实施例提供的直播窗口包括第一子窗口的示例。
图16是本申请实施例提供的直播窗口包括第一子窗口的另一示例。
图17是本申请实施例提供的游戏直播窗口包括弹幕窗口的示例。
图18是本申请实施例提供的直播应用程序和第一应用程序之间的关系的示意图。
图19是本申请实施例提供的弹幕的显示装置的示意性框图。
图20是本申请实施例提供的电子设备的示意性框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排除其他元素的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
本申请实施例涉及多媒体显示领域中的弹幕领域。
其中,多媒体显示可是在显示界面同时显示多个媒体文件的显示技术,例如该多个媒体文件包括但不限于视频、图像或文本,甚至该多个媒体文件还可以是不同来源或不同内容的媒体文件。例如,在弹幕的显示领域,该多个媒体文件可以是直播画面和弹幕,以实现同时在显示界面上显示直播画面和弹幕。
本申请实施例涉及自然语言处理(Nature Language processing,NLP)技术领域。
其中,NLP是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系。自然语言处理技术通常包括文本处理、语义理解、机器翻译、机器人问答、知识图谱等技术。例如,可以利用自然语言处理技术得到用户输入的弹幕数据。
图1是本申请实施例提供的系统框架100的示例。
如图1所示,该系统框架100可以包括:第一终端110、服务器120和第二终端130。
第一终端110、第二终端130以及其它终端通过无线网络或有线网络与直播服务器120相连。
其中,第一终端110安装和运行有直播应用程序,且第一终端110为直播观看客户端,即第一终端110的用户作为观众观看直播;安装和运行有直播应用程序,且第二终端130为主播客户端,即第二终端130的用户作为主播发起直播。第一终端110和第二终端120均为具有图像显示功能的电子设备,例如,该电子设备包括但不限于:智能手机、笔记本电脑、平板电脑、游戏设备等便携式或移动计算设备等。当然,该电子设备还可以是增强现实(Augmented Reality,AR)或虚拟现实(Virtual Reality,VR)等虚拟现实设备。
当然,图1中仅示出了两个终端,但在不同实施例中存在多个其它终端可以接入服务器120。可选地,第一终端110和第二终端130的设备类型相同或不同,该设备类型包括:智能手机、平板电脑、电子书阅读器、MP3播放器、MP4播放器、膝上型便携计算机和台式计算机中的至少一种,本申请对此不作具体限定。
服务器120包括一台服务器、多台服务器组成的服务器集群、“云”计算平台和虚拟化中心中的至少一种。服务器120用于为直播观看客户端111和主播客户端131提供后台服务。
服务器120包括存储器、处理器、用户信息数据库、直播互动模块以及面向用户的输入/输出接口(Input/Output Interface,I/O接口)。其中,处理器用于加载直播服务器中存储的指令,处理用户信息数据库和直播互动模块中的数据;用户信息数据库用于存储第一终端110、第二终端130以及其它终端所使用的用户数据,比如用户的头像、用户的昵称、用户对应的直播弹幕等,直播互动模块用于接收直播观看客户端和主播客户端所发送的互动数据,根据互动数据生成直播互动消息,并将各个直播互动消息发送至对应的安装有直播应用程序的各个终端;面向用户的I/O接口用于通过无线网络或有线网络和第一终端110和/或第二终端130建立通信交换数据。
示例性地,在游戏场景下,第二终端130还安装和运行有游戏应用程序,第二终端130需要使用直播应用程序进行游戏直播时,可以开启直播应用程序,通过直播应用程序启动游戏应用程序,即游戏应用程序在直播应用程序中启动,启动之后,游戏应用程序与所述直播应用程序之间建立专用通信通道,直播应用程序通过建立的专用通信通道获取游戏应用程序的游戏画面,例如,游戏应用程序可以先从游戏应用程序的后台服务器获取该游戏画面,然后转发给直播应用程序。此外,直播应用程序还可以从服务器120取得弹幕数据,服务器120可以是弹幕服务器或游戏应用程序的后台服务器。其中,弹幕数据:是各终端的用户(即观众)对正在直播的游戏画面发表的评论数据。由此,第二终端130基于获取的游戏画面和弹幕数据,将渲染后的弹幕数据,叠加在当前的游戏画面中显示,最终主播端将呈现出具有弹幕的游戏画面,主播可以基于该弹幕与观众进行互动。
具体地,弹幕的显示方式主要有两种常见形式,一种是存在于桌面客户端的弹幕,其可以称之为桌面弹幕;另一种是网页上的弹幕,其可以称之为网页弹幕。
图2是本申请实施例提供的桌面弹幕的示意图。
如图2所示,桌面弹幕的弹幕窗口中除了基本控件之外,仅仅将剩余的区域划分为显示各类消息的区域,例如显示普通消息的区域、显示贵宾消息的区域以及显示粉丝礼物的区域。其中,该基本控件通常包括置顶(或置底)控件、设置控件、锁屏控件以及关闭控件,置顶(或置底)控件用于置顶(或置底)弹幕窗口,设置控件用于设置弹幕窗口的属性信息,锁屏控件用于锁定弹幕窗口,关闭控件用于关闭弹幕窗口。
图3是本申请实施例提供的网页弹幕的示意图。
如图3所示,网页弹幕的弹幕窗口并不会显示基本控件之外,但其能够显示多样化的内容,例如,网页弹幕的弹幕窗口可划分为显示用户列表的区域、显示弹幕的区域以及显示各个快捷功能的区域。其中快捷功能可以实现为功能控件,例如可以用于在消息栏中插入表情图的表情插图控件,甚至于,网页弹幕的弹幕窗口还可以在亲密、超粉、贵宾等不同的用户分类下显示弹幕。
图4是本申请实施例提供的网页弹幕的弹幕窗口和直播间窗口之间的位置关系的示例图。
如图4所示,对于网页弹幕而言,由于其本质上是一个能够显示弹幕的网页,因此通常情况下,会在直播间窗口的一侧(如图所示右侧)显示网页弹幕。
图5是本申请实施例提供的直播应用程序的直播窗口的示例。
如图5所示,直播窗口可包括标题栏和直播画面的显示区域,该标题栏可显示有与直播相关的控件,例如包括但不限于摄像头控件、弹幕控件以及设置控件。其中,摄像头控件可用于开启或关闭摄像头,弹幕控件可用于开启或关闭弹幕,设置控件可用于用户设置与直播相关的参数,例如,直播提醒时间等参数。当然,直播窗口还可以设置有用于启动直播的开始直播控件,以便基于用户的点击操作开启直播。
但是,由于桌面弹幕通常是基于GDI方式绘制的弹幕,因此其开发效率低,且弹幕样式比较简单,但好处在于可以灵活设置弹幕窗口的属性;而对于网页弹幕,其可以通过嵌入一个CEF组件,进而通过CEF组件打开浏览器的一个网页地址的方式显示弹幕,网页弹幕的样式虽然丰富,但无法灵活设置弹幕窗口的属性。因此,为满足不同需求,直播平台通常需要开发两套弹幕系统,不仅需要付出多倍的工作量,还降低了弹幕的显示效果以及降低了用户体验。有鉴于此,本申请实施例提供了一种弹幕的显示方法、装置以及电子设备,能够提供一种具备网页弹幕的多样化特性的桌面弹幕,提升了弹幕的显示效果以及用户体验。
为便于理解本申请提供的方案,下面对相关术语进行说明。
语句:是组成具有一定功能的程序的基本单位,其主要内容由某具体语言的指令和操作数构成,指令说明做什么,操作数说明怎样做并向操作提供所需要的信息。
子程序:是能被其他程序调用,在实现某种功能后能自动返回到调用程序去的程序。它由多条语句构成,按固定的格式写成,可在主程序中用指令调用执行,执行时程序指针转移到子程序执行,其最后一条指令一定是返回指令,使能保证重新返回到调用它的程序中去。可约定若干变量传递参数,当参数不同时,子程序的功能及运行结果可不相同。可以建立子程序库,存放多个子程序,应用时在不同程序中打开子程序库,应用转子语句及子程序名可调用子程序,重复执行其中语句。
函数:是允许设置固定的参数的子程序,其格式包括函数头与括号括起的参数描述。在定义时的参数称为形式参数,调用时直接用函数名调用,并给出具体参数值,称为实际参数。当实际参数不同时,函数的功能及运行结果可不相同。可以建立函数库,在不同程序中打开函数库,应用函数名调用并执行函数程序,重复执行其中语句。
宏:宏是能被其他程序调用的程序,由多条语句按固定的格式写成,在主程序中调用时宏名相当于指令,在预编译时根据预定义的规则将宏中的语句等内容转换成对应的内容嵌入到主程序调用处,之后在执行程序时可以复用宏中的内容。在宏定义时可以按格式定义形式参数,在调用时以实际参数替代形式参变量,使每次执行的功能、结果不同。
方法:类似于函数,在“类”中定义,调用时用类名或对象名+点+方法名调用。方法可以有自己的参数,可以没有。如果方法有自己的参数(变量),在调用时系统会分配一定的空间给予这些变量,并带入实际参数值,此时的表现与格式与函数相似。
类:类是可被复用的程序,由一到多个方法组合而成,在每个类中可以定义多个变量,在运行时会被分配一定的空间。类可以被集中到库中保存,在应用时只要打开类库就可复用类的方法与变量。在程序中可以复用类中的方法与变量,复用时采用的一种方法是以类名+方法名调用类的方法,类似于子程序执行过程,其中变量按某约定范围使用。另一种方法是复制类的定义在内存中,用另外的名字命名,称为对象,同时为变量另外分配空间。可以用对象名加点+方法名或对象名加点加变量名进行访问,实现复用,运行结束时释放在内存中所占用的空间。可以对类局部进行修改后形成一个子类,所依据的类称为:父类,使用子类时,必须存在父类。在程序中可以访问子类中新定义的方法与变量,也可访问未被修改的父类中的方法与变量,称为继承。
控件:控件是一种包括界面设计与实现的特殊的类,是对数据和方法的封装,提供了一系列可用的接口。
软部件:软部件将一到多个类及若干语句组合为可执行程序文件,可被应用系统控制器直接调用,成为应用系统组成部分。在编译时部件的全部内容被编译到系统中。在调用时可以定义不同的参数,在编译时根据参数内容选用其中不同的功能并表现出不同的性能,使得同一软部件在使用不同参数被调用时有不同的程序表现。在执行时常被分配一个进程,安排一定空间。通用软部件可简称为软部件,是实现软件生产工业化、建立软件生产线的基本单位。采用从上而下的方式设计,首先对所知的一切实际应用系统进行需求分析,设计不同的但数量有限的软部件程序覆盖全部应用。每个部件程序集成多个功能与多种性能,相当于多道程序,可以通过实际参数值使得被编译时实现不同功能、表现不同性能。软部件可存放到部件库中,部件库实际上只是一个文件夹,在其中存放了多个部件程序文档。应用软部件技术开发应用系统,可先将部件库中所需要的软部件文件拷贝到系统文件夹中,设计并建立数据模型,选择不同部件,设置必要的参数,构筑系统的控制器,就能全自动地建立应用系统。可以对软部件文件进行修改,修改后成为完全独立的部件文档,存放到部件库中,与原部件文件不存在逻辑、继承关系,可以与原部件并行地被使用。
软构件:软构件将一到多个类及若干语句组合封装为软件实体,是一个独立发布的功能部分,可以通过它的接口访问它的服务。它体现了包装、服务、完整性等观点。利用软构件技术开发应用系统,一般是先构筑系统的总体框架,然后构造各个构件,并依次把构件安装到系统中去,通过组装时的引用实现复用。
领域构件:其采用自下而上的方式设计,首先对某一领域进行分析,归纳与综合该域中一到多个应用程序设计为一个软构件。
组件(component):组件是不被称为软构件和软部件的将一到多个类及若干语句组合封装而成的软件实体。
当然,组件也可以理解为:是指可重复使用并且可以和其他对象进行交互的对象。组件是为了实现某个功能而整合在一起的方法及数据的集合,为了描述组件的特征组件中还包含一些描述信息,诸如组件的名称或ID,提供哪些接口,版本信息等。通常组件是以二进制文件提供的,但也可以以源代码的形式提供。组件可以理解为类的超集,它可能包含若干个类,当然也可以只有一个类;此外组件往往需要提供一些额外的描述信息,供组件管理器管理;而“类”缺乏这些信息,“类”加上这些必要的信息,基本上就差不多等同于组件了。不过,通常组件是以二进制形式发布,而“类”是源代码层面的。
直播:是指通过一定设备采集开播方数据,经过一系列处理如视频编码压缩成可观看可传输的视频流,输出至观看用户端的技术。通常制作和观看是同步的。
游戏弹幕:在观看直播时,以字幕形式呈现在游戏直播画面或者评论区域的用户评论。在直播画面或者评论区域大量飘过的,如密集炮弹一般,故得名弹幕。
弹幕透明:指弹幕面板在用户显示器上显示时,面板能够实现透明或者半透明,以使弹幕面板层级以下的图像内容不会被遮挡。
全屏模式:可以让游戏渲染独占所有的显卡资源,游戏全屏模式一般会比窗口模式更流畅,但普通图形设备接口(Graphics Device Interface,GDI)窗口将无法显示。
图形设备接口(Graphics Device Interface,GDI):是Windows最初用来实现2D绘图的API。
应用程序接口(Application Programming Interface,API):又称为应用编程接口,就是软件系统不同组成部分衔接的约定。
值得注意的是,由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而,能够提高系统的维护性和扩展性。API为电脑操作系统(Operating system)或程序库提供给应用程序调用使用的代码。其主要目的是让应用程序开发人员得以调用一组例程功能,而无须考虑其底层的源代码为何、或理解其内部工作机制的细节。API本身是抽象的,它仅定义了一个接口,而不涉及应用程序在实际实现过程中的具体操作。
图6是本申请实施例提供的弹幕的显示方法200的示意性流程图。该方法可以由任意具有显示功能的电子设备执行,例如,可以由图1所示的第一终端110或第二终端130执行。为便于说明,下面以终端设备为执行主体为例对该方法200进行示例性说明。
如图6所示,该弹幕的显示方法200可包括:
S210,终端设备获取直播应用程序的网页弹幕的弹幕地址。
示例性地,该弹幕地址可以是统一资源定位符(Uniform Resource Locator,URL)。
其中,URL是用于完整地描述互联网(Internet)上网页和其他资源的地址的一种标识方法。互联网上的每一个网页都具有一个唯一的名称标识,通常称之为URL地址,这种地址可以是本地磁盘,也可以是局域网上的某一台计算机,更多的是Internet上的站点。简单地说,URL就是Web地址,俗称“网址”。
示例性地,该终端设备可以从弹幕服务器或直播应用程序的后台服务器获取该弹幕地址。该弹幕地址可以是该弹幕服务器或该后台服务器的存储地址,用于指向弹幕数据;弹幕数据:是各终端的用户(即观众)对正在直播的游戏画面发表的评论数据。
示例性地,该浏览器控件可以是浏览器嵌入框架(Chromium EmbeddedFramework,CEF)组件。
其中,该CEF组件是一个开源网页浏览器(Web browser)控件,支持窗口(Windows)操作系统、Linux操作系统、Mac平台等操作系统。除了提供C/C++接口外,也有其他语言的移植版。CEF组件还可以提供有如下特性:自定义插件、自定义协议、自定义爪哇描述语言(JavaScript)对象和扩展等等。
S220,该终端设备基于该弹幕地址,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄;该图像句柄用于唯一性标识该第一弹幕图像的存储地址。
示例性地,该终端设备可以利用该浏览器控件,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄。
换言之,该终端设备可以利用该浏览器控件,以离屏渲染的方式将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄。
其中,离屏渲染(off-screen render,OSR):顾名思义为屏幕外的渲染,即在当前屏幕缓冲区以外新开辟一个新缓冲区进行操作。换言之,该浏览器孔健的屏幕缓冲区为用于存储显示图像的缓冲区,该浏览器控件的离屏缓冲区为用于存储中间图像或数据的缓冲区。其中,该浏览器控件的离屏缓冲区和该浏览器控件的屏幕缓冲区为相互独立的缓冲区。
示例性地,该终端设备可以基于该弹幕地址,利用回调函数,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄;该图像句柄用于唯一性标识该第一弹幕图像的存储地址。
其中,回调函数:是一个被作为参数传递的函数,其可以大大提升编程的效率,这使得它在编程中被非常多地使用。例如,可以将函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,这个函数就是回调函数。或者说,可以将一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,就叫做回调。如果代码立即被执行就称为同步回调,如果在之后晚点的某个时间再执行,则称为异步回调。
S230,该终端设备获取该直播应用程序的弹幕窗口的子窗口句柄;该子窗口句柄用于唯一性标识该弹幕窗口中的第一子窗口的属性信息,该第一子窗口为该弹幕窗口中除标题栏之外的区域形成的窗口。
其中,句柄(Handle)是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控制、位图、GDI对象、资源、文件等。Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之,数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针,当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。
本实施例中,该子窗口句柄用于唯一性标识该第一子窗口的属性信息,该第一子窗口的属性信息可以包括该第一子窗口的位置信息以及尺寸信息等,该尺寸信息可以包括该第一子窗口的形状等信息,例如,该第一子窗口为矩形窗口时,该尺寸信息还可以包括该第一子窗口的长以及该第一子窗口的高等信息。
示例性地,该弹幕窗口可以仅包括该第一子窗口,也可以同时包括该第一子窗口和该标题栏。
图7是本申请实施例提供的弹幕窗口的示意图。
如图7所示,该弹幕窗口可包括标题栏和该第一子窗口,其中,该第一子窗口可以用于承载该第一弹幕图像,该标题栏可以用于承载该弹幕窗口的各个基础控件。例如,可以如桌面弹幕,该标题栏可以用于承载置顶(或置底)控件、设置控件、锁屏控件和关闭控件以及关闭控件。其中,置顶(或置底)控件用于置顶(或置底)弹幕窗口,设置控件用于设置弹幕窗口的属性信息,锁屏控件用于锁定弹幕窗口,关闭控件用于关闭弹幕窗口。当然,上述基本控件为本申请的示例,不应理解为对本申请的限制,本领域技术人员可以根据实际需求设置相应的控件。
示例性地,该第一子窗口可以是一个QT窗口。
其中,QT是一个跨平台C++图形用户界面应用程序开发框架,其可以开发图形用户界面(Graphical User Interface,GUI)程序,也可用于开发非GUI程序,GUI是指采用图形方式显示的计算机操作用户界面。比如,控制台工具和服务器。QT是面向对象的框架,使用特殊的代码生成扩展以及一些宏,很容易扩展,并且允许真正地组件编程。
S240,该终端设备基于该图像句柄和该子窗口句柄,将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像;该离屏缓冲区和该屏幕缓冲区为相互独立的缓冲区。
示例性地,该终端设备基于该图像句柄和该子窗口句柄,可以利用该直播应用程序将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像。
本实施例中,由于该子窗口句柄为浏览器控件确定的句柄,而对该第一弹幕图像的渲染是由直播应用层程序执行的,相当于,该子窗口句柄可作为该浏览器控件和该直播应用程序的共享句柄(Share Handle),其中,共享句柄可以指不同进程之间可以共享的句柄。例如,通过共享句柄可以在多个图形处理器(graphics processing unit,GPU)上下文(context)之间实现纹理共享复用,多线程分配调用的GPU资源同属一个上下文,通常与CPU的一个进程对应。
示例性地,该终端设备基于该图像句柄和该子窗口句柄,以屏幕渲染的方式将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像。
其中,屏幕渲染是指渲染操作是在当前用于显示屏幕缓冲区中进行的渲染,因此其又称为屏上渲染(On-Screen Rendering),即直播应用程序(APP)中的数据经过中央处理机(Central Processing Unit,CPU)计算和图形处理器(graphics processing unit,GPU)渲染后,将结果存放至屏幕缓冲区,利用视频控制器从屏幕缓冲区中取出,并显示到屏幕上;视频控制器从屏幕缓冲区中读取一帧数据,将其显示到屏幕上后,会立即丢弃这帧数据,不会做任何保留,这样做的目的是可以节省空间,且在屏幕上是各自显示各自的,互相不影响。
由上可知,对于本申请实施例提供的弹幕的显示方法,一方面,获取直播应用程序的网页弹幕的弹幕地址;基于该弹幕地址,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄,相当于,通过图像句柄能够获取在浏览器控件的离屏缓冲区中离屏渲染的第一弹幕图像,进而能够使得第一弹幕图像保留有网页弹幕的多样性特征;另一方面,获取该直播应用程序的弹幕窗口的子窗口句柄;基于该图像句柄和该子窗口句柄,将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像;相当于,直播应用程序可以利用图像句柄获取第一弹幕图像并利用子窗口句柄获取第一子窗口的属性信息,然后将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像,即将该第二弹幕图像实现为具备网页弹幕的多样化特性的桌面弹幕,提升了弹幕的显示效果以及用户体验。
图8是本申请实施例提供的用于弹幕的显示的组件框架的示例。
如图8所示,该组件框架可包括浏览器控件和弹幕组件。其中,该浏览器控件可以是CEF组件,其包括OSR组件,OSR组件用于离屏渲染,该弹幕组件可包括弹幕窗口组件、第一子窗口组件、桌面窗口管理器(Desktop Window Manager,DWM)、绘制组件以及画布。其中,该绘制组件可以进一步包括共享句柄组件以及D3D组件。
其中,浏览器控件可以接收弹幕组件发送的弹幕地址(例如URL),并基于弹幕地址以离屏渲染的方式得到第一弹幕图像并生成该第一弹幕图像的图像句柄。
对该弹幕组件而言,该弹幕组件中的弹幕窗口组件可以获取窗口标识(ID),然后将该子窗口句柄发送给第一子窗口组件,该弹幕组件中的第一子窗口组件获取该窗口标识后,可以基于窗口标识从DWM获取该子窗口句柄。DWM是窗口管理器的组成部分,其可以用于为Vista系统(同Windows7)提供视觉效果:也可以用于设置窗体的透明度,动态的任务栏预览,甚至是3D任务切换。该弹幕组件中的绘制组件可以从OSR组件获取共享句柄(即上述图像句柄),并基于共享句柄和该子窗口句柄,将该共享句柄标识的第一弹幕图像渲染到该子窗口句柄标识的第一子窗口内,得到第二弹幕图像,由此可通过画布显示该第二弹幕图像。画布(Canvas)指制备应用程序中一块专门用于画面采集合成的一块区域。具体地,该绘制组件中的共享句柄组件可以基于OSR组件发送的共享句柄将D3D绘制组件确定为用于渲染该第一弹幕图像的组件,进而基于该D3D绘制组件将第一弹幕图像渲染到该子窗口句柄标识的第一子窗口内。
换句话说,弹幕组件可以先建立QT窗口(即第一子窗口),并将其设置为Native渲染模式(即自绘渲染模式),接管QT的渲染模式,并获取其子窗口句柄。然后从后台服务器拉去弹幕的URL,将URL传递给CEF组件,以便CEF组件开启离屏渲染,例如,CEF组件可通过CefRenderHandler接口实现离屏渲染。在离屏渲染模式下,CEF组件不会创建原生浏览器窗口,CEF组件为直播应用程序提供用于渲染第一弹幕图像的离屏缓冲器,而直播应用程序负责通知鼠标键盘以及焦点事件给CEF。CEF组件对URL的内容进行渲染渲染,得到第一弹幕图像并回调第一弹幕图像的图像句柄。例如,可以通过硬件加速的方式回调一个图像句柄,硬件加速可以指依赖GPU实现图形绘制加速,软硬件加速的区别主要是图形的绘制究竟是GPU来处理还是CPU,如果是GPU,就认为是硬件加速绘制,反之,软件绘制。可选的,该图像句柄可以会随着第一子窗口大小的变化而重新创建。此外,该弹幕组件还可以将第一子窗口的活动事件透传给CEF组件,以便CEF组件实现对用户交互事件的处理。其中,该活动事件可以是针对鼠标的事件,例如点击事件、滑动事件甚至是滚动事件,该活动事件也可以是针对显示屏的事件,例如触摸事件。
其中,该弹幕组件中的弹幕窗口组件可以利用QT中的QDialog来实现。
值得注意的是,通常情况下,QDialog创建的窗口通常为对话框,而对话框是图形用户界面(Graphical User Interface,GUI)程序中不可或缺的组成部分;很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置,对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互;例如对话框分为两种,一种是模态对话框,另一种是非模态对话框。即阻塞和非阻塞对话框,而模态对话框又有两种:应用程序级别的和窗口级别的,分别指完成对话框之前阻塞整个应用和阻塞关联窗口。然而,本实施例中,QDialog创建的窗口为弹幕窗口中的子窗口,或者说,QDialog创建的窗口相对弹幕窗口而言,是弹幕窗口中的一部分区域,并非一个完整的窗口。
图9是本申请实施例提供的离屏渲染框架的示例。
如图9所示,在离屏渲染过程中,应用程序需要将数据渲染在离屏缓冲区,显示组件基于离屏缓冲区中的数据进行屏幕渲染,结合本实施例来说,先由浏览器控件将从弹幕服务器或直播应用程序的后台服务器获取的弹幕数据,渲染到离屏缓冲区,得到第一弹幕图像和图像句柄,然后基于该图像句柄由直播应用程序从离屏缓冲区提取渲染后的第一弹幕图像,并渲染到屏幕缓冲区,得到第二弹幕图像,该第二弹幕图像为需要在画布上进行显示的弹幕图像。
图10是本申请实施例提供的渲染系统的示例。
如图10所示,该渲染系统也可称为跨平台渲染系统或渲染应用程序,其中,该渲染系统从上至下依次可包括:
入口层:提供各个平台的入口脚手架,各个平台相关窗口的创建;
接口层:提供渲染系统的初始化、数据传输、流程控制;
跨平台抽象层:对后端引擎使用的数据进行抽象;
管线:将渲染指令写入管线,排序,解析渲染指令;
渲染引擎:包含各种渲染引擎的抽象和实现。
其中,入口层可包括进入组件(例如entry.cpp)和窗口组件,在进入组件中允许渲染应用程序,并通过窗口组件建立直播窗口和弹幕窗口,其中,弹幕窗口可以是上文涉及的第一子窗口。接口层可包括:用于提供初始化功能的初始化组件、用于提供数据传输功能的数据传输组件以及用于提供流程控制功能的流程控制组件。跨平台抽象层可包括用于对各种数据进行抽象的组件,例如包括但不限于:应用程序(program)文件、着色句柄(ShaderHandle)组件、纹理句柄(TextuerHandle)组件、帧缓冲句柄(FrameBufferHandle)组件、索引缓冲句柄(IndexHandle)组件、顶点缓冲句柄(VertexBufferHandle)组件、统一(UniformHandle)句柄组件等等。管线可包括命令缓冲区(CommandDuffer)、上下文(Context)、编码器(Encoder)、帧(frame)、SORTKEY函数等内容。渲染引擎包括各种渲染接口,例如包括渲染API 1~渲染API 4等。
值得注意的是,上述各个组件可以为本领域中存在的能够用于实现相应功能的组件,本申请对此不作具体限定,为避免重复,此处不再进行赘述。
例如,SORTKEY函数可以用于对渲染指令进行排序。具体地,SORTKEY函数生成的值可用于根据预定义的排序顺序行为对结果进行排序。这样,就可以使用数据库归类无法提供的字符排序顺序行为。其返回值可以是一个二进制值,其包含通过SORTKEY函数保留的输入字符串的已编码排序顺序信息。
再如,上述渲染引擎中的各个渲染接口可以是开放图形库(Open GraphicsLibrary,OpenGL)、Direct 3D、Vulkan、Metal、开放图形库嵌入系统(OpenGL for EmbeddedSystem,OpenGL ES)等各种渲染接口。
其中,OpenGL:是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
具体地,接口由近多个个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。OpenGL是视频行业领域中用于处理2D/3D图形的最为广泛接纳的API,在此基础上,为了用于计算机视觉技术的研究,从而催生了各种计算机平台上的应用功能以及设备上的许多应用程序。其是独立于视窗操作系统以及操作系统平台,可以进行多种不同领域的开发和内容创作,简而言之,其帮助研发人员能够实现PC、工作站、计算机以及各种工控机等硬件设备上实现高性能、对于视觉要求极高的高视觉图形处理软件的开发。
Direct 3D(D3D):是基于通用对象模式(Common Object Mode,COM)的3D图形API。Direct 3D是在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,可以作为DirectX的一部分。与OpenGL同为电脑绘图软体和电脑游戏最常使用的两套绘图编程接口之一。其中,DirectX是一种多媒体编程接口,即可实现为一种应用程序接口(API)。DirectX可以让以视窗操作系统(windows)为平台的游戏或多媒体程序获得更高的执行效率,加强三维(3-dimension,3D)图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低了用户安装以及设置硬件的复杂度。因此,其广泛用于Windows电子游戏开发。
Vulkan:是OpenGL的下一代版本,是科纳斯组织提供的一个跨平台的2D和3D绘图应用程序接口(API),其旨在提供更低的CPU开销与更直接的GPU控制。
Metal:其可以是用于绘制图形或进行并行计算的图形处理器(graphicsprocessing unit,GPU)的接口,换言之,其作为一种低层次的渲染应用程序编程接口,提供了软件所需的最低层,保证软件可以运行在不同的图形芯片上。不同于OpenGL或Direct3D,Metal可以作为移动端的业务的图形编程接口。
开放图形库嵌入系统(OpenGL for Embedded System,OpenGL ES)是使用在手机端和嵌入式里的3D图形应用程序编程接口,是跨平台的API。其主要用于绘制2D或3D图形,渲染图片和视频等。
结合本申请实施例提供的弹幕的显示方法而言,终端设备对带弹幕的直播画面进行渲染时,入口层可用于创建直播窗口和弹幕窗口,在创建完直播窗口和弹幕窗口后,接口层可通过直播窗口对应的窗口句柄,弹幕窗口中第一子窗口对应的子窗口句柄,利用跨平台抽象层中各个组件对应的数据,将渲染指令写入管道,以调用合适的渲染引擎接口对直播窗口和弹幕窗口中的内容进行渲染。
以子窗口句柄为例,渲染系统基于子窗口句柄,利用跨平台抽象层中各个组件对应的数据,将渲染指令写入管道,以调用合适的渲染引擎接口对第一子窗口中的内容进行渲染。具体而言,该渲染系统可以先根据收到的子窗口句柄创建子窗口交换链,并将其格式设置为BGRA8格式;然后建立渲染源,并通过ID3D11Device的OpenSharedResource方法打开子窗口句柄;接着,通过CreateShaderResourceView创建资源视图,并凭借该资源视图,通过上面创建的子窗口交换链,可以将内容(即弹幕)渲染到相应的窗口上。此外,还可以通过用户控制将其渲染到画布之上。如此,实现了将网页弹幕渲染到第一子窗口之上。
在一些实施例中,该S240可包括:
终端设备获取该标题栏中至少一个标题控件指示的属性信息;然后基于该第一子窗口的属性信息和该至少一个标题控件指示的属性信息,将该第一弹幕图像渲染至该第一子窗口,得到在该第一子窗口上显示的第一子图像;由此可基于该标题栏和该第一子图像,得到该第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像。
示例性地,若该至少一个控件指示的属性信息为与该第一弹幕图像的渲染相关的属性信息,或者说,若该至少一个控件指示的属性信息为与该第一子窗口的渲染相关的属性信息,则该终端设备可基于该第一子窗口的属性信息和该第一属性信息,将该第一弹幕图像渲染至该第一子窗口,得到在该第一子窗口上显示的第一子图像;由此,该终端设备可以基于该标题栏和该第一子图像,得到该第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像。例如,该终端设备可以将该标题栏和该第一子图像进行拼接,并将拼接后的图像作为该第二弹幕图像,然后在该弹幕窗口内显示该第二弹幕图像。此时,该弹幕窗口内不仅显示有类似于网页弹幕的第一子图像,还显示有用于承载各个空间的标题栏。
当然,在其他可替代实施例中,该标题栏还可以包括除该至少一个标题控件之外的基础控件。基础控件可以是用于控制与该第一弹幕图像的渲染无关的控件。或者说,基础控件可以是用于控制与该第一子窗口的渲染无关的控件。例如,可以如桌面弹幕,该标题栏可以用于承载置顶(或置底)控件、设置控件、锁屏控件和关闭控件以及关闭控件。其中,置顶(或置底)控件用于置顶(或置底)弹幕窗口,设置控件用于设置弹幕窗口的属性信息,锁屏控件用于锁定弹幕窗口,关闭控件用于关闭弹幕窗口。当然,上述基本控件为本申请的示例,不应理解为对本申请的限制,本领域技术人员可以根据实际需求设置相应的控件。
在一些实施例中,该至少一个标题控件包括透明度控件,该透明度控件指示的属性信息包括该第一子窗口的透明度,该第一子窗口的透明度包括与该第一子窗口的背景对应的背景透明度和与该第一子窗口中的内容对应的内容透明度;基于此,若该透明度控件指示开启弹幕的透明显示功能,则获取该透明度控件指示的属性信息;基于该第一子窗口的属性信息和该透明度控件指示的属性信息,将该第一弹幕图像渲染至该第一子窗口,得到该第一子图像。
示例性地,用户通过对该透明控件进行操作来指示开启弹幕的透明显示功能,此时,该终端设备可以获取该透明度控件指示的属性信息,并基于该第一子窗口的属性信息和该透明度控件指示的属性信息,将该第一弹幕图像渲染至该第一子窗口,得到该第一子图像。例如,该终端设备可以基于该透明控件指示的属性信息,将该第一弹幕图像的背景和内容渲染为不同的透明效果。
示例性地,该可以采用DWM的DwmExtendFrameIntoClientArea方法,使用负边距值,来创建第一子窗口的透明效果,其中,该第一子窗口可以呈现为没有窗口边框的窗口,以便将渲染拓展到子窗口句柄的全窗口区域(即第一子窗口的整个区域)。该DwmExtendFrameIntoClientArea方法可以基于指向该第一子窗口的子窗口句柄和一个MARGINS类型的参数。MARGINS指定了在上下左右4个方向上扩展的范围。如果4个值均为-1,则扩展到整个窗口区域。
当然,在其他可替代实施例中,终端设备也可以通过其他控件指示的属性信息,将该第一弹幕图像渲染至该第一子窗口,得到该第一子图像。例如,可以基于颜色控件指示的属性信息,将该第一弹幕图像渲染至该第一子窗口,得到该第一子图像时,可以将该第一弹幕图像的背景或该第一弹幕图像的内容渲染为特定颜色。
在一些实施例中,终端设备可以从桌面窗口管理器获取该透明度控件的属性信息。
示例性地,该终端设备可以先利用直播应用程序向该桌面窗口管理器发送该第一子窗口的子窗口句柄,该桌面窗口管理器基于该子窗口句柄可以得到该透明控件的属性信息,并将该透明控件的属性信息发送给该直播应用程序,以便该直播应用程序可以基于该透明控件的属性信息将第一弹幕图像渲染在该第一子窗口内。
在一些实施例中,该至少一个标题控件还包括以下中的至少一项:刷新控件、锁屏控件、置顶控件、全屏显示控件;其中,该刷新控件用于刷新该弹幕窗口中显示的弹幕,该锁屏控件用于锁定该弹幕窗口,该置顶控件用于置顶该弹幕窗口,该全屏显示控件用于在直播画面中显示弹幕。
图是11本申请实施例提供的弹幕窗口的示意图。
如图11所示,该弹幕窗口可包括标题栏和第一子窗口。该标题栏承载有刷新控件、透明度控件、锁定控件(也可称为锁屏控件)以及关闭控件,该刷新控件用于刷新该第一子窗口内显示的弹幕,该透明度控件用于控制该第一子窗口的透明度,该锁定控件用于锁定控件用于锁定弹幕窗口,关闭控件用于关闭弹幕窗口。该第一子窗口内显示的图像类似于具有多样性特性的网页弹幕。例如,该第一子窗口内显示的内容可以是在线聊天室。其中,该在线聊天室可以包括显示弹幕的区域和用于输入弹幕的弹幕输入栏。在此基础上,可选的,该在线聊天室可以承载有用户列表控件,该用户列表控件用于打开用户列表,即在线用户的用户列表和周排名的用户列表。可选的,该在线聊天室还可以包括在线用户和周排名的子标题,以及位于子标题的下方的用于显示在线用户或周排名靠前的N(例如3)用户的区域。可选的,该在线聊天室还可以包括位于弹幕输入栏和显示弹幕的区域之间的、用于显示各个快捷功能的区域。该用于显示各个快捷功能的区域可以用于承载弹幕输入栏的各个快捷功能控件,例如,可以用于承载插图控件,其用于控制显示各个插图。
图12是本申请实施例提供的透明度控件控制的对话框的示例。
如图12所示,用户在针对图11的透明度控件执行点击操作后,终端设备可在弹幕窗口内显示如图12所示的对话框,其可以显示用于设置背景的透明度的比例条,也可以显示用于设置该第一子窗口中的内容(例如文本)对应的透明度的比例条。
图13是本申请实施例提供的直播窗口包括弹幕窗口的示例。
如图13所示,直播窗口内可显示直播画面,其中直播画面上可承载有弹幕窗口,弹幕窗口内可承载有第二弹幕图像,例如弹幕窗口内可承载有如图11所示的内容。具体的,该第二弹幕图像可包括标题栏和第一子窗口内的内容。其中,该标题栏承载有刷新控件、透明度控件、锁定控件(也可称为锁屏控件)以及关闭控件,该刷新控件用于刷新该第一子窗口内显示的弹幕,该透明度控件用于控制该第一子窗口的透明度,该锁定控件用于锁定控件用于锁定弹幕窗口,关闭控件用于关闭弹幕窗口。该第一子窗口内的内容可以是上文涉及的第一弹幕图像,即该第一子窗口内显示的图像类似于具有多样性特性的网页弹幕。
图14是本申请实施例提供的直播窗口包括弹幕窗口的另一示例。
如图14所示,用户针对弹幕窗口内承载的用户列表控件(例如图11所示的用户列表控件)执行点击操作后,可触发终端设备在该弹幕窗口内显示如图13所示的内容(例如对话框),即在在线聊天室的界面上进一步承载一个对话框,该对话框可以包括在线用户和周排名的子标题,以及位于在标题下方的、用于显示选择的子标题下的用户列表的区域。此外,该对话框还可以包括关闭控件,该关闭控件用于关闭该对话框。
图15是本申请实施例提供的直播窗口包括第一子窗口的示例。
如图15所示,直播窗口内可显示直播画面,其中直播画面上可承载有弹幕窗口,弹幕窗口内可承载有第二弹幕图像,例如弹幕窗口内可承载有如图11所示的第一子窗口内的内容。换言之,该第二弹幕图像可以不包括标题栏和第一子窗口内的内容。或者说,该第二弹幕图像仅包括该第一子窗口内的内容,该第一自窗口内的内容仅包括上文涉及的第一弹幕图像,相当于,该第一子窗口内显示的图像(即该第二弹幕图像)类似于具有多样性特性的网页弹幕。
图16是本申请实施例提供的直播窗口包括第一子窗口的另一示例。
如图16所示,该在线聊天室还可以包括位于弹幕输入栏和显示弹幕的区域之间的、用于显示各个快捷功能的区域。该用于显示各个快捷功能的区域可以用于承载弹幕输入栏的各个快捷功能控件,例如,可以用于承载插图控件,其用于控制显示各个插图。用户针对弹幕窗口内承载的插图控件执行点击操作后,可触发终端设备在该弹幕窗口内显示如图16所示的内容(例如对话框),即在在线聊天室的界面上进一步承载一个对话框,该对话框可以包括最近使用的子标题,以及位于在标题下方的、用于显示最近使用的表情插图的区域。此外,该对话框还可以包括关闭控件,该关闭控件用于关闭该对话框。
图17是本申请实施例提供的游戏直播窗口包括弹幕窗口的示例。
如图17所示,游戏直播窗口内可显示游戏画面,其中游戏画面上可承载有弹幕窗口,弹幕窗口内可承载有第二弹幕图像。具体的,该第二弹幕图像可包括标题栏和第一子窗口内的内容。其中,该标题栏承载有刷新控件、透明度控件、锁定控件(也可称为锁屏控件)以及关闭控件,该刷新控件用于刷新该第一子窗口内显示的弹幕,该透明度控件用于控制该第一子窗口的透明度,该锁定控件用于锁定控件用于锁定弹幕窗口,关闭控件用于关闭弹幕窗口。该第一子窗口内的内容可以是上文涉及的第一弹幕图像,即该第一子窗口内显示的图像类似于具有多样性特性的网页弹幕。此外,该游戏画面可包括游戏通告窗口内的内容,该游戏通告窗口内的内容可以是游戏玩家的战绩通告或操作时间等消息。
结合图13至图17可见,本申请提供的弹幕的显示方法,不仅可以使得终端设备能够支持半透明的弹幕,还可以使得终端设备能够支持样式和功能更为丰富的弹幕;甚至于,可以实现在全屏内绘制半透明弹幕。例如,在游戏场景下,如果采用常规的桌面弹幕,由于桌面弹幕通常是基于GDI窗口的弹幕,而在游戏画面全屏显示的情况下,基于GDI窗口的弹幕将无法显示,而本申请实施例提供的弹幕的显示方法,可以支持全屏游戏画面内绘制半透明弹幕。
在一些实施例中,该S240可包括:
终端设备获取第三弹幕图像;该第三弹幕图像为在第一应用程序的画面图像中显示有该弹幕窗口的图像;然后,该终端设备基于该图像句柄、该子窗口句柄以及该第三弹幕图像,将该第一弹幕图像和该第三弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像,并在该弹幕窗口内显示该第二弹幕图像。
示例性地,终端设备可以通过该第一应用程序获取该第三弹幕图像,然后可以基于该图像句柄、该子窗口句柄以及该第三弹幕图像,利用该直播应用程序,将该第一弹幕图像和该第三弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像,并在该弹幕窗口内显示该第二弹幕图像。例如,该终端设备利用该第一应用程序获取该第三弹幕图像时,可以基于该子窗口句柄和该画面图像,获取该第三弹幕图像。
在一些实施例中,若该第一应用程序与该直播应用程序为同一应用程序,则获取该画面图像,并基于该子窗口句柄和该画面图像,利用该直播应用程序得到该第三弹幕图像。
换言之,若该第一应用程序与该直播应用程序为同一应用程序,则该终端设备可以利用该直播应用程序直接获取该画面图像,并基于该子窗口句柄和该画面图像,利用该直播应用程序得到该第三弹幕图像。
在一些实施例中,若该第一应用程序与该直播应用程序为不同的应用程序,则建立该直播应用程序到该第一应用程序的第一通信管道;基于该第一通信管道,利用该直播应用程序向该第一应用程序发送该子窗口句柄;建立该第一应用程序到该直播应用程序的第二通信管道;基于该子窗口句柄和该画面图像,利用该第一应用程序得到该第三弹幕图像;基于此,基于该第二通信管道,利用第一应用程序向该直播应用程序发送该第三弹幕图像;基于该图像句柄、该子窗口句柄以及该第三弹幕图像,利用该直播应用程序将该第一弹幕图像和该第三弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像。
换言之,若该第一应用程序与该直播应用程序为不同的应用程序,则该终端设备需要先建立该直播应用程序到该第一应用程序的第一通信管道,以便通过该第一通信管道向该第一应用程序发送该子窗口句柄,并基于该子窗口句柄和该第一应用程序的画面图像,利用该第一应用程序得到该第三弹幕图像;然后建立该第一应用程序到该直播应用程序的第二通信管道,以便通过该第二通信管道向该直播应用程序发送该第三弹幕图像。
值得注意的是,终端设备可以在建立该第一通信管道的同时建立该第二通信管道,也可以在第一应用程序获取第三弹幕图像后建立该第二通信管道,本申请对此不作具体限定。
此外,该第一通信管道和该第二通信管道可以等同替换为一个双向通信管道。
例如,若该第一应用程序与该直播应用程序为不同的应用程序,则终端设备可以事先建立该直播应用程序与该第一应用程序之间的双向通信管道;然后基于该双向通信管道,利用该直播应用程序向该第一应用程序发送该子窗口句柄;接着,该终端设备可以基于该子窗口句柄和该画面图像,利用该第一应用程序得到该第三弹幕图像;并基于该双向通信管道,利用第一应用程序向该直播应用程序发送该第三弹幕图像;然后,该终端设备可以基于该图像句柄、该子窗口句柄以及该第三弹幕图像,利用该直播应用程序将该第一弹幕图像和该第三弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像。
在一些实施例中,该获取第三弹幕图像之前,终端设备在该第一应用程序的进程中添加动态链接库;其中,该动态链接库第一函数和第一组件,该第一函数用于利用钩子机制截获该画面图像,该第一组件用于基于该子窗口句柄对该画面图像进行修改并得到该第三弹幕图像。
示例性地,该终端设备可利用该直播应用程序在该第一应用程序的进程中添加该动态链接库。
示例性地,该第一函数可以实现为钩子(Hook)函数。
换言之,该直播应用程序可以通过钩子机制截获处理第一应用程序的画面图像。
由于Windows系统是建立在事件驱动的机制上的,即整个系统都是通过消息的传递来实现的,而钩子函数是Windows系统中非常重要的系统接口,因此,可以用其可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以检测系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,研发人员就可以在系统中安装自定义的钩子,检测系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志检测等等。由此可见,利用钩子可以实现许多特殊而有用的功能。具体实现中,钩子函数实际上是一个处理消息的程序段,通过系统调用可以将其挂入系统,每当特定的消息发出,在没有到达目的窗口前,钩子函数就先捕获该消息,亦即钩子函数先得到控制权;这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。当然,在其他可替代实施例中,钩子函数也可以称为钩子程序。
示例性地,该第一组件可以用于确定该第三弹幕图像的传输参数。
例如,该第一组件可以用于确定该第三弹幕图像的每秒传输帧数(Frame PerSecond,FPS)。
其中,FPS是图像领域中的定义,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。通常,要避免动作不流畅的最低是30。某些计算机视频格式,每秒只能提供15帧。
FPS也可以理解为我们常说的“刷新率(单位为Hz)”,例如在游戏里说的“FPS值”。在装机选购显卡和显示器的时候,都会注意到“刷新率”。一般我们设置缺省刷新率都在75Hz(即75帧/秒)以上。例如:75Hz的刷新率刷也就是指屏幕一秒内只扫描75次,即75帧/秒。而当刷新率太低时用户肉眼都能感觉到屏幕的闪烁,不连贯,对图像显示效果和视觉感观会产生不好的影响。
在一些实施例中,该动态链接库还包括第二函数,该第二函数用于利用该钩子机制截获在该第一应用程序的显示界面上触发的操作事件;该方法200还可包括:
若该第一应用程序与该直播应用程序为不同的应用程序,则利用该第一应用程序向该直播应用程序发送事件指令,该事件指令用于指示该操作事件。
示例性地,该第而函数可以实现为钩子(Hook)函数。
换言之,该直播应用程序可以通过钩子机制截获处理Window消息或是其他一些特定事件。
在一些实施例中,该S210可包括:
终端设备利用该直播应用程序向该浏览器控件发送该弹幕地址和事件指令;其中,该S220可包括:该终端设备基于该弹幕地址和该事件指令,利用该浏览器控件将该直播应用程序的弹幕渲染至该浏览器控件的离屏缓冲区,得到该第一弹幕图像并获取该图像句柄。
示例性地,若该直播应用程序和该第一应用程序之间建立有该第二通信管道或双向通道管道,则该终端设备可以基于该第二通信管道或该双向通信管道,利用该直播应用程序从第一应用程序接收用于针对该第一应用程序执行的事件指令,并向该浏览器控件转发该事件指令。此外,该直播应用程序可以将从直播应用程序的后台服务器获取的该弹幕地址转发给该浏览器控件,以便利用该浏览器控件将该直播应用程序的弹幕渲染至该浏览器控件的离屏缓冲区,得到该第一弹幕图像并获取该图像句柄。
在一些实施例中,该S240可包括:
终端设备基于该图像句柄和该子窗口句柄,利用D3D显示程序接口将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像;然后从该直播应用程序的屏幕缓冲区提取该第二弹幕图像,并在该弹幕窗口内显示该第二弹幕图像。
示例性地,该D3D显示程序接口可以是图10所示的Direct 3D渲染接口。
示例性地,该终端设备可以利用视频控制器,从该直播应用程序的屏幕缓冲区,提取该第二弹幕图像,并在该弹幕窗口内显示该第二弹幕图像。
本实施例中,利用D3D显示程序接口将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,相当于,使得第一子窗口完整完全按照D3D Context渲染格式展示(带透明度方式),而不被系统处理,能够避免BGRA中的阿尔法通道(Alpha Channel)失效,进而,能够保证该第二弹幕图像的渲染效果。
其中,Alpha通道是指一张图片的透明和半透明度。具体地,针对每个像素,通过增加一个Alpha通道,取值为0到1,用来储存这个像素是否对图片有贡献,0代表透明、1代表不透明。也就是说,Alpha通道储存一个值,其外在表现是透明度。当然,Alpha通道也可以使用8位二进制数,就可以表示256级灰度,即256级的透明度。白色(值为255)的Alpha像素用以定义不透明的彩色像素,而黑色(值为0)的Alpha通道像素用以定义透明像素,介于黑白之间的灰度(值为30-255)的Alpha像素用以定义不同程度的半透明像素。因而通过一个32位总线的图形卡来显示带Alpha通道的图形,就可能呈现出透明或半透明的视觉效果。
例如:一个使用每个像素16比特存储的位图,对于图形中的每一个像素而言,可能以5个比特表示红色,5个比特表示绿色,5个比特表示蓝色,最后一个比特是阿尔法。在这种情况下,它要么表示透明要么不是,因为阿尔法比特只有0或1两种不同表示的可能性。又如,一个使用32个比特存储的位图,每8个比特表示红绿蓝和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度,因为阿尔法通道有8个比特可以有256种不同的数据表示可能性。
图18是本申请实施例提供的直播应用程序和第一应用程序之间的关系的示意图。
如图18所示,直播应用程序可以通过管理设备和注入内容关联到第一应用程序。其中,管理设备可以是HOOK逻辑管理设备或HOOK数据管理设备,注入内容可以是本申请需要在第一应用程序的进程内注入的内容,其可以是钩子方法的函数。当然,终端设备可以基于命令程队列运行第一应用程序,例如该第一应用程序为游戏应用程序时,该命令程队列可以是游戏D3D命令程队列。
示例性地,该终端设备可以通过以下步骤实现全屏的弹幕:
步骤1:前置准备。
先编写graphics-hook.dll,该graphics-hook.dll能够hook系统的Present函数和windowProc函数,Present函数是D3D渲染上屏的必要过程,游戏进程在一定时间间隔都会调用该函数;而windowProc函数则是鼠标、键盘等消息处理的必要过程。hook机制允许直播程序拦截并处理Windows消息或指定事件,当指定的消息发出后,hook程序就可以在消息到达目标窗口之前将其捕获,从而得到对消息的控制权,进而可以对该消息进行处理或修改,以注入弹幕全屏显示所需的功能。如这里hook系统的Present函数和windowProc函数,并注入想要绘制的内容以及处理鼠标事件。
步骤2:建立数据通道。
直播应用程序可以先初始化一条通信管道A(eg_pipe_server),然后利用通信管道A,将graphics-hook.dll注入到游戏进程中,使graphics-hook.dll连接直播应用程序,同时再开一条管道B(game_pipe_server),直播应用程序再连接该管道作为B(game_pipe_client),从而实现双向通信。
步骤3:游戏进程渲染上屏。
通过ID3D11Device的OpenSharedResource打开第一弹幕图像的图像句柄,由于之前已经hook掉了系统的Present函数,由此可以在系统Present调用之间,使用DirectX API实现画面渲染以及重放。此外,windowProc函数接收到鼠标事件将会回传到直播应用程序中,直播应用程序针对事件进行响应,例如可以将事件指令发送给浏览器控件,以便浏览器控件离屏渲染该第一弹幕图像。
以上结合附图详细描述了本申请的优选实施方式,但是,本申请并不限于上文涉及的实施方式中的具体细节,在本申请的技术构思范围内,可以对本申请的技术方案进行多种简单变型,这些简单变型均属于本申请的保护范围。例如,在上文涉及的具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本申请对各种可能的组合方式不再另行说明。又例如,本申请的各种不同的实施方式之间也可以进行任意组合,只要其不违背本申请的思想,其同样应当视为本申请所公开的内容。
还应理解,在本申请的各种方法实施例中,上文涉及的各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
上文对本申请实施例提供的方法进行了说明,下面对本申请实施例提供的装置进行说明。
图19是本申请实施例提供的弹幕的显示装置300的示意性框图。
如图19所示,该弹幕的显示装置300可包括:
第一获取单元310,用于获取直播应用程序的网页弹幕的弹幕地址;
第一渲染单元320,用于基于该弹幕地址,将该直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取该第一弹幕图像的图像句柄;该图像句柄用于唯一性标识该第一弹幕图像的存储地址;
第二获取单元330,用于获取该直播应用程序的弹幕窗口的子窗口句柄;该子窗口句柄用于唯一性标识该弹幕窗口中的第一子窗口的属性信息,该第一子窗口为该弹幕窗口中除标题栏之外的区域形成的窗口;
第二渲染单元340,用于基于该图像句柄和该子窗口句柄,将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像;该离屏缓冲区和该屏幕缓冲区为相互独立的缓冲区。
在一些实施例中,该第二渲染单元340具体用于:
获取该标题栏中至少一个标题控件指示的属性信息;
基于该第一子窗口的属性信息和该至少一个标题控件指示的属性信息,将该第一弹幕图像渲染至该第一子窗口,得到在该第一子窗口上显示的第一子图像;
基于该标题栏和该第一子图像,得到该第二弹幕图像并在该弹幕窗口内显示该第二弹幕图像。
在一些实施例中,该至少一个标题控件包括透明度控件,该透明度控件指示的属性信息包括该第一子窗口的透明度,该第一子窗口的透明度包括与该第一子窗口的背景对应的背景透明度和与该第一子窗口中的内容对应的内容透明度;
其中,该第二渲染单元340具体用于:
若该透明度控件指示开启弹幕的透明显示功能,则获取该透明度控件指示的属性信息;
基于该第一子窗口的属性信息和该透明度控件指示的属性信息,将该第一弹幕图像渲染至该第一子窗口,得到该第一子图像。
在一些实施例中,该第二渲染单元340具体用于:
从桌面窗口管理器获取该透明度控件的属性信息。
在一些实施例中,该至少一个标题控件还包括以下中的至少一项:刷新控件、锁屏控件、置顶控件、全屏显示控件;其中,该刷新控件用于刷新该弹幕窗口中显示的弹幕,该锁屏控件用于锁定该弹幕窗口,该置顶控件用于置顶该弹幕窗口,该全屏显示控件用于在直播画面中显示弹幕。
在一些实施例中,该第二渲染单元340具体用于:
获取第三弹幕图像;该第三弹幕图像为在第一应用程序的画面图像中显示有该弹幕窗口的图像;
基于该图像句柄、该子窗口句柄以及该第三弹幕图像,将该第一弹幕图像和该第三弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像,并在该弹幕窗口内显示该第二弹幕图像。
在一些实施例中,该第二渲染单元340具体用于:
若该第一应用程序与该直播应用程序为同一应用程序,则获取该画面图像,并基于该子窗口句柄和该画面图像,利用该直播应用程序得到该第三弹幕图像。
在一些实施例中,该第二渲染单元340具体用于:
若该第一应用程序与该直播应用程序为不同的应用程序,则建立该直播应用程序到该第一应用程序的第一通信管道;
基于该第一通信管道,利用该直播应用程序向该第一应用程序发送该子窗口句柄;
建立该第一应用程序到该直播应用程序的第二通信管道;
基于该子窗口句柄和该画面图像,利用该第一应用程序得到该第三弹幕图像;
基于该第二通信管道,利用第一应用程序向该直播应用程序发送该第三弹幕图像;
基于该图像句柄、该子窗口句柄以及该第三弹幕图像,利用该直播应用程序将该第一弹幕图像和该第三弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像。
在一些实施例中,该第二渲染单元340获取第三弹幕图像之前,还用于:
在该第一应用程序的进程中添加动态链接库;
其中,该动态链接库第一函数和第一组件,该第一函数用于利用钩子机制截获该画面图像,该第一组件用于基于该子窗口句柄对该画面图像进行修改并得到该第三弹幕图像。
在一些实施例中,该动态链接库还包括第二函数,该第二函数用于利用该钩子机制截获在该第一应用程序的显示界面上触发的操作事件;
该第二渲染单元340还用于:
若该第一应用程序与该直播应用程序为不同的应用程序,则利用该第一应用程序向该直播应用程序发送事件指令,该事件指令用于指示该操作事件。
在一些实施例中,该第一获取单元310具体用于:
利用该直播应用程序向该浏览器控件发送该弹幕地址和事件指令;
其中,该第一渲染单元320具体用于:
基于该弹幕地址和该事件指令,利用该浏览器控件将该直播应用程序的弹幕渲染至该浏览器控件的离屏缓冲区,得到该第一弹幕图像并获取该图像句柄。
在一些实施例中,该第二渲染单元340还用于:
基于该图像句柄和该子窗口句柄,利用D3D显示程序接口将该第一弹幕图像渲染至该直播应用程序的屏幕缓冲区,得到该第二弹幕图像;
从该直播应用程序的屏幕缓冲区提取该第二弹幕图像,并在该弹幕窗口内显示该第二弹幕图像。
应理解,装置实施例与方法实施例可以相互对应,类似的描述可以参照方法实施例。为避免重复,此处不再赘述。具体地,弹幕的显示装置300可以对应于执行本申请实施例的方法200中的相应主体,并且弹幕的显示装置300中的各个单元分别为了实现方法200中的相应流程,为了简洁,在此不再赘述。
还应当理解,本申请实施例涉及的显示装置300中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。上文涉及的单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本申请的其它实施例中,显示装置300也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。根据本申请的另一个实施例,可以通过在包括例如中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的通用计算机的通用计算设备上运行能够执行相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造本申请实施例涉及的显示装置300,以及来实现本申请实施例提供的方法。计算机程序可以记载于例如计算机可读存储介质上,并通过计算机可读存储介质装载于电子设备中,并在其中运行,来实现本申请实施例的相应方法。
换言之,上文涉及的单元可以通过硬件形式实现,也可以通过软件形式的指令实现,还可以通过软硬件结合的形式实现。具体地,本申请实施例中的方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路和/或软件形式的指令完成,结合本申请实施例公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件组合执行完成。可选地,软件可以位于随机存储器,闪存、只读存储器、可编程只读存储器、电可擦写可编程存储器、寄存器等本领域的成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上文涉及的方法实施例中的步骤。
图20是本申请实施例提供的电子设备400的示意结构图。
如图20所示,该电子设备400至少包括处理器410以及计算机可读存储介质420。其中,处理器410以及计算机可读存储介质420可通过总线或者其它方式连接。计算机可读存储介质420用于存储计算机程序421,计算机程序421包括计算机指令,处理器410用于执行计算机可读存储介质420存储的计算机指令。处理器410是电子设备400的计算核心以及控制核心,其适于实现一条或多条计算机指令,具体适于加载并执行一条或多条计算机指令从而实现相应方法流程或相应功能。
作为示例,处理器410也可称为中央处理器(Central Processing Unit,CPU)。处理器410可以包括但不限于:通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立元件门或者晶体管逻辑器件、分立硬件组件等等。
作为示例,计算机可读存储介质420可以是高速RAM存储器,也可以是非不稳定的存储器(Non-VolatileMemory),例如至少一个磁盘存储器;可选的,还可以是至少一个位于远离前述处理器410的计算机可读存储介质。具体而言,计算机可读存储介质420包括但不限于:易失性存储器和/或非易失性存储器。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double DataRate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synch link DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DR RAM)。
如图20所示,该电子设备400还可以包括收发器430。
其中,处理器410可以控制该收发器430与其他设备进行通信,具体地,可以向其他设备发送信息或数据,或接收其他设备发送的信息或数据。收发器430可以包括发射机和接收机。收发器430还可以进一步包括天线,天线的数量可以为一个或多个。
应当理解,该电子设备400中的各个组件通过总线系统相连,其中,总线系统除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。值得注意的是,该电子设备400可以是任意一种具有数据处理能力的电子设备;该计算机可读存储介质420中存储有第一计算机指令;由处理器410加载并执行计算机可读存储介质420中存放的第一计算机指令,以实现图1所示方法实施例中的相应步骤;具体实现中,计算机可读存储介质420中的第一计算机指令由处理器410加载并执行相应步骤,为避免重复,此处不再赘述。
根据本申请的另一方面,本申请实施例提供了一种计算机可读存储介质(Memory),计算机可读存储介质是电子设备400中的记忆设备,用于存放程序和数据。例如,计算机可读存储介质420。可以理解的是,此处的计算机可读存储介质420既可以包括电子设备400中的内置存储介质,当然也可以包括电子设备400所支持的扩展存储介质。计算机可读存储介质提供存储空间,该存储空间存储了电子设备400的操作系统。并且,在该存储空间中还存放了适于被处理器410加载并执行的一条或多条的计算机指令,这些计算机指令可以是一个或多个的计算机程序421(包括程序代码)。
根据本申请的另一方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。例如,计算机程序421。此时,数据处理设备400可以是计算机,处理器410从计算机可读存储介质420读取该计算机指令,处理器410执行该计算机指令,使得该计算机执行上文涉及的各种可选方式中提供的各种方法。换言之,当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机程序指令时,全部或部分地运行本申请实施例的流程或实现本申请实施例的功能。该计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质进行传输,例如,该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriberline,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元以及流程步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
最后需要说明的是,以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (15)

1.一种弹幕的显示方法,其特征在于,包括:
获取直播应用程序的网页弹幕的弹幕地址;
基于所述弹幕地址,将所述直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取所述第一弹幕图像的图像句柄;所述图像句柄用于唯一性标识所述第一弹幕图像的存储地址;
获取所述直播应用程序的弹幕窗口的子窗口句柄;所述子窗口句柄用于唯一性标识所述弹幕窗口中的第一子窗口的属性信息,所述第一子窗口为所述弹幕窗口中除标题栏之外的区域形成的窗口;
基于所述图像句柄和所述子窗口句柄,将所述第一弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在所述弹幕窗口内显示所述第二弹幕图像;所述离屏缓冲区和所述屏幕缓冲区为相互独立的缓冲区。
2.根据权利要求1所述的方法,其特征在于,所述基于所述图像句柄和所述子窗口句柄,将所述第一弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在所述弹幕窗口内显示所述第二弹幕图像,包括:
获取所述标题栏中至少一个标题控件指示的属性信息;
基于所述第一子窗口的属性信息和所述至少一个标题控件指示的属性信息,将所述第一弹幕图像渲染至所述第一子窗口,得到在所述第一子窗口上显示的第一子图像;
基于所述标题栏和所述第一子图像,得到所述第二弹幕图像并在所述弹幕窗口内显示所述第二弹幕图像。
3.根据权利要求2所述的方法,其特征在于,所述至少一个标题控件包括透明度控件,所述透明度控件指示的属性信息包括所述第一子窗口的透明度,所述第一子窗口的透明度包括与所述第一子窗口的背景对应的背景透明度和与所述第一子窗口中的内容对应的内容透明度;
其中,所述基于所述第一子窗口的属性信息和所述至少一个标题控件的属性信息,将所述第一弹幕图像渲染至所述第一子窗口,得到在所述第一子窗口上显示的第一子图像,包括:
若所述透明度控件指示开启弹幕的透明显示功能,则获取所述透明度控件指示的属性信息;
基于所述第一子窗口的属性信息和所述透明度控件指示的属性信息,将所述第一弹幕图像渲染至所述第一子窗口,得到所述第一子图像。
4.根据权利要求3所述的方法,其特征在于,所述获取所述透明度控件指示的属性信息,包括:
从桌面窗口管理器获取所述透明度控件的属性信息。
5.根据权利要求3所述的方法,其特征在于,所述至少一个标题控件还包括以下中的至少一项:刷新控件、锁屏控件、置顶控件、全屏显示控件;其中,所述刷新控件用于刷新所述弹幕窗口中显示的弹幕,所述锁屏控件用于锁定所述弹幕窗口,所述置顶控件用于置顶所述弹幕窗口,所述全屏显示控件用于在直播画面中显示弹幕。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述基于所述图像句柄和所述子窗口句柄,将所述第一弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在所述弹幕窗口内显示所述第二弹幕图像,包括:
获取第三弹幕图像;所述第三弹幕图像为在第一应用程序的画面图像中显示有所述弹幕窗口的图像;
基于所述图像句柄、所述子窗口句柄以及所述第三弹幕图像,将所述第一弹幕图像和所述第三弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到所述第二弹幕图像,并在所述弹幕窗口内显示所述第二弹幕图像。
7.根据权利要求6所述的方法,其特征在于,所述获取第三弹幕图像,包括:
若所述第一应用程序与所述直播应用程序为同一应用程序,则获取所述画面图像,并基于所述子窗口句柄和所述画面图像,利用所述直播应用程序得到所述第三弹幕图像。
8.根据权利要求6所述的方法,其特征在于,所述获取第三弹幕图像,包括:
若所述第一应用程序与所述直播应用程序为不同的应用程序,则建立所述直播应用程序到所述第一应用程序的第一通信管道;
基于所述第一通信管道,利用所述直播应用程序向所述第一应用程序发送所述子窗口句柄;
建立所述第一应用程序到所述直播应用程序的第二通信管道;
基于所述子窗口句柄和所述画面图像,利用所述第一应用程序得到所述第三弹幕图像;
其中,所述基于所述图像句柄、所述子窗口句柄以及所述第三弹幕图像,将所述第一弹幕图像和所述第三弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到所述第二弹幕图像,包括:
基于所述第二通信管道,利用第一应用程序向所述直播应用程序发送所述第三弹幕图像;
基于所述图像句柄、所述子窗口句柄以及所述第三弹幕图像,利用所述直播应用程序将所述第一弹幕图像和所述第三弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到所述第二弹幕图像。
9.根据权利要求6所述的方法,其特征在于,所述获取第三弹幕图像之前,所述方法还包括:
在所述第一应用程序的进程中添加动态链接库;
其中,所述动态链接库第一函数和第一组件,所述第一函数用于利用钩子机制截获所述画面图像,所述第一组件用于基于所述子窗口句柄对所述画面图像进行修改并得到所述第三弹幕图像。
10.根据权利要求9所述的方法,其特征在于,所述动态链接库还包括第二函数,所述第二函数用于利用所述钩子机制截获在所述第一应用程序的显示界面上触发的操作事件;
所述方法还包括:
若所述第一应用程序与所述直播应用程序为不同的应用程序,则利用所述第一应用程序向所述直播应用程序发送事件指令,所述事件指令用于指示所述操作事件。
11.根据权利要求1至5中任一项所述的方法,其特征在于,所述获取直播应用程序的网页弹幕的弹幕地址,包括:
利用所述直播应用程序向所述浏览器控件发送所述弹幕地址和事件指令;
其中,所述基于所述弹幕地址,将所述直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取所述第一弹幕图像的图像句柄,包括:
基于所述弹幕地址和所述事件指令,利用所述浏览器控件将所述直播应用程序的弹幕渲染至所述浏览器控件的离屏缓冲区,得到所述第一弹幕图像并获取所述图像句柄。
12.根据权利要求1至5中任一项所述的方法,其特征在于,所述基于所述图像句柄和所述子窗口句柄,将所述第一弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在所述弹幕窗口内显示所述第二弹幕图像,包括:
基于所述图像句柄和所述子窗口句柄,利用D3D显示程序接口将所述第一弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到所述第二弹幕图像;
从所述直播应用程序的屏幕缓冲区提取所述第二弹幕图像,并在所述弹幕窗口内显示所述第二弹幕图像。
13.一种弹幕的显示装置,其特征在于,包括:
第一获取单元,用于获取直播应用程序的网页弹幕的弹幕地址;
第一渲染单元,用于基于所述弹幕地址,将所述直播应用程序的弹幕渲染至浏览器控件的离屏缓冲区,得到第一弹幕图像并获取所述第一弹幕图像的图像句柄;所述图像句柄用于唯一性标识所述第一弹幕图像的存储地址;
第二获取单元,用于获取所述直播应用程序的弹幕窗口的子窗口句柄;所述子窗口句柄用于唯一性标识所述弹幕窗口中的第一子窗口的属性信息,所述第一子窗口为所述弹幕窗口中除标题栏之外的区域形成的窗口;
第二渲染单元,用于基于所述图像句柄和所述子窗口句柄,将所述第一弹幕图像渲染至所述直播应用程序的屏幕缓冲区,得到渲染后的第二弹幕图像并在所述弹幕窗口内显示所述第二弹幕图像;所述离屏缓冲区和所述屏幕缓冲区为相互独立的缓冲区。
14.一种电子设备,其特征在于,包括:
处理器,适于执行计算机程序;
计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1至12中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,用于存储计算机程序,所述计算机程序使得计算机执行权利要求1至12中任一项所述的方法。
CN202211501740.4A 2022-11-28 2022-11-28 弹幕的显示方法、装置以及电子设备 Pending CN117014689A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211501740.4A CN117014689A (zh) 2022-11-28 2022-11-28 弹幕的显示方法、装置以及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211501740.4A CN117014689A (zh) 2022-11-28 2022-11-28 弹幕的显示方法、装置以及电子设备

Publications (1)

Publication Number Publication Date
CN117014689A true CN117014689A (zh) 2023-11-07

Family

ID=88562524

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211501740.4A Pending CN117014689A (zh) 2022-11-28 2022-11-28 弹幕的显示方法、装置以及电子设备

Country Status (1)

Country Link
CN (1) CN117014689A (zh)

Similar Documents

Publication Publication Date Title
WO2022116759A1 (zh) 图像渲染方法、装置、计算机设备和存储介质
CN107832108B (zh) 3D canvas网页元素的渲染方法、装置及电子设备
KR100962920B1 (ko) 비주얼 및 장면 그래프 인터페이스
US7145562B2 (en) Integration of three dimensional scene hierarchy into two dimensional compositing system
US9928637B1 (en) Managing rendering targets for graphics processing units
US7716685B2 (en) Pluggable window manager architecture using a scene graph system
CN108876887B (zh) 渲染方法和装置
CN113411664B (zh) 基于子应用的视频处理方法、装置和计算机设备
CN110874217A (zh) 快应用的界面显示方法、装置及存储介质
CN112307403A (zh) 页面渲染方法、装置、存储介质以及终端
CN110968395A (zh) 一种在模拟器中处理渲染指令的方法及移动终端
CN110865863B (zh) 快应用的界面显示方法、装置及存储介质
Schwab et al. Scalable scalable vector graphics: Automatic translation of interactive svgs to a multithread vdom for fast rendering
KR20160120128A (ko) 디스플레이장치 및 그 제어방법
CN107133046B (zh) 页面搭建方法、装置和电子终端
CN114222185B (zh) 视频播放方法、终端设备及存储介质
CN117014689A (zh) 弹幕的显示方法、装置以及电子设备
CN106383705B (zh) 在应用瘦客户端中设置鼠标显示状态的方法及装置
CN112367295B (zh) 插件展示方法及装置、存储介质及电子设备
Cesar et al. A graphics architecture for high-end interactive television terminals
Sons et al. xml3d. js: Architecture of a Polyfill Implementation of XML3D
Hobson et al. Alpaca: AR graphics extensions for web applications
CN112347397A (zh) 基于浏览器的数据可视化方法、装置及可读存储介质
CN116661790B (zh) 跨平台渲染方法、装置以及电子设备
CN117708454A (zh) 网页内容处理方法、装置、设备、存储介质及程序产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication