CN118118727A - 一种视图画面的视频录制方法和系统 - Google Patents

一种视图画面的视频录制方法和系统 Download PDF

Info

Publication number
CN118118727A
CN118118727A CN202410348855.7A CN202410348855A CN118118727A CN 118118727 A CN118118727 A CN 118118727A CN 202410348855 A CN202410348855 A CN 202410348855A CN 118118727 A CN118118727 A CN 118118727A
Authority
CN
China
Prior art keywords
game engine
texture
video
recording
frame number
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
CN202410348855.7A
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.)
Guangzhou Quyan Network Technology Co ltd
Original Assignee
Guangzhou Quyan Network Technology 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 Guangzhou Quyan Network Technology Co ltd filed Critical Guangzhou Quyan Network Technology Co ltd
Priority to CN202410348855.7A priority Critical patent/CN118118727A/zh
Publication of CN118118727A publication Critical patent/CN118118727A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4334Recording operations
    • 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/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • 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/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44012Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving rendering scenes according to scene graphs, e.g. MPEG-4 scene graphs

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Generation (AREA)

Abstract

本发明公开了一种视图画面的视频录制方法和系统,用于对游戏引擎内的视图画面进行视频录制,通过终端内的服务层响应录制请求,获取录制帧率并初始化游戏引擎;游戏引擎根据录制帧率和视频文件的已编码帧数跳转游戏引擎内的视图画面,并渲染生成纹理标识;服务层按照纹理标识提取纹理数据进行视频编码,生成视频数据写入至视频文件,并更新已编码帧数;游戏引擎比较已编码帧数和视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件。从而实现在同一渲染线程循环地将游戏引擎内摄像机渲染的纹理数据直接回调到服务层进行视频编码,即使在游戏引擎预览帧率较低情况下,仍能保证视频文件的录制帧率完全可控,保持较高的视频质量。

Description

一种视图画面的视频录制方法和系统
技术领域
本发明涉及视频录制技术领域,尤其涉及一种视图画面的视频录制方法和系统。
背景技术
随着科技的进步,视频处理技术日渐成熟,逐步走向智能化。同时应用软件也飞速发展,在用户使用应用过程中,可能存在对应用所呈现的引用画面进行录制的需求。
目前,当用户需要对unity3d引擎的内容进行录制时,通常是通过对unity3d引擎的渲染画面进行截图,待结束录制后,将保存的截图数据合成为录制视频。
但在上述录制过程中,由于unity3d引擎的渲染帧率受运行机型性能影响较大,在性能较低的机型录制过程中容易出现帧率丢失或视频卡顿的情况,导致视频录制质量较低。
发明内容
本发明提供了一种视图画面的视频录制方法和系统,解决了由于unity3d引擎的渲染帧率受运行机型性能影响较大,在性能较低的机型录制过程中容易出现帧率丢失或视频卡顿的情况,导致视频录制质量较低的技术问题。
本发明提供的一种视图画面的视频录制方法,应用于终端内的服务层,所述服务层集成有游戏引擎,所述方法包括:
响应录制请求,获取录制帧率并初始化游戏引擎;
通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识;
按照所述纹理标识提取纹理数据进行视频编码,生成视频数据写入至所述视频文件,并更新所述已编码帧数;
通过所述游戏引擎比较所述已编码帧数和所述视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件。
可选地,所述响应录制请求,获取录制帧率并初始化游戏引擎,包括:
响应录制请求,获取携带的录制帧率,并生成录制指令;
调用通知函数发送所述录制帧率和所述录制指令至游戏引擎,以触发所述游戏引擎创建摄像机和纹理数据缓存库。
可选地,所述通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识,包括:
通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数,计算视图画面的画面进度位置;
通过所述游戏引擎将所述视图画面跳转至所述画面进度位置;
通过所述摄像机对所述画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识。
可选地,所述通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数,计算画面进度位置,包括:
通过所述游戏引擎按照所述录制帧率计算对应的画面间隔时间;
通过所述游戏引擎计算视频文件的已编码帧数与所述画面间隔时间的乘值,得到画面进度位置。
可选地,所述通过所述摄像机对所述画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识,包括:
通过所述摄像机对所述画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识;
通过所述摄像机缓存所述纹理数据至所述纹理数据缓存库;其中,所述纹理标识通过所述游戏引擎使用特定脚本接口调用低级原生渲染插件进行上传。
可选地,所述按照所述纹理标识提取纹理数据进行视频编码,生成视频数据写入至所述视频文件,并更新所述已编码帧数,包括:
若存在编码环境,则从所述纹理数据缓存库提取所述纹理标识关联的纹理数据;
调用所述编码环境对应的图形渲染接口对所述纹理数据进行图像渲染,生成渲染纹理;
调用编码工具对所述渲染纹理进行编码,生成视频数据;
调用录制工具将所述视频数据写入至视频文件,并更新所述已编码帧数。
可选地,还包括:
若不存在编码环境,则使用所述特定脚本接口创建编码环境。
可选地,所述通过所述游戏引擎比较所述已编码帧数和所述视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件,包括:
通过所述游戏引擎比较所述已编码帧数和所述视图画面所属视图总帧数;
若所述游戏引擎判定所述已编码帧数与所述视图总帧数不相等,则跳转执行所述通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识的步骤;
若所述游戏引擎判定所述已编码帧数与所述视图总帧数相等,则响应所述游戏引擎的通知显示当前时刻的视频文件。
本发明还提供了一种视图画面的视频录制系统,包括服务层和集成在所述服务层的游戏引擎;
所述服务层,用于响应录制请求,获取录制帧率并初始化游戏引擎;当接收到所述游戏引擎上传的纹理标识时,按照所述纹理标识提取纹理数据进行视频编码,生成视频数据写入至所述视频文件,并更新已编码帧数;根据所述游戏引擎的比较结果显示当前时刻的视频文件;
所述游戏引擎,用于根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识;比较所述已编码帧数和所述视图画面所属视图总帧数,生成比较结果并通知所述服务层。
可选地,系统还包括通信层;
所述通信层包括通知函数和低级原生渲染插件;
所述通知函数,用于传输所述服务层与所述游戏引擎之间的信息;
所述低级原生渲染插件,用于所述游戏引擎发送所述纹理标识至所述服务层。
从以上技术方案可以看出,本发明具有以下优点:
本发明通过终端内的服务层响应录制请求,获取录制帧率并初始化游戏引擎;通过游戏引擎根据录制帧率和视频文件的已编码帧数跳转游戏引擎内的视图画面,并渲染生成纹理标识;服务层按照纹理标识提取纹理数据进行视频编码,生成视频数据写入至视频文件,并更新已编码帧数;通过游戏引擎比较已编码帧数和视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件。从而实现在同一渲染线程将Unity3d内摄像机渲染的纹理数据直接回调到服务层Native,在Native实现视频编码,每完成一帧编码后再通知Unity3d进行下一帧的纹理渲染,在此过程中不需要转码,不需要截图,没有数据转换,能够实现异步渲染合成,即使在Unity3d引擎预览帧率很低的情况下,仍能保证最终的视频文件的录制帧率完全可控,保持较高的视频质量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种视图画面的视频录制方法的步骤流程图;
图2为本发明实施例提供的一种纹理数据和标识生成过程流程图;
图3为本发明实施例提供的一种视图画面的视频录制系统的结构框图;
图4为本发明实施例提供的一种视图画面的视频录制系统的结构细化框图。
具体实施方式
本发明实施例提供了一种视图画面的视频录制方法和系统,用于解决由于unity3d引擎的渲染帧率受运行机型性能影响较大,在性能较低的机型录制过程中容易出现帧率丢失或视频卡顿的情况,导致视频录制质量较低的技术问题。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明实施例提供的一种视图画面的视频录制方法的步骤流程图。
本发明提供的一种视图画面的视频录制方法,应用于终端内的服务层,服务层集成有游戏引擎,方法包括:
步骤101,响应录制请求,获取录制帧率并初始化游戏引擎;
终端指的是如Android、iOS平台等提供本地服务的终端型设备,例如手机、平板电脑、车载联网设备及其他终端等,用于实现视频编码和显示录制游戏引擎的视图画面所生成的视频文件,其可以通过服务层集成游戏引擎以及与游戏引擎进行通信所使用的多种API。
游戏引擎指的是存有多种业务逻辑的虚拟软件,在本实施例中可以为Unity3D引擎,实现如弹唱MV业务、AI音乐MV业务等业务逻辑,其集成于服务层中。可以包括但不限于与服务层通信的消息模块、用于负责具体业务逻辑处理的业务模块和用于渲染画面视图的渲染模块。Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine,Virtools或TorqueGame Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器可运行在Windows、Linux(目前仅支持Ubuntu和Centos发行版)、MacOSX下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windowsphone8和Android平台。也可以利用Unityweb player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac所支持。
录制请求指的是对游戏引擎的视图画面进行录制的请求型信息,其内容可以包括引擎标识、视图画面标识、录制时长和录制帧率等,以指定以哪种录制帧率对哪种游戏引擎的哪个视图画面进行多长时间的录制。
录制帧率指的是用户所需求的帧率FPS,即画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。通常,要避免动作不流畅的最低是30。
在本发明实施例中,通过终端的服务层响应外部输入的录制请求,获取其中携带的录制帧率并触发视频合成指令通知至对应的游戏引擎,以告知该游戏引擎需要进行视频录制和录制帧率,并初始化该游戏引擎,完成视频录制前的准备。
在本发明的一个示例中,步骤101可以包括以下子步骤:
响应录制请求,获取携带的录制帧率,并生成录制指令;
调用通知函数发送录制帧率和录制指令至游戏引擎,以触发游戏引擎创建摄像机和纹理数据缓存库。
在本实施例中,通过终端的服务层响应外部输入的录制请求,获取其携带的录制帧率,同时生成录制指令,通过调用通知函数发送该录制帧率和录制请求至游戏引擎,以触发该游戏引擎进行初始化。通过游戏引擎创建摄像机和与该摄像机进行绑定的纹理数据缓存库,完成录制环境的准备。
其中,摄像机指的是游戏引擎中所使用的摄像机,用于向用户展示该游戏引擎中的视图画面和对视图画面进行渲染,其帧率受设备性能影响。纹理数据库指的是用于存储纹理数据的数据库,可以为RenderTexture,其属于Unity3d中一种以纹理的形式存储屏幕上渲染结果的对象,用于保存渲染效果并可以从中得到渲染图像的纹理标识如纹理ID。纹理ID作为纹理数据的唯一标识,服务层可以通过纹理标识获取到对应的纹理数据,纹理数据是实现渲染效果的基本图像处理单位。通知函数可以为UnitySendMessage,UnitySendMessage是Unity中自带的一个静态C#方法,可用于从Unity发送消息到Native。
步骤102,通过游戏引擎根据录制帧率和视频文件的已编码帧数跳转游戏引擎内的视图画面,并渲染生成纹理标识;
已编码帧数指的是视频文件内的视频帧数,其最小值为0。
在游戏引擎完成初始化,即创建录制环境后,可以通过该游戏引擎以录制帧率和视频文件在当前时刻的已编码帧数,计算出在该录制帧率下需要录制的画面进度位置,并将游戏引擎内的视图画面跳转至对应的位置,渲染该位置的视图画面,生成纹理数据及其关联的纹理标识。
此外,在生成纹理标识后,由于终端中进行视频编码与游戏引擎并不是处于同一模块,可以通过特定的API进行纹理标识的上传,以继续进行后续对纹理数据的视频编码。
在本发明的一个示例中,请参阅图2,步骤102可以包括以下子步骤S11-S13:
S11、通过游戏引擎根据录制帧率和视频文件的已编码帧数,计算视图画面的画面进度位置;
进一步地,S11可以包括以下子步骤:
通过游戏引擎按照录制帧率计算对应的画面间隔时间;
通过游戏引擎计算视频文件的已编码帧数与画面间隔时间的乘值,得到画面进度位置。
在本实施例中,在获取到录制帧率和视频文件的已编码帧数后,可以通过游戏引擎按照录制帧率进行画面间隔时间的计算,并计算视频文件的已编码帧数与画面间隔时间的乘值,得到画面进度位置。
需要说明的是,画面进度位置指的是视频文件的第n+1帧所对应的时间,n≥0且n为整数。视图画面指的是游戏引擎运行时编辑或编辑完成的一帧画面,其包括但不限于动作画面、风景画面、页面画面或其他类型画面。
S12、通过游戏引擎将视图画面跳转至画面进度位置;
在确定画面进度位置后,通过游戏引擎将视图画面从当前的进度位置跳转至画面进度位置,以确定在录制帧率下的视图画面。
具体地,以游戏引擎为Unity3d,已编码帧数n为0帧,视图画面为动作画面为例,将Unity3d上的一段30秒的虚拟形象舞蹈动作录制成录制帧率为30fps的视频,那么每帧画面间隔时间是1000/30=33.33毫秒。
第1帧是从时间s=0毫秒的动作画面,即画面的起始位置。
第2帧就是时间s=33.33毫秒,将Unity3d上的舞蹈动作快进到33.33毫秒的画面进度位置,此时展示33.33毫秒的动作画面;
第3帧时间s=66.66毫秒,将Unity3d上的舞蹈动作快进到66.66毫秒的画面进度位置,此时展示66.66毫秒的动作画面;
以此类推,第n+1帧时间s=n*33.33,将Unity3d上的舞蹈动作快进到s毫秒的画面进度位置,此时展示s毫秒的动作画面。从而通过设定录制帧率的方式,结合已编码帧数即可定位到在该录制帧率下每个画面进度位置的动作画面。
S13、通过摄像机对画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识。
进一步地,S13可以包括以下子步骤:
通过摄像机对画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识;
通过摄像机缓存纹理数据至纹理数据缓存库;其中,纹理标识通过游戏引擎使用特定脚本接口调用低级原生渲染插件进行上传。
在本实施例中,在游戏引擎将视图画面跳转至画面进度位置后,可以调用摄像机获取到该画面进度位置的画面帧数据,对其进行画面渲染,在渲染完当前帧的画面帧数据后,生成纹理数据并将其缓存至纹理数据缓存库。
与此同时,生成与该纹理数据关联的纹理标识,而由于游戏引擎与后续终端进行视频编码可能并不处于同一模块,此时可以通过游戏引擎使用特定脚本接口调用低级原生渲染插件进行上传。
例如,在Unity3d内的摄像机对画面进度位置的画面帧数据进行画面渲染完成生成纹理数据后,将其缓存至RenderTexture并获取到对应的纹理ID,通过使用特定脚本接口GL.IssuePluginEvent调用低级原生渲染插件方法,传递纹理ID到Native(即服务层)。
其中,GL.IssuePluginEvent能够保证Unity3d和Native在同一个渲染线程。低级原生渲染插件指的是低级原生插件接口,用于在渲染线程将Unity3d渲染后的纹理ID传递至Native,其可集成在Unity3d中。
步骤103,按照纹理标识提取纹理数据进行视频编码,生成视频数据写入至视频文件,并更新已编码帧数;
在本实施例中,在服务层接收到纹理标识后,由于服务层和其纹理数据缓存库处于同一渲染线程,此时服务层可以按照纹理标识从纹理数据缓存库提取到与之关联的纹理数据。对该纹理数据进行视频编码生成一帧视频数据后写入至视频文件,并对已编码帧数进行更新。
其中,对已编码帧数的更新可以直接在原始的已编码帧数的基础上进行加一操作,其叠加的帧数与视频数据写入的帧数相等。
在本发明的一个示例中,步骤103可以包括以下子步骤:
若存在编码环境,则从纹理数据缓存库提取纹理标识关联的纹理数据;
调用编码环境对应的图形渲染接口对纹理数据进行图像渲染,生成渲染纹理;
调用编码工具对渲染纹理进行编码,生成视频数据;
调用录制工具将视频数据写入至视频文件,并更新已编码帧数。
编码环境指的是使得图形渲染接口能够在服务层上运行的运行环境,同时能够确保服务层与游戏引擎处于同一个渲染线程,以便于获取到纹理数据。图形渲染接口指的是用于对纹理数据进行图像渲染或者画面绘制的API接口,其可以为OpenGL ES(Open GL forEmbedded Systems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
编码工具指的是用于实现音视频编解码的工具,例如android提供的Mediacodec,其能够创建Surface作为MediaCodec的输入流,使得输入数据可以被外部应用程序和系统图像合成器使用。当OpenGL ES渲染纹理数据到此Surface时,其渲染的图像可以传递到MediaCodec进行编码。
录制工具指的是用于将编码后的视频数据写入到视频文件的工具,例如android提供的MediaMuxer。
由于服务层可能会运行在不同的终端上,而不同的终端可能存在不同的架构,例如Android、iOS或Windows等等,因此为实现图形渲染接口在服务层上的绘制或渲染操作,在服务层得到纹理标识后,为实现后续图形渲染接口的调用,需要先判断当前的服务层是否存在与之适配的编码环境,若是存在该编码环境,则可以直接从纹理数据缓存库提取纹理标识所关联的纹理数据,调用编码环境所对应的图形渲染接口,对该纹理数据进行图像渲染,以生成一帧渲染纹理,再调用编码工具对渲染纹理进行编码,生成视频数据后,调用录制工具将该帧视频数据写入到视频文件。与此同时,按照视频编码的帧数在已编码帧数上叠加对应帧数进行更新,例如单帧视频编码,则在已编码帧数上加一。
此外,通过OpenGL ES按照Unity3d传输的纹理ID获取到对应的纹理数据,在执行图像渲染后将渲染后的渲染纹理转换为可由MediaCodec使用的类型,使用Surface类来将OpenGL输出与MediaCodec相关联,将其传输至MediaCodec输入流。
通过上述步骤102-103的过程,通过Unity3d引擎内的摄像机渲染完成每帧画面的纹理数据及其纹理ID,使用低级原生插件在渲染线程直接将纹理ID传递到服务层Native,一边渲染一边编码,不需要等到Unity3d播放完再开始合成视频,整个过程都是在同一个渲染线程完成,不需要截图、没有数据转换,没有GPU拷贝数据到CPU的过程,减少了性能消耗,60s视频只需30s即可完成编码,极大的提高的编码速度。
可选地,步骤103还可以包括以下子步骤:
若不存在编码环境,则使用特定脚本接口创建编码环境。
在本实施例中,若服务层判定当前不存在编码环境,则可以使用特定脚本接口例如GL.IssuePluginEvent,调用低级原生渲染插件进行适配图形渲染接口的编码环境构建。
例如,以编码环境为OpenGL ES环境为例,由于其定义了移动设备的图形渲染接口API,但并未定义窗口系统,为使其适配不同平台,OpenGL ES需要知道如何通过操作系统创建和访问窗口的库结合使用,这就有了EGL,EGL是OpenGL ES渲染API和本地窗口系统之间的一个中间接口层,其能够提供以下机制:与设备的原生窗口系统通信、查询绘图表面的可用类型和配置、创建绘图表面、在OpenGL ES和其他图形渲染API之间同步渲染、管理纹理贴图等渲染资源等,从而实现让OpenGL ES能够在当前设备上进行绘制或渲染。
通过创建编码环境,使得服务层和Unity3d处于同一渲染线程,使其能够根据纹理标识获取到纹理数据进行视频编码。
步骤104,通过游戏引擎比较已编码帧数和视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件。
视图总帧数指的是该视图画面所属的视图、视频或动作的总帧数。
在本实施例中,待服务层完成视频数据的编码,将其写入到视频文件后,可以通过UnitySendMessage通知游戏引擎如Unity3d,同时将更新后的已编码帧数传输给Unity3d。而Unity3d可以获取到视图画面所属视图总帧数,通过比较视图总帧数和已编码帧数是否相等,根据比较结果判断视频文件的编码是否完成,是否需要通知服务层进行当前时刻的视频文件的显示。
在本发明的一个示例中,步骤104可以包括以下子步骤:
通过游戏引擎比较已编码帧数和视图画面所属视图总帧数;
若游戏引擎判定已编码帧数与视图总帧数不相等,则跳转执行通过游戏引擎根据录制帧率和视频文件的已编码帧数跳转游戏引擎内的视图画面,并渲染生成纹理标识的步骤;
若游戏引擎判定已编码帧数与视图总帧数相等,则响应游戏引擎的通知显示当前时刻的视频文件。
在本实施例中,在游戏引擎接收到服务层下发的已编码帧数后,通过比较已编码帧数和视图画面所属视图总帧数,判断是否需要通知服务层。若是已编码帧数和视图总帧数不相等,则表明此时视频编码的帧数小于视图总帧数,视频文件的编码未完成,跳转执行步骤102-103的步骤,根据最新的已编码帧数进行游戏引擎内视图画面的跳转,再次生成纹理数据和纹理标识供服务层进行下一帧编码。
若是游戏引擎判定已编码帧数和视图总帧数相等,则表明此时对于视图画面所属视图的录制已编码完成,此时可以通知服务层。由于视频数据是逐帧并入到视频文件中的,因此服务层并不需要对视频数据进行再次合成,可以直接响应游戏引擎发送的通知进行当前时刻的视频文件显示。
需要说明的是,游戏引擎可以通过UnitySendMessage通知服务层结束视频编码。而服务层Native的视频编码速度通常一帧耗时只有10毫秒左右,通过上述步骤101-104的视频编码过程,Unity3d中的一个30秒舞蹈动作编码成视频耗时15秒左右,效率非常高。
在本发明实施例中,通过终端内的服务层响应录制请求,获取录制帧率并初始化游戏引擎;通过游戏引擎根据录制帧率和视频文件的已编码帧数跳转游戏引擎内的视图画面,并渲染生成纹理标识;服务层按照纹理标识提取纹理数据进行视频编码,生成视频数据写入至视频文件,并更新已编码帧数;通过游戏引擎比较已编码帧数和视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件。从而实现在同一渲染线程将Unity3d内摄像机渲染的纹理数据直接回调到服务层Native,在Native实现视频编码,每完成一帧编码后再通知Unity3d进行下一帧的纹理渲染,在此过程中不需要转码,不需要截图,没有数据转换,能够实现异步渲染合成,即使在Unity3d引擎预览帧率很低的情况下,仍能保证最终的视频文件的录制帧率完全可控,保持较高的视频质量。
请参阅图3,图3示出了本发明实施例中的一种视图画面的视频录制系统的结框图。
本发明实施例提供了一种视图画面的视频录制系统,包括服务层301和集成在服务层的游戏引擎302;
服务层301,用于响应录制请求,获取录制帧率并初始化游戏引擎;当接收到游戏引擎上传的纹理标识时,按照纹理标识提取纹理数据进行视频编码,生成视频数据写入至视频文件,并更新已编码帧数;根据游戏引擎的比较结果显示当前时刻的视频文件;
游戏引擎302,用于根据录制帧率和视频文件的已编码帧数跳转游戏引擎内的视图画面,并渲染生成纹理标识;比较已编码帧数和视图画面所属视图总帧数,生成比较结果并通知服务层。
在本发明实施例中,视图画面的视频录制系统可以设置在终端中,其包括服务层和集成在服务层的游戏引擎。该终端可以为移动终端,服务层可以为Android或iOS系统的服务提供层,负责对游戏引擎如Unity3d引擎所上传的视图画面进行视频编码生成视频文件。
请参阅图4,为进一步区分模块之间的功能,可以通过在服务层中划分视图显示模块、消息模块A和视频编码模块,通过视图显示模块进行视频文件的输出显示,通过消息模块A进行与游戏引擎的通信,收发信息或者传输数据,通过视频编码模块按照纹理标识获取对应的纹理数据进行视频编码并加入到视频文件。同样地,对于游戏引擎也可以划分为消息模块B、业务模块和渲染模块,通过消息模块B进行与服务层之间的收发信息和数据传输,通过渲染模块如摄像机实现视图画面的获取和渲染等业务逻辑处理,业务模块可以负责具体的业务逻辑运行,例如Unity3d引擎中的弹唱MV业务、AI音乐MV业务等,运行该业务以显示对应的视图画面。
在本发明的一个示例中,系统还包括通信层303;
通信层303包括通知函数和低级原生渲染插件;
通知函数,用于传输服务层与游戏引擎之间的信息;
低级原生渲染插件,用于游戏引擎发送纹理标识至服务层。
请参阅图4,对于游戏引擎Unity3d和服务层Native而言,其通信方式可以包括多种,为进一步提高两者之间的通信效率,保持两者可以运行在同一渲染线程中,本系统还可以包括通信层,通过在通心层中设置通知函数和低级原生渲染插件的方式,使得服务层Native和游戏引擎Unity3d可以选取适配的通信接口进行API调用。
其中,通知函数可以为UnitySendMessage,其是Unity中自带的一个静态C#方法,可用于从Unity3D发送消息到Native。低级原生渲染插件是是一个用C++写的插件,可以在渲染线程,将Unity3D渲染的纹理ID传递到Native端,其需要集成到Unity3D引擎中。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种视图画面的视频录制方法,其特征在于,应用于终端内的服务层,所述服务层集成有游戏引擎,所述方法包括:
响应录制请求,获取录制帧率并初始化游戏引擎;
通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识;
按照所述纹理标识提取纹理数据进行视频编码,生成视频数据写入至所述视频文件,并更新所述已编码帧数;
通过所述游戏引擎比较所述已编码帧数和所述视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件。
2.根据权利要求1所述的方法,其特征在于,所述响应录制请求,获取录制帧率并初始化游戏引擎,包括:
响应录制请求,获取携带的录制帧率,并生成录制指令;
调用通知函数发送所述录制帧率和所述录制指令至游戏引擎,以触发所述游戏引擎创建摄像机和纹理数据缓存库。
3.根据权利要求2所述的方法,其特征在于,所述通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识,包括:
通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数,计算视图画面的画面进度位置;
通过所述游戏引擎将所述视图画面跳转至所述画面进度位置;
通过所述摄像机对所述画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识。
4.根据权利要求3所述的方法,其特征在于,所述通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数,计算画面进度位置,包括:
通过所述游戏引擎按照所述录制帧率计算对应的画面间隔时间;
通过所述游戏引擎计算视频文件的已编码帧数与所述画面间隔时间的乘值,得到画面进度位置。
5.根据权利要求3所述的方法,其特征在于,所述通过所述摄像机对所述画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识,包括:
通过所述摄像机对所述画面进度位置的画面帧数据进行画面渲染,生成纹理数据和关联的纹理标识;
通过所述摄像机缓存所述纹理数据至所述纹理数据缓存库;其中,所述纹理标识通过所述游戏引擎使用特定脚本接口调用低级原生渲染插件进行上传。
6.根据权利要求5所述的方法,其特征在于,所述按照所述纹理标识提取纹理数据进行视频编码,生成视频数据写入至所述视频文件,并更新所述已编码帧数,包括:
若存在编码环境,则从所述纹理数据缓存库提取所述纹理标识关联的纹理数据;
调用所述编码环境对应的图形渲染接口对所述纹理数据进行图像渲染,生成渲染纹理;
调用编码工具对所述渲染纹理进行编码,生成视频数据;
调用录制工具将所述视频数据写入至视频文件,并更新所述已编码帧数。
7.根据权利要求6所述的方法,其特征在于,还包括:
若不存在编码环境,则使用所述特定脚本接口创建编码环境。
8.根据权利要求1所述的方法,其特征在于,所述通过所述游戏引擎比较所述已编码帧数和所述视图画面所属视图总帧数,根据比较结果显示当前时刻的视频文件,包括:
通过所述游戏引擎比较所述已编码帧数和所述视图画面所属视图总帧数;
若所述游戏引擎判定所述已编码帧数与所述视图总帧数不相等,则跳转执行所述通过所述游戏引擎根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识的步骤;
若所述游戏引擎判定所述已编码帧数与所述视图总帧数相等,则响应所述游戏引擎的通知显示当前时刻的视频文件。
9.一种视图画面的视频录制系统,其特征在于,包括服务层和集成在所述服务层的游戏引擎;
所述服务层,用于响应录制请求,获取录制帧率并初始化游戏引擎;当接收到所述游戏引擎上传的纹理标识时,按照所述纹理标识提取纹理数据进行视频编码,生成视频数据写入至所述视频文件,并更新已编码帧数;根据所述游戏引擎的比较结果显示当前时刻的视频文件;
所述游戏引擎,用于根据所述录制帧率和视频文件的已编码帧数跳转所述游戏引擎内的视图画面,并渲染生成纹理标识;比较所述已编码帧数和所述视图画面所属视图总帧数,生成比较结果并通知所述服务层。
10.根据权利要求9所述的系统,其特征在于,还包括通信层;
所述通信层包括通知函数和低级原生渲染插件;
所述通知函数,用于传输所述服务层与所述游戏引擎之间的信息;
所述低级原生渲染插件,用于所述游戏引擎发送所述纹理标识至所述服务层。
CN202410348855.7A 2024-03-26 2024-03-26 一种视图画面的视频录制方法和系统 Pending CN118118727A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410348855.7A CN118118727A (zh) 2024-03-26 2024-03-26 一种视图画面的视频录制方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410348855.7A CN118118727A (zh) 2024-03-26 2024-03-26 一种视图画面的视频录制方法和系统

Publications (1)

Publication Number Publication Date
CN118118727A true CN118118727A (zh) 2024-05-31

Family

ID=91208360

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410348855.7A Pending CN118118727A (zh) 2024-03-26 2024-03-26 一种视图画面的视频录制方法和系统

Country Status (1)

Country Link
CN (1) CN118118727A (zh)

Similar Documents

Publication Publication Date Title
CN113457160B (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
CN111899322B (zh) 视频处理方法、动画渲染sdk和设备及计算机存储介质
KR101422424B1 (ko) 동영상 배포 서버, 동영상 재생 장치, 동영상 배포 서버의 제어 방법, 동영상 재생 장치의 제어 방법, 및 컴퓨터 판독 가능한 기록 매체
WO2022257699A1 (zh) 图像画面显示方法、装置、设备、存储介质及程序产品
KR101536501B1 (ko) 동화상 배포 서버, 동화상 재생 장치, 제어 방법, 기록 매체, 및 동화상 배포 시스템
EP3975126A1 (en) Method and system for cloud-native 3d-scene game
CN101340598A (zh) 一种实现媒体三维播放的方法及装置
CN113542757A (zh) 云应用的图像传输方法、装置、服务器及存储介质
JP2008518286A (ja) リモートプラットフォーム用の宣言型コンテンツをオーサリングする方法および機器
CN112055254B (zh) 视频播放的方法、装置、终端及存储介质
JP4686602B2 (ja) 3d画面に動映像を挿入する方法及びその記録媒体
CN114222185B (zh) 视频播放方法、终端设备及存储介质
EP4089515A2 (en) User interface engine for cloud ui rendering
CN113839829A (zh) 云游戏延时测试方法、装置、系统及电子设备
KR100892433B1 (ko) 이동통신 단말기를 이용한 영상 중계 시스템 및 그 방법
CN118118727A (zh) 一种视图画面的视频录制方法和系统
CN117065357A (zh) 媒体数据处理方法、装置、计算机设备和存储介质
CN116966546A (zh) 图像处理方法、装置、介质、设备和程序产品
CN113709574B (zh) 视频截图方法、装置、电子设备及计算机可读存储介质
US20220279234A1 (en) Live stream display method and apparatus, electronic device, and readable storage medium
CN117596373B (zh) 基于动态数字人形象进行信息展示的方法及电子设备
CN115175002B (zh) 一种视频播放方法及设备
KR20190086770A (ko) 인터랙티브 시네마그램
CN112395035B (zh) 一种基于3d大屏的动画播放方法、装置、设备及介质
CN114071225B (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