字幕元素的渲染方法、装置、设备、介质及程序产品
文献发布时间:2024-04-18 20:00:50
技术领域
本申请实施例涉及数据处理技术领域,特别涉及一种字幕元素的渲染方法、装置、设备、介质及程序产品。
背景技术
在播放器播放视频时,通常会显示字幕,便于观看者更加清晰的理解视频内容。播放器对字幕进行显示之前,后台需要对字幕数据进行渲染,通过将字幕数据传给渲染模块,从而得到字幕渲染数据,该字幕渲染数据可在播放器中进行显示。
相关技术中,若播放器内核的开发语言为C++,一般采用的是skia库对字幕数据进行渲染。播放器会创建字幕渲染类,该字幕渲染类将调用skia库得到字幕渲染数据,然后将字幕渲染数据回传到播放器中进行渲染显示。
然而,由于在调用skia库时,会额外引入非字幕渲染的其他2维向量图像引擎,从而导致字幕渲染类编译出来的文件较大,增加了播放器的安装文件的体积,导致了播放器占用设备的内存增大。
发明内容
本申请实施例提供了一种字幕元素的渲染方法、装置、设备、介质及程序产品,节省了计算机的存储资源,所述技术方案如下:
一方面,提供了一种字幕元素的渲染方法,所述方法包括:
创建目标画布对象,所述目标画布对象是终端操作系统提供的对象创建功能所创建的对象,所述目标画布对象用于在终端界面中承载字幕元素;
获取字幕文本和字幕渲染参数,所述字幕文本是待渲染至所述终端界面的文本,所述字幕渲染参数用于指示所述字幕文本的渲染效果;
基于所述字幕文本和所述字幕渲染参数,将所述字幕元素绘制至所述目标画布对象上,得到画布字幕元素;
将所述画布字幕元素渲染至所述终端界面,得到所述字幕元素在所述终端界面的渲染结果。
另一方面,提供了一种字幕元素的渲染装置,所述装置包括:
画布创建模块,用于创建目标画布对象,所述目标画布对象是终端操作系统提供的对象创建功能所创建的对象,所述目标画布对象用于在终端界面中承载字幕元素;
数据获取模块,用于获取字幕文本和字幕渲染参数,所述字幕文本是待渲染至所述终端界面的文本,所述字幕渲染参数用于指示所述字幕文本的渲染效果;
字幕绘制模块,用于基于所述字幕文本和所述字幕渲染参数,将所述字幕元素绘制至所述目标画布对象上,得到画布字幕元素;
字幕渲染模块,用于将所述画布字幕元素渲染至所述终端界面,得到所述字幕元素在所述终端界面的渲染结果。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现本申请实施例中任一所述的字幕元素的渲染方法。
另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行以实现本申请实施例任一所述的字幕元素的渲染方法。
另一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例中任一所述的字幕元素的渲染方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过终端操作系统提供的对象创建功能创建目标画布对象,并获取字幕文本和字幕渲染参数,基于字幕文件和字幕渲染参数,绘制得到可以显示在终端界面上的画布字幕元素。由于对象创建功能由终端操作系统本身提供,也就是说,实现画布对象创建功能的程序存储在终端操作系统的本地数据库中,无需额外调用其他的数据库实现对象创建功能,减少了在编译字幕元素渲染程序时的文件包大小,节省了计算机的存储资源。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个示例性实施例提供的相关技术中字幕元素的渲染方案流程图;
图2是本申请一个示例性实施例提供的字幕元素的渲染方案流程图;
图3是本申请一个示例性实施例提供的实施环境示意图;
图4是本申请一个示例性实施例提供的字幕元素的渲染方法的流程图;
图5是本申请一个示例性实施例提供的字幕元素的渲染方法的程序模块流程图;
图6是本申请另一个示例性实施例提供的字幕元素的渲染方法的流程图;
图7是本申请另一个示例性实施例提供的字幕元素的渲染方法的程序流程图;
图8是本申请另一个示例性实施例提供的字幕元素的渲染方法的流程图;
图9是本申请一个示例性实施例提供的字幕元素的渲染方法的程序调用示意图;
图10是本申请另一个示例性实施例提供的字幕元素的渲染方法的程序流程图;
图11是本申请一个示例性实施例提供的字幕元素的渲染方法的完整流程图;
图12是本申请一个示例性实施例提供相关技术中编译文件大小的示意图;
图13是本申请一个示例性实施例提供的字幕元素的渲染方法编译文件大小的示意图;
图14是本申请一个示例性实施例提供相关技术中应用程序包大小的示意图;
图15是本申请一个示例性实施例提供的字幕元素的渲染方法应用程序包大小的示意图;
图16是本申请一个示例性实施例提供的播放器在使用相关技术中的字幕渲染和使用本申请实施例提供的字幕元素的渲染方法的内存对比图;
图17是本申请一个示例性实施例提供的字幕元素的渲染装置的结构框图;
图18是本申请另一个示例性实施例提供的字幕元素的渲染装置的结构框图;
图19是本申请一个示例性实施例提供的计算机设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请中术语“第一”、“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
字幕渲染是通过将视频文件中的字幕数据传给渲染模块,得到字幕显示的位图的方案。常见的字幕渲染方案是在播放器的内部,调用外部的开源程序库,从而实现对字幕的渲染,常见的开源库为跨平台的开源skia,开源freetype(一种可移植的字体引擎)。请参考图1,其示出了通过开源skia库进行字幕渲染的技术方案流程图,如图1所示,播放器接收到字幕渲染指令后,通过字幕渲染工厂(TPTextRenderFactory)101发送字幕渲染创建指令;接收到该指令后,播放器创建字幕渲染模块(TPSkTextRender)102;字幕渲染模块102通过skia引擎(skia harfbuzz)103调用到skia库104得到字幕位图;最后将字幕位图在播放器中进行渲染显示。
然而,上述方法至少存在以下两个缺点:
(1)包大小过大。由于skia库属于开源库,且在调用skia库时,会额外引入非字幕渲染的其他2维向量图像引擎,从而导致字幕渲染模块编译出来的文件较大,会直接增大播放器提供的包大小体积。
(2)占用内存较大。skia库在字幕渲染过程中,调用的程序模块较多,占用计算机的内存较大。如果系统内存不足,会直接在skia内部库内崩溃,导致系统的崩溃率上升,相关的应用程序会直接闪退,影响使用者对该应用程序的使用体验。
本申请实施例提供了一种字幕元素的渲染方法,以该方法应用于安卓系统为例进行说明。请参考图2,播放器接收到字幕渲染指令后,通过字幕渲染工厂(TPTextRenderFactory)201发送字幕渲染创建指令;接收到该指令后,播放器创建字幕画布渲染模块(TPCanvasTextRenderer)202;字幕画布渲染模块202通过字幕画布接口203调用安卓系统中原生(也即,在安卓系统的本地库)的画布创建模块(android.graphics.Canvas)204和字幕绘制模块(android.text.TextPaint)205绘制得到字幕位图;然后将字幕位图传送至播放器,播放器可对该字幕位图进行显示。本申请实施例提供的字幕元素的渲染方法通过利用安卓系统原生程序绘制字幕到不显示在播放器界面上的画布(canvas)中,再将画布中存储的位图数据取出来的做字幕渲染,由于利用到了安卓系统的原生特性,复用了安卓系统的部分功能,因此解决了skia库带来的包大小增大的问题,另外安卓系统本身的字幕绘制性能优于skia引擎,因此内存使用方面也有性能提升。
图3本申请一个示例性实施例提供的实施环境示意图,如图3所示,该实施环境中包括终端310、服务器320,终端310和服务器320之间通过通信网络330连接,在一些可选的实施例中,通信网络330可以是有线网络,也可以是无线网络,本实施例对此不加以限定。
在一些可选的实施例中,终端310是智能手机、平板电脑、笔记本电脑、台式计算机、智能家电、智能车载终端、智能音箱、数码相机等,但并不局限于此。终端310中安装有目标应用程序,示意性地,该目标应用程序可以是传统应用程序,可以是云应用程序,可以实现为宿主应用程序中的小程序或应用模块,也可以是某个网页平台,本实施例对此不加以限定。该目标应用程序提供有字幕元素显示功能和多媒体文件播放功能,其中,多媒体文件主要是指视频文件或者音频文件,当播放视频或者音频时,在视频或者音频的显示画面上会显示相应的字幕元素。
在一些可选的实施例中,服务器320为终端中安装的目标应用程序提供后台服务,示意性的,以视频文件为例进行说明,终端310接收目标视频播放操作时,发送目标视频播放指令至服务器320;服务器320接收到目标视频播放指令后,将目标视频文件发送到终端310;终端310接收到目标视频文件后,首先,对目标视频文件进行解析得到字幕文本和字幕渲染参数并创建目标画布对象;其次,终端310基于字幕文本和字幕渲染参数,将字幕元素绘制至目标画布对象上,得到画布字幕元素;最后,终端310将画布字幕元素渲染至界面上进行显示。
在一些可选的实施例中,服务器320接收到目标视频播放指令后,对目标视频文件进行解析得到字幕文本和字幕渲染参数,然后将字幕文本和字幕渲染参数发送到终端310中,终端310基于接收到的字幕文本和字幕渲染参数进行处理,得到画布字幕元素。
在一些可选的实施例中,上述目标视频文件或者字幕文件(字幕文本和字幕渲染参数)为离线文件,也就是说,终端310可以直接读取本地存储的目标视频文件或者字幕文件,从而得到画布字幕元素。
值得注意的是,服务器320能够是独立的物理服务器,也能够是多个物理服务器构成的服务器集群或者分布式系统,还能够是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器。
其中,云技术(Cloud Technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模型应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。可选地,服务器320还可以实现为区块链系统中的节点。
需要说明的是,本申请所涉及的信息(包括但不限于用户设备信息、用户个人信息等)、数据(包括但不限于用于分析的数据、存储的数据、展示的数据等)以及信号,均为经用户授权或者经过各方充分授权的,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。例如,本申请中涉及到的字幕文本和字幕渲染参数都是在充分授权的情况下获取的。
结合上述介绍和实施环境,对本申请实施例提供的字幕元素的渲染方法进行说明,图4是本申请实施例提供的一种字幕元素的渲染方法的流程图,以该方法应用于如图3所示的终端中为例进行说明,如图4所示,该方法包括:
步骤401,创建目标画布对象。
目标画布对象是终端操作系统提供的对象创建功能所创建的对象,目标画布对象用于在终端界面中承载字幕元素。
可选地,上述操作系统提供有对象创建功能对应的第一接口,可通过调用第一接口创建目标画布对象。示意性的,若操作系统实现为安卓系统,可直接调用安卓系统中与画布创建相关的接口程序实现对目标画布对象的创建操作。
可选地,目标画布对象中包括绘制区域,该绘制区域实现为一个矩形区域,该矩形区域由若干像素组成,矩形的宽和高的单位为像素,例如:200px×150px,是指矩形的高为200像素,也即200个像素点,宽为150像素,也即150个像素点。其中,矩形区域的宽高为系统默认设置的;或者,根据传入的视频文件的视频画面自动适配的;或者,根据传入的字幕文本自动适配的。示意性的,当目标应用程序实现为视频播放器,根据视频播放器的显示界面的尺寸,开发人员可以设置一个固定的宽高;或者,接收到需要播放的视频文件时,解析其中视频画面的宽高数据,根据该宽高数据自动配置矩形区域的宽高数据;或者,接收到需要显示的字幕文本时,解析其中每一条字幕的长度,根据每一条字幕的长度自动配置每一条字幕对应的画布中矩形区域的宽高数据。
在一些可选的实施例中,上述目标画布对象在终端界面中承载字幕元素的方法包括以下方法中的至少一种:
1、目标画布对象持续以透明层的形式显示在终端界面,当目标画布对象上绘制有字幕数据时,将该字幕数据以可视化的形式显示在终端界面。
示意性的,播放器在播放视频时,显示有至少两层画面,视频帧画面和叠加在视频帧画面上的字幕画面(也即目标画布对象),当目标画布对象的绘制区域没有绘制任何内容时,则目标画布对象是透明的,也就是说,字幕画面上不显示任何内容,且不会遮挡视频帧画面的显示;当目标画布对象的绘制区域绘制有字幕数据时,在字幕画面的指定位置显示字幕。
2、目标画布对象不显示在终端界面,当目标画布对象上绘制有字幕数据时,将目标画布对象传入到终端界面进行显示。
示意性的,播放器在播放视频时,若该视频中包含有字幕信息,则创建目标画布对象,并在目标画布对象的绘制区域绘制字幕数据,绘制结束后,将目标画布对象传入到终端界面进行显示。
在一些可选的实施例中,上述创建目标画布对象的操作还可以实现为对上一个创建的目标画布对象的恢复操作,其中,恢复操作是指将目标画布对象中的绘制区域恢复到刚创建时的状态。示意性的,当播放器开始播放一段视频前,创建一个目标画布对象,并对其中的参数进行初始化设置,此时目标画布对象属于初始化状态,该状态下目标画布对象上没有绘制字幕相关的数据;在开始播放视频时,对第1段字幕进行渲染,渲染结束后,目标画布对象上绘制有第1段字幕对应的绘制数据,第1段字幕的显示时间为3秒;那么,当视频播放到3秒时,只需要将目标画布对象恢复到初始化状态,在此目标画布对象上进行第2段字幕的绘制即可。也就是说,在字幕元素的渲染过程中,只需要在视频开始时,执行目标画布对象的创建程序,后续循环执行目标画布对象的恢复程序。
步骤402,获取字幕文本和字幕渲染参数。
字幕文本是待渲染至终端界面的文本,字幕渲染参数用于指示字幕文本的渲染效果。
可选地,若字幕文本实现为视频的字幕文本,获取字幕文本的方式包括以下方式中的至少一种:
1、获取通过终端输入的字幕文本。
示意性的,在制作视频时,视频的制作者根据时间轴手动为视频配置字幕,也即给没有字幕的视频画面配上相应的文字介绍。
2、对视频文件中的音频数据进行解析,获取字幕文本。
示意性的,从视频流中分离出音频流,对音频流进行语音识别,将音频流中的音频识别为对应的字幕文本并标注出字幕的持续时间,也即字幕的开始和消失的时间。
3、对字幕文件进行解析,获取字幕文本。
示意性的,终端直接接收到与视频对应的字幕文件,则对该字幕文件进行解析,得到字幕文本;或者,终端接收到视频文件,视频文件中包括字幕文件,对该视频文件进行解码得到字幕文件,然后对字幕文件进行解析,得到字幕文本。
可选地,字幕渲染参数于指示字幕文本的渲染效果,也即,字幕渲染参数用于设置字幕文本最终显示在终端界面上的格式,包括:字号、字体、颜色、抗锯齿、斜体或者粗体、描边的颜色和宽度等。
可选地,获取字幕渲染参数的方式包括以下方式中的至少一种:
1、获取系统默认的字幕渲染参数。
示意性的,开发人员可以在目标应用程序(例如:视频播放器)的内部设置字幕渲染参数,则所有的视频的字幕渲染参数都是相同的。
2、根据输入的视频,解析获取字幕渲染参数。
示意性的,每一段视频的字幕是不同的,当播放器播放一段视频时,若该视频的源文件中存在字幕渲染参数文件,则可获取该字幕渲染参数文件,并根据该字幕渲染参数文件中的字幕渲染参数对字幕文本进行渲染。
3、获取终端输入的字幕渲染参数。
示意性的,播放器播放视频时,视频的观看者可以在播放器的设置界面设置字幕的显示格式,也即字幕渲染参数;获取在播放器的设置界面设置的字幕渲染参数,作为字幕文本的字幕渲染参数。
需要说明的是,上述获取字幕文本和字幕渲染参数的方式仅为示意性的举例,本申请实施例对此不加以限定。
在一些可选的实施例中,上述字幕文本包括多个字幕子文本,则获取字幕文本和字幕渲染参数的方式还包括:获取字幕文本中的多个字幕子文本;获取多个字幕子文本分别对应的视频帧画面,视频帧画面是与字幕子文本在时间轨道上同步的画面;对多个字幕子文本分别对应的视频帧画面进行风格预测,得到多个字幕子文本分别对应的视频帧画面风格;基于多个字幕子文本分别对应的视频帧画面风格,获取多个字幕子文本分别对应的子字幕渲染参数。
可选地,上述对多个字幕子文本分别对应的视频帧画面进行风格预测,从而获取多个字幕子文本分别对应的子字幕渲染参数的方法包括以下方法中的至少一种:
1、将多个字幕子文本分别对应的视频帧画面输入到第一画面风格预测模型中,对视频帧画面进行分析得到每个视频帧画面的视频帧画面风格;对所述视频帧画面风格进行分析得到多个字幕子文本分别对应的子字幕渲染参数。
示意性的,通过第一画面风格预测模型提取目标视频帧画面图像对应的颜色特征、纹理特征、形状特征、尺寸特征、文本特征等,对上述多个特征联合分析得到目标视频帧画面对应的目标视频帧画面风格;然后对目标视频帧画面风格进行分析,输出得到目标视频帧画面对应的子字幕渲染参数,该子字幕渲染参数即为目标视频帧画面对应的字幕子文本的渲染参数。
其中,第一画面风格预测模型是基于样本视频帧画面和参考字幕渲染参数进行训练得到的模型;参考字幕渲染参数为专业人员基于画面风格,标注的样本视频帧画面对应的字幕子文本的渲染参数。则第一画面风格预测模型的训练过程为:将样本视频帧画面输入到第一样本模型中,得到第一样本字幕渲染参数;基于第一样本字幕渲染参数和参考字幕渲染参数的差异性训练第一样本模型,从而得到上述第一画面风格预测模型。
2、将多个字幕子文本和与多个字幕子文本分别对应的视频帧画面输入到第二画面风格预测模型中,对视频帧画面和字幕子文本的文本内容联合分析得到每个视频帧画面的视频帧画面风格;对所述视频帧画面风格进行分析得到多个字幕子文本分别对应的子字幕渲染参数。
示意性的,通过第二画面风格预测模型提取目标视频帧画面图像对应的颜色特征、纹理特征、形状特征、尺寸特征、文本特征等;以及提取目标字幕子文本的上下文特征、长度特征等;对提取得到的所有特征联合分析得到目标视频帧画面对应的目标视频帧画面风格;然后对目标视频帧画面风格进行分析,输出得到目标视频帧画面对应的子字幕渲染参数,该子字幕渲染参数即为目标视频帧画面对应的字幕子文本的渲染参数。
其中,第二画面风格预测模型是基于样本视频帧画面与样本字幕子文本对和参考字幕渲染参数进行训练得到的模型;样本视频帧画面与样本字幕子文本相匹配;参考字幕渲染参数为专业人员基于画面风格,标注的样本字幕子文本的渲染参数。则第二画面风格预测模型的训练过程可以为:将样本视频帧画面输入到第二样本模型中,得到第二样本字幕渲染参数;基于第二样本字幕渲染参数和参考字幕渲染参数的差异性训练第二样本模型,从而得到上述第二画面风格预测模型。
可选地,其中,多个字幕子文本对应的子字幕渲染参数相同;或者,多个字幕子文本对应的子字幕渲染参数不相同。示意性的,当播放一段视频时,一段字幕文本对应着一段视频画面,例如:播放一集电视剧时,电视剧中每段视频画面对应的字幕的显示格式可以是相同的,也就是说,一集电视剧中,字幕文本对应的字幕渲染参数是相同的,固定不变的;电视剧中每段视频画面对应的字幕的显示格式也可以是不相同的,例如:若某一段视频画面基本为黑色时,可以将该画面的字幕文本的颜色修改为白色,突出字幕显示,若某一段视频为恐怖场景时,可以调整字幕文本的显示颜色、大小和描边等,营造恐怖氛围,使画面更有吸引力。
在一个可选的实施例中,上述字幕文本和字幕渲染参数的匹配过程(也即字幕制作过程)为:字幕制作人员根据每段字幕对应的视频画面的风格手动配置字幕渲染参数,也就是说,字幕制作人员在视频播放前即对字幕的格式进行了设置,最后视频播放时,解析出来的字幕文件中的字幕文本为设置好格式的文本,则在视频播放时只需要按照时间轴,将字幕文本取出直接渲染到相应的视频画面上即可。
需要说明的是,上述步骤401和步骤402可以同时执行,也可以先执行步骤401,再执行步骤402,或者,先执行步骤402,再执行步骤401,本申请实施例对此不加以限定。
步骤403,基于字幕文本和字幕渲染参数,将字幕元素绘制至目标画布对象上,得到画布字幕元素。
在一个可选的实施例中,创建文本承载对象,文本承载对象用于承载字幕元素;基于字幕文本和字幕渲染参数,在文本承载对象上绘制字幕元素,得到承载字幕元素;将承载字幕元素绘制至目标画布对象上,得到画布字幕元素。
可选地,上述文本承载对象是终端操作系统提供的文本创建功能所创建的对象。可选地,上述操作系统提供有文本创建功能对应的第二接口,可通过调用第二接口创建文本承载对象。示意性的,若操作系统实现为安卓系统,可直接调用安卓系统中相关的接口程序实现对文本承载对象的创建操作。
示意性的,文本承载对象提供文本存储模块和文本修改模块,可以将获取得到的字幕文本绘制到文本存储模型进行存储,然后将字幕渲染参数绘制到文本修改模块,即通过文本修改模块中绘制的字幕渲染参数对文本存储模块中绘制的字幕文本进行修改,得到承载字幕元素。得到承载字幕元素之后,将承载字幕绘制到目标画布对象上,得到画布字幕元素。示意性的,基于承载字幕元素,在目标画布对象中的绘制区域进行绘制操作,也即是修改该矩形区域中每个元素的显示方式;绘制完成后,该矩形区域即为画布字幕元素。
在一个可选的实施例中,上述基于字幕文本和字幕渲染参数,得到承载字幕元素的过程,还包括:获取默认批量渲染参数,默认批量渲染参数为在文本承载对象内的默认的批量参数模板;基于字幕渲染参数,对默认批量渲染参数进行更新,得到更新后的默认批量渲染参数;基于字幕文本和更新后的默认批量渲染参数,在文本承载对象上绘制所述承载字幕元素。
其中,默认批量渲染参数是指在文本承载对象中各个文本格式属性(例如:对齐属性、字体格式属性)对应的参数,用于批量对输入文本承载对象的文本的格式进行修改。
示意性的,根据字幕渲染参数预先设置文本承载对象中的对齐属性和字体格式属性,可认为是修改了文本承载对象中的默认属性值,则当将字幕文本传入到文本承载对象中时,即可自动继承预先设置的属性值,从而获取承载字幕元素。
示意性的,设置目标文本承载对象中的对齐属性为“左对齐”,字体格式属性为“宋体、5号、黑色、加粗”,将字幕文本输入到目标文本承载对象中,绘制得到承载字幕元素中字幕元素的对齐属性为“左对齐”,字体格式属性为“宋体、5号、黑色、加粗”;且无论输入目标文本承载对象的字幕文本的文本内容和长度是什么,其绘制得到的承载字幕元素中字幕元素的对齐属性都是“左对齐”,字体格式属性都是“宋体、5号、黑色、加粗”。
步骤404,将画布字幕元素渲染至终端界面,得到字幕元素在终端界面的渲染结果。
可选地,若目标画布对象是终端操作系统提供的对象创建功能所创建的对象,则将画布字幕元素发送到目标应用程序(例如:视频播放器)的显示界面中进行显示,得到字幕元素在终端界面的渲染结果。
综上所述,本申请实施例提供的字幕元素的渲染方法通过终端操作系统提供的对象创建功能创建目标画布对象,并获取字幕文本和字幕渲染参数,基于字幕文件和字幕渲染参数,绘制得到可以显示在终端界面上的画布字幕元素。由于对象创建功能由终端操作系统本身提供,也就是说,实现画布对象创建功能的程序存储在终端操作系统的本地数据库中,无需额外调用其他的数据库实现对象创建功能,减少了在编译字幕元素渲染程序时的文件包大小,节省了计算机的存储资源。
在一些可选的实施例中,以目标应用程序实现为视频播放器,终端操作系统实现为安卓系统为例进行说明。若播放器的内核开发语言为c++,则其接口为c++程序,由于安卓系统中提供的接口程序(实现字幕渲染功能的程序)为java程序,也就是说,获取画布字幕元素的过程无法在播放器中直接实现。基于此,本申请实施例提供以下方法中的至少一种,以实现c++内核的播放器在安卓系统中的字幕元素的渲染方法:
(一)在一个可选的实施例中,基于反射调用机制,在安卓系统的Java本地接口书写程序(Java Native Interface,jni)层调用安卓系统的接口程序,获取画布字幕元素,从而将画布字幕元素渲染至播放器的播放界面,得到字幕元素在播放器的播放界面的渲染结果。
首先,对本实施例中,安卓系统中各程序模块的调用过程进行说明,请参考图5,其示出了本实施例中程序调用的流程图,如图5所示,在安卓系统中,包括c++层,jni层和Android层(在Android层的程序都是安卓系统本地数据库中存储的接口程序),对其中各程序模块的功能进行介绍:
字幕渲染工厂(TPTextRenderFactory)501:实现在c++层,用于根据字幕渲染指令,创建字幕渲染模块。
字幕渲染模块(TPCanvasTextRenderer)502:实现在c++层,将在播放器中获取的字幕数据传入jni层,其中字幕数据包括字幕文本和字幕渲染参数;可调用jni层的本地渲染模块。
本地渲染模块(TPCanvasTextJni)503:实现在jni层,将接收到的字幕数据传入Android层,并实现对Android层的各模块的调用。
·位图承载模块(android.graphics.Bitmap)504:实现在Android层,用于保存传入的位图数据;可调用位图配置模块。
·位图配置模块(android.graphics.BitmapConfig)505:实现在Android层,对位图的格式进行配置,其中,位图的格式包括:RGB565、ARGB8888等。
·画布绘制模块(android.graphics.Canvas)506:实现在Android层,用于创建画布,以及承载在位图上的绘制操作。
·文本承载模块(android.text.SpannableStringBuilder)507:实现在Android层,用于保存字幕文本,和根据字幕渲染参数设置字幕文本的渲染格式;可以调用颜色设置模块、格式设置模块、大小设置模块等。
·颜色设置模块(android.text.style.ForegroundColorSpan)508:实现在Android层,用于设置字幕文本中字体颜色。
·格式设置模块(android.text.style.StyleSpan)509:实现在Android层,用于设置字幕文本中字体的格式,例如:粗体、斜体、普通字体等。
·大小设置模块(android.text.style.AbsoluteSizeSpan)510:实现在Android层,用于设置字幕文本中字体的大小。
·文本换行模块(android.text.StaticLayout)511:实现在Android层,用于设置字幕文本的换行模式;可调用文本对齐模块。
·文本对齐模块(android.text.Layout.Alignment)512:实现在Android层,用于设置字幕文本的对齐方式。
·文本空间模块(android.text.TextPaint)513:实现在Android层,用于为绘制操作留出空间,并调用下面四个模块。
·画笔创建模块(android.graphics.Paint)514:实现在Android层,用于创建画笔,画笔用于将字幕文本绘制到画布中。
·文字绘制模块(android.graphics.Typeface)515:实现在Android层,用于绘制文字。
·样式设置模块(android.graphics.Paint.Style)516:实现在Android层,用于设置画笔的样式,也即填充样式,例如:颜色。
·描边设置模块(android.graphics.Paint.Join)517:实现在Android层,用于设置字幕文本的描边属性,也即有无边框,边框的格式等。
需要说明的是,上述仅展示了一部分程序模块,本实施例提供的字幕元素的渲染方法还可以通过其他程序模块实现,或者上述模块还可以调用其他模块实现本实施例提供的字幕元素的渲染方法,本申请对此不加以限定。
其次,请参考图6,其示出了本实施例中提供的字幕元素的渲染方法的流程图,以该方法应用于如图3所示的终端中为例进行说明,如图6所示,该方法包括:
步骤601,获取画布初始化参数,基于画布初始化参数创建目标画布对象。
画布初始化参数用于指示目标画布对象的创建要求。
可选地,响应于画布创建指令,获取画布初始化参数,其中,画布创建指令中包含画布初始化参数,画布创建指令的触发方式包括以下方式中的至少一种:
方式一、播放器接收到播放视频的指令时,自动触发画布创建指令,也就是说,在播放器显示第一个视频帧之前,会首先触发画布创建指令。
方式二、播放器接收到播放视频的指令时,不会触发画布创建指令,也就是说,在播放视频的时候,不会自动显示字幕。播放器的设置界面提供有字幕开关,当打开字幕开关时,才会触发画布创建指令,则从当前帧开始,视频会显示字幕。
可选地,上述初始化参数可实现为目标画布对象的大小、目标画布对象的透明度、目标画布对象的数量、目标画布对象的颜色、目标画布对象的显示顺序(也即,若目标画布对象的数量为多个时,多个目标画布对象的叠加顺序)等中的至少一种,本申请实施例对此不加以限定。
在一个可选的实施例中,获取画布初始化参数,还包括:
获取第一位图数据,第一位图数据是通过目标程序的程序语言生成的位图数据,第一位图数据用于表征目标画布对象的创建要求;依据第一位图数据创建第二位图数据,第二位图数据是通过终端操作系统的系统语言生成的位图数据;基于第二位图数据创建目标画布对象。
可选地,上述第一位图数据中包括第一位图尺寸,第一位图尺寸可实现为传入播放器中的视频帧所对应的位图尺寸;还可以是根据传入播放器的每个视频帧所对应的字幕数据计算得到的位图尺寸;还可以是根据播放器对应的播放窗口设置的固定的位图尺寸,本申请实施例对此不加以限定。需要说明的是,这里的位图尺寸是指位图的宽和高,其单位都是像素。
示意性的,上述目标程序实现为播放器的内核程序,基于该内核程序,创建“200px×120px”的位图,该位图中为存储任何数据,也即该位图为空的位图;将该位图传入安卓系统接口,获取该位图的尺寸“200px×120px”,根据该尺寸创建目标画布对象,则目标画布对象中矩形区域的宽即为120px,高即为200px;且该位图传入目标画布空间中。
可选地,在播放器中创建位图时,还可以选择需要选择创建的位图的类型,例如:ARGB8888,该类型位图分别用8个bit来记录每个像素的A、R、G、B数据。
步骤602,获取字幕文本和字幕渲染参数。
字幕文本是待渲染至终端界面的文本,字幕渲染参数用于指示字幕文本的渲染效果。
示意性的,播放器播放视频之前,通过对传入播放器中的视频文件的解码处理,提取其中的字幕文本,并将该字幕文本储存到字幕文本集中,该字幕文本对应有时间标识,每个时间标识对应的视频画面是不同的,该时间标识用于将字幕文本与相应的视频画面进行匹配,该时间对应有起始时刻和终止时刻。示意性的,当视频播放到第5秒时(此时上一段字幕显示结束),从字幕文本集中取出时间标识对应的时间段包含第5秒的字幕文本,将该字幕文本对应的字幕元素显示在第5秒的视频画面上。
在一些可选的实施例中,上述字幕文本在字幕文本集中按照队列进行存储,依次取出其中的字幕文本进行渲染,示意性的,终端播放器播放的视频,在字幕文本存储的时候,就对字幕文本的显示时间(也可以说对应的时间帧的数量)联合进行了存储,且字幕文本按照显示的先后顺序存储在队列中,则按照时间顺序依次取出字幕文本进行渲染。
上述字幕渲染参数的获取方式,在步骤402中已进行了具体说明,此处不再赘述。
示意性的,该字幕渲染参数主要用于设置字幕文本的字号、字体、颜色、抗锯齿、斜体或者粗体、描边颜色和宽度等。
在一些可选的实施例中,获取字幕文本和字幕渲染参数之后,包括:
基于字幕文本和字幕渲染参数生成画布调整参数;基于画布调整参数对目标画布对象进行调整,得到调整后的目标画布对象,字幕元素用于在调整后的目标画布对象上进行绘制。
画布调整参数包括位置参数、排版参数和边框参数中的至少一种。
1、以画布调整参数实现为位置参数进行说明。
位置参数是指字幕元素在目标画布对象上的显示位置。
可选地,位置参数是通过计算字幕文本的大小从而确定的参数,示意性的,根据字幕文本的文本长度确定目标画布对象上字幕文本的绘制区域,也即,在目标画布对象的矩形区域的绘制坐标。
可选地,字幕文本在目标画布对象上的显示位置是保持不变的,或者,字幕文本在目标画布对象上的显示位置是可以改变的。示意性的,在终端的设置界面,视频的观看者可以根据需要,调整字幕文本在目标画布对象上的显示位置。
2、以画布调整参数实现为排版参数为例进行说明。
排版参数包括在目标画布对象上绘制的文字对齐方式,其中,对齐方式包括:左对齐、右对齐、居中对齐、两端对齐、分散对齐中的其中一种;排版参数还包括目标画布对象上绘制的文字的排列方式,其中,排列方式包括:横向排列或者竖直排列或者斜向排列等。
可选地,基于排版参数对目标画布对象的默认的排版参数进行调整,从而得到调整后的目标画布对象。
3、以画布调整元素实现为边框参数为例进行说明。
边框参数是指目标画布对象上绘制的字幕文本的边框属性,也即,字幕文本有无边框,以及边框的种类和颜色等。
可选地,根据字幕文本对应的字幕渲染参数,获取字幕文本的边框属性,若字幕文本存在边框,则根据字幕文本的边框属性,在目标画布对象上将字幕文本对应的边框先绘制在空白的目标画布对象上,若字幕文本不存在边框,则不需要进行绘制。
在一些可选的实施例中,在获取字幕文本和字幕渲染参数之前,还包括:
保存当前的目标画布对象,也即保存当前未进行字幕文本的绘制的目标画布对象。
步骤603,创建文本承载对象。
文本承载对象用于承载字幕元素。
可选地,上述文本承载对象是终端操作系统提供的文本创建功能所创建的对象。可选地,上述操作系统提供有文本创建功能对应的第二接口,可通过调用第二接口创建文本承载对象。示意性的,若操作系统实现为安卓系统,可直接调用安卓系统中相关的接口程序实现对文本承载对象的创建操作。步骤604,基于字幕文本在文本承载对象上绘制文本元素。
其中,文本元素是基于默认渲染参数绘制的元素。
可选地,默认渲染参数是指该文本承载对象在创建时,开发人员设置的对于文本对象的初始绘制参数,也即,当字幕文本传入文本承载对象时的获取的初始文本格式。
步骤604,基于字幕文本在文本承载对象上绘制文本元素。
其中,文本元素是基于默认渲染参数绘制的元素。
示意性的,请参考图5,创建空白的文本承载模块507,将字幕文本基于默认参数(例如:宋体,5号,黑色)写入文本承载模块507中,则字幕文本此时在文本格式为宋体,5号,黑色。
步骤605,基于字幕渲染参数对文本元素进行调整,得到承载字幕元素。
示意性的,请参考图5,根据字幕渲染参数,在文本承载模块507中调用相应的模块(例如:颜色设置模块508、格式设置模块509、大小设置模块510等)对文本元素进行调整,得到承载字幕元素。
步骤606,将承载字幕元素绘制至目标画布对象上,得到画布字幕元素。
可选地,根据上述位置参数、排列参数,边框参数,将承载字幕元素绘制到目标画布对象中的矩形区域上。示意性的,基于位置参数确定目标画布对象中的绘制坐标;基于排列方式,确定字幕元素在矩形区域中各个字符的显示方向、角度以及排列顺序;若字幕文本对应的字幕渲染参数中存在边框属性,则还需要在目标画布对象的矩形区域绘制一次边框;基于确定的绘制坐标、排列方式以及绘制边框,将承载字幕元素绘制到目标画布对象中的矩形区域,则绘制结束的矩形区域即为画布字幕元素。
在一个可选的实施例中,将承载字幕元素绘制至目标画布对象上之前,还需要对字幕元素的布局方法进行设置。可选地,对字幕元素的布局方法进行设置的方法包括:创建空白的布局对象,将承载字幕元素绘制至布局对象中,获取布局字幕元素;将布局字幕元素绘制至目标画布对象上,得到画布字幕元素。
其中,布局对象包括静态布局对象、流式布局对象、响应式布局对象等中的至少一种。其中,静态布局是指无论终端界面显示的尺寸(这里的单位也是像素)是多少,都按照得到的画布字幕元素的尺寸进行显示;流式布局是指画布字幕元素最终显示在终端屏幕上的宽度,需要根据终端界面显示的尺寸进行适配调整的;响应式布局则是获取多个静态布局,按照终端界面显示的尺寸,选择合适的静态布局进行显示。
步骤607,将画布字幕元素转化为第三位图数据。
第三位图数据用于以位图形式对画布字幕元素进行存储。
示意性的,通过Android系统中的原生程序接口(Native Development Kit,NDK)接口将画布字幕元素转化为第三位图数据,可选地,对目标画布对象中以位图存储的画布字幕元素(矩形区域)进行复制,得到第三位图数据。
步骤608,基于第三位图数据在终端界面上渲染承载有字幕元素的画布字幕元素,得到字幕元素在终端界面的渲染结果。
示意性的,将该第三位图数据传入播放器中,播放器基于该位图数据进行渲染显示,也即字幕元素在终端界面的渲染结果。
综上所述,本申请实施例提供的字幕元素的渲染方法通过终端操作系统提供的对象创建功能创建目标画布对象,并获取字幕文本和字幕渲染参数,基于字幕文件和字幕渲染参数,绘制得到可以显示在终端界面上的画布字幕元素。由于对象创建功能由终端操作系统本身提供,也就是说,实现画布对象创建功能的程序存储在终端操作系统的本地数据库中,无需额外调用其他的数据库实现对象创建功能,减少了在编译字幕元素渲染程序时的文件包大小,节省了计算机的存储资源。
本申请实施例提供的字幕元素的渲染方法通过反射调用方法,实现了在c++层直接对安卓系统中本地接口程序的调用;且完全通过本地接口程序实现对字幕元素的渲染操作,减少了播放器中渲染模块的设计复杂度,节省了计算机的计算量和存储资源。
在一些可选的实施例中,上述操作系统为安卓系统,目标应用程序实现为安卓系统中安装的视频播放器,该播放器的内核为c++,图7是本申请一个示例性实施例提供的字幕元素的渲染方法的完整流程图。如图7所示,视频中字幕渲染的流程包括以下步骤:
视频播放前:
S701:统一初始化将要使用到的安卓系统接口。
其中,安卓系统接口包括:
android/graphics/Bitmap:用于保存传入的位图数据。
android/graphics/Canvas:用于创建画布,以及承载在位图上的绘制操作。
android/text/StaticLayout:用于设置字幕文本的换行模式。
android/text/SpannableStringBuilder:用于保存字幕文本,和根据字幕渲染参数设置字幕文本的渲染格式。
android/text/TextPaint:用于为绘制操作留出空间。
android/graphics/Paint:用于创建画笔,画笔用于将字幕文本绘制到画布中。
android/graphics/Bitmap$Config:对位图的格式进行配置。
android/graphics/Typeface:用于绘制文字。
android/text/Layout$Alignment:用于设置字幕文本的对齐方式。
android/graphics/Paint$Style:用于设置画笔的样式,也即填充样式,例如:颜色。
android/graphics/Paint$Join:用于设置字幕文本的描边属性,也即有无边框,边框的格式等。
android/text/style/AbsoluteSizeSpan:用于设置字幕文本中字体的大小。
android/text/style/StyleSpan:用于设置字幕文本中字体的格式,例如:粗体、斜体、普通字体等。
android/text/style/ForegroundColorSpan:用于设置字幕文本中字体颜色。
上述各接口之间的调用可参考图5中各模块的调用,此处不再赘述。
示意性的,初始化是指将各接口中上一次调用的参数进行恢复,或者清空。
S702:依据传入的c++位图创建安卓位图。
也即,播放器在接收到字幕渲染指令时,会在安卓系统的c++层获取得到的c++bitmap传入安卓层,安卓系统将基于传入的c++bitmap创建Android bitmap。
可选地,该bitmap的格式为ARGB8888。
S703:依据安卓位图创建安卓画布。
也即,安卓系统会根据创建的Android bitmap,调用android/graphics/Canvas接口,创建Android Canvas。
视频播放过程中循环调用以下步骤:(播放过程中将字幕绘制到安卓画布)
S704:保存当前的画布。
示意性的,视频没有播放结束时,每渲染一段字幕元素之前都需要保存还没有绘制字幕数据的画布,可选地,画布的尺寸也保留,也就是说,每次保存的画布的尺寸不需要再重新设置。
S705:设置画布绘制坐标。
示意性的,设置字幕元素在画布上的显示位置;可选地,在画布的矩形区域指定一个像素点为原点(例如:矩形区域的左下角的像素点),建立坐标系;指定若干像素点围成的区域即为画布绘制坐标,或者,指定某一像素点为起始坐标点,以该起始坐标点为画笔的起始绘制位置绘制字幕。
S706:设置字幕对齐方式。
其中,对齐方式包括:左对齐、右对齐、居中对齐、两端对齐、分散对齐中的其中一种。
示意性的,设置字幕元素在画布上的对齐方式。
S707:如果有描边设置描边属性,绘制一遍。
示意性的,若字幕渲染参数中包含有字幕文本的边框属性,则首先在画布上进行描边绘制,包括描边的颜色和宽度等。
S708:创建空白的文本承载模块。
也即,调用android/text/SpannableStringBuilder接口创建空白的文本承载模块。
S709:依据文本集内容将字幕添加到空白的文本承载模块。
示意性的,文本集中保存有字幕文本和字幕渲染参数,根据当前播放视频的视频帧从文本集中将相应的字幕文本取出,然后将该字幕文本传入空白的文本承载模块中。
S710:设置字号、字体、颜色、抗锯齿、斜体或粗体,描边颜色和宽度。
示意性的,根据上述字幕渲染参数,在文本承载模块中的字幕文本修改区域,修改传入的字幕文本的字幕属性,也即字号、字体、颜色、抗锯齿、斜体或粗体,描边颜色和宽度等。
S711:将带字幕属性的文本承载模块绘制到画布上。
示意性的,将修改后的文本承载模块中的字幕文本绘制到画布上,可选地,在绘制文本承载对象中的字幕文本之前,若字幕文本对应有描边属性,需要在绘制字幕文本之前在画布上进行描边。
S712:通过安卓NDK接口把画布的位图拷贝出来,传给播放器。
示意性的,通过安卓NDK接口,将画布的位图拷贝出来,将位图传送至播放器中进行渲染显示。
S713:恢复画布。
示意性的,将画布恢复成为未绘制字幕文本之前的状态,也即恢复成步骤703或者步骤704中的画布。
视频播放结束后:
S714:播放结束释放安卓画布和位图空间。
示意性的,当一段视频播放结束,则可清除画布中的所有数据,包括在视频播放前设置的参数;或者直接将该画布删除。
(二)在一个可选的实施例中,在安卓系统的java层调用安卓系统的接口程序,获取画布字幕元素,从而将画布字幕元素渲染至播放器的播放界面,得到字幕元素在播放器的播放界面的渲染结果。
请参考图8,其示出了本实施例中提供的字幕元素的渲染方法的流程图,以该方法应用于如图3所示的终端中为例进行说明,如图8所示,该方法包括:
步骤801,获取字幕文本和字幕渲染参数。
字幕文本是待渲染至终端界面的文本,字幕渲染参数用于指示字幕文本的渲染效果。
可选地,基于字幕渲染指令,获取初始字幕文本和初始字幕渲染参数。示意性的,字幕渲染指令为在播放器中触发的指令,初始字幕文本和初始字幕渲染参数为从在播放器内部对视频文件中进行解码得到的数据;将初始字幕数据和初始字幕渲染参数传入终端操作系统,获取字幕文本和字幕渲染参数。
示意性的,通过在安卓系统的c++层获取初始字幕数据(包括初始字幕文本和初始字幕渲染参数),将该初始字幕数据通过jni层传递到java层,处理得到字幕数据(包括字幕文本和字幕渲染参数),在java层实现对字幕数据的渲染操作。请参考图9,其示出了在安卓系统中获取字幕文本和字幕渲染参数的程序调用流程图,当视频播放器接收到字幕渲染指令时:
首先,播放器通过字幕渲染工厂(TPTextRenderFactory)901发送字幕渲染指令;基于该指令,播放器创建字幕渲染模块(TPAndroidTextRenderer)902,并将需要渲染的初始字幕数据传入字幕渲染模块902。其次,字幕渲染模块902将初始字幕数据传入到字幕绘制本地模块(TPAndroidTextPaintJni)903中,处理得到字幕数据,并将得到的字幕数据传入安卓文本空间模块(TPAndroidTextPaint)904。
步骤802,创建目标画布对象。
目标画布对象是终端操作系统提供的对象创建功能所创建的对象,目标画布对象用于在终端界面中承载字幕元素。
示意性的,请参考图9,安卓字幕空间模块(TPAndroidTextPaint)904将数据传入至字幕画布输出模块(CanvasSubtitleOutput)905;在字幕画布输出模块905中,根据输入的字幕数据创建目标画布对象,且实现对字幕文本的调整操作,得到承载字幕文本;并将该承载字幕文本传入字幕绘制模块(SubtitlePainter)906。
基于字幕数据(也即字幕文本和字幕渲染参数)创建目标画布对象的具体实现过程可参考步骤601至步骤605,此处不再赘述。
步骤803,基于字幕文本和字幕渲染参数,将字幕元素绘制至目标画布对象上,得到画布字幕元素。
示意性的,请参考图9,字幕绘制模块906调用画布模块(android.graphics.Canvas)907和画笔模块(android.text.TextPaint)908,将字幕元素绘制至目标画布对象上。
步骤804,将画布字幕元素渲染至终端界面,得到字幕元素在终端界面的渲染结果。
示意性的,请参考图9,字幕绘制模块906绘制得到目标画布对象的位图后,调用字幕位图本地模块(SubtitleBitmapJni)909,通过字幕画布输出模块905从字幕绘制模块906中取出位图,且将该位图传入字幕渲染模块902中,字幕渲染模块902将该位图渲染至播放器界面进行显示。
综上所述,本申请实施例提供的字幕元素的渲染方法通过终端操作系统提供的对象创建功能创建目标画布对象,并获取字幕文本和字幕渲染参数,基于字幕文件和字幕渲染参数,绘制得到可以显示在终端界面上的画布字幕元素。由于对象创建功能由终端操作系统本身提供,也就是说,实现画布对象创建功能的程序存储在终端操作系统的本地数据库中,无需额外调用其他的数据库实现对象创建功能,减少了在编译字幕元素渲染程序时的文件包大小,节省了计算机的存储资源。
本申请实施例提供的字幕元素的渲染方法通过在安卓系统的java层调用安卓系统的接口程序,获取画布字幕元素,提高了程序的执行效率,从而减少了字幕显示的延迟。
在一些可选的实施例中,以目标应用程序实现为视频播放器,终端操作系统实现为ios系统为例进行说明。该播放器的内核开发语言为c++,其接口为c++程序,由于ios系统中的接口(提供字幕渲染功能的程序)也是c++程序,也就是说,获取画布字幕元素的过程可以在播放器中直接实现。
在一些可选的实施例中,终端操作系统实现为ios系统,图10是本申请实施例提供的一种字幕元素的渲染方法的流程图,如图10所示,ios系统中的字幕渲染流程包括如下步骤:
播放前或者播放窗口的大小变化前:
S1001:根据接收到的渲染指令在播放界面的画布模块创建目标位图。
示意性的,该画布模块为持续显示在播放窗口的图层,则当接收到字幕渲染指令时,在播放界面的画布模块创建初始位图。该位图的尺寸与画布模块的尺寸相同,或者,为开发人员设置的(也即,默认大小)的尺寸。
可选地,该位图的格式为ARGB8888。
视频播放中,循环调用如下步骤:
S1002:将画布模块中的数据清空得到目标位图。
示意性的,若在播放过程中(且播放的不是第一个视频帧),或者播放窗口的大小没有改变,只需要将画布模块中上一段字幕位图数据清空即可。
S1003:从文本数据块中取出字幕。
示意性的,文本数据块(textBlockList)中保存有字幕文本和字幕渲染参数,根据当前播放视频的视频帧从文本数据块中将相应的字幕文本取出。
S1004:创建文本承载对象。
也即,调用ios系统的文本承载创建接口创建空白的文本承载对象(NSMutableAttributeString)。
S1005:设置字幕对齐方式。
其中,对齐方式包括:左对齐、右对齐、居中对齐、两端对齐、分散对齐中的其中一种。
示意性的,基于字幕渲染参数,设置文本承载对象中对齐模块(NSMutableParagraphStyle)的对齐属性。
S1006:设置字体格式属性。
示意性的,基于字幕渲染参数,设置文本承载对象中字体格式模块(NSFontAttributeName)的字体格式属性,其中,字体格式包括字号、字体、颜色、抗锯齿、斜体或粗体,描边颜色和宽度等。
S1007:基于文本承载对象获取第一字幕元素。
可选地,基于字幕渲染参数,设置文本承载对象中对齐模块的对齐属性以及设置文本承载对象中字体格式模块的字体格式属性,可认为是,基于字幕渲染参数,修改了文本承载对象中的默认属性值,则当将字幕文本传入文本承载对象即可自动继承其中的属性值,也即,将字幕文本按照字幕渲染参数进行格式的调整。
示意性的,基于设置好字体格式属性和对齐属性的文本承载对象,生成第一字幕元素,并计算第一字幕元素的尺寸。
在一些可选的实施例中,若文本数据块存在多条字幕文本,则循环执行步骤1003至步骤1007,获取多条字幕文本对应的第一字幕元素的集合。
S1008:基于画布模块的宽高和第一字幕元素,得到这块字幕的显示区域尺寸。
可选地,基于画布模块的宽高和第一字幕元素,得到字幕文本在画布模块上的显示尺寸。
可选地,将画布模块的宽高和第一字幕元素的尺寸输入绘制尺寸模块(getDrawingSize),获取第一字幕元素在画布模块的显示区域的大小。
可选地,绘制尺寸模块中配置有第一字幕元素在画布区域的显示比例,基于该显示比例,获取第一字幕元素在画布区域的显示区域的大小。
S1009:获取第二字幕元素。
通过绘制字幕模块(drawTextParagraph)获取第二字幕元素。
获取第二字幕元素的步骤可参考步骤1003至步骤1007,也即先设置绘制字幕模块中的属性值,再将字幕文本输入该模块中。也即,在绘制字幕模块中设置与字幕绘制相关的属性值(例如:透明度、换行、边框等),然后将字幕文本输入绘制字幕模块,获取继承了绘制字幕模块中属性值的第二字幕元素。
S1010:将第二字幕元素绘制到画布模块,并将画布模块中的位图数据显示在播放器中。
可选地,基于第一字幕元素在画布区域的显示区域的大小,将第二字幕元素绘制至画布模块。
可选地,其中,第一字幕元素在画布区域的显示区域的大小也即是第二字幕元素在画布区域的显示区域的大小。
可选地,由于上述过程在播放器内部执行,则该位图可直接显示在播放器中。
综合上述说明,对本申请实施例提供的字幕元素的渲染方法中程序模块的执行流程进行具体介绍,图11为本申请一个示例性的实施例提供的字幕元素的渲染方法的完整流程图,该流程图包括以下步骤:
S1101:内容分发模块1101将视频文本格式(Web Video Text Tracks,WebVTT)的字幕文件分发到流处理模块1102。
可选地,内容分发模块可实现内容分发网络(Content Delivery Network,CDN),上述流处理模块可实现为FFmpeg(Fast Forward motion picture experts group)程序。
示意性的,播放器播放视频之前,首先将视频文件传入CDN,CDN将视频文件中的WebVTT字幕文件分发至FFmpeg程序中。
S1102:通过流处理模块1102对WebVTT字幕文件进行解码处理获取WebVTT字幕数据,将该WebVTT字幕数据写入文件块列表(TextBlockList)中,并将文件块列表传入字幕绘制模块(TPSubtitlePainter)1103。
可选地,文件块列表中包含字幕信息块(cue block)。其中,字幕信息块中的字幕数据包括字幕文本和与其对应的时间戳标签,也就是说,每个字幕文本都有其对应的显示时长。
S1103:通过字幕绘制模块1103,计算得到字幕文本的绘制坐标。
也即,对WebVTT字幕数据中的字幕文本进行分析,计算字幕文本在画布上的显示坐标;可选地,对上述字幕文本进行分段处理,获取每段字幕文本的字符长度,对齐方式和换行,计算得到字幕文本的绘制坐标。
S1104:通过字幕渲染工厂1104选择创建ios系统渲染模块1105,或者安卓系统渲染模块1106。
示意性的,上述系统渲染模块主要用于将字幕数据绘制到画布对象上,从而获取画布对象的位图。
可选地,根据业务人员提前配置的文件,选择创建ios系统渲染模块1105,或者安卓系统渲染模块1106。
S1105:ios系统渲染模块1105,或者安卓系统渲染模块1106将绘制有字幕数据的画布对象的位图传入播放器1107。
可选地,上述ios系统渲染模块1105,或者安卓系统渲染模块1106为播放器内部模块,则位图可直接在播放器1107中渲染显示。
可选地,上述ios系统渲染模块1105,或者安卓系统渲染模块1106不是播放器内部模块,则将位图传入播放器1107中进行渲染显示。
下面对本申请实施例提供的字幕元素的渲染方法的有益效果进行说明:
(1)示意性的,请参考图12和图13,图12为相关技术中,字幕渲染方案的编译文件(aar)的存储数据,图13为用本申请实施例中字幕渲染方案取代相关技术中的字幕渲染方案后的编译文件的存储数据。明显的,相关技术中播放器提供的编译文件1201大小为19.14MB,本申请中播放器提供的编译文件1301的大小为11.95MB,减小了7.19MB。则可说明本申请实施例提供的字幕元素的渲染方法可以减小播放器中编译文件的大小。
示意性的,请参考图14和图15,图14为相关技术中,字幕渲染方案的应用程序包(apk)的存储数据,图15为用本申请实施例中字幕渲染方案取代相关技术中的字幕渲染方案后的应用程序包的存储数据。明显的,相关技术中应用程序包1401大小为96.15MB,本申请中应用程序包1501大小为88.95MB,减小了7.2MB。则可说明本申请实施例提供的字幕元素的渲染方法可以明显减小播放器的应用程序包的大小。
(2)示意性的,请参考图16,图16为播放器在使用相关技术中的字幕渲染方案1602,使用本申请提供的字幕渲染方案1601以及未使用字幕渲染方案1603的内存对比图。明显的,对比相关技术中的字幕渲染方案1602的平均使用内存136.6MB,本申请提供的字幕渲染方案1601的平均使用内存是131.4MB,相较于未使用字幕渲染方案1603的平均使用内存119.9MB,节省了5.2MB,占比31%。则可说明本申请实施例提供的字幕元素的渲染方法可以减少播放器在字幕渲染过程中内存占用空间。
请参考图17,其示出了本申请一个示例性的实施例提供的字幕元素的渲染装置结构框图,该装置包括如下单元:
创建单元1710,用于创建目标画布对象,所述目标画布对象是终端操作系统提供的对象创建功能所创建的对象,所述目标画布对象用于在终端界面中承载字幕元素;
获取单元1720,用于获取字幕文本和字幕渲染参数,所述字幕文本是待渲染至所述终端界面的文本,所述字幕渲染参数用于指示所述字幕文本的渲染效果;
绘制单元1730,用于基于所述字幕文本和所述字幕渲染参数,将所述字幕元素绘制至所述目标画布对象上,得到画布字幕元素;
渲染单元1740,用于将所述画布字幕元素渲染至所述终端界面,得到所述字幕元素在所述终端界面的渲染结果。
请参考图18,在一些可选的实施例中,所述绘制单元1730,包括:
创建子单元1731,用于创建文本承载对象,所述文本承载对象用于承载所述字幕元素;
所述绘制单元1730,还用于基于所述字幕文本和所述字幕渲染参数,在所述文本承载对象上绘制所述字幕元素,得到承载字幕元素;
所述绘制单元1730,还用于将所述承载字幕元素绘制至所述目标画布对象上,得到所述画布字幕元素。
在一些可选的实施例中,所述绘制单元1730,还用于基于所述字幕文本在所述文本承载对象上绘制文本元素,所述文本元素是基于默认渲染参数绘制的元素;所述绘制单元1730,还用于基于所述字幕渲染参数对所述文本元素进行调整,得到所述承载字幕元素。
在一些可选的实施例中,所述获取单元1720,还用于获取默认批量渲染参数,所述默认批量渲染参数为在所述文本承载对象内的默认的批量参数模板;所述绘制单元1730,用于基于所述字幕渲染参数,对所述默认批量渲染参数进行更新,得到更新后的默认批量渲染参数;所述绘制单元1730,还用于基于所述字幕文本和更新后的默认批量渲染参数,在所述文本承载对象上绘制所述承载字幕元素。
在一些可选的实施例中,所述创建单元1710,包括:
获取子单元1711,用于获取画布初始化参数,所述画布初始化参数用于指示所述目标画布对象的创建要求;
所述创建单元1710,还用于基于所述画布初始化参数创建所述目标画布对象。
在一些可选的实施例中,所述获取子单元1711,用于获取第一位图数据,所述第一位图数据是通过目标程序的程序语言生成的位图数据,所述第一位图数据用于表征所述目标画布对象的创建要求;所述创建单元1710,用于依据所述第一位图数据创建第二位图数据作为所述画布初始化参数,所述第二位图数据是通过终端操作系统的系统语言生成的位图数据;所述创建单元1710,还用于基于所述第二位图数据创建所述目标画布对象。
在一些可选的实施例中,所述装置,还包括:
生成单元1750,用于基于所述字幕文本和所述字幕渲染参数生成画布调整参数;
调整单元1760,用于基于所述画布调整参数对所述目标画布对象进行调整,得到调整后的目标画布对象,所述字幕元素用于在调整后的目标画布对象上进行绘制;所述画布调整参数包括位置参数、排版参数和边框参数中的至少一种。
在一些可选的实施例中,所述渲染单元1740,包括:
转化子单元1741,用于将所述画布字幕元素转化为第三位图数据,所述第三位图数据用于以位图形式对所述画布字幕元素进行存储;
所述渲染单元1740,还用于基于所述第三位图数据在所述终端界面上渲染承载有所述字幕元素的所述画布字幕元素,得到所述字幕元素在所述终端界面的渲染结果。
在一些可选的实施例中,所述字幕文本包括多个字幕子文本;所述获取单元1720,用于获取所述字幕文本中的多个字幕子文本;所述获取单元1720,还用于获取多个字幕子文本分别对应的视频帧画面,所述视频帧画面是与所述字幕子文本在时间轨道上同步的画面;所述获取单元1720,还包括:
预测子单元1721,用于对所述多个字幕子文本分别对应的视频帧画面进行风格预测,得到所述多个字幕子文本分别对应的视频帧画面风格;
所述获取单元1720,还用于基于多个字幕子文本分别对应的视频帧画面风格,获取多个字幕子文本分别对应的子字幕渲染参数。
综上所述,本申请实施例提供的字幕元素的渲染装置通过终端操作系统提供的对象创建功能创建目标画布对象,并获取字幕文本和字幕渲染参数,基于字幕文件和字幕渲染参数,绘制得到可以显示在终端界面上的画布字幕元素。由于对象创建功能由终端操作系统本身提供,也就是说,实现画布对象创建功能的程序存储在终端操作系统的本地数据库中,无需额外调用其他的数据库实现对象创建功能,减少了在编译字幕元素渲染程序时的文件包大小,节省了计算机的存储资源。
需要说明的是:上述实施例提供的字幕元素的渲染装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的字幕元素的渲染装置和字幕元素的渲染方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图19示出了本申请一个示例性实施例提供的计算机设备1900的结构框图。该计算机设备1900可以是:智能手机、平板电脑、动态影像专家压缩标准音频层面3播放器(MovingPicture Experts Group Audio Layer III,MP3)、动态影像专家压缩标准音频层面4(Moving Picture Experts Group Audio Layer IV,MP4)播放器、笔记本电脑或台式电脑。计算机设备1900还可能被称为用户设备、便携式计算机设备、膝上型计算机设备、台式计算机设备等其他名称。
通常,计算机设备1900包括有:处理器1901和存储器1902。
处理器1901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1901可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器1901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(CentralProcessing Unit,CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1901可以在集成有图像处理器(Graphics Processing Unit,GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1901还可以包括人工智能(Artificial Intelligence,AI)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1902中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1901所执行以实现本申请中方法实施例提供的字幕元素的渲染方法。
示意性的,计算机设备1900还包括其他组件,本领域技术人员可以理解,图19中示出的结构并不构成对计算机设备1900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,该计算机可读存储介质可以是上述实施例中的存储器中所包含的计算机可读存储介质;也可以是单独存在,未装配入计算机设备中的计算机可读存储介质。该计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述实施例中任一所述的字幕元素的渲染方法。
可选的,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、固态硬盘(SSD,Solid State Drives)或光盘等。其中,随机存取记忆体可以包括电阻式随机存取记忆体(ReRAM,Resistance RandomAccess Memory)和动态随机存取存储器(DRAM,Dynamic Random Access Memory)。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
- 一种用于绕制球形线圈的治具及使用该治具制备球形线圈的方法
- 一种用于钻具螺纹检测的磁化线圈移动装置
- 一种用于钻具螺纹检测的磁化线圈移动装置