用于在终端设备上提供截屏服务的方法和装置转让专利

申请号 : CN201510325704.0

文献号 : CN104899039B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈聪宋晔

申请人 : 百度在线网络技术(北京)有限公司

摘要 :

本发明实施例提供一种用于在终端设备上提供截屏服务的方法和装置。所述用于在终端设备上提供截屏服务的方法包括:生产者线程响应于其接收到截屏命令的指示,执行截屏操作,并且将截取的屏幕数据写入缓冲区中;消费者线程从所述缓冲区读取生产者线程存储的屏幕数据,对所述屏幕数据执行图像处理,生成截屏图像,并且将所述截屏图像返回给调用所述截屏服务的应用。采用生产者/消费者的多线程模式,分别通过用于执行屏幕截取的生产者线程和用于对截取的屏幕数据执行图像处理的消费者线程来完成截屏服务,在处理能力有限的便携式终端设备上尤其可降低截屏时间,可实现在几十毫秒内完成截屏服务。

权利要求 :

1.一种用于在终端设备上提供截屏服务的方法,其特征在于,所述方法包括:生产者线程响应于其接收到截屏命令的指示执行截屏操作,并且将截取的屏幕数据写入缓冲区中;消费者线程从所述缓冲区读取生产者线程存储的屏幕数据,并对所述屏幕数据执行图像处理生成截屏图像,并且将所述截屏图像返回给调用所述截屏服务的应用;

其中,通过线程同步机制对如下处理进行控制,以防止所述生产者线程和消费者线程同时访问所述缓冲区:所述生产者线程执行截屏操作的处理;

所述生产者线程将截取的屏幕数据写入缓冲区中的处理;

以及所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:所述消费者线程获取所述截屏命令的处理参数,

所述消费者线程对所述屏幕数据执行图像处理,生成截屏图像的处理包括:所述消费者线程根据获取的所述截屏命令的处理参数对所述屏幕数据执行图像处理,生成截屏图像。

3.根据权利要求1~2中任一项所述的方法,其特征在于,所述方法还包括:所述截屏服务的主线程启动所述生产者线程和消费者线程,并且在指定的端口建立与所述调用所述截屏服务的应用的会话连接,所述生产者线程通过监听所述会话连接上的数据读取指示来确定其接收到截屏命令的指示。

4.根据权利要求3所述的方法,其特征在于,所述消费者线程将所述截屏图像返回给调用所述截屏服务的应用的处理包括:所述消费者线程通过所述会话连接将所述截屏图像发送给所述调用所述截屏服务的应用。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:所述截屏服务的主线程设置至少一个所述缓冲区,

所述生产者线程将截取的屏幕数据写入缓冲区中的处理包括:所述生产者线程根据写入位置将截取的屏幕数据写入缓冲区中,并且更新所述缓冲区的数据长度和写入位置。

6.根据权利要求5所述的方法,其特征在于,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理包括:所述消费者线程根据读取位置从所述缓冲区读取生产者线程存储的屏幕数据,并且更新所述缓冲区的数据长度和读取位置。

7.根据权利要求5所述的方法,其特征在于,所述缓冲区为回环缓冲区。

8.一种用于在终端设备上提供截屏服务的装置,其特征在于,所述装置包括:截屏操作模块,用于通过生产者线程响应于其接收到截屏命令的指示执行截屏操作,并且将截取的屏幕数据写入缓冲区中;

数据处理模块,用于通过消费者线程从所述缓冲区读取生产者线程存储的屏幕数据,对所述屏幕数据执行图像处理,生成截屏图像,并且将所述截屏图像返回给调用所述截屏服务的应用;

线程同步模块,用于通过线程同步机制对如下处理进行控制,以防止所述生产者线程和消费者线程同时访问所述缓冲区:所述生产者线程执行截屏操作的处理;

所述生产者线程将截取的屏幕数据写入缓冲区中的处理;

以及,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理。

9.根据权利要求8所述的装置,其特征在于,所述数据处理模块还用于通过所述消费者线程获取所述截屏命令的处理参数,并且根据获取的处理参数对所述屏幕数据执行图像处理,生成截屏图像。

10.根据权利要求8~9中任一项所述的装置,其特征在于,所述装置还包括:主控模块,用于通过所述截屏服务的主线程启动所述生产者线程和消费者线程,在指定的端口建立与所述调用所述截屏服务的应用的会话连接,并且通过所述截屏服务的主线程设置至少一个所述缓冲区,所述缓冲区为回环缓冲区,所述截屏操作模块用于通过所述生产者线程通过监听所述会话连接上的数据读取指示来确定其接收到截屏命令的指示。

11.根据权利要求10所述的装置,其特征在于,所述数据处理模块用于通过所述消费者线程通过所述会话连接将所述截屏图像发送给所述调用所述截屏服务的应用。

12.根据权利要求11所述的装置,其特征在于,所述截屏操作模块用于通过所述生产者线程根据写入位置将截取的屏幕数据写入缓冲区中,并且更新所述缓冲区的数据长度和写入位置。

13.根据权利要求12所述的装置,其特征在于,所述数据处理模块用于通过所述消费者线程根据读取位置从所述缓冲区读取生产者线程存储的屏幕数据,并且更新所述缓冲区的数据长度和读取位置。

说明书 :

用于在终端设备上提供截屏服务的方法和装置

技术领域

[0001] 本发明涉及计算机应用技术,尤其涉及一种用于在终端设备上提供截屏服务的方法和装置。

背景技术

[0002] 在例如个人电脑、笔记本电脑、智能手机、平板电脑、个人数字助理等的终端设备上通常都配有截屏的功能。用户通过快捷键、菜单项或功能按钮可截取整个屏幕、屏幕部分区域(如某个视窗或显示部分文字的区域)的图像。
[0003] 在截屏处理中,首先需要截取目标区域的屏幕数据,再对截取的屏幕数据进行图像处理,根据预定的参数将所述屏幕数据转换(如缩放、反转、矩阵变换等)为图像数据,再存储或显示所述图像数据。
[0004] 由于例如智能手机等便携式终端的运算处理能力有限,目前在便携式终端上的截屏方案中,屏幕的截取和图像处理是分开进行的,因此通常至少需要几百毫秒才能完成该两步处理,目前还没有方案能够在安卓手机屏幕截取和处理方面达到50毫秒以下的延迟。这种较长的延迟导致了无法做到准时、实时地进行屏幕录制,使现有方案不适合用于实时多屏互动的产品中。此外,由于屏幕的截取和图像处理是分开进行的,步骤较繁琐,造成系统资源的耗费以及数据管理混乱。
[0005] 此外,现有的截屏方案在集成到第三方系统中时,需要耦合在第三方系统的产品架构中,容易造成宿主产品集成成本高,维护困难的问题。

发明内容

[0006] 本发明实施例的目的在于提供一种用于在终端设备上提供截屏服务的方法和装置,以降低执行截屏的处理时间,提高用户体验。
[0007] 根据本发明的一方面,提供一种用于在终端设备上提供截屏服务的方法。所述方法包括:生产者线程响应于其接收到截屏命令的指示,执行截屏操作,并且将截取的屏幕数据写入缓冲区中;消费者线程从所述缓冲区读取生产者线程存储的屏幕数据,对所述屏幕数据执行图像处理,生成截屏图像,并且将所述截屏图像返回给调用所述截屏服务的应用。
[0008] 优选地,所述方法还包括,通过线程同步机制对如下处理进行控制,以防止所述生产者线程和消费者线程同时访问所述缓冲区:所述生产者线程执行截屏操作的处理;所述生产者现场将截取的屏幕数据写入缓冲区中的处理;以及,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理。
[0009] 优选地,所述方法还包括:所述消费者线程获取所述截屏命令的处理参数。所述消费者线程对所述屏幕数据执行图像处理,生成截屏图像的处理包括:所述消费者线程根据获取的所述截屏命令的处理参数对所述屏幕数据执行图像处理,生成截屏图像。
[0010] 优选地,所述方法还包括:所述截屏服务的主线程启动所述生产者线程和消费者线程,并且在指定的端口建立与所述调用所述截屏服务的应用的会话连接。所述生产者线程通过监听所述会话连接上的数据读取指示来确定其接收到截屏命令的指示。
[0011] 优选地,所述消费者线程将所述截屏图像返回给调用所述截屏服务的应用的处理包括:所述消费者线程通过所述会话连接将所述截屏图像发送给所述调用所述截屏服务的应用。
[0012] 优选地,所述方法还包括:所述截屏服务的主线程设置至少一个所述缓冲区。所述生产者线程将截取的屏幕数据写入缓冲区中的处理包括:所述生产者线程根据写入位置将截取的屏幕数据写入缓冲区中,并且更新所述缓冲区的数据长度和写入位置。
[0013] 优选地,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理包括:所述消费者线程根据读取位置从所述缓冲区读取生产者线程存储的屏幕数据,并且更新所述缓冲区的数据长度和读取位置。
[0014] 优选地,所述缓冲区为回环缓冲区。
[0015] 可选地,所述线程同步机制是互斥锁、临界区、事件和信号量之一。
[0016] 根据本发明的另一方面,还提供一种用于在终端设备上提供截屏服务的装置。所述装置包括:截屏操作模块,用于通过生产者线程响应于其接收到截屏命令的指示执行截屏操作,并且将截取的屏幕数据写入缓冲区中;数据处理模块,用于通过消费者线程从所述缓冲区读取生产者线程存储的屏幕数据,对所述屏幕数据执行图像处理,生成截屏图像,并且将所述截屏图像返回给调用所述截屏服务的应用。
[0017] 优选地,所述装置还包括:线程同步模块,用于通过线程同步机制对如下处理进行控制,以防止所述生产者线程和消费者线程同时访问所述缓冲区:所述生产者线程执行截屏操作的处理;所述生产者现场将截取的屏幕数据写入缓冲区中的处理;以及,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理。
[0018] 优选地,所述数据处理模块还用于通过所述消费者线程获取所述截屏命令的处理参数,并且根据获取的处理参数对所述屏幕数据执行图像处理,生成截屏图像。
[0019] 优选地,所述装置还包括:主控模块,用于通过所述截屏服务的主线程启动所述生产者线程和消费者线程,在指定的端口建立与所述调用所述截屏服务的应用的会话连接,并且通过所述截屏服务的主线程设置至少一个所述缓冲区,所述缓冲区为回环缓冲区。优选地,所述截屏操作模块用于通过所述生产者线程通过监听所述会话连接上的数据读取指示来确定其接收到截屏命令的指示。
[0020] 优选地,所述数据处理模块用于通过所述消费者线程通过所述会话连接将所述截屏图像发送给所述调用所述截屏服务的应用。
[0021] 优选地,所述截屏操作模块用于通过所述生产者线程根据写入位置将截取的屏幕数据写入缓冲区中,并且更新所述缓冲区的数据长度和写入位置。
[0022] 优选地,所述数据处理模块用于通过所述消费者线程根据读取位置从所述缓冲区读取生产者线程存储的屏幕数据,并且更新所述缓冲区的数据长度和读取位置。
[0023] 根据本发明实施例的用于在终端设备上提供截屏服务的方法和装置采用生产者/消费者的多线程模式,分别通过用于执行屏幕截取的生产者线程和用于对截取的屏幕数据执行图像处理的消费者线程来完成截屏服务,在处理能力有限的便携式终端设备上尤其可降低截屏时间,可实现在几十毫秒内完成截屏服务。
[0024] 此外,在同一设备上,采用以使用截屏服务的应用作为客户端、以所述截屏服务的整个处理作为服务器端的客户机-服务器架构(C/S架构),从而将详细的截屏处理操作细节与所述使用截屏服务的应用隔离开,使所述截屏服务较容易地集成到其他产品架构中。

附图说明

[0025] 图1是示出根据本发明实施例一的用于在终端设备上提供截屏服务的方法的流程图;
[0026] 图2是示出根据本发明实施例二的用于在终端设备上提供截屏服务的方法的流程图;
[0027] 图3是示出根据本发明实施例的截屏服务运行框架的示意图;
[0028] 图4是示出根据本发明实施例三的用于在终端设备上提供截屏服务的装置的逻辑框图。

具体实施方式

[0029] 本发明的基本构思是,提供一种在终端设备上提供截屏服务的技术方案,按照生产者/消费者的多线程模式,分别通过用于执行屏幕截取的生产者线程和用于对截取的屏幕数据执行图像处理的消费者线程来完成截屏服务。
[0030] 此外,在同一设备上,采用以使用截屏服务的应用作为客户端、以所述截屏服务的整个处理作为服务器端的客户机-服务器架构(C/S架构),从而将详细的截屏处理操作细节与所述使用截屏服务的应用隔离开,使所述截屏服务较容易地集成到其他产品架构中。
[0031] 下面结合附图详细描述本发明的示例性实施例。
[0032] 实施例一
[0033] 图1是示出根据本发明实施例一的用于在终端设备上提供截屏服务的方法的流程图。可例如,通过图4所示的装置执行本发明实施例一的提供截屏服务的方法。
[0034] 参照图1,截屏服务首先启动生产者线程和消费者线程。
[0035] 当终端设备的用户发出截屏指令后,在步骤S110,所述生产者线程接收或检测用户的截屏命令指示;在步骤S120,所述生产者线程执行截屏操作,获取屏幕数据;在步骤S130,所述生产者线程将截取的屏幕数据写入缓冲区中。在步骤S120所述生产者线程可调用如安卓系统原生的屏幕截取方法执行高速截屏。
[0036] 这里,所述缓冲区是所述生产者线程和消费者线程都可访问的全局缓冲区。
[0037] 此后,通过在生产者线程和消费者线程之间设置的线程同步机制,所述消费者线程开始执行步骤S210~S230。
[0038] 具体地,在步骤S210,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据;在步骤S220,所述消费者线程对所述屏幕数据执行必要的图像处理,生成截屏图像;在步骤S230,所述消费者线程将所述截屏图像返回给调用所述截屏服务的应用。
[0039] 通过前述步骤的处理,根据用于在终端设备上提供截屏服务的方法,可通过生产者线程和消费者线程分别执行屏幕截取和图像处理,通过共享的数据缓冲区来传递截取的屏幕数据,可降低完成截屏的处理时间,提高用户体验。
[0040] 实施例二
[0041] 图2是示出根据本发明实施例二的用于在终端设备上提供截屏服务的方法的流程图。在图2中与图1具有相同附图标号的步骤的操作分别与图1中的相应步骤执行的操作类似,在此不予赘述。
[0042] 由于分别通过生产者线程和消费者线程执行截屏服务的屏幕截取和图像处理操作,因此,为了对所述缓冲区的读写执行同步控制,根据本发明的示例性实施例,所述方法还包括,通过线程同步机制对如下处理进行控制,以防止所述生产者线程和消费者线程同时访问所述缓冲区:所述生产者线程执行截屏操作的处理;所述生产者现场将截取的屏幕数据写入缓冲区中的处理;以及,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理。
[0043] 所述线程同步机制可以是,但不限于,互斥锁、临界区、事件或信号量等。以下以在所述生产者线程和消费者线程使用互斥锁为例来继续描述本发明的实施例二。
[0044] 参照图2,具体地,所述生产者线程在执行步骤S120前,先获取所述互斥锁;并且,在完成步骤S130的操作后,所述生产者线程释放所述互斥锁。
[0045] 另一方面,所述消费者线程在执行步骤S210前,也要先获取所述互斥锁;并且,在完成步骤S210后,所述消费者线程即可释放所述互斥锁。
[0046] 进一步地,关于对所述缓冲区的读写操作,所述生产者线程和消费者线程可维护所述缓冲区的数据长度并且各自维护其读或写的位置。
[0047] 例如,步骤S130可包括:所述生产者线程根据写入位置将截取的屏幕数据写入缓冲区中,并且更新所述缓冲区的数据长度和写入位置。步骤S210可包括:所述消费者线程根据读取位置从所述缓冲区读取生产者线程存储的屏幕数据,并且更新所述缓冲区的数据长度和读取位置。
[0048] 优选地,所述缓冲区为回环缓冲区,从而所述生产者线程和消费者线程可循环读写所述缓冲区。
[0049] 针对所述截屏服务的整体框架,以下将参照图3示出的示例给予具体说明。需要指出,本发明的实现方式不限于图3示出的方式,还可以通过其他适用的实现方式。
[0050] 参照图3,使用截屏服务的应用APP可启动实现本发明的提供截屏服务的截屏服务应用或截屏服务主线程,或者所述APP可与已在运行的截屏服务应用或截屏服务主线程。
[0051] 截屏服务应用的主线程A或所述截屏服务主线程A(以下简称主线程A)负责启动所述生产者线程B和消费者线程C,并且在指定的端口P建立与所述调用所述截屏服务的应用的会话连接T。主线程A设置至少一个所述缓冲区F。
[0052] 生产者线程B通过监听会话连接T上的数据读取指示来确定其接收到截屏命令的指示,之后其如前所述在获取所述互斥锁后执行步骤S120的屏幕截取和S130的写入(write)操作;在完成步骤S130后,生产者线程B释放所述互斥锁。
[0053] 消费者线程C在执行步骤S210前,获取互斥锁;之后,如果缓冲区F不为空,则执行步骤S210、S215、S220和S230。其中,在完成步骤S210或S215后,释放所述互斥锁。在步骤S230,消费者线程B通过会话连接T将所述截屏图像发送给所述调用所述截屏服务的应用APP。
[0054] 通过前述以使用截屏服务的应用作为客户端且以所述截屏服务作为服务器端的C/S架构,不仅步骤简单、可高速地实现截屏并向所述应用提供截屏图像,而且提供相对简单的服务架构,易与第三方产品集成。
[0055] 实施例三
[0056] 图4是示出根据本发明实施例三的用于在终端设备上提供截屏服务的装置的逻辑框图。
[0057] 参照图4,所述用于在终端设备上提供截屏服务的装置包括截屏操作模块410和数据处理模块420。
[0058] 截屏操作模块410用于通过生产者线程响应于其接收到截屏命令的指示执行截屏操作,并且将截取的屏幕数据写入缓冲区中。
[0059] 数据处理模块420用于通过消费者线程从所述缓冲区读取生产者线程存储的屏幕数据,对所述屏幕数据执行图像处理,生成截屏图像,并且将所述截屏图像返回给调用所述截屏服务的应用。
[0060] 根据本发明的优选实施例,所述装置还包括:线程同步模块430,用于通过线程同步机制对如下处理进行控制,以防止所述生产者线程和消费者线程同时访问所述缓冲区:所述生产者线程执行截屏操作的处理;所述生产者现场将截取的屏幕数据写入缓冲区中的处理;以及,所述消费者线程从所述缓冲区读取生产者线程存储的屏幕数据的处理。所述线程同步机制可以是,但不限于,互斥锁、临界区、事件或信号量。
[0061] 数据处理模块420还用于通过所述消费者线程获取所述截屏命令的处理参数,并且根据获取的处理参数对所述屏幕数据执行图像处理,生成截屏图像。
[0062] 根据本发明的优选实施例,所述装置还包括:主控模块440,用于通过所述截屏服务的主线程启动所述生产者线程和消费者线程,并且在指定的端口建立与所述调用所述截屏服务的应用的会话连接。
[0063] 可选地,截屏操作模块410用于通过所述生产者线程通过监听所述会话连接上的数据读取指示来确定其接收到截屏命令的指示。
[0064] 可选地,数据处理模块420用于通过所述消费者线程通过所述会话连接将所述截屏图像发送给所述调用所述截屏服务的应用。
[0065] 优选地,主控模块440还用于通过所述截屏服务的主线程设置至少一个所述缓冲区。
[0066] 优选地,截屏操作模块410还用于通过所述生产者线程在将截取的屏幕数据写入缓冲区中后,所述生产者线程根据写入位置将截取的屏幕数据写入缓冲区中,并且更新所述缓冲区的数据长度和写入位置。
[0067] 优选地,数据处理模块420用于通过所述消费者线程根据读取位置从所述缓冲区读取生产者线程存储的屏幕数据,并且更新所述缓冲区的数据长度和读取位置。
[0068] 优选地,所述缓冲区为回环缓冲区。
[0069] 根据本发明实施例的用于在终端设备上提供截屏服务的方法和装置采用生产者/消费者的多线程模式,分别通过用于执行屏幕截取的生产者线程和用于对截取的屏幕数据执行图像处理的消费者线程来完成截屏服务,在处理能力有限的便携式终端设备上尤其可降低截屏时间,可实现在几十毫秒内完成截屏服务。
[0070] 此外,在同一设备上,采用以使用截屏服务的应用作为客户端、以所述截屏服务的整个处理作为服务器端的客户机-服务器架构(C/S架构),从而将详细的截屏处理操作细节与所述使用截屏服务的应用隔离开,使所述截屏服务较容易地集成到其他产品架构中。
[0071] 需要指出,根据实施的需要,可将本申请中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本发明的目的。
[0072] 上述根据本发明的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的处理方法。此外,当通用计算机访问用于实现在此示出的处理的代码时,代码的执行将通用计算机转换为用于执行在此示出的处理的专用计算机。
[0073] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。