CN112004041B - 视频录制方法、装置、终端及存储介质 - Google Patents
视频录制方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN112004041B CN112004041B CN201910447363.2A CN201910447363A CN112004041B CN 112004041 B CN112004041 B CN 112004041B CN 201910447363 A CN201910447363 A CN 201910447363A CN 112004041 B CN112004041 B CN 112004041B
- Authority
- CN
- China
- Prior art keywords
- screen display
- display data
- egl
- data
- video
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/76—Television signal recording
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V20/00—Scenes; Scene-specific elements
- G06V20/40—Scenes; Scene-specific elements in video content
- G06V20/46—Extracting features or characteristics from the video content, e.g. video fingerprints, representative shots or key frames
-
- 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/433—Content storage operation, e.g. storage operation in response to a pause request, caching operations
- H04N21/4334—Recording operations
-
- 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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/44004—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving video buffer management, e.g. video decoder buffer or video display buffer
-
- 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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/44008—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving operations for analysing video streams, e.g. detecting features or characteristics in the video stream
-
- 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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/4402—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
-
- 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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/4402—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
- H04N21/440218—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by transcoding between formats or standards, e.g. from MPEG-2 to MPEG-4
-
- 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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/4402—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
- H04N21/440245—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display the reformatting operation being performed only on part of the stream, e.g. a region of the image or a time segment
-
- 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/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/85—Assembly of content; Generation of multimedia applications
- H04N21/854—Content authoring
- H04N21/8547—Content authoring involving timestamps for synchronizing content
Abstract
本发明公开了一种视频录制方法、装置、终端及存储介质,属于网络技术领域。本发明在大部分时间下将屏幕显示数据存储到GPU中,并且基于GPU所存储的数据来进行后续的视频生成过程,从而能够减少对CPU的处理资源的占用,提升了CPU的处理效率,并且,由于GPU具有多个并行处理单元,因此,终端在应用GPU进行上述过程时不会对终端的正常运行造成影响。
Description
技术领域
本发明涉及网络技术领域,特别涉及一种视频录制方法、装置、终端及存储介质。
背景技术
随着网络技术的发展,为了达到更直观的屏幕演示效果,用户可以对终端屏幕上所显示的内容进行录像(也即是“录屏”)。
目前,具备安卓(android)操作系统的终端在录屏过程中,可以基于屏幕录制指令,先从MediaProject接口获取屏幕显示数据,再通过MediaCodeC接口将MediaProject接口提供的屏幕显示数据复制到多媒体编解码器中,通过多媒体编解码器对该屏幕显示数据进行编码、格式封装,得到视频,另外,终端在从MediaProject接口获取屏幕显示数据之后,还可以同时通过ImageReader接口将MediaProject接口提供的屏幕显示数据复制到中央处理器(central processing unit,CPU)中,通过CPU将原本的屏幕显示数据转换为位图(bitmap)格式的屏幕截图,对该屏幕截图进行图像识别,能够得到录屏过程中的关键图像,进而确定与该关键图像所对应的关键时刻(也称为精彩时刻,为录屏视频中精彩之处的时间戳),根据该关键时刻,对上述视频进行剪辑(例如仅保留关键时刻前后5s的视频帧),输出剪辑后的视频。
在上述过程中,由于ImageReader接口每秒执行30到60次将屏幕显示数据复制到CPU的操作,使得屏幕显示数据大部分时间存储在CPU中,导致在录屏过程中ImageReader接口会占用整个录屏功能的87%的CPU处理资源,然而在确定关键时刻时,关键时刻所对应的图像通常会出现2秒以上,使得有97%的复制操作是冗余的,占用了CPU的大量处理资源,降低了CPU的处理效率,对终端的正常运行造成了不良影响。
发明内容
本发明实施例提供了一种视频录制方法、装置、终端及存储介质,能够解决视频录制时占用大量CPU处理资源,降低CPU处理效率,对终端的正常运行造成了不良影响的问题。该技术方案如下:
一方面,提供了一种视频录制方法,该方法包括:
根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,将所述屏幕显示数据存储至图像处理器中;
根据所述图像处理器中的屏幕显示数据,获取所述屏幕显示数据的关键时刻以及所述屏幕显示数据的视频数据;
基于所述关键时刻和所述视频数据,生成视频。
在一种可能实施方式中,创建第一EGL环境包括:
根据显示设备的版本,对所述第一EGL环境进行初始化和配置处理,创建EGL上下文。
一方面,提供了一种视频录制装置,该装置包括:
获取存储模块,用于根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,将所述屏幕显示数据存储至图像处理器中;
获取模块,用于根据所述图像处理器中的屏幕显示数据,获取所述屏幕显示数据的关键时刻以及所述屏幕显示数据的视频数据;
生成模块,用于基于所述关键时刻和所述视频数据,生成视频。
在一种可能实施方式中,所述获取模块包括:
第一复制获取子模块,用于将所述图像处理器中的所述屏幕显示数据复制至中央处理器中,通过所述中央处理器获取所述屏幕显示数据的关键时刻;
第二复制获取子模块,用于将所述图像处理器中的所述屏幕显示数据复制至多媒体编解码器中,通过所述多媒体编解码器获取所述屏幕显示数据的视频数据。
在一种可能实施方式中,所述第一复制获取子模块包括:
复制确定单元,用于每间隔第一目标时长,将所述图像处理器中当前时刻所获取到的屏幕显示数据中的任一屏幕显示帧复制至所述中央处理器中,基于所述中央处理器确定所述屏幕显示帧是否对应于关键时刻。
在一种可能实施方式中,所述复制确定单元包括:
获取确定子单元,用于获取所述屏幕显示帧的像素数据,根据所述屏幕显示帧的像素数据,确定所述屏幕显示帧是否对应于关键时刻。
在一种可能实施方式中,所述获取确定子单元用于:
根据所述屏幕显示帧的像素数据,生成所述屏幕显示帧的位图数据;
对所述屏幕显示帧的位图数据进行图像识别,确定所述屏幕显示帧是否为关键图像;
当所述屏幕显示帧为关键图像时,将所述屏幕显示帧的时间戳确定为一个关键时刻。
在一种可能实施方式中,所述获取存储模块包括:
存储子模块,用于将所述屏幕显示数据以OES纹理格式存储到所述图像处理器中;
转换子模块,用于在所述图像处理器内,将所述OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据。
在一种可能实施方式中,所述转换子模块用于:
将初始二维纹理绑定至色彩缓存区,基于所述色彩缓存区,对所述OES纹理格式的屏幕显示数据进行绘制;
将所述OES纹理格式的屏幕显示数据写入所述初始二维纹理,得到所述二维纹理格式的屏幕显示数据。
在一种可能实施方式中,所述装置还包括:
创建模块,用于创建第一EGL环境,所述第一EGL环境中包括EGL上下文,所述EGL上下文用于提供纹理转换所需的状态信息;
所述创建模块,还用于在所述第一EGL环境下,创建EGL表层组件和帧缓存区,所述EGL表层组件用于将屏幕显示数据存储为OES纹理格式的数据,所述帧缓存区用于对屏幕显示数据进行纹理格式转换;
绑定模块,用于将所述帧缓存区与所述EGL上下文绑定,在运行所述帧缓存区时调用所述EGL上下文。
在一种可能实施方式中,所述创建模块,还用于创建第二EGL环境,将所述第一EGL环境的EGL上下文设置为所述第二EGL环境的EGL上下文;
所述绑定模块,还用于将所述多媒体编解码器的表层组件与所述EGL上下文绑定,在运行所述多媒体编解码器的表层组件时调用所述EGL上下文。
在一种可能实施方式中,所述创建模块用于:
根据显示设备的版本,对所述第一EGL环境进行初始化和配置处理,创建EGL上下文。
在一种可能实施方式中,所述第二复制获取子模块用于:
对于所述图像处理器中的所述屏幕显示数据所包括的任一屏幕显示帧,根据视频流的帧传输周期以及所述视频的帧率,确定所述屏幕显示帧是否符合目标条件;
当所述屏幕显示帧符合所述目标条件时,将所述屏幕显示帧复制至所述多媒体编解码器中。
在一种可能实施方式中,所述第二复制获取子模块用于:
对所述屏幕显示数据进行绘制,将所述屏幕显示数据写入所述多媒体编解码器的表层组件。
在一种可能实施方式中,所述第二复制获取子模块用于:
对所述多媒体编解码器内的屏幕显示数据进行编码,得到待合成的原始视频数据;
对所述待合成的原始视频数据进行视频合成,得到所述屏幕显示数据的视频数据。
在一种可能实施方式中,所述获取存储模块用于:
通过EGL表层组件,将所述屏幕显示数据存储至所述图像处理器中,所述EGL表层组件用于将屏幕显示数据存储为OES纹理格式的数据。
一方面,提供了一种终端,该终端包括一个或多个处理器和一个或多个存储器,该一个或多个存储器中存储有至少一条指令,该至少一条指令由该一个或多个处理器加载并执行以实现如上述任一种可能实现方式的视频录制方法所执行的操作。
一方面,提供了一种存储介质,该存储介质中存储有至少一条指令,该至少一条指令由处理器加载并执行以实现如上述任一种可能实现方式的视频录制方法所执行的操作。
本发明实施例提供的技术方案带来的有益效果至少包括:
根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,将该屏幕显示数据存储至包含多个并行处理单元的GPU中,基于该GPU中所存储的原始的屏幕显示数据来进行关键时刻和视频数据的获取,从而实现视频的生成,由于在上述视频录制过程中,终端可以在大部分时间下将屏幕显示数据存储到GPU中,并且基于GPU所存储的数据来进行后续的视频生成过程,从而能够减少对CPU的处理资源的占用,提升了CPU的处理效率,并且,由于GPU具有多个并行处理单元,因此,终端在应用GPU进行上述过程时不会对终端的正常运行造成影响。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种视频录制方法的实施环境示意图;
图2是本发明实施例提供的一种视频录制方法的流程图;
图3是本发明实施例提供的一种EGL环境初始化的原理性示意图;
图4是本发明实施例提供的一种EGL表层组件的结构示意图;
图5是本发明实施例提供的一种视频录制方法的流程图;
图6是本发明实施例提供的一种视频录制方法的原理性示意图;
图7是本发明实施例提供的一种视频录制方法的原理性示意图;
图8是本发明实施例提供的一种视频录制装置的结构示意图;
图9示出了本发明一个示例性实施例提供的终端900的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种视频录制方法的实施环境示意图。参见图1,该实施例可以在任一终端101上实现,在该终端101上可以配置有不同的操作系统,以该终端101上配置有安卓操作系统为例进行说明,此时终端101上可以分为4层系统架构:应用程序(application,APP)层、应用框架(application framework)层、核心库(android runtime&native C/C++liberaries)层和内核(Linux kernel)层。
在上述架构中,该应用程序层用于提供该终端101上安装的所有应用客户端,可选地,该应用客户端为java应用程序,从而能够与终端操作系统更好的适配。
该应用框架层用于向上述应用程序层提供构建应用程序的API(applicationprogramming interface,应用程序编程接口),该API为封装好的、规范化的函数,技术人员在开发时能够在应用程序层调用应用框架层提供的API,从而能够在不访问API源代码的情况下,仅输入各个API所需的输入量,即可以实现与各个API所对应的功能,例如,该API可以为本发明实施例中所涉及到的MediaProject接口(用于获取屏幕显示数据)、MediaCodeC接口(用于调用多媒体编解码器实现编码)、ImageReader接口(用于调用CPU确定关键时刻)等。
该核心库层用于提供安卓操作系统的运行环境(android runtime,ART)和原生的C/C++库,该运行环境也即是APP运行时所需的java虚拟机(java virtual machine,JVM),各个APP通过该JVM才能在Linux内核上正常运行,其中,该C/C++库能够为安卓操作系统提供某些功能特性的C/C++语言编写的原生代码支持,例如,该C/C++库能够本发明实施例中所涉及到的提供2D/3D绘图支持的OpenGL ES库(OpenGL for embedded systems)等。
该内核层用于提供Linux运行内核,通过Linux运行内核中的驱动程序来与该终端101上的处理资源进行通信,该驱动程序可以包括CPU驱动、显卡驱动(GPU驱动)、多媒体编解码器驱动等,相应地,该处理资源可以包括CPU、GPU(graphics processing unit,图像处理器)、多媒体编解码器等。
基于上述4层架构,对任一终端101而言,该终端101可以在显示屏来进行内容显示,使得用户能够浏览该内容,在进行内容显示的过程中,用户可以通过对屏幕录制按钮的触控操作,触发生成屏幕录制指令,使得终端101可以根据该屏幕录制指令,获取当前屏幕上所显示内容的屏幕显示数据,根据该屏幕显示数据生成待剪辑视频,同时根据该屏幕显示数据确定关键时刻,基于该关键时刻对该待剪辑视频进行剪辑(例如保留关键时刻前后5s的视频片段),生成剪辑后的视频,从而能够完成对屏幕所显示的内容的录制(以下也称为“录屏”)。
在一些实施例中,终端101在录屏时可以对显示屏的全部或部分区域的显示内容所对应的屏幕显示数据进行采集,并将采集得到的屏幕显示数据以视频流的形式进行编码,生成视频。
基于上述方式,该屏幕录制指令中可以携带采集区域,使得终端101能够对该采集区域内所显示内容的屏幕显示数据进行采集,该采集区域可以是显示屏的全部区域,可以是显示屏的任一部分区域,可选地,该部分区域可以由用户进行自定义设置,当然,该部分区域还可以根据显示屏中处于前台显示状态的应用程序的窗口进行自动确定,例如,显示屏的区域A中显示有当前处于前台显示状态的应用程序1的显示内容,则根据应用程序1所对应显示的区域A设置为采集区域。
在一些实施例中,终端101还可以在与服务器的交互过程中实现本发明实施例所提供的视频录制方法,也即是终端101以视频流的形式将待剪辑视频发送至服务器,服务器对该待剪辑视频进行剪辑,生成剪辑后的视频,将该剪辑后的视频发送至终端101。
需要说明的是,上述交互过程通常会应用在一些直播场景中,由于在直播场景中通常终端101本身会不断地向服务器发送直播视频流(也即是待剪辑视频),服务器在转播直播视频流时,还可以对该直播视频流进行剪辑,得到直播视频流中与关键时刻所对应的精彩片段,从而能够在转播直播视频流时,将该精彩片段一起发送至直播观众的客户端,可选地,服务器还可以在适当的时侯向直播观众的客户端回放精彩片段,以提升直播视频的播放效果。
基于上述实施环境,本发明实施例可以应用于游戏视频录制的场景中,通过图像识别技术,对游戏视频内的精彩片段进行自动剪辑,具体场景如下:
在终端101中可以安装有游戏客户端,可选地,在该游戏客户端上可以内置有视频剪辑程序,该视频剪辑程序用于对录屏得到的游戏视频进行剪辑,得到游戏视频的精彩片段,当然,该视频剪辑程序也可以不是游戏客户端的内置程序,而是终端101上安装的另一个独立的剪辑客户端,本发明实施例不对该视频剪辑程序的实现方式进行具体限定。
当用户登录游戏客户端,可以通过对屏幕录制按钮的触控操作,触发生成屏幕录制指令,终端101根据该屏幕录制指令,获取游戏过程中显示屏上游戏内容的屏幕显示数据,一方面,终端101的多媒体编解码器根据屏幕显示数据生成待剪辑视频,另一方面,终端101的视频剪辑程序确定该屏幕显示数据中的关键时刻(也称为精彩时刻,为游戏视频中精彩之处的时间戳),进而根据该关键时刻对待剪辑视频进行剪辑,输出游戏视频的精彩片段。
在上述确定关键时刻的过程中,视频剪辑程序可以基于图像识别技术,先确定屏幕显示数据所包括的屏幕显示帧是否为关键图像,进而当该屏幕显示帧为关键图像时,将关键图像的时间戳确定为关键时刻。可选地,在确定屏幕显示帧是否为关键图像时,可以识别屏幕显示帧中的文字,当该文字命中目标文字时,确定该屏幕显示帧为关键图像,例如,该目标文字可以是“击杀1”、“连杀2”、“重伤1”等。
基于上述实施环境,本发明实施例还可以应用于直播视频录制的场景中,通过图像识别技术,对直播视频内的精彩片段进行自动剪辑,具体场景如下:
在终端101中可以安装有直播客户端,可选地,在该直播客户端上可以内置有视频剪辑程序,该视频剪辑程序用于对录屏得到的直播视频进行剪辑,得到直播视频的精彩片段,当然,该视频剪辑程序也可以不是直播客户端的内置程序,而是终端101上安装的另一个独立的剪辑客户端,本发明实施例不对该视频剪辑程序的实现方式进行具体限定。
当用户登录直播客户端,可以通过对屏幕录制按钮的触控操作,触发生成屏幕录制指令,终端101根据该屏幕录制指令,获取游戏过程中显示屏上直播内容的屏幕显示数据,一方面,终端101的多媒体编解码器根据屏幕显示数据生成待剪辑视频,另一方面,终端101的视频剪辑程序确定该屏幕显示数据中的关键时刻(也称为精彩时刻,为直播视频中精彩之处的时间戳),进而根据该关键时刻对待剪辑视频进行剪辑,输出直播视频的精彩片段。
其中,确定关键时刻的过程与上述游戏视频录制场景中的确定关键时刻的过程类似,这里不做赘述。例如,当直播内容为游戏直播时,在确定屏幕显示帧是否为关键图像时,可以识别屏幕显示帧中的文字,当该文字命中目标文字时,确定该屏幕显示帧为关键图像,例如,该目标文字可以是“击杀1”、“连杀2”、“重伤1”等。
需要说明的是,上述各个应用场景仅为示意性的示例,不应构成对本申请实施例的应用场景的限定,本申请实施例可以应用于任一视频录制的场景中。
结合上述实施环境和应用场景,下面对本发明实施例进行详述。
图2是本发明实施例提供的一种视频录制方法的流程图。参见图2,以该实施例应用于终端为例进行说明,该实施例包括:
201、终端创建第一EGL环境,该第一EGL环境中包括EGL上下文。
其中,该终端可以是任一能够提供视频录制服务的客户端,在该终端上可以具有视频录制接口,使得终端能够基于该视频录制接口,通过终端操作系统自身的处理逻辑实现本发明实施例提供的视频录制方法,当然,在该终端上还可以安装有应用客户端,使得终端能够基于该应用客户端实现本发明实施例提供的视频录制方法。
其中,该第一EGL(the Khronos platform graphics interface,一组Khronos平台提供的图形接口)环境用于实现原生(native)视窗系统与底层GPU渲染引擎之间的交互,使得终端可以基于该第一EGL环境管理底层的GPU渲染引擎。例如,该GPU渲染引擎可以是OpenGL(open graphics library,开放图形库),也可以是OpenGL ES(open graphicslibrary for embedded systems,嵌入式系统的开放图形库)等。
其中,该EGL上下文用于为渲染引擎提供纹理转换所需的状态信息,也即是,终端可以在该EGL上下文中存储渲染引擎的图像渲染管线的各个状态信息,使得渲染引擎能够基于EGL上下文中的状态信息,在GPU上运行渲染线程,例如该状态信息可以包括当前图像的渲染颜色、纹理坐标、变换矩阵、渲染模式等。可选地,不同的EGL环境可以共享同一个EGL上下文。
在上述步骤201中,终端可以根据显示设备的版本,对该第一EGL环境进行初始化和配置处理,创建该EGL上下文,从而能够完成第一EGL环境的初始化,为后续的视频录制方法创建执行环境。
其中,在本发明实施例中该显示设备也即是终端的显示屏,该显示设备具体可以表现为第一EGL环境中各个EGL函数的display参数。
在上述过程中,通过创建第一EGL环境,从而能够基于该第一EGL环境调用渲染引擎的API,根据该渲染引擎的API能够控制渲染引擎,也就能够基于渲染引擎驱动GPU的图像渲染管线,基于EGL上下文来进行渲染,从而实现图像渲染,使得渲染引擎能够与终端操作系统实现更好地适配。
以终端具有安卓操作系统且渲染引擎为OpenGL为例,由于OpenGL是一套跨平台的底层GPU渲染库,OpenGL本身只负责进行图形图像处理,而不处理与平台相关的(也即是原生的)视窗系统的渲染资源,在上述步骤201中终端通过创建第一EGL环境,可以基于该第一EGL环境来调用能够控制OpenGL渲染引擎的OpenGL接口,通过OpenGL来操作原生视窗系统的渲染资源,从而解决了OpenGL无法与原生视窗系统进行交互的问题,克服了不同平台的原生视窗系统之间存在的差异,使得OpenGL能够对原生视窗系统的渲染资源进行渲染,本发明实施例中,显示屏中的显示内容依赖于原生视窗系统,因此创建第一EGL环境能够为该视频录制方法提供执行环境。
图3是本发明实施例提供的一种EGL环境初始化的原理性示意图,参见图3,该EGL环境可以是上述步骤201中的第一EGL环境,当然也可以是下述步骤204中的第二EGL环境。在初始化时,终端获取显示设备的display参数,例如终端可以通过调用EGLbooleaneglGetDisplay(NativeDisplay dpy)函数获取display参数,上述函数在内部进行函数初始化处理后,会返回显示设备的EGL版本号(major.minor),终端可以根据显示设备的版本来进行EGL初始化,在EGL初始化时可以确定EGL环境的多个参数,例如,该多个参数可以包括EGL_VENDOR(EGL厂商,例如Android)、EGL_VERSION(EGL版本)或者EGL_EXTENSIONS(EGL扩展)等。
进一步地,终端可以对初始化后的EGL环境进行配置处理,也即是为EGL指定配置参数(Config),该配置参数为帧缓存区(FrameBuffer)的参数,关于帧缓存区会在下述步骤202中会进行详述,例如,终端可以通过EGLboolean eglChooseConfig(EGLDisplay dpy,const EGLint*attr_list,EGLConfig*config,EGLint config_size,EGLint*num_config)函数来获取配置参数,当参数配置完成后,终端创建EGL上下文(EGLcontext),例如,终端可以通过EGLContext eglCreateContext(EGLDisplay dpy,EGLSurface write,EGLSurfaceread,EGLContext*share_list)函数来创建EGL上下文,在后续的视频录制过程中,OpenGL接口可以向该EGL上下文提供各个状态信息,创建EGL上下文之后,执行下述步骤202。
202、终端在该第一EGL环境下,创建EGL表层组件和帧缓存区。
其中,该EGL表层(EGL Surface)组件用于将屏幕显示数据存储为OES纹理格式(GLES11Ext.GL_TEXTURE_EXTERNAL_OES)的数据,该OES纹理格式用于兼容屏幕显示数据。
其中,该帧缓存区用于对屏幕显示数据进行纹理格式转换,在本发明实施例中,该帧缓存区可以将屏幕显示数据从OES纹理格式转换为二维纹理格式(Texture2D)。
可选地,终端可以在该帧缓存区中存储各种绘图缓存资源,在该帧缓存区中可以包括色彩缓存区(ColorBuffer)、模板缓存区(StencilBuffer)、深度缓存区(DepthBuffer)等,该色彩缓存区中可以存储各个色彩通道的纹理资源(例如本发明实施例的初始二维纹理)。
在上述步骤202中,EGL表层组件为帧缓存区的顶层应用,帧缓存区为EGL表层组件的底层实现。在一些实施例中,终端在创建EGL表层组件之后,还可以创建初始二维纹理,以备后续纹理格式转换使用。
可选地,终端可以通过EGLSurface eglCreateWindowSurface(EGLDisplay dpy,EGLConfig confg,NativeWindow win,EGLint*cfg_attr)函数来创建EGL表层组件,将创建好的EGL表层组件与MediaProject接口(一个能够获取屏幕显示数据的接口)绑定,使得终端可以通过EGL表层组件获取MediaProject接口内的屏幕显示数据,再将EGL表层组件内的屏幕显示数据复制到帧缓存区中进行纹理格式转换。
图4是本发明实施例提供的一种EGL表层组件的结构示意图,参见图4,在应用时,EGL表层组件可以从顶层应用中获取到屏幕显示数据,将EGL表层组件中的屏幕显示数据复制到GPU上创建的帧缓存区内,在该帧缓存区内的色彩缓存区中可以执行纹理格式转换。
在上述步骤202中,终端通过创建EGL表层组件和帧缓存区,能够通过EGL表层组件获取MediaProject接口内的屏幕显示数据,由于OpenGL引擎本身提供了专门用于存储屏幕显示数据的OES纹理格式,而确定关键时刻需要用到二维纹理格式的屏幕显示数据,因此通过帧缓存区实现纹理格式转换后,能够避免因数据格式不匹配而导致的黑屏等问题。
203、终端将该帧缓存区与该EGL上下文绑定,在运行该帧缓存区时调用该EGL上下文。
在上述步骤203中,终端将帧缓存区与EGL上下文绑定,会使得此后GPU上运行的渲染线程所对应的OpenGL引擎的绘制(Draw)指令,均以该帧缓存区为渲染目标,使得后续运行帧缓存区时,能够调用EGL上下文,实现纹理格式转换。
基于上述示例,参见图3,终端在创建EGL上下文之后,创建EGL表层组件,可以通过egl.makeCurrent函数将渲染环境切换至当前的渲染线程,再基于绘制指令进行绘制,绘制完成后可以调用egl.eglSwapBuffers函数,使得终端可以基于交换缓存区(SwapBuffer)对绘制得到的图像进行显示,通过交换缓存区能够避免屏幕闪烁,提升显示效果。
204、终端创建第二EGL环境,将该第一EGL环境的EGL上下文设置为该第二EGL环境的EGL上下文。
其中,该第二EGL环境用于用于实现原生视窗系统与底层GPU渲染引擎之间的交互,使得终端可以基于该第二EGL环境管理底层的GPU渲染引擎。例如,该GPU渲染引擎可以是OpenGL,也可以是OpenGL ES等。
上述步骤204中创建第二EGL环境的过程与上述步骤201类似,这里不做赘述。
需要说明的是,在创建第二EGL环境时,可以将第一EGL环境的EGL上下文设置为第二EGL环境的EGL上下文,使得第一EGL环境能够与第二EGL环境之间共享EGL上下文,由于编码过程和确定关键时刻过程都需要调用相同的缓存在EGL上下文内的屏幕显示数据,因此通过共享EGL上下文的方法,能够减少渲染和编码时开销,优化终端的处理效率。
当然,在一些实施例中,该第二EGL环境也可以不与第一EGL环境共享EGL上下文,也即是终端为第二EGL环境创建一个新的EGL上下文,使得该第二EGL环境的EGL上下文与第一EGL环境的EGL上下文获取相同的屏幕显示数据,同样能够实现本发明实施例的视频录制方法。
205、终端将多媒体编解码器的表层组件与该EGL上下文绑定,在运行该多媒体编解码器的表层组件时调用该EGL上下文。
在上述过程中,终端通过将多媒体编解码器的表层组件与EGL上下文绑定,能够实现通过OpenGL引擎的渲染接口将屏幕显示数据写入到多媒体编解码器的表层组件,基于多媒体编解码器能够实现屏幕显示数据的后续的编码操作。
在上述步骤201-205中,终端通过创建第一EGL环境、第二EGL环境,并进行各个接口之间的绑定,在完成上述准备工作之后,相当于对终端完成了全部的配置操作,使得终端能够为本发明实施例的视频录制方法提供良好的执行环境,下面将对具体的视频录制流程进行详述。
图5是本发明实施例提供的一种视频录制方法的流程图,参见图5,以该视频录制方法应用于终端为例进行说明,该实施例包括:
501、终端根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据。
其中,该屏幕录制指令用于指示终端开启对显示屏的显示内容进行录制,可选地,该屏幕录制指令可以由用户对屏幕录制按钮的触控操作触发。可选地,该屏幕录制按钮可以是终端上安装的应用客户端所内置的视频剪辑程序提供的交互按钮,当然,该屏幕录制按钮也可以是终端上安装的独立的剪辑客户端提供的交互按钮。
其中,该屏幕显示数据对应于当前屏幕上所显示的内容,该屏幕显示数据包括多个屏幕显示帧。
在上述步骤501中,当终端检测到对屏幕录制按钮的触控操作时,生成屏幕录制指令,根据该屏幕录制指令,以视频流的形式,逐帧对显示屏的显示内容进行采集,为采集得到的屏幕显示帧标注对应的时间戳,生成与显示内容对应的视频流。例如,终端可以基于MediaProject接口来实现屏幕显示数据的逐帧采集。
在一些实施例中,该时间戳可以是以终端时刻进行标注的时间戳,也可以是按照屏幕录制的起始时刻为0时刻进行标注的时间戳。需要说明的是,当按照屏幕录制的起始时刻为0时刻进行标注时,则可以根据当前采集的时刻与0时刻(屏幕录制的起始时刻)之间的时间差,对当前采集的显示内容进行时间戳标注。
例如,当以终端时刻进行标注时,终端时刻为11:11:20,则当前采集得到的显示内容所标注的时间戳即为11:11:20,当按照屏幕录制的起始时刻为0时刻进行标注时,距离0时刻过去了2分钟时,当前采集得到的显示内容所标注的时间戳即为00:02:00。
在一些实施例中,对于上述两种标注方法中的任一种或者至少两种情况,标注该时间戳的细化程度可以根据采集显示内容的频率确定,如:当每秒采集一次显示内容时,则该时间戳的细化程度可以为秒。
502、终端通过EGL表层组件,将该屏幕显示数据以OES纹理格式存储至GPU中,该EGL表层组件用于将屏幕显示数据存储为OES纹理格式的数据。
其中,该EGL表层组件可以是上述步骤202中第一EGL环境下所创建的EGL表层组件。其中,该OES纹理格式为渲染引擎所提供的专门用于存储屏幕显示数据的纹理格式。
在上述步骤502中,终端可以将EGL表层组件与MediaProject接口绑定,从而当终端逐帧通过MediaProject接口采集屏幕显示数据之后,同时可以基于与该MediaProject接口绑定的EGL表层组件,实时地逐帧读取该MediaProject接口获取到的屏幕显示数据,进而将该屏幕显示数据存储到GPU上的帧缓存区,以便于执行下述步骤503。
在一些实施例中,终端可以在GPU中创建多个帧缓存区,从而能够通过增加FBO(FrameBuffer object,帧缓存对象),实现多个帧缓存区并行复制和存储,从而能够提高屏幕显示数据的复制效率。
在上述过程中,终端将该屏幕显示数据存储至GPU中,相较于相关技术中直接通过终端原生的ImageReader接口将屏幕显示数据复制到CPU中的情况,本发明实施例通过EGL表层组件,能够将MediaProject接口内采集得到的屏幕显示数据存储到GPU中,在需要确定关键时刻时才从GPU中复制到CPU中,同样在需要进行编码才从GPU中复制到多媒体编解码器中,由于GPU通常会有多个硬件元件实行并行加速(也即是硬件加速),因此能够大大的降低对CPU处理资源的占用,也就提升了终端CPU的处理效率。
需要说明的是,本发明实施例仅以通过EGL表层组件将屏幕显示数据存储至GPU中为例进行说明,如前对EGL环境的描述,EGL环境可以用于实现原生视窗系统与GPU渲染引擎之间的交互,而对于具有不同操作系统的终端,或者具有不同GPU渲染引擎的终端,可以适配有不同的表层组件,实现与本发明实施例类似的视频录制方法,例如,该表层组件还可以是AGL(API in macOS for OpenGL developer,IOS系统上的OpenGL拓展API,与EGL等价)表层组件、GLX(OpenGL extension to the X window system,X窗口系统的OpenGL拓展)表层组件等。
在一些实施例中,终端将屏幕显示数据存储到GPU之后,还可以在渲染时对该屏幕显示数据添加水印,相较于相关技术中无法访问原始的屏幕显示数据,能够提供更加丰富的对屏幕显示数据的渲染操作。
503、终端在该GPU内,将OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据。
在上述步骤502中,由于终端将屏幕显示数据存储到GPU上的帧缓存区内,因此在该步骤503中可以基于帧缓存区(例如帧缓存区内的色彩缓存区)对屏幕显示数据进行格式转换,将该屏幕显示数据从OES纹理格式转换为二维纹理格式,由于二维纹理格式与位图(bitmap)数据的纹理格式是一致的,因此在GPU中实现纹理格式转换后,能够方便后续生成位图数据。
在一些实施例中,终端可以通过执行下述步骤来进行纹理格式转换:
5031、终端将初始二维纹理绑定至色彩缓存区,基于该色彩缓存区,对该OES纹理格式的屏幕显示数据进行绘制。
其中,该初始二维纹理可以是一张空白的二维纹理格式的纹理贴图,该色彩缓存区可以用于存储各个色彩通道的纹理资源,该色彩缓存区位于第一EGL环境下的帧缓存区中。
可选地,该初始二维纹理可以是在上述步骤202中创建好EGL表层组件和帧缓存区后,可以生成一张初始二维纹理,将该初始二维纹理绑定至帧缓存区内的色彩缓存区上,当然,该初始二维纹理可以是在执行上述步骤5031之前的任一时刻生成,本发明实施例不对该初始二维纹理的生成时刻进行具体限定。
5032、终端将该OES纹理格式的屏幕显示数据写入该初始二维纹理,得到二维纹理格式的屏幕显示数据。
在上述步骤中,终端可以基于绘制指令(draw call),对OES纹理格式的屏幕显示数据进行绘制,从而将该OES纹理格式的屏幕显示数据写入初始二维纹理,从而对于屏幕显示数据所包括的每个屏幕显示帧,都能够得到二维纹理格式的屏幕显示帧。
上述步骤5031-5032通过帧缓存区内的色彩缓存区,能够将OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据,由于得到的二维纹理格式与后续的所需生成的位图数据的纹理格式是相一致的,因此能够避免因数据格式不匹配而导致的黑屏等问题,上述步骤5031-5032可以形象地称为“屏幕显示数据的离屏处理”,也即是将屏幕显示数据脱离出原本的纹理格式,转换为能够生成位图数据的二维纹理格式。
504、终端将该GPU中的屏幕显示数据复制至CPU中,通过该CPU获取该屏幕显示数据的关键时刻。
其中,该关键时刻用于表示屏幕显示数据中精彩之处所对应的时间戳,例如,当屏幕显示数据为游戏视频流时,该关键时刻可以是击杀对手的时刻等。
在上述步骤504中,终端可以每间隔第一目标时长,将该GPU中当前时刻所获取到的屏幕显示数据中的任一屏幕显示帧复制至该CPU中,基于该CPU确定该屏幕显示帧是否对应于关键时刻。可选地,该关键时刻的个数可以是一个或多个,本发明实施例不对该关键时刻的个数进行具体限定。
在上述情况下,每间隔第一目标时长时,终端可以将GPU中当前时刻所获取到的屏幕显示帧复制到CPU的字节缓存区(ByteBuffer)中。其中,该第一目标时长可以是任一大于或等于0的数值,例如该第一目标时长可以是2秒,
在上述过程中,明确了终端在逐帧读取屏幕显示数据的情况下,如何实现对将屏幕显示帧从GPU复制到CPU的频率进行控制,也即是通过控制第一目标时长的数值来控制复制频率,提升了对视频录制方法的可控性。
在上述过程中,相较于相关技术中ImageReader接口每秒执行30到60次将屏幕显示数据复制到CPU的操作,本发明实施例终端能够在视频录制的过程中,通过对第一目标时长的调整,能够在视频录制的过程中动态地控制将GPU中的屏幕显示帧复制到CPU中的操作频率,提升了对视频录制方法的可控性。
在一些实施例中,由于关键时刻通常会在显示屏上保持2秒以上,因此终端可以在录制过程中每隔2秒将GPU内的屏幕显示帧复制到CPU中,以便于CPU确定该屏幕显示帧是否对应于关键时刻,进而能够在不影响确认关键时刻的基础上,降低将屏幕显示帧复制到CPU中的次数,降低了录制过程所占用CPU的处理资源,也就提升了CPU的处理效率。
在一些实施例中,终端在将屏幕显示数据复制到CPU之后,基于该CPU确定该屏幕显示帧是否对应于关键时刻时,可以执行下述步骤5041-5044:
5041、终端获取该屏幕显示帧的像素数据。
在上述过程中,终端可以调用OpenGL的getPixels接口获取该屏幕显示帧的像素数据,其中,该像素数据可以用于生成位图数据。
5042、终端根据该屏幕显示帧的像素数据,生成该屏幕显示帧的位图数据。
在上述过程中,由于终端在上述步骤503中实现了纹理格式的转换,而二维纹理格式与位图数据的纹理格式是一致的,因此终端可以调用setPixels接口(Bitmap类下面的一个函数)将上述步骤5041中getPixels接口获取的像素数据转换为位图数据。
5043、终端对该屏幕显示帧的位图数据进行图像识别,确定该屏幕显示帧是否为关键图像。
在上述过程中,终端可以预存有目标文字列表,当生成屏幕显示帧的位图数据之后,可以基于OCR(optical character recognition,光学字符识别)技术识别屏幕显示帧的位图数据中的文字,将该文字与该目标文字列表进行正则匹配,当该文字命中目标文字列表中的任一目标文字时,确定该屏幕显示帧为关键图像,例如,在录制游戏视频的场景下,该目标文字可以是“击杀1”、“连杀2”、“重伤1”等。
当然,终端还可以将屏幕显示帧的位图数据输入分类模型,通过该分类模型对该屏幕显示帧的位图数据进行图像识别和分类,进而输出该屏幕显示帧为关键图像的预测概率,当该预测概率大于或等于概率阈值时,确定该屏幕显示帧为关键图像。例如,该分类模型可以是VGG(visual geometry group,视觉几何组)网络、CNN(convolutional neuralnetworks,卷积神经网络)等,本发明实施例不对该分类模型的类型进行具体限定。
5044、当该屏幕显示帧为关键图像时,终端将该屏幕显示帧的时间戳确定为一个关键时刻。
在上述步骤5042-5044中,终端可以根据该屏幕显示帧的像素数据,确定该屏幕显示帧是否对应于关键时刻,从而能够在视频录制的过程中,同时获取到该屏幕显示数据中的关键时刻,方便了对多媒体编解码器输出的待剪辑视频进行剪辑。
在上述过程中,每当间隔第一目标时长时,可以将该屏幕显示帧复制到CPU中确定该屏幕显示帧是否为关键图像,进而当该屏幕显示帧为关键图像时,能够得到一个关键时刻,重复执行上述步骤5041-5044,能够毫不遗漏确认出录屏过程中所出现的关键时刻。
505、终端将该GPU中的屏幕显示数据复制至多媒体编解码器中,通过该多媒体编解码器获取该屏幕显示数据的视频数据。
在上述步骤505中,在进行数据复制时,对于该GPU中的屏幕显示数据所包括的任一屏幕显示帧而言,终端可以根据视频流的帧传输周期以及视频的帧率,确定该屏幕显示帧是否符合目标条件;当该屏幕显示帧符合该目标条件时,终端将该屏幕显示帧复制至该多媒体编解码器中。
在上述情况下,对于每一个屏幕显示帧都可以执行上述步骤,从而终端能够对GPU中存储的屏幕显示数据进行实时地动态计算,对视频录制过程中的任一时刻而言,都能够确定该时刻所对应的屏幕显示帧是否需要复制到多媒体编解码器中,实现了对将屏幕显示帧从GPU复制到多媒体编解码器的操作频率进行控制,提升了对视频录制方法的可控性。
在一些实施例中,该目标条件可以是该屏幕显示帧与下一个屏幕显示帧不处于同一个视频录制周期内,此时终端在确定屏幕显示帧是否符合目标条件时,可以执行下述步骤:对于该GPU中的屏幕显示数据所包括的任一屏幕显示帧而言,终端根据视频流的帧传输周期以及视频的帧率,确定该屏幕显示帧是否与下一个屏幕显示帧处于同一个视频录制周期内,当该屏幕显示帧与下一个屏幕显示帧不处于同一个视频录制周期时,确定该屏幕显示帧符合目标条件。
在一些实施例中,终端在确定该屏幕显示帧是否与下一个屏幕显示帧处于同一个视频录制周期内时,可以执行下述步骤:以终端当前读取的任一屏幕显示帧为例进行说明,终端获取该当前读取的屏幕显示帧的目标参数,其中,该目标参数可以包括传输帧平均时间间隔(srcInterval)、当前读取的屏幕显示帧时间(curSrcTime)、待录制视频帧时间间隔(recordInterval)或者上一个屏幕显示帧时间(lastRecordTime)中的至少一项,当传输帧平均时间间隔与当前读取的屏幕显示帧时间之和大于或等于待录制视频帧时间间隔与上一个屏幕显示帧时间之和(srcInterval+curSrcTime≥recordInterval+lastRcordTime)时,终端可以确定该当前读取的屏幕显示帧与下一个屏幕显示帧不处于同一个视频录制周期(符合目标条件)。反之,当传输帧平均时间间隔与当前读取的屏幕显示帧时间之和小于待录制视频帧时间间隔与上一个屏幕显示帧时间之和(srcInterval+curSrcTime﹤recordInterval+lastRcordTime)时,终端可以确定该当前读取的屏幕显示帧与下一个屏幕显示帧处于同一个视频录制周期内(不符合目标条件),此时为了避免冗余地复制操作,可以不将该屏幕显示帧复制到多媒体编解码器中。
基于上述情况,以某一游戏为例,该游戏的视频流的帧传输周期通常可以为每秒传输30-60帧,而视频的帧率达到24帧以上即可满足人眼视觉需求,终端可以在视频录制的过程中动态计算当前读取的屏幕显示帧的目标参数,该目标参数中可以包括srcInterval、curSrcTime、recordInterval以及lastRecordTime,当srcInterval+curSrcTime﹤recordInterval+lastRcordTime时,删除当前读取的屏幕显示帧,当srcInterval+curSrcTime≥recordInterval+lastRcordTime)时,执行将当前读取的屏幕显示帧复制到多媒体编解码器中的操作,当视频的帧率为24帧时,终端在上述动态计算时,通常每秒钟会执行25次将屏幕显示帧复制到多媒体编解码器中的操作。
在上述过程中,终端不仅能够保证最终录制得到的视频帧率符合人眼视觉需求,而且还能够在动态帧传输的过程中实时地控制编码时每秒的帧数,使得当帧传输周期发生波动时,GPU也能够即时调整复制到多媒体编解码器的操作频率,并且还能够保证帧与帧之间尽量处于均匀的时间间隔,达到视觉上的流畅显示效果。
在上述过程中,相较于相关技术中MediaCodeC接口直接从MediaProject接口执行复制到多媒体编解码器中的操作,本发明实施例中终端能够在视频录制的过程中,对GPU中存储的屏幕显示数据进行实时地动态计算,对视频录制过程中的任一时刻而言,都能够确定该时刻所对应的屏幕显示帧是否需要复制到多媒体编解码器中,提升了对视频录制方法的可控性。
在一些实施例中,当符合目标条件时,终端在执行将屏幕显示帧复制到多媒体编解码器的过程中,具体可以对帧缓存区内的屏幕显示数据进行绘制,从而将该屏幕显示数据写入该多媒体编解码器的表层组件。例如,该多媒体编解码器的表层组件可以是MediaCodeC接口的Surface组件,当然,终端也可以通过其他的视频编码接口来驱动视频编解码器,并不局限于上述MediaCodeC接口。
在一些实施例中,该多媒体编解码器的表层组件是位于第二EGL环境内的,由于在上述步骤204中,终端将第一EGL环境的EGL上下文设置为第二EGL环境的EGL上下文,使得第一EGL环境能够与第二EGL环境之间共享EGL上下文,从而终端可以直接从帧缓存区内将屏幕显示数据写入多媒体编解码器的表层组件中,也即是终端的在多媒体编解码器上的编码线程能够复用GPU上离屏线程(对应于上述步骤503中的离屏处理的执行线程)的EGL上下文,通过共享EGL上下文的方法,能够减少渲染和编码时开销,优化终端的处理效率。
当然,在一些实施例中,如果该第二EGL环境也可以不与第一EGL环境共享EGL上下文,终端也可以将该多媒体编解码器的表层组件直接与MediaProject接口绑定,从而无需多媒体编解码器的表层组件能够直接从顶层的MediaProject接口中获取屏幕显示数据,而无需从GPU的帧缓存区内获取屏幕显示数据,能够提升多媒体编解码器的编码效率。
在上述步骤505中,在获取视频数据时,终端可以先对该多媒体编解码器内的屏幕显示数据进行编码,得到待合成的原始视频数据,再对该待合成的原始视频数据进行视频合成,可以得到该屏幕显示数据的视频数据,例如,终端可以调用MediaMexuer接口来对待合成的原始视频数据进行视频合成,得到视频数据(也即是视频文件)。
可选地,该待合成的原始视频数据可以是H264格式的,合成后的该视频数据可以是MP4(moving picture experts group audio layer IV,动态影像专家压缩标准音频层面4)格式的。
在上述步骤504-505中,终端可以根据GPU中的屏幕显示数据,获取该屏幕显示数据的关键时刻以及该屏幕显示数据的视频数据,从而基于GPU中存储的屏幕显示数据,实现后续的视频合成,减少对CPU的处理资源的占用,提升了CPU的处理效率,并且由于GPU具有多个并行处理单元,不会对终端的正常运行造成影响。
图6是本发明实施例提供的一种视频录制方法的原理性示意图,参见图6,在该视频录制方法中,终端通过MediaProject接口逐帧采集显示屏上显示内容的屏幕显示数据,再基于EGL表层组件将该屏幕显示数据存储到GPU的帧缓存区中,通过离屏线程将原本OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据,当间隔第一目标时长时,将帧缓存区内二维纹理格式的屏幕显示数据复制到CPU中,以确定关键时刻,同时编码线程与离屏线程共享EGL上下文,使得当符合目标条件时,终端可以将二维纹理格式的屏幕显示数据先写入多媒体编解码器的窗口表层组件(例如图中的WindowsSurface)中,再通过MediaCodeC接口获取窗口表层组件内的屏幕显示数据,对该屏幕显示数据进行编码,生成屏幕显示数据的视频数据,由于这些视频数据过于冗长,为了达到更好的播放效果,执行下述步骤506。
506、终端基于该关键时刻和该视频数据,生成视频。
在上述过程中,终端基于步骤504中确定的关键时刻,以及步骤505中确定的视频数据,能够对该视频数据进行剪辑,从而生成该视频。
在一些实施例中,由于该关键时刻的数量为一个或多个,因此以任一关键时刻的剪辑为例进行说明,终端在剪辑时可以在该视频数据中,确定时间戳与该关键时刻所对应的目标屏幕显示帧,确定该目标屏幕显示帧之前第二目标时长内的多个第一屏幕显示帧,确定该目标屏幕显示帧之后第三目标时长内的多个第二屏幕显示帧,按照时间戳的顺序,将该多个第一屏幕显示帧、目标屏幕显示帧和该多个第二屏幕显示帧确定为该视频。
其中,该第二目标时长和该第三目标时长可以是大于或等于0的任一数值,该第二目标时长可以与该第三目标时长相同,也可以与该第三目标时长不同,例如,该第二目标时长和该第三目标时长可以均为5秒。
图7是本发明实施例提供的一种视频录制方法的原理性示意图,参见图7,终端能够借助GPU渲染引擎获取到屏幕显示数据,将该屏幕显示数据存储在GPU中,当间隔第一目标时长的时候才复制到CPU中,进而生成位图数据,确定关键时刻,同时当符合目标条件时,将GPU中存储的屏幕显示数据复制到多媒体编解码器的表层组件中,对该屏幕显示数据进行编码处理,得到H264格式的待合成的原始视频数据,调用MediaMexuer接口将H264格式的原始视频数据转换为MP4格式的视频数据,基于关键时刻和视频数据来进行视频合成。
从而在本发明实施例提供的视频录制方法中,相较于相关技术中每秒执行30-60次复制到CPU的操作,本发明实施例通过控制第一目标时长能够实现对复制操作的频率控制,例如,终端可以每2秒执行一次复制到CPU的操作,在保证了不遗漏关键时刻的基础上,大大的降低对CPU处理资源的占用,避免了冗余的复制操作,提升了CPU的处理效率。
以游戏视频录制场景为例,由于游戏过程中精彩时刻通常会在显示屏上停留2秒以上的时间,通过将第一目标时长设置为2秒,从而可以将复制操作的频率控制在每2秒一次,相较于相关技术中的方案,本发明实施例不仅能够实现对屏幕显示数据的访问(相关技术中是封装在原生的ImageReader接口内,外部无法访问),而且还节约了相关技术中97%的复制操作流程,解决了录屏线程(包括离屏线程和编码线程)与游戏线程抢占CPU处理资源的问题,也就能够避免因CPU处理资源不足所导致的视频录制导致的游戏掉帧、终端温度升高等问题。
示意性的,以型号为三星S6的终端为例进行测试,使用相关技术中的方案来同时进行游戏和录屏,会使得终端的温度比不录屏时升高15度,游戏帧率会从不录屏时的30帧降到22帧,对终端的CPU处理效率造成了较大的负面影响。相反,在执行本发明实施例中的视频录制方法之后,游戏帧率仍能够保持在30帧(与不录屏时相同),说明游戏帧率可以不受录屏操作的影响,同时还能够减少90%的CPU处理资源的占用,另外终端的温度比不录屏时升高5度,也即是相较于相关技术中的方案能够降低10度,极大程度的兼顾了游戏性能和录屏功能,提升了用户的游戏体验。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
本发明实施例提供的方法,根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,将该屏幕显示数据存储至包含多个并行处理单元的GPU中,基于该GPU中所存储的原始的屏幕显示数据来进行关键时刻和视频数据的获取,从而实现视频的生成,由于在上述视频录制过程中,终端可以在大部分时间下将屏幕显示数据存储到GPU中,并且基于GPU所存储的数据来进行后续的视频生成过程,从而能够减少对CPU的处理资源的占用,提升了CPU的处理效率,并且,由于GPU具有多个并行处理单元,因此,终端在应用GPU进行上述过程时不会对终端的正常运行造成影响。
进一步地,终端可以创建第一EGL环境,在该第一EGL环境下,创建EGL表层组件和帧缓存区,将该帧缓存区与该EGL上下文绑定,在运行该帧缓存区时调用该EGL上下文,使得终端能够基于该第一EGL环境调用渲染引擎的API,根据该渲染引擎的API能够控制渲染引擎,从而驱动GPU的图像渲染管线,基于EGL上下文来操作渲染资源,从而实现图像渲染,使得渲染引擎能够与终端操作系统实现更好地适配。
进一步地,终端可以创建第二EGL环境,将该第一EGL环境的EGL上下文设置为该第二EGL环境的EGL上下文,将多媒体编解码器的表层组件与该EGL上下文绑定,在运行该多媒体编解码器的表层组件时调用该EGL上下文,从而能够通过共享EGL上下文的方法,能够减少渲染和编码时开销,优化终端的处理效率。
进一步地,终端根据显示设备的版本,对该第一EGL环境进行初始化和配置处理,创建该EGL上下文,从而能够完成第一EGL环节的初始化,为后续的视频录制方法创建执行环境。
进一步地,终端可以通过EGL表层组件,将该屏幕显示数据存储至该GPU中,相较于相关技术中直接通过终端原生的ImageReader接口将屏幕显示数据复制到CPU中的情况,本发明实施例能够将MediaProject接口内采集得到的屏幕显示数据存储到GPU中,由于GPU通常会有多个硬件元件实行并行加速(也即是硬件加速),因此存储在GPU中不会影响终端的处理效率,而且由于大大地降低了对CPU处理资源的占用,也就提升了终端的处理效率。
进一步地,终端将该屏幕显示数据以OES纹理格式存储到GPU中,在该GPU内,将该OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据,由于二维纹理格式与位图数据的纹理格式是一致的,因此在GPU中实现纹理格式转换后,能够方便后续生成位图数据。
进一步地,终端将初始二维纹理绑定至色彩缓存区,基于该色彩缓存区,对该OES纹理格式的屏幕显示数据进行绘制,将该OES纹理格式的屏幕显示数据写入该初始二维纹理,得到该二维纹理格式的屏幕显示数据,使得屏幕显示数据的纹理格式与位图数据的纹理格式保持一致,也就避免了因数据格式不匹配而导致的黑屏等问题。
进一步地,终端可以每间隔第一目标时长,将该GPU中当前时刻所获取到的屏幕显示数据中的任一屏幕显示帧复制至该CPU中,基于该CPU确定该屏幕显示帧是否对应于关键时刻,明确了终端在逐帧读取屏幕显示数据的情况下,如何实现对将屏幕显示帧从GPU复制到CPU的频率进行控制,也即是通过控制第一目标时长的数值来控制复制频率,提升了对视频录制方法的可控性。
进一步地,终端获取该屏幕显示帧的像素数据,根据该屏幕显示帧的像素数据,确定该屏幕显示帧是否对应于关键时刻,能够毫不遗漏确认出录屏过程中所出现的关键时刻。
进一步地,终端根据该屏幕显示帧的像素数据,生成该屏幕显示帧的位图数据,对该屏幕显示帧的位图数据进行图像识别,确定该屏幕显示帧是否为关键图像,当该屏幕显示帧为关键图像时,将该屏幕显示帧的时间戳确定为一个关键时刻,可以在视频录制的过程中,同时获取到该屏幕显示数据中的关键时刻,方便了对多媒体编解码器输出的待剪辑视频进行剪辑。
进一步地,终端对于该GPU中的该屏幕显示数据所包括的任一屏幕显示帧,根据视频流的帧传输周期以及视频的帧率,确定该屏幕显示帧是否符合目标条件,当该屏幕显示帧符合该目标条件时,终端将该屏幕显示帧复制至该多媒体编解码器中,能够对GPU中存储的屏幕显示数据进行实时地动态计算,实现了对将屏幕显示帧从GPU复制到多媒体编解码器的操作频率进行控制,提升了对视频录制方法的可控性。
进一步地,将该目标条件设置为屏幕显示帧与下一个屏幕显示帧不处于同一个视频录制周期内,不仅能够保证最终录制得到的视频帧率符合人眼视觉需求,而且还能够在动态帧传输的过程中实时地控制编码时每秒的帧数,使得当帧传输周期发生波动时,GPU也能够即时调整复制到多媒体编解码器的操作频率,并且还能够保证帧与帧之间尽量处于均匀的时间间隔,达到视觉上的流畅显示效果。
进一步地,对该屏幕显示数据进行绘制,将该屏幕显示数据写入该多媒体编解码器的表层组件,而当第一EGL环境与第二EGL环境之间共享EGL上下文时,终端能够减少渲染和编码时开销,优化终端的处理效率。
进一步地,终端可以对该多媒体编解码器内的屏幕显示数据进行编码,得到待合成的原始视频数据,对该待合成的原始视频数据进行视频合成,可以得到该屏幕显示数据的视频数据,能够将屏幕显示数据转换为MP4格式的视频数据,便于了后续的剪辑操作。
图8是本发明实施例提供的一种视频录制装置的结构示意图,参见图8,该视频录制装置中可以包括获取存储模块801、获取模块802和生成模块803,下面进行详述:
获取存储模块801,用于根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,将该屏幕显示数据存储至图像处理器中;
获取模块802,用于根据该图像处理器中的屏幕显示数据,获取该屏幕显示数据的关键时刻以及该屏幕显示数据的视频数据;
生成模块803,用于基于该关键时刻和该视频数据,生成视频。
本发明实施例提供的装置,根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,将该屏幕显示数据存储至包含多个并行处理单元的GPU中,基于该GPU中所存储的原始的屏幕显示数据来进行关键时刻和视频数据的获取,从而实现视频的生成,由于在上述视频录制过程中,终端可以在大部分时间下将屏幕显示数据存储到GPU中,并且基于GPU所存储的数据来进行后续的视频生成过程,从而能够减少对CPU的处理资源的占用,提升了CPU的处理效率,并且,由于GPU具有多个并行处理单元,因此,终端在应用GPU进行上述过程时不会对终端的正常运行造成影响。
在一种可能实施方式中,基于图8的装置组成,该获取模块802包括:
第一复制获取子模块,用于将该图像处理器中的该屏幕显示数据复制至中央处理器中,通过该中央处理器获取该屏幕显示数据的关键时刻;
第二复制获取子模块,用于将该图像处理器中的该屏幕显示数据复制至多媒体编解码器中,通过该多媒体编解码器获取该屏幕显示数据的视频数据。
在一种可能实施方式中,基于图8的装置组成,该第一复制获取子模块包括:
复制确定单元,用于每间隔第一目标时长,将该图像处理器中当前时刻所获取到的屏幕显示数据中的任一屏幕显示帧复制至该中央处理器中,基于该中央处理器确定该屏幕显示帧是否对应于关键时刻。
在一种可能实施方式中,基于图8的装置组成,该复制确定单元包括:
获取确定子单元,用于获取该屏幕显示帧的像素数据,根据该屏幕显示帧的像素数据,确定该屏幕显示帧是否对应于关键时刻。
在一种可能实施方式中,该获取确定子单元用于:
根据该屏幕显示帧的像素数据,生成该屏幕显示帧的位图数据;
对该屏幕显示帧的位图数据进行图像识别,确定该屏幕显示帧是否为关键图像;
当该屏幕显示帧为关键图像时,将该屏幕显示帧的时间戳确定为一个关键时刻。
在一种可能实施方式中,基于图8的装置组成,该获取存储模块801包括:
存储子模块,用于将该屏幕显示数据以OES纹理格式存储到该图像处理器中;
转换子模块,用于在该图像处理器内,将该OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据。
在一种可能实施方式中,该转换子模块用于:
将初始二维纹理绑定至色彩缓存区,基于该色彩缓存区,对该OES纹理格式的屏幕显示数据进行绘制;
将该OES纹理格式的屏幕显示数据写入该初始二维纹理,得到该二维纹理格式的屏幕显示数据。
在一种可能实施方式中,基于图8的装置组成,该装置还包括:
创建模块,用于创建第一EGL环境,该第一EGL环境中包括EGL上下文,该EGL上下文用于提供纹理转换所需的状态信息;
该创建模块,还用于在该第一EGL环境下,创建EGL表层组件和帧缓存区,该EGL表层组件用于将屏幕显示数据存储为OES纹理格式的数据,该帧缓存区用于对屏幕显示数据进行纹理格式转换;
绑定模块,用于将该帧缓存区与该EGL上下文绑定,在运行该帧缓存区时调用该EGL上下文。
在一种可能实施方式中,该创建模块,还用于创建第二EGL环境,将该第一EGL环境的EGL上下文设置为该第二EGL环境的EGL上下文;
该绑定模块,还用于将该多媒体编解码器的表层组件与该EGL上下文绑定,在运行该多媒体编解码器的表层组件时调用该EGL上下文。
在一种可能实施方式中,该创建模块用于:
根据显示设备的版本,对该第一EGL环境进行初始化和配置处理,创建EGL上下文。
在一种可能实施方式中,该第二复制获取子模块用于:
对于该图像处理器中的该屏幕显示数据所包括的任一屏幕显示帧,根据视频流的帧传输周期以及该视频的帧率,确定该屏幕显示帧是否符合目标条件;
当该屏幕显示帧符合该目标条件时,将该屏幕显示帧复制至该多媒体编解码器中。
在一种可能实施方式中,该第二复制获取子模块用于:
对该屏幕显示数据进行绘制,将该屏幕显示数据写入该多媒体编解码器的表层组件。
在一种可能实施方式中,该第二复制获取子模块用于:
对该多媒体编解码器内的屏幕显示数据进行编码,得到待合成的原始视频数据;
对该待合成的原始视频数据进行视频合成,得到该屏幕显示数据的视频数据。
在一种可能实施方式中,该获取存储模块801用于:
通过EGL表层组件,将该屏幕显示数据存储至该图像处理器中,该EGL表层组件用于将屏幕显示数据存储为OES纹理格式的数据。
需要说明的是:上述实施例提供的视频录制装置在录制视频时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的视频录制装置与视频录制方法实施例属于同一构思,其具体实现过程详见视频录制方法实施例,这里不再赘述。
图9示出了本发明一个示例性实施例提供的终端900的结构框图。该终端900可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio LayerIV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端900还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端900包括有:处理器901和存储器902。
处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器901可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器901可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器901还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器902中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器901所执行以实现本申请中方法实施例提供的视频录制方法。
在一些实施例中,终端900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、触摸显示屏905、摄像头906、音频电路907、定位组件908和电源909中的至少一种。
外围设备接口903可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器901和存储器902。在一些实施例中,处理器901、存储器902和外围设备接口903被集成在同一芯片或电路板上;在一些其他实施例中,处理器901、存储器902和外围设备接口903中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路904用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。射频电路904将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路904包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路904可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路904还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏905用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏905是触摸显示屏时,显示屏905还具有采集在显示屏905的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器901进行处理。此时,显示屏905还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏905可以为一个,设置终端900的前面板;在另一些实施例中,显示屏905可以为至少两个,分别设置在终端900的不同表面或呈折叠设计;在再一些实施例中,显示屏905可以是柔性显示屏,设置在终端900的弯曲表面上或折叠面上。甚至,显示屏905还可以设置成非矩形的不规则图形,也即异形屏。显示屏905可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件906用于采集图像或视频。可选地,摄像头组件906包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件906还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路907可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路907还可以包括耳机插孔。
定位组件908用于定位终端900的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件908可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源909用于为终端900中的各个组件进行供电。电源909可以是交流电、直流电、一次性电池或可充电电池。当电源909包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端900还包括有一个或多个传感器910。该一个或多个传感器910包括但不限于:加速度传感器911、陀螺仪传感器912、压力传感器913、指纹传感器914、光学传感器915以及接近传感器916。
加速度传感器911可以检测以终端900建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器911可以用于检测重力加速度在三个坐标轴上的分量。处理器901可以根据加速度传感器911采集的重力加速度信号,控制触摸显示屏905以横向视图或纵向视图进行用户界面的显示。加速度传感器911还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器912可以检测终端900的机体方向及转动角度,陀螺仪传感器912可以与加速度传感器911协同采集用户对终端900的3D动作。处理器901根据陀螺仪传感器912采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器913可以设置在终端900的侧边框和/或触摸显示屏905的下层。当压力传感器913设置在终端900的侧边框时,可以检测用户对终端900的握持信号,由处理器901根据压力传感器913采集的握持信号进行左右手识别或快捷操作。当压力传感器913设置在触摸显示屏905的下层时,由处理器901根据用户对触摸显示屏905的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器914用于采集用户的指纹,由处理器901根据指纹传感器914采集到的指纹识别用户的身份,或者,由指纹传感器914根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器901授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器914可以被设置终端900的正面、背面或侧面。当终端900上设置有物理按键或厂商Logo时,指纹传感器914可以与物理按键或厂商Logo集成在一起。
光学传感器915用于采集环境光强度。在一个实施例中,处理器901可以根据光学传感器915采集的环境光强度,控制触摸显示屏905的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏905的显示亮度;当环境光强度较低时,调低触摸显示屏905的显示亮度。在另一个实施例中,处理器901还可以根据光学传感器915采集的环境光强度,动态调整摄像头组件906的拍摄参数。
接近传感器916,也称距离传感器,通常设置在终端900的前面板。接近传感器916用于采集用户与终端900的正面之间的距离。在一个实施例中,当接近传感器916检测到用户与终端900的正面之间的距离逐渐变小时,由处理器901控制触摸显示屏905从亮屏状态切换为息屏状态;当接近传感器916检测到用户与终端900的正面之间的距离逐渐变大时,由处理器901控制触摸显示屏905从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图9中示出的结构并不构成对终端900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括至少一条指令的存储器,上述至少一条指令可由终端中的处理器执行以完成上述实施例中视频录制方法。例如,该计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (20)
1.一种视频录制方法,其特征在于,所述方法包括:
根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,通过EGL表层组件将所述屏幕显示数据以OES纹理格式存储到图像处理器中,所述EGL表层组件是在第一EGL环境下创建的,所述第一EGL环境中包括EGL上下文,所述EGL上下文用于提供纹理转换所需的状态信息;
在所述图像处理器内,通过帧缓存区将所述OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据,所述帧缓存区是在第一EGL环境下创建的,所述帧缓存区与所述EGL上下文绑定,所述EGL上下文在运行所述帧缓存区时被调用;
根据所述图像处理器中的所述二维纹理格式的屏幕显示数据,获取所述屏幕显示数据的关键时刻以及所述屏幕显示数据的视频数据,其中,所述屏幕显示数据的关键时刻是通过中央处理器获取的,所述屏幕显示数据的视频数据是通过多媒体编解码器获取的,所述多媒体编解码器的表层组件与第二EGL环境的EGL上下文绑定,所述第二EGL环境的EGL上下文在运行所述多媒体编解码器的表层组件时被调用,所述第二EGL环境的EGL上下文与所述第一EGL环境的EGL上下文相同;
基于所述关键时刻和所述视频数据,生成视频。
2.根据权利要求1所述的方法,其特征在于,所述根据所述图像处理器中的所述二维纹理格式的屏幕显示数据,获取所述屏幕显示数据的关键时刻以及所述屏幕显示数据的视频数据包括:
将所述图像处理器中的所述二维纹理格式的所述屏幕显示数据复制至所述中央处理器中,通过所述中央处理器获取所述屏幕显示数据的关键时刻;
将所述图像处理器中的所述屏幕显示数据复制至多媒体编解码器中,通过所述多媒体编解码器获取所述屏幕显示数据的视频数据。
3.根据权利要求2所述的方法,其特征在于,所述将所述图像处理器中的所述二维纹理格式的屏幕显示数据复制至中央处理器中,通过所述中央处理器获取所述屏幕显示数据的关键时刻包括:
每间隔第一目标时长,将所述图像处理器中当前时刻所获取到所述二维纹理格式的屏幕显示数据中的任一屏幕显示帧复制至所述中央处理器中,基于所述中央处理器确定所述屏幕显示帧是否对应于关键时刻。
4.根据权利要求3所述的方法,其特征在于,所述基于所述中央处理器确定所述屏幕显示帧是否对应于关键时刻包括:
获取所述屏幕显示帧的像素数据,根据所述屏幕显示帧的像素数据,确定所述屏幕显示帧是否对应于关键时刻。
5.根据权利要求4所述的方法,其特征在于,所述根据所述屏幕显示帧的像素数据,确定所述屏幕显示帧是否对应于关键时刻包括:
根据所述屏幕显示帧的像素数据,生成所述屏幕显示帧的位图数据;
对所述屏幕显示帧的位图数据进行图像识别,确定所述屏幕显示帧是否为关键图像;
当所述屏幕显示帧为关键图像时,将所述屏幕显示帧的时间戳确定为一个关键时刻。
6.根据权利要求1所述的方法,其特征在于,所述将所述OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据包括:
将初始二维纹理绑定至色彩缓存区,基于所述色彩缓存区,对所述OES纹理格式的屏幕显示数据进行绘制;
将所述OES纹理格式的屏幕显示数据写入所述初始二维纹理,得到所述二维纹理格式的屏幕显示数据。
7.根据权利要求2所述的方法,其特征在于,所述将所述图像处理器中的所述屏幕显示数据复制至多媒体编解码器中包括:
对于所述图像处理器中的所述屏幕显示数据所包括的任一屏幕显示帧,根据视频流的帧传输周期以及所述视频的帧率,确定所述屏幕显示帧是否符合目标条件;
当所述屏幕显示帧符合所述目标条件时,将所述屏幕显示帧复制至所述多媒体编解码器中。
8.根据权利要求2所述的方法,其特征在于,所述将所述图像处理器中的所述屏幕显示数据复制至多媒体编解码器中包括:
对所述屏幕显示数据进行绘制,将所述屏幕显示数据写入所述多媒体编解码器的表层组件。
9.根据权利要求2所述的方法,其特征在于,所述通过所述多媒体编解码器获取所述屏幕显示数据的视频数据包括:
对所述多媒体编解码器内的屏幕显示数据进行编码,得到待合成的原始视频数据;
对所述待合成的原始视频数据进行视频合成,得到所述屏幕显示数据的视频数据。
10.一种视频录制装置,其特征在于,所述装置包括:
获取存储模块,用于根据屏幕录制指令,以视频流的形式,获取当前屏幕上所显示内容的屏幕显示数据,通过EGL表层组件将所述屏幕显示数据以OES纹理格式存储到图像处理器中,所述EGL表层组件是在第一EGL环境下创建的,所述第一EGL环境中包括EGL上下文,所述EGL上下文用于提供纹理转换所需的状态信息;
在所述图像处理器内,通过帧缓存区将所述OES纹理格式的屏幕显示数据转换为二维纹理格式的屏幕显示数据,所述帧缓存区是在第一EGL环境下创建的,所述帧缓存区与所述EGL上下文绑定,所述EGL上下文在运行所述帧缓存区时被调用;
获取模块,用于根据所述图像处理器中的所述二维纹理格式的屏幕显示数据,获取所述屏幕显示数据的关键时刻以及所述屏幕显示数据的视频数据,其中,所述屏幕显示数据的关键时刻是通过中央处理器获取的,所述屏幕显示数据的视频数据是通过多媒体编解码器获取的,所述多媒体编解码器的表层组件与第二EGL环境的EGL上下文绑定,所述第二EGL环境的EGL上下文在运行所述多媒体编解码器的表层组件时被调用,所述第二EGL环境的EGL上下文与所述第一EGL环境的EGL上下文相同;
生成模块,用于基于所述关键时刻和所述视频数据,生成视频。
11.根据权利要求10所述的装置,其特征在于,所述获取模块包括:
第一复制获取子模块,用于将所述图像处理器中的所述二维纹理格式的屏幕显示数据复制至所述中央处理器中,通过所述中央处理器获取所述屏幕显示数据的关键时刻;
第二复制获取子模块,用于将所述图像处理器中的所述屏幕显示数据复制至多媒体编解码器中,通过所述多媒体编解码器获取所述屏幕显示数据的视频数据。
12.根据权利要求11所述的装置,其特征在于,所述第一复制获取子模块包括:
复制确定单元,用于每间隔第一目标时长,将所述图像处理器中当前时刻所获取到所述二维纹理格式的屏幕显示数据中的任一屏幕显示帧复制至所述中央处理器中,基于所述中央处理器确定所述屏幕显示帧是否对应于关键时刻。
13.根据权利要求12所述的装置,其特征在于,所述复制确定单元包括:
获取确定子单元,用于获取所述屏幕显示帧的像素数据,根据所述屏幕显示帧的像素数据,确定所述屏幕显示帧是否对应于关键时刻。
14.根据权利要求13所述的装置,其特征在于,所述获取确定子单元用于:
根据所述屏幕显示帧的像素数据,生成所述屏幕显示帧的位图数据;
对所述屏幕显示帧的位图数据进行图像识别,确定所述屏幕显示帧是否为关键图像;
当所述屏幕显示帧为关键图像时,将所述屏幕显示帧的时间戳确定为一个关键时刻。
15.根据权利要求10所述的装置,其特征在于,所述获取存储模块还包括转换子模块,所述转换子模块用于:
将初始二维纹理绑定至色彩缓存区,基于所述色彩缓存区,对所述OES纹理格式的屏幕显示数据进行绘制;
将所述OES纹理格式的屏幕显示数据写入所述初始二维纹理,得到所述二维纹理格式的屏幕显示数据。
16.根据权利要求11所述的装置,其特征在于,所述第二复制获取子模块用于:
对于所述图像处理器中的所述屏幕显示数据所包括的任一屏幕显示帧,根据视频流的帧传输周期以及所述视频的帧率,确定所述屏幕显示帧是否符合目标条件;
当所述屏幕显示帧符合所述目标条件时,将所述屏幕显示帧复制至所述多媒体编解码器中。
17.根据权利要求11所述的装置,其特征在于,所述第二复制获取子模块用于:
对所述屏幕显示数据进行绘制,将所述屏幕显示数据写入所述多媒体编解码器的表层组件。
18.根据权利要求11所述的装置,其特征在于,所述第二复制获取子模块用于:
对所述多媒体编解码器内的屏幕显示数据进行编码,得到待合成的原始视频数据;
对所述待合成的原始视频数据进行视频合成,得到所述屏幕显示数据的视频数据。
19.一种终端,其特征在于,所述终端包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条指令,所述至少一条指令由所述一个或多个处理器加载并执行以实现如权利要求1至权利要求9任一项所述的视频录制方法所执行的操作。
20.一种存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如权利要求1至权利要求9任一项所述的视频录制方法所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910447363.2A CN112004041B (zh) | 2019-05-27 | 2019-05-27 | 视频录制方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910447363.2A CN112004041B (zh) | 2019-05-27 | 2019-05-27 | 视频录制方法、装置、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112004041A CN112004041A (zh) | 2020-11-27 |
CN112004041B true CN112004041B (zh) | 2022-06-10 |
Family
ID=73461907
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910447363.2A Active CN112004041B (zh) | 2019-05-27 | 2019-05-27 | 视频录制方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112004041B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988103B (zh) * | 2021-05-13 | 2021-08-20 | 统信软件技术有限公司 | 一种数据显示方法及计算设备 |
CN113411661B (zh) * | 2021-06-11 | 2023-01-31 | 北京百度网讯科技有限公司 | 用于记录信息的方法、装置、设备、存储介质及程序产品 |
CN113663328B (zh) * | 2021-08-25 | 2023-09-19 | 腾讯科技(深圳)有限公司 | 画面录制方法、装置、计算机设备及存储介质 |
CN116704087B (zh) * | 2022-10-17 | 2024-02-27 | 荣耀终端有限公司 | 一种参数调整方法及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104811787A (zh) * | 2014-10-27 | 2015-07-29 | 深圳市腾讯计算机系统有限公司 | 游戏视频录制方法及装置 |
CN105933724A (zh) * | 2016-05-23 | 2016-09-07 | 福建星网视易信息系统有限公司 | 视频制作方法、装置及系统 |
WO2017015300A1 (en) * | 2015-07-22 | 2017-01-26 | Qualcomm Incorporated | Devices and methods for facilitating video and graphics streams in remote display applications |
CN107515759A (zh) * | 2017-09-20 | 2017-12-26 | 武汉斗鱼网络科技有限公司 | 截屏方法、装置、电子设备及可读存储介质 |
CN109168014A (zh) * | 2018-09-26 | 2019-01-08 | 广州虎牙信息科技有限公司 | 一种直播方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110134120A1 (en) * | 2009-12-07 | 2011-06-09 | Smart Technologies Ulc | Method and computing device for capturing screen images and for identifying screen image changes using a gpu |
-
2019
- 2019-05-27 CN CN201910447363.2A patent/CN112004041B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104811787A (zh) * | 2014-10-27 | 2015-07-29 | 深圳市腾讯计算机系统有限公司 | 游戏视频录制方法及装置 |
WO2017015300A1 (en) * | 2015-07-22 | 2017-01-26 | Qualcomm Incorporated | Devices and methods for facilitating video and graphics streams in remote display applications |
CN105933724A (zh) * | 2016-05-23 | 2016-09-07 | 福建星网视易信息系统有限公司 | 视频制作方法、装置及系统 |
CN107515759A (zh) * | 2017-09-20 | 2017-12-26 | 武汉斗鱼网络科技有限公司 | 截屏方法、装置、电子设备及可读存储介质 |
CN109168014A (zh) * | 2018-09-26 | 2019-01-08 | 广州虎牙信息科技有限公司 | 一种直播方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112004041A (zh) | 2020-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112004041B (zh) | 视频录制方法、装置、终端及存储介质 | |
CN110572722B (zh) | 视频剪辑方法、装置、设备及可读存储介质 | |
CN108401124B (zh) | 视频录制的方法和装置 | |
CN113726950B (zh) | 一种图像处理方法和电子设备 | |
CN110213638B (zh) | 动画显示方法、装置、终端及存储介质 | |
US11762529B2 (en) | Method for displaying application icon and electronic device | |
CN109359262B (zh) | 动画播放方法、装置、终端及存储介质 | |
CN110533585B (zh) | 一种图像换脸的方法、装置、系统、设备和存储介质 | |
CN113225616B (zh) | 视频播放方法、装置、计算机设备及可读存储介质 | |
CN113935898A (zh) | 图像处理方法、系统、电子设备及计算机可读存储介质 | |
CN113837920B (zh) | 一种图像渲染方法及电子设备 | |
WO2022095744A1 (zh) | Vr显示控制方法、电子设备及计算机可读存储介质 | |
CN112527174A (zh) | 一种信息处理方法及电子设备 | |
CN110662105A (zh) | 动画文件的生成方法、装置及存储介质 | |
CN111586444B (zh) | 视频处理方法、装置、电子设备及存储介质 | |
CN111265885B (zh) | 资源显示方法、资源发送方法、装置、设备及存储介质 | |
CN109819314B (zh) | 音视频处理方法、装置、终端及存储介质 | |
CN107888975B (zh) | 视频播放方法、装置及存储介质 | |
CN112822544A (zh) | 视频素材文件生成方法、视频合成方法、设备及介质 | |
CN113688043B (zh) | 应用程序测试方法、装置、服务器、iOS设备及介质 | |
CN112669884B (zh) | 音频数据处理方法、装置、设备及存储介质 | |
CN113485596A (zh) | 虚拟模型的处理方法、装置、电子设备及存储介质 | |
CN114708289A (zh) | 一种图像帧预测的方法及电子设备 | |
CN108877845B (zh) | 歌曲播放方法及装置 | |
CN111294509A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |