屏幕图像获取方法、装置和计算机可读存储介质

文档序号:1966161 发布日期:2021-12-14 浏览:13次 >En<

阅读说明:本技术 屏幕图像获取方法、装置和计算机可读存储介质 (Screen image acquisition method, device and computer readable storage medium ) 是由 张帆 于 2021-09-03 设计创作,主要内容包括:本发明公开了一种屏幕图像获取方法,所述屏幕图像获取方法包括以下步骤:接收图像获取请求;根据所述图像获取请求,获取缓冲区信息并获取屏幕当前显示的图像数据;根据所述缓冲区信息,将所述图像数据存储至所述缓冲区。本发明还公开了一种屏幕图像获取装置和计算机可读存储介质。本发明实现了在不对上层应用进行改动的前提下,搭载安卓系统的智能电视、智慧屏等显示设备可以获得视频通道下的屏幕图像数据的目的。(The invention discloses a screen image acquisition method, which comprises the following steps: receiving an image acquisition request; according to the image acquisition request, acquiring buffer area information and acquiring image data currently displayed on a screen; and storing the image data to the buffer area according to the buffer area information. The invention also discloses a screen image acquisition device and a computer readable storage medium. The method and the device achieve the purpose that the screen image data under the video channel can be obtained by the display equipment such as the intelligent television and the intelligent screen which are provided with the android system on the premise of not changing the upper application.)

屏幕图像获取方法、装置和计算机可读存储介质

技术领域

本发明涉及图像数据处理领域,尤其涉及一种屏幕图像获取方法、装置、显示设备和计算机可读存储介质。

背景技术

截屏及录屏的功能在具有安卓(Android)系统的电子设备中属于比较常用的功能。但是,由于通过安卓系统框架提供的接口录制或截取屏幕图像时,所需要的图像数据都从安卓系统的SurfaceFlinger服务中获取的。所以当搭载安卓系统的智能电视、智慧屏等显示设备切换到视频通道(如HDMI通道或AV通道)时,由于从视频通道输入进电视的视频数据并不会经过SurfaceFlinger服务。因此,通过常规的方案,只能获取到流经SurfaceFlinger服务中UI(UserInterface,用户界面)层的图像数据,而无法获取视频通道下video(视频)层的图像数据。

发明内容

本发明的主要目的在于提供一种屏幕图像获取方法,旨在解决现有搭载安卓系统的智能电视、智慧屏等显示设备无法录制或截取视频通道下的图像数据的技术问题。

为实现上述目的,本发明提供一种屏幕图像获取方法,所述屏幕图像获取方法包括以下步骤:

接收图像获取请求;

根据所述图像获取请求,获取缓冲区信息并获取屏幕当前显示的图像数据;

根据所述缓冲区信息,将所述图像数据存储至所述缓冲区。

优选地,所述根据所述缓冲区信息,将所述图像数据存储至所述缓冲区的步骤包括:

当所述图像获取请求是录屏请求时,将所述图像数据存储至所述缓冲区;

将所述图像数据填充至指定的录屏缓冲区,以使指定的录屏缓冲区中的图像数据用于编码。

优选地,所述根据所述缓冲区信息,将所述图像数据存储至所述缓冲区的步骤还包括:

当所述图像获取请求是截屏请求时,将所述图像数据存储至所述缓冲区,并将所述缓冲区关联预设截屏图层。

优选地,所述当所述图像获取请求是截屏请求时,将所述图像数据存储至所述缓冲区的步骤包括:

当在录屏过程中,接收到截屏请求时,则将所述图像数据存储至录屏请求对应的缓冲区的同时,复制对应帧的图像数据存储至截屏请求对应的缓冲区。

优选地,所述根据所述图像获取请求,将所述图像数据存储至所述缓冲区的步骤包括:

将所述图像数据存储至预设环形缓冲区;

根据所述图像获取请求,将预设环形缓冲区中的图像数据存储至所述缓冲区。

优选地,所述根据所述图像获取请求,获取屏幕当前显示的图像数据的步骤之后包括:

根据所述图像获取请求中的图像格式信息,对所述图像数据的格式进行转化。

优选地,所述图像格式信息包括期望彩色格式,所述根据所述图像获取请求,处理所述图像数据的步骤包括:

判断所述图像数据的彩色格式与所述期望彩色格式是否一致;

若不一致,则将所述所述图像数据的彩色格式转化为所述期望彩色格式。

优选地,所述图像格式信息还包括期望分辨率,所述根据所述图像获取请求,处理所述图像数据的步骤还包括:

判断所述图像数据的分辨率与所述期望分辨率是否一致;

若不一致,则将所述所述图像数据的分辨率转化为所述期望分辨率。

此外,为实现上述目的,本发明还提供一种屏幕图像获取装置,所述屏幕图像获取装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述任一项所述屏幕图像获取方法的步骤。

此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有屏幕图像获取程序,所述屏幕图像获取程序被处理器执行时实现如上所述任一项所述的屏幕图像获取方法的步骤。

本发明实施例提出的一种屏幕图像数据获取方法,接收图像获取请求,并获取缓冲区;根据所述图像获取请求,获取屏幕当前显示的图像数据;根据所述图像获取请求,将所述图像数据存储至所述缓冲区。通过直接从屏幕处获取UI层和video层已经经过合成的图像数据,规避了安卓系统的原生截屏和录屏流程只能获取到UI层的缺陷,通过更改图像数据的采集点,最终实现了在不对上层应用进行改动的情况下,能截取或录制视频层叠加应用层图像数据的目的。

附图说明

图1为本发明屏幕图像获取方法显示终端的显示流程示意图;

图2是本发明实施例方案涉及的硬件运行环境的显示终端结构示意图;

图3为本发明屏幕图像获取方法第一实施例的流程示意图;

图4为本发明屏幕图像获取方法第二实施例的流程示意图;

图5为本发明屏幕图像获取方法第三实施例的流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

参照图1,图1为本发明屏幕图像获取方法显示终端的显示流程示意图。

智能电视、智慧屏等搭载了安卓系统的显示设备的显示流程往往是安卓的SurfaceFlinger服务将应用界面、菜单、视频画面等界面合成UI层,通过视频通道输入的视频数据则经过数据处理生成video层,再将UI层与video层合成后再输出至显示屏,由显示屏显示出来。由上可知,由于video层的视频数据并不流经安卓常规图像数据采集点,所以在安卓系统获得截屏或录屏信息时,从SurfaceFlinger服务中获取的图像数据只包含UI层的图像数据。而本发明屏幕图像获取方法则是在显示屏处获得图像数据,此处的图像数据则已经是UI层与video层合成后最终显示的图像数据。

如图2所示,图2是本发明实施例方案涉及的硬件运行环境的终端结构示意图。

本发明实施例终端可以是智能电视、智慧屏及其他搭载安卓系统且具有视频通道的显示终端设备还可以是机顶盒等显示终端设备的附属设备。

如图2所示,该终端可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

可选地,终端还可以包括摄像头、RF(Radio Frequency,射频)电路,传感器、音频电路、WiFi模块等等。其中,传感器比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示屏的亮度。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别移动终端姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;当然,移动终端还可配置陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。

本领域技术人员可以理解,图1中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图2所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及图像数据获取应用程序。

参照图3,本发明第一实施例提供一种屏幕图像获取方法,所述屏幕图像获取方法包括:

步骤S100,接收图像获取请求;

具体地,所述图像获取请求分为录屏请求和截屏请求,所述图像获取请求可以包括期望彩色格式、期望分辨率、帧率、图像尺寸等对获取的屏幕图像数据格式要求的信息。

步骤S200,根据所述图像获取请求,获取缓冲区信息,并获取屏幕当前显示的图像数据;

具体地,所述缓冲区信息指获取的缓冲区的容量、限制和位置等基本属性信息。获取缓冲区的方法可以是获得空闲缓冲区,例如,首先创建虚拟显示设备,然后该虚拟显示设备不断通过DequeueBuffer的动作向编码器请求空闲缓冲区并将所述空闲缓冲区绑定在虚拟显示设备上,也可以是创建缓冲区。然后根据所述图像获取请求,直接抓取屏幕上当前显示的图像数据。若所述图像获取请求为录屏请求,则持续抓取图像数据,直至录屏结束。录屏时,根据所述图像获取请求中的帧率信息,确定屏幕当前显示图像数据的抓取频率,该帧率信息可以是预设的帧率,也可以是用户实时确认的。例如,该帧率信息为24帧,则在录屏时,所述屏幕图像获取装置每秒从显示屏上抓取24张图像的数据。若是截屏请求,则只需抓取接收截屏请求时的一帧图像数据,也可以是截取接收到截屏请求之后的图像数据,如第二帧、第三帧的图像数据。本实施例中,通过直接屏幕当前显示的图像数据的方式,规避了安卓系统常规的截取屏幕数据的方法无法截取通过视频通道输入视频层图像数据的问题。

步骤S300,根据所述缓冲区信息,将所述图像数据存储至所述缓冲区。

具体地,若图像获取请求是录屏请求,则将所述缓冲区信息中的位置信息(如地址或句柄)将所述图像数据存储至对应的缓冲区中,以使安卓系统执行录屏操作时,调用所述缓冲区中的图像数据,进而生成视频文件;若图像获取请求是截屏请求;若图像获取请求是截屏请求,则将所述缓冲区信息中的位置信息将所述图像数据存储至对应的缓冲区中,以使安卓系统执行截屏操作时调用所述缓冲区中的图像数据,进而生成截屏文件。

在另一实施例中,步骤S300包括:

步骤a1,当所述图像获取请求是录屏请求时,将所述图像数据存储至所述缓冲区;

步骤a2,将所述图像数据填充至指定的录屏缓冲区,以使指定的录屏缓冲区中的图像数据用于编码。

具体地,当所述图像获取请求是录屏请求时,可以预先通过创建虚拟显示设备,再通过虚拟显示设备向编码器请求空闲缓冲区,并将该空闲缓冲区绑定虚拟现实设备。当图像数据存储至空闲缓冲区后,在再将所述空闲缓冲区中的图像数据填充至安卓系统指定的录屏缓冲区中,以使编码器所述指定录屏缓冲区中的图像数据进行编码等操作。然后再结合安卓系统中MediaRecord服务或AudioRecord服务获取的音频数据,混合生成视频文件。进而根据请求录屏的应用程序的需求,将所述视频文件存储在预设的存储区域或用于直接显示在其他显示屏等。本发明对图像数据的具体编码方式、视频文件生成方式、以及视频文件的具体使用及存储方式均不作限制。

在本实施例中,通过将安卓系统原有录屏流程获取的图像数据替换成屏幕当前显示的图像数据,实现了在不需要对安卓系统的上层应用进行改动的情况下,完成对UI层叠加Video层的屏幕显示画面的录制操作。

在另一实施例中,步骤S300还包括:

步骤b,当所述图像获取请求是截屏请求时,将所述图像数据存储至所述缓冲区,并将所述缓冲区关联预设截屏图层。

具体地,当接收到截屏请求时,SurfaceFlinger服务会建立截屏图层。当所述图像获取请求是截屏请求时,将所述图像数据存储至所述缓冲区,并将所述缓冲区与SurfaceFlinger服务建立的截屏图层绑定,则GPU(图形处理器)会将所述截屏图层上的数据渲染到截屏的输出缓冲区上,

本实施例中,通过将获取的屏幕当前显示图像数据绑定在SurfaceFlinger服务建立的截屏图层上,实现在安卓系统的SurfaceFlinger服务中替换原生截屏图像数据,使得最终输出的截屏数据为屏幕当前显示的图像数据。

在另一实施例中,步骤S300包括:

步骤c,当在录屏过程中,接收到截屏请求时,则将所述图像数据存储至录屏请求对应的缓冲区的同时,复制对应帧的图像数据存储至截屏请求对应的缓冲区。

具体地,如果此前已经发起了录屏请求,正在执行录屏操作,由于录屏相当于连续截屏,此时执行截屏操作,就有可能会干扰录屏内容或终止录屏功能。对此,通过获得对应帧屏幕图像数据的同时,复制一份屏幕图像数据给到截屏操作的缓冲区中,即可达到在录屏过程中执行截屏操作也不会干扰或终止录屏进程的目的。其中,所述对应帧的图像数据,可以是接收到截屏请求的当前帧、下一帧、或下下帧等。

在本实施例中,通过接收图像获取请求,并获取缓冲区信息;根据所述图像获取请求,获取屏幕当前显示的图像数据;根据所述图像获取请求和缓冲区信息,将所述图像数据存储至所述缓冲区。通过直接从屏幕处获取UI层和video层合成的图像数据,规避了安卓系统的原生截屏和录屏方式只能获取到UI层的缺陷,最终实现了在不对上层应用进行改动的情况下,能截取或录制视频层叠加应用层图像数据的目的。

进一步的,参照图4,本发明第三实施例提供一种屏幕图像获取方法,基于上述图3所示的实施例,步骤S300包括:

步骤S310,将所述图像数据存储至预设环形缓冲区;

步骤S311,根据所述图像获取请求,将预设环形缓冲区中的图像数据存储至所述缓冲区。

具体地,先将所述图像数据存储至预设环形缓冲区,再根据所述图像获取请求,将预设环形缓冲区中的图像数据存储至图像获取请求对应的缓冲区。通过将预设环形缓冲区作为中转区,可以使得写入数据和读取数据的操作并发执行,从而可以使得获取图像数据的操作与将图像数据存储至图像获取请求对应缓冲区的操作同时进行,进而对于录屏请求而言,使得图像数据编码操作也可以与获取图像数据操作同时进行。对于录屏操作而言,录屏过程中有图像数据获取和图像数据编码这两个耗时较大的阶段。如果这两个关键动作是串行执行的,即先获取屏幕数据,再将数据送给编码模块处理,每处理一帧数据,至少需要这两个阶段的耗时总和。在性能较差的平台或处理器负担较重时,录屏画面就会出现卡顿问题。则可以获取屏幕图像数据并将其存储到预设环形缓冲区中。当环形缓冲区中存储有相应的图像数据时,则可直接将对应的图像数据从预设环形缓冲区中存储到图像获取请求对应的缓冲区即可,如果环形缓冲区中已无可用数据,则挂起等待,直到有新的图像数据进来。

在本实施例中,通过通过将预设环形缓冲区作为中转区,可以使得所述写入数据和读取数据的操作并发执行,也可大大提升数据处理的效率,尤其是对于录屏而言,可以使得录屏过程中耗时较长的获取图像数据与对图像数据进行编码这两项操作并行执行,一方面,降低了平台与处理器的运算压力,另一方面,也能够提高了录屏的质量和效率。

进一步的,参照图5,本发明第四实施例提供一种屏幕图像获取方法,基于上述图3所示的实施例,步骤S200之后包括:

步骤S210,根据所述图像获取请求中的图像格式信息,对所述图像数据的格式进行转化。

具体的,所述图像格式信息包括期望彩色格式、期望分辨率、画面尺寸、图像比例等对获取的屏幕图像数据格式要求的信息,上述信息可以是预存的信息,也可以是根据用户选择即时生成的信息。根据所述图像获取请求中的图像格式信息,处理所述图像数据,以使图像的格式进行转化所述图像格式信息中对应的格式。例如,所述图像获取请求中的分辨率信息为720P,二获取的图像数据中图像分辨率为2K,则通过对所述获得的图像数据进行处理,对图像进行缩放,使得获得的图像数据的分辨率转化为720P。本实施例中通过根据图像格式信息,对所述图像数据的格式进行转化,从而使得本发明可以适用于更多的应用程序以及用户个性化的截屏和录屏需求。

在另一实施例中,步骤S210包括:

步骤d1,判断所述图像数据的彩色格式与所述期望彩色格式是否一致;

步骤d2,若不一致,则将所述图像数据的彩色格式转化为所述期望彩色格式。

具体地,通过判断所述图像数据的彩色格式与所述图像获取请求中的期望彩色格式是否一致;若不一致,则通过对所述图像数据进行处理,所述图像数据的彩色格式转化为所述期望彩色格式。若一致,则直接执行步骤S300。通常情况下不同的硬件平台抓取到的屏幕数据格式比较单一,而不同应用的彩色格式要求也各不相同,抓取到的屏幕图像数据的彩色格式主要有YUV和RGB两大类,而这两大类中按照采样方式、存储方式不同,又分为I420、YV12、NV12、NV21、ARGB、RGBA等类型。以YUV格式转换为RGB格式为例,首先读取YUV文件,新建RGB文件;开辟RGB内存数组和YUV数组;由于RGB文件是按照BGRBGRBGR……的顺序存储一帧的,所以RBG开辟一个3倍像素数的数组,而YUV文件是YYYY……U……V……存储文件的,可以开辟一个像素数大小的数组存放Y分量和两个四分之一像素数大小的数组存放U和V分量;读取每一帧的YUV值存在YUV三个缓存数组中;因为YUV有动态范围,先判断Y和UV是否超出要求的范围;对YUV进行上采样,恢复出444格式的YUV;按照转换公式,将每一个像素分别转换为RGB格式存在RGB缓存数组中。重复读取每一帧的YUV值存在YUV三个缓存数组中完成一帧的计算,再将RGB的值写入RGB文件。最终获得RGB文件。

本实施例中,通过判断抓取的屏幕图像数据的彩色格式是否与期望彩色格式一致,对不一致的屏幕图像数据的彩色格式进行转化,从而满足了更多应用程序的截录屏需求。

在另一实施例中步骤S210还包括:

步骤d3,判断所述图像数据的分辨率与所述期望分辨率是否一致;

步骤d4,若不一致,则将所述图像数据的分辨率转化为所述期望分辨率。

具体地,通过断所述图像数据的分辨率与所述图像获取请求中的期望分辨率是否一致;若不一致,则通过对所述图像数据进行处理,对获取图像的分辨率进行缩放,获得所述期望分辨率的图像。若一致时,则直接执行步骤S300。例如用户使用的是2K分辨率的智能电视,当用户对于录制的视频并不需要如此高的分辨率,只需要录制分辨率为1080P的视频就可以了,则可设置对应的期望分辨率,将所述屏幕图像数据对应图像的分辨率降低为期望的分辨率,再执行步骤S300。

本实施例,通过将所述图像数据对应图像的分辨率缩放至期望分辨率,可以满足用户对于不同分辨率的要求,同时还能节约存储空间。

在另一实施例中,所述屏幕图像数据获取方法还包括:

抽象出截屏及录屏功能的功能接口,以使不同平台需要根据所述平台方案商提供的屏幕图像数据抓取方法,对接所述功能接口,所述功能接口包括硬件接口和软件接口。

具体地,不同的平台的平台方案商提供的屏幕图像数据抓取方法是不同的,通过抽象出不同平台实现截屏及录屏功能所需要的功能接口,让不同平台对接所述功能接口,则可以在不同的平台实现对应截屏与录屏功能,从而使得本发明在适用于更多的平台。

此外,本实施例还提供了一种屏幕图像获取装置。

所述屏幕图像获取装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上述实施例中任一项所述屏幕图像获取方法的步骤。

此外,本发明实施例还提出一种计算机存储介质。

所述计算机可读存储介质上存储有屏幕图像获取程序,所述屏幕图像获取程序被处理器执行时实现如上述实施例中任一项所述的屏幕图像获取方法的步骤。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体/操作/对象与另一个实体/操作/对象区分开来,而不一定要求或者暗示这些实体/操作/对象之间存在任何这种实际的关系或者顺序;术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的。可以根据实际的需要选择中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干请求用以使得一台终端设备(可以是手机,计算机,服务器,车辆,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:信息显示方法、装置及电子设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类