使用连接资源投影、控制和管理用户设备应用程序的制作方法

文档序号:31054119发布日期:2022-08-06 10:38来源:国知局
使用连接资源投影、控制和管理用户设备应用程序的制作方法
使用连接资源投影、控制和管理用户设备应用程序
1.相关申请的交叉引用
2.本技术要求于2019年12月27日提交的美国临时专利申请序列号62/954,374,于2014年6月5日公布的美国专利公开号2014/0156734的优先权,其通过引用并入本文。


背景技术:

3.智能手机、平板电脑等用户设备无处不在。同样,车载系统等连接资源也广泛可用。因此,需要允许用户设备和连接资源之间的交互。
附图说明
4.本公开的新颖特征在所附权利要求中阐述。然而,为了解释的目的,在以下附图中示出了几个实施例。
5.图1示出了本文描述的一个或更多个实施例的示例概览,其中应用程序通过网关从用户设备投影到连接资源;
6.图2示出了本文描述的一个或更多个实施例的示例概览,其中用户界面事件经由网关在连接资源处被接收并且被应用到用户设备;
7.图3示出了本文描述的一个或更多个实施例的示例概览,其中使用网关分析、识别和过滤应用程序;
8.图4示出了本文描述的一个或更多个实施例的示例图像分析技术,其中比较相邻图像部分以识别匹配块;
9.图5示出了可以实现本文描述的一个或更多个实施例的一个示例环境;
10.图6示出了可以实现本文描述的一个或更多个实施例的另一示例环境;
11.图7示出了用于将应用程序内容从用户设备投影到连接资源的示例性过程的流程图;
12.图8示出了用于识别由用户设备执行的应用程序的示例性过程的流程图;
13.图9示出了用于在连接资源处接收命令并在用户设备处应用接收到的命令的示例性过程的流程图;
14.图10示出了用于基于连接资源的操作模式过滤应用程序内容的示例性过程的流程图;
15.图11示出了用于应用机器学习来生成或更新应用程序识别模型的示例性过程的流程图;以及
16.图12示出了用于实现各种实施例的一个或更多个示例性设备的示意框图。
具体实施方式
17.以下详细描述了当前设想的执行示例性实施例的模式。该描述不应被理解为限制意义,而仅仅是为了说明一些实施例的一般原理的目的,因为本公开的范围最好由所附权利要求限定。
18.下面描述了各种功能,这些功能可以相互独立地使用,也可以与其他功能结合使用。概括地说,一些实施例通常提供将用户设备应用程序内容(例如,流式视频)投影到连接资源的网关。用户设备可以是电子设备,例如智能手机、平板电脑、可穿戴设备等。连接资源可以是电子设备、系统或组件,例如车载主机。应用程序内容可以与用户设备可以执行的任何应用程序相关联,例如媒体流服务、游戏等。
19.在连接资源处接收到的用户输入可以通过网关应用在用户设备上。这样的用户输入可以包括通过例如触摸屏或连接资源的其他用户界面(user interface,ui)元素接收的输入。用户输入可以通过适当地转换接收到的用户输入数据并在用户设备(和用户设备应用程序)处仿效接收到的输入来应用在用户设备上。
20.应用程序可以由网关自动识别,从而可以适当地过滤或以其他方式处理或管理应用程序内容。例如,可以识别视频流应用程序,从而可以在车辆操作期间限制视频内容的提供。这种应用程序识别可以利用各种识别算法,例如色箱匹配。
21.在一些实施例中,机器学习可用于训练与应用程序或内容识别相关的模型、与操作限制相关的规则,和/或可用于实现与应用程序内容投影、控制、管理、分析等相关的各种过程或算法的其他此类元素。
22.图1示出了本文描述的一个或更多个实施例的示例概览,其中网关100用于将源应用程序从用户设备110投影到连接资源120。如图所示,用户设备110可以将源应用程序通过网关100投影到连接资源120。此外,网关100可以从连接资源120处接收ui事件,并将ui事件应用于在用户设备110上运行的源应用程序。
23.网关100可以至少部分地在用户设备110或连接资源120和/或其他适当的资源(例如,基于云的服务器或其他网络可访问的资源)处实现。用户设备110可以是智能电话、平板电脑、可穿戴设备和/或能够通过一个或更多个有线或无线通道执行指令和/或与其他设备通信的其他适当设备或组件。连接资源120可以是车载主机、娱乐系统或设备,和/或能够提供内容和/或处理ui数据的其他适当资源。连接资源120通常可以包括显示屏。
24.在该示例中,用户设备110可以执行导航应用程序。导航应用程序可以通过网关100在连接资源120处被备份。用户设备110可以通过诸如蓝牙或wi-fi的本地无线通道与连接的设备0120通信。网关100可以从导航应用程序接收应用程序内容,并以适当的格式为连接资源120提供应用程序内容,例如通过将应用程序内容转换为位图图像或矢量数据。
25.本示例中的应用程序内容可以包括图像数据,例如地图数据、路线指示符等。此外,应用程序内容可以包括可以与图像或其他图形数据一起提供的各种ui元素,例如按钮。此外,连接资源120可以包括、提供或以其他方式实现与源应用程序相关的各种ui特征。例如,可以基于在该位置识别的单次轻击将显示重新居中到指定点或区域。作为另一个示例,可以通过改变两个触点之间的距离(即“捏合”缩放)来放大或缩小显示。作为另一个示例,双击可以与选择导航目的地相关联。
26.在此示例中,可以在连接设备120处检测到轻击和拖动事件,并且可以通过网关110将相关数据发送到用户设备110,以便在源应用程序处进行分析和潜在实施。点击和拖动事件可以导致显示的地图区域被更新,从而将所选点移动到新位置。源应用程序可以基于接收到的ui事件数据更新输出显示,并通过网关100将更新后的显示(反映所选点的新位置)提供给连接资源120。
27.图2示出了本文描述的一个或更多个实施例的示例概述,其中通过网关100用户界面事件在连接资源120处被接收并应用到用户设备110。用户设备110和连接资源120可以通过安全通道通信耦合,例如蓝牙或wi-fi链接。资源之间的通信可以包括和/或利用各种消息传递协议。通信通道可以利用加密和/或其他安全特征。
28.在该示例中,用户设备110包括显示屏205,例如触摸屏显示器。用户设备205可以包括各种其他ui元素,例如按钮、小键盘、鼠标、操纵杆等。显示屏205可以与一个或更多个目标动作区域210相关联。在该示例中,目标动作区域210可以是与显示屏205的全部或几乎全部表面相关联。目标动作区域210可以包括与用户输入动作(或“事件”)相关联的显示屏205上的区域(和/或其他ui元素)。目标动作区域210可以利用与显示屏205相关联的坐标系统。
29.连接资源120可以包括显示屏215,例如触摸屏显示器。连接资源120可以包括各种其他ui元素,例如按钮、小键盘、操纵杆、鼠标等。
30.网关100可以转换与用户设备110相关联的各种ui特征,从而可以利用与连接资源120相关联的ui特征来提供类似的功能。在该示例中,显示屏215包括投影客户端区域220、一个或更多个源动作区域225、投影目标区域230、一个或更多个忽略输入区域235以及一个或更多个网关输入区域240。不同的实施例可以包括以与所示不同的各种不同布置的不同类型的区域(和/或其他ui特征)。例如,区域的形状可能不同于矩形(例如,圆形、椭圆形、多边形等)。作为另一示例,可以将各种单个区域划分为多个区域,或者可以将多个区域组合为单个区域。
31.投影客户端区域220可以定义一个或更多个面域,其中诸如“点”事件(例如,触摸、点击等)的事件应该被发送到连接的用户设备110。投影客户端区域220可以表示为矩形并在显示屏幕215的坐标系统中指定。与连接资源0120相关联的每个其他区域可以在投影客户端区域220的坐标系统中描述,并且可以相对于投影客户端区域220的坐标系统进行描述。区域的最简单的形状是矩形,但可以使用和/或支持各种其他形状。
32.每个源动作区域225可以是与投影客户端区域220相关联的区域,该区域定义事件数据是否应被识别为外部ui事件或网关用户输入事件(或被忽略)。在一些实施例中,源动作区域225外部和投影客户端区域220内部的任何事件可以被分类(和/或应用)为网关ui事件。源动作区域225可以包括主动作区域和/或可以定义一个或更多个排除和/或包含子面域集合的附加区域项目的有序列表。
33.投影目标区域230可以对应于目标动作区域210,或者与投影到连接资源120的显示屏幕205相关联的其他区域。投影目标区域230可以在投影客户端区域220的坐标系统中描述并且相对于投影客户端区域220的坐标系统进行描述。用户设备110捕获的图像可以被拉伸或收缩以适合投影目标区域230的尺寸。
34.每个忽略输入区域235可以是ui事件可能被忽略的区域。通过忽略输入区域235接收的输入可能不会用于识别外部或网关输入事件。在一些实施例中,与忽略输入区域235相关联的ui事件可以与通知相关联。。
35.每个网关输入区域240可与可被识别为网关用户输入事件的事件相关联或与网关100和/或任何相关资源的管理相关联的用户输入事件相关联。
36.不同的实施例可以包括基于每个区域(和相关事件)的角色的各种不同类型的区
域。例如,一些实施例可以包括一个或更多个外部输入区域,其中与这些区域相关联的任何事件可以被识别为“外部用户输入”事件。
37.如果区域重叠,则可以评估每个触摸事件以确定触摸事件应该与哪个区域相关联。例如,区域匹配可以基于顺序,其中最近触摸的区域可能优先于先前触摸的区域。
38.如图所示,ui事件245(例如,与触摸或“点击”事件相关联)可以在投影目标区域230处被接收,并被模拟为好像在目标动作区域210的对应点击点250处应用了点击一样。模拟的ui事件250可以通过(或者根据)在用户设备110上运行的源应用程序进行识别和应用。例如,在位置250的点击可以导致当在使用导航应用程序时,显示的地图区域被更新(例如,通过放置点击位置在显示区域的中心)。
39.在该示例中,网关100可以包括、存储或利用各种显示属性集255和/或输入范围260。这样的显示属性255可以包括例如用户设备的大小和/或连接资源显示屏幕。输入范围260可以包括与各种区域形状、大小和/或坐标相关联的各种定义。例如,输入范围260可以指定区域0220-240和区域210的位置和大小。
40.网关100可以利用各种其他数据元素,例如输入事件类型列表、与事件关联的参数或属性、用于识别事件的阈值或其他标准和/或其他相关数据。
41.在一些实施例中,连接资源120的用户输入可以在通过网关100在用户设备110和连接资源120之间建立连接之后被初始化。连接资源120可以发送指示支持的输入特征和相关能力的输入能力消息。网关100可以在输入能力消息中以用户设备110的可用输入特征列表来响应。网关100可以向连接资源120(和/或关联的客户端应用程序)发送配置输入消息,该消息定义了各种输入区域(或其他特征)和关联的使用配置文件。网关100还可以定义投影目标区域230。连接资源120(和/或关联的客户端应用程序)可以存储提供的输入区域。如果已经定义或识别了任何外部用户输入区域,则连接资源120可以将这样的定义发送到连接资源120的设备控制模块。连接资源120可以使用配置输入消息来响应网关100,配置输入消息可以包括每个定义的输入区域的设备标识符(id)。
42.网关100可以随时通过重新发送配置输入消息来重新配置输入配置。在配置之后,网关100可以启用一个或更多个输入区域的输入操作。网关100可以发送控制输入消息,该消息指定要启用的输入区域的区域id和要禁用的输入区域的区域id。可以随时发送多条消息以启用和/或禁用一个或更多个输入区域。
43.图3示出了本文描述的一个或更多个实施例的示例概述,其中使用网关100分析、识别和过滤应用程序。如图所示,用户设备110可以与导航应用310、一个或更多个设备传感器接口320,以及多媒体应用程序330相关联。
44.设备传感器320可以包括各种位置传感器(例如,加速度计、陀螺仪、全球定位系统(gps)组件等)和/或能够确定操作模式的其他传感器。例如,此类设备传感器320可用于确定车辆何时静止或移动。用户设备110还可以从连接资源120或另一个外部资源接收传感器数据。例如,用户设备110可以通过连接资源120接收车速传感器数据、停车制动状态和/或其他此类传感器数据。
45.网关100可以接收设备传感器数据(和/或其他适当的数据)并确定与连接资源120相关联的操作模式。操作模式可以与各种类型的连接系统或资源相关联。例如,与安装在客车中的车辆主机相关联的显示器可以与诸如“静止”、“运动中”等模式相关联。作为另一个
示例,与机上娱乐系统相关联的显示器可以是与“缓慢滑行”、“起飞”、“巡航”、“公告”等模式相关联。
46.如图所示,如果网关100不能从用户设备界面(未示出)接收应用程序信息,则网关100可以利用各种识别模型340(在本文中也称为“匹配”模型)、权限350和/或其他适当的数据元素。这样的识别模型340可以包括图像数据和/或可以用于识别在用户设备110上运行的应用程序的其他数据。例如,识别模型340可以包括应用程序启动屏幕捕获的图像或其他适当被捕获的应用程序内容(例如,视频内容、音频内容、图形内容等)。识别模型340可以包括评估标准集(例如,匹配阈值、最小匹配分数或其他度量等)。
47.权限350可以包括指示哪些源应用程序元素投影到连接资源120。例如,视频流应用程序(或内容元素)可以在车辆行驶时被禁用以限制驾驶员分心。应用程序权限350可以与应用程序、设备类型、操作模式和/或其他相关属性相关联。例如,视频流应用程序的权限350可以指示在车辆运动时,应针对与前排座椅车辆主机相关联的连接资源120禁用视频流。无论车辆是否处于运动状态,对于与后排(或乘客)座椅车辆主机相关联的连接资源120,视频流可能不会被禁用。
48.在第一个示例中,导航应用程序310可以与完全应用的投影360相关联,其中所有可用内容都被发送到显示屏215,而不考虑操作模式或其他属性。
49.在第二个示例中,多媒体应用程序330可以与部分应用的投影370相关联,其中与多媒体应用程序330相关联的一些内容通过非许可区域380被禁用或阻止。在该示例中,多媒体应用程序330可以提供与播客相关的音频和视频的内容。在这种情况下,部分应用的投影370可以包括提供音频内容(和/或其他非视频内容),而不管操作模式如何。如果不受操作模式权限的限制(例如,在运动时阻止视频内容),应用程序内容的一部分可以与将呈现在非许可区域380中的流式视频相关联。
50.可以基于预定义的应用程序元素(例如,与应用程序相关联的视频显示窗口)和/或自动检测到的应用程序元素来应用非许可区域380(和/或其他类型的内容过滤)。例如,可以分析投影内容以识别与视频内容相关联的一个或更多个帧的区域(例如,通过比较帧之间的差异来检测运动)。这样的内容分析可以包括对各种分散注意力的(或不受欢迎的)应用程序内容的分析。例如,明亮和分散注意力的颜色可能会变暗。作为另一个示例,可以静音或以减小的音量提供响亮的噪音或与各种配置文件(例如,汽车喇叭、警报声、刺耳的轮胎声等)匹配的噪音。
51.图4示出了本文描述的一个或更多个实施例的示例图像分析技术,其中分析相邻图像部分或面域以识别匹配块。网关100可以基于各种适当的标准从各种图像分析算法中进行选择。例如,可以选择算法以便在满足指定准确度阈值的同时最好地利用用户设备110的能力。下面将参考过程700更详细地描述算法选择。
52.捕获的图像410可以通过捕获被投影的屏幕和/或与应用程序相关联的其他信息从活动应用程序接收。与各种用户设备应用程序相关联的类似图像的库可以由网关100和/或其他适当的资源来维护。将参考下面的过程1100更详细地描述图像分析和匹配模型的生成。
53.在一些实施例中,网关100可以使用颜色配置文件匹配来分析图像并将捕获的图像(或其部分)与先前捕获的应用程序屏幕(或其部分)进行匹配。许多或大多数应用程序可
以为与应用程序相关联或由应用程序生成的各种屏幕使用一致的颜色模式。因此,颜色配置文件匹配可以在识别应用程序中提供有效和高效的结果。
54.在匹配模型训练期间,可以为源应用程序的每个屏幕(或“源屏幕”)创建颜色配置文件。类似地,可以为当前捕获的图像410计算颜色配置文件以确定捕获的图像410的颜色配置文件是否匹配任何源屏幕的颜色配置文件。可以将匹配分数或其他计算的度量与匹配阈值进行比较以确定捕获的图像410是否与捕获的应用程序屏幕匹配。这种颜色配置文件匹配算法可能需要有限的处理器和内存使用,同时相对快速地执行。
55.可以为当前图像410计算颜色配置文件。可以通过评估图像部分(例如,单个像素、像素组或“斑点”等)来计算颜色配置文件。颜色配置文件可以包括任何数量的颜色“箱”和与每个箱相关联的部分计数(例如,像素数)。可以评估每个像素(或其他图像部分),并且可以将像素颜色转换为颜色箱。每个颜色通道的位数可能会受到限制(例如,使用颜色箱通道位数参数),以便更有效地分析和存储配置文件数据。每个像素(或其他图像部分)的颜色通道可以组合成单个值(例如,使用常规的按位运算),这样,例如,每个像素或其他图像部分与单个颜色箱值相关联,单个颜色箱值可以作为颜色配置文件“字典”中的“键”。如果字典已经包含该键,则与该键关联的计数可能会增加。如果字典不包含该键,则可以将新条目添加到字典并将相关计数设置为一。如果相关计数小于阈值,则可以从字典中删除键。
56.可以以各种适当的方式将得到的颜色配置文件与各种存储的颜色配置文件进行比较。例如,可以将与捕获的图像410相关联的颜色箱和与匹配模型相关联的颜色箱进行比较。可以计算与捕获的图像410相关联的额外或附加颜色箱的数量相对于与模型相关联的颜色箱的数量。同样,可以计算捕获的图像410和模型之间的匹配颜色箱的数量。
57.可以根据匹配颜色箱的数量和额外颜色箱的数量来计算匹配分数。在一些实施例中,匹配分数可以是表示为从零到一的数字的概率。可以将匹配颜色箱的数量与最小匹配阈值数量进行比较。如果匹配颜色箱的数量小于最小匹配阈值,则可以将匹配分数设置为零。如果额外颜色箱的数量大于最大匹配阈值,则可以将匹配分数设置为零。如果额外颜色箱的数量小于或等于最小额外匹配阈值,则可以将匹配分数设置为1。如果匹配颜色箱的数量大于最小匹配阈值,额外颜色箱的数量小于最大匹配阈值,并且额外颜色箱的数量大于最小额外匹配阈值,则匹配分数可能为通过将匹配颜色箱的数量除以图像颜色箱的总数来计算。在一些实施例中,匹配分数可以包括颜色箱加权,其中每个颜色箱与计数或其他加权因子相关联。如果计算的匹配分数超过匹配阈值,则匹配应用程序可以由网关100识别并与计算的分数相关联。
58.这种像素类型(或其他区域或部分类型)颜色匹配算法适用于具有纯色小部件(例如按钮、背景矩形、圆形等)的应用程序屏幕。但是,某些应用程序屏幕可能会显示照片图像或其他图形特征,例如,由于光线或阴影的渐变略有不同,因此不太可能具有匹配颜色的连续区域。例如,导航应用程序可以显示目的地的“街景”。作为另一个示例,餐厅搜索应用程序可以在结果列表中显示餐厅的缩略图。在这种情况下,如果计算单个颜色,照片(或其他高密度)图像将产生大量对匹配计算无用的颜色。为了克服这样的限制,网关100可以在计算颜色时利用或实施运行时间过滤器以仅计数具有匹配颜色的多个子元素(也称为“斑点”)的区域的颜色。
59.在图4的示例中,不是独立地分析各个部分,而是通过将图像410划分为部分420
(例如,像素、像素集、形状面域等)来利用“斑点”分析。在该示例中,每个部分420可以表示一个像素。对于这样的分析,可以评估相邻像素的颜色箱。如果满足某些匹配标准(例如,相邻匹配元素的最小数量),则可以将与正在评估的像素或部分相关联的颜色箱添加到字典中(或者可以增加匹配颜色箱的计数)。如果不满足匹配标准,则可能会跳过像素或其他部分(例如,不得将颜色箱添加到字典中,也不会增加计数)。
60.在本例中,每个部分420可以与单个像素(中心像素“a”)相关联。如图所示,在展开视图430中,可以评估多个相邻元素(在该示例中为像素“b
”‑“
i”)以确定评估中的像素(像素a)是否包括在颜色斑点中。可以以类似的方式评估捕获的图像410中的每个像素。
61.可以相对于相邻像素对每个像素进行评估,并且如果与中心像素有最小数量的匹配的相邻像素(例如,通过具有相同颜色箱确定),则将中心像素识别为斑点的一部分并添加到颜色配置文件字典中。否则,将跳过中心像素(例如,通过不将关联的颜色箱添加到颜色配置文件字典或不增加与颜色箱关联的计数)。
62.最简单的相邻像素评估窗口是三乘三,如图所示。在一些实施例中,至少两个相邻像素必须具有与待被识别的斑点的中心像素相同的颜色箱。例如,在此示例中,阴影像素a、b和c可能具有匹配的颜色箱,因此,像素a可以被识别为斑点的一部分并添加到颜色配置文件字典中。在一些实施例中,可以基于相邻的相邻像素来评估匹配。例如,在该示例中,可以识别匹配,因为相邻的相邻像素b和c与中心像素a匹配,而如果非相邻的相邻像素b和g与中心像素a匹配,则像素a可能不会被识别为斑点的一部分。
63.不同的实施例可以利用不同的面域、形状、匹配标准等来定义或评估颜色斑点。例如,使用较小的评估窗口可以更快地处理图像,但也可以捕获更小(因此更多)的斑点。在三乘三示例评估窗口中,最小的斑点可以包括三个像素,如上所述。为了过滤掉较小的斑点,可以使用较大的评估窗口。例如,在一个五乘五的评估窗口中,最小的斑点可能是一个九像素(三乘三)的正方形。评估窗口的大小可以在匹配模型中指定,也可以基于一些相关标准(例如,图像大小、设备处理能力等)。
64.与斑点匹配相关的匹配模型数据可以包括诸如颜色配置文件、颜色箱计数方法、颜色阈值、颜色箱通道位数数量、额外颜色箱最小阈值、额外颜色箱最大阈值,匹配分数最小阈值、斑点窗口大小或区域定义、斑点匹配计数和/或其他相关参数等元素。
65.颜色配置文件可以包括诸如颜色箱标识符、计数等的信息,如上所述。颜色箱计数方法可以指示要使用的颜色箱计数的类型,例如所有像素、仅斑点等。颜色阈值可以指定应该匹配给定颜色箱的最小像素数,以便被包括在匹配分数计算中。这种方法可以过滤掉只有很少像素并且在对图像进行分类时不是重要因素的颜色。颜色箱通道位数数量(或其他限制因素)可以指定应在颜色箱中使用的图像的每个颜色通道中使用的位数数量。例如,对于典型的“rgb888”(红色通道、绿色通道和蓝色通道,每通道8位数)格式,该算法可以通过为每个通道使用7位数而不是8位数来将颜色变化减少50%。
66.额外颜色箱最小阈值可以指定额外颜色箱的数量,低于该数量的图像将被视为完全匹配(例如,通过分配一或百分之一百的匹配分数)。额外颜色箱最大阈值可以指定额外颜色箱的数量,超过该数量图像将被视为不匹配(例如,通过分配零匹配分数)。匹配分数最小阈值可以指定最小匹配分数,在该最小匹配分数之上的匹配分数可以被认为指示匹配(例如,匹配分数最小阈值在一些实施例中可以是十分之八或百分之八十)。当使用基于斑
点的算法(例如,9像素、25像素等)时,斑点窗口大小可以指定要评估的像素数量(或其他部分)。斑点窗口还可以与诸如形状定义元素(例如,指示正方形、圆形等)之类的数据元素相关联。斑点匹配计数可以指定被视为匹配的匹配元素的最小数量。例如,在上述九像素面域中,至少有两个其他像素必须与中心像素匹配,因此斑点匹配计数可能表示三个总像素。一些实施例可以包括与斑点匹配相关联的其他参数,例如匹配像素之间的关联(例如,在上面的示例中,两个相邻像素必须匹配中心像素)。
67.可用于将屏幕捕获图像与应用程序匹配的另一个示例算法是在捕获图像的给定区域搜索特定图像组件(也称为“图像模板匹配”)。这种图像模板匹配在应用于在其屏幕上包括独特徽标或原始艺术品图标的应用程序时可能是有效的,正如许多人所做的那样。其他图像元素,例如标准或通用图标(例如,放大类、设置图标等)在应用程序之间可能是不同的,因此对于计算匹配分数很有用。用于图像模板匹配的匹配模型可以包括要搜索的一个或更多个图像伪影。图像模板匹配算法可以针对任何图像伪影扫描输入图像,并且如果检测到图像伪影,则返回与图像伪影相关联的匹配模型相关联的标签或标识符。这种扫描可以通过评估捕获的图像410的部分(例如像素组420)并确定任何扫描的部分是否将图像伪影匹配到至少最小匹配阈值来执行。
68.图像模板匹配算法可以检索与用户设备110的屏幕密度匹配的模板图像(和/或基于一些其他适当的标准)。对于每个模板图像,图像模板匹配算法可以使用各种基于差异的计算将模板图像与当前输入图像进行比较,并且可以搜索给定模板的当前输入图像的最可能位置并生成一个匹配的分数。基于匹配的模型数据、模板数据、捕获的图像数据和/或其他相关因素,可以使用感兴趣面域(roi)来缩小搜索区域。如果计算分数达到或超过指定阈值,则认为图像模板匹配,并返回匹配应用程序的标识符。
69.与图像模板匹配相关的匹配模型数据可以包括模板图像、模板掩码、比较类型和/或各种阈值。模板图像可以包括关联图像的列表,用于与输入图像进行比较。图像可能包括(或相关联)信息,例如屏幕密度(例如,每英寸点数或“分辨率”),以便可以正确缩放图像以进行比较。每个模板图像可能包括阿尔法(alpha)通道,该通道定义了应该从评估中排除的区域。模板掩码可以包括定义要应用于模板图像的位图掩码的图像列表。这样的位图掩码可以指示模板图像的哪些部分用于匹配比较。比较类型可以指示要使用的模板匹配操作的类型。例如,可以使用各种矩阵转置操作,例如sqdiff、sqdiff_normed、ccorr等。阈值可以包括阈值或分数等值,超过该阈值或分数,模板匹配操作应被视为匹配。
70.图像模板匹配通常需要手动创建匹配模型。例如,可以评估应用程序屏幕以识别屏幕上的常见模板。模板图像可以从原始屏幕中提取并配置为匹配的模型。在一些实施例中,可以通过以分发形式获得源应用程序(例如,用于android的android package kit(apk)、用于ios的ios application archive(ipa)等)并从源应用程序提取图标资源来自动生成此类模型。然后可以扫描从应用程序捕获的屏幕图像(也称为“训练”图像)以查看任何提取图标的外观。扫描可以使用与上文和下文描述的那些相似的评分和/或匹配算法。最常识别的图标可以自动添加到匹配模型中。
71.匹配模型的生成及其更新将参考下面的过程1100进行更详细的描述。
72.图5示出了示例环境500,在该环境500中可以实现本文描述的一个或更多个实施例。如图所示,环境500可以包括用户设备110和连接资源120。环境500可以包括各种其他设
备(例如,基于云的设备)、网络通信通道和/或其他资源。
73.用户设备110可以是能够执行指令和/或以其他方式处理数据的消费电子设备,例如智能手机(例如ios、android等)、智能手表、智能眼镜、其他智能设备、平板电脑等。用户设备110可以至少部分地包括和/或实现网关100。网关100可以从源应用程序545捕获和管理屏幕、音频和/或其他内容,并且可以将内容投影到连接资源120。网关100可以至少部分地指导源应用程序545的操作(例如,基于从连接资源120接收的ui数据)。每个源应用程序545-550可以是用户想要与连接资源120一起使用的第三方应用程序。
74.连接资源120可以是任何电子系统、设备或元件,它们可以以通信方式耦合到用户设备110,并且能够利用或以其他方式与在用户设备110上运行的应用程序进行交互(或至少由其提供某些功能)。例如,连接资源120可以是车载系统(例如,主机、信息娱乐系统、后座显示器、仪表组、智能镜子等)、医疗系统、智能电视、智能扬声器、健身设备、智能家居设备(例如,物联网(iot)设备)、智能眼镜、智能电器等。连接资源120可执行专用进程或应用程序,其可称为“客户端”应用程序或类似的。在一些实施例中,连接资源120可以包括或提供各种接口或连接特征,这些接口或连接特征可以允许用户设备110向连接资源120发送数据和从连接资源120接收数据。在一些实施例中,这样的接口或特征可以作为操作系统(os)组件或其他非专用资源。例如,连接资源120可以提供应用程序编程接口(api)或类似的特征,以允许将视频内容提供给连接资源120。
75.如图所示,网关100可以包括应用程序捕获元素505、应用程序控制元素510、应用程序管理器515、投影引擎520、识别引擎525和存储库530。网关100可能能够访问各种用户设备特征,例如应用程序库540,其可以包括能够由用户设备110执行的各种源应用程序545-550。在该示例中,源应用程序550包括可选的开发工具包555。在某些情况下,网关100可以访问到可以提供诸如活动应用程序标识符之类的信息的os接口560。连接资源120可以包括投影客户端570和/或可选的用户设备界面575。
76.当运行源应用程序545时,应用程序捕获元素505可以捕获用户设备110的屏幕或其他输出。应用程序捕获元素5050可以将捕获的数据发送到投影引擎520或识别引擎525以进行进一步处理。
77.应用控制元素510可以控制或以其他方式与源应用程序545交互。应用控制元素510可以启动应用程序管理器515提供的应用程序、模拟用户事件、执行屏幕转换、导致应用程序中特定功能的执行,和/或以其他方式与源应用程序545交互。
78.应用程序管理器515可以与外部资源通信,例如基于云的服务器,以管理与应用程序检测和/或操作相关联的元素。应用程序管理器515可以在本地存储和/或管理应用程序目录590(或其部分),并且可以向其他模块提供应用程序信息。应用程序管理器可以执行各种应用程序检测算法。
79.投影引擎520可以实现将屏幕投影到连接资源120。投影引擎520可以包括或利用各种屏幕投影引擎,例如weblink、carplay、androidauto、sdl等。
80.识别引擎525可以利用图像识别和/或其他识别算法来检测活动源应用程序545和/或要投影的活动屏幕。在更严格的用户设备系统(例如ios)上,os接口560可能不可用或无法访问(例如,可能不提供用于检测活动应用程序的系统api),并且源应用程序545可能不包括开发工具包或其他可能允许这样的交互的资源。在这种情况下,图像识别可以由网
关100实现。
81.识别引擎525可以从存储库530加载与应用程序目录590相关联的可用匹配模型580。识别引擎525可以将接收到的每个图像分类为应用程序id(和/或屏幕id),并将分类信息返回给应用程序管理器515。这种分类可以利用上文和下文描述的各种图像分析算法。如果图像不能被识别,表明应用程序未知,那么识别引擎525可以将这种未被识别的图像状态报告给应用程序管理器515。
82.识别引擎525可以基于各种适当的标准(例如,用户设备110的能力、连接资源120的能力、用户偏好、应用程序配置设置等)实现这里描述的一种或更多种图像分类算法。匹配模型585可以指示使用哪种算法、参数值或其他设置等。
83.识别引擎525可以尽可能使用用户设备110的硬件加速机器学习(ml)能力。例如,对于ios,可以使用或实现核心ml。对于android,设备上的ml工具包可能会提供此类能力。流行的第三方库,例如开源计算机视觉库(opencv)可用于某些图像分类和/或分析操作。
84.如图所示,应用程序目录590可以包括用于各种支持的应用程序的匹配模型580或与用于各种支持的应用程序的匹配模型580相关联。在一些实施例中,通用模型可以被存储(例如,使用仅数据应用程序记录)在应用程序目录590中或与应用程序目录590相关联。在最初下载(或构建)应用程序目录或基于与服务器或类似资源(例如下文描述的网关管理器)的交互而更新应用程序目录时,识别引擎525可以加载可用的匹配模型580。可以通过生成空的规则的列表(“规则列表”)来处理匹配模型580。对于应用程序目录590中的每个应用程序,识别引擎525可以确定是否存在与应用程序条目相关联的匹配模型580。可以以各种适当的方式做出这样的确定,例如通过分析应用程序条目(和/或相关联的数据元素)以识别相关联匹配模型580的列表。
85.如果识别出关联模型,则识别引擎525可以从模型中检索根规则对象,并将规则添加到指定位置的规则列表中。例如,如果新规则没有设置优先级标志或属性,则可以将规则添加到列表的末尾。如果新规则确实设置了优先级属性或标志,则识别引擎525可以从头开始搜索规则列表,并将新规则插入到优先级值低于当前规则的第一条规则(或第一条没有优先级值的规则)之前。在所有应用程序已被处理之后,规则列表因此可以包括来自与应用程序目录590相关联的所有匹配模型580的所有根规则对象的列表,该应用程序目录590按优先级(以及它们在应用程序目录中列出的顺序)排序。在本文描述的各种识别或分析算法或操作期间,可以按顺序处理规则列表。
86.一旦加载了模型并生成了规则列表,识别引擎525就可以处理当前捕获的屏幕并返回检测到的应用程序id、屏幕id和/或其他适当信息。在一些实施例中,识别引擎525可以处理每个捕获的屏幕。然而,这种方法可能导致用户设备110上的系统资源负载过重。因此,在一些实施例中,识别引擎525可以使用各种门控特征来确定(或指示)是否应该处理给定的屏幕图像。
87.门控特征可以包括例如基于时间的门控,其中确定是否分析当前屏幕是基于计时器的。例如,可以每秒分析一个屏幕。门控间隔持续时间可以基于诸如用户设备110的处理负载和/或电池消耗之类的参数而自适应。例如,如果处理负载高,则可以增加门控间隔持续时间以减少处理负载。
88.另一个示例门控特征可以是变化门控,其中确定是否分析当前屏幕是基于先前检
测到的屏幕图像和当前屏幕图像之间的计算差异。如果计算出的差异超过指定阈值,则可以分析当前屏幕图像。这种差异比较可以以各种适当的方式来执行,包括直接图像比较和/或视频编码器信号分析。
89.直接图像比较可能包括比较技术,例如基于颜色箱的分析(如参考所述的颜色匹配)、逐像素比较(例如,当更改的像素数量超过阈值或比率时)、感知散列算法(例如,使用散列生成各种媒体形式的片段或指纹的算法)、基于阈值的场景检测(例如,可以将当前屏幕的强度和/或亮度与指定的阈值进行比较,并且当强度和/或亮度超过阈值时可以触发分析)和/或其他适当的直接图像比较算法。
90.视频编码器信号比较可以包括使用投影引擎520(和/或相关的视频编码器)从而基于被发送到投影客户端570的捕获屏幕执行场景检测。例如,h264格式可以使用不同类型的帧。关键帧(或“i”帧)可能包含完整场景,而“p”和“b”帧可能仅包含变化。如果场景中没有变化,则p和b帧将很小,并且识别引擎525可以使用此类信息来确定是否处理当前屏幕。在某些情况下,视频编码器可以实现内部场景检测逻辑(例如,为了更好的帧编码),当检测到场景变化时,它可以向识别引擎525提供单独的信号。
91.在一些实施例中,可以使用混合图像识别方法。例如,可以检测屏幕变化,并且可以在某个指定间隔执行屏幕识别,而不管任何计算的差异是否超过阈值或以其他方式指示变化。
92.如果识别引擎525确定应该分析屏幕图像,则识别引擎525可以针对规则列表中的每个规则对象,通过应用规则中描述的任何图像操作并存储结果来处理规则。如果规则对象具有子规则,则可以递归地处理每个子规则并存储或以其他方式与当前屏幕图像相关联。如果规则对象没有子规则,则识别引擎525可以确定规则类型并执行与该规则相关联的算法(并传递任何算法特定的数据)。
93.如果算法指示存在匹配,则识别引擎525可以返回匹配规则的关联标签,提取应用程序id(和屏幕id,如果有的话),并发送应用程序id(和屏幕id,如果有的话)到应用程序管理器515。在一些实施例中,识别引擎525可以被配置为使用所有可用规则分析图像并基于返回最高匹配置信度分数(如以各种适当方式计算)的规则挑选匹配项.
94.如果算法指示不存在匹配(或存在与不同应用程序的匹配),则识别引擎525可以通知应用程序管理器515。应用程序管理器515可以被配置为执行滞后功能而不是基于一个未检测到(或有限数量的未检测到)假设当前应用程序是未知的。这种方法可以帮助解决识别错误并避免糟糕的用户体验,例如当给定的屏幕图像暂时无法识别或错误识别时出现闪烁。
95.活动源应用程序屏幕(和/或其他应用程序输出)可以由应用程序捕获元素505捕获并由识别引擎525接收以进行分析。在通过外部显示通道捕获的情况下,捕获的屏幕图像可以从连接资源120接收并从投影引擎520传递到识别引擎525。
96.识别引擎525可以配置有匹配模型580(也称为“识别”模型),其可以与应用程序目录590和/或其他适当信息一起从服务器下载。识别引擎525可以评估模型并向应用程序管理器515报告应用程序id、检测到的应用程序的屏幕id(如果当前应用程序未知,则为“空”)和/或其他相关信息。
97.存储库530可以包括存储器或储存器,其可以包括匹配模型580、启动器屏幕585、
可选的应用程序目录590和/或其他适当的元素。每个启动器屏幕585可以是或包括或以其他方式实现可投影到连接资源570的应用程序屏幕。启动器屏幕585可包括可用应用程序(如应用程序目录590所示)并且可允许最终用户启动或以其他方式与可用应用程序交互。应用程序目录590可以是由后端服务器管理的文档或其他数据结构,或者是其他适当资源,其他适当资源包括诸如最终用户应可通过屏幕投影系统访问的应用程序列表、相关限制(如果有的话)、屏幕识别模型(或对其的引用)等的信息。一些实施例可以包括可以管理应用程序目录590、匹配模型580和/或网关100使用的其他元素的应用程序管理后端设备(未示出)。
98.每个匹配模型580可以由存储分层对象结构的文件表示,该分层对象结构描述了对图像进行分类的方式。分层结构可以使用标准的二进制或文本文件格式来实现,例如协议缓冲区、json、可扩展标记语言(xml)、yaml等,或者作为专有的序列化对象结构来实现。每个匹配的模型580文件都可以被压缩(例如,使用gzip)和/或加密。这样的文件可以被数字签名,使得识别引擎525能够在加载时验证每个文件的真实性和完整性。
99.一个匹配模型580可以与一个或更多个应用程序相关联并用于识别一个或更多个应用程序。对于每个应用程序,匹配模型580可以包括和/或用于识别屏幕或状态。一些匹配模型580可用于跨多个应用程序识别屏幕模式(例如,检测屏幕键盘,无论活动源应用程序)。
100.每个匹配模型580可以包括版本和可选的数字签名,该数字签名可以使用用户设备os提供的标准加密api。匹配模型580可以包括规则元素,该规则元素可以是描述运行哪个算法和使用哪个参数的主要分层对象。规则元素可以包括一个或更多个子规则。
101.规则元素可以包括各种子元素,例如可以定义规则类型的类型。根据类型,各种其他属性可能会有所不同。一些实施例可以使用组规则。组规则可能能够基于输入图像执行某些常见操作,然后将结果传递给各种子规则。最终规则可以提供有关执行支持的图像分类算法之一的指令。
102.每个规则都可能包含名称元素,该名称元素可用于调试目的。每个规则可以包括优先级元素,该优先级元素可以定义该规则相对于其他规则或规则元素的优先级。识别引擎525可以使用优先级来确定评估各种规则的顺序。如果没有指定优先级,则可以使用模型文件中的顺序和/或加载模型的顺序来确定优先级。
103.每个规则可以包括子元素,该子元素包括子规则列表(如果有的话)。可以按列出的顺序评估子规则,除非它们与特定定义的优先级相关联。
104.每个规则可以包括图像操作元素,该元素可以指定在根据规则和/或相关的评估算法评估图像之前应该对输入图像执行哪些操作。组规则可以与适用于所有子规则的某些图像操作相关联,以加快处理速度。可以支持各种图像操作,例如缩放(例如,图像可以按比例缩小或放大到预定义的像素大小或相对百分比)、裁剪(例如,可以使用此操作裁剪系统栏)、颜色转换(例如,转换为灰度、转换为不同的颜色空间、从颜色值中删除位数等)、过滤(例如,使用扩张、削弱等操作)和/或其他适当的操作。
105.每个规则可以包括图像感兴趣面域(roi)元素,该元素可以为识别算法使用的输入图像指定一个或更多个roi。roi可以被指定为矩形、多边形、掩码和/或其他合适的方式。
106.每个规则都可以包含标签。对于定义分类操作的规则,如果规则匹配,标签字段可
以包括识别引擎525应该返回的结果。此外,算法特定数据可能包括标签数据。标签可以表示为包括诸如应用程序id和/或屏幕id之类的信息的字符串。
107.每个规则可以包括算法特定数据元素,根据规则的类型,该数据元素可以存储传递给相应图像分类算法的参数。
108.开发工具包555(也称为“通知”软件开发工具包(sdk))可以在网关100和源应用程序545之间启用通知消息。与开发工具包555集成的源应用程序能够提供增强的用户体验。
109.投影客户端570可以接收和回放投影引擎520发送的投影信息流。投影客户端570可以将结果显示到连接资源120的适当显示器或屏幕上。投影客户端570可以捕获任何用户输入(按钮、触摸、语音等)并将捕获的用户输入发送到网关100。
110.用户设备界面575可以允许在投影引擎520到投影客户端570的通信路径之外控制用户设备110。例如,用户设备界面575可以包括或利用人工输入设备(hid),并且应用程序控制元素510可以指示用户设备界面575向用户设备110发送hid命令。
111.用户设备110和连接资源120(和/或本文描述的其他系统或环境元素)可以跨各种路径或通道进行通信。例如,用户设备110和连接资源120之间的主数据通道可以利用诸如wi-fi、蓝牙、通用串行总线(usb)等连接技术,并且可以使用典型用户设备110支持的通信协议,例如android开放附件(aoa)、外部附件协议(eap)、基于因特网协议的传输控制协议(tcp/ip)等。一些实施例可能包括通信通道,例如外部控制通道、外部显示通道、音频通道等。
112.外部控制通道可以包括,例如,通过usb或蓝牙发送的hid输入、定位设备输入等。外部显示通道可以利用或提供投影实用程序,例如airplay、miracast、hdmi、mhl、chromecast、等,其中数据可以通过无线或有线通道发送。音频通道可能包括音频输入和/或音频输出数据或通过(诸如蓝牙高级音频分配配置文件(aadp或“a2dp”)、usb音频、usb麦克风、airplay、wisa(无线扬声器和音频)、数字生活网络联盟(dlna)、高清多媒体接口(hdmi)等)通道,提供音频输入和/或音频输出数据。
113.用户设备110和连接资源120可以使用一些实施例的数据通道通信协议(dccp)经由主数据通道(和/或其他可用通道)进行通信。在网关110和投影客户端570(和/或其他系统元素)之间发送的消息可以利用或实施dccp。可以使用二进制、文本和/或其他适当的表示来存储和传输消息。例如,一些实施例的dccp可以利用序列化的“c”结构、字符串格式,例如javascript对象通知(json)、协议缓冲区等。协议缓冲区的使用可能是优选的,因为二进制格式在带宽和处理方面是可扩展且高效的。
114.尽管可以通过参考特定方来描述dccp的各种消息或其他元素,但是本领域的普通技术人员将认识到,可以使用各种其他方来实现相同、相似和/或互补的消息或元素。
115.不管底层消息格式如何,消息(和/或相关协议)都可以是可扩展的,以便可以将新消息添加到通信协议中。网关100或投影客户端570的旧版本可能会忽略此类新消息。消息和/或协议可以是向后兼容的,使得较新的组件可能能够通过发送与这种较旧或遗留组件兼容的消息来与较旧组件交互。消息和/或协议可以是前向兼容的,例如,使得添加到消息的新字段将被旧组件忽略并仅使用已识别的字段。
116.一些这样的消息可能遵循请求和响应格式或范例,使得一个元素发送的请求接收来自另一个元素的响应。这样的消息可以共享共同的请求标识符或其他适当的属性,这些
属性可以允许请求与相应的响应相关联。上面和下面描述的每条消息都可以分成多个更小的消息。同样,每条消息可以与其他消息组合成更大的消息。
117.在某些情况下,用户设备110和连接资源120之间的多条数据路径可能是可用的。例如,最初可以使用蓝牙连接,然后可以建立wi-fi连接,和/或可以添加诸如usb数据线的物理连接。dccp可以使用会话信息来支持这种多通道安排。
118.例如,dccp可以包括用于通过第一通道(例如蓝牙)建立初始连接的“会话”消息。该会话消息可以允许端点通过一个或更多个连接通道建立连续会话。该消息可用于确定新建立的连接(或“通道”)是否与现有连接或最后已知连接指向同一设备。这种方法允许对等点在连接通道之间执行无缝切换。会话消息用于建立新会话并断开与非匹配设备的所有其他通信通道。
119.每个会话消息可以包括发送消息的组件的会话令牌和各种会话握手标志。这样的会话握手标志可以包括指示消息是否是公告的公告标志(意味着不请求新会话)、指示消息是否正在请求建立新会话的新会话标志、指示消息是请求消息或响应消息的响应标志,和/或其他适当的标志。会话请求消息可以由投影客户端570发送,会话响应消息可以由网关100发送。
120.作为初始设置的一部分,会话令牌可以由网关100和/或投影客户端570交换和存储。如果建立了第二个通道,网关100和投影客户端570可以尝试继续现有会话。如果成功,则第二通道可与第一通道并行使用或代替第一通道使用。
121.这种方法允许通道之间的无缝转换以适应连接性的变化(例如,由于用户操作或选择、基于信号强度或其他指标的确定等)。并行通道可用于不同目的。例如,较低吞吐量的蓝牙通道可以配置为使用与较低质量视频流格式相关联的较低比特率。如果更高吞吐量通道可用,则视频流可以切换到更高吞吐量通道和相关的更高质量数据视频流格式。
122.为了实现这种基于会话的多通道通信,网关100和投影客户端570可以利用会话令牌集合。这样的会话令牌可以包括可以由投影客户端570生成并发送到网关100的客户端会话令牌和可以由网关100生成并且发送到投影客户端570的网关会话令牌。
123.会话令牌可以使用随机数生成器和属性(例如,日期、时间等)、连接通道识别信息(例如,ip地址、媒体访问控制(mac)地址等),和/或其他适当的信息生成。
124.会话令牌可以以各种适当的方式进行交换。例如,投影客户端570可以在连接到网关100时发送会话消息,该会话消息包括先前存储的(如果可用)或新生成的客户端会话令牌、引发的公告标志和/或其他适当的内容。
125.网关100可以从投影客户端570接收会话消息,并将接收到的客户端会话令牌与任何活动的或其他先前接收的客户端会话令牌进行比较。如果接收到的客户端会话令牌与活动的或先前接收到的客户端会话令牌匹配,则网关100可以发送会话回复消息,该消息包括网关会话令牌、引发的公告和/或响应标志和/或其他适当的内容。如果相应存储的会话令牌为空,则网关100可以生成并存储网关会话令牌。
126.如果接收到的客户端会话令牌与活动会话令牌不匹配,从而指示新连接,网关100可以确定是否存在先前活动的连接(例如,如果先前接收到的会话令牌与接收到的客户端会话令牌匹配)。如果识别出先前活动的或当前活动的连接,则网关100可以停止先前的连接并切换到新可用的连接,其中这种切换可以基于一些指定的标准(例如,网关配置、用户
确认等)。如果新的可用连接被拒绝(例如,用户选择继续上一个连接的选项),网关100可以发送带有空会话令牌的新会话消息,引发响应标志(例如,指示新连接被拒绝)和/或其他内容。如果新的可用连接被接受,网关100可以清除任何存储的活动客户端会话令牌,生成新的网关会话令牌,并发送包括新网关会话令牌、引发的新会话和响应标志和/或其他内容的会话响应消息。
127.投影客户端570可以接收会话响应消息。如果新会话标志被引发,投影客户端570可以断开所有其他通道或设备,直到只有当前通道打开,将接收到的会话令牌存储为新的网关会话令牌,清除任何存储的客户端会话令牌,生成并存储新的客户端会话令牌,如果未设置响应标志,则发送一条新会话消息,并引发新会话标志,并传递新生成的会话令牌。如果未引发新会话标志,但引发了公告标志,则投影客户端570可以检查接收到的网关会话令牌并将其与存储的网关会话令牌进行比较。如果令牌不匹配,则投影客户端570可以继续进行,就好像新会话标志被引发一样。如果令牌匹配,则不会采取额外的行动,因为新通道是针对现有设备的。
128.如果网关100接收到带有新会话标志的会话消息并且存在先前活动的连接,则取决于网关100的配置,网关100可以切换到新连接或要求确认以结束先前的连接。如果新连接被拒绝,网关100可以发送带有空会话令牌和响应标志的新会话消息,指示新连接被拒绝。如果新连接被接受,网关100可以断开任何现有连接,将接收到的令牌存储为客户端会话令牌,生成并存储新的网关会话令牌,并通过会话消息发送新令牌,并引发新会话和响应标志。
129.除非网关100和/或连接的设备120通过如上所述完成的一个或更多个消息交换来建立会话,否则将忽略任何其他消息。
130.作为另一示例,dccp可以包括“身份”消息。这样的消息可以由任何元素发送以请求另一个元素的身份。通过身份消息发送的一些信息可能很敏感,需要通过安全通道发送。一旦建立了对等点之间的连接(例如,通过如上所述交换会话令牌),任何一方都可以随时发起身份消息。一方可以通过发送空的身份消息或指示请求身份的特殊参数或标志来请求另一方的身份。身份请求的接收者可以使用具有填充身份值的相同身份消息类型进行响应。身份请求可以指定应该返回的最低要求的身份值。如果对等设备在请求的某个指定时间限制(例如,五秒)内没有响应,则身份信息不完整或不匹配,请求者可能会断开连接。
131.身份消息可以包括身份值列表,该身份值列表包括身份id和相应的值。身份id的示例包括系统id、显示名称、制造商、型号(描述设备的任何字符串)、国家/地区代码、序列号、os信息、应用程序信息和/或其他标识符。系统id可以是唯一标识对等设备的单个字符串。如果已连接同一设备(运行相同的软件),该设备将始终返回相同的系统id。系统id通常可以包括型号、制造商、模糊序列号和/或由设备生成的随机数,或使用其生成。显示名称可以是可以呈现给用户的对等设备的名称。该字符串可能是英文的。在某些情况下,设备可能会通过其他身份id以其他语言发送显示名称。每个国家/地区代码可以是字符串,包括一个或更多个逗号分隔的iso 3166-1alpha-2代码,这些代码代表对等设备配置用于的一个或更多个国家/地区。序列号可以是标识设备的唯一字符串。如果消息通过非安全连接传递,则序列号可能是伪序列号(例如,设备上生成的数字或经过模糊的序列号)。os信息可能包括操作系统的名称和版本。应用程序信息可以包括有关在设备上运行的主应用程序的信
息,例如应用程序的名称、供应商、版本等。可以根据需要使用其他标识值。
132.dccp消息的另一个示例是“ping”消息。这样的消息可以允许端点确定对等应用程序是否响应。ping消息可用于确定连接是否仍处于活动状态,以便在连接丢失时未正确报告的传输。ping消息也可以定期从投影客户端570发送,以便在应用程序在后台运行时保持连接有效。
133.ping消息可以包括标识该消息的请求id,其中响应ping消息应该包括匹配的请求id。ping消息可以包括各种标志,例如指示是否需要响应(对于请求消息)的请求标志、指示该消息是对先前发送的请求的响应的响应标志以及指示不需要或不预期响应的单向标志。
134.dccp可以包括用于同步网关100和投影客户端570的“同步时间”消息。同步时间消息可以用于计算本地时钟和远程对等点的时钟之间的偏移。可以使用不同的时钟同步策略。最简单的算法是让对等点发送带有对等点当前时间戳的同步时间消息。远程对等点可以用远程对等点的当前时间戳进行响应。然后,发送对等点可以通过减去两个时间戳并考虑通信链路的延迟来计算偏移量。
135.同步时间消息可以包括标识该消息的请求id,其中响应同步时间消息应该包括相同的id。同步时间消息可以包括客户端时间戳(例如,以毫秒或微秒为单位的时间戳,指示消息何时从客户端发送)和网关时间戳(例如,以毫秒或微秒为单位的时间戳,指示消息何时从网关宿主发送)。
136.另一个示例dccp消息是投影客户端570用来向网关100报告状态和任何模式变化的“连接的设备状态”消息。例如,如果连接资源120是车载设备,则连接资源120可以报告当前驾驶状态以限制任何驾驶员分心。该消息可以由客户端570主动发送。
137.连接的设备状态消息可以包括指示由设备报告的当前限制级别的限制级别、指示连接的设备是否正在显示从网关100接收的任何内容的显示状态和/或其他适当的状态字段或其他内容。
138.图6示出了另一个示例环境600,在该环境中可以实现本文描述的一个或更多个实施例。如图所示,环境600可以包括上面描述的用户设备110和网关管理器610,网关管理器610包括目录接口620、存储库630、控制接口640和模型训练器650。环境600还可以包括用户设备660。
139.网关管理器610可以包括一个或更多个电子设备,例如服务器或服务器集群,并且可以通过公共云、私有基础设施和/或其他适当的资源进行访问。
140.目录接口620可以包括api或其他适当的资源,这些资源可以允许网关100请求应用程序目录590和/或其他适当的信息。api可以利用具有代表性的状态传输(rest)架构,使用超文本传输协议(http)请求或其他web服务api,例如google远程过程调用(grpc)、简单对象访问协议(soap)、java远程方法调用(rmi)等。api可以通过安全连接执行,例如传输层安全性(tls)。api可以支持身份验证(例如,网关100向网关管理器610进行身份验证的一种方式)和对应用程序目录的请求(返回与连接资源id匹配的响应)。
141.返回的特定应用程序目录590可以取决于连接资源120。用户设备110可以连接到具有不同能力的不同连接资源120。类似地,不同的应用程序可用于不同的地理面域,或者业务考虑可以确定应该包括或启用哪些应用程序。例如,连接资源120的提供者可以许可一组应用程序以默认启用。当请求或提供应用程序目录590时,网关100可以使用包括在连接
资源120发送的身份消息中的设备信息。可以在运行时使用从存储库630接收的数据提取或构建应用程序目录590。
142.存储库630可以包括存储各种应用程序目录记录的数据库管理系统(dbms),其允许目录接口620快速提取或构建所需的应用程序目录590。存储库630使用的数据库可以是关系数据库(例如结构化查询语言(sql)服务器、mysql、postgres等)或非关系数据库(例如dynamo db、mongo db、simple db等)。
143.应用程序目录590可以是描述哪些源应用程序应该由网关100管理的数据结构。应用程序目录可以以不同的格式提供。例如,当通过目录接口620从网关管理器610请求时,可以以诸如json、原型缓冲区等的可移植格式返回目录。当由网关100处理时,应用程序程序目录590可以表示为对象引用的层次。无论交换、存储或处理格式如何,应用程序目录590都可以包括各种属性或参数。示例参数可以包括应用程序目录590适用的版本和连接资源标识符集合。
144.应用程序目录590可以包括应用程序记录的应用程序列表680。这样的记录可以与各种字段相关联,包括下面描述的这样的字段的示例。应用程序id字段可以包括应用程序的唯一标识符。id可以是任何字符串,但为避免名称冲突,建议使用反向统一资源定位器(url)表示法,例如“com.yelp”。投影类型字段可以描述应用程序支持的投影类型(例如,捕获的应用程序、与sdk集成的投影应用程序、web应用程序等)。在一些实施例中,可以支持标记为“仅数据”的特殊类型的应用程序记录。此类记录可用于存储常见信息,例如用于系统屏幕(如键盘)的匹配模型,并且可能不与特定应用程序相关联。
145.应用程序类别字段可以指示应用程序的类型(例如,应用程序的主要功能)。该类别可能包括多个级别(例如,主要、次要等)。类别可以通过带有由斜杠分隔的子类别的字符串表示(类似于目录路径),其中首先是更通用的类别,然后是更具体的类别,等。如果应用程序支持多个类别,则类别可以用逗号分隔。例如,对于导航应用程序,类别可以是“映射/导航”,而对于视频播放器应用程序,类别可以表示为“媒体/视频”,音乐播放器可以表示为“媒体/音乐”,支持视频和音乐的应用程序可以表示为“媒体/音乐,视频”。
146.安装位置字段可以提供可以安装相关应用程序的位置(例如,url)。对于各种支持的用户设备平台,安装位置字段中可能包含不同的子字段。例如,对于ios,安装位置字段可能指向应用程序在应用程序商店(app store)上的位置。
147.显示信息字段可以包括关于如何将应用程序呈现给最终用户的信息。显示信息字段可以包括诸如标题(针对支持的语言进行本地化)、图标(例如,针对不同的支持分辨率)、描述(针对支持的语言进行本地化)等元素。显示信息字段可以包括显示选项,例如是否应在启动器屏幕中初始显示应用程序图标,是否应向网关100显示或隐藏应用程序等。
148.启动信息字段可以包括关于网关100可以如何启动相关联的应用程序的信息。对于受支持的用户设备平台可能有不同的子字段。例如,对于ios,启动信息字段可能包括启动应用程序的url模式,而对于android,启动信息字段可能包括启动意图或包名称。
149.身份验证信息字段可以包括允许网关100验证和认证安装在用户设备110上的应用程序是正确的应用程序的信息。对于各种支持的平台以及应用程序的不同版本,可能存在不同的身份验证记录。网关100可能有不同的方式来获取应用程序签名或证书。例如,在android上,可以使用packagemanager.getpackageinfo api和get_signing_certificates
标志来获取此类资源。作为另一示例,可以通过校验和来验证应用程序,其中网关100可以计算目标应用程序的预定义二进制的校验和并将其与来自认证信息字段的值进行比较。在某些用户设备系统上,网关100可能被限制访问第三方应用程序信息,在这种情况下,该平台的身份验证信息字段的记录可能为空,并且网关100将识别出给定应用程序无法通过身份验证。
150.识别模型字段685可以存储应用程序和用于不同平台和支持的应用程序版本的屏幕识别模型(和/或对其的引用)。
151.应用程序购买信息字段可以存储信息以通过应用内购买启用应用程序和/或功能。如果使用现有的应用内购买框架,例如store工具包或google play计费,则应用程序购买信息字段可能包含产品id,并通过相应的后端系统管理定价信息。在一些实施例中,应用程序购买信息字段可以存储产品价格(例如,对于不同的支持面域)和完成购买所需的任何信息。
152.应用程序模式限制字段690可以是可选记录,描述是否应根据连接资源120的操作模式对当前应用程序的投影进行任何限制。
153.签名字段可以是应用程序目录的数字签名,可用于验证目录信息的完整性。可以使用安全地存储在网关管理器610上的私钥对包括应用程序目录的文件进行签名,并由网关100通过公钥进行验证。签名字段允许将目录存储在用户设备110处,并且当稍后读取目录时,网关100可以验证目录没有被修改。如果目录已被修改,则网关100可以拒绝该目录并向网关管理器610请求新目录。
154.应用程序目录590可酌情包括各种其他字段、元素、属性、参数或其他数据。
155.控制接口640可以包括或提供应用程序管理api或其他适当的资源,其他适当的资源以允许创建、修改、删除和/或以其他方式管理应用程序目录记录。这种应用程序管理api可以利用具有http请求的rest架构或其他web服务api,例如grpc、soap、java rmi等。应用程序管理api可以通过诸如tls的安全连接来执行。应用程序管理api可以允许身份验证、连接设备的管理、创建或删除或应用程序目录、应用程序目录条目的管理和/或与应用程序目录590的其他交互。
156.用户设备660可以是与管理员而不是最终用户相关联的设备,例如用户设备110。用户设备660可以包括或执行提供对控制接口640的访问的门户网站(通过浏览器)或管理应用程序670。管理应用程序或门户网站670可以被限制为通过虚拟专用网络(vpn)访问以增加安全性。
157.用户设备660和/或管理应用程序或浏览器670可以向网关管理器610进行身份验证并被提供不同的访问权限。基于身份验证,可以启用或禁用控制接口640的一些功能。
158.管理应用程序670可以管理连接资源身份,允许创建、删除、修改连接资源id等。管理应用程序670可以通过添加、删除和/或修改与应用程序目录条目相关联的信息来创建和/或删除应用程序目录和/或管理应用程序目录条目。
159.模型训练器650可以生成和/或训练识别模型665和/或由网关管理器610或网关100使用或实现的其他模型。模型训练将在下面参考过程1100进行详细描述。
160.图7示出了用于将应用程序内容从用户设备110投影到连接资源120的示例过程700。过程700可以允许用户使用由用户设备110提供的连接性和/或处理能力来扩展或增强
连接资源120的能力。可以在启动源应用程序时,以规则的间隔和/或基于一些执行标准来执行该过程。在一些实施例中,过程700可以由网关100执行。诸如投影客户端570、目录接口0620和/或控制接口640的组件可以执行过程700的补充过程。
161.如图所示,过程700可以包括生成(在710处)应用程序目录,例如或类似于应用程序目录590。应用程序目录可以由网关100经由目录接口620从诸如网关管理器610的资源接收。网关100可以基于经由目录接口620从诸如网关管理器610的资源接收的数据构建应用程序目录。如果可用,网关100可以从诸如存储库530的资源检索先前生成或接收的应用程序目录。任何新接收的或新生成的应用程序目录可以存储在网关100(例如,使用存储库530)以供将来使用。
162.投影客户端570可以发送“应用程序目录”请求消息以请求最新的应用程序目录或注册应用程序目录更新。应用程序目录请求消息可以包括例如请求id等元素。网关100可以将相同的请求id与应用程序目录响应消息一起返回,使得投影客户端570可以将请求与响应匹配。如果网关100发送更新消息,则请求id可以设置为零。应用程序目录请求消息可以包括各种应用程序目录标志,这些标志可以指示应该如何处理应用程序目录。投影客户端570可以设置请求的标志。网关100可以返回当前网关标志值。应用程序目录标志可以包括“自动更新”标志,指示主机是否应该在每次应用程序目录发生变化时自动发送“应用程序目录”消息。当由投影客户端570发送时,自动更新标志可以请求网关100提供自动更新。为了停止自动更新,“停止自动更新”标志可以由投影客户端570设置。当由网关100发送时,停止自动更新标志可以包括网关100的当前自动更新状态。应用程序目录标志可以包括“完整目录”标志,它可以指示网关100是否应该返回完整的应用程序目录。网关100可以返回完整目录标志。如果接收到完整目录标志,则投影客户端570应该更新整个内部目录(添加和删除应用程序)。如果投影客户端570设置了完整目录标志,则可以忽略该标志。
163.应用程序目录请求消息可以包括一个或更多个应用程序记录。每个应用程序记录可以包括成对的属性id和关联值。当请求应用程序目录时,投影客户端570可以用所需属性的id和可能的所需和/或过滤器值填充一个应用程序记录。示例属性id和关联值如下表1所示。响应于应用程序目录请求消息,网关100可以返回应用程序记录的列表,其中包含每个应用程序的请求属性和关联值。
164.如上所述,可以使用应用程序目录消息(和/或其他应用程序目录资源)中包含的成对的预定义名称/值对来指定应用程序属性。名称可以预定义并分配值,如下表1所示。
165.166.167.[0168][0169]
表1
[0170]
应用程序目录可以通过应用程序目录消息提供给其他资源,例如投影客户端570。这样的消息可以由投影客户端570发起并由网关100接收。应用程序目录消息可以遵循请求和响应格式。在某些情况下,网关100可以向投影客户端570发送自动更新。可以使用各种应用程序目录消息标志来定义或修改消息传递过程(例如,可以设置自动更新或停止自动更新标志来管理自动更新消息)。
[0171]
投影客户端570可以在应用程序目录消息中从与网关100相关联的应用程序目录请求与一个或更多个应用程序(直至整个应用程序目录)相关联的数据。可以使用应用程序目录请求消息中的应用程序id来请求应用程序,如果在投影客户端570可用。如果未指定应用程序id,则可以返回所有可用应用程序并且可以设置完整目录标志。投影客户端570可以指示在响应应用程序目录请求消息时返回一个或更多个特定应用程序属性。
[0172]
投影客户端570可以在应用程序目录消息中请求特定的应用程序属性(例如,图像宽度、图像高度、显示名称语言等)。如果没有指定应用程序属性,则网关100可以返回所有可用的应用程序属性。
[0173]
应用程序目录消息通常可以遵循请求和响应格式。然而,投影客户端570可以请求在应用程序目录发生变化时得到通知。例如,应用程序状态可能会发生变化,或者新应用程序可能会添加到应用程序目录中。这样的通知可以通过与应用程序目录消息相关联的自动更新标志和停止自动更新标志来支持。如果在来自投影客户端570的应用程序目录请求消息中引发自动更新标志,则网关100可以在每次应用程序目录发生变化时发送应用程序目录消息。作为这种请求消息的一部分,投影客户端570可以通过填充应用程序记录来指定每个更新应该包括哪些应用程序属性。如果没有填充应用程序记录,则每次更新都可能返回所有属性。投影客户端570可以通过发送设置了停止自动更新标志的应用程序目录消息来停止自动更新。
[0174]
过程700可以包括识别和身份验证(在720处)源应用程序。可以以各种方式执行这种识别和身份验证,这取决于哪个资源启动应用程序和/或其他相关信息。例如,可以在用户设备110处启动应用程序,并且可以在网关100处接收投影应用程序的请求。作为另一个示例,投影客户端570可以发送启动应用程序的请求。
[0175]
可以通过网关100启动第三方源应用程序。可以通过诸如启动器屏幕之类的资源或从连接资源120接收到的消息接收启动请求。可以启动的源应用程序可以存储在应用程
序目录中,启动信息可以在启动信息记录中提供。应用程序启动可以使用由用户设备110和/或其他系统元素提供的api或其他资源来执行。例如,对于ios,网关100可以使用url模式启动应用程序。对于android,网关100可以使用具有所需应用程序包名称的启动意图来启动应用程序。应用程序启动可以由诸如应用程序控制模块510之类的资源来执行。
[0176]
在某些情况下,投影客户端570了解可用应用程序和活动应用程序可能是有用的。例如,投影客户端570可以选择要启动的特定应用程序。这种意识可以允许用户体验好像投影的应用程序在连接资源120上本机运行。
[0177]
例如,与汽车系统相关联的连接资源120可以包括车载主机上的硬件按钮,用于启动导航应用程序。在连接资源120处运行的投影客户端570可以从应用程序目录590向网关100查询可用应用程序,并通过网关100请求在用户设备110处启动导航应用程序。
[0178]
投影客户端570可以使用如上所述的应用程序目录消息接收可用应用程序及其状态的列表。投影客户端570可以使用列表信息来显示应用程序图标集合或通知用户关于通过网关100可用的应用程序。
[0179]
dccp可以包括“当前应用程序”消息,网关100可以使用该消息在活动应用程序改变时通知投影客户端570。活动应用程序可以基于用户切换或投影客户端570定向切换而改变。投影客户端570可以使用当前应用程序消息来请求启动特定应用。当前应用程序消息可以包括唯一标识应用程序的应用程序id元素。应用程序id可以存储在应用程序目录590中。当前应用程序消息可以包括定义应用程序状态的应用程序状态元素(例如,“启动
”‑
请求启动应用程序,“激活
”‑
指示应用程序已激活,“正在启动”——表示系统正在启动指定的应用程序,和/或“启动失败”——表示请求的应用程序启动失败)。当启动成功时,响应于当前应用程序消息,可以返回“激活”状态,。当前应用程序消息可以包括应用程序屏幕id元素,该元素标识当前源应用程序的活动屏幕的id(如果检测到)。
[0180]
投影客户端570可以利用当前应用程序消息来请求启动应用程序目录支持的给定应用程序。该消息可以由网关100处理并重定向到诸如应用程序管理器515之类的资源,该资源又可以将应用程序id解析为应用程序目录中的条目。应用程序管理器515可以向应用程序控制模块510提供应用程序条目信息,该应用程序控制模块510可以尝试在用户设备110上启动(或切换到)所请求的应用程序。如果未安装所请求的应用程序,则网关100可以显示适当的消息和/或指示用户安装应用程序。网关100可以通过当前应用程序响应消息返回状态标志。
[0181]
任何时候当前投影的活动应用程序改变,网关100都可以发送具有适当状态的当前应用程序消息。如果支持,网关100还可以在每次活动模式和/或屏幕发生变化时发送通知。投影客户端570可以使用通知消息来更新与活动应用程序相关联的ui元素的状态。
[0182]
一旦启动应用程序,可能存在网关100应限制将哪些应用程序投影到连接资源120的情况。例如,对于车载系统,可能有驾驶分心规定,禁止在车辆行驶时在车载显示器上显示某些应用程序。因此,网关100必须能够检测投影到连接设备的活动应用程序的身份。可以使用各种检测算法(或其组合)来识别活动应用程序,这取决于用户设备110的能力、提供给网关100的访问和/或其他相关因素。
[0183]
如果用户设备110向网关100提供系统api,例如os接口560或其他此类资源,则可以通过接口报告活动应用程序。网关100可以使用应用程序目录将系统api报告的信息与和
应用程序目录中的条目相关联的应用程序id相匹配。对于android,可访问性服务api可用于检测当前应用程序的包名称。然后,网关100可以使用应用程序目录将包名称与目录中支持的应用程序条目匹配。
[0184]
由于某些用户设备操作系统可能不提供api或其他此类资源来检测活动应用程序,因此可以将轻量级通知sdk(例如开发工具包555)与源应用程序集成,以便向网关100提供通知。通知开发工具包555可以与应用程序控制模块510通信。应用程序控制模块510又可以在捕获的应用程序改变状态时通知应用程序管理器515(例如,移动到后台或前台,开启,关闭等)。
[0185]
通知开发工具包555可以以各种方式与应用程序控制模块510通信,例如通过套接字连接发送的http消息、二进制或简单json套接字消息、用户设备110上可用的进程间消息传递api,以及/或其他适当的方式。
[0186]
通知开发工具包555可以支持例如身份验证消息的消息。此类消息集合可用于向网关100验证源应用程序(例如,源应用程序550),反之亦然。双方可交换可由网关管理器610签名的公共证书。对等点可使用系统api(如果可用)验证包签名。如果双方都通过了身份验证,则对等点可以交换会话密钥以用于额外的消息传递或其他通信。
[0187]
通知开发工具包555可以支持例如应用程序状态更改消息的消息。每当应用程序状态发生变化(例如,移动到前台、转到后台、打开、关闭等)时,源应用程序都可能会发送此类消息。当针对当前源应用程序开始和/或停止投影时,应用程序控制模块510可以发送类似的消息。源应用程序可以使用这样的消息来更新与源应用程序相关联的ui。
[0188]
通知开发工具包555可以支持例如屏幕状态改变消息的消息。只要当前屏幕或状态发生变化,源应用程序就可以发送此类消息集合。例如,如果用户激活编辑字段,则可以显示键盘。屏幕状态变化消息可用于处理基于应用模式的特殊限制。
[0189]
过程700可以包括接收(在730处)源应用程序信息。这种信息可以基于识别的应用程序id和/或屏幕id从诸如存储库530的资源接收。此类源信息可以包括,例如,与源应用程序相关联的权限、用户信息(例如,用户名和密码)、配置信息(例如,用户选择或偏好、制造商默认值等)和/或其他适当信息(例如,输出数据格式、ui功能列表等)。
[0190]
如图所示,过程700可以包括接收(在740处)连接资源信息。在一些实施例中,可以从连接资源120请求和接收这样的信息。可以从应用程序目录590和/或相关数据元素中提取连接资源信息。
[0191]
在一些实施例中,传感器数据(和/或其他类型的数据)可以从(或经由)连接资源120接收。这样的传感器数据可以包括,例如,从gps组件、加速度计、陀螺仪、麦克风、温度传感器或其他环境传感器等接收和/或导出的数据。此类数据可通过网关100和连接资源120之间的任何可用通道发送。
[0192]
这种传感器(和/或其他)数据可以以各种适当的方式进行配置。例如,投影客户端570可以向网关100发送“输入能力”消息,该消息指示任何支持的传感器或其他数据源。网关100可以通过发送可以指定设备类型、协议和/或其他相关信息的“配置输入”消息来配置所需的输入设备。投影客户端570可以使用配置输入回复消息进行响应,该消息可以包括或指示接受或应用的输入数据源的设备id。网关100可以通过发送“控制输入”消息从而请求来自给定输入设备的输入数据流,该“控制输入”消息指示所需设备的id以及数据采样和/
或传输频率。网关100可以从投影客户端570(和/或连接资源120的其他组件)接收数据,并视情况将数据提供(或注入)到用户设备os或源应用程序中。
[0193]
传感器(和/或其他)数据可以通过外部数据输入或其他连接(如果可用)发送。许多用户设备110和/或连接资源120可以支持通过标准接口传输外部传感器数据。例如,ios通过iap附件协议提供gps数据。android允许通过标准的美国国家海洋电子协会(nmea)兼容设备(例如,通过蓝牙或串行数据总线)进行定位(如果启用了模拟定位)。网关100可以支持各种其他外部传感器数据输入。
[0194]
投影客户端570可以使用“发送输入事件”消息(和/或其他适当消息)在主数据通道上发送此类数据。传感器(和/或其他)数据可以由投影客户端570收集并通过“发送输入事件”消息集合发送到网关100。多个数据源可能同时发送数据。多条数据记录(来自相同或不同来源)可以合并为一条消息。网关100可以将接收到的数据注入或以其他方式提供给源应用程序545或os接口560。网关100可以通过os接口560模拟或仿效数据作为输入(例如,使用各种系统api),这取决于数据的类型。例如,对于android,可以通过具有“访问模拟定位(access_mock_location)”权限的“模拟位置提供程序”模拟gps位置。对于其他输入数据类型,网关100可以调用源应用程序545的各种api(如果可用)。
[0195]
过程700可以包括将源应用程序投影(在750处)到连接资源120。网关100可以有效地并且以低延迟捕获连接的用户设备110上的活动源应用程序545的当前屏幕。各种方法可用于捕获屏幕(和/或其他输出数据,包括内容和/或命令)并通过投影客户端570和/或其他适当的资源将捕获的数据投影到连接资源120。
[0196]
例如,可以使用各种显示技术,例如屏幕镜像。一些用户设备110和相关联的操作系统可以支持这种外部显示能力。例如,airplay、miracast、chromecast、高清多媒体接口(hdmi)、移动高清(mhl)和/或其他适当的功能可用于投影屏幕图像。在这种模式下,网关100可能不会捕获活动屏幕。相反,投影客户端570可以使用用户设备110支持的外部显示模式之一并通过例如用户设备界面575的外部显示通道接收当前屏幕图像。然后投影客户端570可以在连接资源120处显示接收到的内容。
[0197]
这种“标准”显示模式可能不提供额外处理捕获的屏幕数据或其他内容所需的功能。例如,应用识别或功能限制可能需要将捕获的数据提供给网关100的各种组件,例如识别引擎525或应用控制模块510。因此,在一些实施例中,投影客户端570可以发送内容(例如通过外部通道接收到的图像)到投影引擎520和/或其他组件进行分析。这样,更强大和有能力的用户设备110可以执行任何附加处理,从而允许连接资源120以更简单的要求和降低的硬件能力来操作。
[0198]
这种“扩展”标准显示模式可以在网关100和投影客户端570之间建立连接之后,通过从投影客户端570向网关100发送“显示能力”消息来启动。在一些实施例中,这种显示能力信息可以从诸如存储库530的资源中检索(和/或以其他方式检索或确定)。
[0199]
网关100可以向投影客户端570发送“显示请求”消息,以请求使用支持的外部显示通道。投影客户端570可以尝试打开到用户设备110的外部显示通道(例如,通过用户设备界面575)并且可以用指示连接状态的“显示响应”消息进行响应。
[0200]
投影客户端570可以向网关100发送“显示请求”消息,以请求网关100协助在用户设备110上启动外部显示模式。在某些情况下,用户设备110可以提供api(和/或其他适当的
资源)来启动外部显示模式。例如,chromecast可以通过“媒体路由选择器(mediarouteselector)”功能启动。在不提供这种资源的设备上,网关100可以向用户提供指令和/或启动系统设置菜单,以便用户完成配置和连接步骤。网关100可以用“显示响应”消息进行响应
[0201]
一旦投影客户端570建立到外部显示器的连接,投影客户端570可以通过“在外部显示状态改变”消息通知投影引擎520。投影引擎520可以向投影客户端570发送请求以发送屏幕图像,例如通过“捕获显示请求”消息。投影引擎520可以通过“捕获显示请求”消息请求暂停或恢复捕获图像的流式传输和/或以其他方式通过外部通道引导数据流式传输。
[0202]
投影引擎520可以在通过外部显示信道的视频(和/或其他数据)流之上(或以其他方式与之组合)发送要由投影客户端570显示的额外叠加视频流或图像。额外的视频或图像信息可以与例如指示投影客户端570应该如何以及在何处显示叠加的位置、大小和透明度信息相关联。
[0203]
在一些实施例中,这种叠加信息可用于应用程序或内容阻止。网关100可以对通过外部显示通道发送的内容执行应用程序阻止。这样的应用程序阻止可以包括,确定(例如,基于活动应用程序身份和来自应用程序目录的任何相关规则)网关100可以请求(例如,通过投影引擎520)停止或恢复屏幕投影。基于所使用的特定外部显示技术,投影客户端570可以停止来自用户设备110的投影或停止显示接收到的数据(但不中断来自用户设备的流式传输,以避免稍后当投影可以恢复时的用户交互)。投影客户端570可以通过“在外部显示状态改变”消息通知网关100投影状态的改变。类似地,投影引擎520可以将叠加图像流式传输到投影客户端570以限制投影应用程序的某些功能(或内容),或通过“显示区域请求”和“显示区域数据”消息将流式传输完全替换为来自用户设备110的信息。
[0204]
在一些实施例中,来自活动源应用程序的屏幕可以使用用户设备os的能力来捕获,并且可以从网关100实现应用程序或内容阻止。
[0205]
例如,iphone可能包含“重播工具包”功能。网关100可以注册屏幕广播扩展,该扩展(当用户允许时)可以捕获手机屏幕。应用程序捕获组件505可以接收捕获的屏幕图像并将捕获的屏幕图像发送到投影引擎520,投影引擎520可以对捕获的屏幕图像进行编码并将其发送到投影客户端570。投影引擎520可以将捕获的图像发送到识别引擎525和/或应用程序控制模块510以执行应用程序和/或屏幕识别、功能阻止和控制。网关100可以在后台操作以捕获屏幕,并处理、编码并将捕获的屏幕发送到投影客户端570。
[0206]
对于android手机,可以使用“媒体投影”api或类似资源来捕获手机屏幕。网关100可以向最终用户请求必要的许可并在后台捕获电话屏幕。应用程序捕获组件505可以接收捕获的屏幕图像并将捕获的图像发送到投影引擎520,投影引擎520可以编码捕获的图像并将其发送到投影客户端570。投影引擎520可以将捕获的图像发送到识别引擎525和/或应用程序控制模块510以执行应用程序和/或屏幕识别、功能阻止和控制。
[0207]
为了更大的灵活性和未来的可扩展性,网关100可以使用自适应逻辑模型来表示屏幕投影区域(或“投影”模型)。这种投影模型可以允许使用多个显示器或显示器内的多个区域。
[0208]
投影模型可以包括“显示”元素。这样的元素可以表示由源应用程序545控制的单个屏幕。连接资源120可以包括多个物理分离的显示器。例如,在车辆中,可能有多个显示
器,例如中央显示器(例如,主机)、仪表盘显示器、平视显示器、后部或乘客显示器等。可能存在逻辑显示器,例如同一物理显示屏上的两个独立区域。每个显示器都可以分配唯一的标识符。
[0209]
投影模型可以包括“显示区域”元素。这样的元素可以表示显示元素内的区域,在该区域内应该呈现来自网关100的数据。单个显示元素内可能有多个显示区域。显示区域的形状通常可以是矩形,但可以支持任何形状。显示区域可以重叠,并且它们的显示顺序可以通过指定元素堆叠顺序的z级别属性来控制。网关100可以使用“显示区域请求”消息配置显示区域,并使用“显示区域数据”消息流式传输实际数据。可以为每个显示区域分配唯一标识符(称为显示区域id)。显示区域id可能是唯一的,而与分配的显示无关。这样,一个显示区域id就足以识别显示区域数据消息中的每个数据帧应该呈现在哪里。
[0210]
投影模型可以包括“编码格式”元素。可以以投影客户端570可以支持的格式对要在给定显示区域显示的数据进行编码。可以支持多种编码格式。格式选择可以基于图像质量、速度和带宽要求的平衡。例如,显示数据可以作为位图数据提供(例如,通过h264视频、运动图像专家组(mpeg)或类似格式,例如mpeg-2、联合摄影专家组(jpeg)、运动jpeg、h265视频等。),或可以作为矢量数据提供。在给定的显示器上,可能有多个使用不同编码格式的显示区域。例如,一个显示区域可以显示从源应用程序捕获的屏幕,而另一个显示区域可以显示叠加(例如,具有文本消息和半透明矩形)以阻止捕获图像的某些区域。
[0211]
对于以位图格式提供的数据,一些标准在保持质量的同时提供高压缩率,并且许多用户设备110包括对此类格式的硬件加速支持。对于不支持此类格式的用户设备110,可以使用每个单独捕获的帧的更简单的位图表示。为了减少每帧的带宽要求,可以减少每个像素的颜色深度(例如,到rgb565)或转换到不同的颜色空间(例如,yuv422)并减少每种颜色所需的位数。可以使用快速压缩算法来压缩每一帧。此外,网关100可以仅对与前一帧的差异进行编码,然后压缩差异数据(例如,使用游程编码或其他压缩技术),而不是发送完整的图像帧。
[0212]
为了支持灵活的显示区域布置,投影客户端570可以支持呈现由网关100发送的矢量数据的显示区域。对于某些类型的图像或其他图形内容(例如,简单的统一色块、文本等)矢量数据是一种比任何位图格式更有效地表示帧数据的方式。数据可以用标准矢量格式表示,例如可缩放矢量图形(svg)、双重快速图形(dxg)等。在一些实施例中,数据可以使用协议缓冲区以专有格式表示存储记录。每条记录可以描述支持的图形基元之一并提供绘图参数。可以进一步压缩记录以减少带宽需求。
[0213]
为了建立屏幕投影会话,在网关100和投影客户端570之间建立连接之后,投影客户端570可以向网关100发送“显示能力”消息。网关100可以初始化显示,其中投影数据将通过发送“显示请求”消息集合来发送。如果支持所请求的显示(和/或相关数据格式),则投影客户端570可以发送包括成功结果代码和/或其他成功指示的“显示响应”消息。对于每个显示,可以通过配置显示区域的尺寸、类型和/或其他属性并从网关100向投影客户端570发送“显示区域请求”消息来初始化一个或更多个显示区域。如果请求的显示区域成功创建后,投影客户端570可以发回包含成功结果代码的“显示区域响应”消息。
[0214]
为了建立数据流,网关100可以使用诸如应用程序捕获模块505之类的模块开始屏幕捕获。捕获的图像可以被传递给投影引擎520。投影引擎520可以将捕获的图像屏幕传递
给应用程序控制模块510。投影引擎520可以为每个显示区域构建最终图像帧(其可以包括一个或更多个叠加)。投影引擎520可以通过“显示区域数据”消息将显示区域帧发送到投影客户端570。
[0215]
网关100可以基于当前可用的连接方法、连接资源120的能力和/或其他相关因素来选择最佳屏幕捕获模式。例如,当用户正在投影内容时,用户可以断开或连接用户设备110和连接资源120之间的电缆。结果,网关100可以更新或修改屏幕捕获方法。例如,连接资源120最初可能通过有线hdmi连接而连接到用户设备110。但是,如果电缆断开,网关100可能会切换到网关捕获模式并通过wi-fi连接发送内容,而不会中断用户体验。
[0216]
当使用本文描述的技术之一捕获应用程序屏幕时,网关100可能需要在后台工作,因为用户可能希望与应用程序库540中的源应用程序之一而不是与网关100相关联的应用程序交互。在一些实施例中,网关100可以执行能够在后台运行的后台伴随应用程序。ios可能对允许在后台运行的应用程序有更多限制性规则。ios的网关100可以使用外部附件协议(eap)连接到连接资源120,从而网关100能够在后台运行(并且不会被os终止)。这样的后台伴随应用程序和/或其他类似特征可以与本文描述的任何投影模式一起使用。如果主数据通道不是eap连接,则可以使用替代的低带宽通道(例如蓝牙)来发送偶尔的ping消息,以保持活动连接,并且网关100继续在后台运行。对于基于android的用户设备,通常没有这样的要求,因为后台服务可以不受限制地运行。
[0217]
应用程序投影可以利用各种显示消息,这些显示消息可用于配置和/或控制从用户设备110到连接资源120的视频流(和/或其他内容的供应)。下面提供了此类消息的各种示例。
[0218]
一个示例显示消息可以是“显示能力”消息,该消息可以由投影客户端570发送到网关100以指示连接资源120的能力。网关100可以用显示能力响应消息进行响应。每个显示能力消息可以包括诸如指示支持的外部显示技术的支持的外部显示技术元素之类的元素。这些技术可以表示为描述功能的字符串或整数标志的固定常量,例如设备是否支持airplay、miracast、chromecast、hdmi等。每个显示功能消息可能包括连接状态元素,该元素指示是否和/或用户设备100如何连接到连接资源120(例如,无线连接建立、hdmi电缆插入等)。每个显示能力消息可以包括显示特性元素,该元素可以包括或指示针对每个支持显示的显示特性列表。显示特性可以包括例如屏幕分辨率、颜色深度、支持的视频编码格式和/或其他相关信息。
[0219]
另一个示例显示消息可以是“显示请求”消息。这样的消息可以由网关100发送到投影客户端570,以便请求显示注册并开始源应用程序内容的外部显示投影。相同的消息类型可以由投影客户端570发送到网关100以请求用户动作。显示请求消息的接收者可以发送显示请求响应消息作为回复。显示请求响应消息可以包括请求id等元素,该请求id必须包含在显示请求响应消息中以标识显示请求消息,其中响应被发送到该显示请求消息。显示请求消息可以包括显示id元素,该元素指示对其作出该请求的显示的唯一id。如果显示请求消息是来自网关100的第一条消息,则显示id可以由网关100生成。显示请求消息可以包括显示描述元素,该显示描述元素可以识别为其分配了外部显示id的显示。当分配或生成新的外部显示id时,可以填充显示描述字段。显示请求消息可以包括指示要作为请求的一部分执行的动作的动作元素。可能的操作包括“连接”(请求客户端将显示器连接到用户设
备110并开始投影)、“断开连接”(请求客户端停止投影并断开显示器)、“请求用户操作”(请求接收方显示提示消息以帮助用户建立连接)、“显示消息”(请求接收方显示特定消息,例如用户指令)等。请求用户操作字段可以包括表示一种操作(例如,“配对设备”、“打开wi-fi”、“连接usb/hdmi电缆”等)的至少一个代码。如果显示消息动作(和/或其他适当的标准)指示,则显示请求消息可以包括指示接收方要显示的可选消息的消息元素。
[0220]
另一个示例显示消息可以是“显示响应”消息。这样的消息可以作为对显示区域请求消息的响应而被发送。显示响应消息可以包括诸如请求id(匹配收到的相应显示区域请求消息的请求id)、结果(描述请求动作的结果并且可以包括预定义的结果常量,例如“开始”、“已停止”、“需要用户操作”、“失败”等)和错误(包括与失败请求相关的错误信息)。错误字段可以是包括错误代码和/或人类可读错误消息的复合字段。
[0221]
另一个示例显示消息可以是“在外部显示状态改变”消息。当外部显示器的状态已经改变时,可以由投影客户端570或网关100发送这样的消息。投影客户端570可以提供显示器的当前状态。网关100可以发送外部显示器状态改变消息以向投影客户端570查询当前状态。外部显示器状态改变消息可包括相关显示器的外接显示器id等元素。外部显示器状态改变消息可以包括显示器描述元素(由投影客户端570发送的可选字段)。仅当首次启动显示或请求显示状态时才可以发送显示描述字段。显示描述字段可以是复合值,并且可以包括子元素,例如选择的模式(例如,流技术)、屏幕分辨率、每秒帧数(fps)、传输方法等。外部显示状态改变消息可以包括状态元素,状态元素可以指示外部显示器的状态。这种状态可以被限制为一组预定义的常量值,例如“开始”、“停止”、“暂停”、“恢复”、“查询”等。“查询”状态可以用于请求状态更新。
[0222]
另一个示例显示消息可以是“捕获显示”请求消息。这样的消息可以由网关100发送以请求投影客户端570管理来自给定外部显示器的视频帧的捕获。投影客户端570可以用“捕获显示”响应消息进行响应。每个捕获显示消息可能包括请求id(标识请求的唯一值)、外部显示器id(应执行此捕获请求的显示器的标识符)、请求的操作(例如,“开始”视频捕获、“停止”视频捕获等)、捕获分辨率(例如,应捕获图像的分辨率)、编码类型(指示应发送图像的视频编码格式,例如h.264、压缩图像、移动jpeg等)、每秒帧数(或“fps”,应发送图像的频率)和带宽(用于结果流的最大带宽)。
[0223]
另一个示例显示消息可以是“捕获显示响应”消息,其可以响应于捕获显示请求消息而发送。捕获显示响应消息可能包括请求id(匹配相应捕获显示请求的id)、结果(描述请求操作的结果,并且可能包括预定义的结果常量,例如“开始”、“停止”、“失败”等)和错误(包括有关失败请求的错误的信息,并且可能是包含错误代码和人类可读错误消息的复合字段)。
[0224]
另一个示例显示消息可以是“捕获外部显示帧”消息。每次为已被配置为通过捕获显示请求消息捕获帧的外部显示器捕获帧时,投影客户端570可以发送这样的消息。可以通过捕获显示请求消息来配置捕获外部显示帧消息的频率。捕获外部显示帧消息可以包括诸如外部显示id(标识从其捕获屏幕的显示器)和帧数据(在捕获显示请求消息中指定的格式和尺寸的给定屏幕帧的数据)等元素。
[0225]
另一个示例显示消息可以是“显示区域”请求消息。网关100可以使用这样的消息来创建、显示、隐藏、破坏和/或以其他方式修改给定显示器的显示区域。投影客户端570可
以用指示成功或失败的显示区域响应消息进行响应。显示区域请求消息可能包含请求id(请求的唯一标识符)、显示区域id(显示区域的唯一标识符,对于创建新区域的请求来说应该是新的和唯一的,以匹配先前创建的显示区域的id)、动作(定义要执行的动作)和显示区域描述(用于新生成的显示区域)。
[0226]
动作元素可以从诸如“创建”(请求接收者创建新的显示区域,在这种情况下应填充显示区域描述字段)、“展示”(展示指定的显示区域)等元素中选择、“隐藏”(隐藏指定显示区域)、“销毁”(销毁之前创建的区域,也可以隐藏该区域)、和“查询”(应用程序请求指定显示区域的最新状态)等元素中选择。在销毁请求之后,显示区域id可能不再有效,并且可以重新用于新的显示区域。
[0227]
显示区域描述元素可以定义新显示区域的参数。仅应在创建动作期间填充显示区域描述字段。显示区域描述元素可以包括子元素,例如“显示id”(表示应创建新显示区域的显示器的id)、“位置”(表示显示区域的位置和/或大小)、“z级别”(表示显示区域的z级别)、“编码格式”(表示数据的预期编码格式)、透明度(表示该区域的任何透明度信息,例如阿尔法混合)和/或其他适当的子元素。
[0228]
另一个示例显示消息可以是“显示区域”响应消息。这样的消息可以由投影客户端570作为对显示区域请求消息的响应而返回。显示区域响应消息可能包括请求id(与相应显示区域请求的请求id匹配)、状态(指示请求的显示区域的当前状态,其中状态可以从离散值中选择,例如“可见”、“隐藏”、“销毁”、“失败”(如果在尝试创建显示区域时出错)和“错误”(包括有关导致请求失败的错误的信息,并且可能是一个复合字段,该复合字段包含错误代码以及人类可读的错误消息))等元素。
[0229]
另一个示例显示消息可以是“显示区域数据”消息。网关100可以针对给定显示区域的每一帧数据发送这样的消息。显示区域数据消息可以包括诸如显示区域id(为其提供数据的显示区域的标识符)和帧数据(要显示的单个帧的数据)等元素数据。可以以显示区域请求消息中指定的编码格式来提供帧数据。
[0230]
该过程可以包括在网关100处接收(在760处)ui事件信息。可以从连接资源120接收这样的ui事件信息。ui事件信息可以包括与各种类型的ui元素相关的信息,以各种适当的格式提供。例如,ui元素可能包括与离散值或函数相关联的按钮。作为另一示例,ui元素可以包括能够捕捉一个或更多个触点和/或触点的移动的触摸屏。
[0231]
如图所示,过程700可以包括将ui事件信息应用(在770处)到源应用程序。可以利用各种输入事件数据处理和/或处理算法来接收和/或识别这样的ui事件信息,如本文所述。ui事件信息可以通过使用dccp发送的消息集合应用于源应用程序。网关100可以分析接收到的ui事件信息,并通过消息集合或通过可用通信通道发送的其他数据将该信息应用于源应用程序。
[0232]
dccp可包括可用于配置连接资源120的输入能力并且可选地用于控制用户设备110(和相关联的源应用程序)的各种消息集合。例如,投影客户端570可以向网关100发送“输入能力”消息,以描述与支持的输入能力相关的连接资源120的能力。网关100可以用它自己的输入能力消息进行响应。
[0233]
输入能力消息可以包括诸如唯一标识请求的请求id之类的元素。相应的响应应包含相同的请求id。输入能力消息可以包括提供输入设备列表的输入设备元素。对于输入设
备列表中的每个输入设备,可以包括或提供定义了输入控件类型的“类型”(例如,触摸屏、键盘、硬件按钮、操纵杆等),和定义了通信接口的“接口”(例如,hid、ipod out等)。该接口可以描述外部用户输入控制通道(例如,usb上的hid)和/或通过主数据通道(例如,wi-fi上的tcp/ip)发送的数据。输入能力消息可以包括提供数据设备列表的数据设备元素。对于数据设备列表中的每个数据设备,诸如定义数据设备类型(例如gps、位置提供程序、温度传感器、加速度计、陀螺仪等)的“类型”之类的信息、指定连接方法的“接口”(例如,数据消息、hid、btnmea、ipod位置等)和/或“支持的数据输入”元素,该“支持的数据输入”元素指定将提供哪种类型的数据(以及以哪些单位)可能包括在内。可以使用诸如日内瓦车载信息娱乐(genivi)车辆信号规范(vss)之类的标准。
[0234]
作为另一示例,“配置输入”消息可用于配置一个或更多个输入设备和/或输入区域。配置输入消息最初可以由网关100发送。相同的消息可以作为响应由投影客户端570返回。
[0235]
配置输入消息可以包括唯一标识请求的请求id元素。相应的响应应包含相同的请求id。配置输入消息可以包括定义源动作区域的源动作区域元素。源动作区域元素可以包括输入区域记录的列表,其中每个输入区域记录可以包括包含输入区域的唯一标识符的“输入区域id”字段,指示区域形状的“形状”字段,指示输入区域类型的“类型”,以及包括与给定输入区域关联的设备的可选“设备id”字段。设备id可以由投影客户端570在配置输入响应消息中发送。配置输入消息可以包括定义目标动作区域并且可以包括诸如形状、方向等属性的目标动作区域元素。配置输入消息可以包括提供键盘输入设备列表的键盘设备元素。对于列表中的每个设备,可能包括设备id和类型。设备id可以由网关100分配。键盘设备元素可以包括“参数”字段,该“参数”字段包括键盘设备的参数,例如启用哪些按钮。配置输入消息可以包括提供数据输入设备列表的数据输入设备元素。对于列表中的每个数据输入设备,可以指示或包括诸如设备id(网关100分配的设备id)和数据输入(提供应由设备发送的数据输入的列表)等信息。对于每个数据输入,网关100可以分配数据输入id,该id可以稍后用于发送输入数据。
[0236]
dccp可以包括可以由网关100发送以启动、停止和/或以其他方式控制给定输入设备的“控制输入”消息。命令的状态可以通过外部输入通知消息获得。
[0237]
控制输入消息可以包括控制区域元素,该元素包括控制输入区域的列表。
[0238]
控制输入区域列表中的每个元素可能包括诸如“输入区域id”(先前配置的输入
[0239]
区域的id,除非使用“校准”动作)、“设备id”(用于校准动作的设备的id)、“动作”(指定要执行的动作,可以从一组离散值中选择,例如“开始”、“停止”或“校准”)和“校准参数”(指定校准的参数,可能包括诸如步长、比例、对接模式、例如“最近”或“左上角”的对接位置,等参数)等字段。
[0240]
控制输入消息可以包括数据输入设备元素,该元素指定要启动和/或停止的数据输入设备的列表。对于列表中的每个数据输入设备,可以包括诸如设备id(先前配置的设备的id)、动作(要为设备执行的动作类型,例如“开启”或“停止”)和参数(提供可能包括设备或每个设备输入的额外参数,例如数据收集频率、任何转换等)等信息。
[0241]
dccp可以包括“发送输入事件”消息,该消息可以由网关100发送以请求投影客户端570使用给定设备执行指定的输入事件(其中设备id之前应该已经通过控制输入消息进
行配置)。发送输入事件消息可用于通过主数据通道从投影客户端570向网关100发送事件(无论是输入事件还是数据事件)。
[0242]
发送输入事件消息可以包括“输入事件”元素,该元素包括要发送的事件列表,其中列表中的每个条目可以包括唯一标识事件的“事件id”字段,指定要发送的事件类型的“事件类型”字段(例如,移动光标、鼠标上移、鼠标下移等),以及定义事件位置的“位置”字段(其中位置可以是绝对的或相对的)。发送输入事件消息可以包括“数据事件”元素,该元素包括数据事件列表,其中列表中的每个条目可以包括唯一标识先前分配有控制输入消息的输入设备的“数据输入id”字段,指示何时收集或接收数据的“时间戳”,以及包含实际数据有效负载的“数据”字段。
[0243]
dccp可以包括“外部输入通知”消息。当外部输入事件已经在连接资源120上执行并通过外部用户输入发送时,可以由投影客户端570发送这样的消息。该消息可以由网关100接收。外部输入通知消息可以包括(如果在发送输入事件消息中请求)唯一标识该事件的事件id元素。外部输入消息可以包括指示事件类型的事件类型元素(例如,“输入开始”、“输入停止”、“向上”、“向下”、“单点触摸”、“多点触摸”等)。外部输入通知消息可以包括区域id元素,该区域id元素包括事件发生的区域的唯一标识符,包括生成事件的输入设备的唯一标识符设备id元素,以及指示何时发生事件(针对投影客户端570指定)的时间戳元素。
[0244]
用户输入(和相关联的ui事件信息)可以使用各种模式来处理,包括外部用户输入模式和网关用户输入模式。网关100可以基于当前可用的连接通道、连接资源120的ui能力和/或其他相关因素来选择最佳的用户输入处理模式。用户输入处理可以尝试基于从连接资源120接收的ui信息来控制源应用程序545,就好像最终消费者正在与用户设备110直接交互一样。
[0245]
对于依赖于诸如鼠标、触摸屏(单点或多点触摸)、触控笔、数字化仪和/或其他类似类型的设备的指点设备的输入控制,网关100可以使用或实施在连接资源120和用户设备110上的关联输入区域的灵活配置。上面参考图2描述了这种灵活配置的区域的一个示例。.
[0246]
回到过程700,控制源应用程序545的一种方式是使用任何标准(外部)可用控制路径。这种方法可以称为“外部用户输入控制”。一个或更多个外部控制通道可以包括在用户设备界面575处(或由其提供)。一个这样的通道是最初为usb引入的hid标准,现在支持各种通信路径,例如蓝牙、串行、无线个域网等。hid通道可以支持各种不同类型的设备。用户输入设备(例如,连接资源120)可以向主机呈现hid描述符。hid描述符可以包括字节数组,该字节数组描述设备使用的数据包结构,指示设备支持的数据包数量,数据包的大小,数据包中每个字节和位数的用途,和/或其他相关信息。用户输入设备可以在符合之前发送的hid描述符的后续hid报告记录中发送实际数据。
[0247]
连接资源120通过可以包括在用户设备界面575中(或由其实现)的设备控制模块,能够向用户设备110(和/或相关联的源应用程序)模仿各种输入设备类型。
[0248]
一个示例输入设备类型是“绝对指点设备”。此类设备可以包括在用于描述单点或多点指点设备(例如数字化仪、触控笔、单点或多点触控板等)的hid类别中。此类设备的主要特征是连接资源120可以为单点和/或多点触点发送绝对坐标,从而在例如用户设备110的主屏幕上模拟触摸事件。
[0249]
在一些实施例中,可以通过在用户设备界面575处生成或以其他方式准备hid描述
符来初始化绝对指点设备。描述符可以定义通过hid报告或消息发送的hid坐标的尺寸或限制。用户设备界面575可以通过外部控制通道(例如,通过usb)和/或通过其他可用的通信通道将hid描述符发送到用户设备110。
[0250]
如果投影客户端570接收到指点设备输入事件数据(例如,触摸屏、鼠标、操纵杆、外部触摸板和/或其他此类输入事件数据),则可以生成绝对指点设备输入数据。例如,投影客户端570可以评估接收到的坐标以确定坐标是否位于配置输入消息中定义的任何输入区域内。如果有多个触点(与同一事件相关)位于不同的区域内,则事件数据可能会根据区域的位置由不同的处理程序处理。例如,如果触点在第一输入区域中发起并移动到第二输入区域中,则可以忽略该信息。如果触点在第一输入区域中发起并保持在第一输入区域内,则事件信息可以由与第一输入区域相关联的事件处理程序来处理。
[0251]
如果坐标位于外部输入区域内,则可以将事件信息转发到用户设备界面575,用户设备界面575可以转换输入坐标(针对每个关联的触点),通过外部控制通道或其他可用通信路径发送hid报告(基于用户设备110的能力,可以包括每个触点的多个报告或条目),并向网关100发送“外部输入通知”消息。输入坐标的转换可以包括将来自投影客户区220的接收输入坐标缩放和转置到目标动作区210坐标,然后缩放并转换为hid坐标(考虑到配置输入消息中报告的屏幕方向)。
[0252]
另一个示例输入设备类型是“相对指点设备”。这样的设备可以包括在用于描述诸如鼠标、跟踪板、跟踪球等的单个指点设备的hid类别中。这些类型的设备的主要特征是资源120可以发送在用户设备110的主屏幕上光标移动的相对坐标。相关的“点击”类型事件(用于具有各种不同配置的一个、两个或多个按钮)可以作为hid报告的一部分发送。
[0253]
如果连接资源120使用触摸屏作为输入设备,并且需要通过相对指点设备接口控制用户设备110,则必须将绝对坐标转换为相对光标移动和点击。为了实现这样的转换,连接资源120必须了解相关指点设备的特性,例如步数、当前位置、方向等。可以通过校准过程发现该信息。在一些实施例中,为了保证从错误中恢复,网关100可以利用光标对接。
[0254]
校准过程,通过该校准过程,连接资源120可以发现用户设备110支持的指点设备的各种特性,例如光标步长(指示光标在屏幕上通过hid移动一步的步数)。每个x和y轴可能有单独的步长值。在一些实施例中,可以基于移动速度来指定步长对值(如果存在用户设备110支持的加速度曲线)。校准过程可能会进一步发现诸如光标的当前位置和对接步数(应通过hid发送以对接光标的相对步数)等特征。可以为每个对接角指定不同的步长值。
[0255]
通常可以为每个新连接的用户设备110和/或当用户设备110的os或设置更新时执行校准。为了确定是否需要校准,网关100可以确定当前校准参数是否有效。这种校准检查可以包括从网关100向用户设备110显示全屏(例如,校准检查屏幕)并且可以开始从全屏捕获所有输入事件。网关100可以通过向投影客户端570发送包括当前校准参数的控制输入消息来启动所需的指示设备。投影客户端570可以将消息传递给用户设备界面575,用户设备界面575可以存储设备参数并启动hid设备。投影客户端570可以通过发送提供零(例如,0,0)移动偏移和按钮按下状态的发送输入事件消息来检测光标位置。用户设备界面575可以发送一个或更多个hid报告,指示零移动和向下/向上按钮状态。模拟的点击可以通过校准检查屏幕在网关100处接收。网关100可以存储与模拟点击相关联的初始位置。
[0256]
网关100可以通过一个或更多个发送输入事件消息发送一系列指点设备时刻和点
击事件。网关100可以发送落在校准检查屏幕尺寸内的绝对坐标。用户设备界面575可以基于接收到的发送输入事件消息通过hid通道(例如,外部控制通道)发送一个或更多个hid报告。绝对坐标可以(基于当前校准参数)转换为相对事件集合。网关100可以从校准检查屏幕接收和捕获点击,并将点击与输入事件相关联。网关100可以基于接收到的光标位置与基于当前校准参数的预期位置之间的差异来计算错误分数。基于错误分数,网关100可以确定校准是否有效(例如,如果错误分数小于指定阈值)。如果不需要校准,则投影客户端可以开始发送ui事件数据。
[0257]
校准过程可以是网关100和投影客户端570之间的协作。为了开始校准过程,网关100可以向投影客户端570发送“控制输入”消息,该消息将与当前hid设备相关联的输入区域设置为“校准”状态。用户设备界面575可以通过外部控制通道或其他适当的通道将相关指点设备的hid描述符发送到用户设备110。用户设备界面575可以向网关100发送包括输入区域id和指示校准过程已经开始的状态的外部输入通知消息。
[0258]
网关100可以在用户设备110上显示全屏(例如,校准屏幕)并开始从校准屏幕捕获所有接收到的事件。对于ios和android等操作系统,有一些api允许第三方应用程序进入全屏模式。可能存在网关100无法接收hid输入的系统区域。网关100可以检测这些区域并相应地管理校准过程。
[0259]
网关100可以通过发送输入事件消息来发送校准事件。例如,网关100可以发送不同的校准序列,例如[8,-8],[-8,8],[16,-16],[-16,16],[24,-24],[-24,24],[32,-32]和[-32,32],其中每一对代表点击事件跟随的沿x和y轴的相对运动(例如,[《偏移x》,《偏移y》])以启动网关100的检测。在每个事件之后,投影客户端570可以用外部输入通知消息进行响应。
[0260]
网关100可以在校准序列期间从校准屏幕捕获和记录事件。网关100可以过滤掉任何意外事件。例如,最终用户可能会不小心与用户设备屏幕交互并生成输入事件。可以基于各种相关标准过滤意外或不正确的事件。例如,特定的按钮按下可用于指示数据与校准点击相关联(例如,鼠标中键点击,或一系列点击,如左击-右击-左击)。作为另一个示例,可以使用特殊的向上/向下点击序列来指示点击是否与校准相关联。这样的序列可能很难意外重新创建(例如,每个要检查的点都可能有一个向下/向上/向下/向上序列)。作为又一个示例,捕获的事件可以与从投影客户端570接收到的通知匹配。网关100可以记录接收到的屏幕点(在用户设备屏幕坐标中)并将接收到的屏幕点与模拟事件相关联。网关100可以存储指示何时接收到事件的时间戳。
[0261]
网关100可以基于记录的点计算校准特性。可以通过确定相对于输入设备使用提供的输入点生成的移动屏幕指针(从屏幕点)的相对移动来计算每个坐标轴的步长。如果基于事件的速度有不同的步长,那么它们将被记录为该速度的单独步长。当前光标位置可以从最后记录的屏幕点中提取。可以基于估计的步长和用户设备屏幕的大小来计算对接步长。
[0262]
网关100可以通过包括校准设备的设备id和校准参数的控制输入消息将校准特性发送到投影客户端570。投影客户端570可以应用校准参数并为未来的会话存储这些参数。网关100可以执行校准检查,并且如果校准检查不成功,则重试校准,其中重试的次数可以是可配置的。
[0263]
相对指点设备面临的一个挑战是,这些设备旨在控制最终用户可以看到的光标的移动。因此,目标设备不会通过hid接口报告实际位置。投影客户端570需要跟踪光标位置。可以基于提供的输入hid报告和先前计算的校准参数来计算预期的光标位置。但是,可能会出现错误,并且实际光标位置可能不正确。例如,在校准过程中计算的移动步长可能会有一个小的误差。即使是相对较小的误差也可能在几次移动后累积,最终估计的光标位置和实际位置可能会出现很大差异。
[0264]
为了克服此类错误,网关100可以使用光标对接来实施纠错机制。对接可能涉及将光标移动到已知位置,因此投影客户端570能够确认光标位置并从那里执行准确的相对移动。对接依赖于这样一个事实,即过度的指针移动到屏幕的一个角落会导致光标“卡”在那个角落,从而导致一个已知的位置。
[0265]
光标可以对接在屏幕的四个角中的任何一个。为了使光标对接,投影客户端570可以发送对接命令集合,例如等于或超过用户设备屏幕尺寸的相对移动事件。为了解决校准数据中的错误,计算出的屏幕尺寸可能会乘以2(或其他一些适当的因子),以确保光标对接在角落。
[0266]
在某些情况下,如果屏幕分辨率很高,发送太多点可能会降低性能。在这种情况下,可以调整乘法因子以减少过度运动(例如,通过将因子从二变为十分之一和十分之二)。作为正常事件发送序列的一部分,可以由投影客户端570执行对接。
[0267]
可以使用各种对接模式。这样的对接模式可以包括“点击前”模式,其中投影客户端570可以首先对接光标,然后从已知的对接位置将光标移动到期望的位置。这种方法可确保最终位置是最准确的。缺点是最终用户可能会看到光标移动到对接位置并返回。
[0268]
对接模式可以包括“点击后”模式,其中对接是在接收到点击事件之后执行的。这种方法减少了点击前光标的视觉移动。如果存在投影客户端570无法检测到的其他移动光标的方法(例如,用户可能与用户设备110交互),则估计的下一个事件的光标位置可能不准确。
[0269]
对接模式可以包括“在不活动之后”模式,其中可以在指定的不活动持续时间之后执行对接。这种方法减少了光标往返对接点的视觉移动。与点击后模式类似,如果存在投影客户端570无法检测到的其他移动光标的方法,则下一个事件的估计光标位置可能不准确。
[0270]
投影客户端570可以基于经由控制输入消息从网关100接收的信息来选择对接模式和目标位置。可以参考特定角落或最近的对接位置来执行对接。
[0271]
一旦指点设备已被校准和/或验证以正确工作,网关100可以将诸如从连接资源120接收的触摸事件信息的ui事件信息模拟到用户设备110作为相对指点设备事件信息。在使用期间,投影客户端570可以接收或识别指点设备输入事件(例如,触摸屏、鼠标、操纵杆、外部触摸板和/或其他此类输入)。
[0272]
投影客户端570可以确定接收到的坐标是否落在通过配置输入消息接收到的任何输入区域中。如果有多个触点落入不同的区域,则这些点可能由不同的处理程序根据区域进行处理。如果触点在第一区域中发起并移动到第二区域,则可以忽略关联的事件信息。如果触点在特定区域中被启动并保持在该区域中,则关联的事件信息可以由特定区域的对应处理程序来处理。
[0273]
如果接收到的输入坐标落在外部输入区域内,则事件信息可以转发给用户设备界
面575的设备控制模块的事件。设备控制模块可以转换接收到的坐标,对于每个匹配的触点,通过从投影客户端区域坐标到目标操作区域坐标进行缩放和转换,然后缩放并转换为hid坐标(考虑到配置输入消息中报告的方向)。
[0274]
设备控制模块可以基于配置输入设置执行对接。设备控制模块可以根据当前输入位置和目标屏幕光标位置计算必要的相对移动事件。相对移动计算可以使用通过配置输入消息接收的校准参数。设备控制模块可以通过例如外部控制通道发送hid报告(其中每个触点可能与多个报告相关联)。设备控制模块可以向网关100发送外部输入通知消息。
[0275]
除了或代替触摸屏或其他基于触摸的输入,hid元素可以包括其他输入类型,例如键盘、游戏控制器等。这些元素可以是或包括物理和/或虚拟组件。例如,一些连接的设备120可以包括物理键盘或小键盘,而其他这样的设备可以通过触摸屏显示器呈现键盘或类似资源。
[0276]
当键盘hid可用时,投影客户端570可以通过输入能力消息报告对这种键盘hid的支持。结果,网关100可以请求激活键盘以接收输入字段的数据或模拟源应用程序545上的某些动作。在激活键盘之前,网关100可以通过发送配置输入消息来配置键盘设备。
[0277]
例如,当源应用程序545中的输入字段需要数据时,可以激活键盘hid。例如,可能要求用户输入搜索词、用户名、密码或类似信息。网关100可以自动检测文本输入字段具有应用程序焦点(例如,基于从源应用程序和/或os接口接收的信息,如果有的话)并通过发送控制输入指令,为之前配置的键盘设备指定设备id,来指示投影客户端570激活键盘hid。结果,投影客户端570可以使用连接到连接资源120的外部键盘或显示屏幕虚拟键盘。从键盘接收到的任何按钮按压信息都可以通过外部控制通道发送到用户设备110。
[0278]
键盘hid可用于模拟或仿效活动源应用程序545处的各种动作。例如,键盘hid可模拟“后退”按钮、媒体播放/暂停、下一个/上一个等。网关100可以通过控制输入消息启动键盘hid并仅指定要支持的键码(例如,与鼠标、键盘等消费者控制设备相关联的键码)来启动此类仿效。
[0279]
当需要基于接收到的ui事件信息模拟特定命令时,网关100可以发送输入事件消息,该输入事件消息指定用于命令模拟的的虚拟键码。作为消息的结果,设备控制模块可以发送带有密钥代码的所需hid报告。设备控制模块可以将密钥代码转换为活动hid设备理解或识别的值。
[0280]
hid协议是高度可配置的,并且可以使用该协议提供许多不同类型的输入。消费者控制输入设备(如游戏控制器)的处理方式类似于上述键盘、绝对和相对指点设备。
[0281]
任何新的输入设备都可以通过输入能力消息轻松添加到系统中,其中投影客户端570可以报告可用的hid能力,并且网关100可以通过配置输入消息配置这些设备,然后通过控制输入消息开始使用特定的设备。与连接资源120的用户交互可以作为hid事件发送,或者网关100可以通过发送输入事件消息指示投影客户端570模拟特定的hid事件。
[0282]
除了hid之外,用户设备110还可以支持其他专有或开放的外部输入方法,例如ipod控件、经由音频接口的控制等。与上述那些类似的操作可以用于这些接口。
[0283]
除了或代替外部用户输入,对源应用程序570的用户输入可以通过网关100提供。根据用户设备110的能力、版本和限制,可以有不同的api提供给允许模拟输入事件的第三方应用程序。例如,如果向网关100提供了必要的权限,则可以使用各种android第三方应用
程序通过辅助功能服务(例如,使用可访问性交互客户端类)来模拟键盘和触摸事件。如果网关100具有系统权限(例如,root访问),网关100可以通过与os的输入子系统交互来模拟输入事件。
[0284]
为了从网关100发送输入事件,投影客户端570可以接收或识别指点设备输入事件(例如,触摸屏、鼠标、操纵杆、外部触摸板和/或其他此类输入)。投影客户端570可以确定接收到的坐标是否位于通过配置输入消息定义的任何输入区域中。如果有多个触点落入不同的区域,则不同的点可以由与不同区域相关联的不同处理程序来处理。如果触点在第一输入区域发起,并移动到新的输入区域,则可以忽略输入事件信息。如果触点在特定区域中启动并保持在特定区域内,则触点可以由与特定区域相关联的处理程序处理。
[0285]
如果坐标位于网关输入区域内,则可以在发送输入事件消息中将事件数据发送到网关100。响应于发送输入事件消息,网关100可以使用支持的通道和/或算法之一将事件信息发送到源应用程序545。
[0286]
图8示出了用于识别由用户设备110执行的源应用程序的示例过程800。源应用程序识别在上面参考图3进行了描述。每当启动新应用程序时(例如,基于指示源应用程序启动、屏幕输出改变和/或其他相关标准的当前应用程序消息的生成或接收),都可以执行过程800。在一些实施例中,过程800可以由网关100执行。
[0287]
如上所述,一些用户设备操作系统可以提供接口或其他资源,网关100可以通过该接口或其他资源接收活动的或当前的应用程序信息。当没有这样的接口可用和/或实现与os接口提供的那些不同的和/或附加的识别算法时,可以执行过程800。此外,过程800可用于过滤通过连接资源120提供的内容。例如,在某些操作模式(例如,与移动的车辆相关联的模式)期间,可过滤或阻止显示视频或其他分散注意力的元素的内容区域。
[0288]
如图所示,过程800可以包括接收(在810处)源应用程序媒体输出。这样的输出可以包括例如屏幕图像集或其他视频内容、音频内容和/或其他媒体内容。这样的内容可以通过诸如应用程序捕获元素505之类的组件来接收。
[0289]
过程800可以包括选择(在820处)媒体输出部分以供分析。可以以各种适当的方式选择或以其他方式指定这些部分。例如,如果以视频流格式接收数据,则可以选择每个完整帧进行分析。作为另一个示例,一些源应用程序可能包括图形用户界面(graphical userinterface,gui)元素,例如可以以各种方式指示的显示窗口,具体取决于接收到的数据的格式。在这种情况下,可以选择与视频显示或其他活动内容相关联的区域进行分析,而可以忽略与文本、静态图像或其他此类元素相关联的区域。作为另一示例,如上所述,各种区域可用于gui元素、徽标或其他此类内容。
[0290]
该过程可以包括使用可用的识别模型(和/或其他适当的方式)分析(在830处)选定的媒体输出部分。识别模型可以定义元素,例如要分析的输出部分的位置、颜色配置文件、匹配的图像元素和/或其他适当的信息。此外,每个识别模型都可能与特定的源应用程序相关联(如应用程序id所示)。
[0291]
如上所述,识别模型可以指示各种图像比较算法,包括比较技术,例如基于颜色箱的分析(如参考颜色匹配所述)、逐像素比较(例如,当多个变化的像素超过阈值或比率),感知散列算法(例如,使用散列生成各种媒体形式的片段或指纹的算法),基于阈值的场景检测(例如,当前屏幕的强度和/或亮度可以与指定的阈值进行比较,并且当强度和/或亮度超
过阈值时可以触发分析)和/或其他适当的直接图像比较算法。
[0292]
如图所示,过程800可以包括确定(在840)应用程序是否被识别。可以基于相关识别模型指示的评估标准(例如,最小匹配分数或其他度量阈值)做出这样的确定。如果应用程序被识别,则该过程可以包括提供(在850)应用程序id和/或其他适当信息,其中可以从用于识别源应用程序的匹配模型中检索应用程序id。
[0293]
该过程可以包括(在860处)提供默认标识(如果可用)或以其他方式指示未识别出匹配的应用程序。这样的默认应用程序id可以与应用程序或内容的类型相关联。例如,一些实施例可以包括与提供全屏视频输出的源应用程序相关联的默认视频应用。这样的默认应用程序可以与各种相关的限制(例如,车辆行驶时没有视频)和/或参考应用程序目录描述的其他属性相关联。
[0294]
图9示出了用于在连接资源120处接收命令和/或其他ui事件信息并且在用户设备110处应用接收到的命令的示例过程900。这样的ui事件可以通过外部控制通道接收或作为所描述的网关用户输入来接收。该过程可以在网关100和投影客户端570之间建立连接时执行。在一些实施例中,过程900可以由网关100执行。
[0295]
如图所示,过程900可以包括从连接资源120接收(在910)ui事件信息。这种事件信息可以包括各种类型的事件数据,这取决于可能与各种输入区域相关联的各种ui特征或属性(例如,是使用绝对还是相对指点)。事件信息可以包括与多个事件和/或子事件(例如,点击并拖动操作中包括的点击事件)相关的信息。
[0296]
过程900可以包括从接收的ui事件信息中提取(在920)事件属性。例如,此类事件属性可以包括坐标集、动作指示符(例如,“向下”、“向上”等)和/或其他适当信息(例如,键盘按钮或键的标识)。
[0297]
该过程可以包括基于可用的用户设备界面和/或其他适当的标准来转换(在930)事件属性。例如,绝对坐标可以转换为相对移动信息。作为另一个示例,动作位置可以从诸如投影目标区域230的资源映射到目标动作区域210(反之亦然)。
[0298]
如图所示,过程900可以包括在用户设备处仿效(在940)事件以便将ui事件应用到源应用程序。如本文所述,这种模拟可以利用各种消息传递算法和/或元素,和/或模拟或仿效事件数据的其他适当方式。
[0299]
图10示出了用于基于连接资源120的操作模式过滤应用程序内容的示例过程1000。只要网关100向投影客户端570提供内容,就可以执行该过程。在一些实施例中,可以由网关100执行过程1000。
[0300]
除了检测活动源应用程序之外,在一些实施例中,可以检测应用程序的当前屏幕或模式。这种检测可用于限制某些功能或ui元素,具体取决于连接资源120(和/或相关元素,例如车辆)的操作模式。例如,如果连接资源120是车载显示单元并且车辆正在移动,则在许多国家,驾驶员分心法规禁止该单元显示移动图像(例如视频)或允许用户使用键盘输入文本。过程1000可以检测是否正在显示此类内容并阻止此类内容或阻止整个应用程序的投影。对于其他行业和用例,可能需要或以其他方式实施类似的应用程序限制。
[0301]
如图所示,过程1000可以包括接收(在1010处)连接资源传感器数据,如果可用的话。根据连接资源120(例如,车辆)的类型,各种不同类型的传感器数据可能是可用的和/或相关的。例如,可以基于从(可能包括在连接资源120处或与连接资源120相关联的)gps元
件、加速度计、陀螺仪等接收的信息来提供(或计算)运动数据。
[0302]
过程1000可以包括接收(在1020)用户设备传感器数据。除了和/或代替连接资源传感器数据,一些实施例可以从用户设备接收传感器数据,例如定位或移动信息。
[0303]
该过程可以包括(在1030处)识别与源应用程序545、连接资源120(和/或相关联的系统或设备,例如车辆)和/或其他相关组件相关联的操作模式。过程1000可以识别与此类操作模式相关联的各种参数和/或属性(例如,移动车辆的速度、连接资源120的处理器负载、用户设备110的网络连接性等)。这样的数据可以从各种元件接收、基于诸如传感器数据的接收数据来确定,和/或以其他方式生成或接收。
[0304]
网关100可以检测源应用程序545的当前模式。这种检测可以通过诸如os接口560、通知开发工具包555和/或识别引擎525之类的资源来执行(例如,使用本文所述的各种图像识别算法)。当前屏幕(或其他源应用程序输出)可以报告给应用程序管理器515。应用程序管理器515可以使用来自应用程序目录590的应用程序模式限制信息来确定是否应该阻止或过滤任何或所有ui元素。
[0305]
类似地,网关100可以检测连接资源120的操作模式,例如资源是静止的还是移动的。可以通过将接收到的连接资源和/或用户设备传感器数据与各种模式识别模型进行比较来做出这样的确定。这样的模型可以指示例如指示车辆运动所需的最小距离和/或速度。操作模式可能与时间属性有关(例如,白天与夜间操作)。例如,显示的内容可能会根据一天中的时间或感应到的光线条件(例如,使用从用户设备相机或连接资源相机或其他传感器接收到的数据)变暗或变亮。
[0306]
以类似的方式,网关100可以检测相关联的用户设备110的操作模式。例如,网关100可以确定从用户设备110到诸如媒体服务器之类的资源的可用连接类型(例如,wi-fi、蜂窝网络等)。作为另一个示例,网关100可以接收用户设备信息,例如处理器负载、内存使用和/或可用于检测各种操作模式的其他度量。
[0307]
如图所示,过程1000可以包括确定(在1040)是否应用任何与模式相关的限制。可以基于各种识别的操作模式、限制模式和/或其他操作规则和/或其他适当的标准来做出这样的确定。
[0308]
为了管理各种类型的连接资源120并支持不同的限制模式,连接资源120通过可以包括限制级别元素的“连接设备状态”消息来报告通用限制级别值。当前限制级别值可以被传递给应用程序管理器515。根据连接资源120的类型,可能存在不同的限制级别值。
[0309]
例如,车载系统的可能限制级别值可以包括“无”、“次要”、“主要”、“完全”和/或其他类似的值和/或指标(例如,示例值可以映射到零到三的值)。在此示例中,无(或零)的限制级别可能表示不应该应用任何限制(例如,可以允许完整的ui),并且通常可以在车辆未移动且用户未参与驾驶时使用(例如,当接合了驻车制动器或自动变速器处于“驻车”状态时)。
[0310]
次要(或一)限制级别可能表示应应用次要限制(例如,可以允许大部分ui),并且通常可以在车辆行驶非常缓慢(例如,少于8公里每小时)或已停在十字路口(例如,当未检测到运动且自动变速箱处于“驱动”或“倒车”状态时)时使用。
[0311]
主要(二)限制级别可能表示应应用主要限制(例如,仅允许与驾驶员辅助功能相关的ui元素),并且通常可以在用户完全投入驾驶时使用,并且车辆可能以相对较高的速度
行驶(例如,每小时超过8公里)。
[0312]
完全(三)限制级别可能表示应该应用完全限制(例如,不允许驾驶分心,并且ui可能完全被阻止)并且通常可以车辆高速行驶和/或在危险条件下运行时使用。
[0313]
上述示例描述了用于汽车实现的各种可能的限制级别值。各种其他实现可以包括基于特定实现的特定要求的各种其他限制级别值和/或相关属性。例如,医学和/或工业实现可以与各种其他限制水平值集相关联。
[0314]
在某些情况下,连接资源120可以报告其操作模式。然而,在一些实施例中,网关100可以独立于连接资源120来确定操作模式(和/或任何相关的限制级别)。这种方法对于连接资源120可能被篡改并导致不安全状况的情况可能是有用的。例如,在汽车系统中,主机通常使用来自驻车制动器的电线检测车辆是否正在行驶。这样的电线可以很容易地被最终消费者绕过,从而消除系统中可能的驾驶员分心限制。
[0315]
网关100可以使用用户设备110的位置和/或移动传感器独立地验证车辆是否正在移动,从而报告正确的操作模式并识别正确的限制级别。网关100可以将识别的限制级别报告给应用程序管理器515。
[0316]
可以使用应用程序目录590中的应用程序模式限制记录来确定是否基于连接资源120(和/或其他组件)的当前操作模式来限制当前投影的源应用程序545。
[0317]
下面的表2中描述了目录中给定应用程序的应用程序模式限制的可能结构。此示例利用以文本或二进制形式存储的层次结构。存储格式可以利用json、xml、协议缓冲区等。应用程序模式限制记录可以与定义应用程序和/或相关小部件的限制和权限的匹配规则列表相关联。应用程序模式限制记录可能遵循类似于级联样式表(css)的分层匹配结构。下面的表2描述了可能与每个规则记录相关联的各种示例高级别属性:
[0318]
[0319][0320]
表2
[0321]
限制规则可能会根据小部件和屏幕的定义重叠。主要匹配原则是在更通用的规则之前选择最具体的规则。例如,小部件比屏幕更具体,小部件id比小部件类型更具体。
[0322]
当应用程序管理器515将规则与正在投影的屏幕匹配时,应用程序管理器515可以首先应用屏幕规则(如果有的话),然后应用适用于小部件类型的规则,然后是特定小部件的规则。以这种方式,例如,应用程序可以被配置为阻止整个屏幕并且只允许与一个小部件交互,通过为该小部件id定义一个许可规则。
[0323]
限制可能会过滤或阻止来自与投影应用程序关联的ui的特定操作(或数据)。限制可以通过应用程序目录590作为模式限制元素690和/或其他适当方式与应用程序(或屏幕、小部件等)相关联。限制可以被定义为标志,使得多个限制可以与单个规则相关联。下面的表3列出了一些可能受支持的示例限制。
[0324][0325]
表3
[0326]
如果过程确定(在1040处)应该应用与模式相关的限制,则过程1000可以包括(在1050处)应用匹配规则中标识的与模式相关的限制。取决于连接资源属性、规则内容和/或其他相关因素,可以以各种适当的方式应用此类限制。例如,块显示限制可能导致流数据暂停或不显示在连接资源120处。
[0327]
如果过程确定(在1040处)不应该应用与模式相关的限制,则该过程可以包括(在1060处)应用默认限制、特定于应用程序的限制,或者不应用显示或交互限制。
[0328]
如图所示,过程1000可以包括分析(在1070)从源应用程序接收的内容。这种分析可能包括将各种识别模型应用于屏幕内容(或其部分)。一些实施例可以分析此类识别模型并将其应用于其他类型的内容。作为一个示例,差异计算可用于识别ui或屏幕中可能包括诸如视频之类的分散注意力的内容的区域。
[0329]
过程1000可以包括确定(在1080处)是否满足任何限制标准,例如通过相对于任何可用限制规则评估接收到的内容。可以基于内容分析、各种识别的操作模式、限制模式和/或其他操作规则和/或其他适当的标准来做出这样的确定。这种方法可以允许自动检测内容类型并将限制规则应用于这些内容类型。因此,例如,即使源应用程序可能不直接提供视
频或类似内容,ui特征和/或其他元素也可能产生类似效果。
[0330]
如果该过程确定(在1080处)已满足限制标准,则该过程可以包括(在1090处)对接收的内容应用过滤器,阻止此类内容,和/或以其他方式酌情操纵该内容。
[0331]
图11示出了用于应用机器学习来生成或更新应用识别模型和/或本文描述的其他模型、规则或元素的示例过程1100。只要有额外的模型训练数据可用,就可以执行该过程。在一些实施例中,过程1100可以由网关管理器610执行,并且可以具体由模型训练器650执行。
[0332]
基于神经网络(nn)的机器学习算法已在各种计算机视觉和图像分类任务中显示出非常好的结果。在一些实施例中,网关管理器610可用于生成、训练和/或以其他方式操纵识别模型和/或关联对象,例如规则对象。作为识别模型一部分的规则对象可以包括在算法特定数据部分下关联的参数,例如nn模型和nn模型类型。nn模型参数能够以识别引擎525使用的机器学习库能够读取的格式存储训练的神经网络模型。nn模型类型参数可以描述nn模型字段中提供的神经网络模型的类型。
[0333]
有许多现成的工具和库,这些工具和库允许快速训练和使用基于神经网络的图像分类模型。google mlkit就是一个这样的库。此类工具可以在用户设备110上运行并使用提供的自定义神经网络模型对图像进行分类。另一个这样的库是apple的vision框架,可在ios设备上使用。vision框架针对ios设备进行了优化,允许使用自定义core ml模型执行各种机器学习任务。core ml模型可以作为nn模型与作为更大识别模型一部分的规则相关联。识别引擎525可以利用多个神经网络库并基于规则数据(例如nn模型类型)进行选择。
[0334]
如图所示,过程1100可以包括接收(在1110)应用程序内容。这样的内容可以包括视频内容、屏幕内容、ui元素、照片元素和/或与源应用程序相关联的其他内容。这样的内容可以通过存储库630从诸如网关管理器610的资源接收。
[0335]
过程1100可以包括接收(在1120)与接收到的内容(如果可用)相关联的应用标识。例如,各个网关100用来识别应用程序(或其他元素)的屏幕(或其他内容)可以与网关100识别的任何匹配应用程序的身份一起发送到网关管理器610。
[0336]
该过程可以包括(在1130处)接收与在1120处接收到的标识相关联的识别模型。此类信息可以由网关100提供给网关管理器610用于存储和关联到应用程序内容和/或标识(如果有的话)。
[0337]
如图所示,过程1100可以包括接收(在1140)识别反馈,该反馈可以用于训练在1130接收的模型。例如,用户(或其他ml识别模型)可以基于接收到的内容来识别应用程序。
[0338]
过程1100可以包括基于接收到的反馈更新(在1150)识别模型。例如,如果应用程序被模型正确识别,则可以对模型应用奖励,而如果应用程序被错误识别,则可以对模型应用惩罚。
[0339]
过程1100和/或类似过程可用于将机器学习应用于本文所述的各种模型、规则、算法等。
[0340]
可以为每个受支持的应用程序训练单独的模型(存储为单独的规则元素)。然而,这种方法可能会减慢网关100处的分类过程,因为识别引擎525必须评估多个模型。可替代地,所有支持的应用程序都可以在一个规则中的单个nn模型中进行训练。根据组合模型的准确性,可以使用混合方法,其中大多数应用程序被训练成单个nn模型,但可用应用程序
和/或屏幕模式(例如键盘模式)的子集可能会在单独的nn模型和规则中训练。
[0341]
可以在训练过程中使用元学习方法来确定是否将一条规则用于所有应用程序或单独规则的某些组合,该方法对不同的组合进行试验并选择产生最佳整体结果的组合(例如,如最高精度和性能所示)。
[0342]
本文描述的各种图像识别算法可以利用训练模型来正确分类捕获的屏幕图像。这种训练可以由网关管理器610作为离线过程来执行。
[0343]
为了训练识别模型,模型训练器650可能需要从每个受支持的应用程序获取的大量示例屏幕图像。此外,还需要可以帮助训练和模型评估任务的非应用程序图像(例如,“负面”示例)。可以通过自动化过程或两者的组合手动捕获屏幕。捕获的图像可以存储在图像存储库中(例如,包括在存储库630中的图像存储库)。
[0344]
在手动屏幕捕获过程中,一个或更多个人工操作员(或“分析员”)可以在用户设备110或用户设备模拟器上运行应用程序并收集捕获的屏幕图像。然后,分析人员可以用正确的标签对捕获的屏幕图像进行注释。在此过程中,分析人员应尝试访问每个可能的屏幕并利用不同的应用程序操作模式。可以针对不同的用户设备型号、屏幕分辨率、屏幕方向、显示模式(例如,“夜间”、“白天”等)等收集屏幕图像。
[0345]
使用手动屏幕收集可能既费力又费时,尤其是在需要针对目标应用程序的每个新版本重复该过程的情况下。在一些实施例中,可以使用自动化的应用程序捕获过程。自动化过程可以与这里描述的屏幕捕获和用户输入类似的方式与用户设备110交互。自动化应用程序捕获过程可以利用允许检测活动应用程序、屏幕和/或ui小部件的应用程序调试接口(例如android的adb或ios的xctest)。因此,自动化应用程序捕获过程可以“遍历”所有屏幕和应用程序模式,并在该过程中捕获示例屏幕截图。此外,自动应用程序捕获过程可能能够正确标记图像,因为当前应用程序和屏幕id是已知的。
[0346]
在一些实施例中,人类操作员可以通过记录输入事件集合来生成应用程序交互路径,这些输入事件可以由自动化应用程序捕获过程回放并在回放过程中收集屏幕截图。
[0347]
使用手动或自动过程收集的屏幕捕获图像可以存储到图像存储库,该存储库可以包括为不同版本的应用程序捕获的训练和评估图像的数据库。这样的图像存储库可以是存储库630的组件。图像存储库可以存储与捕获的图像相关联的标签信息。图像可以通过应用程序、应用程序版本和/或其他适当的属性来分类。
[0348]
一些实施例的模型训练过程可以执行模型训练。模型训练过程可以被配置为训练哪种类型的模型和使用哪种算法。模型训练过程可以配置有多种可能的算法和输入参数。模型训练过程可以利用元训练来确定算法、输入参数和/或其他相关属性的最佳组合。
[0349]
可以从图像存储库中检索图像,并通过各种训练算法运行以生成识别模型。检索到的图像可能包括训练图像和评估图像(可以手动指定或从训练集中随机选择)。可以使用一组评估图像(也可以从图像存储库中检索)对识别模型进行评估和评分。如果模型满足某些特定的质量标准(例如,超过分数阈值),或者相对于其他模型有所改进,则更新后的模型可能会存储在模型存储库中并使用正确的版本进行标记。
[0350]
模型库可以是存储由模型训练过程生成的最新识别模型的数据库。识别模型可以是版本化的并且具有相关的评估分数或其他性能度量。如果评估分数超过指定阈值,则可以将识别模型上传到网关管理器610和关联的应用程序目录记录590。
[0351]
作为特定的模型(和/或规则)训练示例,可以使用训练图像集合通过使用模型数据参数作为训练算法的输入参数来训练颜色匹配规则。
[0352]
训练算法的输入参数可以包括允许的图像操作列表和合并颜色箱阈值,合并颜色箱阈值可以定义允许合并两个规则的额外颜色箱的最大数量。输入参数可以由人类操作员定义和/或可以使用标准元学习技术来学习。
[0353]
训练过程可以生成或检索空的训练模型。对于每个训练图像,训练过程可以提取与图像相关联的标签。这些标签通常可以从文件名或单独的查找表中提取。对于每个训练图像和每个支持的图像操作,训练过程可以将图像操作应用于训练图像并将结果存储为当前训练图像,如参考颜色匹配分类算法所述计算颜色箱,并存储结果作为候选规则。
[0354]
对于每个训练图像,训练过程可以评估当前训练图像的候选规则,并选择具有最少颜色箱数的规则。
[0355]
对于每个候选规则,训练过程可能会在训练模型中搜索具有相同标签的其他规则。如果没有找到这样的规则,则可以将候选规则添加到训练模型中。如果找到具有相同标签的规则,则可以通过检查候选规则是否具有少于合并颜色箱阈值数量(或其他指定阈值)的额外颜色来将候选规则与现有规则合并。如果候选规则小于阈值,则来自候选规则的颜色箱可以与来自现有规则的颜色箱组合。如果候选规则具有比合并颜色箱阈值数量更多的额外颜色,则可以将候选规则添加到训练模型中。
[0356]
本领域的普通技术人员将认识到,可以以各种不同的方式实现过程700-1100而不背离本公开的范围。例如,可以以与所示不同的顺序来实现这些元素。作为另一个示例,一些实施例可以包括附加元件或省略各种列出的元件。可以迭代地和/或基于满足某些性能标准来执行元素或元素集。非依赖元素可以并行执行。
[0357]
上述过程和模块可以至少部分地实现为软件过程,该软件过程可以被指定为记录在非暂时性存储介质上的一个或更多个指令集合。这些指令可以由一个或更多个计算元件(例如微处理器、微控制器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)、其他处理器等)执行,这些计算元件可能包含在各种适当的设备中,以执行指令指定的动作。
[0358]
如本文所用,术语“计算机可读介质”和“非暂时性存储介质”完全限于以电子设备可读的形式存储信息的有形物理对象。
[0359]
图12示出了用于实现一些实施例的示例性设备(或系统或设备)1200的示意框图。例如,上文参考图1-6所述的系统和/或设备可以使用设备1200至少部分实现。作为另一个示例,参考图7-11描述的过程可以使用设备1200至少部分实现。
[0360]
设备1200可以使用各种适当的元件和/或子设备来实现。例如,设备1200可以使用一个或更多个个人计算机(pc)、服务器、移动设备(例如智能手机)、平板设备、可穿戴设备和/或任何其他合适的设备来实现。各种设备可以单独工作(例如,设备1200可以实现为单个智能手机)或联合工作(例如,设备1200的一些组件可以由移动设备提供,而其他组件由服务器提供)。
[0361]
如图所示,设备1200可以包括至少一个通信总线1210、一个或更多个处理器1220、存储器1230、输入组件1240、输出组件1250和一个或更多个通信接口1260。
[0362]
总线1210可以包括允许在设备1200的组件之间进行通信的各种通信路径。处理器
1220可以包括处理器、微处理器、微控制器、数字信号处理器、逻辑电路和/或可能能够解释和执行指令和/或以其他方式操纵数据。存储器1230可以包括动态和/或非易失性存储器结构和/或可以存储数据和/或指令以供设备1200的其他组件使用的设备。这样的存储器设备1230可以包括单个物理存储器设备内的空间或跨越多个物理内存设备的空间。
[0363]
输入组件1240可以包括允许用户向计算机系统传达信息和/或操纵系统的各种操作的元素。输入组件可以包括键盘、光标控制设备、音频输入设备和/或视频输入设备、触摸屏、运动传感器等。输出组件1250可以包括显示器、触摸屏、诸如扬声器的音频元件、诸如发光二极管的指示器(led)、打印机、触觉或其他感觉元件等。一些或所有输入和/或输出组件可以无线或光学连接到设备1200。
[0364]
设备1200可以包括一个或更多个通信接口1260,其能够连接到一个或更多个网络1270或其他通信路径。例如,设备1200可以耦合到互联网上的网络服务器,使得在设备1200上执行的网络浏览器可以在用户与在网络浏览器中操作的界面交互时与网络服务器交互。设备1200能够通过通信接口1260和网络1270访问一个或更多个远程储存器1280和一个或更多个外部组件1290。通信接口1260可以包括一个或更多个应用程序编程接口(api),该接口可以允许设备1200访问远程系统和/或存储器,并且还可以允许远程系统和/或存储器访问设备1200(或其元件)。
[0365]
本领域普通技术人员应当认识到,计算机系统1200的任何或所有组件都可以与一些实施例结合使用。此外,本领域普通技术人员将理解,许多其他系统配置也可以与一些实施例或一些实施例的组件结合使用。
[0366]
此外,虽然所示示例可以将许多单独的模块说明为单独的元件,但是本领域普通技术人员将认识到这些模块可以组合成单个功能块或元件。本领域的普通技术人员也将认识到单个模块可以分为多个模块。
[0367]
设备1200可以响应于处理器1220执行存储在计算机可读介质(例如存储器1230)中的软件指令而执行各种操作。这些操作可以包括对输出组件1250的操作(例如,信息的显示、触觉反馈、音频输出等)、对通信接口1260(例如,与另一个设备或组件建立通信通道、发送和/或接收消息集等)和/或设备1200的其他组件的操作。
[0368]
可以将软件指令从另一计算机可读介质或从另一设备读入存储器1230。存储在存储器1230中的软件指令可以使处理器1220执行这里描述的过程。可替代地,可以使用硬连线电路和/或专用组件(例如,逻辑电路、asic、fpga等)代替软件指令或与软件指令结合使用以实现本文所述的过程。因此,这里描述的实现不限于硬件电路和软件的任何特定组合。
[0369]
用于实施实施例的实际软件代码或专用控制硬件不限制实施例。因此,在没有参考具体软件代码的情况下描述了实施例的操作和行为,应当理解,可以基于这里的描述来实现软件和控制硬件。
[0370]
虽然示出了某些连接或设备,但实际上可以使用额外的、更少的或不同的连接或设备。此外,虽然各种设备和网络被分别示出,但实际上多个设备的功能可以由单个设备提供,或者一个设备的功能可以由多个设备提供。此外,所示网络的多个实例可以包括在单个网络中,或者特定网络可以包括多个网络。虽然一些设备被示为与网络通信,但一些这样的设备可以全部或部分地结合为网络的一部分。
[0371]
本文结合阈值描述了一些实现。就本文使用术语“大于”(或类似术语)来描述值与
阈值的关系而言,应理解术语“大于或等于”(或类似术语)可以类似地考虑,即使没有明确说明。类似地,就本文使用术语“小于”(或类似术语)来描述值与阈值的关系而言,应理解术语“小于或等于”(或类似术语))可以类似地考虑,即使没有明确说明。此外,当与阈值相关使用时,术语“满足”可以指“大于阈值”、“大于或等于阈值”、“小于阈值”、“小于或等于阈值”或其他类似术语,具体取决于适当的上下文。
[0372]
除非明确说明,否则本技术中使用的任何元素、动作或指令均不应被解释为关键或必要的。如本文所用,使用术语“和”的实例不一定排除短语“和/或”意在该实例中的解释。类似地,如本文所用的术语“或”的使用实例不一定排除短语“和/或”意在该实例中的解释。此外,如本文所用,冠词“一”旨在包括一个或更多个项目并且可以与短语“一个或更多个”互换使用。在仅意指一项的情况下,使用术语“一个”、“单个”、“仅”或类似的语言。此外,除非另有明确说明,否则短语“基于”旨在表示“至少部分基于”。
[0373]
前述内容涉及示例性实施例的说明性细节,并且可以在不脱离本公开的范围的情况下进行修改。尽管在权利要求中记载和/或在说明书中公开了特征的特定组合,但这些组合并不旨在限制本公开的可能实施方式。事实上,这些特征中的许多可以以未在权利要求中具体记载和/或在说明书中公开的方式组合。例如,虽然下面列出的每个从属权利要求可以直接依赖于仅一个其他权利要求,但可能的实施方式的公开包括每个从属权利要求与权利要求集中的每个其他权利要求相结合。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1