具体实施方式
概览
被用来将设备链接在一起的传统技术通常涉及由用户执行多个手动步骤。此外,这些步骤通常是复杂的并且因此即使在这些技术可用时用户传统上也没有从这些技术中受益。
描述了设备链接技术。在一个或多个实现中,描述了其中不同类型的设备可联合工作的技术,如使用移动通信设备来支持与游戏控制台的交互。本文讨论了可被用来将设备链接在一起以例如支持这一交互的各种技术。这一技术的示例包括对以下进行利用:对用于执行设立的“云”和局部连接的使用、对局部连接和远程连接的使用、对后退功能的支持,等等。这一技术和其他技术的进一步讨论可以相关以下各节找到。
在以下讨论中,首先描述可采用本文描述的技术的示例环境。随后描述可在该示例环境以及其他环境中执行的示例过程。因此,各示例过程的执行不限于该示例环境,并且该示例环境不限于执行各示例过程。
示例环境
图1是一示例实现中的可用于采用本文描述的技术的环境100的图示。所示环境100包括可通过各种方式来配置的两个计算设备102、104的示例。计算设备102、104例如可被配置成传统计算机(例如,台式个人计算机、膝上型计算机等)、移动站、娱乐设备、通信地耦合到显示设备(例如,电视机、移动通信设备(例如,无线电话、平板计算机))的游戏控制台、上网本等,如相关于示例操作环境和设备所进一步描述的。因而,计算设备102、104的范围可以从具有充足存储器和处理器资源的全资源设备(如个人计算机、游戏控制台)到具有有限存储器和/或处理资源的低资源设备(如传统机顶盒、手持式游戏控制台)。在所示实现中,计算设备102被配置成游戏控制台而另一计算设备104被配置成移动通信设备,但如上所述,也构想了其他实现。
计算设备102、104各自被示为分别包括输入/输出模块106、108。输入/输出模块106、108表示与由相应计算设备识别输入和/或供应输出相关的功能。例如,输入/输出模块106、108可被配置成从键盘、鼠标接收输入以标识手势并且使得对应于该手势的操作得以执行,等等。输入可由输入/输出模块106、108以各种不同的方式来检测。
例如,输入/输出模块106可被配置成经由与硬件设备(如所示出的控制器110)的触摸交互来接收一个或多个输入。触摸交互可涉及按下按钮、移动操纵杆、跨跟踪垫的移动、使用显示设备的触摸屏(例如,计算设备102检测用户的手的手指或指示笔),等等。
输入/输出模块106、108可以利用对输入的识别来与相应计算设备102、104所输出的用户界面进行交互,以与游戏、应用程序进行交互,浏览因特网,改变计算设备102、104的一个或多个设置,等等。也构想了涉及与设备的触摸交互的各种其他硬件设备。这样的硬件设备的示例包括光标控制设备(例如,鼠标)、遥控器(例如,电视遥控器)、移动通信设备(例如,被配置成控制计算设备102的一个或多个操作的无线电话(被示为计算设备104))、以及涉及用户或物体一方的触摸的其他设备。
输入/输出模块106、108还可支持自然用户界面(NUI),如以识别不涉及触摸的交互。例如,计算设备102、104可以利用输入设备来检测无需用户触摸特定设备情况下的输入,如通过使用话筒来识别音频输入。例如,输入/输出模块106、108可被配置成执行语音识别以识别特定话语(例如,口语命令),以及识别提供该话语的特定用户。
在另一示例中,输入/输出模块106、108可被配置成通过使用相机来识别手势、所呈现的对象、图像等。例如,相机可被配置成包括多个透镜以便可捕捉不同观察点并且因而确定深度,如对游戏控制台配置中的计算设备102所示出的。例如,不同的观察点可被用来确定距输入设备的相对距离并且因而可被用来确定该相对距离的改变。各不同的观察点可被相应的计算设备102、104用作深度感知。自然地,还可使用其他图像而不使用深度感测,如被配置成移动通信设备的计算设备104的相机。这些图像还可被用来提供各种功能,如标识特定用户(例如通过面部识别)、对象,执行搜索等的技术。
输入-输出模块106、108可利用这些输入来执行骨架映射连同对人体的特定点的特征提取(例如,48个骨架点),以跟踪一个或多个用户(例如,同时跟踪4个用户)来进行运动分析。例如,输入/输出模块106、108可分析捕捉到的图像来识别用户作出的一个或多个运动,包括使用了什么身体部分来作出该运动以及哪一用户作出该运动。通过识别用户的手112的一个或多个手指的定位和移动和/或识别用户的手112整体的移动来示出了一示例。运动可被输入/输出模块106、108标识为启动对应的操作的手势。
计算设备102、104还被示为包括相应的链接模块114、116。链接模块114、116表示相应设备的用于发起和管理设备之间的一个或多个网络连接的功能。这些连接可被用来支持各种不同的功能,如同伴体验。例如,被配置成移动通信设备的计算设备104可与被配置成游戏控制台的计算设备102进行交互以补充用户体验。这可包括将计算设备104用作游戏控制器,输出电子节目指南来控制计算设备102的广播内容的输出,等等。因而,与计算设备104的交互可被用来控制计算设备102所执行的一个或多个操作,并且反之亦然。例如,计算设备102可以提供补充内容以供计算设备104输出。
链接模块114、116可包括用于发起和管理网络连接的各种不同的功能。例如,链接模块114、116可包括用于形成设备之间的局域网连接118(例如,局域WiFi连接)的功能和/或通过利用可经由因特网访问的服务提供者122来形成涉及网络120(例如,“通过云”)的远程连接的功能。因此,在该第二示例中,服务提供者122还被示为包括表示服务提供者122的也用于支持设备链接功能的功能的链接模块124。
例如,链接模块114、116可以利用网络120的远程连接来联系服务提供者120以执行设备发现,例如“定位”与其进行通信的设备。这一数据随后被用来设立这些设备之间的局域网连接118以支持以上描述的同伴体验。在另一示例中,这一连接可整体或部分地通过涉及网络120(例如因特网或其他广域网)的远程连接来维护。因而,链接模块114、116可利用各种不同类型的连接和技术来形成连接,其进一步讨论可相关于以下附图来找到。
一般而言,此处描述的任何功能可使用软件、固件、硬件(例如,固定逻辑电路)、或这些实现的组合来实现。本文使用的术语“模块”、“功能”和“逻辑”一般表示软件、固件、硬件或其组合。在软件实现的情况下,模块、功能或逻辑表示当在处理器(例如,一个或多个CPU)上执行时执行指定任务的程序代码。程序代码可被储存在一个或多个计算机可读存储器设备中。下面所描述的技术的特征是平台无关的,意味着所述技术可以在具有各种处理器的各种商用计算平台上实现。
例如,计算设备102、104还可包括使得计算设备102、104的硬件执行各操作的实体(例如软件),例如处理器、功能块,等等。例如,计算设备102、104可包括计算机可读介质,该计算机可读介质可被配置为维护使得计算设备并且更具体的是计算设备102、104的硬件执行各操作的指令。因此,指令用于配置硬件来执行操作,并以此方式致使硬件变换以执行功能。可由计算机可读介质通过各种不同配置将指令提供给计算设备102。
一种这样的计算机可读介质配置是信号承载介质,并因此被配置来将指令(例如,作为载波),例如通过网络,传送到计算设备的硬件。计算机可读介质还可被配置为计算机可读存储介质,因此不是信号承载介质。计算机可读存储介质的示例包括,随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器,和其他可使用磁、光以及用于存储指令和其他数据的其他技术的存储设备。
图2示出了系统200,它更详细地示出了计算设备102、104和服务提供者122。可以用各种方式来发起和维护计算设备102、104之间的用于支持同伴体验的连接。例如,计算设备102、104中的每一个可以与服务提供者122的网络服务的一用户账户相关联。因而,用户可以通过经由网络120提供凭证而不涉及额外登录信息、键码等来简单地登录到服务提供者122的该用户账户。这些凭证随后可由服务提供者122的账户管理器模块202处理以认证该用户。例如,这一认证可被用来通过“一次”登录来访问服务提供者122(以及其他服务提供者)的各种不同服务,如音乐服务、消息收发服务、日历服务、联系人服务,等等。
一旦经过认证,就可展示链接模块124的功能,如用于形成设备之间的连接。例如,链接模块124可被配置成维护描述可被用来形成设备之间的网络连接的网络连接细节的数据。这可包括描述局域网连接118细节的数据,如通过使用标识符、网络名等来支持Wi-Fi连接。这一数据还可描述供经由网络120(例如,因特网)访问的远程连接细节,如IP地址、所支持的带宽、位置信息、网络接入类型,等等。
可以用各种方式并且在各个时间将该数据传递给服务提供者122。例如,该数据可作为认证的一部分来传递,可从先前通信中存储,可响应于从服务提供者122接收到的请求来提供(例如,在完成了认证之后),等等。因而,链接模块114、116可传递可被用来形成连接的各种不同数据。
在一个或多个实现中,可在相应的链接模块114、116上展示用于控制是否提供这一数据的各个设置。例如,可以展示用于使相应的计算设备可被发现的配置设置,它可被默认地设置成“开启”,但也构想了其他示例。
另外,另一配置设置可被用来控制计算设备是否要维持与服务提供者122的实况连接,它可被默认地设置为“关闭”。这可被用来降低(例如,网络120和/或服务提供者的)资源消耗,使得不会迫使服务提供者122为不希望维持设备连接特征的设备来维持设备连接特征。例如,这一设置一开始可被设定为“关闭”。然而,一旦尝试了连接,则这一设置可被自动且无需用户干预地切换成“开启”,以维持“就绪”的打开连接来执行本文描述的链接。
为了发起连接,计算设备102、104可以首先用各种方式来“发现”彼此。例如,链接模块114、116可被配置成首先确定另一设备是否是经由局域网连接118可用的,如经由Wi-Fi、蓝牙、或其他有线或无线网络可用。这一发现可被配置成利用相应的链接模块114、116先前存储的数据,如相应计算设备102、104的特定网络标识符的标识、网络、以及其他信息,但也构想了其他示例。
如果这样没有发现设备,则链接模块114、116可以与服务提供者112进行通信来发现另一设备是否可用于连接。例如,计算设备102、104可以传递指示该设备的位置的数据、可用于通过局部连接来发现该设备的数据等。该数据可指示特定位置,如处于特定房间、利用GPS坐标、以及其他位置确定功能。此外,这一信息可被用来确定要建立的连接类型,如在局域网连接118不可用的情况下要经由网络120建立远程连接,例如设备彼此分开的距离大于局域网连接118所支持的距离。
例如,计算设备104可以经由网络120与服务提供者122的链接模块124进行通信以确定注册到该用户的账户的其他设备(例如,计算设备102)是否可用于链接。服务提供者122随后可返回答案,这可包括这些设备的附加的局域网连接信息(例如,无线或有线子网)。计算设备104的链接模块116随后可使用该信息来搜索局域网以尝试发现一个或多个其他设备。如果找到,则计算设备102、104可协商经由局域网连接118的用于通信的直接链路,在一种或多种情况下,这可支持比经由网络120所支持的通信更高效的通信。例如,局域网连接118可以支持比经由网络120的远程连接更高的带宽。此外,成本考虑也可被用作与使用哪一网络有关的决策过程的一部分,例如,Wi-Fi网络对具有使用上限的移动电话网络。
如果未找到,则计算设备102、104可以用各种方式来经由网络120进行通信。例如,通信可以穿过作为中介的服务提供者122。因而,在该示例中,通信可以利用因特网或其他广域网来将设备彼此连接。在远程连接的另一示例中,可以支持隧道技术以传递通信,如通过由相应的链接模块114、116利用其他设备的IP地址来经由网络120直接通信而无需使服务提供者122主动担当中介。
还构想了各种其他示例,如其中不同的通信经由不同的网络来传递的混合模式。例如,这样的混合模式可被用来支持经由网络120来传递命令以及经由局域网连接118来传递内容,且反之亦然。通信的这一划分可出于各种原因来执行,如由于相应网络所支持的特定网络连接的拓扑结构中的限制。
在一些情况下,物理连接的特性可以在使用期间改变。因此,可以用各种不同的方式来配置链接模块114、116、124以解决这些改变。例如,链接模块114、116、124可被配置成向用户通知(例如经由用户界面)这一改变。另外,链接模块114、116、124可被配置成调整(例如,禁用)在该状态中不能良好工作的特征,如降低分辨率、通信密集的功能、该网络不支持的特征,等等。
此外,链接模块114、116、124可被配置成将命令高速缓存,这可被用来提高效率并处理间歇性的连接问题。这一高速缓存可以在计算设备102、104处以及在服务提供者122处执行。也构想了各种其他示例。
例如,链接模块114、116、124可被配置成支持自动后退恢复。例如,局域网连接118可能降级或变得断开连接,如由于计算设备104移动离开计算设备102、网络干扰,等等。在这些情况下,链接模块114、116、124可以使得改为经由网络120来实现连接,可决定采用上述混合格式,等等。情况反过来也一样,因为如果网络120的可靠性降低,则可自动并在无需用户干预的情况下利用局域网连接118来支持设备之间的通信。
这一改变还可被用来响应于确定网络中的另一个变得可用以切换网络。例如,计算设备104最初可通过因特网与计算设备102通信,如在计算设备104位于不支持局域网连接118的距离处。响应于确定计算设备104现在处于计算设备102的局域网范围内,链接模块114、116可自动通过局域网连接118进行通信。如上所述,在使用这一功能时可计入各种考虑,如上述成本考虑。因而,可以利用各种不同的功能来支持设备链接,这也可被用来支持各种附加功能,如上述同伴体验。
链接模块114、116、124也可支持各种其他功能。例如,如上所述,连接可以是双向的,使得设备中的每一个可以向另一设备发送数据和从另一设备接收数据。这一功能可按各种方式来利用。例如,计算设备102可被配置成向计算设备104通知内容输出的当前状态。计算设备104随后可利用这一信息来提供功能,如定位相关内容、基于与该相关内容相关联的一个或多个场景来执行因特网搜索,等等。情况反过来也一样,因为计算设备104可向计算设备102传递状态,该状态可被该设备用来支持功能,如由计算设备102在对应于计算设备104的内容输出的当前点处继续回放内容。
在另一示例中,链接模块114、116、124还可支持各种不同的功能加密算法来保护经由局域网连接118的通信和远程地经由网络120的通信两者,等等。此外,虽然相关于网络120来描述了因特网,但本发明技术也可支持各种不同类型的网络,如使用单个域、作为企业的一部分、内联网,等等。对设备链接技术的进一步讨论可相关于以下过程找到。
示例过程
以下讨论描述了可利用上述系统和设备来实现的设备链接技术。可以使用硬件、固件或软件或其组合来实现每一个过程的各方面。过程被示为一组框,它们指定由一个或多个设备执行的操作,不一定仅限于所示出的用于由相应的框执行操作的顺序。在以下讨论的部分中将参考图1的环境100和图2的系统200。
图3是描绘一示例实现中的过程300的流程图,其中网络服务被配置成作为设备之间的连接的中介。在网络服务处维护描述多个设备的特性的数据,其中该多个设备与该网络服务的一用户账户相关联(框302)。例如,服务提供者122的链接模块124可以从与用户的账户相关联的计算设备102、104接收数据。可响应于对相应设备处的设置选择来接收这一数据以准许发现该设备。
形成通信以供该多个设备中的一个设备接收,其中该通信包括与该多个设备中的另一个设备有关的一部分数据并且该一部分数据适于由该接收设备发现该多个设备中的该另一设备以发起这两设备之间的局域网连接(框304)。例如,该通信可包括可用于在本地定位设备的数据,例如可经由它来通过局域网连接访问该另一设备的有线或无线子网。该通信还可包括可用于远程地定位设备的数据,如IP地址。这一数据随后可被用来形成能用于支持各种功能的连接,如上述同伴体验。
图4是描绘一示例实现中的过程400的流程图,其中计算设备被配置成利用局域网连接和/或远程网络连接来与另一计算设备进行通信。在与用户账户相关联的计算设备处从网络服务接收标识与该用户账户相关联的另一计算设备的数据(框402)。如上所述,该数据可以用各种方式来描述该设备,如通过网络地址、该设备的名称,等等。
响应于该计算设备确定该另一计算设备是经由局域网连接可用的,该计算设备形成与该另一计算设备的局域网连接(框404)。例如,在可用的情况下,计算设备102可以形成与计算设备104的局域无线连接(例如,Wi-Fi)。
响应于该计算设备确定该另一计算设备是经由局域网连接不可用的,该计算设备形成与该另一计算设备的非局域网连接(框406)。继续先前示例,如果计算设备104是经由局域网连接118不可用的,则计算设备102可以形成经由网络120(例如,因特网或其他广域网)的网络连接。也构想了各种其他示例。
图5是描绘一示例实现中的过程500的流程图,其中通过设备链接支持了同伴体验。通过与网络服务的通信来发现设备的可用性以支持同伴体验,该可用性是通过该设备与用户账户的关联来确定的(框502)。例如,被配置成移动通信设备(例如,无线电话)的计算设备104可用于服务提供者122进行通信以确定诸如被配置成游戏控制台的计算设备102等设备是否可用。
作为该发现的结果,从网络服务接收到的数据被用来发起该计算设备与该设备之间的局域网连接,其中该局域网连接能用于传递同伴体验中所涉及的数据(框504)。例如,计算设备104可接收以下数据:该数据描述了计算设备102经由其可用的有线或无线子网。还构想了各种其他示例,其示例可相关于以下实现示例找到。
实现示例
下文描述先前描述的技术的实现示例。在一个或多个同伴体验场景中,用户能够使用设备来浏览视频目录等并随后挑选一部影片,租借它并在控制台上播放它。在该影片期间,用户能够使用移动通信设备或其他设备来控制它,例如播放/暂停、快进和倒带等。游戏控制台还可被配置成向该设备通知控制台上所发生的事情,如当前影片状态、控制台上的标题变化,等等。从该设备中,用户能够启动控制台上的标题,例如以得到在控制台上运行的标题的标题ID。
在设备之间的通信方面,消息交换可落入各个类别,其示例包括:
·操作:我如何触发另一设备上的工作?
·通知:如何向我通知另一设备上的状态改变?
存在可发生在该系统中的各种通知:
·活动标题改变:启动了新标题。当在控制台上(无论是经由控制器输入还是同伴命令)启动了新标题时,这一通知发生。
·媒体状态改变:播放头(playhead)状态的一些方面已经改变,如内容ID、回放速率、播放头位置、或播放/暂停状态。这一通知既周期性地发生以在各设备间保持位置变量的同步,也在每当基于用户输入(例如,按下了停止按钮)发生了改变时即时地发生。
存在可在该系统中发出的各种操作:
·启动标题:启动控制台标题,可任选地使用用于指示要显示哪一段媒体内容的命令行自变量。在从指南或搜索结果中选择了新的一段内容时,这一命令可以由同伴设备(在以下讨论中也被称为“同伴”)发出。
·获得活动标题:查询控制台以寻找当前运行的标题。在同伴首先连接到控制台以获得初始标题ID时以及每当客户机显式地刷新这一信息时(例如,从休眠返回),这一命令可被调用。这一命令的结果包含与活动标题改变通知相同的信息。
·发送输入:向控制台发送输入命令。每当点击了传输控制(例如,播放、暂停、停止)时,这一命令由同伴发出。
·获得媒体状态:查询控制台以寻找当前媒体状态。在同伴首先连接到控制台以获得初始媒体状态时以及每当客户机需要显式地刷新这一信息时(例如,从休眠返回),这可被调用。这一命令的结果包含与媒体状态改变通知相同的信息。
媒体状态
在该示例中,在协议和API两者中使用的主数据结构是媒体状态结构。这一结构表示在媒体应用/标题内播放的当前播放头状态和内容ID。媒体状态可从控制台媒体API中导出并包括以下字段/属性:
ScourTransportState(搜索传输状态)是从控制台媒体API取得的枚举:
用于指示没有播放媒体(例如,正运行游戏)的附加枚举值可被如下配置:
//没有播放媒体
SCOURTRANSPORTSTATE_NOMEDIA=-1,
当使用这一值时,媒体状态的其余字段是未定义的。
TransportCapabilities(传输能力)是指示媒体播放器可执行什么操作的标志枚举:
通信
用于启用同伴场景的通信栈可以将局域低等待时间TCP和UDP消息收发与基于云的服务相组合以支持安全性和设备发现以及不具有视线IP连接性的设备之间的通信。
可通过云(例如,网络服务)来协调通信。控制台向同伴服务注册以供由同伴设备发现。同伴设备使用同伴服务来确定它可与哪一设备通信。如果控制台与该同伴设备之间存在视线IP连接性,则该设备与该控制台之间的后续通信可以通过局域TCP和UDP消息收发来发生而无需服务中介。如果该控制台与该同伴设备之间不存在视线IP连接性,则通信可经由同伴服务来发生,但具有较高的等待时间。同伴应用可以基于低等待时间通信栈是否可用来改编其用户界面,从而在依赖于基于云的消息收发时禁用“没有意义”的特征。
设备发现/配对/授权可通过同伴服务发生。该系统可以如下执行这一点:
1.同伴服务使用对应于登录ID的经认证的网络ID。
2.给定设备与该设备上的当前用户登录到的控制台进行通信。也可支持使用邀请码或其他更高级的用户界面的客配对/授权。
在登录用户的集合改变时,控制台可以向同伴服务重新注册。这一注册的一部分可包括一组活动用户、控制台的IP地址、以及用来监听局域同伴命令的TCP端口。在注册时,同伴服务可以返回控制台可用来安全地签署和加密该局域子网上的消息的安全会话密钥。
在同伴设备尝试加入会话时,它联系同伴服务,同伴服务随后返回当前用户登录到的控制台的网络地址以及可被用来签署和密封该局域子网上的消息的安全会话密钥两者。
与该服务的通信可通过HTTPS来执行。如果视线IP连接性是可用的,则对于命令,后续通信可使用TCP/IP(使用控制台的TCP/IP地址)来发生;以及对于通知,后续通信可使用UDP广播(使用控制台的IP子网地址)来发生。如果视线IP连接性是不可用的,则后续通信可经由同伴服务发生。
在一个或多个实现中,以下情况是可能的:到控制台的TCP连接性是可能的,但到该设备的UDP广播由于控制台和该同伴设备被IP路由器分开而是不可能的。在这种情况下,同伴设备可经由同伴服务接收通知,但仍然通过到控制台的直接TCP来发出命令(以及接收它们的响应)。
安全性
除了局域子网上提供的安全性(例如,Wi-Fi上的WEP或WPA)之外,该系统中的通信可被如下保护。
同伴设备到同伴服务
同伴设备与该服务之间的通信可以通过HTTPS来执行,这可使用对应于有效控制台ID的网络ID来认证。例如,移动通信设备可从链接服务(如XBL)获得认证(例如,SAML)令牌,它随后将该令牌呈送给同伴服务。同伴服务随后发出用于对该服务的后续调用的一个或多个安全令牌。例如,一令牌可被用作对该服务的后续调用,并且另一令牌可供控制台和移动通信设备用来对消息进行认证。
控制台到同伴服务
控制台与该服务之间的通信可通过HTTPS来执行。当登录到控制台上的XBL用户的集合改变时,该控制台可以从XBL获得SAML令牌,它随后将该令牌呈送给同伴服务。同伴服务随后发出用于对该服务的后续调用的安全令牌。
同伴设备到控制台/控制台到同伴设备
一旦同伴设备或控制台对照同伴服务进行了认证,则这些设备随后可建立安全会话以彼此通信。会话可被认为是可由多个设备用来通信的安全上下文。每一会话可包括:
1.由该服务跟踪的、唯一地标识这一通信会话的会话ID(guid)。
2.被用来签署和加密通过局域子网发送的消息的128位会话密钥。每当登录到控制台的用户的集合改变时,该控制台可向同伴服务重新认证,并且如果先前用户登出,则可为该会话生成新会话密钥。
在局域子网上的设备之间发送的消息可以是完整性受到保护且被加密的。可以使用HMAC-SHA1来提供完整性保护,而可以使用CBC模式中的AES-128来执行加密。可以使用序列号来实现重放保护。接收者可以维护‘高水位’号并拒绝具有较低号的消息。
控制台实现
同伴的通信栈的绝大部分可以在控制台操作系统中实现,其中最小API集合被展示给各标题。
控制台API
同伴API可被各标题调用。该API可被称为“LrcSetMediaState(设置媒体状态)”。LrcSetMediaState被媒体播放器标题调用来传递播放头状态或内容ID已经改变。这一函数可被如下调用:
1.响应于内容ID的显式改变(例如,在同一控制台标题/应用程序内从播放第一影片改变为播放第二影片)
2.响应于处理传输控制请求(例如,按下了停止、播放速率由于FF/REW而改变)。
3.随着播放头状态由于正常回放而进展来周期性地调用,包括到达流的结尾或者缓冲开始或结束。
这一API的实现可以将在最后调用中传递的数据进行高速缓存,以满足对播放头状态的后续请求而不扰乱该应用程序的执行或消耗标题资源。
这一API的实现可以实现试探法来基于所发生的改变的类型确定实际上何时发送媒体状态改变通知。一般而言:
1.字段而非位置的改变可以触发通知在下一可用机会时发送。
2.仅对位置字段作出的改变可以不触发通知发送。相反,控制台操作系统可以发送周期性的媒体状态改变通知,并且下一个可以挑选位置的最后改变。对于局域子网上的周期性改变,这些改变可以每10秒发送。对于云上的周期性改变,这些改变可以每30秒发送。
API的签名如下:
该函数在成功时返回S_OK,在失败时返回E_FAIL。
LrcGetInput/LrcGetInputWithSeek
LrcGetInput/LrcGetInputWithSeek(获得输入/用搜寻获得输入)API被设计成作为标题的输入轮询例程的一部分来调用。LrcGetInput被设计成从不能支持用于从同伴设备得到控制命令的搜寻命令的标题来调用。LrcGetInputWithSeek是针对能支持“搜寻”操作的标题来设计的。
如果存在输入事件,则该函数返回ERROR_SUCCESS(成功)。如果不存在输入事件,则该函数返回ERROR_EMPTY(空)。
pdwUserIndex(用户索引指针)是指向与该设备相关联的签到用户(例如,玩家)的索引的指针,它可以是范围从0到XUSER_MAX_COUNT-1(最大用户数-1)的值,或被设置成XUSER_INDEX_ANY(任何用户索引)以取得来自任何用户的下一可用输入事件。
返回时,pdwUserIndex所指向的变量可包含与作为输入事件的源的设备相关联的玩家的索引。在pdwUserIndex所指向的变量在输入上包含XUSER_INDEX_ANY的情况下,这是有用的。
dwFlags(标志)参数可以是XINPUT_FLAG_ANYDEVICE(输入标志任何设备)或XINPUT_FLAG_ANYUSER(输入标志任何用户)(在pdwUserIndex具有值XUSER_INDEX_ANY的情况下)。
pKeystroke(击键)参数可以是指向XINPUT_KEYSTROKE(输入击键)结构的非空指针。
pSeekPos(搜寻位置)参数可以是指向ULONGLONG的非空指针。
对于LrcGetInput,如果该函数返回ERROR_SUCCESS,则pKeystroke所引用的结构可包含这一输入事件的XINPUT_KEYSTROKE数据。
对于LrcGetInputWithSeek,
1.如果输入是搜寻命令,则pSeekPos所引用的ULONGLONG可包含所需位置(以100ns为单位),并且pKeystroke所引用的结构可以是未定义的。
2.如果输入不是搜寻命令但该函数返回了ERROR_SUCCESS,则pSeekPos所引用的ULONGLONG可以是-1并且pKeystroke所引用的结构可包含这一输入事件的XINPUT_KEYSTROKE数据。
对于这两个API,对应于该输入的人类接口设备(HID)代码是标准硬件代码。UserIndex可基于同伴设备的当前用户(可以是零个到三个)而被设置成正确的索引。在没有按下新键的情况下(并且在GetInputWithSeek的情况下,不存在搜寻信息),这些API返回ERROR_EMPTY。如果pdwUserIndex包含有关输入的ID,但该ID不存在对应的登录用户,则这些API返回ERROR_DEVICE_NOT_CONNECTED(设备未连接)。
控制台内同伴组件的实现
在引导时,控制台在X和Y之间的动态端口上创建TCP监听套接字以支持用于命令的传入连接。监听队列长度是一(1),并且控制台一次可以接收一个传入连接以节省资源。这意味着在服务了传入的命令请求并发送了对应的响应之后,控制台在接受该监听套接字上的下一调用之前可以关闭该TCP连接。
在通过局域子网发送通知时,控制台可以创建UDP套接字、对sendto(发送到)进行调用、并随后关闭该套接字。注意,对TCP和UDP两者的使用被优化以减少打开的套接字的数量,这是对在控制台中运行的代码的正确优化。该协议可被设计成允许各实现将TCP连接保持打开超过一次消息交换。除了上述套接字使用之外,控制台可以消耗一个另外的套接字来与同伴服务进行交互。
在涉及XBL账户/简档登录或登出的每一登录改变时,控制台联系同伴服务,指示该控制台上的用户的集合已经改变。这一调用还注册控制台的局域IP地址和被用来监听传入的命令请求的TCP端口。另外,待决的COMET式HTTP请求可保持“停泊”在该服务上,以对从非视线IP设备传入的请求进行响应。这一请求每30秒重发一次,并且在控制台上的登录集合改变时终止。
控制台资源消耗
来自控制台的总套接字使用是:
·1个统计上分配的用于与该服务的HTTP通信的出站TCP套接字,它被用于登录集合注册和COMET事件拉取两者。
·1个统计上分配的用于局域子网请求的TCP监听套接字
·1个动态地分配的用于服务传入的局域子网请求的TCP流套接字
·1个动态地分配的用于发送通知消息的UDP套接字
这意味着最小使用两个套接字,并且最大使用4个(如果在发送TCP响应之前允许发送UDP通知)或3个(如果通知被推迟发送直至TCP连接被拆毁为止)。
协议概览
该协议使用从同伴设备向控制台发起的直接TCP连接来支持控制台上的调用操作。该协议设计支持每TCP连接多个待决请求,以及乱序响应递送,然而,本发明的控制台实现在发送了第一响应之后可以关闭该连接。
该协议使用从控制台到同伴设备的UDP广播,以支持发送通知。以下消息格式可使用下述签署/加密规则来通过TCP或UDP安全地发送。
消息格式
可以用网络上的二进制大端序格式来对消息进行编码。每一消息字段可以按它们自然的边界来对齐(即,2字节边界上的WORD(字),4字节边界上的DWORD(双字),等等)。固定长度串被编码为以‘\0’结束的UTF-8文本,并且不包含前导Unicode BOM,这可被编写者剥去。
安全分帧协议被定义成用于TCP连接和UDP净荷两者中。这些消息的格式包括:
1.包含版本信息、安全性数据、地址信息以及消息ID的固定长度消息首部。
2.包含消息类型专用数据的可变长度消息正文。该消息正文的长度由消息首部中的一字段指示。
3.包含消息首部和消息正文上的HMAC-SHA1签名的固定长度消息尾部。
消息首部
消息以32字节消息首部开始,其内容如下:
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=<消息其余部分的字节数>
DWORD SequenceNumber=<用于重放检测、与回复进行相关以及用于加密的初始化向量、对每一消息递增>
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id,0xFFFFFFFF指示广播>
DWORD From=<消息来自的设备id,用于对响应进行定址>
DWORD MessageKind=<见下>
DWORD MessageType=<见下>
“To(去往)”和“From(始自)”消息首部字段被用来支持重放检测,因为每一同伴设备具有其自己的序列号。在请求中没有“From”字段的情况下,控制器将不能确定哪一客户机发送了该消息并且因此不能确定正确的序列号。在响应中没有“To”字段的情况下,攻击者能够潜在地将旨在去往一个设备的消息重放到不同的设备。
消息首部中存在两个鉴别字段:MessageKind和MessageType。MessageKind字段指示该消息是:
[0x00000001]请求消息,它被用来请求执行一操作(例如,命令、查询、连接管理),还是
[0x00000002]响应消息,它传达响应于特定请求消息而执行的操作的结果,还是
[0x00000003]通知消息,它传达状态改变事件
MessageType字段标识给定操作或通知的格式和语义。所支持的消息类型的示例列表是:
[0x80000001]JoinSession(请求和响应)
[0x80000002]LeaveSession(请求和响应)
[0x00000001]GetActiveTitleId(请求和响应)
[0x00000002]LaunchTitle(请求和响应)
[0x00000003]SendInput(请求和响应)
[0x00000004]GetMediaAndTitleState(请求和响应)
[0x00000005]NonMediaTitleStateNotification(通知)
[0x00000006]MediaTitleStateNotification(通知)
响应消息在它们的消息首部中具有to附加字段。
DWORD ResponseTo=<这对应的请求序列号>
DWORD ResultCode=<基于HRESULT的状态码>
“响应”消息以被当作HRESULT来对待的四字节结果代码开始。具体而言,值0x00000000/S_OK指示所请求的操作的成功执行。对每一响应消息类型定义了具体的结果代码。
消息尾部
消息以20字节结束。
BYTE[20]hmac=<首部签名(HeaderSignature)上的HMAC-SHA1,消息长度(MessageLength),序列号(SequenceNumber)和后续消息首部字段和整个消息正文的加密版本>
消息正文
这一节定义该协议可支持的特定消息类型的格式和语义。消息首部字段序列号之后消息尾部之前的各字节被加密。
JoinSession(加入会话)请求消息
该消息从同伴设备发送到控制台以(a)确保协议版本相匹配以及(b)获得初始序列号来用于入站和出站消息。JoinSession请求/响应可以在来自同伴设备的任何附加消息被通过局域子网发送到控制台之前发生。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=<消息其余部分的字节数>
DWORD SequenceNumber=0xnnnnnnnn<随机初始值>
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000001<请求>
DWORD MessageType=0x80000001<JoinSession>
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续消息首部字段和整个消息正文的加密版本>
JoinSession响应消息
该消息从同伴设备发送到控制台/从控制台发送到同伴设备以(a)确保协议版本相匹配以及(b)传达初始序列号来用于入站和出站消息。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=<消息其余部分的字节数>
DWORD SequenceNumber=0xnnnnnnnn<总是该请求的序列号+1>
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id,与JoinSession请求消息中的From相同>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000002<响应>
DWORD MessageType=0x80000001<JoinSession>
DWORD ResponseTo=0xnnnnnnnn
DWORD ResultCode=<见下>
DWORD SupportedProtocolVersion=0xnnnnnnnn
DWORD ClientSequenceNumber=<客户机可用于下一请求的序列号>
DWORD NotificationSequenceNumber=<服务器可用于下一UDP通知消息的序列号>
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续消息首部字段和整个消息正文的加密版本>
如果结果代码(ResultCode)是S OK(0),则所请求的协议版本是支持的。同样:
1.SupportedProtocolVersion(支持的协议版本)包含该服务器所支持的协议版本号。
2.ClientSequenceNumber(客户机序列号)包含客户机可用于它发送给服务器的下一消息的序列号。
3.NotificationSequenceNumber(通知序列号)包含服务器要通过UDP发送的下一通知消息的序列号。
如果结果代码是E_VERSION_MISMATCH(0x8hhhhhhh),则尚未加入该会话并且只有SupportedProtocolVersion字段是有效的。如果结果代码是E_TOO_MANY_CONNECTIONS(0x8hhhhhhh),则尚未加入该会话且SupportedProtocolVersion、ClientSequenceNumber以及NotificationSequenceNumber都不是有效的。
GetActiveTitleId(获得活动标题Id)请求消息
这一消息是从同伴设备发送到控制台的,以查询控制台上的活动标题ID。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000001<请求>
DWORD MessageType=0x00000001<GetActiveTitleId>
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续消息首部字段和整个消息正文的加密版本>
GetActiveTitleId响应消息
这一消息是响应于GetActiveTitleId请求消息来从同伴设备发送到控制台/从控制台发送到同伴设备的,并指示当前正在运行的标题。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id,与GetActiveTitleId请求消息中的From相同>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000002<响应>
DWORD MessageType=0x00000001<GetActiveTitleId>
DWORD ResponseTo=0xnnnnnnnn
DWORD ResultCode=0x00000000
DWORD TitleId=0xnnnnnnnn
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续消息首部字段和整个消息正文的加密版本>
TitleId(标题Id)是当前在控制台上运行的标题的控制台Title ID。
LaunchTitle(启动标题)请求消息
这一消息是从同伴设备发送到控制台的,以启动具有指定命令行自变量的标题。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000001<请求>
DWORD MessageType=0x00000002<LaunchTitle>
DWORD TitleId
DWORD LaunchParameterLength;(未使用)
BYTE[900]LaunchParameter(以Null结束的UTF-8文本)
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续消息首部字段和整个消息正文的加密版本>
TitleId(标题Id)是当前在控制台上运行的标题的控制台Title ID。LaunchParameter(启动参数)字段通常标识一旦启动了该标题就要播放的内容。这一字段的确切解释是标题专用的。
LaunchTitle响应消息
这一消息从控制台发送给同伴设备/从同伴设备发送给控制台,以指示标题启动成功/失败。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id,与LaunchTitle请求消息中的From相同>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000002<响应>
DWORD MessageType=0x00000002<Launch>
DWORD ResponseTo=0xnnnnnnnn
DWORD ResultCode=0x00000000
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续消息首部字段和整个消息正文的加密版本>
SendInput(发送输入)请求消息
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000001<请求>
DWORD MessageType=0x00000003<SendInput>
DWORD ValidFields=0x01-VirtualKey,0x02-SeekPos,0x03-两者
DWORD VirtualKey=<来自XDK的虚拟键码>
ULONGLONG SeekPosition
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续字段的加密版本>
ValidFields(有效字段)字段在请求包含击键的情况下具有值0x01,在请求包含搜寻命令的情况下具有值0x02,以及在它包含这两者的情况下具有值0x03。VirtualKey(虚拟键)等同于它在XINPUT_KEYSTROKE中的定义。SeekPosition(搜寻位置)被用来传达搜寻命令。如果该请求消息没有指示搜寻,则这一字段具有值0xFFFFFFFFFFFFFFFF(-1)。
SendInput(发送输入)响应消息
这一消息从控制台发送给同伴设备/从同伴设备发送给控制台,以指示SendInput操作成功/失败。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id,与SendInput请求消息中的From相同>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000002<响应>
DWORD MessageType=0x00000003<SendInput>
DWORD ResponseTo=0xnnnnnnnn
DWORD ResultCode=0x00000000
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续首部字段和整个消息正文的加密版本>
GetMediaAndTitleState(获得媒体和标题状态)命令消息
这一消息是从同伴设备发送到控制台的,以查询控制台上的媒体状态。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000001<请求>
DWORD MessageType=0x00000004<GetMediaAndTitleState>
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续首部字段和整个消息正文的加密版本>
GetMediaAndTitleState响应消息
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=<消息旨在去往的设备id,与GetMediaAndTitleState请求消息中的From相同>
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000002<响应>
DWORD MessageType=0x00000004<GetMediaAndTitleState>
DWORD ResponseTo=0xnnnnnnnn
DWORD ResultCode=0x00000000
DWORD TitleId
ULONGLONG Duration(以100ns为单位)
ULONGLONG Position(以100ns为单位)
ULONGLONG MinSeek(以100ns为单位)
ULONGLONG MaxSeek(以100ns为单位)
FLOAT Rate(回放速率,1.0==正常)
DWORD TransportState(参见以下控制台API中的ScourTransportState枚举)
DWORD TransportCapabilities(参见以下控制台API中的TransportCapabilities枚举)
DWORD MediaAssetIdLength;(未使用)
BYTE[256]MediaAssetId(以Null结束的UTF-8文本)
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续字段的加密版本>
如果结果代码是S_OK(0)且TransportState不是SCOURTRANSPORTSTATE_NOMEDIA,则其他媒体状态字段(Duration,Position,…,MediaAssetId)都是有效的。如果结果代码是S_OK(0)且TransportState是SCOURTRANSPORTSTATE_NOMEDIA,则控制台上没有当前媒体并且其余媒体状态值是未定义的。
NonMediaTitleStateNotification(非媒体标题状态通知)消息
NonMediaTitleStateNotification消息指示非启用媒体的控制台标题(例如,游戏)当前正在控制台上运行。NonMediaTitleStateNotification消息是由控制台在以下时候经由UDP广播来发送的:
1.非启用媒体的标题(例如,游戏)正在运行。以及
2.自更新时间间隔(10秒)以来,没有发送过NonMediaTitleStateNotification或MediaTitleStateNotification(媒体标题状态通知)。或者非启用媒体的标题已被启动。
这一消息不需要从控制台发送到云,因为标题改变迫使向云重新认证,这传达了标题ID。这一消息可以从云发送给同伴设备。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=0xFFFFFFFF
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000003<通知>
DWORD MessageType=0x00000005<NonMediaTitleStateNotification>
DWORD TitleId
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续字段的加密版本>
MediaTitleStateNotification(媒体标题状态通知)消息
MediaTitleStateNotification消息指示启用媒体的控制台标题(例如,与视频流服务有关的标题)当前正在控制台上运行。这一消息传达控制台标题ID以及当前内容ID和播放头状态。
MediaTitleStateNotification消息是由控制台在以下时候经由UDP广播来发送的:
1.启用媒体的标题(例如,游戏)正在运行。以及
2.自更新时间间隔(10秒)以来,没有发送过NonMediaStateTitleNotification或MediaTitleStateNotification。或者启用媒体的标题已被启动或传输控制命令已由该标题处理(例如,播放、停止)。
MediaTitleStateNotification消息是由控制台在以下时候发送到云的:
1.启用媒体的标题(例如,游戏)正在运行。以及
2.自更新时间间隔(30秒)以来,没有发送过NonMediaTitleStateNotification或MediaTitleStateNotification。或者启用媒体的标题已被启动或传输控制命令已由该标题处理(例如,播放、停止)。
这一消息可以从云发送到计算设备。
DWORD HeaderSignature=0xBEDABEDA
DWORD MessageLength=0xnnnnnnnn
DWORD SequenceNumber=0xnnnnnnnn
DWORD ProtocolVersion=0x00000001
DWORD To=0xFFFFFFFF
DWORD From=<消息来自的设备id>
DWORD MessageKind=0x00000003<通知>
DWORD MessageType=0x00000006<MediaTitleNotification>
DWORD TitleId
ULONGLONG Duration(以100ns为单位)
ULONGLONG Position(以100ns为单位)
ULONGLONG MinSeek(以100ns为单位)
ULONGLONG MaxSeek(以100ns为单位)
FLOAT Rate(回放速率,1.0==正常)
DWORD TransportState(参见以下控制台API中的ScourTransportState枚举)
DWORD TransportCapabilities(参见以下控制台API中的TransportCapabilities枚举)
DWORD MediaAssetIdLength;(未使用)
BYTE[256]MediaAssetId(以Null结束的UTF-8文本)
BYTE[20]hmac=<首部签名上的HMAC-SHA1,消息长度,序列号和后续字段的加密版本>
如果TransportState(传输状态)不是SCOURTRANSPORTSTATE_NOMEDIA(非媒体),则其他媒体状态字段(Duration,Position,…,MediaAssetId)是有效的。如果TransportState是SCOURTRANSPORTSTATE_NOMEDIA,则控制台上当前没有媒体并且其余媒体状态值是未定义的。
控制台和云通信
当用户登录到控制台时,控制台向云报告用户信息,使得云可以知道谁登录到了控制台。控制台还告诉云它的局域子网IP地址。在用户登出时,控制台向云报告。
通知模型
控制台可以使用单播方法来宣告控制台上的某些改变,像标题改变、媒体状态改变等。设备与控制台之间建立的套接字可被用来做到这一点。
在同伴设备侧,运行时库可以提供通知能力。即,链接模块可以注册它感兴趣的无论什么事件,并且运行时层可以在这些事件发生时向应用程序通知这些事件。
设备侧的运行时库
运行时库可被用在每一所支持的设备上。
这里是可被支持的示例API。
1.bool JoinSession()
这一API可以将设备连接到“hostIPAddress(主机IP地址)”所指定的控制台主机。
返回值:如果连接良好则返回TRUE(真)。否则,返回false(假)。
示例使用:JoinSession();
在配对成功之后,它可从云得到控制台的局域子网IP地址。它还可以从云得到可用来保护与控制台的通信的安全密钥。
2.DisconnectSession()
这一API可关闭你的设备与当前连接到的控制台之间的连接。注意:运行时使用这一API来清理会话数据;关闭与控制台的套接字。当然,在该设备进入休眠时,控制台可以知道。所以它可关闭套接字。
3.TitleInfo[]GetAvailableTitles()
这一API可以向你提供起居室同伴体验当前支持的标题的列表。
例如,这里是这一函数的可能返回中的一个:
4.unsigned int GetCurrentRunningTitleId()
这一API向你返回在当前连接到的控制台上当前正在运行的标题的titleID。
5.void Launch(unsigned int TitleId,string parameter)
这一API可以使用“parameter”中指定的给定参数来启动“TitleId“所指定的应用程序。
TitleId----你想要启动的应用程序的标题ID。调用者通过调用“GetListOfAvailableTitles()”来得到友好应用程序名。
Parameter----你想要在启动期间传递到该标题的参数。
6.void SendControlCommand(CommandType key)
这一API向当前连接到的控制台发送控制台控制命令。
7.通知API
这些API被用来使设备从控制台接收通知事件,像控制台上的状态改变、标题改变等等。虽然描述了具体示例,但应当显而易见的是,本讨论和所附权利要求书不必限于这些示例。
示例系统和设备
图6示出了包括参考图1描述的计算设备102的示例系统600。示例系统600实现了用于当在个人计算机(PC)、电视机设备和/或移动设备上运行应用程序时的无缝用户体验的普遍存在的环境。服务和应用在所有三个环境中基本相似地运行,以便当使用应用、玩视频游戏、看视频等时在从一个设备转换到下一设备时得到共同的用户体验。
在示例系统600中,多个设备通过中央计算设备互联。中央计算设备可以是多个设备本地的,或者可以位于多个设备的远程。在一个实施例中,中央计算设备是通过网络、因特网或其他数据通信链路连接到多个设备的一个或多个服务器计算机的云。在一个实施例中,该互联体系结构使得功能能够跨多个设备递送以向多个设备的用户提供共同且无缝的体验。多个设备的每一个可具有不同的物理要求和能力,且中央计算设备使用一平台来使得为设备特制且又对所有设备共同的体验能被递送到设备。在一个实施例中,创建目标设备的类,且为通用设备类定制体验。设备类可由设备的物理特征、用途类型、或其他共同特性来定义。
在各种实现中,计算设备102可采取各种不同的配置,诸如用于计算机602、移动设备604、和电视机606用途。这些配置中的每一个包括可具有一般不同的构造和能力的设备,并且因而计算设备102可根据不同的设备类中的一个或多个来配置。例如,计算设备102可被实现为计算机类602设备,该计算机设备类包括个人计算机、台式计算机、多屏幕计算机、膝上型计算机、上网本等。
计算设备102还可被实现为移动类604设备,该移动类设备包括诸如移动电话、便携式音乐播放器、便携式游戏设备、平板计算机、多屏幕计算机等移动设备。计算设备102还可被实现为电视机类606设备,该电视机类设备包括在休闲观看环境中具有或连接到一般更大的屏幕的设备。这些设备包括电视机、机顶盒、游戏控制台等。本文所描述的技术可由计算设备102的这些各种配置来支持,且不限于在本文描述的各具体示例。
云608包括和/或表示内容服务612的平台610。平台610抽象云608的硬件(如,服务器)和软件资源的底层功能。内容服务612可包括可在计算机处理在位于计算设备102远程的服务器上执行时使用的应用程序和/或数据。内容服务612可作为因特网上和/或通过诸如蜂窝或Wi-Fi网络之类的订户网络上的服务来提供。这一点的示例被示为在计算设备上包括链接模块114。如上所述,这些技术还可利用“云”,例如如下所述通过将链接模块124实现为平台310的一部分。
平台610可抽象资源和功能以将计算设备102与其他计算设备相连接。平台610还可用于抽象资源的缩放以向经由平台610实现的内容服务612所遇到的需求提供对应的缩放级别。因此,在互联设备的实施例中,本文描述的功能的实现可分布在系统600上。例如,该功能可部分地在计算设备102上以及经由抽象云608的功能的平台610来实现。
图7示出了可被实现成参考图1、2和6所描述的用于实现本文描述的各实施例的任何类型的计算设备的示例设备700的各组件。设备700包括允许设备数据704(例如,接收到的数据、正被接收的数据、安排用于广播的数据、数据的数据包等)的有线和/或无线传递的通信设备702。设备数据704或其他设备内容可以包括设备的配置设置、存储在设备上的媒体内容和/或与设备的用户相关联的信息。存储在设备700上的媒体内容可以包括任何类型的音频、视频和/或图像数据。设备700包括一个或多个数据输入706,经由数据输入可接收任何类型的数据、媒体内容、和/或输入,诸如用户可选输入、消息、音乐、电视媒体内容、记录的视频内容、以及从任何内容源和/或数据源接收的任何其他类型的音频、视频和/或图像数据。
设备700还包括通信接口708,其可被实现为串行和/或并行接口、无线接口、任何类型的网络接口、调制解调器、以及任何其他类型的通信接口中的任一个或多个。通信接口708提供设备700和通信网络之间的连接和/或通信链路,其他电子、计算和通信设备通过所述连接和/或通信链路来与设备700传递数据。
设备700包括一个或多个处理器710(如,微处理器、控制器等中的任一个),该处理器处理各种计算机可执行指令来控制设备700的操作并实现此处描述的技术的各实施例。作为补充或替换,设备700可被实现为具有与在712处概括标识的处理和控制电路有关地实现的硬件、固件、或固定逻辑电路中的任何一个或组合。虽然未示出,但是设备700可包括耦合设备内的各种组件的系统总线或数据传输系统。系统总线可包括不同总线结构中的任一个或组合,诸如存储器总线或存储器控制器、外围总线、通用串行总线、和/或利用各种总线架构中的任一种的处理器或局部总线。
设备700还包括计算机可读介质714,诸如一个或多个存储器组件,存储器组件的示例包括随机存取存储器(RAM)、非易失性存储器(例如,只读存储器(ROM)、闪存、EPROM、EEPROM等中的任一个或多个)、以及盘存储设备。盘存储设备可被实现为任何类型的磁性或光学存储设备,如硬盘驱动器、可记录和/或可重写紧致盘(CD)、任何类型的数字多功能盘(DVD)等等。设备700还可包括大容量存储介质设备716。
计算机可读介质714提供数据存储机制以存储设备数据704,以及各种设备应用718和与设备700的各操作方面相关的任何其他类型的信息和/或数据。例如,操作系统720可以用计算机可读介质714作为计算机应用来维护并且在处理器710上执行。设备应用718可包括设备管理器(例如,控制应用、软件应用、信号处理和控制模块、特定设备本机的代码、特定设备的硬件抽象层等)。设备应用718还包括实现本文描述的技术的实施例的任何系统组件或模块。在该示例中,设备应用718包括被示为软件模块和/或计算机应用的接口应用722和输入/输出模块724。输入/输出模块724表示用于给接口提供被配置成捕捉输入的诸如触摸屏、跟踪垫、照相机、麦克风等设备的软件。另选地或另外地,接口应用程序722和输入/输出模块724可被实现为硬件、软件、固件、或其任何组合。此外,输入/输出模块724可被配置成支持多个输入设备,诸如分别捕捉视觉和音频输入的单独设备。
设备700还包括向音频系统728提供音频数据和/或向显示系统730提供视频数据的音频和/或视频输入-输出系统726。音频系统728和/或显示系统730可包括处理、显示、和/或以其他方式呈现音频、视频和图像数据的任何设备。视频信号和音频信号可以通过RF(射频)链路、S-video(S-视频)链路、复合视频链路、分量视频链路、DVI(数字视频接口)、模拟音频连接,或其它类似的通信链路,从设备700传递到音频设备和/或显示设备。在一实施例中,音频系统728和/或显示系统730被实现为设备700的外部组件。或者,音频系统728和/或显示系统730被实现为示例设备700的集成组件。
结论
虽然已经用对结构特征和/或方法动作专用的语言描述了本发明,但是应该理解,在所附权利要求中定义的本发明不必限于所述的具体特征或动作。相反,这些具体特征和动作是作为实现所要求保护的本发明的示例形式而公开的。