一种移动终端的视频渲染系统的制作方法

文档序号:6549700阅读:347来源:国知局
一种移动终端的视频渲染系统的制作方法
【专利摘要】本发明提供了一种移动终端的视频渲染系统,所述系统基于C语言的面向对象架构,所述系统包括:输入模块,用于接收视频帧数据,并将视频帧数据发送至渲染模块;渲染模块,用于对视频帧数据进行视频渲染处理,并将视频渲染处理的结果发送至输出模块;视频渲染处理为利用通用的嵌入式系统开放式图形库进行图形处理单元渲染;输出模块,用于将结果生成视频文件、流媒体文件或者显示所述结果。由于C语言已移植于多平台,可以在多种操作系统(包括Android和IOS)下编写应用程序;并且通用的OpenGL?ES库可以方便地移植到各操作系统的移动终端,本发明降低了移动终端的视频渲染系统在多操作系统下开发和维护的难度。
【专利说明】一种移动终端的视频渲染系统

【技术领域】
[0001] 本发明涉及视频处理【技术领域】,特别是涉及一种移动终端的视频渲染系统。

【背景技术】
[0002] 随着智能移动终端的普及和移动终端硬件的快速升级,移动终端的拍摄功能越来 越强大,用户对视频拍摄和处理的需求也开始增长,应用市场上的视频类应用也越来越多。 但现有的视频渲染应用程序都是针对Android (谷歌公司的移动操作系统)或I0S (苹果公 司的移动操作系统)单独进行开发,并且采用的是各自系统自己的框架,不具有通用性,同 一款视频渲染应用程序需要在不同的系统下维护和开发几个版本,不仅开发和维护繁琐, 而且浪费资源。


【发明内容】

[0003] 本发明提供一种移动终端的视频渲染系统,以解决现有的移动终端的视频渲染应 用程序在不同的操作系统下不具有通用性的问题。
[0004] 为了解决上述问题,本发明公开了一种移动终端的视频渲染系统,所述系统基于C 语言的面向对象架构,所述系统包括:
[0005] 输入模块,用于接收视频帧数据,并将所述视频帧数据发送至渲染模块;
[0006] 渲染模块,用于对所述视频帧数据进行视频渲染处理,并将所述视频渲染处理的 结果发送至输出模块;所述视频渲染处理为利用通用的嵌入式系统开放式图形库进行图形 处理单元渲染;
[0007] 输出模块,用于将所述结果生成视频文件、流媒体文件或者显示所述结果。
[0008] 优选地,所述输入模块的输入接口至少包括图片文件、视频文件和摄像头数据之
[0009] 所述输入模块的输出目标为所述渲染模块。
[0010] 优选地,所述渲染模块的渲染接口包括滤镜或转场;
[0011] 所述渲染模块的输出目标包括所述输出模块。
[0012] 优选地,所述滤镜包括色彩变换滤镜、高斯模糊滤镜、高光滤镜和滤色滤镜,所述 色彩变换滤镜、所述高斯模糊滤镜、所述高光滤镜和所述滤色滤镜之间为串联关系;
[0013] 所述渲染模块的输出目标还包括所述色彩变换滤镜、所述高斯模糊滤镜、所述高 光滤镜或所述滤色滤镜。
[0014] 优选地,所述输出模块的输出接口为视频文件、流媒体文件或显示到显示屏。
[0015] 优选地,所述输出模块,还用于将所述视频文件和/或所述流媒体文件发送至所 述输入模块。
[0016] 优选地,所述输入模块,还用于将所述输出模块发送的所述视频文件和/或所述 流媒体文件发送至所述渲染模块进行视频渲染处理。
[0017] 优选地,所述渲染模块将所述视频渲染处理的结果保存到渲染任务队列中,并在 所述渲染任务队列中将所述视频渲染处理的结果发送至输出模块。
[0018] 优选地,所述渲染模块当所述渲染任务队列中的所述视频渲染处理的结果的容量 大于预定容量时,停止对所述视频帧数据进行视频渲染处理。
[0019] 优选地,所述输入模块、所述渲染模块和所述输出模块均包括多个任务线程。
[0020] 与【背景技术】相比,本发明包括以下优点:
[0021] 本发明技术方案中移动终端的视频渲染系统基于C语言的面向对象架构,并利用 通用的OpenGL ES(0penGL for Embedded Systems,嵌入式系统开放式图形)库进行视频渲 染。由于C语言已移植于多平台,可以在多种操作系统(包括Android和I0S)下编写应用 程序;并且通用的OpenGL ES库可以方便地移植到各操作系统的移动终端,本发明降低了 移动终端的视频渲染系统在多操作系统下开发和维护的难度。

【专利附图】

【附图说明】
[0022] 图1是本发明中输入模块、渲染模块和输出模块之间的关系示意图;
[0023] 图2是本发明实施例中一种移动终端的视频渲染系统结构示意图;
[0024] 图3是本发明实施例中另一种移动终端的视频渲染系统结构示意图;
[0025] 图4是本发明实施例中的渲染处理拓扑图;
[0026] 图5是本发明实施例中多滤镜串联关系示意图。

【具体实施方式】
[0027] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实 施方式对本发明作进一步详细的说明。
[0028] 本发明中的移动终端主要包括采用Android系统以及I0S系统的移动终端,但并 不对移动终端的类型进行限制,还可以为采用其他操作系统的移动终端。
[0029] 首先,本发明在架构上采用了一种C语言的面向对象的结构,并引入了常在 C++语言的面向对象机制中运用的对象引用计数机制,这种机制再加上KV0 (Key-Value Observing,键值观察)机制,方便对象的管理。而且,还引入了消息传送机制,每个对象都 可以广播自己的消息,其它对象可以对该对象的某个具体消息进行注册,以监听消息。实现 了独特的对象引用计数机制、消息传送机制、KV0,使得结构非常的清晰化。
[0030] 其次,本发明采用三级结构,分别是输入(input)模块、渲染(render)模块以及输 出(output)模块。视频渲染任务通过输入模块驱动,传递给渲染模块,最后传递给输出模 块。输入模块将获取到的视频帧数据传递给渲染模块,渲染模块对视频帧数据进行渲染处 理之后,将已经渲染处理的视频帧数据传递给输出模块,输出模块决定最终输出成磁盘文 件或者通过显示屏显示出来,如图1所示,图1示出了输入模块、渲染模块和输出模块之间 的关系不意图。
[0031] 最后,输入模块与输出模块之间可以相互转化,可以采用级联的形式输出,即前一 个流程的"输出"是后一个流程的"输入"。
[0032] 本发明技术方案的结构清晰,而且采用的都是C语言开发,非常便于移植到其他 移动平台。
[0033] 下面通过列举几个具体的实施例详细介绍本发明提供的一种移动终端的视频渲 染系统。
[0034] 实施例一
[0035] 详细介绍本发明实施例提供的一种移动终端的视频渲染系统。
[0036] 参照图2,示出了本发明实施例中一种移动终端的视频渲染系统结构示意图。 [0037] 所述系统基于C语言的面向对象架构,可以包括:输入模块100,渲染模块102和 输出模块104。
[0038] 下面分别详细介绍各模块的功能以及各模块之间的关系。
[0039] 输入模块100,用于接收视频帧数据,并将所述视频帧数据发送至渲染模块102。
[0040] 所述视频帧数据可以为帧形式的视频数据,此处的视频帧数据可以指移动终端中 需要进行渲染的视频数据,包括移动终端拍摄的视频和从移动终端以外获取到的视频。
[0041] 渲染模块102,用于对所述视频帧数据进行视频渲染处理,并将所述视频渲染处理 的结果发送至输出模块104。
[0042] 所述视频渲染处理可以为利用通用的OpenGL ES库进行GPU(Graphic Processing Unit,图形处理单元)渲染。
[0043] 0penGL(0pen Graphics Library,开放式图形库)是个定义了跨编程语言、跨平台 的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是 一个功能强大,调用方便的底层图形库。
[0044] OpenGL ES是从OpenGL裁剪定制而来的,是OpenGL三维图形API (Application Programming Interface,应用程序编程接口)的子集,针对手机、PDA(Personal Digital Assistant,个人数字助理)和游戏主机等嵌入式设备而设计。
[0045] 输出模块104,用于将所述结果生成视频文件、流媒体文件或者显示所述结果。
[0046] 综上所述,本发明实施例的技术方案中,移动终端的视频渲染系统基于C语言的 面向对象架构,并利用通用的OpenGL ES库进行视频渲染。由于C语言已移植于多平台,可 以在多种操作系统(包括Android和I0S)下编写应用程序;并且通用的OpenGL ES库可以 方便地移植到各操作系统的移动终端,本发明降低了移动终端的视频渲染系统在多操作系 统下开发和维护的难度。
[0047] 实施例二
[0048] 详细介绍本发明实施例提供的一种移动终端的视频渲染系统。
[0049] 参照图3,示出了本发明实施例中一种移动终端的视频渲染系统结构示意图。
[0050] 所述系统基于C语言的面向对象架构,主要包括两个模块:多线程工作管理模块 200和视频渲染模块202。所述多线程工作管理模块200和视频渲染模块202同时存在,二 者之间不存在先后顺序,是系统框架中的两个设计模式。
[0051] 其中,所述视频渲染模块202可以包括下列三个子模块:输入模块2021,渲染模块 2022和输出模块2023。
[0052] 下面分别详细介绍各模块、各子模块的功能,以及各模块、各子模块之间的关系。
[0053] OpenGL ES是状态机模式,状态机可以描述为一个有向图形,由一组节点和一组相 应的转移函数组成。状态机通过响应一系列事件而"运行"。每个事件都在属于"当前"节 点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回"下一个"(也 许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态,状态机停止。
[0054] OpenGL ES使用一个OpenGL ES Context (上下文)来保存自己的状态,比如当前 的颜色、纹理坐标、变换矩阵、渲染模式等,这些状态作用于系统提交的顶点坐标等图元从 而形成帧缓冲内的像素。在OpenGL ES的编程接口中,Context就代表这个状态机,系统的 主要工作就是向Context提供图元、设置状态,也从Context里获取一些信息。这个Context 是跟线程相关的,线程中想要调用OpenGL ES的编程接口,就必须设置一个Context为当前 线程的Context, -个Context在某一时刻只能属于一个线程,一个线程也最多只能有一个 Context,如果线程中没有Context, OpenGL ES的API调用就会失败。
[0055] 因此为了让某些特定的任务在有Context的线程中执行,就必须为线程开发特定 的消息传递机制和任务队列。所述多线程工作管理模块200主要用于负责消息传递机制和 任务队列的管理工作。
[0056] 在视频渲染模块202执行相关职能的过程中,多线程工作管理模块200也对其中 的消息传递机制和任务队列进行管理。
[0057] 渲染模块2022是视频渲染模块202的核心,渲染模块2022在一个单独的线程里 工作。渲染任务启动后,渲染模块2022分析所有的输入,滤镜和输出,形成一个拓扑图,如 图4所示,其中,A、B、C和D为每个根输入节点、A1为A的下一步处理节点;B1为B的下一 步处理节点,B2为B1的下一步处理节点;C1为C和D共同的下一步处理节点;A2为A1和 B2共同的下一步处理节点;C2为B2和C1共同的下一步处理节点;A3为A2和C2共同的下 一步处理节点。拓扑图中的每个根输入A、B、C和D向渲染模块2022注册一个消息响应的 事件,然后进入处理循环。
[0058] 在每次的处理循环开始时,渲染模块2022发出开始渲染的消息,根输入A、B、C和D 获取到事件通知后,开始当前的一些信息,如当前的时间帧位置、尺寸大小,进行数据解码, 获取到视频帧数据。当视频帧数据准备完成后,通知它的下一步进行处理。下一步骤会判 断当前所有输入是否都已准备就绪,如果没有就绪则等待;就绪则进入下一步处理,以此类 推。
[0059] 视频帧数据最终的渲染结果放到一个先进先出的队列中,同时它也发送一个通知 信号,让等待视频帧数据的输出模块2023得到通知。当视频帧数据达到队列上限时,渲染 模块2022要等待输出模块2023取出视频帧数据后再继续进入处理循环。
[0060] 最终的输出模块2023 -般会在一个单独的线程里工作,它向渲染模块2022的队 列里请求视频帧数据,如果有视频帧数据则从队列头里取出视频帧数据,进行自己的处理, 没有则等待。
[0061] 所述视频渲染模块202可以包括:输入模块2021、渲染模块2022和输出模块 2023。
[0062] (一)、输入模块2021,用于接收视频帧数据,并将所述视频帧数据发送至渲染模 块 2022。
[0063] 所述输入模块2021主要定义了输入接口,以及设置其输出目标。一般情况下,输 入模块2021的输出目标是渲染模块2022。图片文件、视频文件、摄像头数据等都实现了输 入接口定义的接口,是输入模块2021的输入接口的具体实现。
[0064] 优选地,所述输入模块2021的输入接口至少包括图片文件、视频文件和摄像头数 据之一。
[0065] 所述输入模块2021的输出目标可以为所述渲染模块2022。
[0066](二)、渲染模块2022,用于对所述视频帧数据进行视频渲染处理,并将所述视频 渲染处理的结果发送至输出模块2023。
[0067] 所述视频渲染处理可以为利用通用的嵌入式系统开放式图形库进行图形处理单 元渲染。
[0068] 渲染模块2022主要定义了渲染接口,以及设置其输出目标。在渲染模块2022中, 定义了很多的滤镜效果,可以处理色彩变换,高斯模糊,高光,滤色等滤镜,这些滤镜实现了 定义的渲染接口,而且这些滤镜的输出目标可以是下一个滤镜,滤镜可以串联起来,如图5 所示,滤镜1、滤镜2、滤镜3和滤镜4依次串联。最后一个滤镜的输出目标就是输出模块 2023。
[0069] 上述滤镜可以实现多个输入和多个输出。在有些滤镜中,比如叠加模式滤镜中,可 以两个和两个以上的输出,并根据设置的叠加模式,产生叠加效果。而且每个滤镜的输出也 可以是多个的,因此滤镜除可以串联外,也可以并联。
[0070] 优选地,所述渲染模块2022的渲染接口可以包括滤镜或转场。
[0071] 所述渲染模块2022的输出目标可以包括所述输出模块2023。
[0072] 其中,所述滤镜可以包括色彩变换滤镜、高斯模糊滤镜、高光滤镜和滤色滤镜。所 述色彩变换滤镜、所述高斯模糊滤镜、所述高光滤镜和所述滤色滤镜之间可以为串联关系。
[0073] 所述渲染模块2022的输出目标还可以包括所述色彩变换滤镜、所述高斯模糊滤 镜、所述高光滤镜或所述滤色滤镜。
[0074] 需要说明的是,上述多线程工作管理模块200还可以用于对上述输入模块2021和 上述渲染模块2022中的多线程任务进行管理。例如,输入模块2021的多线程任务为同时 从两个不同存储位置获取视频帧数据A和视频帧数据B ;渲染模块2022的多线程任务为对 视频帧数据A进行高斯模糊滤镜处理时,同时还对视频帧数据B进行高光滤镜处理。
[0075] (三)、输出模块2023,用于将所述结果生成视频文件、流媒体文件或者显示所述 结果。
[0076] 输出模块2023主要定义了输出接口,其接收从渲染模块2022传递过来的视频帧 数据。输出模块2023的具体实现可以是视频文件、或者显示到显示屏、或者以流媒体的形 式传输到网络中。
[0077] 优选地,所述输出模块2023的输出接口可以为视频文件、流媒体文件或显示到显 示屏。
[0078] 优选地,所述输出模块2023,还用于将所述视频文件和/或所述流媒体文件发送 至所述输入模块2021。
[0079] 具体地,输出模块2023将视频文件和流媒体文件发送至输入模块2021 ;或者,输 出模块2023将视频文件或者流媒体文件发送至输入模块2021。
[0080] 除上述对输入模块2021和渲染模块2022的介绍说明之外,所述输入模块2021和 渲染模块2022还包括下列功能。
[0081] 优选地,所述输入模块2021,还用于将所述输出模块2023发送的所述视频文件和 /或所述流媒体文件发送至所述渲染模块2022进行视频渲染处理。
[0082] 具体地,输入模块2021,还用于将输出模块2023发送的视频文件和流媒体文件发 送至渲染模块2022进行视频渲染处理;或者,输入模块2021,还用于将输出模块2023发送 的视频文件或流媒体文件发送至渲染模块2022进行视频渲染处理。
[0083] 优选地,所述渲染模块2022将所述视频渲染处理的结果保存到渲染任务队列中, 并在所述渲染任务队列中将所述视频渲染处理的结果发送至输出模块2023。
[0084] 优选地,所述渲染模块2022当所述渲染任务队列中的所述视频渲染处理的结果 的容量大于预定容量时,停止对所述视频帧数据进行视频渲染处理。
[0085] 例如,渲染任务队列中的预定容量为500MB或者为渲染任务队列总容量的90%, 当渲染任务队列中的视频渲染处理的结果的容量为550MB或者占渲染任务队列的总容量 的95 %时,渲染模块2022停止对视频帧数据进行视频渲染处理,待渲染任务队列中的视频 渲染处理的结果发送至输出模块2023之后再继续视频渲染处理,或者待渲染任务队列中 的视频渲染处理的结果的容量低于某一数值时,再继续视频渲染处理。该某一数值可以根 据实际情况设定,此处不对该某一数值进行限定。
[0086] 优选地,所述输入模块2021、所述渲染模块2022和所述输出模块2023均包括多个 任务线程。
[0087] 在实际应用中,首先,可以根据具体需求配置输入模块,渲染模块(包括其中的滤 镜等)和输出模块的组合。
[0088] 其次,根据配置的组合,由输入模块发起渲染的总命令。发送视频帧数据至渲染模 块。如是视频文件,则发送解码的视频帧数据;如是摄像头,则发送拍摄的视频帧数据。 [0089] 再次,渲染模块获取到输入模块发送过来的视频帧数据后,在内部多个滤镜里面 依次传递,由滤镜处理,得到渲染处理后的结果。
[0090] 最后,渲染模块将最终渲染处理后的结果传递到输出模块,根据预先配置好的输 出模块,进行生成文件操作或者将渲染处理后的结果显示出来。
[0091] 本发明实施例的系统框架还向第三方提供了注册接口,可以向系统框架注册"输 入接口 "、"输出接口"、"滤镜接口",以扩展系统框架的功能。这些接口在注册时需要提供一 个唯一的名称,注册完成后,就可以通过名称来使用相关的接口。这些注册接口必须实现系 统定义的一些方法。比如输入接口需要提供获取视频帧数据的方法,并返回数据;滤镜接口 需要提供处理视频帧数据的方法,并返回数据,滤镜接口也可以什么都不用做,直接返回输 入过来的数据,这种情况下,这个滤镜接口就没有什么意义。当前系统框架已经提供了基本 的图像输入(使用〇pencv(0pen Source Computer Vision Library,开源计算机视觉库)), 文件视频输入(使用ffmpeg(是一个开源免费跨平台的视频和音频流方案)解码)和文 件视频输出(使用ffmpeg解码),色彩转换滤镜,卡通滤镜,油画滤镜,美肤,L0M0等30多 种滤镜。并根据操作系统特性分别提供了 I0S和Android的摄像头输入,屏幕输出等各种 接口。第三方获取到系统中的接口后,可以以动态库的方式扩展(也可以配置成静态库方 式)。第三方编写这个动态库时,必须向外导出一个指定的方法,这个方法的签名已经指定。 并且在这个方法里向框架注册"输入接口"、"输出接口 "、"滤镜接口"。这个动态库必须放置 在指定的目录,框架程序在启动的时候,会扫描这个目录,并动态加载这个动态库。框架会 在这个动态库里,根据指定的方法签名去寻找这个导出的方法,并调用这个方法,从而把这 些接口注册到框架中。
[0092] 综上所述,本发明实施例的技术方案中,移动终端的视频渲染系统基于C语言的 面向对象架构,并利用通用的OpenGL ES库进行视频渲染,使得开发人员在Android系统和 I0S系统上,能够简单的调用系统的渲染框架接口进行视频渲染应用程序的开发,而不需要 在意底层的实现结构。
[0093] 其次,可以快捷地加入各种新的输入接口或者输出接口,如网络视频流,添加新的 滤镜或者转场。第三方获取注册接口后只需要添加少量的代码和特有的需求,就可以直接 用来渲染视频,具有非常强的扩展性。
[0094] 而且,支持多线程工作管理,相对移动终端解码器无法多线程工作来说,提高了视 频渲染的效率。
[0095] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与 其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[〇〇96]以上对本发明实施例所提供的一种移动终端的视频渲染系统,进行了详细介绍, 本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用 于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的 思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为 对本发明的限制。
【权利要求】
1. 一种移动终端的视频渲染系统,其特征在于,所述系统基于C语言的面向对象架构, 所述系统包括: 输入模块,用于接收视频帧数据,并将所述视频帧数据发送至渲染模块; 渲染模块,用于对所述视频帧数据进行视频渲染处理,并将所述视频渲染处理的结果 发送至输出模块;所述视频渲染处理为利用通用的嵌入式系统开放式图形库进行图形处理 单元渲染; 输出模块,用于将所述结果生成视频文件、流媒体文件或者显示所述结果。
2. 根据权利要求1所述的系统,其特征在于, 所述输入模块的输入接口至少包括图片文件、视频文件和摄像头数据之一; 所述输入模块的输出目标为所述渲染模块。
3. 根据权利要求1所述的系统,其特征在于, 所述渲染模块的渲染接口包括滤镜或转场; 所述渲染模块的输出目标包括所述输出模块。
4. 根据权利要求3所述的系统,其特征在于,所述滤镜包括色彩变换滤镜、高斯模糊滤 镜、高光滤镜和滤色滤镜,所述色彩变换滤镜、所述高斯模糊滤镜、所述高光滤镜和所述滤 色滤镜之间为串联关系; 所述渲染模块的输出目标还包括所述色彩变换滤镜、所述高斯模糊滤镜、所述高光滤 镜或所述滤色滤镜。
5. 根据权利要求1所述的系统,其特征在于, 所述输出模块的输出接口为视频文件、流媒体文件或显示到显示屏。
6. 根据权利要求1所述的系统,其特征在于, 所述输出模块,还用于将所述视频文件和/或所述流媒体文件发送至所述输入模块。
7. 根据权利要求6所述的系统,其特征在于, 所述输入模块,还用于将所述输出模块发送的所述视频文件和/或所述流媒体文件发 送至所述渲染模块进行视频渲染处理。
8. 根据权利要求1所述的系统,其特征在于,所述渲染模块将所述视频渲染处理的结 果保存到渲染任务队列中,并在所述渲染任务队列中将所述视频渲染处理的结果发送至输 出模块。
9. 根据权利要求8所述的系统,其特征在于, 所述渲染模块当所述渲染任务队列中的所述视频渲染处理的结果的容量大于预定容 量时,停止对所述视频帧数据进行视频渲染处理。
10. 根据权利要求1所述的系统,其特征在于, 所述输入模块、所述渲染模块和所述输出模块均包括多个任务线程。
【文档编号】G06F9/44GK104090753SQ201410266008
【公开日】2014年10月8日 申请日期:2014年6月13日 优先权日:2014年6月13日
【发明者】刘细华 申请人:北京奇艺世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1