CN111586489A - 弹幕渲染方法、装置、计算机设备及存储介质 - Google Patents
弹幕渲染方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN111586489A CN111586489A CN202010575265.XA CN202010575265A CN111586489A CN 111586489 A CN111586489 A CN 111586489A CN 202010575265 A CN202010575265 A CN 202010575265A CN 111586489 A CN111586489 A CN 111586489A
- Authority
- CN
- China
- Prior art keywords
- target
- bullet screen
- rendering
- texture
- bitmap
- 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
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/478—Supplemental services, e.g. displaying phone caller identification, shopping application
- H04N21/4788—Supplemental services, e.g. displaying phone caller identification, shopping application communicating with other users, e.g. chatting
-
- 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
- H04N21/4312—Generation 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/435—Processing of additional data, e.g. decrypting of additional data, reconstructing software from modules extracted from the transport stream
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- General Engineering & Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请实施例公开了一种弹幕渲染方法、装置、计算机设备及存储介质,属于计算机技术领域。该方法包括:获取目标时长内的目标弹幕;将目标弹幕绘制在同一位图中,得到目标位图;向显存上传目标位图对应的目标纹理,目标纹理中包括各条目标弹幕对应的弹幕纹理;响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对目标纹理中的弹幕纹理进行渲染。本申请实施例中,通过将目标弹幕绘制在同一张位图中,调用一次纹理上传指令将目标纹理上传至显存,减少了纹理上传次数,整个弹幕渲染过程中,只需调用一次渲染指令,就能实现批量弹幕渲染,避免因频繁调用渲染指令造成处理器过载,缓解了弹幕数量较多时播放卡顿的情况,提高了弹幕播放的流畅度。
Description
技术领域
本申请实施例涉及计算机技术领域,特别涉及一种弹幕渲染方法、装置、计算机设备及存储介质。
背景技术
弹幕是指在网络上观看视频时,视频画面在特定时刻弹出的评论性字幕。在播放视频时播放弹幕能够营造出与其他观众实时互动的感觉。
相关技术中,计算机设备在渲染弹幕的过程中,为了实现弹幕在屏幕中移动的效果通常需要利用主线程进行函数回调,从而将每条弹幕多次渲染在屏幕显示画面中的不同位置。
然而,当有大量弹幕需要绘制时,等待主线程回调函数的时间较长,并且需要多次调用开放型图库(Open Graphics Library,OpenGL)中的绘制指令进行硬件绘制,导致弹幕渲染效率低,容易出现弹幕播放卡顿的现象。
发明内容
本申请实施例提供了一种弹幕渲染方法、装置、计算机设备及存储介质,能够实现调用一次图形程序接口中的渲染指令完成批量弹幕的渲染,从而提高了弹幕渲染效率,有效缓解了弹幕数量较多时播放卡顿的情况。所述技术方案如下:
一方面,本申请实施例提供了一种弹幕渲染方法,所述方法包括:
获取目标时长内的目标弹幕;
将所述目标弹幕绘制在同一位图中,得到目标位图;
向显存上传所述目标位图对应的目标纹理,所述目标纹理中包括各条所述目标弹幕对应的弹幕纹理;
响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染。
另一方面,本申请实施例提供了一种弹幕渲染装置,所述装置包括:
第一获取模块,用于获取目标时长内的目标弹幕;
绘制模块,用于将所述目标弹幕绘制在同一位图中,得到目标位图;
传输模块,用于向显存上传所述目标位图对应的目标纹理,所述目标纹理中包括各条所述目标弹幕对应的弹幕纹理;
渲染模块,用于响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染。
另一方面,本申请实施例提供了一种计算机设备,所述计算机设备包括处理器和存储器;所述存储器存储有至少一条指令,所述至少一条指令用于被所述处理器执行以实现如上述方面所述的弹幕渲染方法。
另一方面,本申请实施例提供了一种计算机可读存储介质,所述存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如上述方面所述的弹幕渲染方法。
另一方面,本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面或上述方面的各种可选实现方式提供的弹幕渲染方法。
本申请实施例提供的技术方案的有益效果至少包括:
本申请实施例中,通过获取目标时长内的目标弹幕,将目标弹幕绘制在同一张位图中,并通过调用一次纹理上传指令将目标位图对应的目标纹理上传并保存在显存中,减少了纹理上传次数,方便后续同时完成批量弹幕的渲染,提高了弹幕渲染效率,整个弹幕渲染过程中,只需调用一次图形程序接口中的渲染指令,就能够实现批量弹幕的渲染,避免因频繁调用渲染指令造成的处理器过载,缓解了弹幕数量较多时播放卡顿的情况,提高了弹幕播放的流畅度。
附图说明
图1示出了本申请一个实施例提供的弹幕渲染方法的流程图;
图2示出了一种利用相关技术渲染弹幕时抓取到的部分纹理上传指令的示意图;
图3示出了一种利用相关技术渲染弹幕时抓取到的部分绘制指令的示意图;
图4示出了利用相关技术中的弹幕组件以及本申请弹幕组件的指令数量对比示意图;
图5示出了本申请另一个实施例提供的弹幕渲染方法的流程图;
图6示出了本申请一个实施例提供的目标纹理的示意图;
图7示出了本申请一个实施例提供的将目标弹幕上屏的示意图;
图8示出了一种相关技术提供的弹幕渲染方法的线程及流程图;
图9示出了本申请一个实施例提供的弹幕渲染方法的线程及流程图;
图10示出了本申请另一个实施例提供的弹幕渲染方法的流程图;
图11示出了相关技术与本申请实施例提供的弹幕渲染方法的刷新率对比图;
图12示出了相关技术与本申请实施例提供的弹幕渲染方法的卡顿次数对比图;
图13示出了相关技术与本申请实施例提供的弹幕渲染方法的垃圾回收次数对比图;
图14示出了相关技术与本申请实施例提供的弹幕渲染方法的CPU消耗对比图;
图15示出了本申请一个实施例提供的弹幕渲染装置的结构框图;
图16示出了本申请一个实施例提供的计算机设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
首先,对本申请实施例中涉及的名词进行介绍:
1)位图
位图(Bitmap)又称为栅格图或点阵图,是使用像素阵列表示的图像。这些点可以进行不同的排列和染色以构成图样。用数码相机拍摄的照片、扫描仪扫描的图片以及计算机截屏图等都属于位图。
2)纹理
内存中的位图上传至显存后,计算机设备将其保存为纹理(Texture)。后续计算机设备进行弹幕渲染时,直接对保存在显存中的纹理进行渲染,从而实现将弹幕显示在显示器中。
3)图形程序接口
图形程序接口(Graphics Application Programming Interface,GraphicsAPI)是一套可编程的开放标准,用于支持图形的渲染,开发者在调用系统硬件进行图形渲染时,通过借助图形程序接口中的指令就能够访问硬件,不需要独立开发调用硬件接口的程序。
4)垃圾回收
垃圾回收(Garbage Collection,GC)是指计算机设备追踪所有正在使用的对象,并且将剩余的对象标记为垃圾,随后标记为垃圾的对象会被清除,回收这些垃圾对象占据的内存,从而实现内存的自动管理。
5)DrawCall
DrawCall是指中央处理器(Central Processing Unit,CPU)调用图形编程接口,比如DirectX或OpenGL,来命令图形处理器(Graphics Processing Unit,GPU)进行渲染操作的过程。在每次调用Draw Call之前,CPU需要向GPU发送很多内容,包括数据,状态,命令等。在这一阶段,CPU需要完成大量工作,例如检查渲染状态等。CPU完成了准备工作后,GPU则开始进行本次的渲染。GPU的渲染能力较强,可以实现大量图形的并行渲染,因此GPU的渲染速度通常快于CPU发送指令的速度。如果Draw Call的数量过多,CPU会把大量时间花费在发送Draw Call指令上,造成CPU的过载。
请参考图1,其示出了本申请一个示例性实施例提供的弹幕渲染方法的流程图。本实施例以该方法由安装有具有弹幕功能的应用程序的计算机设备执行为例进行说明,该过程包括如下步骤:
步骤101,获取目标时长内的目标弹幕。
其中,目标时长是指弹幕播放时长。在一种可能的实施方式中,计算机设备接收服务器发送的弹幕,并一次获取目标时长内的弹幕作为目标弹幕。例如,计算机设备一次获取2s内的所有弹幕作为目标弹幕。
可选的,目标弹幕包括文字、符号、图片、表情中的至少一种。
示意性的,当用户通过计算机设备播放视频,并开启该视频的视频弹幕时,计算机设备一次获取视频播放时长2s内的弹幕作为目标弹幕。
步骤102,将目标弹幕绘制在同一位图中,得到目标位图。
位图又称为栅格图或点阵图,是使用像素阵列表示的图像。由于目标弹幕最终需要渲染并显示在显示器中,因此首先将目标弹幕包含的文字、符号以及图片等信息绘制在位图中,得到目标位图。
在一种可能的实施方式中,计算机设备利用操作系统提供的图像像素处理工具对目标弹幕进行软绘制,例如画布(Canvas)的接口,得到目标位图。
步骤103,向显存上传目标位图对应的目标纹理,目标纹理中包括各条目标弹幕对应的弹幕纹理。
显存是计算机设备用于存储已经处理过或即将提取的渲染数据的存储设备。由于软绘制得到的目标位图存储在内存中,而显示屏所显示的画面是由像素点构成的,每个像素点包含的数据需要由显存来保存,因此计算机设备在得到目标位图后,将目标位图对应的目标纹理保存至显存中。
在一种可能的实施方式中,计算机设备调用图形程序接口中的纹理上传指令(例如OpenGL中的glTexImage2D和glTexSubImage2D),CPU接收到该纹理上传指令后,将内存中的目标位图复制并转换为目标位图,保存在显存中。
步骤104,响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对目标纹理中的弹幕纹理进行渲染。
图形程序接口是一套可编程的开放标准,用于支持图形的渲染,开发者在调用系统硬件进行图形渲染时,通过借助图形程序接口中的渲染指令就能够访问硬件,不需要独立开发调用硬件接口的程序。
在一种可能的实施方式中,由于弹幕在显示器中移动显示,计算机设备需要对目标弹幕进行多次渲染,并且每次渲染在不同的位置,因此需要借助弹幕刷新信号,在该信号提示弹幕需要刷新时,计算机设备调用一次渲染指令,将目标纹理中的弹幕纹理渲染在相应位置。
其中,图形程序接口包括如下至少一种:OpenGL、Vulkan、Metal、开放运算语言(Open Computing Language,OpenCL)、DirectX和Web图形库(Web Graphics Library,WebGL)。
可选的,本申请实施例以图形程序接口采用OpenGL为例进行说明。
示意性的,当目标弹幕为视频弹幕时,计算机设备将垂直同步(Vertical Sync,VSync)信号作为弹幕刷新信号,使弹幕与视频帧同步刷新。
由于目标时长内的目标弹幕被绘制在同一目标纹理中,因此计算机设备只需调用一次图形程序接口中的渲染指令,就能够完成目标时长内的弹幕的渲染。而相关技术中,计算机设备每接收到一条弹幕就将其绘制在一张位图中,因此在进行渲染时,若弹幕数量较大,同样接收到一次弹幕刷新信号,计算机设备需要调用多次渲染指令,其调用次数由弹幕数量决定,而调用图形程序接口中的渲染指令这一过程会对计算机设备产生较大的性能消耗。因此相对于相关技术,本申请实施例的方法在弹幕数量较大时渲染效率高。如图2所示,其示出了利用开源图形结构调试工具(GraphicsAPIDebugger,GAPID)对相关技术中的渲染指令进行截取的结果,图中只展示了相关技术中绘制一帧弹幕时的部分渲染指令,左侧为指令展示界面201,开发人员通过在指令搜索框202中输入相应的绘制指令,使GAPID截取该指令,并将结果展示在下方,由于相关技术是逐条弹幕进行绘制,因此当一帧包含的弹幕数量较多时,除了需要调用多次绘制指令外,还需要调用多次纹理上传指令203使每一条弹幕的位图上传为显存中的纹理。如图3所示,左侧的指令展示界面301展示了绘制一帧弹幕需要调用的部分绘制指令302,可以看出,在一批弹幕从开始显示至显示完成的过程中,计算机设备不仅需要多次调用绘制指令使弹幕渲染在不同的位置,实现弹幕移动,而且在一次移动过程中同样需要调用多次绘制指令,将每一条弹幕渲染在相应位置。图4示出了本申请弹幕组件与相关技术中其它弹幕组件绘制58条相同的弹幕时调用的指令对比示意图。指令数量栏401示出了GAPID截取到的指令数量,可以看出相关技术中的弹幕组件调用指令的次数远远大于本申请的弹幕组件,绘制次数栏402示出了两种弹幕组件绘制本次58条弹幕的次数,相关技术中的弹幕组件需要绘制58次,而本申请弹幕组件只需绘制一次,就能够完成58条弹幕的渲染。截取指令栏403展示了GAPID截取到的部分指令,可以看出,本申请弹幕组件对于一个框架(Frame)的绘制指令远小于相关技术中的弹幕组件。
综上所述,本申请实施例中,通过获取目标时长内的目标弹幕,将目标弹幕绘制在同一张位图中,并通过调用一次纹理上传指令将目标位图对应的目标纹理上传并保存在显存中,减少了纹理上传次数,方便后续同时完成批量弹幕的渲染,提高了弹幕渲染效率,整个弹幕渲染过程中,只需调用一次图形程序接口中的渲染指令,就能够实现批量弹幕的渲染,避免因频繁调用渲染指令造成的处理器过载,缓解了弹幕数量较多时播放卡顿的情况,提高了弹幕播放的流畅度。
弹幕渲染过程中,计算机设备通常利用CPU调用渲染指令,通过GPU完成实际的渲染过程。每一次渲染时CPU都需要调用渲染指令,指令调用次数取决于当前弹幕的数量,因此,弹幕数量越多,指令调用次数越多,CPU性能消耗越严重,并且相关技术中逐条弹幕进行渲染的方法,GPU针对每条弹幕都需要完成一次完整的DrawCall过程,一次DrawCall只渲染一条弹幕,并不能利用GPU的并行渲染能力,导致CPU负担过重而GPU得不到充分利用。本申请示例性实施例提供的弹幕渲染方法采用同时渲染多条弹幕的方式,提高弹幕渲染效率,同时可以充分利用GPU的并行渲染能力。
请参考图5,其示出了本申请另一个示例性实施例提供的弹幕渲染方法的流程图。本实施例以该方法由安装有具有弹幕功能的应用程序的计算机设备执行为例进行说明,该过程包括如下步骤:
步骤501,获取目标时长内的目标弹幕。
由于本申请实施例是一次获取目标时长内的目标弹幕,在获取到所有的目标弹幕前并不会绘制已获取到的部分目标弹幕,因此可能会造成部分目标弹幕显示延迟的问题。针对上述问题,本申请实施例采取动态调整弹幕获取周期的方法进行弹幕获取。
在一种可能的实施方式中,本申请实施例提供的弹幕渲染方法还包括如下步骤一至三:
步骤一,获取目标时长内目标弹幕的弹幕数量。
在一种可能的实施方式中,开发人员通常会设置一个默认的目标时长,该目标时长适用于大部分情况下的弹幕渲染方法。然而当弹幕数量过多或过少时,默认的目标时长可能不适用。例如,当弹幕数量过多时,延迟显示的弹幕也较多;弹幕数量过少时,计算机设备一次获取的弹幕数量较少,弹幕渲染效率提升不明显。因此,计算机设备基于目标时长内目标弹幕的弹幕数量动态调整目标时长。
步骤二,响应于弹幕数量大于第一数量阈值,下调目标时长。
基于上述问题,当弹幕数量过多时,延迟显示的弹幕也较多,因此需要适当下调目标时长。
在一种可能的实施方式中,计算机设备设置有第一数量阈值,当本次获取到的目标弹幕的弹幕数量大于第一数量阈值时,计算机设备下调目标时长。
示意性的,默认的目标时长为2s,第一数量阈值为100。若当前目标时长内目标弹幕的弹幕数量大于100,则计算机设备将目标时长下调至1.5s。
步骤三,响应于弹幕数量小于第二数量阈值,上调目标时长。
基于步骤一中的问题,当弹幕数量过少时,弹幕渲染效率提升不明显,因此需要适当上调目标时长。
在一种可能的实施方式中,计算机设备设置有第二数量阈值,当本次获取到的目标弹幕的弹幕数量小于第二数量阈值时,计算机设备上调目标时长。其中,第二数量阈值小于第一数量阈值。
示意性的,默认的目标时长为2s,第二数量阈值为10。若当前目标时长内目标弹幕的弹幕数量小于10,则计算机设备将目标时长上调至2.5s。
步骤502,确定目标弹幕拼接后的弹幕总尺寸,弹幕总尺寸包括弹幕总宽度和弹幕总高度。
由于计算机设备需要将获取到的目标弹幕绘制在一张位图中,因此在绘制前首先需要根据目标弹幕确定所需的位图的尺寸。
在一种可能的实施方式中,计算机设备确定目标弹幕按预定方式拼接后的弹幕总尺寸,可选的,目标弹幕的字体、字号相同,且一条弹幕内容显示为一行,因此各条目标弹幕的高度相同。为了尽可能地减少弹幕所需位图的尺寸,该预定方式为先确定出弹幕总宽度,然后将各条目标弹幕按首尾相接的方式进行拼接,当下一条目标弹幕的弹幕宽度大于弹幕总宽度与当前一行弹幕宽度的差时,将下一条弹幕拼接在下一行的头部,以此类推,直至目标弹幕拼接完成,得到目标弹幕拼接后的弹幕总高度。如图6所示,弹幕601和弹幕602首尾相接,若继续将弹幕603拼接在弹幕602之后,则会导致弹幕总宽度超出预设的宽度,因此弹幕603拼接在第二行的开头。
可选的,弹幕总宽度也是动态调整的,计算机设备根据目标弹幕的弹幕数量,从预先提供的弹幕总宽度中选取合适的弹幕总宽度。示意性的,预先提供的弹幕总宽度包括10px、360px、720px和1024px,当目标弹幕的弹幕数量大于100时,计算机设备选取1024px作为弹幕总宽度,当目标弹幕数量小于5时,计算机设备选取10px作为弹幕总宽度。
步骤503,响应于位图缓存池中存在满足弹幕总尺寸的候选位图,在候选位图中绘制目标弹幕,得到目标位图。
其中,满足弹幕总尺寸的候选位图的位图宽度大于等于弹幕总宽度,且候选位图的位图高度大于等于弹幕总高度。
计算机设备内存中存在位图的缓存池,例如在安卓(Android)系统中,位图缓存池为本地(Native)内存中的SkBitmap。
在一种可能的实施方式中,计算机设备确定出目标弹幕的弹幕总尺寸后,首先查询位图缓存池中是否存在满足弹幕总尺寸的候选位图,若存在,则获取一张候选位图,并在该候选位图中按步骤502中的拼接方式绘制目标弹幕,得到目标位图。
步骤504,响应于位图缓存池中不存在满足弹幕总尺寸的候选位图,创建满足弹幕总尺寸的位图,并在创建的位图中绘制目标弹幕,得到目标位图。
在一种可能的实施方式中,若位图缓存池中不存在空白位图,或空白位图中不存在满足弹幕总尺寸的候选位图,则计算机设备在位图缓存池中创建一张满足弹幕总尺寸的空白位图,并在改位图中绘制目标弹幕,得到目标位图。
步骤505,向显存上传目标位图对应的目标纹理,目标纹理中包括各条目标弹幕对应的弹幕纹理。
步骤505的实施方式参考上述步骤103,本申请实施例在此不再赘述。
目标位图绘制完成后存储在内存中,并且在向内存上传目标纹理的过程中也存储在内存中。相关技术中,由于后续进行弹幕渲染时计算机设备利用回调函数(onDraw)进行硬件绘制,因此需要将绘制有目标弹幕的位图存储在内存中,直至所有的绘制流程结束,即弹幕从头部开始显示到尾部显示完成过程中,计算机设备无法删除绘制有该条弹幕的位图,该位图也无法被回收和复用。而本申请实施例提供的方法中,由于不需要利用onDraw回调,因此计算机设备在目标纹理上传完成后立即释放目标位图对应的内存,同时回收对应的空白位图。
在一种可能的实施方式中,步骤505之后,本申请实施例提供的弹幕绘制方法还包括:从内存中删除目标位图,并将目标位图对应的空白位图回收至位图缓存池。回收至缓存池中的空白位图还能够继续用于绘制弹幕。
可选的,对于位图缓存池中超过预定时长没有被用于绘制目标弹幕的空白位图,计算机设备将对其进行GC,从而清除利用率较小的空白位图,避免浪费内存资源。
步骤506,响应于弹幕刷新信号,通过CPU调用图形程序接口向GPU发送渲染指令。
在一种可能的实施方式中,计算机设备的CPU负责调用图形程序接口的渲染指令并发送至GPU,实际的渲染过程由GPU实现。本申请实施例所提供的弹幕渲染方法中,对于目标时长内的目标弹幕,在一次渲染过程中CPU只需向GPU发送一次渲染指令。
步骤507,响应于渲染指令,通过GPU对目标纹理中的弹幕纹理进行渲染,其中,目标纹理中的弹幕纹理在GPU中并行渲染。
相应的,GPU接收到一次渲染指令后,将对应的目标纹理中的各条弹幕纹理同时进行渲染,完成当前弹幕刷新信号对应的一帧弹幕的绘制。
在一种可能的实施方式中,计算机设备将目标纹理中的弹幕纹理渲染在外接纹理(如SurfaceTexture)中,最终由系统提供的接口完成外接纹理上屏。因此计算机设备在渲染弹幕时只需刷新外接纹理,而不需要同时绘制显示屏所显示的全部画面。
由于本申请实施例提供的弹幕渲染方法通常用于渲染批量弹幕,因此目标纹理中包含多条目标弹幕的弹幕纹理,而弹幕纹理在目标纹理中的拼接位置与目标弹幕实际在显示器中的显示位置不同,因此计算机设备需要根据弹幕纹理在目标纹理中的坐标和目标弹幕实际的显示位置,将各条弹幕纹理渲染在相应位置。在一种可能的实施方式中,步骤507包括如下步骤一至三:
步骤一,获取目标纹理中各条弹幕纹理对应的纹理坐标和目标弹幕对应的顶点坐标,纹理坐标用于指示目标弹幕对应弹幕纹理在目标纹理中的坐标,顶点坐标用于指示目标弹幕所处显示位置的坐标。
在一种可能的实施方式中,计算机设备接收到服务器发送的弹幕后,获取弹幕内容、弹幕显示时刻以及顶点坐标,并确定顶点坐标对应的像素点在目标纹理中的纹理坐标。
可选的,纹理坐标包括弹幕纹理的至少两个点在目标纹理中的横坐标和纵坐标,顶点坐标包括目标弹幕的至少两个点在显示位置处的横坐标和纵坐标,纹理坐标与顶点坐标一一对应。
步骤二,根据纹理坐标从目标纹理中提取弹幕纹理。
在一种可能的实施方式中,由于需要将各条目标弹幕的纹理绘制到相应的显示位置,因此计算机设备在进行绘制前首先提取弹幕纹理。
可选的,计算机设备根据目标弹幕四周多个点的纹理坐标提取弹幕纹理,本申请实施例对此不作限定。示意性的,计算机设备获取目标弹幕的弹幕纹理对应矩形的四个顶点在目标纹理中的坐标,作为目标弹幕的纹理坐标,
步骤三,通过GPU在顶点坐标所指示的显示位置处渲染弹幕纹理。
在一种可能的实施方式中,CPU通过调用图形程序接口中的渲染指令,来命令GPU进行渲染的操作,例如OpenGL中的DrawCall过程。
示意性的,请参考图7,其示出了一种根据纹理坐标和顶点坐标渲染弹幕纹理的示意图。计算机设备获取各条目标弹幕的弹幕纹理对应矩形上边缘的两个端点的顶点坐标和纹理坐标,根据纹理坐标和弹幕纹理的高度,从目标纹理中抽取需要显示的弹幕纹理,并绘制在顶点坐标所指示的显示位置处。如图7所示,目标纹理701中包含弹幕纹理a、弹幕纹理b和弹幕纹理c,计算机设备获取三条弹幕纹理上边缘的两个端点的纹理坐标,将三条弹幕纹理从目标纹理中提取,并根据弹幕纹理a、弹幕纹理b和弹幕纹理c上边缘的两个端点在显示器702中的顶点坐标,将三条弹幕纹理渲染在相应的显示位置。
由于需要实现弹幕在显示器中移动显示,因此计算机设备在每一次弹幕刷新时需要变换弹幕的显示位置,并根据新的显示位置进行渲染。在一种可能的实施方式中,在步骤三之后,步骤507还包括如下步骤四和五:
步骤四,根据目标弹幕的弹幕移动速度以及弹幕刷新率,确定目标弹幕的弹幕偏移量,弹幕偏移量为同一条弹幕在相邻两次弹幕刷新时所处显示位置的偏移量。
在一种可能的实施方式中,开发人员预先设置了弹幕移动速度和弹幕刷新率,弹幕在显示器中按照弹幕移动速度匀速移动显示。弹幕移动速度除以弹幕刷新率即可得到弹幕偏移量。
示意性的,弹幕移动速度为360px每秒,弹幕刷新率为60fps(即每秒刷新60帧),确定目标弹幕的弹幕偏移量为6px,即相邻两次弹幕刷新时目标弹幕所处显示位置横向偏移6px。
步骤五,根据弹幕偏移量更新目标弹幕对应的顶点坐标。
在一种可能的实施方式中,计算机设备完成一次目标弹幕的渲染后,根据弹幕偏移量更新目标弹幕对应的顶点坐标,即确定出目标弹幕的弹幕纹理下一次渲染时的顶点坐标。
可选的,计算机设备渲染弹幕纹理前,根据前一次渲染时的顶点坐标以及弹幕偏移量,确定出当前的顶点坐标,本申请实施例对此不作限定。
示意性的,弹幕移动速度为360px每秒,弹幕刷新率为60fps,当GPU接收到CPU发送的渲染指令时,确定目标弹幕上一次渲染时的顶点坐标,例如上一次渲染时某一点的顶点坐标为(1024px,360px),则在该顶点坐标的横坐标的基础上减6px得到该点在本次渲染的顶点坐标,即(1018px,360px)。
步骤508,响应于达到目标弹幕的弹幕生命周期,从显存中删除目标纹理。
其中,弹幕生命周期是指从目标弹幕中第一条弹幕开始显示,至最后一条弹幕显示完成的过程。
可选的,当目标弹幕中最后一条弹幕的尾部的顶点坐标达到显示器左侧时,计算机设备确定达到目标弹幕的弹幕生命周期,因此不需要保存目标纹理,立即从显存中删除目标纹理。
在一种可能的实施方式中,若未达到目标弹幕的弹幕生命周期,则继续执行步骤506和步骤507。
本申请实施例中,通过确定目标弹幕拼接后的弹幕总尺寸选取空白位图,将目标弹幕绘制在一张位图中,使计算机设备后续进行渲染时只需通过CPU调用一次渲染指令,就能通过GPU完成对批量弹幕的渲染,降低了CPU调用渲染指令的负担,充分发挥了GPU的并行能力,提高了弹幕渲染的效率;并且,当目标纹理成功上传至显存后,可以立即回收目标位图,减小了弹幕渲染所占用的内存。
相关技术中,弹幕渲染中主要的命令调用需要依赖应用程序的主线程,如图8所示,其示出了一种相关技术中渲染弹幕所需的线程以及各线程对应的流程。工作线程801用于获取一条弹幕;将弹幕绘制在空白位图中。其中,空白位图从位图缓存池中获取。主线程802用于监听弹幕刷新信号;进行onDraw回调;向GPU发送渲染指令。系统渲染线程803用于上传一条弹幕的纹理;执行渲染指令。该过程中,大部分函数的调用需要通过主线程完成,当弹幕较多时,会大量占用主线程资源。
在一种可能的实施方式中,为了提高弹幕渲染效率,同时避免过多占用主线程,本申请实施例提供的弹幕渲染方法中提供了独立于主线程之外的线程,用于实现弹幕渲染。如图9所示,其示出了本申请实施例提供的弹幕渲染方法所需的线程以及个线程对应的流程。其中,工作线程901和本地渲染线程902为应用程序中独立于主线程之外的线程,系统渲染线程903为计算机设备的操作系统提供的系统线程。工作线程901用于获取目标时长内的目标弹幕;将目标弹幕绘制在同一位图中,得到目标位图;将目标位图对应的目标纹理异步上传至显存。本地渲染线程902用于当接收到弹幕刷新信号时,调用图形程序接口中的渲染指令,对目标纹理中的弹幕纹理进行渲染。系统渲染线程903用于将渲染得到的目标弹幕进行上屏。其中,异步上传是指在工作线程901中上传目标纹理,而在本地渲染线程902中对弹幕纹理进行渲染。由于弹幕纹理的渲染最终需要GPU执行,因此弹幕纹理在首次渲染时需要将目标位图对应的目标纹理上传并保存在显存中,后续GPU在进行渲染时直接对显存中的目标纹理进行渲染。在目标弹幕较少时,纹理上传并不会占用过多的时长,而当目标弹幕较多时,纹理上传需要大量的时间,如果纹理上传和弹幕渲染使用同一条线程,则大量纹理的上传会使渲染延迟,从而导致显示器播放的弹幕严重掉帧。因此,为了避免大量弹幕上传占用线程时间过长的问题,本申请实施例采用异步上传的方式,即在工作线程中完成目标纹理的上传,在本地渲染线程中进行目标弹幕渲染。
请参考图10,其示出了本申请另一个示例性实施例提供的弹幕渲染方法的流程图。本实施例以该方法由安装有具有弹幕功能的应用程序的计算机设备执行为例进行说明,该过程包括如下步骤:
步骤101,工作线程获取目标时长内的目标弹幕。
步骤102,工作线程将目标弹幕绘制在同一位图中,得到目标位图。
步骤103,工作线程调用图形程序接口中的纹理上传指令,向显存上传目标位图对应的目标纹理。
在一种可能的实施方式中,计算机设备中包含独立于主线程的工作线程,用于获取目标弹幕、绘制目标位图以及向显存上传目标位图对应的目标纹理。
步骤104,本地渲染线程响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对目标纹理中的弹幕纹理进行渲染。
其中,工作线程与本地渲染线程均独立于主线程,工作线程与本地渲染线程为异步线程,且工作线程与本地渲染线程共享渲染上下文信息。
OpenGL的渲染上下文与线程绑定,计算机设备执行OpenGL的指令时需要在线程中完成,并且通常情况下纹理上传也需要占用渲染线程。然而本申请实施例中,为了避免大量弹幕的纹理上传延时,导致弹幕显示掉帧的情况,采用了双线程异步上传纹理的方法,即纹理上传和弹幕渲染不在同一线程进行,因此需要共享渲染上下文信息。
在一种可能的实施方式中,计算机设备在调用渲染指令之前创建EGLContext,并将需要共享的渲染上下文信息传入EGLContext,即可实现工作线程与本地渲染线程的共享上下文。
示意性的,创建EGLContext的程序如下:
Public abstract EGLContexteglCreateContext(EGLDisplay display,//创建EGLDisplay
EGLConfig config,//创建EGLConfig
EGLContextshare_context,//创建EGLContext
Int[]attrib_list)//指定需要参照的属性
步骤105,系统渲染线程对本地渲染线程渲染得到的目标弹幕进行上屏。
在一种可能的实施方式中,计算机设备通过本地渲染线对目标纹理中的弹幕纹理渲染完成后,需要将渲染得到的外接纹理上屏显示。可选的,计算机设备通过计算机设备操作系统提供的系统渲染线程,将包含目标弹幕的外接纹理上屏显示。
示意性的,请参考图11至图14,其示出了相关技术与本申请实施例提供的两种弹幕渲染方法的性能对比。如图11所示,在弹幕频率分别为1条/秒、5条/秒、20条/秒和50条/秒的情况下,利用相关技术与本申请实施例提供的两种弹幕渲染方法进行弹幕渲染,实际刷新频率在弹幕数量较多时存在差异。相关技术的刷新率1101与本申请实施例提供的弹幕渲染方法的刷新率1102在弹幕频率小于20条/秒时差异不大,当弹幕频率大于20条/秒时,相关技术的刷新率1101开始快速下降,说明相关技术的弹幕渲染方法在弹幕数量较多时弹幕渲染时间长,弹幕刷新缓慢。如图12所示,在弹幕频率小于5条/秒时,相关技术的卡顿次数1201与本申请实施例提供的弹幕渲染方法的卡顿次数1202相差不大,在弹幕频率大于5条/秒时,相关技术的卡顿次数1201开始明显增多,而本申请实施例提供的弹幕渲染方法的卡顿次数1202增长缓慢,在弹幕频率大于50条/秒时卡顿次数依然较少。如图13所示,随着弹幕频率的增大,相关技术的GC次数1301与本申请实施例提供的弹幕渲染方法的GC次数1302同步上升,但本申请实施例提供的弹幕渲染方法的GC次数1302始终小于相关技术的GC次数1301。如图14所示,在弹幕数量较少时,相关技术的CPU消耗1301与本申请实施例提供的弹幕渲染方法的CPU消耗1402相差不大,当弹幕频率大于5条/秒时,相关技术的CPU消耗1401明显大于本申请实施例提供的弹幕渲染方法的CPU消耗1402,且弹幕频率越大,二者相差越明显。
本申请实施例中,通过建立独立于主线程的工作线程与本地渲染线程,完成批量弹幕的获取以及渲染,避免弹幕较多时,需要等待主线程回调,占用主线程时间,提高了弹幕渲染的效率。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参考图15,其示出了本申请一个实施例提供的弹幕渲染装置的框图。该装置1500可以包括:第一获取模块1501、绘制模块1502、传输模块1503和渲染模块1504。
第一获取模块1501,用于获取目标时长内的目标弹幕;
绘制模块1502,用于将所述目标弹幕绘制在同一位图中,得到目标位图;
传输模块1503,用于向显存上传所述目标位图对应的目标纹理,所述目标纹理中包括各条所述目标弹幕对应的弹幕纹理;
渲染模块1504,用于响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染。
可选的,所述渲染模块1504,包括:
发送单元,用于响应于所述弹幕刷新信号,通过中央处理器CPU调用所述图形程序接口向图形处理器GPU发送所述渲染指令;
第一渲染单元,用于响应于所述渲染指令,通过所述GPU对所述目标纹理中的所述弹幕纹理进行渲染,其中,所述目标纹理中的所述弹幕纹理在所述GPU中并行渲染。
可选的,所述渲染单元,还用于:
获取所述目标纹理中各条所述弹幕纹理对应的纹理坐标和所述目标弹幕对应的顶点坐标,所述纹理坐标用于指示所述目标弹幕对应弹幕纹理在所述目标纹理中的坐标,所述顶点坐标用于指示所述目标弹幕所处显示位置的坐标;
根据所述纹理坐标从所述目标纹理中提取所述弹幕纹理;
通过所述GPU在所述顶点坐标所指示的显示位置处渲染所述弹幕纹理。
可选的,所述装置还包括:
确定模块,用于根据所述目标弹幕的弹幕移动速度以及弹幕刷新率,确定所述目标弹幕的弹幕偏移量,所述弹幕偏移量为同一条弹幕在相邻两次弹幕刷新时所处显示位置的偏移量;
更新模块,用于根据所述弹幕偏移量更新所述目标弹幕对应的所述顶点坐标。
可选的,所述传输模块1503,包括:
传输单元,用于通过工作线程调用所述图形程序接口中的纹理上传指令,向显存上传所述目标位图对应的所述目标纹理;
所述渲染模块1504,还包括:
第二渲染单元,用于响应于所述弹幕刷新信号,通过本地渲染线程调用所述图形程序接口中的所述渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染;
其中,所述工作线程与所述本地渲染线程均独立于主线程,所述工作线程与所述本地渲染线程为异步线程,且所述工作线程与所述本地渲染线程共享渲染上下文信息。
可选的,所述装置还包括:
上屏模块,用于通过系统渲染线程对所述本地渲染线程渲染得到的目标弹幕进行上屏。
可选的,所述绘制模块1502,包括:
确定单元,用于确定所述目标弹幕拼接后的弹幕总尺寸,所述弹幕总尺寸包括弹幕总宽度和弹幕总高度;
绘制单元,用于响应于位图缓存池中存在满足所述弹幕总尺寸的候选位图,在所述候选位图中绘制所述目标弹幕,得到所述目标位图;
创建单元,用于响应于所述位图缓存池中不存在满足所述弹幕总尺寸的候选位图,创建满足所述弹幕总尺寸的位图,并在创建的位图中绘制所述目标弹幕,得到所述目标位图;
其中,所述候选位图的位图宽度大于等于所述弹幕总宽度,且所述候选位图的位图高度大于等于所述弹幕总高度。
可选的,所述目标位图存储在内存中;
所述装置还包括:
回收单元,用于从内存中删除所述目标位图,并将所述目标位图对应的空白位图回收至所述位图缓存池。
可选的,所述装置还包括:
第二获取模块,用于获取所述目标时长内所述目标弹幕的弹幕数量;
第一调整模块,用于响应于所述弹幕数量大于第一数量阈值,下调所述目标时长;
第二调整模块,用于响应于所述弹幕数量小于第二数量阈值,上调所述目标时长。
可选的,所述图形程序接口包括如下至少一种:OpenGL、Vulkan、Metal、OpenCL、DirectX和WebGL。
本申请实施例中,通过获取目标时长内的目标弹幕,将目标弹幕绘制在同一张位图中,并通过调用一次纹理上传指令将目标位图对应的目标纹理上传并保存在显存中,减少了纹理上传次数,方便后续同时完成批量弹幕的渲染,提高了弹幕渲染效率,整个弹幕渲染过程中,只需调用一次图形程序接口中的渲染指令,就能够实现批量弹幕的渲染,避免因频繁调用渲染指令造成的处理器过载,缓解了弹幕数量较多时播放卡顿的情况,提高了弹幕播放的流畅度。
本申请实施例中,通过确定目标弹幕拼接后的弹幕总尺寸选取空白位图,将目标弹幕绘制在一张位图中,使计算机设备后续进行渲染时只需通过CPU调用一次渲染指令,就能通过GPU完成对批量弹幕的渲染,降低了CPU调用渲染指令的负担,充分发挥了GPU的并行能力,提高了弹幕渲染的效率;并且,当目标纹理成功上传至显存后,可以立即回收目标位图,减小了弹幕渲染所占用的内存。
本申请实施例中,通过建立独立于主线程的工作线程与本地渲染线程,完成批量弹幕的获取以及渲染,避免弹幕较多时,需要等待主线程回调,占用主线程时间,提高了弹幕渲染的效率。
请参考图16,其示出了本申请一个实施例提供的计算机设备的结构框图。通常,计算机设备1600包括有:处理器1601和存储器1602。
处理器1601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(FieldProgrammable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1601可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1602中的非暂态的计算机可读存储介质用于存储至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、至少一段程序、代码集或指令集用于被处理器1601所执行以实现本申请中方法实施例提供的弹幕渲染方法。
在一些实施例中,计算机设备1600还可选包括有:外围设备接口1603和至少一个外围设备。处理器1601、存储器1602和外围设备接口1603之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1603相连。具体地,外围设备可以包括:通信接口1604、显示屏1605、音频电路1606、摄像头组件1607、定位组件1608和电源1609中的至少一种。
本领域技术人员可以理解,图16中示出的结构并不构成对计算机设备1600的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现如上各个实施例所述的弹幕渲染方法。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面或上述方面的各种可选实现方式提供的弹幕渲染方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读存储介质中或者作为计算机可读存储介质上的一个或多个指令或代码进行传输。计算机可读存储介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (14)
1.一种弹幕渲染方法,其特征在于,所述方法包括:
获取目标时长内的目标弹幕;
将所述目标弹幕绘制在同一位图中,得到目标位图;
向显存上传所述目标位图对应的目标纹理,所述目标纹理中包括各条所述目标弹幕对应的弹幕纹理;
响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染。
2.根据权利要求1所述的方法,其特征在于,所述响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染,包括:
响应于所述弹幕刷新信号,通过中央处理器CPU调用所述图形程序接口向图形处理器GPU发送所述渲染指令;
响应于所述渲染指令,通过所述GPU对所述目标纹理中的所述弹幕纹理进行渲染,其中,所述目标纹理中的所述弹幕纹理在所述GPU中并行渲染。
3.根据权利要求2所述的方法,其特征在于,所述通过所述GPU对所述目标纹理中的所述弹幕纹理进行渲染,包括:
获取所述目标纹理中各条所述弹幕纹理对应的纹理坐标和所述目标弹幕对应的顶点坐标,所述纹理坐标用于指示所述目标弹幕对应弹幕纹理在所述目标纹理中的坐标,所述顶点坐标用于指示所述目标弹幕所处显示位置的坐标;
根据所述纹理坐标从所述目标纹理中提取所述弹幕纹理;
通过所述GPU在所述顶点坐标所指示的显示位置处渲染所述弹幕纹理。
4.根据权利要求3所述的方法,其特征在于,所述通过所述GPU在所述顶点坐标所指示的显示位置处渲染所述弹幕纹理之后,所述方法还包括:
根据所述目标弹幕的弹幕移动速度以及弹幕刷新率,确定所述目标弹幕的弹幕偏移量,所述弹幕偏移量为同一条弹幕在相邻两次弹幕刷新时所处显示位置的偏移量;
根据所述弹幕偏移量更新所述目标弹幕对应的所述顶点坐标。
5.根据权利要求1至4任一所述的方法,其特征在于,所述向显存上传所述目标位图对应的目标纹理,包括:
通过工作线程调用所述图形程序接口中的纹理上传指令,向显存上传所述目标位图对应的所述目标纹理;
所述响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染,包括:
响应于所述弹幕刷新信号,通过本地渲染线程调用所述图形程序接口中的所述渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染;
其中,所述工作线程与所述本地渲染线程均独立于主线程,所述工作线程与所述本地渲染线程为异步线程,且所述工作线程与所述本地渲染线程共享渲染上下文信息。
6.根据权利要求5所述的方法,其特征在于,所述通过本地渲染线程调用所述图形程序接口中的所述渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染之后,所述方法还包括:
通过系统渲染线程对所述本地渲染线程渲染得到的目标弹幕进行上屏。
7.根据权利要求1至4任一所述的方法,其特征在于,所述将所述目标弹幕绘制在同一位图中,得到目标位图,包括:
确定所述目标弹幕拼接后的弹幕总尺寸,所述弹幕总尺寸包括弹幕总宽度和弹幕总高度;
响应于位图缓存池中存在满足所述弹幕总尺寸的候选位图,在所述候选位图中绘制所述目标弹幕,得到所述目标位图;
响应于所述位图缓存池中不存在满足所述弹幕总尺寸的候选位图,创建满足所述弹幕总尺寸的位图,并在创建的位图中绘制所述目标弹幕,得到所述目标位图;
其中,所述候选位图的位图宽度大于等于所述弹幕总宽度,且所述候选位图的位图高度大于等于所述弹幕总高度。
8.根据权利要求7所述的方法,其特征在于,所述目标位图存储在内存中;
所述向显存上传所述目标位图对应的目标纹理之后,所述方法还包括:
从内存中删除所述目标位图,并将所述目标位图对应的空白位图回收至所述位图缓存池。
9.根据权利要求1至4任一所述的方法,其特征在于,所述方法还包括:
获取所述目标时长内所述目标弹幕的弹幕数量;
响应于所述弹幕数量大于第一数量阈值,下调所述目标时长;
响应于所述弹幕数量小于第二数量阈值,上调所述目标时长。
10.根据权利要求1至4任一所述的方法,其特征在于,所述方法还包括:
响应于达到所述目标弹幕的弹幕生命周期,从显存中删除所述目标纹理。
11.根据权利要求1至4任一所述的方法,其特征在于,所述图形程序接口包括如下至少一种:开放图形库OpenGL、Vulkan、Metal、开放运算语言OpenCL、DirectX和Web图形库WebGL。
12.一种弹幕渲染装置,其特征在于,所述装置包括:
第一获取模块,用于获取目标时长内的目标弹幕;
绘制模块,用于将所述目标弹幕绘制在同一位图中,得到目标位图;
传输模块,用于向显存上传所述目标位图对应的目标纹理,所述目标纹理中包括各条所述目标弹幕对应的弹幕纹理;
渲染模块,用于响应于弹幕刷新信号,通过调用图形程序接口中的渲染指令,对所述目标纹理中的所述弹幕纹理进行渲染。
13.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至11任一项所述的弹幕渲染方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至11任一项所述的弹幕渲染方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010575265.XA CN111586489A (zh) | 2020-06-22 | 2020-06-22 | 弹幕渲染方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010575265.XA CN111586489A (zh) | 2020-06-22 | 2020-06-22 | 弹幕渲染方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111586489A true CN111586489A (zh) | 2020-08-25 |
Family
ID=72120269
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010575265.XA Pending CN111586489A (zh) | 2020-06-22 | 2020-06-22 | 弹幕渲染方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111586489A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112153082A (zh) * | 2020-11-25 | 2020-12-29 | 深圳乐播科技有限公司 | 一种在安卓系统中平滑显示实时流视频画面的方法及装置 |
CN114820897A (zh) * | 2021-01-29 | 2022-07-29 | 北京字跳网络技术有限公司 | 图像渲染方法、装置、电子设备及计算机可读存储介质 |
CN115690269A (zh) * | 2022-10-31 | 2023-02-03 | 荣耀终端有限公司 | 一种视图对象的处理方法及电子设备 |
CN116320648A (zh) * | 2022-11-14 | 2023-06-23 | 北京奇艺世纪科技有限公司 | 一种弹幕绘制方法、装置及电子设备 |
CN117292039A (zh) * | 2023-11-27 | 2023-12-26 | 芯瞳半导体技术(山东)有限公司 | 顶点坐标生成方法、装置、电子设备及计算机存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105597321A (zh) * | 2015-12-18 | 2016-05-25 | 武汉斗鱼网络科技有限公司 | 一种全屏游戏状态下的弹幕显示方法与系统 |
CN110012338A (zh) * | 2019-04-10 | 2019-07-12 | 广州虎牙信息科技有限公司 | 一种显示弹幕数据的方法、装置、计算机设备和存储介质 |
US20190358538A1 (en) * | 2016-03-16 | 2019-11-28 | Skillz Inc | Management of streaming video data |
CN111131910A (zh) * | 2020-01-02 | 2020-05-08 | 广州虎牙科技有限公司 | 弹幕实现方法、装置、电子设备和可读存储介质 |
-
2020
- 2020-06-22 CN CN202010575265.XA patent/CN111586489A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105597321A (zh) * | 2015-12-18 | 2016-05-25 | 武汉斗鱼网络科技有限公司 | 一种全屏游戏状态下的弹幕显示方法与系统 |
US20190358538A1 (en) * | 2016-03-16 | 2019-11-28 | Skillz Inc | Management of streaming video data |
CN110012338A (zh) * | 2019-04-10 | 2019-07-12 | 广州虎牙信息科技有限公司 | 一种显示弹幕数据的方法、装置、计算机设备和存储介质 |
CN111131910A (zh) * | 2020-01-02 | 2020-05-08 | 广州虎牙科技有限公司 | 弹幕实现方法、装置、电子设备和可读存储介质 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112153082A (zh) * | 2020-11-25 | 2020-12-29 | 深圳乐播科技有限公司 | 一种在安卓系统中平滑显示实时流视频画面的方法及装置 |
CN114820897A (zh) * | 2021-01-29 | 2022-07-29 | 北京字跳网络技术有限公司 | 图像渲染方法、装置、电子设备及计算机可读存储介质 |
CN115690269A (zh) * | 2022-10-31 | 2023-02-03 | 荣耀终端有限公司 | 一种视图对象的处理方法及电子设备 |
CN115690269B (zh) * | 2022-10-31 | 2023-11-07 | 荣耀终端有限公司 | 一种视图对象的处理方法及电子设备 |
CN116320648A (zh) * | 2022-11-14 | 2023-06-23 | 北京奇艺世纪科技有限公司 | 一种弹幕绘制方法、装置及电子设备 |
CN117292039A (zh) * | 2023-11-27 | 2023-12-26 | 芯瞳半导体技术(山东)有限公司 | 顶点坐标生成方法、装置、电子设备及计算机存储介质 |
CN117292039B (zh) * | 2023-11-27 | 2024-02-13 | 芯瞳半导体技术(山东)有限公司 | 顶点坐标生成方法、装置、电子设备及计算机存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111586489A (zh) | 弹幕渲染方法、装置、计算机设备及存储介质 | |
US20210168441A1 (en) | Video-Processing Method, Electronic Device, and Computer-Readable Storage Medium | |
US6762761B2 (en) | Method and system for graphics rendering using hardware-event-triggered execution of captured graphics hardware instructions | |
US9182938B2 (en) | Method for controlling multiple displays and system thereof | |
EP4002281A1 (en) | Layer composition method and apparatus, electronic device, and storage medium | |
CN103888840B (zh) | 一种视频移动终端实时拖动与缩放的方法及装置 | |
US20240292009A1 (en) | Method and apparatus for processing video compression, and medium | |
CN111432262B (zh) | 页面视频渲染方法及装置 | |
US10803547B2 (en) | Graphics processing systems using a subset of pipeline stages | |
WO2021253640A1 (zh) | 阴影数据确定方法、装置、设备和可读介质 | |
CN113079408B (zh) | 视频播放方法、装置和系统 | |
CN111131910B (zh) | 弹幕实现方法、装置、电子设备和可读存储介质 | |
CN109493331B (zh) | 一种基于并行计算算法的两景图像重叠区域快速获取方法 | |
CN113918249A (zh) | 一种背景模糊控件的实现方法及装置 | |
CN103455973B (zh) | 一种屏幕图像绘制方法和装置 | |
CN110572715B (zh) | 一种解决Android TV播放webp卡顿的方法 | |
CN113450733A (zh) | 一种屏幕刷新的方法与显示系统、用户设备 | |
CN112419456B (zh) | 一种特效画面生成方法和装置 | |
CA1200025A (en) | Graphic and textual image generator for a raster scan display | |
CN114860141B (zh) | 图像显示方法、装置、电子设备及计算机可读介质 | |
Slater et al. | Liberation from rectangles: a tiling method for dynamic modification of objects on raster displays | |
US20100182331A1 (en) | Method and apparatus for drawing image | |
CN114452645B (zh) | 生成场景图像的方法、设备和存储介质 | |
CN118043842A (zh) | 一种渲染格式选择方法及其相关设备 | |
CN113741835B (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40027950 Country of ref document: HK |
|
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200825 |
|
RJ01 | Rejection of invention patent application after publication |