一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

针对APP与Unity实时渲染视频帧纹理的方法与流程

2022-11-19 07:47:37 来源:中国专利 TAG:

针对app与unity实时渲染视频帧纹理的方法
技术领域
1.本发明涉及视频帧渲染技术领域,特别涉及unity 3d的渲染技术领域,尤指一种针对app与unity实时渲染视频帧纹理的方法,是一种在android和ios系统中的app与unity 3d实时渲染视频帧纹理的方法。其可广泛应用于移动端unity 3d动画视频功能的开发。


背景技术:

2.目前为了使app读取的视频帧图片显示在unity 3d界面中并完成实时渲染纹理和视频保存时,通常采用app调用unity sdk接口函数的方式。
3.实时渲染时,app与unity以字符串的方式交互变量值,app将视频帧解码为图片数据,再转码为base64字符串,传送给unity脚本函数,unity脚本函数将base64字符串转换为帧图片数据后添加到gpu显存并渲染图片。
4.渲染视频保存时,unity脚本函数将gpu显存内的纹理图片拷贝到内存,转码为base64字符串数据后再传送给app,app将base64字符串数据转码为帧图片数据后,将帧图片数据转为视频帧数据并写入视频文件。
5.利用unity sdk接口函数与app交互变量值,只能通过base64字符串数据的方式传输帧图片数据,多次转码、解码,渲染效率低,无法满足实时渲染视频帧图片的需求。亟待改进。
6.unity是一款由unity technologies研发的跨平台2d/3d游戏引擎。它以交互的图型化开发环境为首要方式,编译器运行在windows 和mac os x下,可发布游戏至windows、wii、osx、ios或html5等众多平台。此外,unity 还是被广泛用于建筑可视化、实时三维动画等类型互动内容的综合型创作工具。
7.sdk(software development kit,软件开发工具包),一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。它可以简单地为某个编程语言提供应用程序接口的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。
8.app(application,手机软件)是指安装在智能手机上的软件,需要有相应的手机系统来运行。其主要功能是完善原始系统的不足与个性化,使手机功能更加完善,为用户提供更丰富的使用体验。
9.c 是一种面向对象的计算机程序设计语言。
10.ndk(native development kit)称为本机开发套件,是一种开发工具,开发者使用该套件可以运用c / c 为android设备编程。
11.texture纹理,表示在图形中物体表面的及图片效果。
12.true在计算机程序里通常表示判断的结果为成立。
13.false在计算机程序里通常表示判的断结果为不成立。


技术实现要素:

14.本发明的目的在于提供一种针对app与unity实时渲染视频帧纹理的方法,是一种高效的移动端unity 3d视频渲染技术,解决了现有技术存在的移动端unity 3d渲染效率低的问题。
15.本发明的上述目的通过以下技术方案实现:针对app与unity实时渲染视频帧纹理的方法,app通过ndk与c 代码交互,通过c 渲染函数直接将视频帧纹理渲染至unity内部纹理,c 通过共享纹理的方式,使unity与app同时使用一个纹理进行渲染;包括如下步骤:s1、unity端导出sdk,app端导入unity sdk和c ndk;s2、app端调用c 函数获取unity端渲染引擎初始化后的上下文;s3、app端调用c 函数初始化渲染环境,创建一个新的渲染上下文,app端调用c 函数,创建一个unity端与app共享的上下文环境;s4、unity端调用app端c 函数创建一个texture类型的纹理,并将纹理句柄返回给unity端;s5、app端解码视频帧图片数据,app端调用c 函数将视频解码成帧图片数据;s6、app端将解码视频帧图片数据绑定到texture类型的纹理,并设置布尔类型变量是否绑定新一帧的数据,当指定帧解码完成时,通过c 调用函数将帧图片数据绑定至texture类型的纹理,并设置布尔变量为true;s7、unity端绘制视频帧纹理:unity端自动刷新纹理,调用app端布尔变量,如果变量为true时,unity端根据纹理句柄将纹理绘制在屏幕上;s8、unity端绘制函数返回,不进行绘制:unity端自动刷新纹理,调用app端布尔变量如果变量为false时,函数返回,不进行绘制;s9、视频播放时循环执行步骤s5~s8,直至视频播放完成。
16.本发明的有益效果在于:本发明提供了一种高效的移动端unity 3d视频渲染方法,不需要转码、解码字符串数据,视频帧图片数据添加到gpu显存后,app与unity直接通过纹理句柄操作渲染纹理,节省多次内存到gpu显存的拷贝时间,在外部条件形同的情况下,一帧unity 3d的图像渲染时间缩短了30%,满足实时渲染视频帧图片的需求,并降低了程序的复杂度,使软件架构更简洁。
附图说明
17.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实例及其说明用于解释本发明,并不构成对本发明的不当限定。
18.图1为本发明的系统原理图。
具体实施方式
19.下面将结合附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具
体实施方式对本发明作进一步详细的说明。
20.实施例1:本发明针对app与unity共享渲染环境创建的方法,具体流程是:s1、创建c 类,该类负责完成app与unity的共享上下文的创建、纹理的创建以及视频帧的解码工作;s2、unity端选择app平台(android或ios)导出sdk,app端通过集成开发环境导入unity端导出的sdk和已经建立的c 类;s3、unity端渲染引擎根据事先制作好的游戏素材进行初始化,创建用于共享的上下文,将其保存在内存中,并通知app端共享上下文创建完成;s4、app端收到unity端共享上下文创建完成后,调用c 函数从内存中读取unity端渲染引擎初始化后的上下文,在c 端完成上下文解析后,再次写入内存供后续使用;s5、app端调用c 函数初始化渲染环境,创建一个新的渲染上下文,写入内存供后续使用;s6、app端调用c 的共享纹理函数,将s3中unity创建的上下文共享到s4中创建的渲染环境中,就完成了app与unity的游戏共享渲染环境的创建,创建时间缩短了30%。
21.实施例2:本发明针对app与unity共享纹理创建的方法,具体流程是:s1、准备纹理的像素数据,在c 类中保存数据至imagedata变量中;s2、调用opengl中的glgentextures函数,生成纹理的句柄;s3、调用opengl中的glbindtexture函数绑定s2中生成的句柄,其中指定纹理类型为gl_texture_2d;s4、将调用opengl中的gltextimage2d,将s1中的像素数据imagedata和s2生成的纹理句柄进行绑定;s5、unity端调用c 端s1至s4过程,获取到纹理句柄,unity端根据纹理句柄即能完成对纹理的各项操作,创建时间缩短了30%。
22.实施例3:本发明针对app与unity共实时渲染完成动画播放的方法,具体流程是:s1、app端解码视频帧图片数据:app端调用c 函数将视频解码成帧图片数据。
23.s2、app端将解码视频帧图片数据绑定到s4生成的纹理上,并设置布尔类型变量是否绑定新一帧的数据,当指定帧解码完成时,通过c 调用纹理绑定函数,将帧图片数据绑定至s4创建的纹理上,并设置布尔变量为true。
24.s3、unity端绘制视频帧纹理:unity端调用自动刷新纹理函数,调用app端布尔变量如果变量为true时,unity端根据纹理句柄将纹理绘制在屏幕上。
25.s4、unity端绘制函数返回,不进行绘制:unity端调用自动刷新纹理函数,调用app端布尔变量如果变量为false时,函数返回,不进行绘制。
26.s5、视频播放时循环执行s1-s4步骤,直至视频播放完成,渲染时间缩短了30%。
27.以上所述仅为本发明的优选实例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡对本发明所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献