实时内核 发明背景
对基于化身的虚拟现实通信系统的兴趣已随具有高处理能力和高带宽网络连接 的计算系统的可用性的增加而成长。此种虚拟现实系统的主要目标是创建虚拟空间, 其中 用户可使用实时数据流 ( 诸如音频、 视频和文本聊天流 ) 进行交互和通信。 虚拟空间一般由 计算机图形描述定义, 该图形描述描述了该空间的虚拟几何形状、 映射到该虚拟几何形状 上的颜色和纹理、 控制用户如何在该空间中移动的碰撞属性、 以及该空间的听觉属性 ( 诸 如混响和声音吸收属性 )。
在典型的虚拟现实系统中, 用户从相应计算机通过接口彼此通信, 该接口是该系 统所支持的一个或更多个实时数据流的源、 阱、 或者源和阱两者。 运行在每一台用户计算机 上的虚拟现实软件应用基于描述虚拟空间中的化身的位置的位置信息来配置其自身的音 频和图形呈现。 该位置信息通常直接从其他用户的计算机接收或间接从中央存在性服务器 接收。默认地, 虚拟现实软件应用通常将虚拟空间中表示的每个源连接到该虚拟空间中表 示的每个阱, 这受到全局开关规则、 局部用户偏好、 以及该虚拟空间中的对象属性中指定的 条件的影响。这些条件通常以对象间的相对距离的方式指定。例如, 一些虚拟现实软件应 用被配置成使得如果化身间的分开距离超过最大阈值距离则不建立实时数据流连接。
成功的虚拟现实通信系统通常应具有相对低的计算资源要求, 以便实时通信性能 可使用当前可用的计算设备和网络带宽限制来达成。此外, 此种系统通常应当以鼓励区域 设计者开发提高用户对该系统的采用的虚拟区域的方式来实现。
发明概述
在一方面, 本发明的特征在于一种方法, 根据该方法在本地网络节点接收来自远 程网络节点的一个或更多个流处置指令。 这一个或更多个流处置指令包括对用于处理至少 一个实时数据流的流处理机的描述。在本地网络节点, 根据该描述创建流处理机。在本地 网络节点产生所得数据流。在此过程中, 实时数据流通过所创建的流处理机处理。
在另一方面, 本发明特征在于一种方法, 根据该方法从一个或更多个流处置指令 解析对实时流处理机的描述。在此过程中, 从该一个或更多个流处置指令解析输入源标识 符、 输出阱标识符、 以及一个或更多个数据处理对象中的每一者的相应标识符。 对应于相应 一些标识符的实时流处置对象被实例化。 根据该描述被创建包括一些被实例化的实时流处 置对象的有向图。从对应于输入源标识符的输入源接收实时数据流。在对应于输出阱标识 符的输出阱产生所得数据流。在此过程中, 实时数据流通过该有向图处理。
在另一方面, 本发明特征在于一种方法, 根据该方法在本地网络节点和至少一个 远程网络节点之间建立至少一个实时数据流连接。在本地网络节点, 源自远程网络节点的 至少一个实时数据流被处理。在此过程中, 通过一个或更多个实时数据处理操作处理该至 少一个实时数据流以产生所得数据流。该处理被监视。响应于基于该监视确定该处理偏离 性能目标, 根据实时性能目标例程修改该处理。
在另一方面, 本发明特征在于一种方法, 根据该方法, 在本地网络节点, 根据无连 接传输协议在传输流上建立与远程网络节点的第一会话。 代表本地网络节点上的一个或更
多个软件实体, 自动打开在第一会话中在本地网络节点和远程网络节点之间传送数据的一 个或更多个信道。在第一会话中, 维护一表。该表标识打开的一些信道并将相应的属性值 与所标识的信道相关联。响应于确定第一会话已经失败, 根据无连接传输协议自动尝试在 第二传输流上建立与远程网络节点的第二会话。响应于成功建立第二会话, 自动打开该表 中标识的每个信道。
在另一方面, 本发明特征在于一种方法, 根据该方法解析包括一个或更多个内核 服务组件的内核组件的列表。确定被解析的列表中在本地储存库中缺少的所有内核组件。 检索被确定为缺少的每个内核组件。从一些内核服务内核组件实例化内核服务。执行被实 例化的内核服务以在关于虚拟区域定义的通信环境中与一个或更多个远程网络节点通信。
在另一方面, 本发明特征在于一种在本地网络节点上执行的方法。 根据该方法, 本 地网络节点被配置为支持在由虚拟区域定义的上下文中与至少一个远程网络节点实时通 信。该配置过程包括 : 响应于对枚举支持指定的应用编程接口 (API) 的所有插件的调用, 返回包含插件数据库中与该指定的 API 相关联的所有插件的标识符的列表 ; 响应于对枚举 所标识的一个插件支持的给定 API 的变量的调用, 传递包含由所标识的插件支持的该给定 API 的所有变量的标识符的列表 ; 以及响应于对实例化由所标识的一个插件支持的所标识 的 API 的所标识的一个变量的调用, 加载所标识的插件并提供至所标识的变量的实例的指 针。 在所配置的本地网络节点和该至少一个远程网络节点之间建立至少一个实时数据流连 接。
本发明的特征还在于用于实现上述的发明方法的装置和存储致使计算机实现上 述发明方法的计算机可读指令的计算机可读介质。
本发明的其他特征和优点将从包括附图和权利要求的以下描述而变得显而易见。
附图简述
图 1 是包括由网络互连的第一客户端网络节点、 第二客户端网络节点、 以及区域 服务器网络节点 16 的虚拟区域通信环境的实施例的图示。
图 2 是由实时内核的实施例执行的方法的实施例的流程图。
图 3A 是其中网络节点以对等架构通信的虚拟区域通信环境的实施例的图示。
图 3B 是其中网络节点以服务器仲裁架构通信的虚拟区域通信环境的实施例的图 示。
图 4 是包括呈现对虚拟区域的描绘的图形用户界面的网络节点的实施例的图示。
图 5A 是抬头显示器 (HUD) 叠加在呈现对虚拟区域的描绘的图形用户界面上的实 施例的图示。
图 5B 是图 5A 中所示的 HUD 的图示。
图 5C 是图 5A 中所示的 HUD 的展开视图的图示。
图 6 是由区域网络基础结构服务的实施例实现的方法的实施例的流程图。
图 7 是由实时内核的实施例实现的方法的实施例的流程图。
图 8 是包括实时内核的实施例的客户端网络节点的实施例的框图。
图 9 是由图 8 的实时内核的实施例响应于请求至虚拟区域的连接的实时内核 API 调用而实现的方法的实施例的流程图。
图 10 是由图 8 的实时内核的实施例响应于请求进入虚拟区域的实时内核 API 调用而实现的方法的实施例的流程图。
图 11 是由图 8 的实时内核的实施例响应于从区域服务接收的流处置指令而实现 的方法的实施例的流程图。
图 12 是由流处理机配置管理器创建的流处理机的实施例的框图。
图 13 是由图 8 的实时内核的实施例在调度由实时内核执行的任务的过程中实现 的方法的实施例的流程图。
图 14 是由图 8 的实时内核的实施例基于对至少一个实时数据流的处理的监视而 实现的方法的实施例的流程图。
图 15 是图 8 的实时内核的实施例的框图。
图 16 是通过帐户服务器的凭证来认证帐户服务器的方法的实施例的流程图。
图 17 是由图 8 的实时内核的实施例的加载器组件实现的方法的实施例的流程图。
图 18 是由图 8 的实时内核的实施例的 STRAW 服务组件实现的会话管理方法的实 施例的流程图。
图 19 是由图 8 的实时内核的实施例的组件响应于从区域网络基础结构服务接收 的远程流处置指令而实现的方法的实施例的流程图。
图 20 是由图 8 的实时内核的实施例的 STRAW 服务组件实现的传输协议组件的图 示。
图 21 示出在客户端网络节点 344 和服务器 346 之间建立服务器流的方法的实施 例。
参照图 22, 每个会话由发起服务器生成的新 GUID 所标识。
图 23 示出四通信者音频处理图的示例性实施例的元素。
图 24 示出使人们能经由基于非虚拟区域的通信应用与虚拟区域通信者通信的计 算机系统的实施例。
图 25 示出插件类等级的实施例的图示。
图 26 是插件基类的集合的实施例的图示, 其中每个插件基类与相应的一个或更 多个导出变量类的集合相关联。
图 27 是插件架构的实施例的框图。
图 28 是包括插件管理器、 包含一组插件容器的插件目录、 插件数据库、 以及调用 程序的插件架构的实施例的框图。
图 29 是由图 28 的插件管理器的实施例在客户端网络节点上登记可用插件的过程 中实现的方法的实施例的流程图。
图 30 是插件数据库的实施例的图示。
图 31 是由图 28 的插件管理器的实施例响应于收到来自调用程序的 API 调用而实 现的方法的实施例的流程图。
发明详细描述
在以下描述中, 相同的附图标记被用于标识相同的元素。 此外, 附图旨在以图解方 式解说示例性实施例的主要特征。 附图并不旨在描绘实际实施例的每个特征以及所描绘元 件的相对尺寸, 且并不是按比例绘制的。
I. 术语定义“计算机” 是根据临时或永久地存储在计算机可读介质上的计算机可读指令来处 理数据的任何机器、 设备、 或装置。
“计算机操作系统” 是管理和协调任务执行以及软件和硬件资源共享的计算机的 软件组件。 “内核” 是可由软件应用调用以提供用于访问计算机资源 ( 例如, CPU、 存储器、 网 络链路、 以及外围资源 ) 的特定功能的软件组件的集合。 “软件应用” ( 也称为软件、 应用、 计算机软件、 计算机应用、 程序、 以及计算机程序 ) 是计算机能解读并执行以执行一个或更 多个任务的指令集。
“应用编程接口” ( 或 API) 是操作系统、 库、 或服务提供以支持软件应用作出的请 求的功能 ( 或规程 ) 声明集。API 指定一接口以及该接口中指定的标识符的行为。API 的 实现指提供该 API 描述的功能性的软件应用代码。 “计算机数据文件” 是持久存储数据以供 软件应用使用的信息块。
“服务” 是自主地执行任务的过程 ( 独立于其他过程 )。
“管理器” 是服务执行任务的网关。管理器不自主地执行任务。
“数据库” 是以标准化格式呈现的能够被计算机搜索的记录的组织化集合。数据库 可被存储在单台计算机上的单个计算机可读数据存储介质上, 或者可以跨一台或更多台计 算机上的多个计算机可读数据存储介质分布。
“数据阱” ( 本文中简称为 “阱” ) 是接收数据的设备、 设备 ( 例如, 计算机 ) 的一部 分、 或软件中的任一者。
“数据源” ( 本文中简称为 “源” ) 是始发数据的设备、 设备 ( 例如, 计算机 ) 的一部 分、 或软件中的任一者。
“网络节点” ( 也被简称作 “节点” ) 是通信网络中的接合点或连接点。示例性网络 节点包括但不限于终端、 计算机、 以及网络交换机。 “服务器网络节点” 是网络上对信息或服 务请求进行响应的主计算机。 “客户端网络节点” 是网络上向服务器请求信息或服务的计算 机。 “网络连接” 是两个通信网络节点之间的链路。术语 “本地网络节点” 是指当前为首要 讨论主体的网络节点。术语 “远程网络节点” 是指通过网络通信链路连接至本地网络节点 的网络节点。
“存在性” 是指联网实体 ( 例如, 通信者、 服务、 或设备 ) 进行通信的能力或意愿, 其 中此类意愿影响在网络上检测和获得关于该实体的状态的信息的能力以及连接到该实体 的能力。
“实时数据流” 是以连续流的形式进行结构化和处理并且被设计成无延迟或者只 有察觉不到的延迟地接收的数据。实时数据流包括语音、 视频、 用户移动、 面部表情及其他 物理现象的数字表示, 以及计算环境内可得益于迅速传输、 迅速执行、 或迅速传输和迅速执 行两者的数据, 包括例如化身移动指令、 文本聊天、 实时数据馈送 ( 例如, 传感器数据、 机器 控制指令、 交易流以及股价信息馈送 )、 以及文件传递。
“流混合” 是相同或语义上一致的类型 ( 例如, 音频、 视频、 聊天、 和运动数据 ) 的两 个或更多个实时数据流的组合。 例如, 一组语音流可被混合成单个语音流, 或语音流可被混 合到视频流的音频部分中。
“开关规则” 是遵照一个或多个条件先例指定一个或多个实时数据源与一个或多 个实时数据阱的连接或断开连接的指令。“虚拟区域” ( 也被称作 “区域” 或 “地方” ) 是由计算机管理的空间或场景的表示。 虚拟区域通常是一维、 二维、 或三维的表示 ; 尽管在一些实施例中虚拟区域也可对应于单个 点。虚拟区域经常被设计成模拟物理的真实世界空间。例如, 使用传统的计算机监视器, 虚 拟区域可被可视化为由计算机生成的三维空间的二维图形。然而, 虚拟区域并不要求相关 联的可视化就能实现开关规则。虚拟区域通常是指虚拟区域模式的实例, 其中模式以变量 的方式定义虚拟区域的结构和内容, 而实例以已从特定上下文求解出的值的方式来定义虚 拟区域的结构和内容。
“虚拟区域应用” ( 也被称作 “虚拟区域描述” ) 是在创建虚拟区域通信环境时使用 的虚拟区域的描述。 虚拟区域应用通常包括对与虚拟区域的一个或多个地带相关联的几何 学、 物理学、 以及实时开关规则的定义。
“虚拟通信环境” 是包括至少一个虚拟区域并且支持通信者之间的实时通信的由 计算机管理的空间的表示。
“地带” 是虚拟区域中与至少一个开关规则或支配规则相关联的区划。开关规则控 制在虚拟区域的上下文中通信的网络节点之间的实时数据流的开关 ( 例如, 路由、 连接、 和 断开连接 )。支配规则控制通信者对资源 ( 例如, 区域、 区域的区划、 或该区域或区划的内 容 ) 的访问, 该访问的范围、 以及该访问的后继结果 ( 例如, 必须记录关于该访问的审计记 录的要求 )。
虚拟区域中的 “位置” 是指该虚拟区域中的点或面积或体积的位置。点通常是由 定义虚拟区域中的点的一维、 二维、 或三维坐标 ( 例如, x、 y、 z) 单个集合表示的。面积通常 由定义虚拟区域中闭合的二维形状的边界的三个或更多个共面顶点的三维坐标来表示的。 体积通常由定义虚拟区域中的三维形状的闭合边界的四个或更多个非共面的顶点的三维 坐标来表示。
在虚拟区域的上下文中, “对象” 是虚拟区域中可被有效对待且与虚拟区域的几何 形状无关的离散要素。示例性的对象包括门、 门户、 窗、 查看屏、 以及扩音器。对象通常具有 与虚拟区域的属性和特性分离且不同的属性和特性。 “化身” 是虚拟区域中代表通信者的对 象。
“通信者” 是在网络连接上与其他人通信或以其他方式交互的人, 其中该通信或交 互可以或者也可以不发生在虚拟区域的上下文中。 “用户” 是正在操作出于描述性目的而定 义了一特定观点的特定网络节点的通信者。
“区域服务器” 是包括区域网络基础结构服务的网络节点, 该区域网络基础结构服 务通过管理与虚拟区域中的对象相关联的客户端节点的会话来管理主存虚拟区域应用的 虚拟区域。
如本文所使用, 术语 “包括” 意指包括但不限于, 且 “包含” 意指包含但不限于。
II. 引言
本文描述的实施例提供支持在相应网络节点上操作的通信者之间的实时通信的 实时内核。该实时内核处置连接到通信者、 虚拟区域、 以及其他网络资源、 响应于用户输入 开关这些连接、 以及混合实时数据流的复杂任务。实时内核使开发者能够专注于开发高级 通信功能而非低级衔接代码。实时内核施加相对低的计算资源要求, 从而实时通信性能可 使用当前可用的宽泛计算设备和网络连接来达成。在一些实施例中, 实时内核支持响应于从远程主存的虚拟区域应用接收的指令 ( 也称为定义 ) 来远程配置和执行音频和图形呈现引擎、 以及开关实时数据流。这样, 实时 内核使得虚拟区域设计者能维持对远程客户端网络节点上的沉浸性虚拟通信环境的呈现 的控制, 由此鼓励开发众多不同类型的虚拟区域并增加将希望采用该通信系统的用户的数 量。
在一些实施例中, 实时内核监视实时数据流的处理并基于该处理与性能目标的偏 差适配该处理。 这样, 无论其中正执行实时数据流处理的计算环境如何, 内核增加了实时性 能能够达成的可能性。
在一些实施例中, 实时内核实现在连接和断开连接、 以及在传输时高效的流传输 协议。在这样一些实施例中, 流传输协议在无连接传输协议 ( 例如, UDP) 上提供面向连接 的加密连接。实时内核另外在客户端应用和传输层之间提供重连机制, 该重连机制自动尝 试重新建立失败了的连接而无需客户端应用的干预, 由此在固有不可靠的通信协议上增加 了可靠性。
在一些实施例中, 实时内核具有插件架构, 该插件架构允许由一个或更多个可被 动态加载到客户端网络节点上的插件提供内核组件的功能性。这样, 内核组件可被独立开 发并被远程管理和更新。插件架构另外允许实时内核的安装覆盖区域实质上减小, 由此允 许内核被安装在宽泛的包括那些具有显著计算和存储资源限制的客户端设备上。 III. 概览
A. 引言
图 1 示出了包括由网络 18 互连的第一客户端网络节点 12、 第二客户端网络节点 14、 和区域服务器网络节点 16 的示例性虚拟区域通信环境 10 的实施例。第一客户端网络 节点 12 包括包含一个或更多个可配置的流处理机 22 的实时内核 20 的实施例、 以及输入 / 输出 (I/O) 硬件 24。第二客户端网络节点 14 通常以与第一客户端网络节点 12 基本相同的 方式进行配置。区域服务器网络节点 16 包括通过管理虚拟区域 28 中第一和第二客户端节 点 12、 14 的会话来管理虚拟区域 28 的区域网络基础结构服务 26( 也简称为 “区域服务” )。 虚拟区域 28 主存包括用于创建虚拟区域通信环境的虚拟区域的描述的虚拟区域应用 30。 区域服务 26 根据虚拟区域应用 30 来管理虚拟区域 28。
在创建共享虚拟区域通信环境的过程中, 区域服务 26 根据远程虚拟区域应用 30 受虚拟区域应用 30 上的一组限制 32 影响地远程配置第一和第二客户端网络节点 12、 14 中 的实时内核。 限制 32 通常包括对访问虚拟区域的控制。 访问控制一般基于一个或更多个能 力 ( 其中对具有适当能力或许可的通信者或客户端节点准许访问 ) 和访问控制列表 ( 其中 对具有列表上的身份的通信者或客户端节点准许访问 )。在一些实施例中, 限制 32 由安全 网络基础结构服务所管理 ( 在以下描述 )。在第一和第二客户端网络节点 12、 14 上操作的 这通过根据经由实时内核 20 从 客户端软件应用允许通信者访问共享虚拟区域通信环境, 区域服务 26 接收的数据呈现虚拟区域的相应视图以及通过提供用于从通信者接收命令的 接口来实现。通信者通常在虚拟区域 32 中由相应的化身来表示, 这些化身响应于由通信者 在其相应的网络节点处输入的命令而在虚拟区域中四处移动。 每个通信者看到的虚拟区域 的视图通常是从该通信者的化身的角度来呈现的, 这增强了通信者体验到的沉浸感级别。 每个通信者通常能够看到在他或她的化身周围的任何虚拟区域部分。 在第一和第二客户端
网络节点 12、 14 上操作的实时内核至少部分地基于虚拟区域中通信者的化身的位置来建 立与共享该虚拟区域通信环境的其他网络节点的实时数据流连接。
图 2 示出了由实时内核 20 实现的方法的示例性实施例。 根据该方法, 实时内核 20 建立与区域服务 26 的会话 ( 图 2, 框 34)。无论响应于通信者输入还是自动地, 实时内核 20 请求进入虚拟区域 28 的实例 ( 图 2, 框 36)。如果对通信者访问虚拟区域实例的限制 32 得 到满足, 则区域服务 26 向实时内核 20 传送包括当前状态信息的配置数据, 其中当前状态信 息包括虚拟区域中化身的位置。实时内核 20 从区域服务 26 接收配置数据 ( 图 2, 框 38)。 实时内核 20 根据从区域服务 26 接收的指令来配置 I/O 硬件 24 以呈现人类可感知的虚拟 区域通信者环境 ( 图 2, 框 40)。
在一些实施例中, 配置 I/O 硬件 24 的过程涉及根据从远程网络节点 14 接收的指 令和位置数据动态配置至少一个流处理机 22。 例如, 虚拟区域应用 30 可指定一个或更多个 应被应用于与虚拟区域中当前的对象相关联的音频流的音频效果, 在这种情况下, 区域服 务 26 向在第一和第二客户端网络节点 12、 14 上执行的实时内核发送指令, 该指令根据虚拟 区域中相应对象的位置来配置其相应音频流处理机以实现指定的效果。
实时内核 20 通过每个配置的流处理机 22 处理与通信者对象相关联的实时数据流 以产生相应输出 33。 取决于其内容, 输出 33 可被存储在计算机可读介质上或由在第一和第 二网络节点 12、 14 上操作的 I/O 硬件转换成人类可感知的输出。例如, 音频输出信号由音 频硬件 ( 例如, 声卡和扬声器 ) 转换成可听的声音, 而图形输出信号由图形硬件 ( 例如, 视 频卡和显示器 ) 转换成可见的图像。在一些实施例中, 由至少一个流处理机 22 产生的输出 33 被一个或更多个下游软件组件处理, 该下游软件组件依次产生可被存储在计算机可读介 质上或被转换成人类可感知的输出的输出。
B. 示例性操作环境
实时内核 20 在虚拟区域通信环境 10 的上下文中操作, 虚拟区域通信环境 10 包括 网络 18 和网络基础结构服务环境, 后者包括包含区域服务 26 的若干网络基础结构服务。 实 时内核 20 和网络基础结构服务环境构成用于为通信者创建虚拟区域通信环境的平台。
1. 网络环境
网络 18 可包括局域网 (LAN)、 城域网 (MAN)、 以及广域网 (WAN)( 例如, 因特网 ) 的 任一者。网络 18 通常包括若干支持网络节点之间的各种不同媒体类型 ( 例如, 文本、 语音、 音频、 和视频 ) 的传输的计算平台和传输设施。
实时内核 20 通常在包括软件和硬件资源的网络节点上操作, 该软件和硬件资源 与管理性策略、 用户偏好 ( 包括关于用户存在性的出口以及用户至区域和连接对象的连接 的偏好 )、 以及其他设置一起来定义影响与其他网络节点的实时连接的管理的本地配置。 网 络节点之间的网络连接可安排在各种不同的流处置拓扑中, 包括对等架构、 服务器仲裁架 构、 以及组合了对等和服务器仲裁架构的各方面的混合架构。
图 3A 示出虚拟区域通信环境 10 的实施例 42, 其中第一和第二网络节点 12、 14 以 及远程网络节点 16 由对等架构的通信网络 18 互连。在此架构中, 网络节点 12-16 的每一 个向其他网络节点的每一个传送状态变化 ( 例如, 虚拟区域 28 中的化身运动 )。网络节点 之一 ( 通常为发起通信会话的网络节点 ) 作为 “区域服务器” 操作。在所解说的实施例中, 网络节点 16 承担了区域服务器的角色。区域服务器网络节点 16 维护全局状态信息并用作其他网络节点 12、 14 的数据服务器。全局状态信息包括虚拟区域中的所有对象的列表及其 在虚拟区域中的相应位置。区域服务器网络节点 16 发送配置其他网络节点 12、 14 的指令。 区域服务器网络节点 16 也登记并向请求加入通信会话的其他网络节点传送初始化信息。 在此过程中, 区域服务器网络节点 16 根据虚拟区域应用 30 向每个加入的客户端网络节点 传送在客户端网络节点上呈现虚拟区域 28 所需的组件 ( 例如, 插件 ) 的列表。客户端网络 节点 12、 14 上的实时内核通常从远程服务器 ( 例如, 插件服务器 ) 检索列表上的任何缺失 的组件。区域服务器网络节点 16 也确保若发生通信故障, 其他网络节点 12、 14 能同步到全 局状态。
图 3B 示出虚拟区域通信环境 10 的实施例 44, 其中网络节点 12-16( 在此架构中也 称为 “区域客户端” 网络节点 ) 在由区域服务器 46 仲裁的架构中通信。在此实施例中, 区 域服务器 46 承担在图 3A 所示的对等架构实施例中由网络节点 16 执行的区域服务器功能。 这样, 区域服务器 46 维护全局状态信息并用作区域客户端网络节点 12-16 的数据服务器。 该架构允许将在各种拓扑 ( 包括对等拓扑、 其中区域服务器 46 作为网络节点 12-16 之间的 通信代理操作的全服务器仲裁拓扑、 以及组合了对等拓扑和全服务器仲裁拓扑的各方面的 混合拓扑 ) 中处理的区域客户端节点 12-16 之间的实时数据流交换。这些类型的示例性拓 扑在美国申请号为 11/923,629 和 11/923,634 的申请中描述, 两者都在 2007 年 10 月 24 日 提交。
2. 网络基础结构服务
在建立和管理与其他网络节点的网络连接的过程中, 一个或更多个网络基础结构 服务通常与实时内核 20 协作。网络基础结构服务可运行在单个网络节点上或可跨多个网 络节点分布。网络基础结构服务通常运行在一个或更多个专用的网络节点上 ( 例如, 执行 诸如路由和交换等边缘服务的服务器计算机或网络设备 )。然而, 在一些实施例中, 一个 或更多个网络基础结构服务运行在至少一个通信者网络节点上。虚拟区域通信环境 10 的 示例性实施例中所包括的网络基础结构服务有帐户服务、 安全性服务、 区域服务 26、 集合服 务、 以及交互服务等。
帐户服务管理网络基础结构服务环境中的通信者帐户。 帐户服务也管理可由客户 端网络节点用于向任何网络基础结构服务认证它们自己的认证令牌的创建和发出。
安全性服务控制通信者对虚拟区域通信环境 10 的资产和其他资源的访问。由安 全性服务实现的访问控制方法通常基于一个或更多个能力 ( 其中对具有适当能力或许可 的实体准许访问 ) 和访问控制列表 ( 其中对具有列表上的身份的实体准许访问 )。在已经 准许特定通信者访问资源后, 该通信者通常使用由其他网络基础结构服务提供的功能性在 虚拟区域通信环境 10 中交互。
区域服务 26 管理虚拟区域。在此过程中, 区域服务 26 根据请求实体的能力来管 理与虚拟区域相关联的连接、 维护虚拟区域的全局状态信息、 以及用作参与由虚拟区域定 义的上下文中的共享通信会话的客户端网络节点的数据服务器。 全局状态信息包括虚拟区 域中的所有对象的列表及其在虚拟区域中的相应位置。区域服务 26 发送配置客户端网络 节点的指令。区域服务 26 也登记并向请求加入通信会话的其他客户端网络节点传送初始 化信息。在此过程中, 区域服务 26 根据虚拟区域应用 30 向每个加入的客户端网络节点传 送在客户端网络节点上呈现虚拟区域 28 所需的组件 ( 例如, 插件 ) 的列表。区域服务 26也确保若发生通信故障, 客户端网络节点能同步到全局状态。
集合服务根据请求实体的能力来管理存在性信息的收集、 存储和分发并为网络节 点提供用于彼此通信的机制 ( 例如, 通过管理连接句柄的分发 )。 集合服务通常在存在性数 据库中存储存在性信息。
交互服务根据请求实体的能力来维护记录通信者之间的交互的交互数据库并支 持对交互数据库的查询。对通信者之间的每个交互, 虚拟区域通信环境 10 中的一个或更多 个服务 ( 例如区域服务 26) 向交互服务传送交互数据。作为响应, 交互服务在关系数据库 中生成一个或更多个相应交互记录。每个交互记录描述交互的上下文。例如, 在一些实施 例中, 交互记录包含每个通信者的标识符、 交互场所的标识符 ( 例如, 虚拟区域实例 )、 交互 场所的等级的描述 ( 例如描述交互空间如何与较大区域相关 )、 交互的起始和结束时间、 以 及在交互期间共享的所有文件和其他流的列表。 因此, 对于每个实时交互, 交互服务跟踪其 在何时发生, 在何处发生、 以及在交互期间就所涉及的通信者而言发生了什么 ( 例如, 进入 和退出 )、 被激活 / 禁用的对象、 以及共享的文件。
交互服务能基于场所以分类次序 ( 例如, 最频繁的或最近的 ) 呈现对交互数据库 记录的查询结果。 查询结果能被用于导出通信者已经在哪些虚拟区域内遇到的联系人的频 率分类, 以及不论虚拟区域通信者已经遇到的联系人的分类、 以及通信者最经常出入的虚 拟区域的分类。 查询结果还可被应用开发者用作基于关系使某些任务自动化的启发式系统 的一部分。此类型的启发的示例是允许已经到访特定虚拟区域超过 5 次的通信者不必经默 认的敲门就能进入的启发, 或者是允许在特定时间存在于一区域中的通信者修改和删除由 在相同时间存在于相同区域中的另一通信者创建的文件的启发。 对交互数据库的查询可与 其他搜索相组合。例如, 对交互数据库的查询可与针对使用在网络基础结构服务环境的域 之外的通信系统 ( 例如, Skype、 Facebook、 以及 Flickr) 与联系人交互而生成的联系历史数 据的查询相组合。
3. 虚拟区域
实时内核 20 管理由虚拟区域的实例定义的通信上下文中与网络节点的实时连 接。虚拟区域实例可对应关于抽象坐标所定义的抽象 ( 非几何 ) 虚拟空间。替换地, 虚拟 区域实例可对应关于与特定可视化相关联的一维、 二维、 或三维几何坐标所定义的视觉虚 拟空间。抽象虚拟区域可以与相应可视化相关联或者也可不相关联, 而视觉虚拟区域与相 应可视化相关联。
如上所解释的, 通信者通常在具有相关联的可视化的虚拟区域中由相应的化身来 表示。 化身响应于由通信者在其各自相应的网络节点处输入的输入命令在虚拟区域中四处 移动。通信者看到的具有相关联的可视化的虚拟区域实例的视图通常是从该通信者的化 身的观点呈现的, 且每个通信者通常能够观看到他或她的化身周围的任何视觉虚拟区域部 分, 从而增强了通信者体验到的沉浸感级别。
图 4 示出了由计算机系统 48 实现的示例性网络节点的实施例。计算机系统 48 包 括显示监视器 50、 计算机鼠标 52、 键盘 554、 扬声器 56、 58、 以及话筒 60。显示监视器 50 显 示图形用户界面 62。图形用户界面 62 是基于窗口的图形用户界面, 其可包括多个窗口、 图 标、 和指针 64。在所解说的实施例中, 图形用户界面 62 呈现对与表示艺廊的三维可视化相 关联的共享虚拟区域 66 的二维描绘。 通信者在该虚拟区域 66 中由各自相应的化身 68、 70、72 来表示, 每个化身可在该虚拟区域 66 的上下文中具有各自相应的角色 ( 例如, 馆长、 艺术 家、 和游客 )。
如以下详细解释的, 虚拟区域 66 包括与支配在虚拟区域 66 中由化身 68-72 表示 的网络节点间的实时数据流开关的相应规则相关联的地带 74、 76、 78、 80、 82。( 在典型的通 信会话期间, 图 4 中划界出地带 74-82 的虚线对于通信者而言是不可见的, 尽管可以有与此 类地带边界相关联的视觉线索。) 开关规则规定在每一个网络节点上执行的本地连接过程 如何基于通信者的化身 68-72 在虚拟区域 66 的地带 74-82 中的位置来建立与其他网络节 点的通信。
虚拟区域由包括对该虚拟区域的几何要素的描述以及一个或多个规则 ( 包括开 关规则和支配规则 ) 的规范来定义。开关规则支配网络节点之间的实时流连接。支配规 则控制通信者对诸如虚拟区域本身、 具有虚拟区域的区划、 以及虚拟区域内的对象之类的 资源的访问。在一些实施例中, 虚拟区域的几何要素根据 COLLADA-Digital Asset Schema Release 1.4.1 April 2006 specification(2006 年 4 月数字资产计划版本 1.4.1 规范, 从 http://www.khronos.org/collada/ 得到 ) 进行了描述, 而开关规则根据在美国申请号 11/923,629 和 11/923,634 中描述的 COLLADA 流参考规范使用可扩展标记语言 (XML) 文本 格式 ( 在本文称作虚拟空间描述格式 (VSDL)) 进行了描述。
虚拟区域的几何要素通常包括虚拟区域的物理几何和碰撞几何。 物理几何描述虚 拟区域的形状。物理几何通常由三角形、 四边形、 或多边形的表面形成。颜色和纹理被映射 到物理几何上以创建虚拟区域的更真实表观。 例如可通过在视觉几何上描绘光线并修改光 线附近的纹理、 颜色、 或亮度来提供光照效果。 碰撞几何描述确定对象可在虚拟区域中移动 的方式的不可见表面。 碰撞几何可与视觉几何一致、 对应于视觉几何的更简单的近似、 或者 与对虚拟区域设计者的因应用而异的要求有关。
开关规则通常包括对用于按照虚拟区域中的位置来连接实时数据流的源和阱的 条件的描述。 每个规则通常包括定义该规则所适用的实时数据流类型以及该规则在该虚拟 区域中所适用的 ( 诸 ) 位置的属性。在一些实施例中, 每个规则任选地可包括指定源的所 要求角色、 阱的所要求角色、 流的优先级别、 和所请求的流处置拓扑的一个或多个属性。在 一些实施例中, 如果没有为虚拟区域的特定部分定义的显式开关规则, 则可向虚拟区域的 该部分应用一个或多个隐式或缺省开关规则。 一个示例性缺省开关规则是依照策略规则将 区域内的每个源连接至每个相兼容的阱的规则。 策略规则可全局地适用于区域客户端之间 的所有连接、 或者仅适用于与个体区域客户端的相应连接。策略规则的示例是接近度策略 规则, 该规则仅允许与虚拟区域中彼此在规定距离 ( 或半径 ) 内的相应对象相关联的源和 兼容阱的连接。
在一些实施例中, 支配规则与虚拟区域相关联以控制谁能访问该虚拟区域、 谁能 访问其内容、 对该虚拟区域的内容的访问的范围是什么 ( 例如, 用户关于该内容能做什 么 )、 以及访问这些内容的后继结果是什么 ( 例如, 记录保持, 诸如审计日志、 和支付要求 )。 在一些实施例中, 整个虚拟区域或该虚拟区域的地带与 “支配网格” 相关联。在一些实施例 中, 支配网格是用类似于在美国申请号 11/923,629 和 11/923,634 中描述的地带网格的实 现的方式来实现的。 支配网格使得软件应用开发者能够将支配规则与虚拟区域或虚拟区域 的地带相关联。 这避免了为虚拟区域中的每个文件创建个体许可的需求并且避免了处理在需要取决于上下文不同地对待同一文档时可能产生的复杂度的需求。
在一些实施例中, 虚拟区域与将该虚拟区域的一个或多个地带与数字版权管理 (DRM) 功能相关联的支配网格相关联。DRM 功能控制对虚拟区域或该虚拟区域内的一个或 多个地带或该虚拟区域内的对象中的一者或多者的访问。 每次通信者越过该虚拟区域内的 支配网格边界时 DRM 功能被触发。DRM 功能确定该触发动作是否被许可, 并且如果许可, 则 确定所许可动作的范围、 是否需要支付、 以及是否需要生成审计记录。 在虚拟区域的示例性 实现中, 相关联的支配网格被配置成使得如果通信者能够进入该虚拟区域, 则他或她能够 对与该虚拟区域相关联的所有文档执行动作, 包括操控文档、 查看文档、 下载文档、 删除文 档、 修改文档和重新上载文档。 这样, 虚拟区域可变成在由该虚拟区域定义的背景中共享和 讨论的信息的储存库。
关于虚拟区域的规范的附加细节在美国申请号 61/042714( 提交于 2008 年 4 月 4 日 )、 11/923,629( 提交于 2007 年 10 月 24 日 )、 和 11/923,634( 提交于 2007 年 10 月 24 日 ) 中记载。
4. 其他平台组件
实时内核 20 被设计为作为客户端软件包的一部分的本地网络节点的组件来工 作, 其中客户端软件还包括 : a. 抬头显示器 (HUD) 软件应用 ;
b. 本地人类接口设备 (HID) 和音频回放设备 ;
c.So3D 图形显示、 化身、 和物理学引擎 ;
d. 系统数据库和存储设施。
a. 抬头显示器 (HUD)
抬头显示器 (HUD) 是在每一个客户端网络节点上操作的对实时内核 20 的应用接 口。 HUD 是用户能够在他或她的桌面上一直保持和运行的小型、 轻量级接口。 它是用于启动 虚拟区域应用、 为他或她提供对实时联系人和实时协作场所 ( 或区域 ) 的即时访问的用户 接口。虚拟区域通过 HUD 和实时内核 20 与用户的桌面整合在一起, 从而使得用户能将文件 拖放到虚拟区域通信环境中、 利用独立于虚拟区域通信环境的原生客户端软件应用来使用 与虚拟区域关联地存储同时又存在于虚拟区域中的文件、 以及更一般地将虚拟区域内的存 在性和位置作为其操作环境中类似于其他操作系统功能的一方面而不只是若干应用中的 一个应用来对待。
图 5A 和 5B 示出了通过坐落在通信者的桌面的右下角的半透明用户接口来实现的 HUD 的实施例 84。HUD 84 是通往平台的应用接口。HUD 84 的特性包括 :
·意欲在用户桌面上一直运行的小型、 轻量级应用 ; 以及
·为用户提供便于查看联系人并与联系人交互以及查看发生交互的虚拟区域并与 虚拟区域交互的接口。
在此实施例中, HUD 84 通过提供对控件的永久接口和访问的基本透明的 ( 半透 明 ) 用户接口覆盖来实现。在图 5A 所示的实施例中, HUD 84 是透明的, 除了该接口的以下 半透明要素中的一个或多个要素的有限集合 :
·渐进式沉浸感控件的轮廓 ;
·用户当前位置的轮廓 ;
·表示虚拟区域 86 中的实时联系人的子图形 ; 以及
·划界出 HUD 区域的边界的线条。
在实时内核 260 和 HUD 84 正在运行而并准备好发起实时通信会话的同时, 通信者 能够在普通桌面计算环境中工作。 例如, 通信者可与诸如微软 Excel 之类的其他应用合 作以创建稍后可以在实时通信会话中共享的文档。虚拟区域 86 与通信者的桌面整合在一 起, 从而使得该通信者能将文件拖放到虚拟区域中、 利用独立于虚拟区域通信环境的原生 客户端软件应用来使用与虚拟区域关联地存储同时又存在于虚拟区域中的文件、 以及更一 般地将虚拟区域内的存在性和位置作为其操作环境中类似于其他操作系统功能的一方面 而不是若干应用中的一个应用来对待。
当通信者在虚拟区域 86 中交互时, HUD 84 为通信者提供对他或她所期望的可视 化的独立控制。例如, 通信者可显示虚拟区域的最小化视图 ( 被最小化至桌面的右下角 ) 并参与同该虚拟区域中的另一通信者的音频交谈, 同时又工作在诸如微软 Excel 之类 的不同应用中。通信者随后可改变他或她的可视化模式并进入对虚拟区域 86 的更加沉浸 的三维呈现。这是通过将 HUD 84 中的渐进式沉浸感滑块 88 的设置从 “桌面” 改为 “3D” 来 实现的。一旦处在 3D 可视化模式下, 通信者的桌面就显示对虚拟区域 86 的 3D 呈现 ( 如图 5A 中所示 )。通信者 ( 在桌面模式下由子图形 90、 92、 94 表示 ) 现在采取如图 5A 中所示的 三维化身 96、 98、 100 的形式。
与虚拟区域 86 相关联的任何数据皆可被显示在观看屏 102、 104、 106 上。观看屏 是可被用于呈现任何随意数据的通用数据呈现组件。 可在观看屏上呈现的数据类型的示例 包括 :
·微软 PowerPoint 报告书
·视频
·网络摄像机的输出
·直接来自组织的企业资源规划 (ERP) 系统的实时数据
如图 5C 中所示, HUD 84 被设计成充当显示信息并提供对控件的访问的真实接口, 且对呈现在通信者的显示监视器上的图形用户界面 62 的底层部分只有最小的遮挡。HUD 84 高效地显示 :
·该通信者的当前在线的实时联系人,
·该通信者与该通信者的实时联系人当前 “位于” 该虚拟区域 86 中的何处,
·控制虚拟区域 86 的可视化的渐进式沉浸感控件, 以及
·使得用户能快速连接至特定场所的导航控件。
具体地, HUD 84 为通信者提供对其实时联系人以及在发生实时协作的虚拟区域的 即时访问。 HUD 84 允许基于人的位置在区域中导航以及允许对虚拟区域的查看。 这些虚拟 区域可以许多方式访问 : 最频繁使用的、 最近使用的、 或应用指定方式。
HUD 84 显示一组有序的场所瓦片 108、 110、 112。点击场所瓦片中的一个将用户带 到由所选择的场所瓦片所表示的虚拟区域。对于人而言, 具有去 ( 往通信者的区域 ) 和取 ( 将他们带到用户的区域 ) 的基本隐喻。 这在 HUD 84 中通过允许通信者对去或取请求进行 排队以及在无需 “移动” 的情况下经由文本或语音与人通信来完善。HUD 84 在从另一通信 者收到每个通信请求时通知该通信者。 该通信者可以接受该请求、 忽略它、 或将它添加到通信队列。这样, 通信者能在稍后的时间响应非优先通信。例如, 通信者可将在该通信者繁忙 ( 例如, 忙于当前通信会话 ) 的时间期间收到的通信进行排队, 并且在该通信者空闲之后, 该通信者可响应该通信队列中的通信请求。
如上所述, 交互网络基础结构服务维护记录通信者遇到谁以及在哪里遇到的交互 数据库。交互服务用可按基于场所的分类次序 ( 例如, 最常或最近 ) 呈现的查询结果来响 应对关系数据库的查询。这样, 关系数据库信息可被用于导出该通信者在哪些区域遇见的 人的频率分类、 以及在不论区域的情况下该通信者已经遇见的人的分类、 和该通信者最常 出入的区域的分类。此数据被用在 HUD 84 中。该数据也可被用虚拟区域应用开发者用作 启发式系统的一部分 ( 例如, 准许已经拜访特定虚拟区域超过 5 次的人进入而无需默认的 敲门的规则、 或者允许在特定时间存在于虚拟区域中的人修改和删除由在同一时间在那里 的另一通信者创建的文件的规则 )。
在图 5C 中, HUD 84 呈现一系列表示相应虚拟区域的场所瓦片 108、 110、 112。这些 虚拟区域中的每一个被纽带联系到对关系数据库的查询。关于每个虚拟区域, 集合服务对 关系数据库查询用户已在该虚拟区域中遇见过的所有联系人。 集合服务通常在按频率或按 交互的最近性 ( 例如, 该通信者最后交互的联系人 ) 来分类的列表中呈现所标识的联系人。 在其他实施例中, 联系人可以其他某种取决于应用的方式来分类。
对关系数据库的查询可与其他搜索相组合。例如, 对关系数据库的查询可以与对 针对使用另一通信系统 ( 例如, Skype、 Facebook、 和 Flickr) 与联系人的交互所生成的联 系人历史数据的查询相组合。在一个示例中, Skype 虚拟区域 112 可以与对通信者的关联 于 Skype 虚拟区域 112 的关系数据和该通信者的 Skype 历史数据的查询相关联, 以产生该 用户的与 Skype 虚拟区域 112 相关联的实时联系人的分类列表。
图 5C 示出了对 HUD 84 中的联系人和虚拟区域的基本导航。点击与虚拟区域瓦片 108-112 中的每一个相关联的朝左箭头显示在给定场所中按交互频率分类的实时联系人的 列表。例如, 点击主 HUD 瓦片 84( 标记为 “办公室” ) 的朝左箭头 114 显示该用户在虚拟区 域 86 中最频繁通信的实时联系人。 联系人 ( 由各自相应的图标瓦片表示 ) 的列表按照频率 进行分类。列表中的第一位联系人 ( 在此示例中为 DVW) 代表该用户在虚拟区域 86 中合作 最频繁的联系人、 继之以 PJB、 Tim 等等。点击朝上箭头 116 显示代表该通信者已经到访过 的一些或所有虚拟区域的一组场所瓦片。 该组场所瓦片通常按频率、 最近性、 或其他排序来 分类。虚拟区域场所瓦片显示当前发生在相应虚拟区域中的实时活动。例如, DVW、 Kim 和 Joe( 由主虚拟区域瓦片 108 中的相应子图形表示 ) 皆在该主虚拟区域中并且正在进行实时 谈话, 而 Jeff、 Ann 和 Jane( 由虚拟区域瓦片 110 中的相应子图形表示 ) 全部在 Facebook 虚拟区域中。
假定任何通信者退出虚拟区域或进入虚拟区域, 此虚拟区域中的存在性指示器 ( 即, 由圆形所示出的小图形, 通常与名称或其他标识符相关联 ) 将自动被实时更新。该特 征证明虚拟区域设计者向场所瓦片输入应用专用实时数据的能力。场所瓦片可看起来与 通信者相关联, 或与通信者的场所相关联。 例如, 游戏开发者可输出通信者在其游戏环境中 所在地的地图, 由此通过关系数据库连接到该通信者的其他人接收对该通信者当前活动的 实时馈送。 这些人可使用该虚拟区域瓦片来导航至该通信者, 与他或她通信、 或联络他或她 ( 例如, 发送进入虚拟区域的邀请 )。HUD84 同时为许多不同的虚拟区域管理与联系人和虚拟区域的此接口。
HUD 虚拟区域瓦片 84、 108、 110、 112 中使用的实时数据由主存相关区域的区域服 务所管理的接口经由实时内核 120 来提供。每个区域服务可基于通信者察看所主存的虚拟 区域的许可向通信者提供对不同的相应 HUD 虚拟区域瓦片数据。例如, 如果通信者进入不 允许该通信者察看的虚拟区域, 则 HUD 虚拟区域瓦片可显示受限或没有详细信息。此外, 由 主存区域服务提供的 HUD 虚拟区域瓦片数据馈送可由操作该区域服务的虚拟区域提供商 定制以向订阅 HUD 呈现该虚拟区域的应用指定视图。
b. 本地人类接口设备 (HID) 和音频回放设备 ;
本地 HID 设备使通信者在参与虚拟区域通信会话时能向客户端网络节点输入命 令和其他信号。示例性的 HID 设备包括计算机键盘、 计算机鼠标、 触摸屏显示器、 以及话筒。
音频回放设备使通信者能回放在虚拟区域通信会话期间接收的音频信号。示例 性的音频回放设备包括用于操纵 ( 例如, 混频和施加特殊效果 ) 音频信号的音频处理硬件 ( 例如, 声卡 ), 以及用于输出声音的扬声器。
c.So3D 图形显示、 化身、 和物理学引擎
So3D 引擎是控制虚拟区域和虚拟区域内的对象在显示监视器上的相应视图显示 的三维可视化引擎。 So3D 引擎通常与图形用户界面驱动器和 HID 设备接口以呈现虚拟区域 的视图并允许通信者控制 HUD 应用的操作。
So3D 引擎通常经由实时内核 20 接收来自区域服务 26 的图形呈现指令。 在一些实 施例中, So3D 引擎也读取包含呈现通信者在虚拟区域中的化身所需要的图像的通信者化身 数据库。基于此信息, So3D 引擎从虚拟区域内的通信者的化身角度 ( 位置和取向 ) 生成虚 拟区域和该虚拟区域内的对象的视觉表示 ( 即, 图像 )。 该视觉表示通常被传递给操作系统 的图形呈现组件, 该图形呈现组件驱动图形呈现硬件在客户端网络节点上呈现虚拟区域的 视觉表示。
通信者可通过从 HID 设备 ( 例如, 计算机鼠标 ) 向实时内核 20 传送命令 ( 实时内 核 20 将视图控制命令传送给 So3D 引擎 ) 来控制虚拟区域的所呈现视图。So3D 引擎根据视 图控制命令来更新虚拟区域的视图。 So3D 引擎还根据经由实时内核 20 从区域服务 26 接收 的经更新的对象位置信息来更新虚拟区域在显示监视器上的图形表示。
d. 系统数据库和存储设施
系统数据库和存储设施存储平台使用的各种类型的信息。 通常由存储设施存储的 示例性的信息包括存在性数据库、 交互数据库、 化身数据库、 真实用户 id(RUID) 数据库、 样 式 (art) 缓冲数据库、 以及虚拟区域描述数据库。信息可在单个网络节点上存储或者可以 跨多个网络节点分布。
C. 示例性的通信会话
再次参见图 4, 在通信会话期间, 每个客户端网络节点生成相应的实时数据流集 ( 例如, 运动数据流、 音频数据流、 聊天数据流、 文件传递数据流、 以及视频数据流 )。例如, 每个通信者操纵一个或更多个生成运动数据流的输入设备 ( 例如, 计算机鼠标 52 和键盘 54), 运动数据流控制他或她的化身在虚拟区域 66 中的移动。 此外, 在计算机系统 48 附近本 地生成的通信者语音和其他声音由话筒 60 捕获。话筒 60 生成可被转换为实时音频流的音 频信号。音频流的相应副本被传送给由虚拟区域 66 中的化身表示的其他网络节点。在这些其他网络节点本地生成的声音被转换成实时音频信号并被传送给计算机系统 48。 实时内 核 20 将其他网络节点生成的音频流转换为由扬声器 56、 58 呈现的音频信号。运动数据流 和音频数据流可直接或间接从每一个通信者节点传送至其他客户端网络节点。 在一些流处 置拓扑中, 每个客户端网络节点接收由其他客户端网络节点传送的实时数据流的副本。在 其他流处置拓扑中, 一个或更多个客户端网络节点接收从源自 ( 发源于 ) 其他一些网络节 点的实时数据流导出的一个或更多个流混合。
在一些实施例中, 区域服务 26 维护包括虚拟区域的当前描述、 该虚拟区域中的对 象的当前登记、 以及当前正由主存区域服务 26 的网络节点生成的任何流混合的列表的全 局状态信息。对象登记通常包括针对虚拟区域中的每个对象的相应对象标识符 ( 例如, 唯 一地标识对象的标签 )、 能与关联于该对象的网络节点建立网络连接的连接句柄 ( 例如、 URI, 诸如 IP 地址 )、 以及标识与该对象相关联的实时数据源和阱 ( 例如, 与该对象相关联的 网络节点的源和阱 ) 的接口数据。对象登记还通常包括针对每个对象的一个或更多个可选 角色标识符, 该可选角色标识符可由通信者或区域服务 26 明确指派给对象, 或者可从对象 的其他属性推断出。 在一些实施例中, 对象登记还包括每个对象在虚拟区域中的当前位置, 这由区域服务 26 从对接收自与虚拟区域中的对象相关联的网络节点的实时运动数据流的 分析中确定。就此, 区域服务 26 从与虚拟区域中的对象相关联的网络节点接收实时运动数 据流、 并基于该运动数据跟踪通信者的化身和进入、 离开和在虚拟区域中四处移动的其他 对象。区域服务 26 根据被跟踪对象的当前位置来更新对象登记。
在管理与其他网络节点的实时数据流连接的过程中, 区域服务 26 维护针对每个 客户端网络节点的配置数据集, 包括接口数据、 地带列表、 以及当前位于虚拟区域内的对象 的位置。 接口数据包括针对与每个客户端网络节点相关联的每个对象的关于关联于该对象 的实时数据流类型的所有源和阱的相应列表。 地带列表是虚拟区域中当前被与相应客户端 网络节点相关联的化身占据的所有地带的登记。当通信者首次进入虚拟区域中时, 区域服 务 26 通常用位置初始化信息初始化当前对象位置数据库。之后, 区域服务 26 用对象在虚 拟区域中的当前位置来更新当前对象位置数据库, 该当前位置从对接收自共享虚拟区域的 其他客户端网络节点的实时运动数据流的分析中确定。
图 6 示出一种方法的实施例, 根据该方法, 区域服务 26 的实施例确定当用户进入 虚拟区域或穿过虚拟区域的地带之间的边界时要建立的一组所要求的实时数据流连接。 区 域服务 26 根据虚拟区域描述和每个通信者的化身在虚拟区域实例中的位置来建立该通信 者的所占据地带的列表 ( 图 6, 框 180)。在此过程中, 区域服务 26 从当前对象位置数据库 中检索用户化身在虚拟区域实例中的当前位置, 该位置包含化身在虚拟区域实例中的当前 位置的坐标。区域服务 26 随后比较通信者的化身的当前位置和虚拟区域描述中的地带定 义。区域服务 26 根据虚拟区域描述中与通信者化身的当前位置一致的所有地带来编辑所 占据地带列表。 例如, 在一些实施例中, 所占据地带列表包括其网格包含通信者化身的当前 位置的所有地带。
区域服务 26 确定为所占据地带列表中的地带定义的一组目标实时数据流类型 ( 图 6, 框 182)。 区域服务 26 随后从该组目标实时数据流类型、 对象在虚拟区域实例中的位 置、 以及虚拟区域描述中定义的开关规则确定所要求的实时数据流数据集 ( 图 6, 框 184)。
在一些示例性实施例中, 在区域服务 26 已经确定使用户能在共享虚拟区域实例中参与与其他网络节点的协作通信会话的实时数据流数据集 ( 图 6, 框 184) 后, 区域服务 26 确定将导致向计算机系统 120 传递所要求的数据流数据的实时数据流连接。
在一些实施例中, 区域服务 26 确定实时数据流处置拓扑, 该处置拓扑至少部分地 基于计算机系统 120 的带宽能力将实时数据流集传递给计算机系统 120。 在此过程中, 区域 服务 26 确定从未混合的实时数据流以及根据实时数据流的组合导出的流混合接收每个实 时数据流的相应形式。区域服务 26 还确定从直接对等网络路线和由一个或更多个其他网 络节点仲裁的网络路线接收每个实时数据流的网络路线。在已确定流处置拓扑后, 区域服 务 26 向在计算机系统 120 上操作的实时内核发送指令。该指令根据所确定的流处置拓扑 指定计算机系统 120 和其他一些网络节点之间所要求的实时数据流连接。
图 7 示出由实时内核 20 在确定向计算机系统 120 传递所要求的数据流数据的实 时数据流连接的拓扑过程中实现的方法的实施例。
根据该方法, 实时内核 20 确定计算机系统 120 是否具有直接从其他网络节点接收 所要求的实时数据流数据集 186 的足够带宽 ( 图 7, 框 188)。在此过程中, 其他网络节点向 计算机系统 120 传送链路请求。该链路请求指示计算机系统 120 传送相应的实时数据流集 所需要的相应带宽要求。实时内核 20 将建立所要求的直接连接所需要的总带宽与当前计 算机系统 120 可用的下载带宽进行比较。 如果可用带宽至少等于总要求带宽, 则实时内核 20 建立与提供所要求的实时数 据流数据的其他网络节点的直接连接 ( 图 7, 框 190)。在此过程中, 实时内核 20 创建计算 机系统 120 与一个或更多个其他网络节点之间的套接字 ( 例如, TCP 套接字或性能最优化 的专用实时套接字 )。实时内核 20 处理实时数据流, 包括加密它们、 记录它们、 以及将经处 理的数据流传递给呈现在用户界面中及在网络 18 上传送所需的下游软件组件。
如果可用带宽小于所要求带宽 ( 图 7, 框 188), 则实时内核 20 检查流混合列表以 确定区域服务 26 是否正在生成提供所要求实时数据流数据的流混合 ( 图 7, 框 192)。如果 需要的流混合可用, 则实时内核 20 与区域服务 26 建立将所需实时数据流混合的副本从区 域服务器 28 传送到计算机系统 120 的连接 ( 图 7, 框 194)。如果所需流混合不可用, 则实 时内核 20 向区域服务 26 发送流混合请求 ( 图 7, 框 196)。如果可能, 区域服务 26 响应于 流混合请求生成所需流混合。
IV. 系统架构
A. 引言
通信者通常从客户端网络节点连接到网络 18, 客户端网络节点通常由通用计算机 系统或专用通信计算机系统 ( 或 “控制台” , 诸如网络使能的视频游戏控制台 ) 来实现。网 络节点执行建立与其他网络节点的实时数据流连接的通信过程且通常执行呈现通信者进 入的每个虚拟区域的视图的可视化呈现过程。
图 8 示出了由计算机系统 120 实现的客户端网络节点的实施例。计算机系统 120 包括处理单元 122、 系统存储器 124 和将处理单元 122 耦合至计算机系统 120 的各种组件的 系统总线 126。处理单元 122 可包括一个或更多个数据处理器, 每个数据处理器可以是任 一种商业上可用的计算机处理器的形式。系统存储器 124 可包括存储包含计算机系统 120 的启动例程的基本输入 / 输出系统 (BIOS) 的只读存储器 (ROM) 和随机存取存储器 (RAM)。 系统总线 126 可以是存储器总线、 外围总线或本地总线, 并且可与任何总线协议 ( 包括 PCI、
VESA、 Microchannel、 ISA 和 EISA) 兼容。计算机系统 120 还包括连接至系统总线 126 并包 含一个或更多个提供对数据、 数据结构和计算机可执行指令的非易失或永久存储的计算机 可读介质盘的永久存储存储器 128( 例如, 硬盘驱动器、 软盘驱动器、 CD ROM 驱动器、 磁带驱 动器、 闪存设备、 以及数字视频驱动器 )。
通信者可使用一个或更多个输入设备 130( 例如, 一个或更多个键盘、 计算机鼠 标、 话筒、 摄像头、 操纵杆、 诸如 Wii 输入设备的物理运动传感器、 以及触摸垫等 ) 与计算机 系统 120 交互 ( 例如, 输入命令或数据 )。信息可通过在显示监视器 132 上呈现给通信者的 图形用户界面 (GUI) 来呈现, 这由显示控制器 134 控制。计算机系统 120 还可包括其他输 入 / 输出硬件 136( 例如, 诸如扬声器和打印机等外围输出设备 )。计算机系统 120 通过网 络适配器 138( 也称为 “网络接口卡” 或 NIC) 连接至其他网络节点 138、 140 和 142。
若干程序模块可被存储在系统存储器 124 中, 包括操作系统 (OS)144( 例如, 可 从美国华盛顿雷蒙德的微软公司获得的 Windows XP 操作系统 )、 实时内核 20、 驱动程序 146( 例如, GUI 驱动程序 )、 网络协议 148、 本地软件应用 150( 例如, HUD 84)、 以及数据 ( 例 如, 输入数据、 输出数据、 程序数据、 注册表 156、 以及配置设定 152)。
B. 操作系统 操作系统 144 通过提供用于创建计算机系统 120 上的运行时执行环境的基础操作 系统服务来主存软件应用。通常由操作系统提供的示例性类型的服务是资源管理、 文件管 理、 安全性、 认证、 验证、 通知、 以及用户接口 ( 例如、 窗口、 菜单、 对话等 )。
与计算机系统 120 的资源 ( 例如, 存储器、 处理器、 以及 I/O 设备 ) 管理有关的服 务通常由操作系统内核实现。 文件管理可由操作系统内核实现或可用分离的文件系统管理 器 ( 例如, 可安装的文件系统, 其在一些 Microsoft Windows 操作系统中提供 ) 实现。 在打开文件 ( 例如, 计算机数据文件或软件应用文件 ) 的过程中, 文件系统管理器通常调用 适当的文件系统驱动程序, 该文件系统驱动程序在映射出文件在磁盘上的存储位置的数据 库 ( 例如, 诸如 FAT、 FAT98、 VFAT、 MFT 以及 CDFS 等文件分配表 ) 中查找该文件的磁盘存储 位置。 诸如安全性、 认证、 验证、 通知、 以及用户接口的其他操作系统功能可由操作系统的一 个或更多个其他组件 ( 例如, 一些 Microsoft Windows 操作系统中的可执行服务层 ) 提 供。
通常由操作系统内核提供的示例性类型的服务是过程管理、 存储器管理、 设备管 理、 以及系统调用处置。过程管理包括运行应用并向计算机系统的硬件组件提供应用编程 接口 (API)。 在运行软件应用的过程中, 操作系统内核通常在存储器中建立用于该软件应用 的地址空间、 在该地址空间中加载包含该软件应用代码的文件、 以及执行加载的软件应用 代码。存储器管理涉及管理软件应用对系统存储器 124 的访问。设备管理涉及提供通过设 备驱动器对硬件设备的访问。 系统调用处置涉及提供向用户模式软件应用暴露操作系统内 核服务的 API。通过调用 API( 例如, 通过过程间通信机制和系统调用 ), 软件应用可向操作 系统内核请求服务、 传递参数、 以及接收响应于请求由服务生成的结果。
操作系统 144 通常在注册表 156 中存储硬件和软件配置信息、 用户偏好、 以及设置 信息。例如, 注册表 156 通常包含以下信息 : 引导和配置系统所需的参数值、 控制操作系统
144 的操作的系统范围的软件设置、 安全性数据库、 以及每用户简档设置。 在一些实施例中, 连接规则 32 被存储在注册表 156 而非分离的数据库中。C. 网络协议
网络协议 148 控制或使能计算机系统 120 和其他网络节点之间的连接、 通信、 和数 据传递。示例性的网络协议类型包括传输控制协议 / 网际协议 (TCP/IP)、 用户数据报协议 / 网际协议 (UDP/IP)、 实时传输协议 (RTP)、 以及会话发起协议 (SIP)。
TCP/IP 包括 TCP 部分和 IP 部分。该协议的 TCP 部分通过将消息分裂成较小分组、 在通信网络另一端重新组装分组、 以及重新发送任何在路上丢失的分组来提供传输功能。 该协议的 IP 部分通过向这些数据分组指派目的地网络以及该目的地网络处的目标节点的 地址来提供路由功能。使用 TCP/IP 传递的每个数据分组包括包含 TCP 和 IP 信息的头部。 IP 不向通信栈的上层提供分组传递的保证。另一方面, TCP 提供有保证的排队分组传递下 面向连接的端对端传输服务。这样, TCP 协议提供可靠的传输层连接。
UDP 是面向消息的传输层协议, 其提供应用层和因特网层之间的接口。UDP 不保证 消息传递到应用层。UDP 是无连接协议, 因为对建立专用端对端连接并无建树。UDP 发送方 在发送 UDP 消息后, 不保留关于这些 UDP 消息的状态信息。通信是基于从源到目的地的一 个方向上的消息传输, 不会检查接收机的状态。
RTP 定义用于通过网络连接传递音频和视频的标准化分组格式。各种网络协议可 被用于在网络节点之间传送和接收 RTP 数据, 包括对等连网框架、 单独使用 TCP 套接字或与 UDP 联用的集中式服务器、 以及多播协议。
SIP 向用户提供用于彼此定位、 建立通信会话、 以及终止活动会话的手段。有了 SIP 事务, 根据会话描述协议 (SDP) 来处置话商定过程。
D. 设备驱动程序
设备驱动程序 146 通常由使其他软件应用 ( 例如, 用户模式的软件应用和操作系 统 ) 与连接至计算机系统 120 的硬件设备交互的软件应用来实现。设备驱动程序通常向可 由软件过程作出的调用所调取的功能提供 API, 以便转换在软件过程和硬件设备之间传递 的命令和数据。
E. 实时内核
1. 引言
实时内核 20 包括控制计算机系统 120 和共享虚拟区域通信环境的其他网络节点 之间的实时数据流的处理和开关的服务, 以及虚拟区域和该虚拟区域中的对象在显示监视 器 132 上的相应视图呈现的服务。在这些过程中, 实时内核与和驱动程序 148 进行通信的 操作系统功能接口以向和从计算机系统 120 的硬件组件传递命令和数据, 以便与其他网络 节点交换实时数据流并向通信者呈现沉浸性虚拟区域通信体验。
实时内核 20 的实现包括一个或更多个分立模块或分立库 ( 例如, 动态链接的库 ), 这并不限于任何特定的硬件、 固件、 或软件配置。一般来说, 这些模块可在任何计算或数据 处理环境中实现, 包括在数字电子电路 ( 例如, 应用专用集成电路, 诸如数字信号处理器 (DSP)) 中或在计算机硬件、 固件、 设备驱动器、 或软件中。 在一些实施例中, 模块的功能性被 组合进单个数据处理组件。在一些实施例中, 一个或更多个模块的每一者的相应功能性由 多个数据处理组件的相应集执行。在一些实现中, 用于实现实时内核 20 的实施例执行的方 法的过程指令 ( 例如, 诸如计算机软件等计算机可读代码 ), 以及它们生成的数据被存储在 一个或更多个计算机可读介质上。 适用于有形地表达这些指令和数据的存储设备包括所有形式的非易失性计算机可读存储器, 包括例如诸如 EPROM、 EEPROM 和闪存设备的半导体存 储设备 ; 诸如内部硬盘和可移动硬盘的磁盘 ; 磁光盘 ; DVD-ROM/RAM 以及 CD-ROM/RAM。
2. 示例性实时内核功能性
实时内核 20 与一个或更多个网络基础结构服务协作以建立并管理计算机系统 120 与共享虚拟区域通信环境的其他网络节点之间的网络连接。在建立并管理网络连接过 程中涉及的示例性功能性有会话管理、 远程控制流处置、 以及实时任务调度。
e. 会话管理
图 9 示出由实时内核 20 响应于请求连接至虚拟区域的实时内核 API 调用实现的 方法的实施例。
根据图 9 的方法, 实时内核 20 确定虚拟区域的指定 ( 图 9, 框 160)。在一些实施 例中, 实时内核 20 的该功能性通过向实时内核服务发起包括虚拟区域指定的实时内核 API 调用来调取。实时内核 API 调用可由任何软件应用、 操作系统服务作出。
实时内核 20 建立与主存指定的虚拟区域的网络基础结构服务的会话 ( 图 9, 框 162)。在此过程中, 实时内核 20 建立与区域服务 26 的会话。实时内核 20 随后向区域服务 26 传送对连接至指定的虚拟区域的请求。 区域服务 26 确定从实时内核 20 接收的请求中指 定的虚拟区域的实例。在确定虚拟区域实例的实例后, 区域服务 46 确定用户能力是否满足 与虚拟区域实例相关联的能力要求。如果用户能力符合能力要求, 则区域服务 46 传送指示 描述虚拟区域实例的当前状态的状态数据的可用性的消息 ( 例如, 当前在虚拟区域实例中 的对象的列表、 以及与这些对象相关联的通信者的名称 )。
实时内核 20 订阅描述虚拟区域实例的当前状态的状态数据 ( 图 9, 框 164)。响应 于订阅请求, 区域服务 26 向实时内核 20 和区域服务 26 之间的链路上的信道公布状态信 息。
在一些实施例中, 实时内核 20 的 So3D 引擎调用操作系统 144 的用户接口服务以 呈现状态数据的人类可感知的视图。例如, So3D 引擎可调用接口服务以在显示器 132 上呈 现与当前在该区域内的对象相关联的每个通信者的表示。在一些实施例中, 通信者可由图 标、 缩略图、 或可选地用该通信者名称标记的其他图形来表示。在一些实施例中, 状态数据 在触发了实时内核 20 的调用的软件应用的图形界面中呈现。在一些实施例中, 状态数据在 抬头显示器 (HUD) 界面 84 的实施例中呈现 ( 参见图 5A-5C)。
在已经建立与虚拟区域实例的连接后, 触发实时内核 20 调用的软件应用可给予 用户请求进入虚拟区域实例内的选项或可代表该用户自动请求进入该虚拟区域实例内。
图 10 示出由实时内核 20 响应于请求进入虚拟区域的实时内核 API 调用实现的方 法的实施例。
根据图 10 的方法, 实时内核 20 向主存虚拟区域的网络基础结构服务宣称进入该 虚拟区域的意图 ( 图 10, 框 168)。在此过程中, 实时内核 20 向区域服务 26 发送包含该宣 称的消息。该消息可在与区域服务 26 的现有链路的信道上发送, 或者在实时内核 20 建立 的与区域服务 26 的新链路上发送。作为相应, 区域服务 26 确定用户能力是否满足与虚拟 区域实例相关联的能力要求。如果用户能力符合能力要求, 则区域服务 26 向实时内核 20 返回配置数据。 根据虚拟区域实例的描述, 配置数据通常包括虚拟区域实例的定义、 当前在 该虚拟区域实例内的对象的登记、 以及与虚拟区域中的对象相关联的实时数据流源和阱的集合。 实时内核 20 发起至少一个实时数据流在与至少一个实时数据流源的至少一个网 络连接上的传递, 其中该至少一个数据流源分别与虚拟区域中的至少一个对象相关联 ( 图 10, 框 170)。 在此过程中, 实时内核 20 基于从区域服务 26 接收的配置数据确定与虚拟区域 的实例相关联的一个或更多个网络节点。实时内核 20 随后发起至少一个实时数据流在与 至少一个所确定的网络节点的至少一个网络连接上的传递。实时内核 20 和其他网络节点 之间的连接可以是对等连接或服务器仲裁的连接。关于对等连接, 连接目标网络节点和实 时内核 20 通常彼此认证, 并且随后建立链路, 经由该链路向或从连接目标传送至少一个实 时数据流。链路通常是单向的且由发射机请求并由接收机接受或拒绝。
在所解说的实施例中, 实时内核 20 根据虚拟区域实例的描述中的至少一个流处 置定义来处理发起的实时数据流 ( 图 10, 框 172)。在此过程中, 实时内核 20 根据虚拟区域 描述中定义的流处理配置将流处理对象集组装成有向图。
f. 远程控制的流处置
图 11 示出由实时内核 20 响应于从虚拟区域服务 26 接收的处置指令实现的方法 的实施例。
根据图 11 的方法, 实时内核 20 从在远程网络节点上操作的区域服务 26 接收一个 或更多个流处置指令, 其中该流处置指令包括用于处理至少一个实时数据流的流处理机的 描述 ( 图 11, 框 200)。实时内核 20 根据流处理机描述创建流处理机 ( 图 11, 框 202)。流 处理机通常包括一个或更多个流处置指令中描述的混合功能。 该混合功能用于将实时数据 流与至少一个其他实时数据流混合以产生混合的实时数据流。实时内核 20 在包括通过所 创建的流处理机处理实时数据流的过程中产生所得数据流 ( 图 11, 框 204)。在一些实施例 中, 该过程涉及从一个或更多个流处置指令中指定的实时状态信息中确定配置参数值、 以 及用该配置参数值动态地配置流处理机。
图 12 示出由流处理机配置管理器 208( 其为实时内核 20 的组件 ) 根据从区域服务 26 接收的流处置指令 210 创建的流处理机 206 的实施例。流处理机配置管理器 208 通常由 一个或更多个构成服务和实时内核 20 的其他组件构成。流处理机配置管理器 208 从一组 处理对象 ( 也称为处理图元或 PGE) 构造流处理机 206。 每个处理对象是能够对数据流执行 特定功能 ( 例如, 变换功能、 分立功能、 以及混合功能 ) 的软件对象。流处理机配置管理器 208 实例化一个或更多个流处置指令中指定的处理对象并根据描述将实例化的处理对象组 装成流处理机 206 的有向图组件 212。 在一些实施例中, 流处置指令用相应的唯一标识符来 指定处理对象且流处理机配置管理器 208 通过向处理对象 API 发起包括相应一些标识符的 调用来实例化处理对象。流处理机 206 被配置成通过相应处理链 216-218 处理特定数据类 型 ( 例如, 音频、 视频、 以及运动数据类型 ) 的多个数据流 214, 这些处理链由相应一些处理 对象构成。流处理机 206 另外包括混合对象 220( 其在一个或更多个流处置指令中指定 )。 在操作中, 流处理机 206 执行混合对象 220 以从经处理实时数据流 216-218 的组合产生混 合实时数据流 222。 在一些实施例中, 至少一个实例化的处理对象将相应的调用封装到驱动 程序模块 224, 该驱动程序模块至少部分地基于所得数据流 222 控制本地网络节点的硬件 组件。
g. 实时任务调度
图 13 示出由实时内核 20 在调度由实时内核 20 执行的任务的过程中实现的方法 的实施例。
根据图 13 的方法, 实时内核 20 建立与至少一个远程网络节点的至少一个实时数 据流连接 ( 图 13, 框 230)。
实时内核 20 处理源自远程网络节点的至少一个实时数据流 ( 图 13, 框 232)。在 此过程中, 实时内核 10 通过一个或更多个实时数据处理操作处理该至少一个实时数据流 以产生所得数据流。
实时内核 20 监视该至少一个实时数据流的处理 ( 图 13, 框 234)。在一些实施例 中, 实时内核 10 监视一个或更多个以下参数 : 所得数据产生的速率、 本地网络节点的至少 一个处理器的利用、 以及本地网络节点的至少一个连网资源的带宽利用。 在一些实施例中, 实时数据流被分组成帧且实时内核 20 在根据本地时钟设定的每一相继固定长度间隔期间 监视每一帧的处理, 该本地时钟通常与远程主时钟服务同步。基于该监视, 实时内核 20 确 定实时数据流的处理是否偏离性能目标。在一些实施例中, 性能目标包括对产生所得数据 流的基于时间的阈值。 例如, 在一些实施例中, 性能目标是对产生所得数据流的帧的速率的 谓项 ( 即, 条件 )。该类型的示例性的性能目标包括目标阈值和目标范围。
响应于确定该至少一个实时数据流的处理偏离性能目标, 实时内核 20 根据实时 性能目标例程修改该处理 ( 图 13, 框 236)。
图 14 示出由实时内核 20 基于对至少一个实时数据流的处理的监视而执行的方法 的实施例。 响应于确定对该至少一个实时数据流的处理没有满足性能目标 ( 图 14, 框 238), 实时内核 20 将计算资源负载减少至较低水平 ( 图 14, 框 240)。取决于实时性能目标例程 的设计, 实时内核 20 通常以下列方式中的一种或更多种来减少计算资源 : 实时内核 20 可忽 略实时数据流的一个或更多个部分的处理 ( 图 14, 框 242) ; 实时内核 20 可忽略一个或更多 个实时数据处理操作 ( 图 14, 框 244) ; 以及实时内核 20 可用不同的相应数据处理操作替代 至少一个实时数据处理操作 ( 图 14, 框 246)。在忽略实时数据流的一个或更多个部分的处 理的过程中 ( 图 14, 框 242), 实时内核 20 通常执行以下操作中的至少一个 : 忽略一个或更 多个由性能目标之外的相应性能值表征的数据处理操作 ; 以及基于分别指派给各个数据处 理操作的优先级值优先忽略一个或更多个数据处理操作。
如果该至少一个实时数据流的处理满足性能目标 ( 图 14, 框 238) 且计算负载已经 通过以上描述的任一种方法被减少至较低水平 ( 图 14, 框 248), 则实时内核 20 从该较低水 平增加计算负载 ( 图 14, 框 250)。实时内核 20 通常根据启发通过反转一个或更多个用于 在框 240 减少计算资源负载的操作来增加计算资源。如果该至少一个实时数据流的处理满 足性能目标 ( 图 14, 框 238) 且计算负载并未通过以上描述的任一种方法被减少至较低水平 ( 图 14, 框 248), 则实时内核 20 维持对实时数据流的当前处理。
在一些实施例中, 实时内核 20 实例化对至少一个实时数据流执行相应一些数据 处理操作的处理对象。实时内核 20 从一些被实例化的处理对象建立有向图并通过该有向 图处理该至少一个实时数据流。取决于实时性能目标例程, 实时内核 20 可通过从有向图中 删除一个或更多个被实例化的处理对象而修改实时数据流的处理。在一些实施例中, 处理 对象被指派相应的优先级值, 且实时内核 20 通过基于被指派的优先级值从有向图中移除 一些被实例化的处理对象来删除处理对象。 例如, 在这些实施例中的一些中, 该删除包括从有向图中移除一些被实例化的处理对象, 这些被实例化的处理对象被指派的相应优先级值 不满足优先级阈值。
在一些实施例中, 实时内核 20 从一些被实例化的处理对象建立第二有向图, 第二 有向图被用于处理源自本地网络节点和至少一个远程网络节点之一的第二实时数据流。 在 这些实施例的一些中, 第一和第二有向图被指派相应的优先级值, 且实时内核通过基于被 指派的优先级值优先修改第一和第二有向图之一来修改第一和第二实时数据流的处理。 例 如, 实时内核可卸下第一和第二有向图中被指派最低优先级值的那一个。
在一些实施例中, 实时内核 20 通过有向图处理第二实时数据流, 其中第二实时数 据流源自本地网络节点和至少一个远程网络节点之一。在这些实施例的一些中, 第一和第 二实时数据流被指派相应的优先级值, 且实时内核 20 基于被指派的优先级值优先修改对 第一和第二实时数据流之一的处理。
在一些实施例中, 实时内核 20 建立本地网络节点和多个远程网络节点之间的相 应实时数据流连接。实时内核 20 通过有向图处理源自相应一些远程网络节点的实时数据 流。在这些实施例的一些中, 实时数据流被指派相应的优先级值, 且实时内核 20 基于被指 派的优先级值优先修改对一个或更多个实时数据流的处理。 有向图通常包括相应一些被实 例化的处理对象的多个有向链。实时内核 20 通常通过每个有向链处理相应的一个实时数 据流。在这些实施例的一些中, 实时内核 20 迭代地修改实时数据流的处理直至处理落在指 定的性能目标之内。在每次迭代期间, 该修改通常包括执行以下一者或更多 : (i) 从有向图 中移除一个或更多个链以及 (ii) 从有向图中删除一个或更多个被实例化的处理对象。 V. 示例性实时内核实施例
A. 引言
图 15 示出实时内核 20 的实施例 260。实时内核 260 支持 2D/3D 图形呈现引擎、 音 频混合及开关引擎在不同网络节点上的远程配置和执行以创建两个或更多个通信者之间 的物理存在性的感觉。 在管理在同一时间在单个虚拟区域实例中交互的所有通信者的过程 中, 区域服务 26 经由实时内核 260 的分组传输组件 ( 本文称为 STRAW 服务 268) 远程配置 实时内核 260 和其他网络节点之间的会话。在一些实施例中, 实时内核 260 点对点 (P2P) 配置数据流 ( 例如, 实时音频数据流 ) 以便最小化与区域服务 26 的通信。区域服务 26 也 可混合数据流并在必要时将其输送至客户端网络节点。实时内核 260 将向区域服务 26 报 告 P2P 连接故障以便区域服务 26 可确定何时为客户端网络节点混合数据流。 实时内核 260 具有小初始覆盖区域, 并在网络连接上加载更新和增加功能性作为插件。
实时内核 260 包括一组管理器和服务。实时内核管理器有连接和服务混合管理器 262、 区域 / 地带管理器 264、 以及插件管理器 266。实时内核服务有 STRAW 服务 268、 SODA 处理机服务 270、 媒体服务 271、 音频流服务 272、 So3D 接口服务 274、 资产缓存服务 275、 一 个或更多个社交服务器 277, 记录、 回放及传输总线服务 276、 实时调度器服务 278、 时间服 务 280、 SIP 服务 282、 本地 HID/RDS 驱动程序处理机服务 284, 以及用于包括本地音频回放 286、 本地扬声器 288、 本地话筒 290 和 Skype 音频的本地音频设备的接口服务。在一个示 例性实施例中, 实时内核 260 由以下运行时封装组件实现 :
38库:102362269 A CN 102362286说明书23/68 页
其他插件 : 加密算法 压缩算法 认证算法 : 凭证 音频混合 音频源 音频编解码器 音频计算 图形效果 物理延伸 脚本延伸 输入设备主存B. 实时内核设计
如图 15 所示, 实时内核 260 被设计为服务、 插件和实时调度器的集合, 其构成用于 根据从区域服务 26 接收的指令呈现虚拟区域通信环境的平台。各服务协作以通过音频和 图形呈现配置根据网络特性实现工作在不同级别的该平台。插件是不同种类的, 每个种类 附着于插件管理 API 且每个种类具有其自己的种类 API。实时调度器 278 确保音频和图形 呈现以均匀帧速率发生。 根据虚拟区域的实例由区域服务 26 通过在 STRAW UDP 套接字 ( 参 见 VI 部分, 其包含关于 SODA 记录的示例性集合的 SODA 定义 ) 上传送的 SODA 定义记录来 配置该平台。STRAW 服务 268 使用公布 / 订阅模型来多路分解 SODA 记录流。SODA 记录仅 在订户存在于 STRAW 套接字的另一端时才被传送。收到的 SODA 记录在抵达时被传递给一 个或更多个订户。服务支持供 So3D 图形引擎和 HUD 84 使用的本地 API。
以下小节描述了实时内核 260 及其组件的实施例的安装、 设计以及操作。
1. 安装
a. 概览
在一些实施例中, 基于虚拟区域的呈现平台经由因特网作为软件包被下载为安装 包。其被 HTTP 下载从下载服务器传递。在操作 Microsoft Windows 操作系统的客户 端网络节点上, 平台软件包是 .msi 包。初始安装是在更新变为可用时在下载服务器上被修 改的单个包。当新的客户端网络节点执行当前安装时, 不需要其他更新直至创建作为后续 更新的此种时间。
实时内核 260 利用插件来定制应用。必要的插件包括在安装包内。组件可不时地 被独立更新 ( 例如, 实时内核服务可以是修正发布的且可以增加插件 )。在这种情况下, 可 为修正发布创建分离的 Windows .msi 安装包并向更新服务器登记。安装的平台软件将 被通知该更新, 并将为通信者提供升级选项。一些通信者可延迟升级直至一个以上更新可 用。当通信者最终同意升级时, 所有可用的更新将被加载并被顺序应用。
插件的多个版本可在同一时间在客户端网络节点上呈现。 这是因为客户端网络节 点通常商定特征, 并选择适合 API 和版本要求的插件。每个插件广告其 API 和变量。这些 插件将具有不同的文件名以避免文件系统中的名称冲突。具有相同 API 和不同变量的两个 插件是不同的实现, 且由请求该插件的服务作出选择 ( 或许例如通过与服务器商定 )。当 加载与现有插件具有相同 API 和变量的插件时, 这是隐错修正。新的插件替代旧的插件。 服务始终由升级替代。从来没有具有相同 API 的两个服务。Windows 安装使用清单和 捆绑的 Windows 相关的 DLL 以保证无论 Windows 环境的更新状态如何皆起效的产品。 Windows 并排 (side-by-side) 特征被用于避免与其他产品安装要求相冲突。
b. 更新服务器
更新服务器包含针对每个支持的主存操作环境的安装包, 以及针对之前支持的每 个安装包的升级包。
客户端网络节点和更新服务器在可靠的 STRAW 信道上通信。更新服务器公布针对 每个支持的主存操作环境的可用升级定义。 安装在客户端网络节点上的基于虚拟区域的呈 现平台软件随后可订阅升级。更新服务器开始发送合需的软件块。
在一些实施例中, 客户端版本和升级工具被安装在每个客户端网络节点上以允许 用户察看当前客户端软件版本、 列出可用的升级以及启动并监视升级过程。客户端网络节点将保留已被应用的升级包的 GUID 的表。该表将向更新服务器呈现该列表, 且作为回报, 得到以应用顺序排列的按照 GUID 的待决升级的列表。它们将具有所附的描述、 大小和日期 属性。
升级仅在下载完成且自动安装报告成功时被标记为 “已应用” 。 自动安装过程包括 停止任何运行的 SORK 服务以便 DLL 可被重写。通过一系列 SODA 记录完成下载一升级, 因 此该过程可被打断并恢复而无需重复任何数据传递。记录包括升级 GUID 和偏移。
因为对回退或重新安装不存在要求, 因此无需任何 Microsoft Windows “并 排” 库清单。任何要求的库均可作为升级的一部分被加载。
升级工具将产生注册表项或保留一文件, 该文件包含被应用的升级的 GUID、 任何 当前加载升级的 GUID、 其偏移以及对磁盘上包含 “迄今为止” 的数据的文件的引用。一旦被 应用, 升级包就被删除。 如果期望为多个客户端网络节点缓存升级包, 则在将进行该缓存的 同一客户端代理处指向它们的每一个。
c. 更新本地数据库
客户端网络节点在本地文件系统中的资产目录中存储基于虚拟区域的呈现平台 服务和插件。这些服务和插件是通过 API 和所附资源自描述的。不保留关于客户端网络节 点软件状态的其他信息。当客户端网络节点重新安装基于虚拟区域的呈现平台软件时, 或 许在 OS( 操作系统 ) 升级后, 现有插件通常被重新验证。新的安装包括所有基础服务和插 件, 但或许在机器上存在可选插件或应用专用插件, 此可选插件或应用专用插件通常被删 除或被重验证。 在一些实施例中, 有效插件的二进制内容被散列并被单向加密, 且结果值被 存储为用于检查该插件是否可信的所附资源。为了验证可疑插件, 当前插件内容被重新散 列和加密, 且将结果值与现有资源比较。如果该内容与资源不匹配, 则该插件是无效的。
d. 客户端认证
网络认证通常在每次实时内核 260 一启动时就进行。在一些实施例中, 运行帐 户网络基础结构服务的帐户服务器被用于认证通信者并为该通信者建立真实用户标识符 (RUID)。帐户服务器创建令牌 ( 随后被包括为 RUID 的一部分 ) 并将该令牌给予客户端网 络节点以向其他服务器认证自己。在此过程中, 客户端网络节点在安装时被安全地发出一 凭证。 该凭证通常是由证书权威机构签发的 CA 定义的凭证。 该证书包含私钥和公钥。 基于 虚拟区域的呈现平台安装包创建仅包含公钥的新凭证。 私钥被安全存储在客户端网络节点 上。基于虚拟区域的呈现平台安装包使用私钥创建签名以加密通信者提供的口令的摘要, 并将签名安全传送给帐户服务器。帐户服务器恢复摘要并将其存储为客户端标识秘密。
当建立连接时, 实时内核 260 与帐户服务器共享凭证。帐户服务器用其凭证 ( 例 如, 服务器侧的证书 ) 作出响应。客户端网络节点和帐户服务器使用注册权威机构验证该 凭证。一旦得到验证, 服务器侧的凭证对任何地点的任何服务器都是有效的。
在一些实施例中, 帐户服务器还向客户端网络节点提供随机的 128 位的质询短 语。客户端网络节点用通信者提供的口令的加密摘要散列该质询短语并将其返回作为响 应。 帐户服务器还用先前获得的该通信者的摘要散列质询短语并验证来自客户端网络节点 的响应是匹配的。网络连接现在被认证且通信者被标识为私钥的拥有者。
在一些实施例中, 帐户服务器向通信者指派具有所附签名的随机客户端 ID。该签 名是使用该帐户服务器私钥加密的客户端 ID 的 128 位散列。该签名仅可由该帐户服务器创建。 接收令牌的任何人可通过使用由帐户服务器公布的公钥解密摘要并将该摘要与客户 端 ID 比较来验证通信者。
e. 帐户服务器认证
图 16 示出了通过帐户服务器的凭证来认证帐户服务器 296 的方法的实施例。根 据该方法, 客户端网络节点 294 和帐户服务器 296 交换凭证 ( 图 16, 框 298、 300)。客户端 网络节点 294 向帐户服务器 296 发出服务器 ID 和服务器令牌用于后来向客户端网络节点 294 快速验证帐户服务器 296( 图 16, 框 302)。帐户服务器 296 随后向客户端网络节点 294 发出客户端 ID 和所附的标识令牌 ( 图 16, 框 304)。使用参与者的公钥来加密在至帐户服 务器的流上的认证短语。
2. 初始化序列
图 17 示出由实时内核 260 的加载器组件在每次启动客户端网络节点上的操作系 统时实现的方法的实施例。在此过程中, 加载器解析包括一个或更多个内核服务组件的静 态内核组件列表 ( 图 17, 框 320)。加载器确定所解析列表中的在本地储存库 ( 例如, 本地 文件系统中的目录 ) 中缺少的所有内核组件 ( 图 17, 框 322)。加载器检索被确定为缺少 的每个内核组件 ( 图 17, 框 324)。在一些实施例中, 加载器在客户端网络节点上实例化从 远程网络节点 ( 例如, 下载服务器或更新服务器 ) 检索缺少的内核组件的更新服务。在已 经检索到缺少的内核组件后, 加载器从相应一些内核服务组件实例化内核服务 ( 图 17, 框 326)。 被实例化的内核服务被执行以在关于虚拟区域定义的通信环境中与一个或更多个远 程网络节点通信 ( 图 17, 框 328)。例如, 在一些实施例中, HUD84 调用内核服务以与区域服 务器通信以便建立如本文详细描述的 HUD 会话或区域会话。
在一些实施例中, 实时内核 260 的以下服务在引导时间被加载为 Windows 服务 DLL :
·STRAW 服务 268
·SODA 服务 270
·媒体服务 271
·音频流服务 272
·连接和服务器混合管理器 262
·区域 / 地带管理器 264
·资产缓存服务 275
·实时调度器服务 278
·HUD 84
·默认插件
在这些实施例中, 服务通过名称而非通过 GUID 被加载。一次在客户端网络节点上 仅呈现每个服务的一个副本。 加载后, SODA 信道服务 270、 媒体服务 271、 音频流服务 272、 区 域 / 地带管理器、 以及实时调度器服务等待空闲。连接和服务器混合管理器使音频不被配 置并等待至区域服务器的连接的定义。默认插件通过 GUID 登记为 API 类对象。当由 GUID 在定义中引用时默认插件被加载。HUD 84 联络帐户服务器、 认证并标识通信者。HUD 84 创建去往集合网络基础结构服务和交互网络基础结构服务的流并填充其最近使用的 (MRU) 朋友和区域列表及其频繁朋友和区域列表。资产缓存服务 275 通常根据启发来联络样式数据库服务器并开始缓存数字资源以及更新其 GUID 映射。
3. 会话
实时内核 260 管理客户端网络节点和其他网络节点之间的会话。在会话期间, 数 据在服务器和客户端网络节点之间作为 STRAW 套接字上的 SODA 定义记录被共享。数据在 公布 / 订阅模型中共享。实时内核 260 仅订阅客户端网络节点所需的数据。为了订阅, 实 时内核 260 创建与合需服务器的 STRAW 信道。STRAW 信道通过公知的针对特定虚拟区域的 GUID 商定。在一些实施例中, STRAW 套接字使用通过所配置的 DNS 提供的地址来连接。
区域服务将发送公布消息, 该消息指示通信者可用的数据流并用 GUID 句柄标签 化每个数据流。实时内核 260 随后发送针对合需数据流的订阅消息。任何针对订阅信道的 区域服务数据的变化作为 SODA 定义记录被发送给已经订阅那些信道的所有客户端网络节 点。
存在两种主要类型的会话 : (a)HUD 会话, 其涉及在 HUD 84 中显示当前关系和存在 性信息 ; 以及 (b) 区域会话, 其涉及潜伏或进入虚拟区域实例。
a.HUD 会话
在 HUD 会话中, HUD 84 联络帐户服务器、 RUID 服务器、 以及集合服务器, 并通过 STRAW 信道订阅通信者自身的帐户和关系信息。HUD 84 随后订阅针对密切相关的联系人和 虚拟区域的存在性信息。 在该点, HUD 84 可显示针对密切相关的联系人的动态存在性信息。 b. 区域会话
在区域会话中, HUD 84 订阅关于相关虚拟区域的信息。在一些实施例中, 咨询目 录服务器以确定主存由 HUD 指定的虚拟区域的当前区域服务器。创建去往当前区域服务器 的 STRAW 流。
HUD 订阅与虚拟区域相关联的存在性数据并用当前参与该虚拟区域的其他通信者 的名称更新其 2D 抬头显示器。在该点, 通信者 “潜伏” 在虚拟区域中。通信者的存在可被显 示在弹出列表中, 且图标被显示在 HUD 区域表示中 ( 例如, 在图 5A-5C 示出的办公场所中 )。
如果通信者指导 HUD 84 进入虚拟区域, 随后实时内核向集合服务通知通信者请 求进入虚拟区域。 订阅与虚拟区域相关联的存在性信息的其他通信者被通知已进入该虚拟 区域的新通信者。
实时内核 260 引导 So3D 引擎启动交互环境。So3D 引擎订阅区域服务器环境数据 ( 例如, 呈现和运动数据 )。区域服务器开始向实时内核 260 流送所请求的区域服务器环境 数据。实时内核将所请求数据传递给 So3D 引擎, 该引擎根据当前可视化模式 ( 例如, 2D 俯 视图、 低分辨率视图、 或全沉浸性 3D 视图 ) 呈现数据。
区域服务器定义与虚拟区域中的对象相关联的客户端网络节点之间的原始话筒 音频媒体流。区域服务器还根据虚拟区域描述中的音频处置指令 ( 例如, 空间效果定义和 地带定义 ) 创建音频混合元件的定义。连接和服务器混合管理器 262 侦听音频定义并创建 针对每个定义的媒体流, 其中该定义包括针对每个 P2P 音频流的 GUID 句柄。向本地传输总 线 276 登记每个媒体流并用音频流服务 272 创建适当的音频混合组件。区域 / 地带管理器 264 还订阅针对音频和针对化身运动和定向数据的 SODA 定义。 当通信者的化身在该虚拟区 域中导航时, 区域 / 地带 264 控制每个音频流的增益 / 静音。
在一些实施例中, 区域 / 地带管理器 264 另外订阅关系数据, 区域 / 地带管理器264 使用该关系数据经由社交处理器 277 来控制化身在虚拟区域中的定向 / 移动 / 姿势 ( 参 见图 15)。 在此过程中, 区域 / 地带管理器 264 基于化身在虚拟区域中的位置和关系数据库 设定社交处理器 277 的参数值。这样, 当通信者讲话时, 可通过改变化身头部的位置和定向 来指示关系 ( 例如, 当化身进入虚拟区域的地带时将其转向成面对另一化身, 或者当进入 虚拟区域的媒体地带时将化身定向为获得观看屏上的最佳视图 )。 在一些实施例中, 社交处 理器 277 被第三方开发者定义并经由插件被传递给客户端网络节点。每个社交处理器 277 是在特定事件发生 ( 例如, 由靠近其他化身、 或区域中的位置、 或二者触发的自动运动 ) 时 被自动执行的指令集。社交处理器 277 可为控制化身或对象在虚拟区域中的运动的任何任 意程序性例程。例如, 在一些实施例中, 如果化身靠近观看屏, 一种类型的社交处理器自动 迅速将化身移到虚拟区域描述中定义的网络并将该化身在观看屏的前面居中以便用户可 容易地看到观看屏的内容。这样, 对于移动化身的复杂操纵的需要便消除了。另一种类型 的社交处理器 277 自动旋转和转动化身以确认另一用户的存在性。例如, 此类型的社交处 理器的实施例被配置为自动将虚拟区域中的化身从彼此面对重定向为其中化身响应于新 的通信者进入虚拟区域而面对新的通信者的相应取向。在这种情形中, 与原来在虚拟区域 中的化身相关联的通信者不必手动操纵其化身 ; 相反, 社交处理器自动旋转其头部以确认 存在新的通信者。
4. 管理会话
图 18 示出了由 STRAW 服务 268 实现的会话管理方法的实施例。
根据图 18 的方法, 在本地网络节点, STRAW 服务 268 根据无连接传输协议 ( 例如 UDP) 在传输流上建立与远程网络节点的第一会话 ( 例如, 图 18, 框 362)。STRAW 服务 268 创建该会话的定义, 其中该定义包括网际协议 (IP) 地址、 端口地址、 以及传输协议的全局 唯一标识符。STRAW 服务 268 向远程网络节点发送该定义。STRAW 服务 268 确定指派给远 程网络节点的第一站定义, 并将第一站定义存储在表中作为每个打开信道的属性。在此过 程中, STRAW 服务 268 解析从远程网络节点接收的站定义记录。站定义记录包括一组字段, 其中每个字段被相应字段类型以及相关联的字段值所定义, 且每个字段类型被相应的全局 唯一标识符 (GUID) 标识。
代表本地网络节点上的一个或更多个软件实体, STRAW 服务 268 自动打开在第一 会话中在本地网络节点和远程网络节点之间传送数据的一个或更多个信道 ( 图 18, .框 364)。在此过程中, STRAW 服务 268 向远程网络节点发送定义本地公布信道的记录和具有 与远程公布信道之一的标识符匹配的标识符的每一个本地订阅信道的记录。
在第一会话中, STRAW 服务 268 维护标识打开的一些信道的表并将相应的属性值 与所标识的信道相关联 ( 图 18, 框 366)。STRAW 服务 268 记录从本地网络节点可用的本地 公布信道、 一个或更多个软件实体请求的本地订阅信道、 从远程网络节点可用的远程公布 信道、 以及远程网络节点请求的远程订阅信道的属性。在此过程中, STRAW 服务 268 为每个 本地公布信道维护一记录, 该记录包括指示在本地公布信道上公布数据的能力的软件实体 之一的标识符、 订阅本地公布信道的远程网络节点的标识符、 以及本地公布信道的标识符。 STRAW 服务 268 为每个本地订阅信道维护一记录, 该记录包括订阅本地订阅信道的软件实 体之一的标识符、 指示在本地订阅信道上公布数据的能力的远程网络节点的标识符、 本地 订阅信道的标识符、 以及一个或更多个与本地订阅信道相关联的网络传输参数。STRAW 服务 268 为每个远程公布信道维护一记录, 该记录包括指示在远程公布信道上公布数据的能 力的远程网络节点的标识符、 以及远程公布信道的标识符。
STRAW 服务 268 在会话中在一个或更多个打开的信道上在本地网络节点和远程网 络节点之间传送数据。在一些实施例中, 以每一记录包括一组字段的形式传送数据。记录 的每个字段由相应的字段类型以及相关联的字段值所定义, 且每个字段类型被相应的 GUID 标识。一些记录是包含媒体数据的媒体记录, 该媒体数据包括可呈现数据的分组。其他记 录是包含配置数据的配置记录, 该配置数据包括配置设置的定义。媒体记录和配置记录通 常被封装在传输流上的传输记录中。媒体记录通常使用第一数据压缩服务来压缩, 而配置 记录通常使用第二数据压缩服务来压缩。 在传输时, STRAW 服务 268 将传输记录与传送传输 记录的相应一些信道的标识符相关联, 加密该传输记录, 以及按顺序排列加密的传输记录。 在接收时, STRAW 服务 268 解密传输记录并将包含在解密的传输记录中的媒体记录和配置 记录分派给订阅的一些软件实体。
响应于确定第一会话失败, STRAW 服务 268 根据无连接传输协议自动尝试在第二 传输流上建立与远程网络节点的第二会话 ( 图 18, 框 368)。在一些实施例中, STRAW 服务 268 响应于确定指派给远程网络节点的当前站定义不同于建立第一会话时指派给远程网络 节点的第一站定义而确定第一会话失败。
响应于成功建立第二会话, STRAW 服务 268 自动打开该表中标识的每个信道 ( 图 18, 框 370)。
5. 处理数据流
实时内核 260 支持用于处理由客户端网络节点从其他网络节点接收的数据流的 流处理机的远程配置。响应于从区域服务 26 接收的指令, 实时内核 260 的各种服务和其他 组件协同将处理元件的有向图构造和配置成用于处理数据流的流处理机。 区域服务指令根 据由区域服务 26 管理的虚拟区域所主存的虚拟区域应用来配置流处理机。
图 19 示出由实时内核 260 的组件响应于从区域服务 26 接收的远程流处置指令实 现的方法的实施例。
根据图 19 的方法, 实时内核 260 从一个或更多个流处置指令解析实时流处理机的 描述 ( 图 19, 框 330)。在此过程中, STRAW 服务 268 从区域服务 26 接收用于配置流处理机 的 SODA 定义。STRAW 服务 268 将 SODA 定义分派至连接和服务器混合管理器 262 以及区域 / 地带管理器 264。连接和服务器混合管理器 262 从一个或更多个流处置指令解析输入源 标识符、 输出阱标识符、 以及一个或更多个数据处理对象的每一者的相应标识符。
连接和服务器混合管理器 262 实例化对应于这些标识符中相应一些标识符的实 时流处置对象 ( 图 19, 框 332)。连接和服务器混合管理器 262 向传输总线 276 登记实例化 的对象。
传输总线 276 根据描述创建包括一些被实例化的实时流处置对象的有向图 ( 图 19, 框 334)。区域 / 地带管理器 264 将音频计算 SODA 定义传递至有向图内指定的音频计算 对象。
STRAW 服务 268 从对应于输入源标识符的输入源接收实时数据流 ( 图 19, 框 336)。 STRAW 服务 268 将该实时数据流传递至媒体服务 271, 该媒体服务处理该流并将其传递至传 输总线 276。 传输总线 276 顺序执行流处理机的处理图元以执行对实时数据流的指定处理。流处理机在对应于输出阱标识符的输出阱产生所得数据流 ( 图 19, 框 338)。所得 数据流随后被传递给客户端网络节点的呈现组件。
6. 实时内核的服务和其他组件
实时内核 260 的组件包括服务、 插件、 以及库。
a. 压缩器库
压缩器库实现针对传输数据的可任选压缩层。 并非旨在压缩协议头部或链路商定交换。 压缩器库被 SODA 信道服务 270 和被媒体服务 271 使用。当配置加密时, 这些服务 270、 271 创建两个压缩器实例并以管道输送信道数据。一个压缩器实例被用于传送而另一 个压缩器实例被用于接收。
压缩器库使用由变量配置的压缩 / 解压缩插件。由服务商定压缩变量, 并将其提 供给压缩器。
b. 音频流服务
在一些实施例中, 音频流服务 272 是 Windows 服务 DLL。
音频流服务 272 管理音频流混合。它定义用于创建和配置音频处理图元 ( 也称为 音频组件对象 ) 的 API, 该音频处理图元由区域 / 地带管理器 264 操纵。音频流服务 272 是 传输总线 276 的客户端。向传输总线 276 登记所有音频处理图元。
音频处理图元经由以下 API 调用通过插件管理器 266(PlugInMgr) 来创建 :
插件管理器 ::API 枚举 (gui 插件 Api)
插件管理器 :: 变量枚举 (guid 标识符, guid 插件 Api)
插件管理器 :: 创建实例 (guid 标识符, guid 插件 Api, guid 变量 )
插件管理器的调用 :: 创建实例 ()API 产生 guid 插件, 其表示 API 的合需变量的 实例。
用于音频处理图元的插件 API 为 :
音频混合
音频源
音频插入
音频发送
调用程序提供变量, 该变量仅由音频流服务 272 传递。变量表示音频处理图元的 实现, 如虚拟区域应用中所定义的。音频流服务 272 随后创建封装插件实例 (guid 插件 ) 的音频组件对象。该音频组件使用插件管理器 266 来访问插件的方法。音频流服务 272 为 每个音频 API 创建正确类型的导出音频组件 :
音频混合
音频源
音频插入
音频发送
向传输总线 276 登记音频组件对象。传输总线 API 被用于将组件链接成图。音频 组件 API 支持传输总线 276 和区域 / 地带管理器 264 的操作。基类音频组件具有音频源和
音频阱的 API, 两者都是相同插件的方面。
c.STRAW 服务
(i) 概览
在一些实施例中, STRAW 服务 268 是 Windows 服务 DLL。
STRAW 服务 268 实现 STRAW 传输协议, 该协议实现网络节点之间通过无连接传输协 议 ( 例如, UDP) 的面向连接的加密安全套接字连接。STRAW 传输协议使用固定长度的全局 唯一标识符 (GUID) 来识别所有记录和记录中的所有字段类型。例如, 在一些实施例中, 网 络节点 ( 或站 ) 由 IP_ 地址和端口定义。在这些实施例中, STRAW 站标识记录定义具有以 下 GUID 集的特定网络节点 : {GUID1, GUID2, GUID3, GUID4, GUID5, GUID6}, 其中
·GUID1 将 STRAW 记录标识为 SODA 记录 ;
·GUID2 将 STRAW 记录标识为网络节点标识记录 ;
·GUID3 是 IP 地址字段标记 ;
·GUID4 是网络节点的 IP 地址 ;
·GUID5 是端口号字段标记 ; 以及
·GUID6 是网络节点的端口号
在这些实施例中, 站标识符记录包含可易于被压缩为较小尺寸的二进制数据。在 一些实施例中, 一个或更多个 STRAW 记录的尺寸可通过省略字段标记被进一步减小。在这 些实施例中, STRAW 记录的发射机和接收机知晓该 STRAW 记录的格式以便字段值的语义是 已知的而无需参考任何字段标记。
参考图 20, STRAW 服务 268 管理传输流 342 上的会话 340。在一些实施例中, STRAW 会话的上下文中的流由一对 (IP, 端口 ) 地址和传输 GUID 定义。会话包括零或更多个逻辑 信道, 其中信道是一系列适于特定内核管理器 ( 例如, So3D 图形引擎 274、 连接和服务器混 合管理器 262、 以及区域 / 地带管理器 264) 的记录。超过一个内核管理器可从同一流接收 记录, 这些记录由信道区分。
STRAW 服务 268 管理两种类型的信道 : 包含流送数据 ( 例如, 音频 ) 的媒体信道 ; 以及包含 SODA 定义记录 ( 或指令 ) 的 SODA 信道。STRAW 记录在流上封装 SODA 记录和媒体 记录。 STRAW 记录被加密、 序列化, 且包括消息完整性字段。 该序列独立于记录源或目的, 其 是用于检测无序或丢失记录的链路级特征。
STRAW 记录由信道标识。GUID 被用作信道标识符。SODA 和媒体记录可在信道级 被压缩为无关于 STRAW 记录封装的流。每个 SODA 记录包含一个或更多个 SODA 定义 344。 SODA 定义的示例包括处理图元 ( 例如, 音频混合和音频效果 )、 3D 呈现资产 ( 例如, 纹理和
网格 )、 以及 RDS( 例如, 化身运动检查点 )。每个媒体记录包含一个媒体分组 346。媒体分 组的示例包括音频编解码器和文本。
应用在会话上使用公知的 GUID ID 公布信道。内核管理器订阅信道。公布 / 订阅 模型是无连接的。 订阅信道的内核管理器进行登记以在信道状态变化和信道记录到达时接 收对它们的通知。
(ii) 流 - 会话 - 信道 - 记录
在 STRAW 会话的上下文中, 流是由两个 IP 地址 / 端口对和传输 GUID 定义的两个 网络节点之间的双向 UDP 套接字。流支持信道的会话。会话是逻辑的节点对节点连接。会 话为两个节点传输信道。 会话可穿过一个或更多个代理站并通过可包含多个会话的流来传 输。
信道是在会话中在两个网络节点间传递 SODA 或媒体记录的逻辑结构。信道可以 是可靠的或不可靠的, 压缩的或非压缩的。信道的内容由内容 GUID 标识。信道记录在共享 同一头部信道 _ 客户端 ID 并具有顺序分组号和 MAC 字段的一系列 STRAW 记录中传输。MAC 计算取决于仅在一个方向上的给定信道上的分组序列。 单个信道上传送的所有记录共享单 个配置参数集 ( 例如, { 客户端, 可靠的, 压缩的 })。单个信道上的记录被压缩为串行流。 通常仅可靠信道可被压缩。在一些实施例中, 不可靠信道可用其中在每个关键帧上重启压 缩的压缩过程来进行压缩。在不可靠信道上丢失分组的情况下, 在该信道上的记录被丢弃 直至到达关键帧 ( 因为它们不能被无序解压缩 )。
压缩使用压缩 . 库 (compress.lib)。 为了改善压缩, 信道定义可包括预加载数据, 该预加载数据可贯穿压缩器但并不被传送。目的是用共用短语填装压缩状态表。压缩状态 表在每次收到关键帧时被重设和重建。
(iii)SODA 记录
SODA 记录是具有初始 GUID ID 及一个或更多个 SODA 定义的嵌套结构。SODA 定义 具有定义类型、 定义长度以及一个或更多个字段。定义类型是公知的 GUID( 例如, guid 资 产 )。长度指示字段的总尺寸。字段是因类型而异的固定字段和嵌套的 SODA 定义的组合。 即,
SODA 记录 :
guid ID
SODA 定义
…
SODA 定义 :
Guid 定义类型
长的长度
[ 字段 ]- 取决于定义类型
字段 :
固定字段
或者 SODA 定义
例如,
SODA 记录被封装在 STRAW 记录中 :
(iv) 信道可靠性和链路级协议
STRAW 记录被编号且包含信道 ID。在接收分组和短时间延迟后, 传输发送包含针 对每一信道的下一期望分组号的 ACK 记录, 以便发送方可确认所传送的记录被接收到并可 释放本地资源。除周期性传输外, 没有针对该 ACK 的可靠性特征。该方案使用最少的网络 资源实现可靠性, 假定几乎所有记录都被成功接收。
MAC 字段针对每个被传送的 STRAW 记录被计算。它在接收时被检查。
对于可靠信道 :
如果信道中的记录被无序接收, 则为丢失的记录传送 NACK。MAC 失败也导致为期 望的记录传送 NACK。单个记录最高允许四个 NACK, 且随后该传输将失败消息排队至任何订
阅内核管理器并擦除信道定义。
对于不可靠信道 :
如果信道中的记录被无序接收, 则丢失的分组号被发信号至订阅该信道的任何管 理器且不发送 NACK。MAC 失败也作为丢失分组指示给订阅该信道的任何内核管理器且不发 送 NACK。不存在针对丢失分组的阈值, 且该信道从不被该传输关闭。
不需要 “关闭” 信道。如果所有内核管理器没有订阅, 则信道上的数据传输停止。 既然信道是逻辑实体, 那么未使用操作系统资源。
(v) 公布 / 订阅
STRAW 服务 268 维护本地公布和订阅项的列表。每个项包含 :
创建该项的本地管理器
服务器标识符
信道标识符
公布或订阅
传输参数 ( 用于订阅 )
用以下初始化列表
{STRAW 服务, GUID_ 空, 会话, 订阅, 可靠, 未压缩 }
这样, STRAW 服务 268 订阅在任何会话信道上到达的所有到达 SODA 记录。这些记 录包括公布和订阅定义。GUID_ 空信道从不被公布并由每一服务器假定在每一流上用公知 信道 ID 来订阅。
STRAW 服务 268 还维护所有到达公布定义的表, 用于后来在本地列表中登记订阅 的情况所用。
{ID 客户端, ID 服务器, ID 信道 }
在 ID 客户端为信道旨在的特定客户端的 ( 可能为空的 )GUID 的情况下, ID 服务 器是信道记录的远程源而 ID 信道是信道的公知 GUID。
当 STRAW 服务 268 接收针对至另一站的合需连接的会话定义时, STRAW 服务 268 建 立流, 发送会话定义, 并在会话信道上发送 SODA 记录中的所有本地表公布项。当公布定义 到达 STRAW 服务 268 时, STRAW 服务 268 将该定义输入公布定义表, 并随后发送针对本地列 表中在公布记录中具有匹配信道 ID 的每个订阅项的会话信道的订阅定义。当订阅定义到 达时, STRAW 服务 268 开始在给定信道上发送定义更新 ( 从公布应用管道传送 ) 作为包含 对该定义的 SODA 记录的 STRAW 记录。这些记录可在多于一个信道上被发送。
当内核管理器想要参与与服务器的信道时, 该内核管理器定义订阅请求, 无论是 否存在去往任何服务器的任何 STRAW 流。 如果虚拟区域应用后来公布 ( 即, 在建立流之后 ), 则本地表中的变化触发表格中公布项的重新发送, 这自动触发任何在链路的另一端的潜在 订阅。如果内核管理器后来订阅且公布表中存在项, 则 STRAW 服务 268 自动发送订阅请求。 该过程确保仅在接收机需要信道数据时才在链路上发送。
(vi) 信道记录分派
STRAW 记录在其到达时被解密。 如果是有效的, 则其嵌入记录被解压缩并随后被分 派给所有订阅内核管理器。检查本地订阅项的列表, 且匹配信道 ID( 在订阅传输信息中 ) 的所有项在其消息队列中接收该记录的副本。订阅内核管理器负责在消息被处理时释放消息。消息的大块数据部分不被复制, 但指向包含 STRAW 记录的原网络缓冲器。每个内核管理器释放消息, 以便当消息都被释放 时, 网络缓冲器可被重复利用。
(vii) 建立 STRAW 流
客户端网络节点在流上连接与服务器和对等网络节点的会话。在此过程中, 每一 方向其他方认证自己。
STRAW 流是可信和安全的。这意味着 :
·客户端网络节点对伙伴的身份是确定的 ;
·消息是私有的 ;
·收到消息可证明曾被发送的消息 ( 未在中间某处被修改 ) ; 以及
·消息将由双方以相同方式解释。
会话定义的一部分是流传输插件 GUID 的列表。如果响应于该定义的客户端网络 节点支持这些 GUID 中的至少一个, 则其加载插件并使用该插件来建立会话。创建该定义的 服务器可检查每个所涉及的客户端网络节点的支持列表并决定将哪个传输插件 GUID 包括 在该定义中。
会话定义的一部分是流加密插件 GUID 的列表。如果响应于该定义的客户端网络 节点支持这些 GUID 中的至少一个, 则其加载插件并使用该插件来加密会话。创建该定义的 服务器可检查每个所涉及的客户端网络节点的支持列表并决定将哪个流加密插件 GUID 包 括在该定义中。
(viii) 服务器流
在一些实施例中, 从客户端网络节点 344 到服务器 346 的流使用从服务器 ( 诸如, 目录服务器、 映射服务器、 或区域服务器 ) 获得的地址来建立。该流的示例性目的包括获得 存在性信息, 使用来自映射服务器的呈现定义呈现公共空间, 以及使用来自区域服务器的 呈现定义呈现虚拟区域。
图 21 示出在客户端网络节点 344 和服务器 346 之间建立服务器流的方法的实施 例。 根据该方法, 客户端网络节点 344 向服务器 346 发送客户端凭证和流 ID( 图 21, 框 348)。 服务器 346 用服务器凭证和预主秘密来回复 ( 图 21, 框 350)。一旦创建流, 连接的客户端 网络节点 344 商定密码集, 并随后通过呈现其标识令牌来认证 ( 图 21, 框 352)。服务器 346 呈现适合于该客户端网络节点 344 的服务器令牌 ( 由流 ID 选择并由帐户服务器传递至服 务器 346)( 图 21, 框 354)。
(ix) 客户端流
参考图 22, 每个会话被由发起服务器生成的新 GUID 所标识。将会话定义通知流 中涉及的网络节点, 且每个网络节点使用会话 GUID 和客户端 ID 的散列作为流加密密钥与 另一节点通信。在图 22 示出的示例性实施例中, 区域服务器 356 定义两个客户端网络节点 358、 360 之间的会话。 客户端网络节点 358、 360 的每一个向区域服务器认证, 并使用加密信 道来传递定义 ( 包括会话定义 )。客户端网络节点 358、 360 不需要彼此共享任何进一步的 认证信息。客户端网络节点 358、 360 的每一个被服务器 346 用相应 GUID 来标识。每个会 话定义用其 GUID 标识客户端网络节点 358、 360 两者。客户端网络节点 358、 360 可使用该 信息决定在会话上公布哪一信道。如果针对客户端网络节点 358、 360 之一的流或会话失败, 该客户端网络节点使用 会话失败 SODA 定义来通知区域服务器 356 该失败。失败的原因包括, 例如, 没有兼容的传 输、 没有可用信道、 以及可靠信道故障等。在一些实施例中, 区域服务器 356 通过尝试重新 路由该流 ( 例如, 通过经代理或服务器反射音频流 ) 来响应会话失败 SODA 定义。
在一些实施例中, 客户端网络节点 358、 360 根据 UDP 对网络地址翻译器 (NAT) 的 简单穿越 ( 简称为 STUN) 网络协议来传递 P2P。在这些实施例中, 客户端 358、 360 通过响应 NAT 来操作。 服务器 ( 例如区域服务器 356) 充当 STUN 服务器, 该 STUN 服务器在 NAT 的公共 侧在网络中的两个 IP 地址侦听并报告 NAT 外部的被映射 IP 地址和端口。 从该信息中, 客户 端网络节点 358、 360 能发现 NAT 的存在和特定类型, 并获得 NAT 已经为该客户端至远程主 机的 UDP 连接分配的被映射 ( 外部 )IP 地址 (NAT 地址 ) 和端口号。客户端网络节点 358、 360 随后根据 UDP 协议使用该外部 IP 地址与另一 P2P 通信。 有关 STUN 协议的其他细节可从 Jonathan Rosenberg 等人的 “STUN-Simple Traversal of User Datagram Protocol(UDP) Through Network Address Translators(NATs)” (STUN- 用户数据报协议 (UDP) 对网络地 址翻译器 (NAT) 的简单穿越, 因特网提议标准 RFC 3489(2003 年 3 月 )) 来获得。
(x) 保持有效
在一些实施例中, 一旦建立流, 客户端网络节点上的传输发出周期性空闲流保持 有效定义。 伙伴网络节点返回具有设为估计为它能忍受的最大间隔的超时的流保持有效定 义。该消息的目的是保持任何 NAT 防火墙孔为活动的。伙伴网络节点记录合需的超时并每 次延长该间隔。 如果下一消息来自不同的 IP 和端口, 则 NAT 超时并由保持有效创建新的孔。 然后应缩短该间隔。
如果客户端网络节点或伙伴网络节点注意到流保持有效因空闲定时器过期且没 有收到消息、 或没有收到对保持有效消息的应答而丢失, 则它发出具有极小超时的立即流 保持有效。这是为了在丢失站和丢失 UDP 分组之间进行区分。可尝试若干重试。如果在重 试之后未收到应答, 则用失败会话 ID 生成本地流故障事件, 并删除流定义。
在一些实施例中, STRAW 服务 268 通过在没有应用 ( 或客户端 ) 干预的情况下基于 本地公布和订阅表项自动重新建立链路并重新链接所有订阅和数据流来响应打断的链路。
f. 媒体信道服务
在一些实施例中, 媒体信道服务 271 是 Windows 服务 DLL。
媒体信道服务 271 被用于健壮地传递 P2P 音频和文本聊天。媒体信道服务 271 将 压缩流, 如果配置为如此做的话。压缩器库按要求完成压缩。媒体信道服务使用由变量配 置的音频编解码器插件。变量 GUID 从流定义中取出。
g.SODA 信道服务
在一些实施例中, SODA 信道服务 270 是 Windows 服务 DLL。
SODA 信道服务 270 被用于健壮地传递 SODA 定义。SODA 信道服务 270 将压缩流, 如果配置为如此做的话。压缩器库按要求完成压缩。这是数据结构被转换为网络字节序的 场所。在一些实施例中, 使用小端 ( 英特尔 ) 网络字节序。
h. 连接和服务器混合管理器
在一些实施例中, 连接和服务器混合管理器 262 是 Windows 服务 DLL。
在一些实施例中, 连接和服务器混合管理器 262 输出本地会议调度工具可用的程 序 API 以发起与区域服务器的会话。此 API 是用于创建会话的初始项。连接和服务器混合 管理器 262 公布活动会话定义。区域服务器在 SODA 信道上接收会话定义。
连接和服务器混合管理器 262 还从音频图处理元构造音频图。该音频图处理元由 区域服务器 26 或直接通过 SODA 记录或间接通过 VSDL 脚本来配置。在任何情况下, SODA 定 义是结果。在一些实施例中, 连接和服务器混合管理器 262 处理由区域服务 26 发送的以下 SODA 定义 :
·音频设备
·音频流
·音频混合
·音频效果
·音频计算
·音频记录
·音频回放
这些 SODA 定义在以下段落中描述。
音频设备是要向音频传输总线 ( 其为传输总线 276 的组件 ) 登记为音频源的本地 音频设备的定义。提供标准本地音频源 ( 话筒、 耳机 ) 或登记的本地音频记录 ( 文件、 流送 CD 音频 ) 的公知 ID、 连同实例 ID( 如果有多个耳机可用的话, 则其指明为哪个耳机 )。该设 备被给定新的 ID 以在音频传输总线上使用。连接和服务器混合管理器 262 使用公知音频 源 ID 创建音频设备插件的适当变量的实例并将其移交给音频传输总线。
音频流是将向音频传输总线登记为音频源的传入音频流的定义。 传入音频流被传
送该音频流的信道 ID 定义。出于动态混合的目的 ( 由区域 / 地带管理器 264 进行 ), 必须 将流与化身 ID 相关联。该设备使用信道 ID 作为其音频传输总线 ID。连接和服务器混合管 理器 262 基于信道类型 ID 创建音频流插件的适当变量的实例并将其移交给音频传输总线。
音频混合是组合音频源和音频阱插件的定义。该定义全面指定了插件 API ID、 变 量 ID、 一个或两个音频传输总线源 ID、 以及相关联的化身 ID( 针对区域 / 地带管理器 264)。 连接和服务器混合管理器 262 基于提供的 ID 创建音频混合插件的所指示变量并将其移交 给音频传输总线。
音频效果是组合音频源和音频阱插件的定义。该定义全面指定了插件 API ID、 变 量 ID、 一个音频传输总线源 ID、 以及相关联的化身 ID( 针对区域 / 地带管理器 264)。连接 和服务器混合管理器 262 基于提供的 ID 创建音频效果插件的所指示变量并将其移交给音 频传输总线。
音频计算是音频计算插件的定义。该定义全面指定了插件 API ID、 变量 ID、 相关 联的音频传输总线源对象 ID、 该组件自己的音频传输总线 ID、 以及两个因情形而异的参 数。音频计算对象不直接在音频链中处理音频数据。相反, 音频计算对象基于 “域对象模 型” 、 诸如手动设定 (HUD 中的静音、 音量控制 ) 等外部信息、 化身位置和运动、 混响空间以及 Windows 设置 ( 例如, 控制面板中的扬声器选择 ) 来计算其他音频图组件的设定。基于不 同的呈现定时器事件 ( 通常比普通音频呈现更少 ) 执行音频计算对象。这是因为它们用作 计算输入的数据变化很慢。连接和服务器混合管理器 262 基于提供的 ID 创建音频计算插 件的所指示变量并将其移交给音频传输总线。
音频记录是音频阱插件的定义。该定义将音频图中的点链接至存储组件。在呈现 时间, 音频记录组件不自己触发呈现。 但是若呈现由另一音频阱组件触发, 则将呈现的音频 数据提供给音频记录对象用于传递给所指示的存储组件。连接和服务器混合管理器 262 创 建该音频阱插件并将其移交给音频传输总线。
音频回放是音频源插件的定义。该定义将音频图中的点链接至存储组件。如果音 频链参考该组件, 则在帧准备时间从存储组件中取出一个时间片的音频数据并将其提供为 该组件的输出。连接和服务器混合管理器 262 创建该音频源插件并将其移交给音频传输总 线。
连接和服务器混合管理器 262 根据从区域服务器接收的定义配置传输总线 276 和 音频流服务 272。每个定义导致创建音频处理图元, 该音频处理图元是音频流插件、 音频计 算插件、 或音频源插件。本地音频设备 ( 例如, 话筒、 扬声器、 和 Skype 音频 ) 可根据通过 HID 配置工具选择的设置来配置。HID 配置工具允许用户选择键盘和鼠标选项用于在 3D 协 作空间中导航。例如, 可定义快捷键, 且鼠标姿势限制于化身行为。在一些实施例中, 音频 输出选择遵循 Windows 控制面板中针对音频和语音的 “声音和音频设备” 设置。这确保用 于虚拟区域通信的音频设置与用于常规 VOIP 会话的音频设置相同。
如果区域服务器会话传输失败, 则连接和服务器混合管理器 262 尝试恢复。它卸 下该会话并在不同区域服务器上重新启动该会话。如果媒体流失败, 则连接和服务器混合 管理器 262 尝试恢复。在此过程中, 连接和服务器混合管理器 262 尝试重新连接至客户端 网络节点。如果重新连接尝试失败, 则连接和服务器混合管理器 262 将通信者状态定义为 对区域服务器不可听的。i. 区域 / 地带管理器
在一些实施例中, 区域 / 地带管理器 264 是 Windows 服务 DLL。
区域 / 地带管理器 264 根据地带定义和化身位置定义调整音频流服务 272 混合 参数。区域服务 26 向区域 / 地带管理器 264 公布将每个化身与响应于该化身的运动的音 频处理图元联系在一起的 SODA 定义。化身位置数据被用于根据本地地带定义以允许每个 通信者在适当音频位置以适当音量听到其他通信者的方式混合来自参与虚拟区域的每个 客户端网络节点的音频流。应用到音频处理图元的参数值通常取决于包括相对位置、 通信 者的取向、 地带定义、 虚拟区域的音频属性、 以及由通信者配置的手动设置 ( 例如, 静音、 音 量 ) 的计算。
在一些实施例中, 区域 / 地带管理器 264 处理以下 SODA 定义, 这些 SODA 定义属于 其中呈现当前音频图的模拟音频空间的总特征。
·音频混响
·音频孔径
·音频障碍
这些 SODA 定义在以下段落中描述。
音频混响是导致某些混响或回声效果的 “中空空间” 的混响空间的定义。该定义 用位置标识简单的几何形状。在调用音频计算对象时, 该定义在域对象模型 (DOM) 中被提 供给所有音频计算对象。
音频孔径是两个混响空间之间的连接的定义。它通过 ID 标识两个混响空间, 并指定两个空间之间的音频连接。 该连接在某一位置和方向上为圆形。 在调用音频计算对象时, 该定义在域对象模型 (DOM) 中被提供给所有音频计算对象。
音频障碍是对声音传播的物理障碍物的定义。它被建模为一位置处的球体。在调 用音频计算对象时, 该定义在域对象模型 (DOM) 中被提供给所有音频计算对象。
以上描述的 SODA 定义是对音频计算对象的输入, 音频计算对象是采用以下参数 作为自变量的脚本计算插件 :
声音源和声音阱两者的物理性质 ;
针对源和阱的地带定义 ;
手动设置 ( 单独静音、 音量 /AGC) ;
环境设置 ( 全局静音、 音量 ) ; 以及
房间音频特性。
初始音频计算插件包括 :
手动静音 ;
手动音量 ;
位置 ;
多普勒偏移 ;
取向 ( 朝向 / 背离 ) ;
地带 ; 以及
房间混响。
一些计算对于单独音频源是适当的 ; 而一些计算对于整个房间的最终混合是适当 的。虚拟区域应用可通过在音频定义中参考新插件而随意引入新插件。区域 / 地带管理器 264 将订阅其不具有的插件, 并从区域服务器接收其定义。
图 23 示出四通信者音频处理图 380 的示例, 该音频处理图可由区域服务器应用指 定。出于简化, 通常在完整音频处理图中存在的某些音频处理图元 ( 例如, 编解码器、 网络、 滤波、 特殊效果、 以及差错消除图元 ) 已被从此示例中省去。
箭头 382、 384、 386、 388、 390 表示音频源, 它们都是单声道干音频源。化身 1、 2和 3 是来自远程客户端网络节点的网络流。密谈是来自指定源的可选本地音频馈送。音频声 像控制 (panner) 左边的所有东西都是具有一系列附加效果的单声道。这些效果包括根据 地带和扬声器取向调整音量并施加多普勒偏移以考虑讲话者和倾听者的相对速度。 音频声 像控制将每个经调整的单声道信号安置在虚拟区域的当前占据地带的三百六十度音频空 间内。使用讲话者相对于倾听者的位置。音频声像控制右边的所有东西是 5.1 音频。房间 音频处理图元计算对音频信号的房间声学效果。 它考虑讲话者和倾听者的位置、 房间特性、
以及障碍。 最终混合音频处理图元将所有经处理的音频信号加在一起以产生被管道传送至 指定音频输出设备 ( 即, SPKR, 其在所解说的示例中表示本地扬声器 ) 的所得流。
一些音频处理图元 ( 插入物 ) 具有固定参数且, 因此, 与任何运行时计算插件脚本 不相关联。这些元件包括回声和噪声消除、 自动增益控制 (AGC)、 寂静检测、 固定源声像控 制、 以及最终混合。
j. 资产缓存服务
在一些实施例中, 资产缓存服务 275 是 Windows 服务 DLL。 资产被记录在由 GUID 索引的本地数据库或表服务中。资产数据被保留在非晶存储池中。关于特定资产的 ID 从不会改变, 由此避免了任何缓存一致性问题。资产由 SODA 记录缓存。这意味着大资产可存储为许多片, 因为 SODA 记录被限制在 UDP MTU 的大小 ( 大 约 1000 字节 )。资产缓存必须通过 GUID 和数据偏移来索引记录, 数据偏移是 SODA 记录中 的字段。
(i) 资产索引
资产在类表、 以及可选的属性表中表示。
资产类表将资产 GUID 映射至类 GUID 和数据存储参考。
资产 ID guid 表面 guid 会议表表面 guidSococo 会议表表面 guidDog 显示网格 guid 名称 Soeoco 会议名称 guid 作者 DVW
资产类 guid 类纹理 guid 类纹理 guid 类纹理 guid 类网格 guid 类文本 guid 类文本 数据存储 < 图像 1> < 图像 2> < 图像 3> < 图像 4> “会议” “David Van Wie”资产属性表向资产附加被标记的属性标量值。
(ii) 数据存储
基于虚拟区域的呈现平台的资产存储接口允许堆积数据、 事务性地存储分离索 引、 以及提取未用资产存储以重新使用。数据库和文件的组合将用于资产存储。数据库包 含两个表 : 存储分配表, 以及 GUID/ 偏移索引。 文件是根据配置的缓存大小以固定大小创建 的。使用堆一存储段 (heap-bucket) 算法将资产存储在文件中。
资产缓存数据存储将通过 GUID 和偏移来索引。堆由以 2 的幂的数据大小被划分 成存储段。最小的存储段为 32 字节 ; 最大的存储段为 2k 字节, 其共构成 7 个存储段。每个 存储段被预算编制相同量的存储, 这意味着每个连继存储段中存在一半的数据项。每个存 储段是大到足以散列足够数据项来完成存储预算的堆表, 该存储预算使散列冲突的机会相 当小。
(iii)SODA 资产定义记录
资产被封装在 SODA 记录中供传输。定义包括资产 GUID、 其内容 ( 未结构化数据 ) 及其偏移 ( 如果大于一个记录的话 )、 以及属性表。封装资产的 SODA 记录从不包含对存储 系统的任何参考。
偏移和数据字段可重复只要它们适合一个记录。 对资产的查询是定义。
使用定义忽略资产
(iv) 属性等级
资产具有属性, 最重要的属性是类型和默认。类型指定资产的用途。默认指定可 被用于代替给定资产的基础资产。示例性的属性等级在下表中示出 :
名称 空白 木材粒度 7 类型 纹理 纹理 默认 空 空白 值 < 图像 5> < 图像 6>表顶部 1 会议表木材 Sococo 表
纹理 纹理 纹理木材粒度 7 表顶部 1 会议表木材< 图像 7> < 图像 8> < 图像 9>在此示例中, 包括 Sococo 表纹理的虚拟区域场景将使用第一可用纹理来呈现, 从 Sococo 表到会议表木材、 然后是表顶部 1 等之中搜索。 样式基础将具有基于默认资产的巨大资产等级树, 所有资产最终基于较小数目的 基础资产。这些基础资产被安装作为客户端软件包的一部分。该特征旨在允许设计具有指 定样式资产被调出的等级, 以及允许在实际设计所有样式资产之前呈现该资产。可能还期 望在加载所有样式资产之前启动虚拟区域的呈现。
可选属性包括默认、 作者、 应用和作为对从中导出资产的 Collada 源的参考的 Collada ID。作者站上运行的浏览工具将通过任何和所有属性来索引资产。
k. 音频传输总线
音频传输总线是处置音频流的传输总线 276 的组件。在一些实施例中, 音频传输 总线由作为组件对象集合管理音频图的库实现。所有音频图对象通过唯一 ID 向音频传输 总线登记。音频传输总线负责在呈现音频时管理音频图对象。音频传输总线通过 ID 跟踪 音频图组件。在此过程中, 音频传输总线依次调用每个音频图组件, 提供来自由 ID 命名的 输入组件的音频数据。
音频传输总线缓冲客户端网络节点上可用的每个音频流的一个时间间隔。 音频传 输总线馈送这些流至由音频流服务 272 配置的零或更多个订户。流送数据使用拖拉模型, 其中最终输出级调用之前的级以获得需要的数据。 每级调用一个之前的级直至到达原音频
流源。 如果源需要控制速率 ( 流控制 ), 通常进行其自身的缓冲并具有其自身的特定信令方 案。 例如, 本地文件源可双缓冲并在处理之前一个时间间隔的同时向前读取一个时间间隔。 网络文件源可通过网络向服务器信号通知流速率和缓冲器限制。另一方面, 本地话筒源根 本没有控制流速率的能力。
音频传输总线在两个阶段操作 : 一旦出现呈现定时器事件, 其向音频阱组件提供 现有的呈现数据 ; 音频传输总线随后遍历音频图, 致使下一时间片的音频数据被呈现并被 缓存。该技术给予音频图一个提供连续回放的很好机会, 甚至在存在可变等待时间音频源 数据时也是如此。
在一些实施例中, 音频传输总线测量每个音频音频图组件的呈现等待时间, 并通 过合计所有相关 ( 源 ) 音频组件等待时间来聚集每个呈现链等待时间。音频传输总线收集 并登记呈现等待时间统计。基于这些统计, 实时调度器 278 确定应当何时以及如何修改音 频图才能达成音频图处理目标。在一些实施例中, 实时调度器 278 在确定应当何时以及如 何修改音频图才能达成音频图处理目标的过程中执行以上结合图 13 和 14 描述的一种或更 多种方法。
音频传输总线的另一个功能是周期性调用音频计算对象。 音频计算对象被用于改 变相关联的一些音频图处理元件的设置。 音频计算执行的周期通常比音频图呈现周期要长 的多 ( 频繁度更低 )。
音频传输总线通常具有记录流和重放被记录的流的能力。 原音频流通常被记录以 便在回放期间, 可根据观看者的角度来重新呈现混合。一些实施例包括接收所有原音频流 的中枢。在这些实施例中, 该中枢通常处置会话记录。当不期望重新呈现会话时, 音频传输 总线通常仅在客户端网络节点上记录音频流。
音频源对象是所有音频源的基础。该对象在被轮询时传递数据, 并定义其期望等 待时间和信道 ( 例如, 单声道、 立体声、 5.1)。导出对象包括话筒、 媒体流、 剪辑、 波形文件、 DirectX 音频、 以及混合插件的输出侧。
音频阱对象是音频输出设备的基础对象。 该对象在被轮询时请求来自音频源的数 据。导出对象包括扬声器、 媒体流以及混合插件的输入侧。
(i) 音频插件 API
在一些实施例中, 音频插件结合可从 Steinberg 媒体技术 GmbH 获得的 VST 音频效 果 C++ 对象。特别是, 音频插件结合包装为插件的 VST 对象。提供填充库 (shim library) 用于包装 VST 对象作为音频插件。该包装提供音频插件 API。VST 对象的 API 将被用作音 频插件类专用 API。该 API 包括 :
设定总线排列 ( 输入、 n 输入、 输出、 n 输出 )
获得总线排列 ( 方向、 索引、 扬声器 &)
能处理样本大小 ( 大小 )
获得等待时间样本 ()
建立处理 ( 处理 )
设定处理 ( 状态 )
处理 ( 数据 &)
获得尾部样本 ()在这些实施例中, VST 插件被包装为音频源和音频阱。例如, 音频源 :: 帧 ( 数据 &, 大小 ) 调用将作为对之前音频源 :: 帧 ( 数据 &, 大小 &)、 继之以建立处理 ( 处理 ) 和处 理 ( 数据 &) 的调用来实现。配置 ( 等待时间 &, 信道布局 &) 调用根据针对每个支持信道的 获得等待时间样本 () 和获得总线排列 ( 输出, i, 信道布局 &) 来实现。包装的存在意味着 需要 VST 源代码来将现有的 VST 插件填充入音频总线。
(ii)OpenAL( 打开音频库 )
使用可从 www.openal.org 获得的 OpenAL 跨平台音频 API 来执行大部分音频处理 图混合和效果元件。该 OpenAL 库能够使用可用声卡的最佳特征来计算以上在区域 / 地带 管理器部分列出的所有参数以实现这些特征。特别是, 为音频图中从静音到最终混合的每 个操作创建 OpenAL 源、 倾听者、 以及程序缓冲器。在每次更新之前, 根据计算插件修改缓冲 器参数。
在一些实施例中, 使用可从 Global IP Solutions, Inc.( 全局 IP 方案公司 ) 获得 的 GIPS 组件化音频库来实现流处理组件 ( 插入物 )。GIPS 音频库直接支持以下音频插件 : 编解码器、 差错消除、 抖动控制、 回声和噪声消除、 AGC、 以及寂静检查。
I. 本地流源
本地流源是话筒、 诸如记录的波形文件和音乐之类的本地声源、 以及声音样式资 源。Windows 操作系统 API 被用于附连这些源的每一者并将其呈现给音频传输总线用于 分发。每个源被 “包装” 为音频源导出类。当接收定义时 ( 参见第 VI 部分的音频设备 SODA 定义 ), 创建源对象包装。针对话筒、 剪辑、 Skype、 以及 CD 声音在基于 Windows 的计算系 统上使用直接声音 API。RTP 流送仅仅是实时协议 (RTP) 服务周围的音频源包装, 该实时协 议服务用于通过 UDP 套接字传递流送数据 ( 例如, 音频 )。 通过因特网的流送音频支持基于 web 的下载及播放以及还有微软媒体服务器流。
在一些实施例中, 实时内核 260 支持基于虚拟区域的通信与基于非虚拟区域的通 信 ( 例如, Skype 和 VOIP 音频 ) 的会话的发源和混合。在这些实施例中, 实时内核截取基 于非虚拟区域的通信并将其呈现为本地音频源。 基于非虚拟区域的通信会话由通信者之一 在负责与其他网络节点共享该基于非虚拟区域的通信会话的原始音频的客户端网络节点 上发起。主存客户端网络节点还混合与虚拟区域通信环境相关联的音频, 该通信环境针对 经由该基于非虚拟区域的通信应用通信的通信者。
图 24 示出使人们能经由不同通信应用 ( 例如, Skype 和 VOIP) 与虚拟区域通信者 通信的计算机系统 389( 标记为 “系统 2” ) 的实施例。在图 24 中, 在共享虚拟区域的四个 网络节点 ( 即, 系统 1、 系统 2、 系统 3 和系统 4) 之间建立音频通信信道。系统 1 表示不运 行基于虚拟区域的通信应用的客户端网络节点 ; 相反, 系统 1 被配置为操作一替换通信应 用 ( 例如, Skype)。系统 2 表示正运行实时内核 260 的实施例的通信者网络节点, 该实时内 核包括发出并混合与系统 1 的基于虚拟区域的会话的流处理机 391。 在此过程中, 流处理机 391 使用虚拟化系统 1 的回放和音频捕获流的集成组件 393。系统 3 和 4 表示正运行基于 虚拟区域的通信应用的两个其他客户端终端。图 24 中示出的系统的诸组件包括 :
·流处理机 391 : 由以下音频图处理元件构成的 :
○集成组件 393 虚拟化替换回放和捕获流。在此过程中, 集成组件 393 发送话筒 (Mic)1 至接收自虚拟化替换回放的 C 拆分 1, 从 P 混合接收话筒 2、 3 和 4 混合, 以及发送虚 拟化替换捕获用于传输至系统 1。
○ C 拆分 1 从集成组件 393 接收话筒 1 并将话筒 1 发送至 P 路由和 I/O 多路复用 器 / 多路分解器两者。
○ C 拆分 2 从系统 2 捕获接收话筒 1 并将话筒 2 发送至 P 混合和 I/O 多路复用器 / 多路分解器两者。
○ P 路由从 C 拆分 1 接收话筒 1 以及从 I/O 多路复用器 / 多路分解器接收话筒 2 和 3。P 路由还向系统 2 回放发送话筒 1、 3 和 4 以及向 P 混合发送话筒 3 和 4。
○ P 混合从 C 拆分 2 接收话筒 2 以及从 P 路由接收话筒 3 和 4, 向流处理机 391 发 送话筒 2、 3、 4 的混合用于虚拟化之外的传输。
·C : 由基于虚拟区域的通信应用进行的音频捕获
·P : 由基于虚拟区域的通信应用进行的音频回放
·CA : 由系统 1 的替换音频应用进行的音频捕获
·PA : 由系统 2 的替换音频应用进行的音频回放
·虚拟话筒 : 与系统 2 的替换音频相关联的虚拟话筒
·虚拟扬声器 : 与系统 2 的替换音频相关联的虚拟扬声器
在计算机系统 389 的操作中, I/O 多路复用器 / 多路分解器将接收自系统 1 和 2 的 音频信号 1 和 2 发送至系统 3 和 4 两者。I/O 多路复用器 / 多路分解器还将接收自系统 3 和 4 的音频信号 3 和 4 发送至流处理机 391 的 P 路由组件。P 路由组件向系统 2 的回放组 件发送音频信号 1、 3 和 4 并将音频信号 3 和 4 传递给系统 2 的 P 混合组件。流处理机 391 的 P 混合组件混合音频信号 2、 3、 4 并将经混合的信号传递给系统 2 的集成组件。集成组件 393 将经混合的信号传递给正在系统 2 上运行并对应于系统 1 使用的通信应用 395( 例如, Skype) 的替换通信应用 ( 例如, Skype) 的音频捕获组件。替换音频捕获系统 (CA) 将捕获 的经混合信号 2+3+4 传递给在系统 1 上运行的替换通信应用 395 的回放组件。
在通信基础结构 389 的一些实施例中, P 混合直接订阅 I/O 多路复用器 / 多路分 解器以使该系统更对称。在这些实施例中, P 路由变为 P 混合 1, 并从 I/O 接收 3、 4, 以及从 C 拆分 1 接收 1。因为这些信号作为独立信道发送, 则 C 拆分 1 的输出可能直接被发送至回 放组件, 但这是不够灵活的 ( 因为 P 混合可能执行实际的混合而非独立信道的传递, 参见以 下 3)。在此情况下, P 混合变为 P 混合 2, 并从 I/O 接收 3、 4, 以及从 C 拆分 2 接收 2。该混 合器的输出是真实混合, 因为替换音频系统是单声道通信系统 ( 即使该声道是立体声的, 另一端不存在组合来自多个源的信号的多轨混合器 )。
图 24 并未示出系统 3 和系统 4 彼此之间的交互, 仅仅示出与系统 2 以及通过延伸 而与系统 1 的交互。系统 3 和 4 之间的交互可以如上所述, 是对等的或是服务器仲裁的。
在图 24 中, 在任何时间, 两个流用逗号分隔 ( 意指它是多信道路由 ), 该系统也可 发送经混合的流以节约内部通信资源 ( 例如, 在 I/O 多路复用器 / 多路分解器之外 )。将被 混合的流用加号来指示 ( 即, 由集成组件 393 向替换捕获组件 CA 发送的虚拟化话筒信号 )。
m. 实时调度器
在一些实施例中, 实时调度器服务 278 是 Windows 服务 DLL。
在一些实施例中, 音频和 3D 场景的呈现在逐帧基础上进行。最初, 流被启动, 随后 在一延迟后, 实时调度器服务 278 开始处理第一帧。该延迟是由每个音频和视频处理链的 组合期望等待时间校准的。 实时调度器服务 278 发起对之前准备帧的消耗并随后在具有 50 毫秒周期的时间计时上处理下一帧。
将每一链中的最终呈现对象向实时调度器服务 278 登记。从 SoFrameRenderer 类 导出这些对象, SoFrameRenderer 类是一种方法
帧呈现 ( 时间帧 Ms)
该方法从呈现链特有的数据源 ( 音频或视频 ) 准备具有所指示时间的一帧。 SoFrameRenderer 类包括另一种方法
帧传递 ()
该方法将之前准备的帧传递至最终目的地, 该最终目的地是该呈现链特有的。 SoFrameRenderer 对象并不要求能够缓冲多于一个完整帧。实时调度器服务 278 将按调度 来帧传递该之前准备的帧, 并随后调用帧呈现以准备下一间隔的帧。
Windows 操作系统没有 “硬调度” 能力。 在一些实施例中, 实时调度器服务 278 被 配置为调用一个或更多个 SoFrameRenderer 类, 其包括音频处理器、 图形处理器、 物理建模 和脚本。SoFrameRenderer 类使实时调度器服务 278 能响应于确定客户端网络节点不能跟 上目标处理级别而重新调整帧处理。在一些实施例中, 实时调度器 278 实现以上结合图 13 和 14 描述的一种或更多种方法。在一些实施例中, 实时调度器服务 278 测量所有帧的呈现 时间, 并作出通过 SODA 接口可用的统计。如果统计落在范围之外 ( 例如, 采用了太长时间 来准备帧 ), 则生成日志事件。启发将被触发以尝试 “追上” , 或许通过跳过一帧、 丢弃范围 之外的呈现链 ( 这通常是因硬件或网络差错导致的范围之外 )、 或者通过丢弃低优先级呈 现链。出于实现基于优先级的调度的目的, SoFrameRenderer 类定义该方法 :
帧优先级 ()
该方法返回一数字, 越小的数字越重要。启发可从链的等待时间和优先级确定应 该丢弃哪个 ( 些 ) 链以产生对总优先级具有最小影响的最大收益。
在一些实施例中, 实时调度器服务 278 另外能丢弃链中的级。为此, 实时调度器服 务 278 能调用方法 :
等待时间=帧删除 ( 优先级 )
其中处理链负责 “丢弃” 低于所指示的优先级的 “链路” 。实时调度器服务 278 可 启动在最大优先级处的调用并倒数直至所有帧在期望总等待时间内呈现。 迭代丢弃低优先
级链并删除这些链本身的组合启发通常在某一优先级级别终止。 如果优先级级别在阈值之 下, 则可作出日志项以及, 在某些情况下, 关闭该会话。
实时调度器服务 278 还负责管理至 SIS 时间服务 ( 网络资源 ) 的接口, 以使客户 端网络节点时钟与网络中的其他客户端网络节点的时钟同步。在一些实施例中, 时间服务 由插件实现, 如下所述。
7. 故障恢复
实时内核 260 进行尽力尝试以在出现网络和服务器故障的情况下继续操作。在此 过程中, 实时内核 260 实现两层故障恢复算法。首先, 在故障时, SODA 信道服务 270 和媒体 服务 271 独立尝试重新建立连接。媒体恢复将允许会议在出现单个音频信道故障时继续, 或者在 NAT 超时的情况下恢复。其次, 如果 SODA 信道服务 270 和媒体服务 271 未能重新建 立连接, 则它们将向其客户端信号通知该故障。 在一些实施例中, 多个通信者同时尝试恢复 的动作可通过向可同步恢复尝试的区域 vault 服务器登记该客户端节点会话来协调。
在一些实施例中, 区域 / 地带管理器 264 还尝试在服务器故障的情况下进行恢复。 区域 / 地带管理器 264 接手该流故障并随后卸下该会话并在不同区域服务器上重新启动该 会话。
8. 插件
在一些实施例中, 实时内核 260 具有组件化的、 开放的、 以及平台无关的架构, 该 架构允许开发者独立开发并远程增加和更新实时内核 260 的组件。
a. 插件设计
插 件 是 因 平 台 而 异 的 二 进 制 图 像, 该 图 像 是 从 插 件 服 务 器 下 载 的。 在 基 于 Windows 的计算机系统上, 插件实现为 DLL( 例如, .NET 或 COM 样式插件 )。 然而, 插件与普 通动态链接库的加载方式不同。特别是, 在加载期间, 不需要链接至插件库 ; 也不需要对软 件代码进行任何编译。相反, 插件管理器 266 简单加载包含在插件目录中的插件。这样, 插 件可被增加到客户端网络节点或从其移除, 而不需要对站进行任何进一步的配置 ( 例如, 注册表项 ), 这简单地通过下载或删除可执行件来实现。 这些插件以定义好的方式连接到每 个插件主机。
如图 25 所示, 从相应插件变量类 394 导出插件 392 的活动实例, 该插件变量类又 是从相应插件基类 396 导出的。在一些实施例中, 通过创建基础插件对象以及通过继承将 该基础插件对象投向被标识的变量来实例化插件实例 392。每个基类 396 和变量类 394 通 过宣称实现一接口来表示它提供服务。
图 26 示出插件基类 398、 400 的示例性集, 每个插件基类与相应的一个或更多个导 出变量类 402、 404 以及 406、 408 的集合相关联。每个插件基类 398、 400 定义特定的功能性 类别, 而每个插件变量类定义相应基类的功能性的特定用途或类别的行为 ( 例如, API =人 类接口设备, 变量=鼠标 )。 插件通常使用头部文件来定义接口、 接口功能的功能原型、 以及 用于调用该接口功能的宏。
插件由 GUID 以及人类可读的名称来标识。单个插件可具有支持的多个 API 以及 同一 API 上的多个变量。在一些实施例中, 插件 API 是包含至实现由接口定义的服务的插 件功能的函数指针的 C 语言数据结构。
下表示出被标识为 guid 物理设定 1 的假想物理插件的示例。71102362269 A CN 102362286
文件名 物理 .DLL 物理 .DLL 物理 .DLL 物理 .DLL 物 .DLL 物理 .DLL
内部名称 无摩擦物理设定 1.0 无摩擦物理设定 1.0 无摩擦物理设定 1.0 无摩擦物理设定 1.0 无摩擦物理设定 1.0 无摩擦物理设定 1.0说明书API guid 接合 guid 接合 guid 接合 guid 接合 guid 冲突 guid 冲突 变量 Guid 接合球56/68 页标识符 guid 物理设定 1 guid 物理设定 1 guid 物理设定 1 guid 物理设定 1 guid 物理设定 1 guid 物理设定 1guid 接合铰链 guid 接合游标 guid 接合弹簧 guid 冲突八树 guid 冲突动态在此示例中, 存在 “接合” API 的四个变量和 “冲突检测” API 的两个变量。文件名 是插件以其被存储在文件系统中的名称。内部名称意图整体描述插件。标识符标识整个 插件二进制图像, 且仅由插件管理器 266 使用。API 是指定由插件支持的程序 API 的公知 GUID。变量是客户端应用可使用以选择针对特定用途的插件的公知 GUID。例如, SODA 信道 服务 270 可商定压缩插件变量以供会话上使用。
图 27 示出与 Microsoft COM( 组件对象模型 ) 架构兼容的插件 410 的示例性架 构。 插件 410 包括一组入口点函数 412, 包括第一和第二变量 416、 418 的第一 API 类 414, 以 及第二 API 类 420。插件 410 实现在所有支持的 API 类 414、 420 中和在每个 API 类中的所 有变量中的所有函数。每个 API 类和 API 类中的每个变量与相应入口点函数 ( 也称为 “工 厂” ) 相关联。当插件 410 被加载时, 针对每个支持的 API 类向插件主机登记相应的入口点 函数。 插件主机使用与 API 类相关联的入口点函数以实例化该 API 类并获得至其 Iunknown 接口的指针。插件主机使用 Iunknown 接口来搜索由该 API 类所支持的变量的入口点函数。 插件主机使用与变量相关联的入口点函数以实例化该变量并获得至其 Iunknown 接口的指 针。插件主机使用 Iunknown 接口向该变量查询该接口的接口函数表。该函数表给予主机 对变量的 API 实现的访问。
每个插件可执行件支持允许插件管理器 266 管理该插件的核心插件 API。核心插 件 API 使得该插件可执行件是自描述的。 特别是, 每个插件输出可由插件管理器 266 调用以 允许该插件自己登记的函数。在一些实施例中, 每个插件可执行件输出以下核心插件 API :
(i) 插件变量
插件变量的活动实例从类 “插件变量” 导出。总是使用插件对象来创建插件变量。 所有有用插件将该类扩展至包括因 API 而异的方法。唯一共用的方法是普通配置方法。
插件变量 : 配置 () 插件变量 : 配置设定 ( 参数 ) 插件变量 : 配置获得 ( 参数 &)
启动对话 设定配置参数 获得配置参数(ii) 插件管理器
图 28 示出包括插件管理器 266、 包含一组插件容器 424 的插件目录 422、 插件数据 库 426、 以及调用程序 428 的插件架构的实施例。插件管理器 266 查询插件目录 422 中的 插件容器 424、 在插件数据库 426 中登记插件、 以及对来自调用程序 428 的对发送有关可用 插件的信息以及实例化指定插件变量的请求作出响应。调用程序 428 通常是内核组件 ( 例 如, 安装加载程序组件、 诸如连接和服务器混合管理器 262 和区域 / 地带管理器 264 等内核 管理器、 以及内核服务 ) ; 尽管在一些实施例中, 调用程序 428 可对应于在客户端节点或远 程网络节点 ( 例如服务器 ) 上运行的软件应用或服务。
图 29 示出了由插件管理器 266 在登记客户端网络节点上的可用插件的过程中实 现的方法的实施例。
根据图 29 的方法, 插件管理器 266 发现客户端网络节点上可用的插件 ( 图 29, 框 430)。在一些实施例中, 所有插件被存储在在客户端网络节点的文件系统中创建的共享插 件目录中。在这些实施例中, 插件管理器 266 通过检查该共享插件目录发现可用插件。在 其他实施例中, 插件管理器 266 可被配置为检查其他文件位置以发现可用插件。
插件管理器 266 查询所发现的插件以发现它们支持的所有 API( 图 29, 框 432)。 在 此过程中, 插件管理器 266 进行对核心 API 的调用以枚举与可用插件相关联的参数值。例 如, 插件管理器 266 用返回插件 GUID、 所支持 API 的 GUID、 以及针对给定 API 的所支持变量 的 GUID 的核心 API 调用来查询插件。
基于查询结果, 插件管理器 266 将诸插件与这些插件分别支持的 API 之间的关联存储在插件数据库 426 中 ( 图 29, 框 434)。在此过程中, 插件管理器 266 通过插件所支持 的 API 对目录 422 中的所有插件进行分类。插件管理器 266 自动将插件输入到插件数据库 426 中所有支持的 API 下面。这样, 插件数据库 426 允许对具有相同 API 的插件进行变量查 询。此外, 插件数据库 426 中的插件可由 API 和变量以及在由虚拟区域应用参考时创建的 实例来枚举。图 30 示出创建数据库 436 的示例性实施例。
插件管理器输出以下 API :
图 31 示出由插件管理器 266 响应于收到来自调用程序 428 的 API 调用实现的方 法的实施例。根据该方法, 响应于收到对枚举支持指定的一个 API 的所有插件的调用 ( 图 31, 框 440), 插件管理器 266 返回包括插件数据库中与该指定的 API 相关联的所有插件的 标识符的列表 ( 图 31, 框 442)。响应于收到对枚举由所标识的一个插件支持的所标识的一 个 API 的变量的调用 ( 图 31, 框 444), 插件管理器 266 返回包括由所标识的插件支持的该 给定 API 的所有变量的标识符的列表 ( 图 31, 框 446)。响应于收到对实例化由所标识的 一个插件支持的所标识的一个 API 的所标识的一个变量的调用 ( 图 31, 框 448), 插件管理 器 266 加载所标识的插件并返回至所标识的变量的实例的指针 ( 图 31, 框 450)。在此过程 中, 定位指定的变量, 该指定的变量被加载至调用程序的地址空间中, 并用实现由该 API 定 义的服务的变量函数的函数表地址来填充内部指针表。
(iii) 插件服务器
插件以适合每个所支持平台的可下载形式存在于服务器上。服务器始终支持加 密、 压缩以及认证插件的最小集, 因此客户端网络节点在尝试服务器连接时始终成功。
当首次由第三方开发者在服务器上登记时, 由自动化工具检查插件以确保它符合
API 描述, 并检查不可接受的客户端站点 API 参考。例如, 不允许动态绑定至不是已经在插 件环境中的任何本地接口。随后扫描插件是否有病毒。服务器上的所有图像随后在病毒方 面是安全的。
插件通过认证用户进行访问控制。这样, 已经支付该访问的用户可在任何位置使 用该插件。在一些实施例中, 经由电子商务引擎为插件下载认证用户。
b. 插件类
所有插件符合插件 API。一些插件专用于某些工具 ( 例如, OpenGL) 并具有其自身 标准。 每个插件类具有因类而异的 API。 在一些实施例中, 插件取决于所有客户端站点访问 的本地应用运行时。在使用插件的每个组件中, 协议允许商定使用 GUID 命名空间的特征。 例如, 在一些实例中, 当连接网络流时, 提供方客户端网络节点以偏好顺序提供其加密插件 GUID 列表, 而接收方网络节点在这些提供中选择并用选择或拒绝来响应。
在一些示例性实施例中, 以下插件类被定义并由开发者用于开发在创建虚拟区域 通信者环境中使用的插件。
·加密算法
·压缩算法
·认证算法
·凭证
·图形效果
·物理延伸
·脚本延伸
·输入设备主存
·音频混合
·音频源
·音频插入
·流传输
·时间服务
这些插件类在以下段落中定义。
加密算法
加密是流传输特征, 并在流创建时间被商定。会话定义将包括加密变量 ID。示例 性加密变量包括 AES 和 RC4 块加密。
压缩算法
压缩是可选的信道内容特征。信道在传输商定信道定义时选择压缩。订阅站提供 可用压缩选项, 而公布站在提供公布时指示其选择。 音频编解码器选择跳过压缩, 因为它们 的内容已经被压缩。示例性的音频压缩插件变量对因信道而异的预备 (priming) 流实现 ITU-T V.44 压缩处理。
认证算法
网络基础结构服务器要求某些认证协议以便连接。 第三方服务器可具有特定认证 要求。认证协议可被随时修改。除核心插件 API 外, 认证插件具有用于执行认证协议并得 到对本地凭证的访问的 API。示例性的认证插件变量包括支持对初始服务器的 SSL 类型的认证以及支持使用经签名 ID 作为令牌的后续服务器登录的的插件变量。
凭证
凭证可被创建并且必须被封装在插件中以由认证算法存储和使用。 示例性的凭证 是包含公钥的凭证。
图形效果
OpenGL 和 Collada 支持脚本式着色器、 取样器、 简档和注释。一些实施例支持为 着色器的 Collada cg_ 表面 _ 类型和 glsi_ 表面 _ 类型, 以及为取样器的 gl_ 取样器 X 和 cg_ 取样器 X。
物理延伸
在一些实施例中, 开放动态引擎 (ODE) 被修改为在动态行为环中包括特定钩子 (hook)。虚拟区域应用通常通过对场景图中的实体施加物理属性来指定物理性质。物理延 伸插件具有用于查询由该插件处理的相关联的属性 GUID 的 API。这样, 仅为有关对象和虚 拟区域调用物理插件。一些实施例支持为模型内的接合的 Collada 刚性 _ 约束, 以及为针 对化身和假象的全局运动算法的 OpenGL 冲突检查。
脚本延伸
脚本延伸插件具有允许包装脚本运行时 ( 例如, Java 或 JavaScript) 并向其提供 本地应用运行时的附加 API。脚本通过包括脚本延伸插件的 GUID 的 SODA 记录来定义。
输入设备主存
输入设备插件生成针对由应用逻辑处理的标准输入事件 ( 例如由计算机键盘、 计 算机鼠标、 Xbox 控制器、 以及 Wii 控制器生成的事件 ) 的 SODA 记录。
音频混合、 音频源、 以及音频插入
音频处理在起点 ( 例如, 话筒 ) 处是合需的并在终点 ( 例如, 扬声器 ) 处生效并混 合。音频插件通常不能改变音频网络路由, 因为这会影响其他用户的体验。Windows 平台 上的音频插件是符合音频插件 API 的 DLL。它们向实时内核 260 登记并可供 SODA 参考。虚 拟区域开发者可请求音频插件作为虚拟区域应用的一部分 ( 例如, 使用延伸的 Collada 字 段或 VSDL 语义 )。
化身脚本同样可请求音频插件。
混合变量包括回声、 回声消除、 混响以及合成。
源变量包括话筒、 剪辑、 媒体、 Skype 以及流送文件。
插入变量包括声像控制、 音量、 iLBC、 RCU、 iPCM-wb、 均衡器、 LPF、 HPF、 AGC、 噪声消 除、 差错消除、 抖动控制、 静音、 延迟、 寂静检查、 舒适噪声。
流传输
STRAW 使用流传输插件来主存网络上的会话。 流传输分组并提供可靠性、 认证和加 密。
时间服务
实时调度器 260 对同步客户端网络节点之间的时间感兴趣。为此, 每个客户端网 络节点将与因特网时间标准 ( 诸如 SIS、 NTP( 网络时间协议 )、 或 ITS( 因特网时间服务 )) 同步。
c. 插件类 API所有插件类对象基于插件变量。
加密算法
该插件是基于插件变量的。它执行包括键控的块加密算法。该插件除密钥以外是 无状态的, 即每个加密是独立于其他加密的。
加密 ::Ctor( 算法, 密钥 )
加密 :: 加密 ( 数据, 大小, 目标 )
加密 :: 解密 ( 数据, 大小, 目标 )
加密 ::Dtor()
压缩算法
该插件是基于插件变量的。它执行一个或更多个无损压缩 / 解压缩算法。它压缩 连续流, 并可保持内部状态表。 该算法在每个关键帧重新开始, 可包括处理没有发出但有助 于压缩状态的 “预备” 块。
压缩 ::Ctor( 算法 )
压缩 :: 关键帧 ( 预加载 )
压缩 :: 压缩 ( 数据, 大小, 目标 )
压缩 :: 解压 ( 数据, 大小, 目标 )
压缩 ::Dtor()
认证算法 :
该插件是基于插件变量的。它访问本地凭证, 并实现一个或更多个状态的客户端 认证状态机。该认证状态机不控制至认证服务器的通信链路。它仅处理消息并产生后续消 息。
认证 ::Ctor( 算法, 凭证 )
认证 :: 初始状态 ()
认证 :: 状态 ( 状态 )
认证 :: 提前 ( 消息数据, 消息消费者 &)
认证 :: 会话密钥 ( 密钥 &)
认证 ::Dtor()
凭证
该插件是基于插件变量的。它访问因平台而异的凭证存储。
凭证 ::Ctor()
凭证 :: 选择 ( 索引 )
凭证 :: 接受 ( 数据, 大小, 索引 &)
凭证 :: 私钥 ( 密钥 &)
凭证 :: 公钥 ( 密钥 &)
凭证 :: 密码短语 ( 密码短语 &)
凭证 ::Dtor()
图形效果 - 着色器
该插件是基于插件变量的。它影响 3D 呈现。
着色器 API 支持着色器 ( 脚本程序表面生成器 )。着色器 ::Ctor(gl&)
着色器 :: 初始化 ( 格式, 大小, mip, 类型, 代码, 技术 )
着色器 :: 设定纹理参数 ( 纹理 )
着色器 :: 设定纹理流 (id 流 )
着色器 :: 呈现 ( 传递 )
着色器 ::Dtor()
图形效果 - 取样器
该取样器 API 是基于插件变量的。它支持将纹理映射至表面。
取样器 ::Ctor(gl&)
取样 :: 初始化 ( 类型, 包装, 小滤波器, 大滤波器, mip 滤波器, 颜色, mip 映射 _ 最 大级别, mip 映射 _ 偏置 )
取样器 ::Dtor()
物理延伸 - 接合
该插件是基于插件变量的。它扩展运动的动态特性。
接合 API 支持对化身和假象子组件的接合约束和动态特性。
接合 ::Ctor(ode&, 尺寸, n 无界的 )
接合 :: 初始化 ( 身体 1, 锚 1, 取向 1, 身体 2, 锚 2, 取向 2, 轴, erp, cfm)
接合 :: 扭矩 ( 扭矩 )
接合 :: 获得状态 (fps&, erp&, jLin1&, jAng1&, jLin2&, jAng2&, c&, cfm&, 低 &, 高 &)
物理延伸 - 冲突
该冲突 API 是基于插件变量的。它支持快速计算冲突检测。在一些实施例中, 冲 突插件变量可在开放动态引擎 (ODE) 中实现四叉树类 dx 空间算法。
冲突 ::Ctor(ode&, 空间 )
冲突 :: 步骤 ()
脚本延伸
该插件是基于插件变量的。它支持由虚拟区域应用提供的代码的执行。该代码是 二进制形式, 且由语言和该特定代码定义支持的 API 来标记。该插件随语言而变。它加载 特定的代码定义并调用该代码定义, 提供适合该 API 的本地应用运行时对象。
脚本延伸 ::Ctor(sonar&)
脚本延伸 :: 执行 ( 代码, api)
脚本延伸 ::Dtor()
输入设备主存
该插件是基于插件变量的。它支持用户事件捕获 ( 除音频之外 )。这包括从鼠标 到具有面部识别的视频照相机的所有东西。该插件向队列生成用户事件。
输入设备 ::Ctor(arg, 队列 )
输入设备 :: 配置 (arg)
音频混合
该插件是基于音频组件的。它组合两个音频流。音频混合 ::Ctor( 音频场景 1, 音频场景 2, 参数 )
音频混合 :: 配置 ( 参数 )
音频混合 ::Dtor()
音频源
该插件是基于音频组件的。它提供可轮询的音频流。
音频源 ::Ctor()
音频源 :: 配置 (arg)
音频源 :: 获得等待时间 ( 等待时间 &)
音频源 :: 轮询 ( 数据 )
音频插入
该插件是基于音频组件的。它翻译音频流。它可压缩、 解压缩或简单地修改流。
音频插入 ::Ctor( 音频源 &)
音频插入 :: 获得等待时间 ( 等待时间 &)
音频插入 :: 过程 ()
音频发送
该插件是基于音频组件的。它将音频流分为两个相等的流 ( 复制该流 )。任何音 频源可被路由至任何其他音频元件。
音频发送 ::Ctor( 音频源 &)
音频发送 ::Dtor()
音频发送 :: 复制 ( 数据 &)
流传输
该插件是基于插件变量的。 示例性的流传输插件变量支持具有可配置的认证和加 密的 IP UDP 传输。
传输 ::Ctor( 端口, 站, 会话, 加密 )
传输 ::MTU()
传输 ::Hello()
传输 :: 质询 ( 凭证 )
传输 :: 回应 ( 质询, 加密 )
传输 :: 响应 ( 响应, 加密 )
传输 :: 标识令牌 ()
传输 :: 标识令牌 ( 令牌 )
传输 :: 发送 ( 数据, 大小, id 信道 )
传输 :: 接收 ( 记录 )
传输 ::Dtor()
时间服务
该插件是基于插件变量的。它将客户端网络节点时间与因特网标准同步。
时间服务 ::Ctor()
时间服务 :: 同步 ()
时间服务 ::Dtor()VI.SODA 定义 会话 ID 站 1 GUID ID 站 2 GUID ID 会话 GUID 会话故障 ID 会话 GUID 原因 长 参数 长 站 ID GUID STRAW_ 地址 IP, 端口 STRAW_ 传输 [GUID] 公布 ID 客户端 GUID ID 服务器 GUID ID 信道 GUID ID 压缩 [GUID] 订阅
流保持有效 ID 会话 GUID 超时 长 流故障 ID 会话 GUID 信道故障 ID 信道索引 GUID 通信者状态ID 本身 GUID ID 通信者 GUID 状态 短 HID ID 设备类 GUID ID 设备 GUID ID GUID 音频参数 ID GUID ID 参数 GUID 值 短 音频设备 ID 设备类 GUID ID 设备 GUID ID GUID 区域会话 ID 区域 GUID ID GUID 物理检查点
地带 ID GUID 形状 网格 起点 双 X3 化身 [GUID] 音频孔径 ID GUID 半径 双 起点 双 X3 取向 双 X3音频障碍 ID GUID 半径 双 起点 双 X3 音频混响 ID GUID 形状 网格 起点 双 X3 音频混合
音频效果
音频流 ID 音频 化身 音频计算GUID GUID
插件类型 GUID
名称 文本
ID GUID
支持的 API [GUID]
升级相关性列表
基础安装 GUID
描述 文本
升级 ID [GUID]
升级
ID GUID
偏移 长
数据 []
音频记录
ID GUID
ID 音频 GUID
ID 存储 GUID
音频回放
ID GUID
ID 音频 GUID
ID 存储 GUID
网络 DNS
地址 串
网络代理
地址 串
调试信息
ID GUID
统计 GUID
复位 布尔
调试陷阱
ID GUID
陷阱 GUID
重新装备 布尔
HID
IDKvm GUID
HID 事件
VII. 结论
本文描述的实施例提供支持在相应网络节点上操作的通信者之间的实时通信的 实时内核。该实时内核处置连接到通信者、 虚拟区域、 以及其它网络资源、 响应于用户输入 开关这些连接、 以及混合实时数据流的复杂任务。该实时内核使开发者能够专注于开发高级通信功能而非低级衔接代码。实时内核施加相对低的计算资源要求, 以便实时通信性能 能使用宽范围的当前可用的计算设备和网络连接来达成。
其他实施例也落在权利要求的范围之内。