所属的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为″电路″、″模块″或″系统″。在一些可能的实施方式中,根据本发明的设备可以至少包括至少一个处理器、以及至少一个计算机存储介质。其中,计算机存储介质存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书上述描述的根据本发明各种示例性实施方式的录屏视频的生成方法中的步骤。例如,处理器可以执行如图3中所示的步骤301-305。下面参照图10来描述根据本发明的这种实施方式的设备1000。图10显示的设备1000仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图10所示,设备1000以通用δr设备的形式表现。设备1000的组件可以包括但不限于:上述至少一个处理器1001、上述至少一个计算机存储介质1002、连接不同系统组件(包括计算机存储介质1002和处理器1001)的总线1003。总线1003表示几类总线结构中的一种或多种,包括计算机存储介质总线或者计算机存储介质控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。计算机存储介质1002可以包括易失性计算机存储介质形式的可读介质,例如随机存取计算机存储介质(ram)1021和/或高速缓存存储介质1022,还可以进一步包括只读计算机存储介质(rom)1023。计算机存储介质1002还可以包括具有一组(至少一个)程序模块1024的程序/实用工具1025,这样的程序模块1024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。设备1000也可以与一个或多个外部设备1004(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与设备1000交互的设备通信,和/或与使得该设备1000能与一个或多个其它ar设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口1005进行。并且,设备1000还可以通过网络适配器1006与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器1006通过总线1003与用于设备1000的其它模块通信。应当理解,尽管图中未示出,可以结合设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。在一些可能的实施方式中,本发明提供的一种录屏视频的生成方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在计算机设备上运行时,程序代码用于使计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的录屏视频的生成方法中的步骤。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
背景技术:
1、现有技术中的屏幕录制是通过安卓sdk(software development kit,软件开发工具包)中的媒体投影mediaprojection、虚拟显示屏virtualdisplay和媒体编码解码器线程mediacodec三个标准api(application programming interface,应用程序接口)来实现录屏功能,其中,mediaprojection是android sdk中专门用来进行录屏的功能类,通过这个类可以创建虚拟显示屏virtualdisplay对象。mediacodec是android sdk中用来进行音视频数据编解码的功能类,对于编码而言,是输入原始的音视频数据,输出编码后的音视频数据。
2、如图1所示,为三者之间的关系,通过mediaprojection创建virtualdisplay对象,这个virtualdisplay对象包含一个surface,那屏幕上显示的图像将会自动按照上述帧率渲染至这个outsurface上面,而这个surface又作为mediacodec的lnputsurface,也就是图像编码的数据来源。这样,屏幕上显示的图像数据就直接作为编码器的数据来源,也就作为编码器输入/输出数据的帧率,这是无法控制的。所以,该方式录屏的视频的帧率是与屏幕刷新率相同,导致录制的视频的帧率是固定不变的,不能根据自己的需求改变录屏的帧率。但是,该方式可能会导致接收端无法正常显示移动端设备录制的视频。例如,移动端在自身屏幕刷新率较高时录制的录屏视频,但是可能由于接收端解码能力不足,无法解码该录屏视频,导致无法正常显示移动端录制的录屏视频。
技术实现思路
1、本技术提供了一种录屏视频的生成方法及设备,用于实现按照指定的编码帧率来生成录屏视频,并不是基于屏幕刷新率来生成录屏视频,以使接收端能够解码该录屏视频,保证接收端能够正常显示录制的视频。
2、第一方面,本技术实施例提供一种录屏视频的生成方法,所述方法包括:
3、每隔目标时长,获取第一设备的虚拟显示屏中存储的各视频图像中的目标视频图像,其中,所述各视频图像是接收到录屏指令后,基于所述第一设备自身的屏幕刷新率来对所述第一设备显示的视频图像进行抽帧得到的,且所述目标时长是基于指定的编码帧率得到的,以及所述目标视频图像是基于所述屏幕刷新率以及所述指定的编码帧率确定出的;
4、将所述目标视频图像渲染至与所述虚拟显示屏对应的目标纹理上;
5、通过opengl es渲染线程将所述目标纹理上的目标视频图像渲染至目标su rface中;
6、通过所述目标surface将所述目标视频图像发送至媒体编码解码器线程中,以便于通过所述媒体编码解码器线程对所述目标视频图像进行编码,得到编码后的视频图像;
7、当接收到录屏结束指令后,根据各编码后的视频图像,得到录屏视频,并将所述录制视频发送给第二设备进行显示。
8、本技术第二方面提供一种第一设备,包括处理器和存储器,所述处理器和所述存储器通过总线连接;
9、所述存储器中存储有计算机程序,所述处理器被配置为基于所述计算机程序执行以下操作:
10、每隔目标时长,获取第一设备的虚拟显示屏中存储的各视频图像中的目标视频图像,其中,所述各视频图像是接收到录屏指令后,基于所述第一设备自身的屏幕刷新率来对所述第一设备显示的视频图像进行抽帧得到的,且所述目标时长是基于指定的编码帧率得到的,以及所述目标视频图像是基于所述屏幕刷新率以及所述指定的编码帧率确定出的;
11、将所述目标视频图像渲染至与所述虚拟显示屏对应的目标纹理上;
12、通过opengl es渲染线程将所述目标纹理上的目标视频图像渲染至目标surface中;
13、通过所述目标surface将所述目标视频图像发送至媒体编码解码器线程中,以便于通过所述媒体编码解码器线程对所述目标视频图像进行编码,得到编码后的视频图像;
14、当接收到录屏结束指令后,根据各编码后的视频图像,得到录屏视频,并将所述录制视频发送给第二设备进行显示。
15、根据本发明实施例提供的第三方面,提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序用于执行如第一方面所述的方法。
16、本技术的上述实施例中通过每隔目标时长获取第一设备的虚拟显示屏中存储的基于第一设备自身的屏幕刷新率来对第一设备显示的视频图像进行抽帧得到的中的目标视频图像,其中,所述目标时长是基于指定的编码帧率得到的,以及所述目标视频图像是基于所述屏幕刷新率以及所述指定的编码帧率确定出的;并将目标视频图像渲染至与虚拟显示屏对应的目标纹理上;然后通过opengl es渲染线程将目标纹理上的目标视频图像渲染至目标surface中;并通过目标surface将目标视频图像发送至媒体编码解码器线程中,以便于通过媒体编码解码器线程对目标视频图像进行编码,得到编码后的视频图像;当接收到录屏结束指令后,根据各编码后的视频图像,得到录屏视频,并将所述录制视频发送给第二设备进行显示。由此,本技术实施例中是在虚拟显示屏和媒体编码解码器线程之间插入了opengles渲染线程的渲染环节,该渲染环节是将虚拟显示屏所绑定的目标纹理上的视频图像渲染至媒体编码解码器线程的目标surface上。该渲染环节对应的频率是可以控制的,即指定的编码频率,所以本技术实施例中实现了按照指定的编码帧率来生成录屏视频,并不是基于屏幕刷新率来生成录屏视频,该指定的编码帧率是可以根据具体的实际情况来设置的,以使接收端能够解码该录屏视频,保证接收端能够正常显示录制的视频。