一种屏幕录制方法及装置、存储介质与流程

专利2022-05-09  131


本申请实施例涉及屏幕录制技术,尤其涉及一种屏幕录制方法及装置、存储介质。



背景技术:

目前的录屏功能,需要用户选择待录屏对象,并需要用户为待录屏对象确定相应的抓屏方式,而确定抓屏方式时,需要一定的抓屏知识,不然为待录屏对象确定的抓屏方式不一定适于待录屏对象,或者录屏效果不佳;若用户未为待录屏对象确定抓屏方式,则需要系统自动确定录屏方式,而系统为待录屏对象确定的抓屏方式非常不智能,只能确定待录屏对象所支持的或预设的抓屏方式进行确定,当前系统中可能支持更适于待录屏对象的录屏方式,或者当前系统中具有录屏效果更佳的抓屏方式,但自动确定抓屏方式不可能为待录屏对象确定这些更适合的抓屏方式。



技术实现要素:

有鉴于此,本申请实施例提供一种屏幕录制方法及装置、存储介质,能根据屏幕录制指令确定出待录制内容,并结合当前的运行环境为待录制内容确定抓屏策略,基于抓屏策略创建相应的抓屏对象,实现对待录屏对象的屏幕录制。

根据本申请的第一方面,提供一种屏幕录制方法,包括:

基于屏幕录制指令,确定待录制内容;

根据当前的运行环境,为所述待录制内容确定抓屏策略;

在所述抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对所述抓屏对象进行初始化;确定优先级最高的抓屏策略对应的所述抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略,直至为所述抓屏策略创建适用的抓屏对象或所有抓屏策略均尝试完毕;

当成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。

作为一种实现方式,所述基于屏幕录制指令,确定待录制内容,包括:

获取屏幕录制指令中的待录制内容,所述待录制内容为以下至少之一:

应用界面、操作系统桌面。

作为一种实现方式,所述为所述抓屏策略创建抓屏对象,包括:

待录制内容为游戏时,为游戏创建多个抓屏对象,对所述多个抓屏对象分别进行初始化;

使用全局钩子监听所创建的所述多个抓屏对象,以在所述多个抓屏对象中确定产生视频渲染数据的第一抓屏对象,判定游戏使用所述第一抓屏对象对应的游戏引擎进行视频渲染,通过所述第一抓屏对象复制数据,作为录制屏幕数据进行存储。

作为一种实现方式,所述为游戏创建多个抓屏对象,包括:

为游戏创建direct3d对象,所述direct3d对象包括directx8、directx9、directx10、directx11、directx12。

作为一种实现方式,所述为所述抓屏策略创建抓屏对象,包括:

待录制内容为操作系统桌面时,确定当前操作系统的版本号,操作系统为windows7及以下系统时,创建dwm抓屏对象,使用全局钩子监听dwm抓屏对象,以捕获桌面渲染数据;若dwm抓屏对象创建失败,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据;

操作系统为windows8及以上系统时,调用createtexture2d函数创建dxgi抓屏对象,以捕获桌面渲染数据,若dxgi抓屏对象创建失败或创建后无法捕获桌面渲染数据,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据。

根据本申请的第二方面,提供一种屏幕录制装置,包括:

第一确定单元,用于基于屏幕录制指令,确定待录制内容;

第二确定单元,用于根据当前的运行环境,为所述待录制内容确定抓屏策略;

创建单元,用于在所述抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对所述抓屏对象进行初始化;确定优先级最高的抓屏策略对应的所述抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略,直至为所述抓屏策略创建适用的抓屏对象或所有抓屏策略均尝试完毕;

录制单元,用于当所述创建单元成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。

作为一种实现方式,所述第一确定单元,还用于:

获取屏幕录制指令中的待录制内容,所述待录制内容为以下至少之一:

应用界面、操作系统桌面。

作为一种实现方式,所述创建单元,还用于:

待录制内容为游戏时,为游戏创建多个抓屏对象,对所述多个抓屏对象分别进行初始化;

使用全局钩子监听所创建的所述多个抓屏对象,以在所述多个抓屏对象中确定产生视频渲染数据的第一抓屏对象,判定游戏使用所述第一抓屏对象对应的游戏引擎进行视频渲染,通过所述第一抓屏对象复制数据,作为录制屏幕数据进行存储。

作为一种实现方式,所述创建单元,还用于:

为游戏创建direct3d对象,所述direct3d对象包括directx8、directx9、directx10、directx11、directx12。

作为一种实现方式,所述创建单元,还用于:

待录制内容为操作系统桌面时,确定当前操作系统的版本号,操作系统为windows7及以下系统时,创建dwm抓屏对象,使用全局钩子监听dwm抓屏对象,以捕获桌面渲染数据;若dwm抓屏对象创建失败,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据;

操作系统为windows8及以上系统时,调用createtexture2d函数创建dxgi抓屏对象,以捕获桌面渲染数据,若dxgi抓屏对象创建失败或创建后无法捕获桌面渲染数据,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据。

根据本申请的第三方面,提供一种存储介质,其上存储由可执行程序,所述可执行程序被处理器执行时实现所述的屏幕录制方法的步骤。

本申请实施例提供的屏幕录制方法及装置、存储介质,当接收到屏幕录制指令后,根据屏幕录制指令确定待录制内容,并结合当前的运行环境为待录制内容确定抓屏策略,基于抓屏策略确定相应的抓屏对象,并基于抓屏对象录制屏幕数据,从而实现屏幕录制。本申请实施例能够自动为待录制内容确定多个抓屏策略,并能基于抓屏策略的优先级依次生成抓屏对象,并确定所生成的抓屏对象是否适用于待录制内容,直到为待录制内容选择出最适于其的抓屏对象,这样,能根据不同的待录制内容为其确定出更佳的录屏对象,屏幕录制的效率更高,录制效果更佳,从而提升了用户体验。

附图说明

图1为本申请实施例提供的屏幕录制方法流程示意图;

图2为本申请实施例提供的智能抓屏方法的流程示意图;

图3为本申请实施例提供的绘图渲染流程示意图;

图4为本申请实施例提供的屏幕录制装置的组成结构示意图。

具体实施方式

以下结合示例,详细阐明本申请实施例的技术方案的实质。

图1为本申请实施例提供的屏幕录制方法流程示意图,如图1所示,本申请实施例的屏幕录制方法包括以下处理步骤:

步骤101,基于屏幕录制指令,确定待录制内容。

本申请实施例中,屏幕录制指令可以是用户针对所选择的待录屏对象输入的指令。屏幕录制指令中包括有待录制内容,可以是针对某应用界面的屏幕录制,如可以是对游戏等进行的录屏;本申请实施例中,所有的应用均适用于屏幕录制功能;待录制内容也可以是针对操作系统桌面的录制。

步骤102,根据当前的运行环境,为所述待录制内容确定抓屏策略。

本申请实施例中,当确定出待录制对象后,还需要确定待录制内容的运行环境,根据其实际的运行环境,为待录制内容确定抓屏策略,以为待录制内容确定出更佳的屏幕录制方式。

本申请实施例中,对于每一类待录屏内容,需要为其确定所有可能的抓屏方式,并为待录屏内容设置录屏策略,为待录屏内容确定抓屏方式的优先级,即为待录屏内容确定出适合其录屏的抓屏方式后,再确定每一抓屏方式针对待录屏内容的优先级,以在为待录屏内容确定抓屏方式时,先确定优先级最高的抓屏方式是否能用于待录屏内容的屏幕录制,若能用于待录屏内容的屏幕录制,则将优先级最高的抓屏方式确定为待录屏内容的抓屏方式,若优先级最高的抓屏方式不能用于待录屏内容的屏幕录制,则确定次优先级的抓屏方式是否能用于待录屏内容的屏幕录制,直至为待录屏内容确定相应的抓屏方式,或录屏策略中所有的抓屏方式都不能用于待录屏内容。

步骤103,在所述抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对所述抓屏对象进行初始化。

本申请实施例中,当为待录制内容确定抓屏策略后,按抓屏策略的优先级,从最高优先级的抓屏策略创建抓屏对象,并进行初始化。

步骤104,确定优先级最高的抓屏策略对应的所述抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略,直至为所述抓屏策略创建适用的抓屏对象或所有抓屏策略均尝试完毕。

当优先级最高的抓屏策略对应的所述抓屏对象创建失败或初始化失败后,为次优先级的抓屏策略创建对应的抓屏对象并确定是否创建成功,直至为所述抓屏策略创建适用的抓屏对象,或所有抓屏策略均尝试创建对象完毕。

步骤105,当成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。

本申请实施例中,待录制内容为游戏时,为游戏创建多个抓屏对象,对所述多个抓屏对象分别进行初始化;

使用全局钩子监听所创建的所述多个抓屏对象,以在所述多个抓屏对象中确定产生视频渲染数据的第一抓屏对象,判定游戏使用所述第一抓屏对象对应的游戏引擎进行视频渲染,通过所述第一抓屏对象复制数据,作为录制屏幕数据进行存储。其中,为游戏创建多个抓屏对象,包括:为游戏创建direct3d对象,所述direct3d对象包括directx8、directx9、directx10、directx11、directx12。

待录制内容为操作系统桌面时,确定当前操作系统的版本号,操作系统为windows7及以下系统时,创建dwm抓屏对象,使用全局钩子监听dwm抓屏对象,以捕获桌面渲染数据;若dwm抓屏对象创建失败,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据;

操作系统为windows8及以上系统时,调用createtexture2d函数创建dxgi抓屏对象,以捕获桌面渲染数据,若dxgi抓屏对象创建失败或创建后无法捕获桌面渲染数据,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据。

本申请实施例的屏幕录制是自动实现的,其首先进行环境检测,智能识别当前系统环境信息以及待录制的内容,选择需要优先使用的抓屏策略。尝试去创建并初始化相应模式的抓屏策略,如果创建无误,则使用该抓屏策略,如果初始化异常,则退回次级优先策略,依此类推,直至确定出相应的抓屏策略或所有的抓屏策略均尝试完毕。

经过抓屏策略的试错之后,确保抓屏策略成功创建完成后,程序开始进行抓屏,通过已经筛选出的抓屏策略对应的方式抓取屏幕数据。

下面结合具体示例,对本申请实施例作进一步详细说明。

图2为本申请实施例提供的智能抓屏方法的流程示意图,如图2所示,本申请实施例的智能抓屏方法,具体步骤如下:

开始屏幕数据录制。首先程序会检测抓屏的内容。如果录制内容为游戏,此时程序会自动检测游戏使用的引擎,具体创建方式为:依次创建directx8,directx9,directx10,directx11,directx12的direct3d对象并初始化,使用全局钩子监听所创建的所有direct3d对象中,具体哪一路产生了视频画面渲染数据,如果检测到了其中一路有画面渲染数据的进入,即判定该游戏使用该游戏引擎来进行画面渲染,若目标游戏符合支持引擎,则会在此路direct3d对象中复制画面渲染数据并保存至本地,实现实时游戏内容的抓屏。

如果录制内容为桌面内容,此时程序会自动检测当前电脑系统,如果电脑系统为win7及以下系统,则优先创建基于监听dwm程序数据抓取的方式,来捕获桌面画面数据,具体地,首先创建dwm监听对象,使用全局钩子去监听动态窗口管理器(dwm,dynamicwindowmanager)程序是否产生了视频画面渲染数据,如果无法监听到dwm程序或者无法抓取到dwm程序产生的视频画面渲染数据,则判定为dwm创建失败,使用备选图形设备接口(gdi,graphicsdeviceinterface)录制策略,gdi策略具体使用windows的bitblt函数来进行画面内容截取。如果dwm策略监听成功,则会优先使用dwm策略,该策略在win7系统下可以大幅提升抓屏效率,保证生成的视频文件流畅性。

如果录制内容为桌面内容,此时程序会自动检测当前电脑系统,如果电脑系统为win8及以上系统,则优先检查电脑设备是否有安装了dxgi(directxgraphicsinfrastructure)相关依赖库,如果已经安装,则会使用createtexture2d方法创建dxgi设备对象,来捕获桌面画面数据,该如果dxgi设备创建失败或者创建后无法获取桌面画面数据,则会退回gdi策略。否则使用dxgi策略,该策略在win8及以上系统中,可以以较高帧数获取屏幕数据,并且可以根据数据更新热区来针对性抓取更新的画面内容,无需抓取每一帧的所有数据,可以大幅降低抓屏时使用的系统资源消耗。

图3为本申请实施例提供的绘图渲染流程示意图,如图3所示,本示例致力于展示电脑操作系统将画面数据往电脑显示器贴图的过程,本申请实施例的数据抓屏策略主要集中在“可进行数据捕获1”以及“可进行数据捕获2”之上。操作系统主要的贴图方式为:首先在内存中准备好需要贴图的数据,其后程序会调用系统,将之前在内存中准备好的数据交给相关显示设备,此时显示设备才会把图形成像出来。

“可进行数据捕获1”和“可进行数据捕获2”这两种捕获方式的主要区别在于,前者是在画面数据贴到屏幕之前再进行抓屏数据复制或者是在画面数据贴到屏幕之后再进行数据复制。本申请会优先在“可进行数据捕获1”的时机上,进行画面数据捕获,在该模式下,数据会更加高效,占用电脑资源低,并且保证了及时性,如dwm策略、dxgi策略等,游戏抓取策略都是基于这个时机下的画面渲染;只有检测到此种模式下不支持后,会使用“可进行数据捕获2”这个时机进行数据捕获,如gdi策略。

图4为本申请实施例提供的屏幕录制装置的组成结构示意图,如图4所示,本申请实施例的屏幕录制装置包括:

第一确定单元40,用于基于屏幕录制指令,确定待录制内容;

第二确定单元41,用于根据当前的运行环境,为所述待录制内容确定抓屏策略;

创建单元42,用于在所述抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对所述抓屏对象进行初始化;确定优先级最高的抓屏策略对应的所述抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略,直至为所述抓屏策略创建适用的抓屏对象或所有抓屏策略均尝试完毕;

录制单元43,用于当所述创建单元成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。

作为一种实现方式,所述第一确定单元40,还用于:

获取屏幕录制指令中的待录制内容,所述待录制内容为以下至少之一:

应用界面、操作系统桌面。

作为一种实现方式,所述创建单元42,还用于:

待录制内容为游戏时,为游戏创建多个抓屏对象,对所述多个抓屏对象分别进行初始化;

使用全局钩子监听所创建的所述多个抓屏对象,以在所述多个抓屏对象中确定产生视频渲染数据的第一抓屏对象,判定游戏使用所述第一抓屏对象对应的游戏引擎进行视频渲染,通过所述第一抓屏对象复制数据,作为录制屏幕数据进行存储。

作为一种实现方式,所述创建单元42,还用于:

为游戏创建direct3d对象,所述direct3d对象包括directx8、directx9、directx10、directx11、directx12。

作为一种实现方式,所述创建单元42,还用于:

待录制内容为操作系统桌面时,确定当前操作系统的版本号,操作系统为windows7及以下系统时,创建dwm抓屏对象,使用全局钩子监听dwm抓屏对象,以捕获桌面渲染数据;若dwm抓屏对象创建失败,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据;

操作系统为windows8及以上系统时,调用createtexture2d函数创建dxgi抓屏对象,以捕获桌面渲染数据,若dxgi抓屏对象创建失败或创建后无法捕获桌面渲染数据,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据。

在示例性实施例中,本申请实施例的屏幕录制装置的上述各处理单元可以被一个或多个中央处理器(cpu,centralprocessingunit)、图形处理器(gpu,graphicsprocessingunit)、基带处理器(bp,baseprocessor)、应用专用集成电路(asic,applicationspecificintegratedcircuit)、dsp、可编程逻辑器件(pld,programmablelogicdevice)、复杂可编程逻辑器件(cpld,complexprogrammablelogicdevice)、现场可编程门阵列(fpga,field-programmablegatearray)、通用处理器、控制器、微控制器(mcu,microcontrollerunit)、微处理器(microprocessor)、或其他电子元件实现。

在本公开实施例中,图4示出的屏幕录制装置中各个处理单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本申请实施例还记载了一种存储介质,其上存储由可执行程序,所述可执行程序被处理器执行时,执行以下步骤:

基于屏幕录制指令,确定待录制内容;

根据当前的运行环境,为所述待录制内容确定抓屏策略;

在所述抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对所述抓屏对象进行初始化;确定优先级最高的抓屏策略对应的所述抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略,直至为所述抓屏策略创建适用的抓屏对象或所有抓屏策略均尝试完毕;

当成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。

可选的,所述基于屏幕录制指令,确定待录制内容,包括:

获取屏幕录制指令中的待录制内容,所述待录制内容为以下至少之一:

应用界面、操作系统桌面。

可选的,所述为所述抓屏策略创建抓屏对象,包括:

待录制内容为游戏时,为游戏创建多个抓屏对象,对所述多个抓屏对象分别进行初始化;

使用全局钩子监听所创建的所述多个抓屏对象,以在所述多个抓屏对象中确定产生视频渲染数据的第一抓屏对象,判定游戏使用所述第一抓屏对象对应的游戏引擎进行视频渲染,通过所述第一抓屏对象复制数据,作为录制屏幕数据进行存储。

可选的,所述为游戏创建多个抓屏对象,包括:

为游戏创建direct3d对象,所述direct3d对象包括directx8、directx9、directx10、directx11、directx12。

作为一种实现方式,所述为所述抓屏策略创建抓屏对象,包括:

待录制内容为操作系统桌面时,确定当前操作系统的版本号,操作系统为windows7及以下系统时,创建dwm抓屏对象,使用全局钩子监听dwm抓屏对象,以捕获桌面渲染数据;若dwm抓屏对象创建失败,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据;

操作系统为windows8及以上系统时,调用createtexture2d函数创建dxgi抓屏对象,以捕获桌面渲染数据,若dxgi抓屏对象创建失败或创建后无法捕获桌面渲染数据,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据。

本申请实施例中,当接收到屏幕录制指令后,根据屏幕录制指令确定待录制内容,并结合当前的运行环境为待录制内容确定抓屏策略,基于抓屏策略确定相应的抓屏对象,并基于抓屏对象录制屏幕数据,从而实现屏幕录制。本申请实施例能够自动为待录制内容确定多个抓屏策略,并能基于抓屏策略的优先级依次生成抓屏对象,并确定所生成的抓屏对象是否适用于待录制内容,直到为待录制内容选择出最适于其的抓屏对象,这样,能根据不同的待录制内容为其确定出更佳的录屏对象,屏幕录制的效率更高,录制效果更佳,从而提升了用户体验。

应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

以上所述,仅为本发明的实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。


技术特征:

1.一种屏幕录制方法,其特征在于,所述方法包括:

基于屏幕录制指令,确定待录制内容;

根据当前的运行环境,为所述待录制内容确定抓屏策略;

在所述抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对所述抓屏对象进行初始化;确定优先级最高的抓屏策略对应的所述抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略,直至为所述抓屏策略创建适用的抓屏对象或所有抓屏策略均尝试完毕;

当成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。

2.根据权利要求1所述的方法,其特征在于,所述基于屏幕录制指令,确定待录制内容,包括:

获取屏幕录制指令中的待录制内容,所述待录制内容为以下至少之一:

应用界面、操作系统桌面。

3.根据权利要求2所述的方法,其特征在于,所述为所述抓屏策略创建抓屏对象,包括:

待录制内容为游戏时,为游戏创建多个抓屏对象,对所述多个抓屏对象分别进行初始化;

使用全局钩子监听所创建的所述多个抓屏对象,以在所述多个抓屏对象中确定产生视频渲染数据的第一抓屏对象,判定游戏使用所述第一抓屏对象对应的游戏引擎进行视频渲染,通过所述第一抓屏对象复制数据,作为录制屏幕数据进行存储。

4.根据权利要求3所述的方法,其特征在于,所述为游戏创建多个抓屏对象,包括:

为游戏创建direct3d对象,所述direct3d对象包括directx8、directx9、directx10、directx11、directx12。

5.根据权利要求2所述的方法,其特征在于,所述为所述抓屏策略创建抓屏对象,包括:

待录制内容为操作系统桌面时,确定当前操作系统的版本号,操作系统为windows7及以下系统时,创建动态窗口管理器dwm抓屏对象,使用全局钩子监听dwm抓屏对象,以捕获桌面渲染数据;若dwm抓屏对象创建失败,则创建图形设备接口gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据;

操作系统为windows8及以上系统时,调用createtexture2d函数创建dxgi抓屏对象,以捕获桌面渲染数据,若dxgi抓屏对象创建失败或创建后无法捕获桌面渲染数据,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据。

6.一种屏幕录制装置,其特征在于,所述装置包括:

第一确定单元,用于基于屏幕录制指令,确定待录制内容;

第二确定单元,用于根据当前的运行环境,为所述待录制内容确定抓屏策略;

创建单元,用于在所述抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对所述抓屏对象进行初始化;确定优先级最高的抓屏策略对应的所述抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略,直至为所述抓屏策略创建适用的抓屏对象或所有抓屏策略均尝试完毕;

录制单元,用于当所述创建单元成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。

7.根据权利要求6所述的装置,其特征在于,所述第一确定单元,还用于:

获取屏幕录制指令中的待录制内容,所述待录制内容为以下至少之一:

应用界面、操作系统桌面。

8.根据权利要求7所述的装置,其特征在于,所述创建单元,还用于:

待录制内容为游戏时,为游戏创建多个抓屏对象,对所述多个抓屏对象分别进行初始化;

使用全局钩子监听所创建的所述多个抓屏对象,以在所述多个抓屏对象中确定产生视频渲染数据的第一抓屏对象,判定游戏使用所述第一抓屏对象对应的游戏引擎进行视频渲染,通过所述第一抓屏对象复制数据,作为录制屏幕数据进行存储。

9.根据权利要求8所述的装置,其特征在于,所述创建单元,还用于:

为游戏创建direct3d对象,所述direct3d对象包括directx8、directx9、directx10、directx11、directx12。

10.根据权利要求7所述的装置,其特征在于,所述创建单元,还用于:

待录制内容为操作系统桌面时,确定当前操作系统的版本号,操作系统为windows7及以下系统时,创建dwm抓屏对象,使用全局钩子监听dwm抓屏对象,以捕获桌面渲染数据;若dwm抓屏对象创建失败,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据;

操作系统为windows8及以上系统时,调用createtexture2d函数创建dxgi抓屏对象,以捕获桌面渲染数据,若dxgi抓屏对象创建失败或创建后无法捕获桌面渲染数据,则创建gdi抓屏对象,调用windows的bitblt函数截取桌面渲染数据。

11.一种存储介质,其上存储由可执行程序,所述可执行程序被处理器执行时实现如求1至5任一项所述的屏幕录制方法的步骤。

技术总结
本申请公开了一种屏幕录制方法及装置、存储介质,所述方法包括:基于屏幕录制指令,确定待录制内容;根据当前的运行环境,为待录制内容确定抓屏策略;在抓屏策略中选取优先级最高的抓屏策略,创建优先级最高的抓屏策略对应的抓屏对象,并对抓屏对象进行初始化;确定优先级最高的抓屏策略对应的抓屏对象初始化是否成功,不成功时创建次优先级的抓屏策略对应的抓屏对象,并确定次优先级的抓屏策略对应的抓屏对象是否初始化成功,不成功时继续下一优先级的抓屏策略;当成功创建抓屏对象后,以成功创建的抓屏对象抓取数据,作为录制屏幕数据。本申请提升了抓屏效率及效果。

技术研发人员:顾迅羽;朱清;周炬
受保护的技术使用者:苏州开心盒子软件有限公司
技术研发日:2021.04.02
技术公布日:2021.08.03

转载请注明原文地址:https://doc.8miu.com/read-1691.html

最新回复(0)