JP2012511213A - リアルタイムカーネル - Google Patents

リアルタイムカーネル Download PDF

Info

Publication number
JP2012511213A
JP2012511213A JP2011539734A JP2011539734A JP2012511213A JP 2012511213 A JP2012511213 A JP 2012511213A JP 2011539734 A JP2011539734 A JP 2011539734A JP 2011539734 A JP2011539734 A JP 2011539734A JP 2012511213 A JP2012511213 A JP 2012511213A
Authority
JP
Japan
Prior art keywords
real
stream
network node
plug
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011539734A
Other languages
English (en)
Other versions
JP2012511213A5 (ja
JP5721634B2 (ja
Inventor
ヴァン・ウィー,デービッド
アルトメイヤー,ジョーゼフ
Original Assignee
ソーシャル・コミュニケーションズ・カンパニー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ソーシャル・コミュニケーションズ・カンパニー filed Critical ソーシャル・コミュニケーションズ・カンパニー
Publication of JP2012511213A publication Critical patent/JP2012511213A/ja
Publication of JP2012511213A5 publication Critical patent/JP2012511213A5/ja
Application granted granted Critical
Publication of JP5721634B2 publication Critical patent/JP5721634B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • A63F13/12
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • G06F3/165Management of the audio stream, e.g. setting of volume, audio stream path
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/40Support for services or applications
    • H04L65/403Arrangements for multi-party communication, e.g. for conferences
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • H04L65/764Media network packet handling at the destination 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/75Media network packet handling
    • H04L65/765Media network packet handling intermediate
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1059Inter-group management mechanisms, e.g. splitting, merging or interconnection of groups
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/131Protocols for games, networked simulations or virtual reality
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/141Setup of application sessions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]

Abstract

それぞれのネットワークノード(12, 14)上において操作する通信者間のリアルタイム通信をリアルタイムカーネル(20)がサポートする。通信者、仮想エリア(28)、及び他のネットワークリソースに接続し、ユーザ入力に応答してこれらの接続をスイッチングし、及び、リアルタイムデータストリームをミキシングする、という複雑なタスクを、前記リアルタイムカーネル(20)が処理する。該リアルタイムカーネル(20)によって、開発者は、低レベルな、コードの配管の代りに、高レベルの通信機能を開発することに集中することが可能になる。広範囲の現在利用可能なコンピューティングデバイス及びネットワーク接続を用いてリアルタイム通信性能が達成され得ることとなるように、前記リアルタイムカーネル(20)は、比較的低い計算リソース要件を課す。

Description

本発明の背景
アバター・ベースのバーチャルリアリティ通信システムに対する関心が、高処理能力と広帯域幅のネットワーク接続とを有したコンピューティングシステムにおける高められた可用性と共に高まってきている。そのようなバーチャルリアリティシステムの主要なゴールは、オーディオ、ビデオ、及びテキストチャットストリームなどのリアルタイムデータストリームを用いて、仮想空間の中で複数ユーザが相互作用(又は交流)し及び伝達(通信)し合うことが可能な該仮想空間を生成することである。該仮想空間は、空間のビジュアルジオメトリを描写するコンピュータグラフィックス仕様(スペック)と、該ビジュアルジオメトリ上にマッピングされる色及びテクスチャと、空間内において如何に巧みに複数ユーザが動かす(又は操作する)かを制御するコリジョン特性と、空間の残響(又は反響;リバーバレイション)及び吸音特性などの聴覚特性とによって、典型的には画定される。
典型的なバーチャルリアリティシステムにおいて、複数ユーザは、システムによってサポートされるリアルタイムデータストリームのうちの1つか又は複数のソース(発信側)であるか、シンク(受信側)であるか、或いはソースとシンクとの両方であるインターフェースを通じて各々のコンピュータから互いに伝達し合う(又は通信する)。ユーザの各コンピュータ上において実行中のバーチャルリアリティソフトウェアアプリケーションは、仮想空間内におけるアバターの位置を表す位置情報に基づいて、それ自体のオーディオ及びグラフィックレンダリングを設定(又は構成)する。該位置情報は、典型的には、他のユーザのコンピュータから直接的にか、或いは、中央プレゼンスサーバから間接的にかのいずれかによって受け取られる。デフォルトで、バーチャルリアリティソフトウェアアプリケーションは、仮想空間内に表された各ソースを、仮想空間内に表されたあらゆるシンクに典型的には接続して、グローバルなスイッチング規則、ローカルなユーザ選択(又はローカルユーザの好み)、及び、仮想空間内におけるオブジェクトの特性において指定される条件の影響を受ける。これらの条件は、典型的には、オブジェクト間の相対距離に関して指定される。例えば、幾つかのバーチャルリアリティソフトウェアアプリケーションは、アバター間の離間距離が最大閾値距離を超える場合には、リアルタイムデータストリーム接続が確立されないように設定(又は構成)される。
良好なバーチャルリアリティ通信システムは、現在利用可能なコンピューティングデバイス及びネットワーク帯域幅制約を用いてリアルタイム通信性能が達成され得るように、典型的には、比較的低い計算リソース要件を有するべきである。追加的には、そのようなシステムは、該システムが仮想エリアを発展させるようエリア設計者に促すようなやり方で、それにより、ユーザによる該システムの採用が高められるようなやり方で、典型的には実現されるべきである。
本発明の概略
一態様において、本発明は、リモートネットワークノードから、ローカルネットワークノードにおいて、1つか又は複数のストリームハンドリング命令が受け取られるということに従った方法が特徴となる。該1つか又は複数のストリームハンドリング命令は、少なくとも1つのリアルタイムデータストリームを処理するためのストリームハンドラの仕様(スペック)を含む。ローカルネットワークノードにおいて、該仕様に従ってストリームハンドラが作成される。結果データストリーム(結果として生じるデータストリーム)が、ローカルネットワークノードにおいて生成される。このプロセス内において、その生成したストリームハンドラを通じてリアルタイムデータストリームが処理される。
別の態様において、本発明は、リアルタイムストリームハンドラの仕様が、1つか又は複数のストリームハンドリング命令からパーズされるということに従った方法が特徴となる。このプロセス内において、入力ソース識別子、出力シンク識別子、及び、1つか又は複数のデータ処理オブジェクトのそれぞれの各識別子が、1つか又は複数のストリームハンドリング命令からパーズされる。該識別子のうちの幾つかの各々に対応するリアルタイムストリーム処理オブジェクトは、インスタンス化される。該インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかを含む方向付けられたグラフが、仕様に従って作成される。入力ソース識別子に対応する入力ソースから、リアルタイムデータストリームが受け取られる。結果データストリームが、出力シンク識別子に対応する出力シンクにおいて生成される。このプロセス内において、リアルタイムデータストリームは、方向付けられたグラフを通じて処理される。
別の態様において、本発明は、少なくとも1つのリアルタイムデータストリーム接続が、ローカルネットワークノードと、少なくとも1つのリモートネットワークノードとの間において確立されるということに従った方法が特徴となる。該ローカルネットワークノードにおいて、リモートネットワークノードによって発信された少なくとも1つのリアルタイムデータストリームが処理される。このプロセス内において、前記少なくとも1つのリアルタイムデータストリームが、1つか又は複数のリアルタイムデータ処理動作を通じて処理されて、結果データストリームが生成される。この処理は監視される。該処理が性能目標から逸れることを監視することに基づく決定に応答して、リアルタイム性能目標付けルーチンに従って該処理が修正(変更)される。
別の態様において、本発明は、コネクションレス・トランスポート・プロトコルに従って、トランスポートストリームに関するリモートネットワークノードとの第1のセッションが、ローカルネットワークノード上において確立されるということに従った方法が特徴となる。ローカルネットワークノード上の1つか又は複数のソフトウェアエンティティのために、第1のセッション内において、自動的に、ローカルネットワークノードとリモートネットワークノードとの間でデータが伝達される1つか又は複数のチャンネルが、オープンにされる。第1のセッション内において、テーブルが保持される。該テーブルは、チャンネルうちの幾つかのオープンしたものを識別して、各々の属性値を、その識別したチャンネルに関連付ける。第1のセッションが失敗したという決定に応答して、リモートネットワークノードによる第2のセッションが、自動的に試みられて、コネクションレス・トランスポート・プロトコルに従った第2のトランスポートストリームに関して確立されることとなる。第2のセッションの確立の成功に応答して、テーブル内において自動的に識別された各チャンネルが、オープンにされる。
別の態様において、本発明は、1つか又は複数のカーネルサービス構成要素を含むカーネル構成要素のリストがパーズされるということに従った方法が特徴となる。ローカルな保存場所から無くなっているカーネル構成要素であって、該パーズされるリスト内における全ての該カーネル構成要素が決定される。無くなっていることが決定されたカーネル構成要素の各々が、回復される。カーネルサービスカーネル構成要素のうちの幾つかから、カーネルサービスがインスタンス化される。該インスタンス化されたカーネルサービスは、ある仮想エリアに関連して画定された通信環境内において、1つか又は複数のリモートネットワークノードと伝達し合うよう実行される。
別の態様において、本発明は、ローカルネットワークノード上において実施される方法が特徴となる。この方法に従って、仮想エリアによって画定されたコンテキスト内において、少なくとも1つのリモートネットワークとのリアルタイム通信をサポートするようローカルネットワークノードが構成(又は設定)される。その構成(又は設定)プロセスは、指定されたアプリケーションプログラミングインターフェース(API)をサポートする全てのプラグインを列挙するためのコールに応答して、プラグインデータベース内の指定されたAPIに関連付けられた全てのプラグインの識別子を含むリストを返すことと、複数プラグインのうちの識別されたプラグインによってサポートされる所与のAPIのバリアントを列挙するためのコールに応答して、識別されたプラグインによってサポートされる所与のAPIの全バリアントの識別子を含むリストを配信することと、及び、該識別されたプラグインをロードして、複数プラグインのうちの識別されたプラグインによってサポートされる識別されたAPIの複数バリアントのうちの識別されたバリアントをインスタンス化するためのコールに応答して、該識別されたバリアントのインスタンスに対するポインタを提供すること、とを含む。少なくとも1つのリアルタイムデータストリーム接続が、構成(又は設定)されたローカルネットワークノードと、少なくとも1つのリモートネットワークノードとの間に確立される。
本発明はまた、上述の本発明の方法を実現するよう動作可能な装置と、コンピュータに本発明の上述の方法を実現させるコンピュータ読み出し可能命令を格納するコンピュータ可読媒体とが特徴となる。
本発明の他の特徴及び利点が、図面と特許請求の範囲とを含めて以下の説明から明らかになってくるであろう。
ネットワークによって相互接続された第1のクライアントネットワークノード、第2のクライアントネットワークノード、及びエリアサーバネットワークノード16を含む仮想エリア通信環境の一実施形態の概略図である。 リアルタイムカーネルの一実施形態によって実施される方法の一実施形態の流れ図である。 ピア・ツー・ピア・アーキテクチャにおいてネットワークノードが通信(伝達)する仮想エリア通信環境の一実施形態の概略図である。 サーバが仲介するアーキテクチャにおいてネットワークノードが通信(伝達)する仮想エリア通信環境の一実施形態の概略図である。 仮想エリアの描写を提示するグラフィカルユーザインターフェースを含むネットワークノードの一実施形態の概略図である。 仮想エリアの描写を提示するグラフィカルユーザインターフェース上にスーパーインポーズされたヘッドアップディスプレイ(HUD)の一実施形態の概略図である。 図5A内に示されたHUDの概略図である。 図5A内に示されたHUDの拡大図の概略図である。 エリアネットワークインフラサービスの一実施形態によって実現される方法の一実施形態の流れ図である。 リアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。 リアルタイムカーネルの一実施形態を含むクライアントネットワークノードの一実施形態のブロック図である。 仮想エリアに対する接続をリクエストするリアルタイムカーネルAPIコールに応答して、図8のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。 仮想エリア内へのエントリをリクエストするリアルタイムカーネルAPIコールに応答して、図8のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。 エリアサービスから受け取ったストリームハンドリング命令に応答して、図8のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。 ストリームハンドラコンフィギュレーションマネージャによって作成されるストリームハンドラの一実施形態のブロック図である。 リアルタイムカーネルによって実施されるスケジューリングタスクのプロセス内において、図8のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。 少なくとも1つのリアルタイムデータストリームの処理を監視することに基づく、図8のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。 図8のリアルタイムカーネルの一実施形態のブロック図である。 アカウントサーバがその認証情報を通じて認証されることによる方法の一実施形態の流れ図である。 図8のリアルタイムカーネルの一実施形態のローダー構成要素によって実現される方法の一実施形態の流れ図である。 図8のリアルタイムカーネルの一実施形態のSTRAWサービス構成要素によって実現されるセッション管理方法の一実施形態の流れ図である。 エリアネットワークインフラサービスから受け取ったリモートストリームハンドリング命令に応答して、図8のリアルタイムカーネルの一実施形態の構成要素によって実現される方法の一実施形態の流れ図である。 図8のリアルタイムカーネルの一実施形態のSTRAWサービス構成要素によって実現されるトランスポートプロトコルの構成要素の概略図である。 クライアントネットワークノード344とサーバ346との間においてサーバストリームが確立される方法の一実施形態を示す図である。 図22を参照すると、発行サーバによって呼び起こされた新たなGUIDによって各セッションが識別されている。 4人の通信者のオーディオプロセッシンググラフの例示的な一実施形態の要素を示す図である。 非仮想エリアベースの通信アプリケーションを介して仮想エリア通信者と人々が伝達し合うことを可能するコンピュータシステムの一実施形態を示す図である。 プラグインクラス階層(ヒエラルキ)の一実施形態の概略図を示す図である。 1つか又は複数の導出されたバリアントクラスの各セットに各々が関連付けられたプラグインベースのクラスのセットの一実施形態の概略図を示す図である。 プラグインアーキテクチャの一実施形態のブロック図である。 プラグインマネージャと、プラグインコンテナのセットを含むプラグインディレクトリと、プラグインデータベースと、コーラーとを含むプラグインアーキテクチャの一実施形態のブロック図である。 クライアントネットワークノード上において利用可能なプラグインを登録するプロセス内において、図28のプラグインマネージャの一実施形態によって実現される方法の一実施形態の流れ図である。 プラグインデータベースの一実施形態の概略図である。 コーラーからのAPIコールの受容に応答して、図28のプラグインマネージャの一実施形態によって実現される方法の一実施形態の流れ図である。
本発明の詳細な説明
以下の説明では、同様の要素を特定するのに同様の番号が用いられている。更にまた、図面は、例示的な実施形態の主要な特徴を図表の手法で説明するように意図されている。図面は、実際の実施形態の全ての特徴を図示することは意図されておらず、図示された要素の相対的な寸法の全てを図示することも意図されておらず、及び、一定の縮尺に従って描かれていない。
I.用語の定義
「コンピュータ」は、コンピュータ可読媒体上に一時的にか或いは永続的にかのいずれかの状態で格納されるコンピュータ可読命令に従ってデータを処理する任意の機器か、デバイスか、又は装置である。
「コンピュータオペレーティングシステム」は、タスク性能(動作)と、ソフトウェア及びハードウェアリソースを共有することとを管理し且つ連携させる、コンピュータのソフトウェア構成要素である。「カーネル」は、コンピュータリソース(例えば、CPU、メモリ、ネットワークリンク、及び周辺装置のリソース)にアクセスするための特定機能を提供するためにソフトウェアアプリケーションによって呼び出され得るソフトウェア構成要素のコレクションである。「ソフトウェアアプリケーション」(ソフトウェア、アプリケーション、コンピュータソフトウェア、コンピュータアプリケーション、プログラム、及びコンピュータプログラムとしても呼ばれる)は、1つか又は複数のタスクを実施するためにコンピュータが解釈し且つ実行することが可能な命令のセットである。
「アプリケーションプログラミングインターフェース」(すなわちAPI)は、機能(又はプロシージャ)の宣言のセットであり、それにより、オペレーティングシステムか、ライブラリか、又はサービスプロバイダが、ソフトウェアアプリケーションによってなされるリクエストをサポートする。APIは、インターフェースと、そのインターフェース内において指定された識別子の振る舞いを規定(又は指定)する。APIの実現(又は実行)は、該APIによって表される機能性(機能)を提供するソフトウェアアプリケーションコードを参照する。「コンピュータデータファイル」は、ソフトウェアアプリケーションによって使用されるために永続的にデータを格納する、情報のブロックである。
「サービス」は、単独で自発的に(他のプロセスとは独立して)あるタスクを実施するプロセスである。
「マネージャ」は、タスクを実施するサービスのためのゲートウェイである。マネージャは、単独で自発的にはタスクを実施しない。
「データベース」は、コンピュータによって検索され得る標準フォーマットにおいて提示されている記録(レコード)の系統立てられたコレクションである。データベースは、単一コンピュータ上の単一コンピュータ可読データ記憶媒体上に格納され得るか、或いは、1つか又は複数のコンピュータ上の複数のコンピュータ可読データ記憶媒体にわたって分配され(割り振られ)得る。
「データシンク」(本明細書内においては単に「シンク」と呼ばれる)は、データを受け取る任意の装置か、装置の一部(例えば、コンピュータ)か、又はソフトウェアである。
「データソース」(本明細書内においては単に「ソース」と呼ばれる)は、データを発生させる任意の装置か、装置の一部(例えば、コンピュータ)か、又はソフトウェアである。
「ネットワークノード」(単に「ノード」としても呼ばれる)は、通信ネットワーク内の接合点か又は接続点である。例示的なネットワークノードは、端子(又は端末;ターミナル)、コンピュータ、及びネットワークスイッチを含む(但しこれらに限定されない)。「サーバネットワークノード」は、ネットワーク上のホストコンピュータであり、情報か又はサービスに対するリクエストに応答する。「クライアントネットワークノード」は、ネットワーク上のコンピュータであり、サーバからの情報か又はサービスをリクエストする。「ネットワーク接続(又は接続部)」は、2つの通信ネットワークノード間のリンクである。用語「ローカルネットワークノード」は、現在、議論の主要な対象であるネットワークノードのことを指す。用語「リモートネットワークノード」は、ネットワーク通信リンクによってローカルネットワークノードに接続されているネットワークノードのことを指す。
「プレゼンス(Presence)」は、通信(伝達)を行うための、ネットワーク接続されたエンティティ(例えば、通信者か、サービスか、又は装置)の能力及び意欲のことを指す。ここで、該意欲は、ネットワーク上のエンティティの状態についての情報を検出して取得する能力(機能)と、エンティティに接続する能力(機能)とに影響を及ぼす。
「リアルタイムデータストリーム」は、連続的な流れで構成され且つ処理されるデータであり、遅延が無い状態でか又はわずかな微小な遅延と共に受け取られるように設計される。リアルタイムデータストリームは、音声、ビデオ、ユーザ動作(ムーブメント)、顔の表情、及び他の物理的な現象のディジタル表現を含み、並びに、迅速な伝送か、迅速な実行か、又は迅速な伝送と迅速な実行との両方(例えば、アバター動作命令、テキストチャット、リアルタイムデータフィード(例えば、センサデータ、機械制御命令、トランザクションストリーム、及び株価情報供給)、及びファイル転送を含む)による利益を得ることが可能なコンピューティング環境内におけるデータを含む。
「ストリームミックス」は、同一か又は意味的に一致したタイプ(例えば、オーディオ、ビデオ、チャット、及びモーションデータ)の2つか又は3つ以上のリアルタイムデータストリームの組み合わせである。例えば、音声ストリームのセットが、単一音声ストリーム内へとミックスされ得るか、或いは、ある音声ストリームが、ビデオストリームのオーディオ部分の中へとミックスされ得る。
「スイッチンング規則」は、1つか又は複数の先行条件の影響を受ける、1つか又は複数のリアルタイムデータソース及び1つか又は複数のリアルタイムデータシンクの接続か又は切断を指定する命令である。
「仮想エリア」(「エリア」か又は「場所」としても呼ばれる)は、コンピュータ管理された空間又は場(シーン)の表現である。仮想エリアは、典型的には、1次元か、2次元か、又は3次元の表現である。しかしながら、幾つかの実施形態において、仮想エリアは、単一ポイントに対応することも可能である。頻繁に、仮想エリアは、物理的な現実世界空間をシミュレートするよう設計される。例えば、従来のコンピュータモニタを用いて、仮想エリアを、3次元コンピュータ生成空間の2次元グラフィックとしてビジュアル化することができる。しかしながら、仮想エリアは、スイッチング規則を実現することに関連した視覚化を必要としない。仮想エリアは、典型的には、仮想エリアスキーマのインスタンスのことを指し、ここで、該スキーマは、バリアブルに関して、仮想エリアの構造とコンテンツとを画定し、インスタンスは、ある特定のコンテキストから決定された値に関して、仮想エリアの構造とコンテンツとを画定する。
「仮想エリアアプリケーション」(「仮想エリア仕様(スペック)」としても呼ばれる)は、仮想エリア通信環境を作成することにおいて使用される仮想エリアの記述である。仮想エリアアプリケーションは、典型的には、仮想エリアにおける1つか又は複数のゾーンに関連付けられている、ジオメトリの定義と、物理特性と、リアルタイムスイッチング規則と、を含む。
「仮想通信環境」は、コンピュータ管理された空間の表現であり、少なくとも1つの仮想エリアを含み、通信者間のリアルタイム通信をサポートする。
「ゾーン」は、少なくとも1つのスイッチング規則か又はガバナンス規則に関連付けられている仮想エリアの領域である。スイッチング規則は、仮想エリアのコンテキスト内において伝達しているネットワークノード間のリアルタイムデータストリームをスイッチングすること(例えば、ルーティングすること、接続すること、及び切断すること)を制御する。ガバナンス規則は、リソース(例えば、あるエリアか、あるエリアのある領域か、或いは、そのエリアか又は領域のコンテンツ)に対する通信者のアクセスと、そのアクセスの範囲と、そのアクセスの後続の結果(例えば、そのアクセスに関する監査記録が記録される必要があるという要件)とを制御する。
仮想エリア内の「位置(ポジション)」は、該仮想エリア内におけるあるポイントか又はあるエリアか又はあるボリュームの位置(ポジション)のことを指す。ポイントは、典型的には、仮想エリア内のスポットを画定する1次元か、2次元か、又は3次元の座標(例えば、x、y、z)の単一セットによって表される。エリアは、典型的には、仮想エリア内における閉じた2次元形状の境界を画定する、3つか又は4つ以上の同一平面上にある頂点の3次元座標によって表される。ボリュームは、典型的には、仮想エリア内における3次元形状の閉じた境界を画定する、4つか又は5つ以上の同一平面上にはない頂点の3次元座標によって表される。
仮想エリアのコンテキスト内において、「オブジェクト」は、仮想エリア内の任意のタイプのディスクリートな要素であり、仮想エリアのジオメトリからは切り離して有益に取り扱われ得る。例示的なオブジェクトは、ドア、入口(ポータル)、窓、ビュースクリーン、及びスピーカーフォンを含む。オブジェクトは、典型的には、仮想エリアの属性及び特性とはかけ離れた及び異なる属性か又は特性を有する。「アバター」は、仮想エリア内の通信者を表すオブジェクトである。
「通信者(又は伝達者)」は、ネットワーク接続上において他の人々と通信する(又は伝達し合う)か又は別様には相互作用する人物であり、ここで、該通信(又は伝達)か又は相互作用は、仮想エリアのコンテキスト内において生じる可能性があるか又は生じない可能性がある。「ユーザ」は、説明する目的のために、ある特定の眺め(又は景色)を画定する特定ネットワークノードを操作する(又は動作させている)通信者である。
「エリアサーバ」は、エリアネットワークインフラサービスを含むネットワークノードであり、仮想エリアアプリケーションをホストする仮想エリアを、(該仮想エリア内のオブジェクトに関連付けられたクライアントノードのセッションを管理することによって)管理(又は運営)する。
本明細書内において用いられる時には、用語「含む(include)」は、〜を含む(但し、それ(又はそれら)に限定されない)ことを意味し、用語「含んでいる(including)」は、〜を含んでいる(但し、それ(又はそれら)に限定されない)ことを意味する。
II. イントロダクション
本明細書内において記載されている実施形態は、各ネットワークノード上において操作する(又は動作させる)通信者間におけるリアルタイム通信をサポートするリアルタイムカーネルを提供する。該リアルタイムカーネルは、通信者、仮想エリア、及び他のネットワークリソースに接続し、ユーザ入力に応答してこれらの接続をスイッチングし、及び、リアルタイムデータストリームをミキシングする、という複雑なタスクを処理(ハンドル)する。リアルタイムカーネルによって、開発者は、低レベルな、コードを配管すること(plumbing code)の代りに、高レベルの通信機能性を開発することに集中することが可能になる。広範囲の現在利用可能なコンピューティングデバイス及びネットワーク接続を用いて、リアルタイム通信性能が達成され得ることとなるように、リアルタイムカーネルは、比較的低い計算リソース要件を課す。
幾つかの実施形態において、リアルタイムカーネルは、リモートコンフィギュレーションと、オーディオ及びグラフィックレンダリングエンジンの実行とをサポートし、並びに、リモートにホストされる仮想エリアアプリケーションから受け取った(定義としても呼ばれる)命令に応答してリアルタイムデータストリームのスイッチングをサポートする。このようにして、リアルタイムカーネルによって、仮想エリア設計者が、リモートクライアントネットワークノード上の没入型(又は没頭型、又は集中型、又は熱中型;immersive)仮想通信環境のプレゼンテーションにわたる制御を維持することが可能になり、それにより、広い様々な異なるタイプの仮想エリアの発展(又は展開)を促すことが可能になり、通信システムを採用することを望んでいるであろうユーザの人数を増やすことが可能になる。
幾つかの実施形態において、リアルタイムカーネルは、リアルタイムデータストリームの処理を監視して、性能目標からの処理の逸れ(逸脱、又は偏差)に基づいて該処理を適合させる。このようにして、リアルタイムカーネルは、リアルタイムデータストリーム処理が実施されているコンピューティング環境とは無関係に、リアルタイム性能が達成され得る見込み(又は尤度、公算)を増加させる。
幾つかの実施形態では、リアルタイムカーネルは、接続及び切断において効率的な、並びに、伝送(トランスポート)において効率的な、ストリームトランスポートプロトコルを実現する。これらの実施形態のうちの幾つかにおいて、該ストリームトランスポートプロトコルが、接続配向された暗号化された接続を、コネクションレス・トランスポート・プロトコル(例えば、UDP)において提供する。リアルタイムカーネルは、クライアントアプリケーションと、トランスポート層との間に、再接続メカニズムを追加的に提供する。該再接続メカニズムは、失敗した接続を、クライアントアプリケーションによる介入無しに再確立させることを自動的に試み、それにより、本質的には信頼性の無い通信プロトコルの頂上の上に、信頼性を追加する。
幾つかの実施形態において、プラグインアーキテクチャを、リアルタイムカーネルが有する。該プラグインアーキテクチャにより、カーネル構成要素の機能が(クライアントネットワークノード上において動的にロードされ得る1つか又は複数のプラグインによって)提供されることが可能になる。このようにして、カーネル構成要素は、独立に発展され得り、及び、リモートに管理及び更新(アップデート)され得る。該プラグインアーキテクチャによって、リアルタイムカーネルのインストール領域(フットプリント)が、実質的に低減されることが追加的に可能になり、それにより、該カーネルが、著しいコンピューティング及びメモリリソース制約を有するクライアントデバイスを含む広範囲のクライアントデバイス上にインストールされることが可能になる。
III.概説
A.イントロダクション
図1は、ネットワーク18によって相互接続されている第1のクライアントネットワークノード12と第2のクライアントネットワークノード14とエリアサーバネットワークノード16とを含む例示的な仮想エリア通信環境10の一実施形態を示す。第1のクライアントネットワークノード12は、1つか又は複数の構成(又は設定)可能なストリームハンドラ22を含むリアルタイムカーネル20の一実施形態と、入力/出力(I/O)ハードウェア24とを含む。第2のクライアントネットワークノード14は、第1のクライアントネットワーク12とほぼ同じやり方で典型的には構成される。エリアサーバネットワークノード16は、エリアネットワークインフラサービス26(単に「エリアサービス」としても呼ばれる)を含む。該エリアネットワークインフラサービス26は、仮想エリア28内の第1及び第2のクライアントノード12、14のセッションを管理することによって仮想エリア28を管理(又は運営)する。仮想エリア28は、仮想エリアアプリケーション30をホストする。該仮想エリアアプリケーション30は、仮想エリア通信環境を作成することに使用される仮想エリアの表現(又は記述、又は記載)を含む。該エリアサービス26は、仮想エリアアプリケーション30に従って仮想エリア28を管理(又は運営)する。
共有仮想エリア通信環境を作成するプロセス内において、エリアサービス26は、第1及び第2のクライアントネットワークノード12、14内のリアルタイムカーネルを、仮想エリアアプリケーション30に関する制約32のセットの影響下のリモート仮想エリアアプリケーション30に従って、リモートに構成(又は設定)する。制約32は、典型的には、仮想エリアに対するアクセスに関するコントロールを含む。該アクセスコントロールは、典型的には、(適切な機能及び許可(承諾)を有する通信者か又はクライアントノードに対するアクセスが許可される)1つか又は複数の機能と、(リスト上にあるアイデンティティを有した通信者か又はクライアントノードに対するアクセスが許可される)アクセスコントロールリストとに基づく。幾つかの実施形態において、制約32は、セキュリティネットワークインフラサービス(後述)によって管理(又は運用)される。第1及び第2のクライアントネットワークノード12、14上において動作しているクライアントソフトウェアアプリケーションにより、通信者が、共有仮想エリア通信環境にアクセスすることが(リアルタイムカーネル20を介してエリアサービス26から受け取ったデータに従って仮想エリアのそれぞれのビュー(又は景色、又は眺め)を提示することによって、及び、通信者からの受信コマンドにインターフェースを提供することによって)可能になる。通信者は、典型的には、それぞれのアバターによって仮想エリア内において表される。該アバターは、通信者のそれぞれのネットワークノードにおいて該通信者によって入力されるコマンドに応答して仮想エリアを動きまわる。仮想エリアの各通信者のビュー(又は景色、又は眺め)は、典型的には、通信者のアバターの眺め(perspective)から提示され、通信者によって経験される没入型のレベル(又は、該通信者があたかもその環境の中にいるように感じることができるレベル)を増加させる。各通信者は、典型的には、その通信者のアバターの周囲の仮想エリアの任意の部分を眺めることが可能である。第1及び第2のクライアントネットワークノード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から受け取られる命令と位置データとに従って、少なくとも1つのストリームハンドラ22を動的に構成(又は設定)することを含む。例えば、仮想エリアアプリケーション30は、現在仮想エリア内にあるオブジェクトに関連付けられているオーディオストリームに適用されるべき1つか又は複数のオーディオエフェクトを指定することが可能であり、このケースでは、エリアサービス26が、第1及び第2のクライアントネットワークノード12,14上において実行しているリアルタイムカーネルに対して命令を送り、該命令によって、それらのそれぞれのオーディオストリームハンドラが、仮想エリア内のそれぞれのオブジェクトの位置に従って指定されたエフェクトを実施するよう構成(又は設定)される。
それぞれの出力33を生成するために、各々の構成(又は設定)されたストリームハンドラ22を通じて、リアルタイムカーネル20は、通信者オブジェクトに関連付けられているリアルタイムデータストリームを処理する。そのコンテンツに依存して、出力33は、コンピュータ可読媒体上に格納され得るか、或いは、第1及び第2のネットワークノード12、14上において動作するI/Oハードウェアにより、人間にとって知覚可能な出力へと変換され得る。例えば、オーディオ出力信号が、オーディオハードウェア(例えば、サウンドカード及びスピーカ)によって可聴音に変換され、及び、グラフィック出力信号が、グラフィックハードウェア(例えば、ビデオカード及びディスプレイ)によって可視画像に変換される。幾つかの実施形態において、少なくとも1つのストリームハンドラ22によって生成された出力33は、1つか又は複数の下流のソフトウェア構成要素によって処理され、該下流のソフトウェア構成要素は、コンピュータ可読媒体上に格納され得るか或いは人間にとって知覚可能な出力へと変換され得るかのいずれかの出力を、同様に生成する。
B.例示的な動作環境
リアルタイムカーネル20は、仮想エリア通信環境10のコンテキスト内において動作し、該仮想エリア通信環境10は、ネットワーク18と、ネットワークインフラサービス環境とを含み、該ネットワークインフラサービス環境は、エリアサービス26を含む多くのネットワークインフラサービスを含む。リアルタイムカーネル20及びネットワークインフラサービス環境は、通信者に対する仮想エリア通信環境を構築するためのプラットフォームを構成する。
1.ネットワーク環境
ネットワーク18には、任意のローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、及びワイドエリアネットワーク(WAN)(例えばインターネット)を含めることができる。ネットワーク18は、典型的には、多くの異なるコンピューティングプラットフォームと、ネットワークノード間において広範囲の様々な異なる媒体タイプ(例えば、テキスト、音声、オーディオ、及びビデオ)の伝送をサポートするトランスポート設備とを含む。
管理上のポリシー、(ユーザの存在の移出、及び、エリア及び接続目標に対するユーザの接続に関する選択を含む)ユーザ選択、及び(他のネットワークノードとのリアルタイム接続の管理に影響を及ぼすローカルコンフィギュレーションを画定する)他の設定と共に、リアルタイムカーネル20は、ハードウェアリソース及びソフトウェアリソースを含むネットワークノード上において典型的には動作する。ネットワークノード間のネットワーク接続は、ピア・ツー・ピア・アーキテクチャと、サーバが仲介するアーキテクチャと、(ピア・ツー・ピア・アーキテクチャの態様と、サーバが仲介するアーキテクチャの態様とを組み合わせた)ハイブリッドアーキテクチャとを含む、様々な異なるストリームハンドリングトポロジにおいて構成され得る。
図3Aは、仮想エリア通信環境10の一実施形態42を示す。該一実施形態42において、第1及び第2のネットワークノード12、14、及びリモートネットワークノード16が、ピア・ツー・ピア・アーキテクチャにおいて通信ネットワーク18によって相互接続されている。このアーキテクチャでは、ネットワークノード12〜16の各々が、状態変化を(例えば、仮想エリア28内のアバターの動きを)、他のネットワークノードの各々へと伝達する。ネットワークノードのうちの1つ(典型的には、通信セッションを開始するネットワークノード)は、「エリアサーバ」として動作する。この例示的な実施形態では、ネットワークノード16が、エリアサーバの役割として仮定されている。エリアサーバネットワークノード16は、グローバル状態情報を保持し、及び、他のネットワークノード12、14に対するデータサーバとして機能する。該グローバル状態情報は、仮想エリア内に存在する全オブジェクトのリストと、仮想エリア内におけるそれらのそれぞれの位置とを含む。エリアサーバネットワークノード16は、他のネットワークノード12、14を設定(又は構成)する命令を送る。エリアサーバネットワークノード16はまた、初期化情報を記録して、通信セッションに参加することをリクエストする他のネットワークノードに対して該初期化情報を伝達する。このプロセス内において、エリアサーバネットワークノード16は、仮想エリアアプリケーション30に従ってクライアントネットワークノード上において仮想エリア28をレンダリングするために必要とされる構成要素(例えばプラグイン)のリストを、各参加クライアントネットワークノードに対して伝達する。クライアントネットワークノード12、14上のリアルタイムカーネルは、典型的には、リスト上における任意の欠けている構成要素を、リモートサーバ(例えばプラグインサーバ)から回復させる(又は回収する)。通信エラー(又は通信故障;communication fault)が発生した場合には、他のネットワークノード12、14が、グローバル状態に同期することが可能であるということを、エリアサーバネットワークノード16がまた保証する。
図3Bは、仮想エリア通信環境10の一実施形態44を示す。該一実施形態44において、ネットワークノード12〜16(このアーキテクチャでは、「エリアクライアント」ネットワークノードとも呼ばれる)は、エリアサーバ46によって仲介されるアーキテクチャにおいて通信(伝達)を行う。この実施形態では、エリアサーバ46が、そのエリアサーバ機能を、図3A内において示されたピア・ツー・ピア・アーキテクチャ実施形態においてネットワークノード16によって該エリアサーバ機能があたかも実施されているかのように、仮定する。これに関して、エリアサーバ46が、グローバル状態情報を保持し、及び、エリアクライアントネットワークノード12〜16に対するデータサーバとして機能する。このアーキテクチャによって、エリアクライアントノード12〜16間においてスイッチングされるリアルタイムデータストリームが、様々なトポロジにおいて処理されることが可能になる。該様々なトポロジは、ピア・ツー・ピア・トポロジと、完全にサーバによって仲介されたトポロジ(このトポロジでは、エリアサーバ46がネットワークノード12〜16間の通信ブローカーとして動作する)と、(ピア・ツー・ピア・トポロジの態様と、完全にサーバによって仲介されたトポロジの態様とを組み合わせた)ハイブリッドトポロジとを含む。これらのタイプの例示的なトポロジは、米国特許出願番号第11/923,629号及び第11/923、634号内において記載されている(これらの米国特許出願は両方とも、2007年10月24日にファイリングされたものである)。
2.ネットワークインフラサービス
1つか又は複数のネットワークインフラサービスは、典型的には、他のネットワークノードとのネットワーク接続を確立する及び管理(又は運用)するプロセスにおいて、リアルタイムカーネル20と連携する。ネットワークインフラサービスは、単一ネットワークノード上において実行することができるか、或いは、複数のネットワークノードにわたって分散(又は分配)され得る。ネットワークインフラサービスは、典型的には、1つか又は複数の専用ネットワークノード(例えば、サーバコンピュータか、或いは、ルーティング及びスイッチングなどのエッジサービスを実施するネットワーク装置)上において実行される。しかしながら、幾つかの実施形態では、1つか又は複数のネットワークインフラサービスは、通信者のネットワークノードのうちの少なくとも1つのネットワークノード上において実行される。ネットワークインフラサービスの中で、仮想エリア通信環境10の例示的な実施形態内に含まれるものは、アカウントサービス、セキュリティサービス、エリアサービス26、ランデブーサービス、及び相互作用サービスである。
アカウントサービスは、ネットワークインフラサービス環境内の通信者アカウントを管理する。アカウントサービスはまた、任意のネットワークインフラサービスに対するクライアントネットワークノード自体の認証を行うために該クライアントネットワークノードによって使用され得る認証トークンの生成及び発行を管理する。
セキュリティサービスは、仮想エリア通信環境10の資産(資源)及び他のリソースに対する通信者のアクセスを制御する。セキュリティサービスによって実現されるこのアクセス制御方法は、典型的には、(適切な機能か又は許可(承諾)を有したエンティティに対してアクセスが許可される)1つか又は複数の機能と、(リスト上に存在するアイデンティティを有したエンティティに対してアクセスが許可される)アクセスコントロールリストとに基づく。ある特定の通信者が、あるリソースに対するアクセスを許可された後に、その通信者は、典型的には、仮想エリア通信環境10内において相互作用するために、他のネットワークインフラサービスによって提供される機能を利用する。
エリアサービス26は、仮想エリアを管理(運用)する。このプロセスにおいて、エリアサービス26は、エンティティをリクエストする機能の影響を受ける仮想エリアに関連付けられている接続を管理し、仮想エリアについてのグローバル状態情報を維持し、及び仮想エリアにより画定されたコンテキスト内において共有通信セッション内に参加しているクライアントネットワークノードに対するデータサーバとして機能する。該グローバル状態情報は、仮想エリア内に存在する全オブジェクトのリストと、仮想エリア内におけるそれらのそれぞれ位置とを含む。エリアサービス26は、クライアントネットワークノードを設定(又は構成)する命令を送る。エリアサービス26はまた、初期化情報を記録して、通信セッションに参加することをリクエストする他のクライアントネットワークノードに対して該初期化情報を伝達する。この処理において、エリアサービス26は、仮想エリアアプリケーション30に従ってクライアントネットワークノード上において仮想エリア28をレンダリングするために必要とされる構成要素(例えばプラグイン)のリストを、各参加クライアントネットワークノードに伝達する。通信エラー(又は通信故障)が発生した場合には、クライアントネットワークノードが、グローバル状態に同期することが可能であるということを、エリアサービス26はまた保証する。
ランデブーサービスは、プレゼンス情報の収集(コレクション)、格納、及び分散(又は分配、又は分布)を管理して、エンティティをリクエストする機能の影響下において、(例えば、処理する接続の分布を管理することによって)互いに伝達し合うための機構をネットワークノードに提供する。ランデブーサービスは、典型的には、プレゼンス情報を、プレゼンスデータベース内に格納する。
相互作用サービスは、通信者間の相互作用(又は交流)を記録する相互作用データベースを維持し、及び、エンティティをリクエストする機能の影響を受ける相互作用データベースに関するクエリーをサポートする。通信者間の相互作用(交流)ごとに、仮想エリア通信環境10内の1つか又は複数のサービス(例えば、エリアサービス26)が、相互作用データを、相互作用サービスに伝達する。それに応答して、該相互作用サービスは、1つか又は複数のそれぞれの相互作用(交流)記録を、関連データベース内に生成する。それぞれの相互作用記録は、相互作用のコンテキストを記載する。例えば、幾つかの実施形態において、ある相互作用記録は、各通信者ごとの識別子と、相互作用の場所についての識別子(例えば、仮想エリアインスタンス)と、相互作用場所の階層(ヒエラルキ)の記載(例えば、あるより広いエリアに対して、相互作用部屋が如何に関係するかの記載)と、相互作用の開始及び終了時間と、全ファイルと相互作用中に共有される他のストリームとのリストとを含む。従って、各リアルタイム相互作用ごとに、相互作用サービスは、それが発生した時と、それが発生した場所と、及び、含まれる通信者に関して相互作用中に起こった出来事(例えば、進入及び退出)と、アクティブにされる/非アクティブにされるオブジェクトと、共有化されたファイルとを追跡する。
相互作用サービスは、場所に基づいて(例えば、最も頻度が高いか、又は最も最新の)ソートされた順序で、相互作用データベース記録に関するクエリーの結果を提示することができる。仮想エリア内で通信者が会合した者とのコンタクトの頻度ソートと、並びに、仮想エリアとは無関係に該通信者が会合した者のソートと、該通信者がほとんどの場合に頻繁に訪れる仮想エリアのソートと、を駆動(ドライブ)するために、そのクエリー結果が使用され得る。クエリー結果はまた、関係に基づいてあるタスクを自動化するヒューリスティック(発見的問題解決法)システムの一部として、アプリケーション開発者によって使用され得る。このタイプのヒューリスティック(発見的問題解決法)の一例は、6回以上ある特定の仮想エリアを訪れた通信者が、デフォルトで、ノックすること無く進入することが可能になるようなヒューリスティックであるか、或いは、ある特定の時間にあるエリア内に存在した通信者が、その同じ時間に同じエリア内に存在した別の通信者によって作成されたファイルを変更するか又は削除することが可能になるようなヒューリスティックである。相互作用データベースに関するクエリーは、他の検索と組み合わされ得る。例えば、相互作用データベースに関するクエリーは、ネットワークインフラサービス環境のドメインの外側の通信システム(例えば、Skype、Facebook、及びFlickr)を用いて、コンタクトによる相互作用について生成されたコンタクト履歴データに関するクエリーと組み合わされ得る。
3.仮想エリア
リアルタイムカーネル20は、仮想エリアのインスタンスによって画定される通信コンテキスト内のネットワークノードとのリアルタイム接続を管理(運用)する。仮想エリアインスタンスは、抽象的な(又は概念上の、又は難解な)座標に関して画定される抽象的な(ジオメトリックでない)仮想空間に対応することができる。代替的には、仮想エリアインスタンスは、ある特定の視覚化(又は映像化;ビジュアライゼーション)に関連付けられている1次元か、2次元か、又は3次元のジオメトリック座標に関して画定されるビジュアル仮想空間に対応することができる。抽象的な仮想エリアは、それぞれの視覚化に関連付けられることが可能であるか又は不可能である一方で、ビジュアル仮想エリアは、それぞれの視覚化に関連付けられる。
上記に説明したように、通信者は、典型的には、ある関連付けられた視覚化(映像化)を有した仮想エリア内のそれぞれのアバターによって表現される。該アバターは、通信者によって該通信者のそれぞれのネットワークノードにおいて入力される入力コマンドに応答して仮想エリアを動きまわる。ある関連付けられた視覚化を有した仮想エリアインスタンスの通信者の景色(ビュー)は、典型的には、その通信者のアバターの眺めから提示(表現)され、各通信者は、典型的には、該通信者のアバターの周囲のビジュアル仮想エリアの任意の部分を眺めることができ、その通信者によって経験される没入レベル(又は、該通信者があたかもその環境の中にいるように感じることができるレベル)が増加する。
図4は、コンピュータシステム48によって実現される例示的なネットワークノードの一実施形態を示す。コンピュータシステム48は、ディスプレイモニタ50、コンピュータマウス52、キーボード554、スピーカ56、58、及びマイクロホン60を含む。ディスプレイモニタ50は、グラフィカルユーザインターフェース62を表示する。グラフィカルユーザインターフェース62は、windowsベースのグラフィカルユーザインターフェースであり、該グラフィカルユーザインターフェースには、複数のウィンドウ(窓)、アイコン、及びポインタ64を含めることができる。この例示的な実施形態において、グラフィカルユーザインターフェース62は、画廊(アートギャラリー)を表す3次元視覚化に関連付けられている共有仮想エリア66の2次元の描写を提示(表現)する。通信者は、それぞれのアバター68、70、72によって仮想エリア66内に表現されており、該アバター68、70、72の各々は、仮想エリア66のコンテキスト内において、それぞれ役割(例えば、館長、画家、及び訪問者)を有することができる。
下記において詳細に説明されるように、仮想エリア66は、ゾーン74、76、78、80、82を含み、それらゾーンは、それぞれの規則に関連付けられており、該規則は、仮想エリア66内のアバター68〜72によって表されるネットワークノード間のリアルタイムデータストリームのスイッチングに影響を与える(典型的な通信セッション中には、そのようなゾーン境界に関連付けられたビジュアルキューがあっても、図4内のゾーン74〜82の境界を定める点線(ダッシュ線)が、通信者にとっては見ることができない)。スイッチング規則は、各ネットワークノード上において実行しているローカル接続プロセスが、仮想エリア66のゾーン74〜82内の通信者のアバター68〜72の位置に基づいて、他のネットワークノードとの通信を、如何にして確立するかを命令する。
仮想エリアは、仮想エリアのジオメトリック要素の記載(又は表現)と、(スイッチング規則及びガバナンス規則を含む)1つか又は複数の規則とを含む仕様(スペック)によって画定される。スイッチング規則は、ネットワークノード間のリアルタイムストリーム接続に影響を与える。ガバナンス規則は、仮想エリア自体、仮想エリアによる領域、及び仮想エリア内におけるオブジェクトなどのリソースに対する通信者のアクセスを制御する。幾つかの実施形態において、仮想エリアのジオメトリック要素は、(http://www.khronos.org/collada/から利用可能な)2006年4月の仕様のDigital Asset Schema Release 1.4.1のCOLLADAに従って表され(又は記載され)、及び、スイッチング規則は、米国特許出願番号第11/923,629号及び第11/923、634号内に記載されたCOLLADAストリームリファレンス仕様に従って、拡張マークアップ言語(XML)テキストフォーマット(本明細書内においては仮想空間記述フォーマット(VSDL)と呼ばれる)を用いて記載される。
仮想エリアのジオメトリック要素は、典型的には、仮想エリアの物理ジオメトリとコリジョンジオメトリとを含む。物理ジオメトリは、仮想エリアの形状を表す(又は記載する)。物理ジオメトリは、典型的には、三角形か、四角形か、又はポリゴンの表面から形成される。色及びテクスチャが、物理ジオメトリ上へとマッピングされて、仮想エリアについてのより現実的な外観が形成される。例えば、ビジュアルジオメトリ上に光をペイントして、そのテクスチャか、色か、又は強度を、光に近く修正することによって、照明効果が提供され得る。コリジョンジオメトリは、仮想エリア内においてオブジェクトが移動できる方向を決定する不可視表面を表す(又は記載する)。コリジョンジオメトリは、ビジュアルジオメトリと同時に発生する可能性があり、ビジュアルジオメトリのより簡単な近似値に対応する可能性があるか、又は仮想エリア設計者のアプリケーション仕様要件に関連する可能性がある。
スイッチング規則は、典型的には、仮想エリア内の位置に関してリアルタイムデータストリームのソース及びシンクを接続するための条件の記載を含む。各規則は、典型的には、規則が適用されるリアルタイムデータストリームタイプと、規則を適用する仮想エリア内の位置(複数可)とを画定する属性を含む。幾つかの実施形態において、規則の各々には、オプションで、ソースにおける要求される役割と、シンクにおける要求される役割と、ストリームの優先レベルと、リクエストされたストリームハンドリングトポロジとを指定する1つか又は複数の属性を含めることができる。幾つかの実施形態において、仮想エリアのある特定の部分について定義された明確なスイッチング規則が存在しない場合には、1つか又は複数の暗黙のか又はデフォルトのスイッチング規則を、該仮想エリアのその部分に適用することができる。1つの例示的なデフォルトのスイッチング規則は、ポリシー規則の影響下で、全てのソースを、エリア内における互換性のある全てのシンクに接続するという規則である。ポリシー規則は、エリアクライアント間の全ての接続に対してグローバルに適用することができるか、或いは、個々のエリアクライアントとのそれぞれの接続のみ対して適用することができる。ポリシー規則の一例は、仮想エリア内における互いのある規定された距離(又は半径)内において存在する各オブジェクトに関連付けられている互換性のあるシンクとのソースの接続のみを可能にするという近接ポリシー規則である。
幾つかの実施形態において、仮想エリアに対するアクセスを有する者と、そのコンテンツに対するアクセスを有する者と、仮想エリアのコンテンツに対するそのアクセスの範囲が何か(例えば、そのコンテンツでユーザが何をすることができるか)と、これらのコンテンツをアクセスすることの後続の結果が何か(例えば、監査ログなどの記録を取ること、及び支払い要求)とを制御するために、ガバナンス規則が仮想エリアに関連付けられる。幾つかの実施形態において、仮想エリア全体か又は仮想エリアにおけるあるゾーンが、「ガバナンスメッシュ」に関連付けられる。幾つかの実施形態において、ガバナンスメッシュは、米国特許出願番号第11/923,629号及び第11/923、634号内に記載されたゾーンメッシュの実現形態に類似したやり方で実現される。ガバナンスメッシュによって、ソフトウェアアプリケーション開発者が、ガバナンス規則を、仮想エリアにか又は仮想エリアのゾーンに関連付けることが可能になる。このことによって、仮想エリア内の各ファイルごとに個別の許可を作成する必要性が回避され、及び、コンテキストに依存して同じ文書を異なって取り扱う必要性がある時に潜在的に生じる可能性がある複雑性に対処する必要性が回避される。
幾つかの実施形態において、仮想エリアにおける1つか又は複数のゾーンを、ディジタルライト管理(DRM:digital rights management)機能に関連付けるガバナンスメッシュに仮想エリアが関連付けられる。DRM機能は、1つか又は複数の仮想エリアか、或いは仮想エリア内における1つか又は複数のゾーンか、或いは仮想エリア内におけるオブジェクト、に対するアクセスを制御する。仮想エリア内におけるガバナンスメッシュ境界線を通信者が横断するたびごとにDRM機能がトリガされる。トリガするアクションが許可されるのかどうかと、もしも許可されるのであれば、許可されるアクションの範囲は何かと、支払いが必要とされるのかどうかと、監査記録が生成される必要性があるのかどうかと、をDRM機能が決定する。仮想エリアの例示的な一実現形態において、もしも通信者が仮想エリアに進入することが可能であるならば、該通信者が、該仮想エリアに関連付けられている全ての文書に関するアクション(該文書を操作すること、該文書を眺めること、該文書をダウンロードすること、該文書を削除すること、該文書を変更すること、及び、該文書を再アップロードすることを含む)を実施することができることとなるように、関連付けられたガバナンスメッシュが設定(又は構成)される。このようにして、仮想エリアは、仮想エリアによって画定されたコンテキスト内において共有された及び検討された情報のための保存場所となることができる。
仮想エリアの仕様に関する追加的な詳細事項は、米国特許出願番号(2008年4月4日にファイリングされた)第61/042714号、(2007年10月24日にファイリングされた)第11/923,629号、及び(2007年10月24日にファイリングされた)第11/923、634号内に記載されている。
4.他のプラットフォーム構成要素
リアルタイムカーネル20は、
a.ヘッドアップディスプレイ(HUD)ソフトウェアアプリケーションと、
b.ローカルヒューマンインターフェースデバイス(HID)及びオーディオ再生装置と、
c.So3Dグラフィックディスプレイ、アバター、及び物理エンジンと、
d.システムデータベース及び記憶設備
とを追加的に含む、クライアントソフトウェアパッケージの一部としての、ローカルネットワークノードの構成要素として、働くよう設計される。
a.ヘッドアップディスプレイ(HUD)
ヘッドアップディスプレイ(HUD)は、各クライアントネットワークノード上で動作するリアルタイムカーネル20に対するアプリケーションインターフェースである。HUDは、ユーザが該ユーザのデスクトップ上において常に維持し及び実行したままにすることが可能な小型で軽量なインターフェースである。ヘッドアップディスプレイ(HUD)は、仮想エリアアプリケーションを起動するためのユーザのインターフェースであり、該ユーザに、リアルタイムコンタクト及びリアルタイム共同場所(又はエリア)に対する即座のアクセスを提供する。仮想エリアは、HUD及びリアルタイムカーネル20を通じて、ユーザのデスクトップと統合され、これにより、ユーザは、仮想エリア通信環境内へとファイルをドラッグ&ドロップすることが可能になることとなり、仮想エリア通信環境とは独立に、ネイティブなクライアントソフトウェアアプリケーションを用いて、仮想エリアに関連付けられた格納されたファイルを使用することが可能になることとなる一方で、仮想エリア内に依然として存在したままであることが可能になることとなり、及びより一般的には、幾つかのアプリケーションのうちの単なる1つというよりもむしろ、他のオペレーティングシステム機能に類似した該ユーザのオペレーティング環境の一態様として、仮想エリア内におけるプレゼンス及び位置を扱うことが可能になることとなる。
図5A及び図5Bは、通信者のデスクトップの右下側の隅にドッキングされた半透明なユーザインターフェースによって実現されるHUDの一実施形態84を示す。HUD84は、プラットフォームに対するアプリケーションインターフェースである。HUD84の特徴は、
●ユーザのデスクトップ上において常時実行されていることが意図される小型で軽量なアプリケーションであることと、
●コンタクトを見るための及びコンタクトと相互作用するための簡易なインターフェースを、並びに、相互作用(交流)が生じる仮想エリアを、ユーザに提供すること
とを含む。
この実施形態において、HUD84は、持続性インターフェースとコントロールに対するアクセスとを提供するほぼ透明な(半透明の)ユーザインターフェースオーバーレイによって実現される。図5A内に示された実施形態において、HUD84は、インターフェースの下記半透明要素のうちの、すなわち、
●プログレッシブ没入型コントロールの輪郭(アウトライン)と、
●ユーザの現在の位置の概要(アウトライン)と、
●仮想エリア86内のリアルタイムコンタクトを表すスプライトと、
●HUDエリアの境界線を定めるライン
とのうちの1つか又は複数の限定セットを除いて透明である。
通信者は、通常のデスクトップコンピューティング環境内で仕事をすることが可能であると同時に、リアルタイムカーネル260及びHUD84が実行されており及びリアルタイム通信セッションを開始する準備ができている。例えば、通信者は、Microsoft(登録商標)のExcel(登録商標)などの他のアプリケーションと共に仕事をすることができ、リアルタイム通信セッション内において後に共有化されることが可能な文書を作成することができる。仮想エリア86は、通信者のデスクトップに統合化されて、これにより、通信者がファイルを仮想エリア内へとドラッグ&ドロップすることが可能になることとなり、仮想エリア通信環境とは独立に、ネイティブなクライアントソフトウェアアプリケーションを用いて、仮想エリアに関連して格納されたファイルを使用することが可能になることとなる一方で、仮想エリア内に依然として存在したままであることが可能になり、及びより一般的には、幾つかのアプリケーションのうちの1つというよりもむしろ、他のオペレーティングシステム機能に類似したオペレーティング環境の一態様として、仮想エリア内におけるプレゼンス及び位置を取り扱うことが可能になることとなる。
仮想エリア86内において通信者が相互作用する(交流し合う)一方で、HUD84は、該通信者に、該通信者の所望の視覚化にわたって独立コントロールを提供する。例えば、通信者は、仮想エリアの最小化された(デスクトップの右下側の隅に最小化された)ビュー(又は景色、又は眺め)を表示することができ、及び、仮想エリア内の別の通信者との音声会話に参加することができる一方で、Microsoft(登録商標)のExcel(登録商標)などの異なるアプリケーションにおいて仕事をすることができる。通信者は、従って、該通信者の視覚化スキーマを変更することができ、仮想エリア86の、より没入型の(又は、該通信者があたかもその環境の中にいるようにより感じることができる)3次元レンダリング内へと進入することができる。このことは、HUD84内のプログレッシブ没入スライダー88の設定を、「デスクトップ」から「3D」に変更することによって成し遂げられる。3D視覚化モードに入ると、通信者のデスクトップは、(図5A内に示されているように)仮想エリア86の3D演出を表示する。(デスクトップモードにおいてスプライト90、92、94によって表されている)通信者は、図5A内に示されているように、3次元アバター96、98、100の形態となって現われる。
仮想エリア86に関連付けられている任意のデータが、ビュースクリーン102、104、106上に表示され得る。ビュースクリーンは、任意の好みのデータをレンダリングするために使用され得る構成要素をレンダリングする包括的な(ジェネリック)データである。ビュースクリーン上にレンダリングされ得るデータのタイプの例は、
●マイクロソフトのパワーポイントのプレゼンテーションと、
●映像(ビデオ)と、
●ウェブカメラ(Webcam)の出力と、
●組織のERPシステムから直接到来するリアルタイムデータ
とを含む。
図5C内に示されているように、HUD84は、通信者のディスプレイモニタ上に提示されているグラフィカルユーザインターフェース62の基本的なパーツにおける最小の曖昧さだけで、情報を表示し、且つ、コントロールに対するアクセスを提供する、真のインターフェースとして機能するよう設計される。HUD84は、
●通信者のリアルタイムコンタクトのうちの幾つかのリアルタイムコンタクトであって、現在オンラインであるリアルタイムコンタクトと、
●通信者と通信者のリアルタイムコンタクトの場所であって、仮想エリア86内に現在「位置付けられている」場所と、
●仮想エリア86の視覚化を制御するプログレッシブ没入型コントロールと、
●ユーザに、ある特定の場所に迅速に接続させることを可能にするナビゲーションコントロール
とを効果的に示す。
具体的には、HUD84は、通信者に、彼らのリアルタイムコンタクトに対する迅速なアクセスと、リアルタイムコラボレーションが生じる仮想エリアとを提供する。人々の位置と仮想エリア内への景色(ビュー)とに基づいて、HUD84は、エリアを通じたナビゲーションを可能にする。これらの仮想エリアは、幾つかの手法でアクセスされ得る。すなわち、もっとも頻繁に使用された手法でか、最も最近使用された手法でか、又はアプリケーション指定手法でアクセスされ得る。
HUD84は、場所タイル108、110、112における順番付けられたセットを示す。該場所タイルのうちの1つをクリックすると、ユーザを、その選択された場所タイルによって表された仮想エリアにもっていく。人々に関して、(通信者のエリアに)行って(Go)及び取ってくる(Get)(それらをユーザのエリアにもってくる)という基本的なメタファーを我々が有する。このことは、通信者が、行くか(go)又は取ってくる(get)ためにリクエストをキュー(待ち行列)に入れることを可能にさせることによって、並びに、通信者が、テキストか又は音声を介して「移動する」ことなく人々と通信を行うことを可能にさせることによって、HUD84内において洗練される。HUD84は、各通信リクエストが別の通信者から受け取られる時に、通信者に通知する。通信者は、そのリクエストを受け取ることができるか、それを無視することができるか、或いは、通信キューに対してそれを追加することができる。このようにして、通信者は、優先度が高くない通信に後になって応答することができる。例えば、通信者は、通信者が忙しい時(例えば、現在の通信セッション内に没頭している時)の時間中に受け取った通信をキューに入れることができ、そして、該通信者がフリーになった後に、該通信者は、その通信キュー内の通信リクエストに応答することができる。
上述のように、相互作用ネットワークインフラサービスは、通信者と会合する者と場所とを記録する相互作用データベースを保持する。該相互作用サービスは、場所に基づいて(例えば、最も頻度が高い順序か、又は最も最近の順序で)ソートされた順序において提示され得るクエリー結果によって、関連データベースに関するクエリーに応答する。エリア内で通信者が会合した者の頻度ソートと、並びに、エリアとは無関係に通信者が会合した者のソートと、通信者がほとんどの場合に頻繁に訪れるエリアのソートと、を駆動(ドライブ)するために、関連データベース情報が使用され得る。このデータは、HUD84内において使用される。このデータはまた、ヒューリスティック(発見的問題解決法)システムの一部として、仮想エリアアプリケーション開発者によって使用され得る(例えば、ある特定の仮想エリアを6回以上訪れた人々は、デフォルトで、ノックすること無く進入することが可能になるような規則であるか、或いは、ある特定の時間にある仮想エリア内に存在した人々が、その同じ時間にそこの別の通信者によって作成されたファイルを変更する及び削除することが可能になるような規則)。
図5C内において、HUD84は、それぞれの仮想エリアを表す一連の場所タイル108、110、112を提示している。該仮想エリアの各々は、関連データベースに関するクエリーに結びつけられる。各仮想エリアに関して、ランデブーサービスが、該仮想エリア内においてユーザが会合した全コンタクトについての関連データベースに関するクエリーを行う。ランデブーサービスは、典型的には、リスト内において識別したコンタクトを提示する。該リストは、相互作用の頻度によってか又は相互作用の最新さ(例えば、通信者が最後に相互作用(交流)したコンタクト(接触者))によってのいずれかでソートされる。他の実施形態において、コンタクトは、幾つかの他のアプリケーション依存方法においてソートされ得る。
関連データベースに関するクエリーは、他の検索と組み合わされ得る。例えば、関連データベースに関するクエリーは、別の通信システム(例えば、Skype、Facebook、及びFlickr)を用いて、コンタクトとの相互作用について生成されたコンタクト履歴データに関するクエリーと組み合わされ得る。一例において、Skype仮想エリア112は、該Skype仮想エリア112と通信者のSkype履歴データとに関連付けられた通信者の関連データに関するクエリーに関連付けられ得り、該Skype仮想エリア112に関連付けられている、ユーザのリアルタイムコンタクトの、ソートされたリストが生成される。
図5Cは、HUD84内のコンタクト及び仮想エリアの基本ナビゲーションを示す。仮想エリアタイル108〜112の各々に関連付けられた左向矢印をクリックすると、所与の場所における、相互作用の頻度によってソートされたリアルタイムコンタクトのリストを表示する。例えば、(「オフィス」というラベルが貼られた)メインHUDタイル84の左向矢印114をクリックすると、仮想エリア86内において最も頻繁にユーザが通信するリアルタイムコンタクトを表示する。(それぞれのアイコンタイルによって表されている)コンタクトのリストは、頻度によってソートされる。リスト内の第1のコンタクト(この例では、DVW)は、仮想エリア86内においてユーザが最も頻繁にコラボレートするコンタクトを表し、PJB、Tim、などと続く。上向矢印116をクリックすると、通信者が訪れた幾つかのか又は全ての仮想エリアを表す場所タイルのセットを表示する。場所タイルのセットは、典型的には、頻度によってか、最新さによってか、又は他の順序によってソートされる。仮想エリア場所タイルは、対応する仮想エリア内において現在生じているリアルタイム活動を示す。例えば、DVW、Kim、及びJoe(メイン仮想エリアタイル108内にそれぞれのスピリットによって表されている)は、メイン仮想エリア内に全て提示されて、それらがリアルタイム会話を行う一方で、(仮想エリアタイル110内にそれぞれのスピリットによって表されている)Jeff、Ann、及びJaneは、全てFacebook仮想エリア内にある。
任意の通信者が仮想エリアを退出するか又は仮想エリアに進入する場合には、その仮想エリア内のプレゼンスインジケータ(すなわち、円によって示されたスピリットであり、それらは典型的には、名前か又は他の識別子に関連付けられている)が、リアルタイムに自動的に更新されることとなる。この特徴(機能)は、アプリケーション指定リアルタイムデータを場所タイル内に置く仮想エリア設計者の能力を明らかにする。該場所タイルは、通信者か又は通信者の場所のいずれかに関連付けられて表わすことができる。例えば、ゲーム開発者は、通信者が彼等のゲーム環境内にいる場所のマップをエクスポートすることができ、これにより、関連データベースを通じてその通信者に接続された他の人々は、その通信者の現在の活動のリアルタイムフィードを受け取ることとなる。これらの人々は、その通信者に対するナビゲートを行うためにか、彼又は彼女と通信するためにか、又は彼又は彼女とコンタクトするために(例えば、仮想エリアに入るための招待状を送るために)、この仮想エリアタイルを用いることができる。HUD84は、多くの異なる仮想エリアについて同時に、コンタクト及び仮想エリアに対するこのインターフェースを管理する。
HUD仮想エリアタイル84、108、110、112内において使用されるリアルタイムデータは、リアルタイムカーネル20を介して関連エリアをホストするエリアサービスによって管理されるインターフェースによって提供される。ホストされた仮想エリアを見るための(ビューのための)通信者の許可に基づいて、各エリアサービスは、異なるそれぞれのHUD仮想エリアタイルデータフィードを、通信者に提供することができる。例えば、もしも通信者が、見る(ビュー)ための許可をその通信者が有していない仮想エリアに進入する場合には、HUD仮想エリアタイルは、限定された情報か又は詳細でない情報を示すことができる。追加的には、ホストするエリアサービスによって提供されるHUD仮想エリアタイルデータフィードは、契約しているHUDに対して仮想エリアのアプリケーション指定ビューを提示するためにそのエリアサービスを動作させている仮想エリアプロバイダによってカスタマイズされ得る。
b.ローカルヒューマンインターフェースデバイス(HID)及びオーディオ再生装置
ローカルHIDデバイスによって、通信者が、コマンド及び他の信号をクライアントネットワークノード内に入力することが可能になると同時に、仮想エリア通信セッションに参加することが可能になる。例示的なHIDデバイスは、コンピュータキーボード、コンピュータマウス、タッチスクリーンディスプレイ、及びマイクロホンを含む。
オーディオ再生装置によって、仮想エリア通信セッション中に受け取ったオーディオ信号を、通信者が再生することが可能になる。例示的なオーディオ再生装置は、オーディオ信号を操作する(例えば、ミキシングする、及び特別なエフェクトをかける)ためのオーディオプロセッシングハードウェア(例えば、サウンドカード)と、音声を出力するためのスピーカとを含む。
c.So3Dグラフィカルディスプレイ、アバター、及び物理エンジン
So3Dエンジンは、ディスプレイモニタ上の仮想エリア及び仮想エリア内のオブジェクトのそれぞれの景色(ビュー)の表示を制御する3次元視覚化エンジンである。So3Dエンジンは、仮想エリアの景色(ビュー)を提示するために、及び、通信者に、HUDアプリケーションの動作を制御させることを可能にするために、典型的には、グラフィカルユーザインターフェースドライバ及びHIDデバイスとインターフェースする。
So3Dエンジンは、典型的には、グラフィックスレンダリング命令を、エリアサービス26からリアルタイムカーネル20を介して受け取る。幾つかの実施形態において、So3Dエンジンはまた、仮想エリア内において通信者のアバターをレンダリングするために必要な画像を含んだ通信者アバターデータベースを読み出す。この情報に基づいて、So3Dエンジンは、仮想エリア内の通信者のアバターの観点(位置及び配向)から、仮想エリアの及び仮想エリア内のオブジェクトのビジュアル表現(すなわち、画像)を生成する。仮想表現は、典型的には、オペレーティングシステムのグラフィックスレンダリング構成要素に送られて、クライアントネットワークノード上の仮想エリアのビジュアル表現をレンダリングするようにグラフィックスレンダリングハードウェアを駆動する。
通信者は、HIDデバイス(例えば、コンピュータマウス)からリアルタイムカーネル20へとコマンドを伝達することによって、仮想エリアの提示されたビューを制御することができる。該リアルタイムカーネル20は、ビュー制御コマンドをSo3Dエンジンに伝達する。So3Dエンジンは、該ビュー制御コマンドに従って仮想エリアのビューを更新する。So3Dエンジンはまた、エリアサービス26からリアルタイムカーネル20を介して受け取られた更新されたオブジェクト位置情報に従って、ディスプレイモニタ上の仮想エリアのグラフィック表現を更新する。
d.システムデータベース及び記憶設備
システムデータベース及び記憶設備は、プラットフォームによって使用される様々な種類の情報を格納する。記憶設備によって典型的には格納される例示的な情報は、プレゼンスデータベース、相互作用データベース、アバターデータベース、リアルユーザid(RUID)データベース、アート(art)キャッシュデータベース、及び仮想エリア指定データベースを含む。この情報は、単一ネットワークノード上に格納され得るか、或いは、複数ネットワークノードにわたって分配(又は分散、又は分割)され得る。
C.例示的な通信セッション
再び図4を参照すると、通信セッション中に、各々のクライアントネットワークノードは、リアルタイムデータストリーム(例えば、モーションデータストリーム、オーディオデータストリーム、チャットデータストリーム、ファイル転送データストリーム、及びビデオデータストリーム)のそれぞれのセットを生成する。例えば、各通信者は、仮想エリア66内の該通信者のアバターの動きを制御するモーションデータストリームを生成する1つか又は複数の入力デバイス(例えば、コンピュータマウス52及びキーボード54)を操作する。追加的には、通信者の声と、コンピュータシステム48の付近において局所的に生成される他の音声とが、マイクロホン60によって取り込まれる。マイクロホン60は、リアルタイムオーディオストリームへと変換されるオーディオ信号を生成する。オーディオストリームのそれぞれのコピーが、仮想エリア66内のアバターによって表される他のネットワークノードに伝達される。これらの他のネットワークノードにおいて局所的に生成される音声は、リアルタイムオーディオ信号へと変換されて、コンピュータシステム48に伝達される。リアルタイムカーネル20は、他のネットワークノードによって生成されるオーディオストリームを、スピーカ56、58によって再生(レンダリング)されるオーディオ信号へと変換する。モーションデータストリーム及びオーディオストリームは、通信者ノードの各々から、他のクライアントネットワークノードへと、直接的にか又は間接的にのいずれかで伝達され得る。幾つかのストリームハンドリングトポロジにおいて、クライアントネットワークノードの各々は、他のクライアントネットワークノードによって伝達されるリアルタイムデータストリームのコピーを受け取る。他のストリームハンドリングトポロジにおいて、1つか又は複数のクライアントネットワークノードは、ネットワークノードのうちの他の幾つかのネットワークノードからもたらされる(又は発生される)リアルタイムデータストリームから導出される1つか又は複数のストリームミックスを受け取る。
幾つかの実施形態において、エリアサービス26は、仮想エリアの現在の仕様と、仮想エリア内にあるオブジェクトの現在のレジスタと、エリアサービス26をホストしているネットワークノードによって現在生成されている任意のストリームミックスのリストと、を含むグローバル状態情報を保持する。オブジェクトレジスタは、典型的には、仮想エリア内の各オブジェクトについて、それぞれのオブジェクト識別子(例えば、オブジェクトを一意的に識別するラベル)と、オブジェクトに関連付けられているネットワークノードとの確立されることとなるネットワーク接続を可能にする接続ハンドル(例えば、IPアドレスなどのURI)と、オブジェクトに関連付けられているリアルタイムデータソース及びシンク(例えば、オブジェクトに関連付けられているネットワークノードのソース及びシンク)を識別するインターフェースデータと、を含む。オブジェクトレジスタはまた、典型的には、通信者か又はエリアサービス26のいずれかによってオブジェクトに対して明確に割り当てられ得るか、或いは、オブジェクトの他の属性から推測され得る、1つか又は複数のオプションの役割(ロール)識別子を、各オブジェクトごとに含む。幾つかの実施形態において、オブジェクトレジスタはまた、仮想エリア内のオブジェクトに関連付けられたネットワークノードから受け取ったリアルタイムモーションデータストリームの分析からエリアサービス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への配信が生じる結果となることとなる。
これらの実施形態のうちの幾つかでは、コンピュータシステム120の帯域幅性能に少なくとも部分的に基づいて、コンピュータシステム120にリアルタイムデータストリームのセットを配信するリアルタイムデータストリームハンドリングトポロジを、エリアサービス26が決定する。このプロセス内において、エリアサービス26は、非ミックスのリアルタイムデータストリームと、リアルタイムデータストリームの組み合わせから導出されたストリームミックスとから、リアルタイムデータストリームの各々を受け取るためのそれぞれの形式(フォーム)を決定する。エリアサービス26はまた、直接的なピア・ツー・ピア・ネットワークルートからリアルタイムストリームの各々が受け取られるネットワークルートと、他のネットワークノードのうちの1つか又は複数によって仲介されるネットワークルートとを決定する。ストリームハンドリングトポロジが決定された後に、エリアサービス26は、コンピュータシステム120上において動作するリアルタイムカーネルに対して命令を送る。該命令は、決定されたストリームハンドリングトポロジに従って、コンピュータシステム120と、ネットワークノードのうちの他の幾つかのネットワークノードとの間における要求されるリアルタイムデータストリーム接続を指定する。
図7は、要求されるデータストリームデータをコンピュータシステム120に配信するリアルタイムデータストリーム接続のトポロジを決定するプロセス内においてリアルタイムカーネル20によって実現される一方法の一実施形態を示す。
この方法に従って、リアルタイムカーネル20は、要求されるリアルタイムデータストリームデータ186のセットを、他のネットワークノードから直接的に受け取るのに、コンピュータシステム120が十分な帯域幅を有しているかどうかを決定する(図7のブロック188)。このプロセス内において、他のネットワークノードは、リンクリクエストをコンピュータシステム120に伝達する。該リンクリクエストは、コンピュータシステム120によって必要とされるリアルタイムデータストリームの各セットの伝達を行うためのそれぞれの帯域幅要件を示す。リアルタイムカーネル20は、要求される直接的な接続を確立するために必要とされる全帯域幅と、コンピュータシステム120にとって現在利用可能なダウンロード帯域幅とを比較する。
もしも利用可能な帯域幅が、要求される全帯域幅に少なくとも等しければ、リアルタイムカーネル20は、要求されるリアルタイムデータストリームデータを提供する他のネットワークノードとの直接的な接続を確立する(図7のブロック190)。このプロセス内において、リアルタイムカーネル20は、コンピュータシステム120と、他のネットワークノードのうちの1つか又は複数のネットワークノードとの間においてソケット(例えば、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には、様々な商業的に利用可能なコンピュータプロセッサのうちの任意の1つの形態とすることが各々可能な1つか又は複数のデータプロセッサを含めることができる。システムメモリ124には、コンピュータシステム120のための起動ルーチンを含む基本入力/出力システム(BIOS)を格納する読み出し専用メモリ(ROM)と、ランダムアクセスメモリ(RAM)とを含めることができる。システムバス126は、メモリバスか、ペリフェラルバスか、又はローカルバスとすることができ、及び、(PCI、VESA、マイクロチャンネル、ISA、及びEISAを含む)任意の様々なバスプロトコルと互換性があるものとすることができる。コンピュータシステム120はまた、システムバス126に接続されている永続記憶メモリ128(例えば、ハードドライブ、フレキシブルディスクドライブ、CD ROMドライブ、磁気テープドライブ、フラッシュメモリデバイス、及びディジタルビデオディスク)を備えており、不揮発性か又は永続記憶装置をデータ、データ構造、及びコンピュータ実行可能命令に提供する1つか又は複数のコンピュータ可読媒体ディスクを含む。
通信者は、1つか又は複数の入力デバイス130(例えば、1つか又は複数のキーボード、コンピュータマウス、マイクロホン、カメラ、ジョイスティック、Wii入力デバイスのような物理モーションセンサ、及びタッチパッド)を用いて、コンピュータシステム120と相互作用する(例えば、コマンド又はデータを入力する)ことができる。情報は、グラフィカルユーザインターフェース(GUI)を通じて提示され得り、ディスプレイモニタ132上において通信者に対して提示される。該ディスプレイモニタ132は、ディスプレイコントローラ134によって制御される。コンピュータシステム120にはまた、他の入力/出力ハードウェア136(例えば、スピーカ及びプリンタのような周辺出力デバイス)を含めることができる。コンピュータシステム120は、(「ネットワークインターフェースカード」すなわちNICとしても呼ばれる)ネットワークアダプタ138を通じて他のネットワークノード138、140、及び142に接続する。
オペレーティングシステム(OS)144(例えば、アメリカ合衆国ワシントン、レッドモンドのマイクロソフトコーポレイションから利用可能なWindowsXP(登録商標)オペレーティングシステム)と、リアルタイムカーネル20と、ドライバ146(例えば、GUIドライバ)と、ネットワークプロトコル148と、ローカルソフトウェアアプリケーション150(例えば、HUD84)と、データ(例えば、入力データ、出力データ、プログラムデータ、レジストリ156、及びコンフィギュレーション設定152)とを含む、多くのプログラムモジュールが、システムメモリ124内に格納され得る。
B.オペレーティングシステム
オペレーティングシステム144は、基本オペレーティングシステムサービスを、コンピュータシステム120上の生成ランタイム実行環境に提供することによって、ソフトウェアアプリケーションをホストする。サービスの例示的なタイプの中で、典型的には、オペレーティングシステムによって提供されるものは、リソース管理、ファイル管理、セキュリティ、認証、検証(又は照合;ベリフィケーション)、通知、及びユーザインターフェース(例えば、ウィンドウイング、メニュー、ダイアログ、など)である。
コンピュータシステム120のリソース(例えば、メモリ、プロセッサ、及びI/Oデバイス)の管理に関連するサービスは、典型的には、オペレーティングシステムカーネルによって実現される。ファイル管理は、オペレーティングシステムカーネルによって実現され得るか、或いは、別個のファイルシステムマネージャ(例えば、幾つかのMicrosoft(登録商標)Windows(登録商標)オペレーティングシステムにおいて提供されるインストール可能なファイルシステム)によって実現され得る。ファイル(例えば、コンピュータデータファイルか又はソフトウェアアプリケーションファイル)をオープンさせるプロセス内において、ファイルシステムマネージャは、典型的には、データベース内のファイルのディスク記憶位置(例えば、FAT、FAT98、VFAT、MFT、及びCDFSなどのファイルアロケーションテーブル)を調べる適切なファイルシステムドライバをコールして、ディスク上のファイルの記憶位置を策定する。セキュリティ、認証、検証(又は照合)、通知、及びユーザインターフェースなどの、他のオペレーティングシステム機能は、オペレーティンシステムにおける1つか又は複数の他の構成要素(例えば、幾つかの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メッセージについての状態情報を、それらメッセージが送られた後には保持しない。受け手の状態をチェックすることなく行われる、ソースから宛先への一方向のメッセージの送信に、通信(伝達)が基づく。
RTPは、ネットワーク接続上においてオーディオ及びビデオを配信するための標準化パケットフォーマットを画定する。ネットワークノード間でRTPデータを送信すること及び受信することにおいて、(ピア・ツー・ピア・ネットワーキングフレームワークと、TCPソケットを単独でか又はUDPと組み合わせて用いる中央集権化されたサーバと、マルチキャストプロトコルとを含む)様々なネットワークプロトコルが使用され得る。
SIPは、互いを特定する(又は位置付ける)ための、通信セッションを確立するための、及び、アクティブセッションを終結させるための手段を、ユーザに提供する。SIPトランザクションによって、セッションネゴシエーションプロセスが、セッションディスクリプションプロトコル(SDP)に従って処理される。
D.デバイスドライバ
デバイスドライバ146は、典型的には、ソフトウェアアプリケーションによって実現され、該ソフトウェアアプリケーションによって、他のソフトウェアアプリケーション(例えば、ユーザモードソフトウェアアプリケーション及びオペレーティングシステム)が、コンピュータシステム120に接続されているハードウェアデバイスと相互作用することが可能になる。デバイスドライバは、典型的には、ソフトウェア処理とハードウェアデバイスとの間において伝送されるコマンド及びデータを変換するために、ソフトウェア処理によってなされるコールによって呼び出され得る機能にAPIを提供する。
E.リアルタイムカーネル
1.イントロダクション
仮想エリア通信環境を共有する他のネットワークノードとコンピュータシステム120との間においてリアルタイムデータストリームを処理すること及びスイッチングすることと、並びに、ディスプレイモニタ132上に仮想エリア及び該仮想エリア内のオブジェクトのそれぞれの景色(ビュー)を提示することと、を制御するサービスをリアルタイムカーネル20が含む。これらの処理において、リアルタイムカーネルは、オペレーティングシステム機能とインターフェースし、該オペレーティングシステム機能は、リアルタイムデータストリームを、他のネットワークノードと交換するために、及び、没入型仮想エリア通信経験を通信者に提示するために、コンピュータシステム120のハードウェア構成要素へと及び該ハードウェア構成要素からコマンド及びデータを変換するドライバ148と伝達し合う。
リアルタイムカーネル20の実現形態は、1つか又は複数のディスクリートなモジュールか又はライブラリ(例えば、ダイナミックリンクライブラリ)を含み、それらは、いかなる特定のハードウェアか、ファームウェアか、又ソフトウェアコンフィギュレーションにも限定されない。一般に、(ディジタル電子回路構成(例えば、ディジタル信号プロセッサ(DSP)のような特定用途向け集積回路)内においてか、或いは、コンピュータハードウェア内か、ファームウェア内か、デバイスドライバ内か、又はソフトウェア内においてを含む)任意のコンピューティングか又はデータ処理環境内において、これらのモジュールが実現され得る。幾つかの実施形態において、モジュールの機能性は、単一データ処理構成要素内へと組み合わされる。幾つかの実施形態において、1つか又は複数の各モジュールのそれぞれの機能(又は機能性)は、複数データ処理構成要素の、それぞれのセットによって実施される。幾つかの実現形態において、リアルタイムカーネル20の実施形態によって実行される方法を実現するための処理命令(例えば、コンピュータソフトウェアのようなコンピュータ可読コード)と、並びに、それらが生成するデータとが、1つか又は複数のコンピュータ可読媒体内に格納される。これらの命令と、データとを明白に具現化するための適合可能な記憶装置は、(例えば、EPROM、EEPROM、及びフラッシュメモリデバイスのような半導体メモリデバイスを含む)不揮発性コンピュータ可読メモリの全形態と、(内蔵ハードディスク及びリムーバブルハードディスクなどの)磁気ディスクと、光磁気ディスクと、DVD−ROM/RAMと、CD−ROM/RAMとを含む。
2.例示的なリアルタイムカーネル機能(機能性)
リアルタイムカーネル20は、コンピュータシステム120と、仮想エリア通信環境を共有する他のネットワークノードとの間でネットワーク接続を確立すること及び管理(運用)することにおいて、1つか又は複数のネットワークインフラサービスと協働する。例示的な機能(機能性)の中で、ネットワーク接続を確立すること及び管理(運用)することのプロセス内に含まれるものは、セッション管理(運用)、リモート制御ストリームハンドリング、及びリアルタイムタスクスケジューリングである。
e.セッション管理(運用)
図9は、仮想エリアに対する接続をリクエストするリアルタイムカーネルAPIコールに応答して、リアルタイムカーネル20によって実現される一方法の一実施形態を示す。
図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は、仮想エリア内へのエントリをリクエストするリアルタイムカーネルAPIコールに応答して、リアルタイムカーネル20によって実現される一方法の一実施形態を示す。
図10の方法に従って、リアルタイムカーネル20は、仮想エリアに進入する意志を、仮想エリアをホストするネットワークインフラサービスに宣言する(図10のブロック168)。このプロセス内において、リアルタイムカーネル20は、該宣言を含んだメッセージを、エリアサービス26に送る。該メッセージは、エリアサービス26との既存リンクか、或いは、リアルタイムカーネル20によってエリアサービス26との確立された新規のリンク上、におけるチャンネル上において送られ得る。これに応答して、エリアサービス26は、ユーザの能力が、仮想エリアインスタンスに関連付けられている能力要件を満たしているかどうかを決定する。もしもユーザの能力が、該能力要件を満たしていれば、エリアサービス26は、リアルタイムカーネル20にコンフィギュレーションデータを戻す。該コンフィギュレーションデータは、典型的には、仮想エリアインスタンスの定義と、仮想エリアインスタンス内に現在存在するオブジェクトのレジスタと、仮想エリアインスタンスの仕様に従って仮想エリア内のオブジェクトに関連付けられているリアルタイムデータストリームソース及びシンクのセットとを含む。
リアルタイムカーネル20は、仮想エリア内の少なくとも1つのオブジェクトにそれぞれ関連付けられた少なくとも1つのリアルタイムデータストリームソースとの少なくとも1つのネットワーク接続上における少なくとも1つのリアルタイムデータストリームの転送を開始する(図10のブロック170)。このプロセス内において、リアルタイムカーネル20は、エリアサービス26から受け取ったコンフィギュレーションデータに基づいて、仮想エリアのインスタンスに関連付けられている1つか又は複数のネットワークノードを確認する。リアルタイムカーネル20は、次いで、少なくとも1つの確認した(突き止めた)ネットワークノードとの少なくとも1つのネットワーク接続上における少なくとも1つのリアルタイムデータストリームの転送を開始する。リアルタイムカーネル20と、他のネットワークノードとの間の接続は、ピア・ツー・ピア接続とすることができるか、又は、サーバが仲介した接続とすることができる。ピア・ツー・ピア接続に関連して、接続目標ネットワークノード及びリアルタイムカーネル20は、典型的には、互いに認証を行って、次いで、少なくとも1つのリアルタイムデータストリームを、接続目標に対して送るか又は受け取るかのいずれかを行うためのリンクを確立する。リンクは、典型的には、一方向であり、送り手(トランスミッタ)によってリクエストされ、及び、受け手(レシーバ)によって受け取られるか又は拒否される。
この例示された実施形態において、リアルタイムカーネル20は、開始されたリアルタイムデータストリームを、仮想エリアインスタンスの仕様内の少なくとも1つのストリームハンドリング定義に従って処理する(図10のブロック172)。このプロセス内において、リアルタイムカーネル20は、ストリーム処理オブジェクトのセットを、方向付けられたグラフ内へと、仮想エリア仕様内において定義されるストリーム処理コンフィギュレーションに従って組み立てる。
f.リモート制御ストリームハンドリング
図11は、エリアサービス26から受け取られるストリームハンドリング命令に応答して、リアルタイムカーネル20によって実現される一方法の一実施形態を示す。
図11の方法に従って、リアルタイムカーネル20は、リモートネットワークノード上において動作するエリアサービス26から1つか又は複数のストリームハンドリング命令を受け取る。ここで、該ストリームハンドリング命令は、少なくとも1つのリアルタイムデータストリームを処理するためのストリームハンドラの仕様を含む(図11のブロック200)。リアルタイムカーネル20は、ストリームハンドラ仕様に従ってストリームハンドラを作成する(図11のブロック202)。該ストリームハンドラは、典型的には、1つか又は複数のストリームハンドリング命令内において指定されるミキシング機能を含む。該ミキシング機能は、リアルタイムデータストリームを、少なくとも1つの他のリアルタイムデータストリームとミックスして、ミックスされたリアルタイムデータストリームを生成するために用いられる。リアルタイムカーネル20は、生成したストリームハンドラを通じてリアルタイムデータストリームを処理することを含むプロセス内において、結果データストリームを生成する(図11のブロック204)。幾つかの実施形態において、このプロセスは、1つか又は複数のストリームハンドリング命令内において指定されるリアルタイム状態情報からコンフィギュレーションパラメータ値を決定することと、該コンフィギュレーションパラメータ値によって、ストリームハンドラを動的に構成(又は設定)すること、とを含む。
図12は、エリアサービス26から受け取られるストリームハンドリング命令210に従って、(リアルタイムカーネル20の構成要素である)ストリームハンドラコンフィギュレーションマネージャ208によって作成されるストリームハンドラ206の一実施形態を示す。ストリームハンドラコンフィギュレーションマネージャ208は、典型的には、1つか又は複数の構成要素であるサービスと、リアルタイムカーネル20の他の構成要素とから構成される。ストリームハンドラコンフィギュレーションマネージャ208は、(処理グラフ要素(プロセッシンググラフエレメント)すなわちPGEsとしても呼ばれる)処理オブジェクトのセットから、ストリームハンドラ206を構築する。処理オブジェクトの各々は、データストリームに関するある特定機能(例えば、変換機能、分割機能、及びミキシング機能)を実施することが可能なソフトウェアオブジェクトである。ストリームハンドラコンフィギュレーションマネージャ208は、1つか又は複数のストリームハンドリング命令内において指定される処理オブジェクトをインスタンス化して、該インスタンス化された処理オブジェクトを、仕様に従ってストリームハンドラ206における方向付けられたグラフ構成要素212内へと組み立てる。幾つかの実施形態において、ストリームハンドリング命令は、それぞれの固有の識別子によって処理オブジェクトを指定し、及び、ストリームハンドラコンフィギュレーションマネージャ208は、処理オブジェクトAPIに対して、識別子のうちの幾つかの識別子のそれぞれを含むコールを発行することによって、処理オブジェクトをインスタンス化する。ストリームハンドラ206は、ある特定データタイプ(例えば、オーディオ、ビデオ、及びモーションデータタイプ)の複数データストリーム214を、それぞれの処理チェーン(鎖)216〜218を通じて処理するよう構成(又は設定)される。該処理チェーン216〜218は、処理オブジェクトのうちの幾つかのオブジェクトの各々から構成される。ストリームハンドラ206は、追加的には、(1つか又は複数のストリームハンドリング命令内において指定された)ミキシングオブジェクト220を含む。動作中、ストリームハンドラ206は、処理されるリアルタイムデータストリーム216〜218の組み合わせから、ミックスされたリアルタイムデータストリーム222を生成するためにミキシングオブジェクト220を実行する。幾つかの実施形態において、インスタンス化された処理オブジェクトのうちの少なくとも1つが、ドライバモジュール224に対するそれぞれのコールをカプセル化する。該ドライバモジュール224は、結果データストリーム222に少なくとも部分的に基づいて、ローカルネットワークノードのハードウェア構成要素を制御する。
g.リアルタイムタスクスケジューリング
図13は、リアルタイムカーネル20によって実施されるスケジューリングタスクのプロセス内においてリアルタイムカーネル20によって実現される一方法の一実施形態を示す。
図13の方法に従って、リアルタイムカーネル20は、少なくとも1つのリモートネットワークノードとの少なくとも1つのリアルタイムデータストリーム接続を確立する(図13のブロック230)。
リアルタイムカーネル20は、リモートネットワークノードにより発生される少なくとも1つのリアルタイムデータストリームを処理する(図13のブロック232)。このプロセス内において、リアルタイムカーネル20は、結果データストリームを生成するために1つか又は複数のリアルタイムデータ処理動作を通じて少なくとも1つのリアルタイムデータストリームを処理する。
リアルタイムカーネル20は、少なくとも1つのリアルタイムデータストリームの処理を監視する(図13のブロック234)。幾つかの実施形態において、リアルタイムカーネル20は、1つか又は複数の以下のパラメータを監視する。すなわち、結果データストリームが生成されるレートと、ローカルネットワークノードにおける少なくとも1つのプロセッサの利用と、ローカルネットワークノードにおける少なくとも1つのネットワーキングリソースによる帯域幅の利用とを監視する。幾つかの実施形態において、リアルタイムデータストリームが、複数フレーム内へとパケット化され、及び、(典型的にはリモートマスタークロックサービスと同期が取られる)ローカルクロックに従って設定される連続する各固定長インターバル中の該フレームの各々の処理をリアルタイムカーネル20が監視する。監視することに基づいて、リアルタイムカーネル20は、性能目標(性能ターゲット)から逸れたリアルタイムデータストリームを処理するか否かを決定する。幾つかの実施形態において、該性能目標は、結果データストリームの生成に関する時間ベースの閾値を含む。例えば、幾つかの実施形態において、性能目標は、結果データストリームのフレームが生成されるレートに基礎を置く(すなわち、条件とする)。このタイプの例示的な性能目標は、目標閾値と目標範囲とを含む。
少なくとも1つのリアルタイムデータストリームの処理が、性能目標から変動しているという決定に応答して、リアルタイムカーネル20は、リアルタイム性能目標付けルーチンに従って処理を変更する(図13のブロック236)。
図14は、少なくとも1つのリアルタイムデータストリームの処理を監視することに基づいて、リアルタイムカーネル20によって実現される一方法の一実施形態を示す。少なくとも1つのリアルタイムデータストリームの処理が、性能目標を満たすことに失敗したという決定に応答して(図14のブロック238)、リアルタイムカーネル20は、計算リソース負荷を、より低いレベルに低減させる(図14のブロック240)。リアルタイム性能目標付けルーチンの設計に依存して、リアルタイムカーネル20は、典型的には、計算リソースを、以下のやり方のうちの1つか又は複数のやり方において低減させる。すなわち、リアルタイムカーネル20が、リアルタイムデータストリームのうちの1つか又は複数の部分の処理を省略することが可能であること(図14のブロック242)と、リアルタイムカーネル20が、1つか又は複数のリアルタイムデータ処理動作を省略することが可能であること(図14のブロック244)と、リアルタイムカーネル20が、少なくとも1つのリアルタイムデータ処理動作を、異なるそれぞれのデータ処理動作に置換することが可能であること(図14のブロック246)と、において低減させる。リアルタイムデータストリームのうちの1つか又は複数の部分の処理を省略する前記プロセス内において、(図14のブロック242)、リアルタイムカーネル20は、典型的には、少なくとも1つの以下の動作を実施する、すなわち、性能目標の外側にあるそれぞれの性能値により特徴付けられる1つか又は複数のデータ処理動作を省略することと、1つか又は複数のデータ処理動作を、データ処理動作のうちの幾つかに対してそれぞれ割り当てられている優先度値に基づいて、優先的に省略することと、を実施する。
もしも、少なくとも1つのリアルタイムデータストリームの処理が、性能目標を満たし(図14のブロック238)、且つ、計算負荷が、上述の任意の方法によってより低いレベルに低減された場合(図14のブロック248)には、リアルタイムカーネル20は、計算負荷を、より低いレベルから増加させる(図14のブロック250)。リアルタイムカーネル20は、典型的には、ヒューリスティック(発見的問題解決法)に従ってブロック240内において計算リソース負荷を低減させるために用いられていた1つか又は複数の動作を反転(又は逆転)させることにより、計算リソース負荷を増加させる。もしも、少なくとも1つのリアルタイムデータストリームの処理が、性能目標を満たし(図14のブロック238)、且つ、計算負荷が、上述の任意の方法によってより低いレベルに低減されなかった場合(図14のブロック248)には、リアルタイムカーネル20は、リアルタイムデータストリームの現在の処理を維持する。
幾つかの実施形態において、リアルタイムカーネル20は、少なくとも1つのリアルタイムデータストリームに関するデータ処理動作のうちの幾つかのそれぞれを実施する処理オブジェクトをインスタンス化する。リアルタイムカーネル20は、方向付けられたグラフを、インスタンス化された処理オブジェクトのうちの幾つかの処理オブジェクトから構築して、該方向付けられたグラフを通じて、少なくとも1つのリアルタイムデータストリームを処理する。リアルタイム性能目標付けルーチンに依存して、リアルタイムカーネル20は、インスタンス化された処理オブジェクトのうちの1つか又は複数を、該方向付けられたグラフから、一部取り除く(枝刈りを行う:pruning)ことによって、リアルタイムデータストリームの処理を変更することができる。幾つかの実施形態において、処理オブジェクトは、それぞれの優先度値が割り当てられ、リアルタイムカーネル20は、インスタンス化された処理オブジェクトのうちの幾つかを、方向付けられたグラフから、該割り当てられた優先度値に基づいて排除することによって処理オブジェクトを一部取り除く。例えば、これらの実施形態のうちの幾つかでは、該一部取り除くことは、優先度閾値を満たすことに失敗した割り当てられた各優先度値を有したインスタンス化された処理オブジェクトのうちの幾つかを、方向付けられたグラフから排除することを含む。
幾つかの実施形態において、リアルタイムカーネル20は、インスタンス化された処理オブジェクトのうちの幾つかの処理オブジェクトから、第2の方向付けられたグラフを構築する。該第2の方向付けられたグラフは、ローカルネットワークノードと少なくとも1つのリモートネットワークノードとのうちの一方によって発生される第2のリアルタイムデータストリームを処理するために用いられる。これらの実施形態のうちの幾つかにおいて、第1及び第2の方向付けられたグラフは、それぞれの優先度値が割り当てられ、及び、リアルタイムカーネルが、割り当てられた優先度値に基づいて第1及び第2の方向付られたグラフのうちの一方を優先的に変更することにより第1及び第2のリアルタイムデータストリームの処理を変更する。例えば、リアルタイムカーネルは、最小の優先度値が割り当てられている第1及び第2の方向付けられたグラフのうちの一方を引き下ろす(又は引きはがす)ことができる。
幾つかの実施形態において、リアルタイムカーネル20は、方向付けられたグラフを通じて第2のリアルタイムデータストリームを処理する。ここで、該第2のリアルタイムデータストリームは、ローカルネットワークノードと、少なくとも1つのリモートネットワークノードとのうちの一方によって生じられる。幾つかのこれらの実施形態において、第1及び第2のリアルタイムデータストリームは、それぞれの優先度値が割り当てられ、リアルタイムカーネル20は、割り当てられた優先度値に基づいて、第1及び第2のリアルタイムデータストリームのうちの一方の処理を優先的に変更する。
幾つかの実施形態において、リアルタイムカーネル20は、ローカルネットワークノードと、複数のリモートネットワークノードとの間におけるそれぞれのリアルタイムデータストリーム接続を確立する。リアルタイムカーネル20は、方向付けられたグラフを通じて、リモートネットワークノードのうちの幾つかの各々によって生じられるリアルタイムデータストリームを処理する。これらの実施形態のうちの幾つかにおいて、リアルタイムデータストリームは、それぞれの優先度値が割り当てられ、リアルタイムカーネル20は、割り当てられた優先度値に基づいて、1つか又は複数のリアルタイムデータストリームの処理を優先的に変更する。方向付けられたグラフは、典型的には、インスタンス化された処理オブジェクトのうちの幾つかの各々の複数の方向付けられたチェーン(鎖)を含む。リアルタイムカーネル20は、典型的には、該方向付けられたチェーンの各々を通じて、リアルタイムデータストリームのうちの1つのそれぞれを処理する。これらの実施形態のうちの幾つかにおいて、リアルタイムカーネル20は、リアルタイムデータストリームの処理を、指定された性能目標内に該処理がなるまで反復的に変更する。各反復中に、該変更することは、典型的には、(i)方向付けられたグラフからチェーンのうちの1つか又は複数を除去することと、(ii)インスタンス化された処理オブジェクトのうちの1つか又は複数を、方向付けられたグラフから一部取り除くこと、とのうちの1つか又は複数を実施することを含む。
V.例示的なリアルタイムカーネル実施形態
A.イントロダクション
図15は、リアルタイムカーネル20の一実施形態260を示す。リアルタイムカーネル260は、異なるネットワークノード上における、2D/3Dグラフィックスレンダリングエンジン及びオーディオミキシング及びスイッチングエンジンのリモートコンフィギュレーション及び実行をサポートして、2人か又は3人以上の通信者間の物理的プレゼンスの感覚(センス)を生成する。単一仮想エリアインスタンス内において一度に相互作用する全通信者を管理するプロセス内において、エリアサービス26は、リアルタイムカーネル260と、他のネットワークノードとの間のセッションを、リアルタイムカーネル260のパケットトランスポート構成要素(本明細書内においてSTRAWサービス268として呼ばれる)を介して、リモートに設定(又は構成)する。幾つかの実施形態において、リアルタイムカーネル260は、エリアサービス26との通信を最小化するためにポイント・ツー・ポイント(P2P)でデータストリーム(例えば、リアルタイムオーディオデータストリーム)を設定(又は構成)する。エリアサービス26はまた、データストリームをミックスすることができ、及び、必要な時にはクライアントネットワークノードにそれらを渡すことができる。リアルタイムカーネル260は、P2P接続の失敗をエリアサービス26に報告することとなり、その結果、エリアサービス26は、クライアントネットワークノードのためにデータストリームをミックスする時を決定することが可能となる。リアルタイムカーネル260は、小さなイニシャル領域(フットプリント)を有しており、更新(アップデート)をロードし、及び、ネットワーク接続上において徐々に増加する機能をプラグインとしてロードする。
リアルタイムカーネル260は、マネージャ及びサービスのセットを含む。リアルタイムカーネルマネージャの中には、接続及びサービスミックスマネージャ262、エリア/ゾーンマネージャ264、及びプラグインマネージャ266がある。リアルタイムカーネルサービスの中には、STRAWサービス268、SODAハンドラサービス270、メディアサービス271、オーディオストリームサービス272、So3Dインターフェースサービス274、アセットキャッシュサービス275、1つか又は複数のソーシャルプロセッサ277、記録、再生、及びトランスポートバスサービス276、リアルタイムスケジューラサービス278、タイムサービス280、SIPサービス282、ローカルHID/RDSドライバハンドラサービス284、及びローカルオーディオデバイスのためのインターフェースサービスがあり、該ローカルオーディオデバイスは、ローカルオーディオ再生286、ローカルスピーカ288、ローカルマイクロホン290、及びSkype(登録商標)オーディオを含む。例示的な一実施形態において、リアルタイムカーネル260は、以下のランタイムパッケージ構成要素(コンポーネント)によって実現される。
ライブラリ:
ライブラリ名 説 明
SORK.DLL・・・・・リアルタイムスケジューラ278
Compress.DLL・・・圧縮エンジン
Media.DLL・・・・・ストリーミングオーディオ伝送のためのメディアサービス271
SODA.DLL・・・・・ストリーミングSODA定義伝送のためのSODAチャンネルサービス270
GIPS.DLL・・・・・GIPS音声構成要素
OpenAL.DLL・・・・サウンドカードサポートのためのオープンオーディオライブラリ(Open Audio Library)
AudioSvc.DLL・・・オーディオストリームサービス272
TransBus.DLL・・・オーディオストリームサービス272を含むメディアトランスポートバス
OpenAL.DLL・・・・サウンドカード
STRAW.DLL・・・・STRAWサービス268(パケットトランスポートエンジン)
CSMMgr.DLL・・・・接続及びサーバミックスマネージャ262
AreaZone.DLL・・・エリア/ゾーンマネージャ264
ArtCache.DLL・・・ローカルデータベース内のアート(art)に対してSODAインターフェースを提供するアセットキャッシュサービス
So3D.DLL・・・・・3Dレンダリングエンジンに対するSODAインターフェース
TimeSID.DLL・・・・ネットワーク時間基準インターフェース
PlugInMgr.DLL・・・プラグインマネージャ

他のプラグイン:
暗号化アルゴリズム
圧縮アルゴリズム
認証アルゴリズム
認証情報(クレデンシャル)
オーディオミックス
オーディオソース
オーディオコーデック
オーディオ計算
グラフィカルエフェクト
物理エクステンション
スクリプトエクステンション
入力デバイスホスティング
B.リアルタイムカーネル設計
図15内に示されているように、リアルタイムカーネル260は、エリアサービス26から受け取った命令に従って仮想エリア通信環境をレンダリングするためのプラットフォームの構成要素となるサービス、プラグイン、及びリアルタイムスケジューラのコレクションとして設計される。プラットフォームを実現するために複数サービスが協働して、オーディオ及びグラフィックスレンダリングコンフィギュレーションを通じてネットワーク機能とは異なるレベルで動作する。プラグインは、様々なクラスに属しており、各々は、(各々がそれ自身のクラスAPIで)プラグイン管理(Plugin Management)APIに準拠している。リアルタイムスケジューラ278は、オーディオ及びグラフィックレンダリングが、偶数フレームレートにおいて生じることを保証する。プラットフォームは、STRAW UDPソケット(SODA記録の例示的なセットのためのSODA定義を含むセクションVIを参照のこと)上において伝達されたSODA定義記録を通じてエリアサービス26により仮想エリアのインスタンスに従って構成される。STRAWサービス268は、公開/認可モデルを用いてSODA記録ストリームを逆多重化(デマルチプレクス)する。SODA記録は、STRAWソケットの他方端上に加入者が存在する時にのみ伝達される。受け取られたSODA記録は、到来時に、1つか又は複数の加入者に配信される。サービスは、So3Dグラフィックスエンジン及びHUD84によって利用されるためのローカルAPIをサポートする。
以下のサブセクションは、リアルタイムカーネル260の実施形態とその構成要素のインストール、設計、及び動作を説明する。
1.インストール
a.概要
幾つかの実施形態において、仮想エリアベースのレンダリングプラットフォームが、インストールパッケージとして、インターネット上のソフトウェアパッケージとしてダウンロードされる。それは、ダウンロードサーバからHTTPダウンロードにより配信される。Microsoft(登録商標)Windows(登録商標)オペレーティングシステムが動作するクライアントネットワークノード上において、前記プラットフォームソフトウェアパッケージは、.msiパッケージである。初期インストールは、更新が利用可能となるとダウンロードサーバ上において修正されている単一パッケージである。新規のクライアントネットワークノードが、最新のインストールを実施する際には、次の更新が生成されるような時まで他の更新は必要とされない。
リアルタイムカーネル260は、アプリケーションをカスタマイズするために、プラグインを利用する。必要なプラグインは、インストールパッケージ内に含まれている。時々、構成要素(コンポーネント)は、独立に更新(アップデート)され得る(例えば、リアルタイムカーネルサービスがポイントリリースされ得り、及びプラグインが追加され得る)。このケースでは、別個のWindows(登録商標).msiインストールパッケージが、ポイントリリースのために生成され得り、及び、更新サーバによって登録され得る。このインストールされるプラットフォームソフトウェアは、更新の通知がなされることとなり、アップグレードすることのオプションを通信者に提供することとなる。何人かの通信者は、2つ以上の更新が利用可能になるまで、アップグレードすることが遅れる可能性がある。通信者が最終的にアップグレードすることに同意した時には、全ての利用可能な更新が連続的にロードされ且つ提供されることになる。
プラグインの複数バージョンが、クライアントネットワークノード上に同時に提示され得る。これは、クライアントネットワークノードが、典型的には、機能をネゴシエートして、そのAPI及びバージョン要件に適合するプラグインを選択するからである。各プラグインは、そのAPI及びバリアントを公示(又は通告)する。プラグインは、ファイルシステム内において名称の衝突(コリジョン)を避けるため、異なるファイル名を有することとなる。同じAPIで且つ異なるバリアントを有する2つのプラグインは、異なる実現形態であり、その選択は、(おそらくは、例えば、サーバとのネゴシエーションにより)プラグインをリクエストするサービスによってなされる。既存プラグインとして、同じAPI及びバリアントの状態で、プラグインがロードされる時には、これはバグ修正である。新規プラグインが、古いプラグインと置き換わる。サービスは、常に、アップグレードによって置き換わる。同じAPIを有した2つのサービスは決して存在しない。Windows(登録商標)インストールは、マニフェストと、バンドルされたWindows(登録商標)依存のDLLsとを使用して、Windows(登録商標)環境の更新状態とは無関係に、製品を機能させることを保証する。Windows(登録商標)に並んだ機能が、他の製品インストール要件との衝突を避けるために用いられる。
b.更新サーバ
更新サーバは、各サポートされるホスト動作環境ごとのインストールパッケージと、以前にサポートした各インストールパッケージごとのアップグレードパッケージとを含む。
クライアントネットワークノード及び更新サーバは、信頼可能なSTRAWチャンネル上において伝達を行う。更新サーバは、利用可能なアップグレード定義を、各サポートされるホスト動作環境ごとに公開(又は発行)する。クライアントネットワークノード上にインストールされている仮想エリアベースのレンダリングプラットフォームソフトウェアは、その後、アップグレードに対する認可を行うことができる。更新サーバは、所望のソフトウェアを段階的に送ることを開始する。
幾つかの実施形態において、ユーザに最新のクライアントソフトウェアバージョンを見せることを可能にさせるために、利用可能なアップグレードをリスト表示するために、及び、アップグレード処理を開始及び監視するために、クライアントバージョン及びアップグレードツールが、各クライアントネットワークノード上にインストールされる。クライアントネットワークノードは、提供されているアップグレードパッケージのGUIDsのテーブルを維持することとなる。更新サーバにこのリストが提示されることとなり、その見返りに、ペンディング中のアップグレードのリストが、アプリケーション順にGUIDによって得られることとなる。それらは、添付された記述、サイズ、及び日付属性を有することとなる。
アップグレードは、ダウンロードが完了し、且つ、自動インストールが成功を報告した時にのみ、「適用済み」とマーキングされる。該自動インストールのプロセスは、DLLsがオーバーライトされる可能性があるため、任意の実行中のSORKサービスを停止させることを含む。処理に割り込みがかけられて、如何なるデータ伝送の再送も無しに再開(レジューム)される可能性があるため、アップグレードをダウンロードすることは、SODA記録のシーケンスを通じて行われる。該記録は、アップグレードGUID及びオフセットを含む。
ロールバックすることか又はアンインストールすることのための要件は存在しないので、如何なるMicrosoft(登録商標)Windows(登録商標)「に並んだ(side-by-side)」ライブラリマニフェストも必要ない。任意の要求されたライブラリが、アップグレードの一部としてロードされ得る。
アップグレードツールは、レジストリを登録させることとなるか、或いは、適用されるアップグレードのGUIDsを含んだ、並びに、任意の最新のローディングアップグレードのGUIDを含んだファイルと、そのオフセットと、「今までの」データを含んだディスク上のファイルに対する参照とを含んだファイルを保持したままにさせることとなる。アップグレードパッケージは、適用(又は提供)されると削除される。アップグレードパッケージを、複数のクライアントネットワークノードについてキャッシュすることが望ましく、従って、キャッシングを行うこととなる同じクライアントプロキシでそれらを各々指し示すことが望ましい。
c.更新ローカルデータベース
クライアントネットワークノードは、仮想エリアベースのレンダリングプラットフォームサービス及びプラグインを、ローカルファイルシステム内のアセットディレクトリ内に格納する。該サービス及びプラグインは、APIs及び添付リソースを通じて、自己記述的である。クライアントネットワークノードソフトウェア状態に関する更なる情報は保持されない。クライアントネットワークノードが、(おそらくは、OSのアップグレード後に)仮想エリアベースのレンダリングプラットフォームソフトウェアを再インストールする時には、既存のプラグインが、典型的には、再有効化される(又は再認証される)。初期のインストールは、全ての基本的なサービス及びプラグインを含むが、マシンオプションのか又はアプリケーション指定のプラグインが存在する場合があり、それらは典型的には、削除されるか又は再有効化される(又は再認証される)。幾つかの実施形態において、有効なプラグインのバイナリコンテンツが、ハッシュされて、一方向に暗号化されて、その結果として生じた値が、添付リソースとして格納される。該添付リソースは、プラグインが本物であるか否かをチェックするために使用される。疑わしいプラグインが正しいものであることを確認するために、最新のプラグインコンテンツが、再ハッシュされ、暗号化されて、その結果として生じた値が、既存のリソースと比較される。該コンテンツが、該リソースに一致しない場合には、そのプラグインは無効にされる。
d.クライアント認証
ネットワーク認証は、典型的には、リアルタイムカーネル260がランチされる度ごとに一度だけなされる。幾つかの実施形態では、アカウントネットワークインフラサービスを実行するアカウントサーバが用いられて、通信者が認証されて、該通信者ごとにリアルユーザ識別子(RUID)が生成される。アカウントサーバは、トークンを生成し(その後、該トークンはRUIDの一部として含められる)、他のサーバに対して自分自身が本物であることを証明するために、そのトークンをクライアントネットワークノードに対して提供する。このプロセス内において、クライアントネットワークノードは、認証情報(クレデンシャル)がセキュリティ上安全にインストール時に発行される。該認証情報(クレデンシャル)は、典型的には、認証局により署名された、認証局(CA)定義の証明書である。該証明書は、プライベートキー(鍵)とパブリックキー(鍵)とを含む。仮想エリアベースのレンダリングプラットフォームインストールパッケージは、パブリックキーのみを含む新たな認証情報(クレデンシャル)を生成する。プライベートキーは、クライアントネットワークノード上においてセキュリティ上安全に格納される。仮想エリアベースのレンダリングプラットフォームインストールパッケージは、プライベートキーを用いて署名を生成して、通信者によって提供されたパスワードのダイジェストを暗号化し、該署名を、セキュリティ上安全にアカウントサーバに対して伝達する。該アカウントサーバは、該ダイジェストを回復させて、クライアントを識別する秘密事項としてそれを格納する。
接続を確立する時には、リアルタイムカーネル260は、認証情報(クレデンシャル)をアカウントサーバと共有する。該アカウントサーバは、この認証情報(例えば、サーバ側の証明書)に応答する。クライアントネットワークノード及びアカウントサーバは、レジストレーション権限を用いて、該認証情報を確認(又は認証)する。検証されると、サーバ側の認証情報は、どこのどのサーバに対しても有効になる。
幾つかの実施形態において、アカウントサーバはまた、ランダムな128ビットのチャレンジフレーズを、クライアントネットワークノードに対して提供する。該クライアントネットワークノードは、通信者によって提供されたパスワードの暗号ダイジェストと共に該チャレンジフレーズをハッシュして、これを応答として戻す。アカウントサーバもまた、その通信者について以前に取得したダイジェストと共に該チャレンジフレーズをハッシュして、クライアントネットワークノードからの応答が一致することを検証する。次いでネットワーク接続が認証されて、プライベートキーの所有者として通信者が識別(特定)される。
幾つかの実施形態において、アカウントサーバは、添付署名によるランダムなクライアントIDを通信者に割り当てる。該署名は、アカウントサーバプライベートキーを用いて暗号化されたクライアントIDの128ビットのハッシュである。該署名は、アカウントサーバによってのみ、生成され得る。トークンを受け取ったものは誰でも、アカウントサーバによって発行されたパブリックキーを用いてダイジェストを解読してそれをクライアントIDと比較することによって、通信者を認証することができる。
e.アカウントサーバ認証
図16は、アカウントサーバ296がその認証情報(クレデンシャル)を通じて認証されることによる一方法の一実施形態を示す。この方法に従って、クライアントネットワークノード294とアカウントサーバ296とが認証情報(クレデンシャル)を交換する(図16のブロック298、300)。クライアントネットワークノード294に対するアカウントサーバ296の、後の高速な認証のために、クライアントネットワークノード294は、アカウントサーバ296に対してサーバID及びサーバトークンを発行する(図16のブロック302)。アカウントサーバ296は、次いで、クライアントIDと、添付識別トークンとを、クライアントネットワークノード294に対して発行する(図16のブロック304)。アカウントサーバへのストリームに関する認証フェーズは、参加者のパブリックキーを用いて暗号化される。
2.初期化シーケンス
図17は、クライアントネットワークノード上のオペレーティングシステムがランチされる度にリアルタイムカーネル260のローダー構成要素によって実現される一方法の一実施形態を示す。このプロセス内において、該ローダーは、1つか又は複数のカーネルサービス構成要素を含むカーネル構成要素の静的リストをパーズする(図17のブロック320)。パーズしたリスト内の全てのカーネル構成要素であって、ローカルな保存場所(例えば、ローカルファイルシステム内のディレクトリ)から無くなっている、該全てのカーネル構成要素を、該ローダーが決定する(図17のブロック322)。該ローダーは、無くなっていることが決定されたカーネル構成要素の各々を回復させる(図17のブロック324)。幾つかの実施形態において、ローダーは、無くなっているカーネル構成要素をリモートネットワークノード(例えば、ダウンロードサーバか又は更新サーバ)から回復させる更新サービスをクライアントネットワークノード上においてインスタンス化する。無くなっているカーネル構成要素が回復された後に、該ローダーは、カーネルサービス構成要素のうちの幾つかの各々からカーネルサービスをインスタンス化する(図17のブロック326)。インスタンス化されたカーネルサービスは、仮想エリアに関して画定される通信環境内における1つか又は複数のリモートネットワークノードと伝達し合うために実行される(図17のブロック328)。例えば、幾つかの実施形態において、HUD84は、本明細書内において詳細に記載されているようなHUDセッションか又はエリアセッションを確立するため、エリアサーバと伝達し合うためにカーネルサービスを呼び出す。
幾つかの実施形態において、リアルタイムカーネル260の以下のサービスが、Windows(登録商標)サービスDLLsとして起動(ブート)時にロードされる。
●STRAWサービス268
●SODAサービス270
●メディアサービス271
●オーディオストリームサービス272
●接続及びサーバミックスマネージャ262
●エリア/ゾーンマネージャ264
●アセットキャッシュサービス275
●リアルタイムスケジューラサービス278
●HUD84
●デフォルトプラグイン
これらの実施形態において、サービスが、GUIDによってでなく名称によってロードされる。各サービスのうちの1つのコピーのみが、一時、クライアントネットワークノード上に提示される。ロード後、SODAチャンネルサービス270、メディアサービス271、オーディオストリームサービス272、エリア/ゾーンマネージャ、及びリアルタイムスケジューラサービスが、アイドル状態で待機する。接続及びサーバミックスマネージャは、未設定のまま音声を放置して、エリアサーバに対する接続の定義を待つ。デフォルトプラグインが、GUIDによってAPIクラスオブジェクトとして登録される。ある定義内においてGUIDによって参照された時に、それらデフォルトプラグインがロードされる。HUD84は、アカウントサーバにコンタクトして、通信者を認証し且つ識別(特定)する。HUD84は、ランデブーネットワークインフラサービスと、相互作用ネットワークインフラサービスとに対するストリームを生成して、その最も最近に使用された(MRU)友達及びエリアリストとその頻度の高い友達及びエリアリストとをポピュレートする。アセットキャッシュサービス275は、典型的には、アート(art)データベースサーバにコンタクトして、ヒューリスティック(発見的問題解決法)に従って、ディジタルリソースをキャッシュしはじめ、そのGUIDマップを更新する。
3.セッション
リアルタイムカーネル260は、クライアントネットワークノードと他のネットワークノードとの間のセッションを管理する。あるセッション中、サーバとクライアントネットワークノードとの間で、STRAWソケット上においてSODA定義記録として、データが共有化される。データは、公開/認可(又は承認、署名)モデル内において共有化される。リアルタイムカーネル260は、クライアントネットワークノードが必要なデータに対してのみ、認可(又は承認)をする。認可するために、リアルタイムカーネル260は、所望のサーバに対してSTRAWチャンネルを生成する。STRAWチャンネルは、特定の仮想エリアのために周知のGUIDによってネゴシエートされる。幾つかの実施形態において、STRAWソケットが、設定(又は構成)されたDNS通じて提供されるアドレスを用いて接続される。
エリアサービスは、通信者にとって利用可能なデータストリームを示す公開メッセージを送ることとなり、それら各々をGUIDハンドルによってタグ付けする。リアルタイムカーネル260は、従って、所望のデータストリームについての認可(又は承認、署名)メッセージを送る。認可されたチャンネルについてのエリアサービスデータに対する任意の変化が、SODA定義記録として、これらチャンネルについて認可した全てのクライアントネットワークノードに送られる。
2つの主要なタイプのセッションが存在する。すなわち、(a)HUD84内に現在の関係とプレゼンス情報とを表示することを含むHUDセッションと、(b)仮想エリアインスタンスに隠れて待機させることか又は進入させることかのいずれかを含むエリアセッションである。
a.HUDセッション
HUDセッション内において、HUD84は、アカウントサーバ、RUIDサーバ、及びランデブーサーバにコンタクトして、そしてSTRAWチャンネルを通じて、通信者の自身のアカウントと関係情報とを認可(又は承認)する。HUD84は、従って、密接に関連したコンタクト及び仮想エリアについてのプレゼンス情報を認可(又は承認)する。この時点で、HUD84は、密接に関連したコンタクトについての動的プレゼンス情報を表示することができる。
b.エリアセッション
あるエリアセッション内において、HUD84は、関連した仮想エリアについての情報を認可(又は承認)する。幾つかの実施形態において、HUDによって指定される仮想エリアをホストする現在のエリアサーバを決定するために、ディレクトリサーバが調べられる。STRAWストリームが、現在のエリアサーバに対して生成される。
HUDは、仮想エリアに関連付けられているプレゼンスデータを認可(又は承認)して、その2Dヘッドアップディスプレイを、仮想エリア内に現在参加している他の通信者の名前で更新する。この時点において、該通信者は、仮想エリア内において、隠れて待機している。通信者のプレゼンスが、ポップアップリスト内に表示され得り、及び、アイコンが、HUDエリア表現において(例えば、図5A〜図5C内に示されたオフィス場所タイルにおいて)表示される。
もしも通信者が、仮想エリアに進入するようHUD84に指示した場合には、仮想エリアに進入する、通信者のリクエストを、リアルタイムカーネルが、ランデブーサービスに知らせる。仮想エリアに関連付けられているプレゼンス情報に対する認可がなされている他の通信者は、仮想エリアに進入した新たな通信者の知らせを受ける。
リアルタイムカーネル260は、相互作用環境をランチするようSo3Dエンジンに指示する。該So3Dエンジンは、エリアサーバ環境データ(例えば、レンダリング及びモーションデータ)を認可(承認)する。エリアサーバは、リクエストされたエリアサーバ環境データを、リアルタイムカーネル260に対してストリーミングすることを開始する。該リアルタイムカーネルは、リクエストされたデータを、So3Dエンジンに送って、該So3Dエンジンが、現在の視覚化モード(例えば、2Dオーバーヘッドビューか、低解像度ビューか、又は完全没入型3Dビュー)に従って該データをレンダリングする。
エリアサーバは、仮想エリア内のオブジェクトに関連付けられているクライアントネットワークノード間において生(raw)のマイクロホンオーディオメディアストリームを画定する。エリアサーバはまた、仮想エリア仕様内のオーディオハンドリング命令(例えば、空間的なエフェクト定義、及びゾーン定義)に従って、オーディオミックス要素の定義を生成する。接続及びサーバミックスマネージャ262は、各P2PオーディオストリームごとのGUIDハンドルを含むオーディオ定義に耳を傾けて、各定義ごとにメディアストリームを生成する。メディアストリームの各々は、ローカルトランスポートバス276に登録(又は記録)されて、オーディオストリームサービス272によって適切なオーディオミキシング構成要素が生成される。エリア/ゾーンマネージャ264はまた、オーディオに対する及びアバター動作(モーション)及び配向データに対するSODA定義を認可(又は承認)する。エリア/ゾーンマネージャ264は、通信者のアバターが仮想エリアを進むと、各オーディオストリームのゲイン/ミュートを制御する。
幾つかの実施形態において、エリア/ゾーンマネージャ264が、追加的には、関連データを認可(又は承認)する。該関連データは、仮想エリア内におけるアバターの配向/動作/姿勢(ポーズ)をソーシャルプロセッサ277(図15を参照)を介して制御するためにエリア/ゾーンマネージャ264が使用する。このプロセス内において、エリア/ゾーンマネージャ264は、仮想エリア内のアバターの位置と該関係データとに基づいて、ソーシャルプロセッサ277のパラメータ値を設定する。このようにして、通信者が話す時にアバターの頭の位置と配向とを変更することによって、関係(関連)が指示され得る(例えば、仮想エリアのゾーンに別のアバターが進入した時にその別のアバターの方に向くようアバターを回転させるか、或いは、仮想エリアのメディアゾーンが進入を受けた時にビュースクリーンの最適な眺め(又は景色;ビューイング)にアバターを配向する)。幾つかの実施形態において、ソーシャルプロセッサ277は、サードパーティの開発者によって画定され、プラグインを介してクライアントネットワークノードに配信される。各ソーシャルプロセッサ277は、ある特定のイベントが発生した時に自動的に実行される命令のセットである(例えば、他のアバターか、あるエリア内のある位置か、或いはこれらの両方に対して、接近することによって、自動的な動作(モーション)がトリガされる)。ソーシャルプロセッサ277は、仮想エリア内のアバターか又はオブジェクトのモーションを制御する任意のプログラムルーチンとすることができる。例えば、幾つかの実施形態において、あるアバターがビュースクリーンに近づく場合には、ソーシャルプロセッサの1タイプは、仮想エリア仕様内において画定される格子(グリッド)に該アバターを自動的に素早くはめ込んで、ビュースクリーンの前に該アバターをセンタリングして、ユーザが容易にビュースクリーンのコンテンツを見ることができるようにする。このようにして、アバターの動作の複雑な操作の必要性が取り除かれる。別のタイプのソーシャルプロセッサ277は、別のユーザのプレゼンスを認識させるために、アバターを自動的に旋回及び回転させる。例えば、このタイプのソーシャルプロセッサの一実施形態は、仮想エリア内への新たな通信者のエントリに応答して、仮想エリア内のアバターを、互いに向き合った状態から、該アバターが新たな通信者のアバターの方を向いているそれぞれの配向へと、自動的に再配向させるよう構成される。このケースでは、もともと仮想エリア内の、アバターに関連付けられている通信者は、彼らのアバターを手動で操作する必要がない。その代りに、ソーシャルプロセッサが、新たな通信者のプレゼンスを認識させるために、それらアバターの頭を自動的に回転させる。
4.管理セッション
図18は、STRAWサービス268によって実現されるセッション管理方法の一実施形態を示す。
図18の方法に従って、コネクションレス・トランスポート・プロトコル(例えば、UDP)に従ってトランスポートストリームに関するリモートネットワークノードとの第1のセッションを、STRAWサービス268が、ローカルネットワークノード上において確立する(図18のブロック362)。STRAWサービス268は、セッションの定義を生成し、ここで、該定義は、インターネットプロトコル(IP)アドレスと、ポートアドレスと、トランスポートプロトコルのグローバル固有識別子とを含む。STRAWサービス268は、該定義をリモートネットワークノードに送る。STRAWサービス268は、リモートネットワークノードに割り当てられる第1のステーション定義を決定して、該第1のステーション定義を、各々のオープンチャンネルの属性としてテーブル内に格納する。このプロセス内において、STRAWサービス268は、リモートネットワークノードから受け取られるステーション定義記録をパーズする。該ステーション定義記録は、フィールドのセットを含み、ここで、該フィールドの各々は、それぞれのフィールドタイプと、関連付けられたフィールド値とによって画定され、該フィールドタイプの各々は、それぞれのグローバル固有識別子(GUID)によって識別される。
ローカルネットワークノード上における1つか又は複数のソフトウェアエンティティのために、STRAWサービス268は、第1のセッション内において、ローカルネットワークノードとリモートネットワークノードとの間においてデータが伝達される1つか又は複数のチャンネルを自動的にオープンする(図18のブロック364)。このプロセス内において、STRAWサービス268は、ローカル公開チャンネルを画定する記録と、リモート公開チャンネルのうちの1つのリモート公開チャンネルの識別子に一致する識別子を有するローカル認可チャンネルの各々の記録とをリモートネットワークノードに送る。
第1のセッション内において、STRAWサービス268は、チャンネルのうちの幾つかのオープンチャンネルを識別(又は特定)するテーブルを維持して、それぞれの属性値を該識別したチャンネルに関連付ける(図18のブロック366)。STRAWサービス268は、ローカルネットワークノードから利用可能なローカル公開チャンネルと、1つか又は複数のソフトウェアエンティティによってリクエストされたローカル認可チャンネルと、リモートネットワークノードから利用可能なリモート公開チャンネルと、リモートネットワークノードによってリクエストされたリモート認可チャンネルと、の属性を記録する。このプロセス内において、ローカル公開チャンネル上においてデータを公開するための容量(キャパシティ)を示す複数ソフトウェアエンティティのうちの1つのソフトウェアエンティティの識別子と、ローカル公開チャンネルを認可するリモートネットワークノードの識別子と、ローカル公開チャンネルの識別子と、を含む記録を、STRAWサービス268は、各ローカル公開チャンネルごとに維持する。ローカル認可チャンネルを認可する複数ソフトウェアエンティティのうちの1つのソフトウェアエンティティの識別子と、ローカル認可チャンネル上においてデータを公開するための容量(キャパシティ)を示すリモートネットワークノードの識別子と、ローカル認可チャンネルの識別子と、ローカル認可チャンネルに関連付けられた1つか又は複数のネットワークトランスポートパラメータと、を含む記録を、STRAWサービス268は、各ローカル認可チャンネルごとに維持する。リモート公開チャンネル上においてデータを公開するための容量(キャパシティ)を示すリモートネットワークノードの識別子と、リモート公開チャンネルの識別子と、を含む記録を、STRAWサービス268は、各リモート公開チャンネルごとに維持する。
STRAWサービス268は、セッション内において、1つか又は複数のオープンチャンネル上において、ローカルネットワークノードとリモートネットワークノードとの間においてデータを伝達する。幾つかの実施形態において、記録(レコード)の形態においてデータが伝達され、該記録の各々は、フィールドのセットを含む。記録の該フィールドの各々は、それぞれのフィールドタイプと、関連付けられたフィールド値とによって画定され、それぞれの該フィールドタイプは、それぞれのGUIDによって識別される。幾つかの記録は、メディア記録であり、該メディア記録は、メディアデータを含み、該メディアデータは、レンダリング可能なデータのパケットを含む。他の記録は、コンフィギュレーション記録であり、該コンフィギュレーション記録は、コンフィギュレーションデータを含み、該コンフィギュレーションデータは、コンフィギュレーション設定(セッティング)の定義を含む。メディア記録及びコンフィギュレーション記録は、典型的には、トランスポートストリーム上のトランスポート記録内にカプセル化される。メディア記録は、典型的には、第1のデータ圧縮サービスを用いて圧縮され、及び、コンフィギュレーション記録は、典型的には、第2のデータ圧縮サービスを用いて圧縮される。送信時に、STRAWサービス268は、該トランスポート記録を、それらが伝達される複数チャンネルのうちの幾つかのチャンネルの各々の識別子に関連付け、該トランスポート記録を暗号化し、及び、その暗号化されたトランスポート記録を順序付ける。受信時に、STRAWサービス268は、該トランスポート記録を解読して、その解読したトランスポート記録内に含まれるメディア記録とコンフィギュレーション記録とを、ソフトウェアエンティティのうちの認可する幾つかのソフトウェアエンティティへと発送する。
第1のセッションが失敗したという決定(判定)に応答して、STRAWサービス268は、コネクションレス・トランスポート・プロトコルに従って、第2のトランスポートストリームに関するリモートネットワークノードとの第2のセッションを確立することを自動的に試みる(図18のブロック368)。幾つかの実施形態において、STRAWサービス268は、リモートネットワークノードに割り当てられた現在のステーション定義が、第1のセッションが確立された時にリモートネットワークノードに割り当てられた第1のステーション定義とは異なっているという決定に応答して、第1のセッションが失敗したということを決定(判定)する。
第2のセッションの確立の成功に応答して、STRAWサービス268は、テーブル内の識別されたチャンネルの各々を、自動的にオープンする(図18のブロック370)。
5.データストリームの処理
リアルタイムカーネル260は、他のネットワークノードからクライアントネットワークノードによって受け取られるデータストリームを処理するためのストリームハンドラのリモートコンフィギュレーションをサポートする。エリアサービス26から受け取られる命令に応答して、様々なサービスと、リアルタイムカーネル260における他の構成要素とが協力して、処理要素における方向付けられたグラフを、データストリームを処理するために使用されるストリームハンドラ内へと構築及び構成する。エリアサービス命令は、エリアサービス26によって管理される仮想エリアによってホストされている仮想エリアアプリケーションに従ってストリームハンドラを構成(又は設定)する。
図19は、エリアサービス26から受け取られるリモートストリームハンドリング命令に応答して、リアルタイムカーネル260の構成要素によって実現される一方法の一実施形態を示す。
図19の方法に従って、リアルタイムカーネル260は、1つか又は複数のストリームハンドリング命令から、リアルタイムストリームハンドラの仕様をパーズする(図19のブロック330)。このプロセス内において、STRAWサービス268が、ストリームハンドラを構成(又は設定)するためのSODA定義を、エリアサービス26から受け取る。STRAWサービス268は、該SODA定義を、接続及びサーバミックスマネージャ262と、エリア/ゾーンマネージャ264とに発送する。該接続及びサーバミックスマネージャ262は、1つか又は複数のストリームハンドリング命令から、入力ソース識別子と、出力シンク識別子と、1つか又は複数のデータ処理オブジェクトの各々におけるそれぞれの識別子とを、パーズする。
接続及びサーバミックスマネージャ262は、前記複数識別子のうちの幾つかの識別子のそれぞれに対応するリアルタイムストリームハンドリングオブジェクトをインスタンス化する(図19のブロック332)。接続及びサーバミックスマネージャ262は、そのインスタンス化されたオブジェクトを、トランスポートバス276に登録(又は記録)する。
トランスポートバス276は、仕様に従って、インスタンス化されたリアルタイムストリームハンドリングオブジェクトのうちの幾つかを含む方向付けられたグラフを生成する(図19のブロック334)。エリア/ゾーンマネージャ264は、オーディオ計算SODA定義を、該方向付けられたグラフ内における、指定されたオーディオ計算オブジェクトに対して送る。
STRAWサービス268は、入力ソース識別子に対応する入力ソースからリアルタイムデータストリームを受け取る(図19のブロック336)。STRAWサービス268は、リアルタイムデータストリームを、メディアサービス271に送り、該メディアサービス271は、該ストリームを処理して、それをトランスポートバス276に送る。トランスポートバス276は、ストリームハンドラの処理グラフ要素を順に実行して、リアルタイムデータストリームの指定処理を実施する。
ストリームハンドラは、出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する(図19のブロック338)。該結果データストリームは、次いで、クライアントネットワークノードのレンダリング構成要素に送られる。
6.リアルタイムカーネルのサービス及び他の構成要素
リアルタイムカーネル260の構成要素は、サービス、プラグイン、及びライブラリを含む。
a.コンプレッサ(Compressor)ライブラリ
Figure 2012511213
コンプレッサライブラリは、伝送データのための、オプションの圧縮レイヤを実現する。プロトコルヘッダか又はリンクネゴシエーション交換を圧縮することは意図されていない。
コンプレッサライブラリは、SODAチャンネルサービス270によって、及び、メディアサービス271によって、使用される。暗号化が設定される時には、これらのサービス270、271は、2つのコンプレッサインスタンスと、データが通るパイプチャンネルとを生成する。一方のコンプレッサインスタンスは送信用に使用され、他方のコンプレッサインスタンスは受信用に使用される。
コンプレッサライブラリは、バリアントごとに設定される圧縮/解凍プラグインを使用する。圧縮バリアントをネゴシエートして、それをコンプレッサに提供することは、サービス次第である。
b.オーディオストリームサービス(Audio Stream Service)
Figure 2012511213
幾つかの実施形態において、オーディオストリームサービス272は、Windows(登録商標)サービスDLLである。
オーディオストリームサービス272は、オーディオストリームミキシングを管理する。オーディオストリームサービス272は、オーディオプロセッシンググラフ要素(AudioComponentオブジェクトとしても呼ばれる)を生成し且つ設定(又は構成)するためのAPIsを画定する。該オーディオプロセッシンググラフ要素は、エリア/ゾーンマネージャ264によって操作される。オーディオストリームサービス272は、トランスポートバス276のクライアントである。全てのオーディオプロセッシンググラフ要素は、トランスポートバス276に登録(又は記録)される。
オーディオプロセッシンググラフ要素は、以下のAPIコールを介して、プラグインマネージャ266(PlugInMgr)通じて生成される。
PlugInMgr::APIEnumerate(guiPluginApi)
PlugInMgr::VariantEnumerate(guidIdentifier, guidPluginApi)
PlugInMgr::CreateInstance(guidIdentifier, guidPluginApi, guidVariant)
PlugInMgr::CreateInstance()APIの起動が、APIの所望バリアントのインスタンスを表すguidPluginをもたらす。
オーディオプロセッシンググラフ要素のために使用されるプラグインAPIsは、
AudioMix(オーディオミックス)
AudioSource(オーディオソース)
AudioInsert(オーディオインサート)
AudioSend(オーディオセンド)
である。コーラー(caller)が、バリアントを提供し、該バリアントは、オーディオストリームサービス272によって単に送られる。該バリアントは、仮想エリアアプリケーション内において画定(定義)されたものとして、オーディオプロセッシンググラフ要素の一実現形態を表す。オーディオストリームサービス272は、次いで、プラグインインスタンス(guidPlugin)をカプセル化するAudioComponentオブジェクト(オーディオ構成要素オブジェクト)を生成する。該AudioComponentは、プラグインマネージャ266を使用して、プラグインのメソッドにアクセスする。該オーディオストリームサービス272は、各オーディオAPIごとに、すなわち、
AudioMix(オーディオミックス)
AudioSource(オーディオソース)
AudioInsert(オーディオインサート)
AudioSend(オーディオセンド)
ごとに、コレクトタイプの導出AudioComponentを生成する。
AudioComponentオブジェクトは、トランスポートバス276に登録(又は記録)される。トランスポートバスAPIは、複数構成要素をグラフ内にリンクさせるために使用される。該AudioComponentAPIは、トランスポートバス276及びエリア/ゾーンマネージャ264の動作をサポートする。ベースクラスAudioComponentは、AudioSource(オーディオソース)のAPIとAudioSink(オーディオシンク)のAPIとを有し、それらAPIは両方とも、同じプラグインの態様である。
c.STRAWサービス
Figure 2012511213
(i)概要
いくつかの実施形態において、STRAWサービス268は、Windows(登録商標)サービスDLLである。
STRAWサービス268は、STRAWトランスポートプロトコルを実現する。該STRAWトランスポートプロトコルは、コネクションレス・トランスポート・プロトコル(例えば、UDP)上のネットワークノード間において、接続配向された暗号化された安全なソケット接続を可能にする。STRAWトランスポートプロトコルは、固定長のグローバル固有識別子(GUIDs)を用いて、全記録と、該記録内の全フィールドタイプとを識別する。例えば、幾つかの実施形態において、ネットワークノード(又はステーション)が、IP_Address(IPアドレス)及びPort(ポート)によって画定される。これらの実施形態において、STRAWステーション識別記録は、下記GUIDsすなわち{GUID1、GUID2、GUID3、GUID4、GUID5、GUID6}のセットによって、特定のネットワークノードを画定する。ここで、
●GUID1は、STRAW記録を、SODA記録として識別する。
●GUID2は、STRAW記録を、ネットワークノード識別記録として識別する。
●GUID3は、IPアドレスフィールドタグである。
●GUID4は、ネットワークノードのIPアドレスである。
●GUID5は、ポート番号フィールドタグである。及び、
●GUID6は、ネットワークノードのポート番号である。
これらの実施形態において、ステーション識別記録は、小さなサイズに容易に圧縮可能なバイナリデータからなる。幾つかの実施形態において、フィールドタグを省くことによって、1つか又は複数のSTRAW記録のサイズを、更に低減することができる。これらの実施形態において、STRAW記録の送り手(トランスミッタ)と受け手(レシーバ)との両方が、STRAW記録のフォーマットを知るので、任意のフィールドタグを参照することなく、フィールド値の意味が知られることとなる。
図20を参照すると、STRAWサービス268は、トランスポートストリーム342上のセッション340を管理する。幾つかの実施形態において、STRAWセッションのコンテキスト内のストリームは、{IP、ポート}アドレスの対(ペア)とトランスポートGUIDとによって画定される。あるセッションは、零か又は1つ以上の論理チャンネルからなり、ここで、あるチャンネルは、特定のカーネルマネージャ(例えば、So3Dグラフィックスエンジン274、接続及びサーバミックスマネージャ262、及びエリア/ゾーンマネージャ264)に適切な記録のシーケンスである。複数のカーネルマネージャが、チャンネルごとに識別(又は区別)されて、同じストリームから記録を受け取ることができる。
STRAWサービス268は、2種類のチャンネルを管理する。すなわち、ストリーミングデータ(例えば、オーディオ)を含むメディアチャンネルと、定義(又は命令)のSODA記録を含むSODAチャンネルと、を管理する。STRAW記録は、ストリーム上のSODA記録とメディア記録とをカプセル化する。STRAW記録は、暗号化され、シーケンス化され、メッセージ整合性フィールドを含む。該シーケンスは、記録ソースか又は目的から独立している、すなわち、それは、順序狂い(又は故障)か又は記録失敗を検出するために使用されるリンクレベル機能である。
STRAW記録は、チャンネルごとに識別される。GUIDsが、チャンネル識別子として使用される。SODA及びメディア記録は、STRAW記録カプセル化にかかわりなくストリームとして、チャンネルレベルにおいて圧縮され得る。各SODA記録は、1つか又は複数のSODA定義344を含む。SODA定義の例は、処理グラフ要素(例えば、AudioMix(オーディオミックス)及びAudioEffect(オーディオエフェクト))、3Dレンダリングアセット(例えば、テクスチャ及びメッシュ)、及びRDS(例えば、アバターモーションチェックポイント)を含む。各メディア記録は、1つのメディアパケット346を含む。メディアパケットの例は、オーディオコーデック及びテキストを含む。
アプリケーションは、周知のGUID IDを用いて、セッションに関するチャンネルを公開する。カーネルマネージャが、チャンネルを認可する。公開/認可モデルは、コネクションレスである。チャンネルを認可したカーネルマネージャは、チャンネル状態変化の通知と、チャンネル記録とを、(それらが到来した時に)受け取ったことを登録(又は記録)する。
(ii)ストリーム、対、セッション、対、チャンネル、対、記録(レコード)
STRAWセッションのコンテキスト内において、ストリームは、2つのIPアドレス/ポート対(ペア)及びトランスポートGUIDによって画定された2つのネットワークノード間の双方向UDPソケットである。ストリームは、チャンネルのセッションをサポートする。セッションは、論理的なノード・ツー・ノードの接続である。セッションは、2つのノードのためのチャンネルを伝送する。セッションは、1つか又は複数のプロキシステーションを通過することができ、複数セッションを含めることが可能なストリーム上にわたって伝送される。
チャンネルは、セッション内において2つのネットワークノード間においてSODAか又はメディア記録を伝送する論理的な構成体である。チャンネルは、信頼性があるものとすることができるか又は信頼性が無いものとすることができ、圧縮され得るか又は非圧縮にされ得る。チャンネルのコンテンツは、コンテンツGUIDによって識別される。チャンネル記録は、同じヘッダCHANNEL_CLIENT IDを共有するSTRAW記録のシーケンス内において、及び、シーケンシャルなパケット番号と、MACフィールドと共に、伝送される。MAC計算は、一方向のみにおける所与のチャンネル上のパケットシーケンスに依存する。単一チャンネル上において伝達される全記録は、コンフィギュレーションパラメータの単一セット(例えば、{Client、reliable、compressed})を共有する。単一チャンネル上の記録は、シリアルストリームとして圧縮される。信頼性がある(信頼可能な)チャンネルのみが、通常、圧縮され得る。幾つかの実施形態において、信頼性の無い(信頼不可能な)チャンネルは、各キーフレームにおいて圧縮を再開する圧縮プロセスによって、圧縮され得る。信頼性が無いチャンネル上において消失パケットがあるケースでは、そのチャンネル上の記録は、キーフレームが到着されるまでに破棄される(何故ならば、それらは、順序が狂った状態で解凍されることが不可能であるからである)。
圧縮は、Compress.libを使用する。圧縮を改善するために、チャンネル定義には、プリロードデータを含めることができる。該プリロードデータは、コンプレッサを通じて実行されるが、伝達はされない。その目的は、共通のフレーズを有した圧縮状態テーブルを準備することである。キーフレームが受け取られるたびごとに、圧縮状態テーブルはリセットされて再構築される。
Figure 2012511213
(iii)SODA記録
SODA記録は、イニシャルGUID IDと、1つか又は複数のSODA定義とを有したネスト化された構造である。SODA定義は、定義タイプと、定義長と、1つか又は複数のフィールドとを有する。該定義タイプは、周知のGUID(例えば、guidAsset)である。該定義長は、フィールドの全長を示す。フィールドは、タイプ指定固定フィールドと、ネスト化されたSODA定義との組み合わせである。すなわち、
SODA記録:
guid ID
SODA定義
...
SODA定義:
Guid定義タイプ
long length;
[フィールド]−定義タイプに依存
フィールド:
固定フィールド
又は SODA定義
例えば、
Figure 2012511213
SODA記録が、STRAW記録内においてカプセル化される。すなわち、
Figure 2012511213
(iv)チャンネル信頼性及びリンクレベルプロトコル
STRAW記録は、番号付けられ、チャンネルIDを含む。パケットを受け取った後に、及び、短時間の遅延の後、そのトランスポートは、各チャンネルごとの次に期待されるパケットの番号を含むACK(肯定応答)記録を送って、それにより、送り手(センダー)が、伝達した記録が受け取られたことを確認することができるようにし、及び、ローカルリソースを解放することができるようにする。周期的な送信の他に、このACKに対する信頼性機能は存在しない。ほとんど全ての記録がうまく受け取られると仮定すると、このスキームは、信頼性のために最小のネットワークリソースを用いる。
MACフィールドが、伝達される各STRAW記録ごとに計算される。それは、受け取り時にチェックされる。
信頼性のある(信頼可能な)チャンネルについて:
もしもチャンネル内の記録が、順序が狂って受け取られた場合には、その失敗した記録に対するNACK(否定応答)が伝達される。MAC障害もまた、NACKが結果として生じられ、該NACKは、期待される記録に対して伝達される。単一記録に対して、最大で4つまでのNACKが許可され、次いで、このトランスポートは、失敗メッセージを、任意の認可カーネルマネージャに対するキューに入れて、そのチャンネル定義を消去する。
信頼性の無い(信頼不可能な)チャンネルについて:
もしもチャンネル内の記録が、順序が狂って受け取られた場合には、その失敗したパケット番号が、チャンネルに対して認可した任意のマネージャに対して信号で伝達され、NACKは送られない。MAC障害もまた、失敗したパケットとして、チャンネルを許可した任意のカーネルマネージャに対して指示されて、NACKは送られない。失敗したパケットに対する閾値は存在せず、チャンネルは、そのトランスポートによって決して閉じられない。
チャンネルを「閉じる」必要性は無い。全てのカーネルマネージャが認可しない場合には、チャンネル上のデータ送信が停止する。チャンネルは論理的なエンティティであるため、オペレーティングシステムリソースは使用されない。
(v)公開/認可
STRAWサービス268は、ローカル公開及び認可エントリのリストを維持する。各エントリは、
エントリを生成したローカルマネージャと、
サーバ識別子と、
チャンネル識別子と、
公開又は認可と、
(認可のための)トランスポートパラメータ
とを含む。
このリストは、{STRAW Service, GUID_NULL, Session, Subscribe, Reliable, Uncompressed}によって初期化される。
このようにして、STRAWサービス268は、任意のセッションチャンネル上に到来する、全ての到来SODA記録を認可する。これらは、公開及び認可定義を含む。GUID_NULLチャンネルは、決して公開されず、全ストリーム毎の周知のチャンネルIDによって許可されることとなる全てのサーバによってみなされる。
STRAWサービス268はまた、ローカルリスト内に遅れた認可が登録されるケースにおいて使用されるために、全ての到来した公開定義のテーブルを維持する。
{IDCliant, IDServer, IDChannel}
ここで、IDCliantは、チャンネルが意図されるある特定クライアントの(おそらくは零(NULL)の)GUIDであり、IDServerは、チャンネル記録のリモートソースであり、及びIDChannelは、チャンネルの、チャンネルの周知のGUIDである。
別のステーションに対する所望の接続についてのセッション定義をSTRAWサービス268が受け取った時には、STRAWサービス268は、ストリームを確立し、そのセッション定義を送り、次いで、セッションチャンネル上においてSODA記録内の全てのローカルテーブル公開エントリを送る。公開定義がSTRAWサービス268に到着した時には、STRAWサービス268は、その定義を、公開定義テーブル内へと入力し、次いで、公開記録内の一致チャンネルIDを有したローカルリスト内の各認可エントリごとにセッションチャンネル上において認可定義を送る。認可定義が到着した時には、STRAWサービス268は、その定義についてのSODA記録を含むSTRAW記録として所与のチャンネル上において(公開アプリケーションからパイピングされる)定義更新(アップデート)を送りはじめる。記録は、複数チャンネル上において送られ得る。
カーネルマネージャが、サーバとのチャンネル内に参加することを望む時には、カーネルマネージャは、任意のSTRAWストリームが任意のサーバに存在するのか否か、認可リクエストを画定する。もしも仮想エリアアプリケーションが後に公開する場合には(すなわち、後続ストリームが確立される場合には)、ローカルテーブル内の変化が、テーブル内の公開エントリの再送をトリガする。該ローカルテーブル内の変化は、リンクの他方端において認可する任意の潜在物(latent)を自動的にトリガする。カーネルマネージャが後に認可し、且つ、公開テーブル内にエントリが存在する場合には、STRAWサービス268は、認可リクエストを自動的に送る。このプロセスは、リンク上にチャンネルデータが送られることがレシーバ(受け手)によって望まれた場合にのみ、リンク上にチャンネルデータが送られるということを保証する。
(vi)チャンネル記録発送
STRAW記録は、それらが到着すると(暗号が)解読される。もしも有効である場合には、それらの埋め込まれた記録が解凍され、次いで、全ての認可するカーネルマネージャに発送される。ローカル認可エントリのリストが調査されて、(認可トランスポート情報内の)チャンネルIDに一致する全エントリが、それらのメッセージキュー上の記録のコピーを受け取る。
認可するカーネルマネージャは、メッセージが処理されると、該メッセージを解放する責任を負う。メッセージのバルクデータ部分はコピーされないが、STRAW記録を含んでいるオリジナルネットワークバッファを指示(ポイント)する。各カーネルマネージャは、メッセージを解放し、それにより、それらメッセージが全て解放された時に、ネットワークバッファが、リサイクルされ得ることとなる。
(vii)STRAWストリームの確立
クライアントネットワークノードは、ストリーム上のセッションを、サーバ及びピアネットワークノードに接続する。このプロセス内において、各パーティは、自身が本物であることを他に対して認証する。
STRAWストリームは、信頼性があり且つ確実なものである。このことは次のことを意味する。すなわち、
●クライアントネットワークノードは、パートナーの正体(アイデンティティ)を確信している。
●メッセージは、個人用(プライベート)である。
●受け取ったメッセージは、送られた(どこかの中間地点で変更を受けていない)保証できるメッセージである。及び、
●同じやり方で、両パーティによってメッセージが解釈されることが可能であろう。
セッション定義の一部は、ストリームトランスポートプラグインGUIDsのリストである。定義に応答するクライアントネットワークノードが、少なくとも1つのGUIDsをサポートする場合には、該クライアントネットワークノードは、プラグインをロードして、セッションを確立するために該プラグインを使用する。定義を生成するサーバは、含まれる各クライアントネットワークノードのサポートリストを調査することができ、及び、定義内に含めるトランスポートプラグインGUIDを決定することができる。
セッション定義の一部は、ストリーム暗号化プラグインGUIDsのリストである。定義に応答するクライアントネットワークノードが、少なくとも1つのGUIDsをサポートする場合には、該クライアントネットワークノードは、プラグインをロードして、セッションを暗号化するために該プラグインを使用する。定義を生成するサーバは、含まれる各クライアントネットワークノードのサポートリストを調査することができ、及び、定義内に含めるストリーム暗号化プラグインGUIDを決定することができる。
(viii)サーバストリーム
幾つかの実施形態において、クライアントネットワークノード344からサーバ346へのストリームは、ディレクトリサーバか、マップサーバか、又はエリアサーバなどのサーバから取得されるアドレスを用いて確立される。ストリームの例示的な目的は、プレゼンス情報を得ることと、マップサーバからのレンダリング定義を用いてパブリック空間をレンダリングすることと、及び、エリアサーバからのレンダリング定義を用いて仮想エリアをレンダリングすることと、を含む。
図21は、一方法の一実施形態を示しており、該方法によって、クライアントネットワークノード344とサーバ346との間において、サーバストリームが確立される。この方法に従って、クライアントネットワークノード344は、クライアント認証情報(クレデンシャル)とストリームIDとを、サーバ346に対して送る(図21のブロック348)。サーバ346は、サーバ認証情報(クレデンシャル)とプリ・マスター・シークレットとで返答する(図21のブロック350)。ストリーム生成時に、接続するクライアントネットワークノード344が、暗号セットをネゴシエートして、次いで、その識別トークンを提示することによって本物であることを認証する(図21のブロック352)。サーバ346は、クライアントネットワークノード344にとって適切なサーバトークンを提示する(ストリームIDにより選択されて、及び、アカウントサーバによりサーバ346に伝達される)(図21のブロック354)。
(ix)クライアントストリーム
図22を参照すると、各セッションが、発行サーバによって生成される新たなGUIDによって識別される。ストリーム内に含まれるネットワークノードは、セッション定義を通知され、及び、セッションGUIDのハッシュと、ストリーム暗号化キーとしてのクライアントIDとを用いて、各ネットワークノードはその他のものと伝達し合う。図22内に示された例示的な実施例において、エリアサーバ356が、2つのクライアントネットワークノード358と360との間のセッションを画定する。クライアントネットワークノード358、360の各々は、エリアサーバに対して本物であることを認証して、(セッション定義を含めて)定義を伝達するために、暗号化したチャンネルを使用する。クライアントネットワークノード358、360にとって、いかなる更なる認証の情報も互いに共有する必要が無い。クライアントネットワークノード358、360の各々は、それぞれのGUIDを用いて、サーバ346によって識別される。各セッション定義は、クライアントネットワークノード358と360との両方を、それらのGUIDsによって識別する。セッション上において公開するチャンネルを決定するために、クライアントネットワークノード358、360は、この情報を使用することができる。
クライアントネットワークノード358、360のうちの一方について、ストリームか又はセッションが失敗した場合には、そのクライアントネットワークノードは、SessionFailureSODA定義を用いて、その失敗を、エリアサーバ356に通知する。失敗の理由には、例えば、互換性のあるトランスポートが無かったためと、利用可能なチャンネルが無かったためと、信頼性のある(信頼可能な)チャンネルが失敗したためと、が含まれる。幾つかの実施形態において、エリアサーバ356は、ストリームを再ルーティングすることを試みることによって(例えば、プロキシか又はサーバを通じてオーディオストリームを反射(又は反映)させることによって)、SessionFailureSODA定義に応答する。
幾つかの実施形態において、クライアントネットワークノード358、360は、(STUNに省略される)シンプル・トラバーサル・オブ・UDP・スルー・ネットワーク・アドレス・トランスレータズ(NATs)ネットワークプロトコルに従って、P2Pで伝達を行う。これらの実施形態において、クライアント358、360は、それぞれのNATsを通じて動作する。サーバ(例えば、エリアサーバ356)は、STUNサーバとして振る舞い、NATsの公衆側のネットワーク内の2つのIPアドレスに耳を傾け、NATsの外側におけるマッピングされたIPアドレス及びポートを報告する。この情報から、クライアントネットワークノード358、360は、プレゼンスと特定タイプのNATとを見出すことができ、及び、マッピングされた(外部の)IPアドレス(NATアドレス)と、リモートホストに対する、クライアントのUDP接続について、NATが割り当てたポート番号とを取得することができる。クライアントネットワークノード358、360は、次いで、外部IPアドレスを使用して、UDPプロトコルに従って互いにP2Pで伝達し合う。STUNプロトコルに関する追加的な詳細事項を、Jonathan Rosenberg他による「STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)」,インターネット標準化への提唱 RFC 3489 (2003年3月)から得ることができる。
(x)キープ・アライブ(Keep-Alive)
幾つかの実施形態において、ストリームが確立されると、クライアントネットワークノード上のトランスポートが、周期性アイドルのStreamKeepAlive定義を発行する。パートナーネットワークノードは、許容可能な最大インターバルであると見積もるタイムアウトセットであれば何でも、該タイムアウトセットでStreamKeepAlive定義を返す。このメッセージの目的は、任意のNATファイアウォール・ピンホールをアクティブのまま保持することである。パートナーネットワークノードは、所望のタイムアウトを記録し、及び、該インターバルを毎回延ばす。次のメッセージが、異なるIP及びポートから到来した場合には、NATは、タイムアウトされて、該キープアライブによって新たなピンホールが生成されることとなる。該インターバルは、従って短くされるはずである。
アイドルタイマーが期限切れとなり且つメッセージが受け取られなかったためか、或いは、キープアライブメッセージに対して返答が受け取られなかったためかのいずれかの理由により、StreamKeepAliveが失敗していることに、クライアントネットワークノードか又はパートナーネットワークノードのいずれかが気づいた場合には、それは、非常に短いタイムアウトを有した即時StreamKeepAliveを発行する。これは、ドロップしたステーションとドロップしたUDPパケットとを区別するためである。何回かの再試行(リトライ)が試みられ得る。該再試行の後に、返答が受け取られない場合には、失敗したセッションID(複数可)を有したローカルStreamFailureイベントが生成されて、そのストリーム定義が削除される。
幾つかの実施形態において、STRAWサービス268は、自動的にリンクの再確立を行うことによって、及び、アプリケーション(又はクライアント)の介入無しに、ローカル公開及び認可テーブルエントリに基づいて、全ての認可及びデータフローを再リンクさせることによって、壊れたリンクに応答する。
f.メディアチャンネルサービス
Figure 2012511213
幾つかの実施形態において、メディアチャンネルサービス271は、Windows(登録商標)サービスDLLである。
メディアチャンネルサービス271は、音声(オーディオ)とテキストチャットとを確実にP2Pで伝達させるために用いられる。メディアチャンネルサービス271は、ストリームを圧縮するよう設定されていれば、そのようにすることとなる。コンプレッサライブラリは、リクエストされると圧縮を遂行する。メディアチャンネルサービスは、バリアントにより設定されたオーディオコーデックプラグインを用いる。バリアントGUIDは、ストーム定義から取得される。
g.SODAチャンネルサービス
Figure 2012511213
幾つかの実施形態において、SODAチャンネルサービス270は、Windows(登録商標)サービスDLLである。
SODAチャンネルサービス270は、SODA定義を確実にP2Pで伝達させるために用いられる。SODAチャンネルサービス270は、ストリームを圧縮するよう設定されていれば、そのようにすることとなる。コンプレッサライブラリは、リクエストされると圧縮を遂行する。これは、データ構造がネットワークバイト順序に変換される場所である。幾つかの実施形態において、リトルエンディアン(インテル)ネットワークバイト順序が用いられる。
h.接続及びサーバミックスマネージャ
Figure 2012511213
幾つかの実施形態において、接続及びサーバミックスマネージャ262は、Windows(登録商標)サービスDLLである。
幾つかの実施形態において、接続及びサーバミックスマネージャ262は、ローカル会議スケジューリングツールのために利用可能な、手続きの(プロシージャの)APIをエクスポートして、エリアサーバとのセッションを開始する。このAPIは、セッションを生成するためのイニシャルエントリポイントである。接続及びサーバミックスマネージャ262は、アクティブセッション定義を公開(又は発行)する。エリアサーバは、SODAチャンネル上において、該セッション定義を受け取る。
接続及びサーバミックスマネージャ262はまた、オーディオグラフプロセッシング要素からオーディオグラフを構築する。該オーディオグラフプロセッシング要素は、SODA記録を介して直接的にか、或いは、VSDLスクリプトを介して間接的に、のいずれかで、エリアサービス26によって設定(又は構成)される。任意のケースにおいて、SODA定義は結果である。幾つかの実施形態において、接続及びサーバミックスマネージャ262は、エリアサービス26によって送られた以下のSODA定義を処理する。
●AudioDevice(オーディオデバイス)
●AudioStream(オーディオストリーム)
●AudioMix(オーディオミックス)
●AudioEffect(オーディオエフェクト)
●AudioCalculation(オーディオ計算)
●AudioRecord(オーディオ記録)
●AudioPlayback(オーディオ再生)
これらのSODA定義は、以下のパラグラフ内において説明される。
AudioDeviceは、AudioSource(オーディオソース)として、(トランスポートバス276の構成要素である)オーディオトランスポートバスに登録(又は記録)されることとなるローカルオーディオデバイスの定義である。標準ローカルオーディオソース(マイクロホン、ヘッドセット)か又は登録されたローカルオーディオ記録(ファイル、ストリーミングCDオーディオ)の周知IDが、インスタンスID(複数が利用可能であるのであればそのヘッドセット)と共に提供される。オーディオトランスポートバス上で使用されるために新たなIDがデバイスに提供される。接続及びサーバミックスマネージャ262は、周知のオーディオソースIDを用いて、AudioDeviceプラグインの適切なバリアントのインスタンスを作成して、それをオーディオトランスポートバスに渡す。
AudioStreamは、AudioSource(オーディオソース)として、オーディオトランスポートバスに登録されることとなる到来するオーディオストリームの定義である。到来するオーディオストリームは、伝送されるチャンネルIDによって画定される。(エリア/ゾーンマネージャ264によって行われる)動的ミキシングの目的のために、ストリームをアバターIDに関連付けることが必要である。デバイスは、そのオーディオトランスポートバスIDとして、チャンネルIDを使用する。接続及びサーバミックスマネージャ262は、チャンネルタイプIDに基づいてAudioStreamプラグインの適切なバリアントのインスタンスを作成して、それをオーディオトランスポートバスに渡す。
AudioMixは、AudioSourceプラグインとAudioSinkプラグインとの組み合わせの定義である。該定義は、プラグインAPI ID、バリアントID、1つか又は2つのオーディオトランスポートバスソースIDs、及び(エリア/ゾーンマネージャ264について)関連付けられたアバターIDを、完全に指定する。接続及びサーバミックスマネージャ262は、提供されたIDsに基づいて、AudioMixプラグインの指示バリアントを生成して、それをオーディオトランスポートバスに渡す。
AudioEffectは、AudioSourceプラグインとAudioSinkプラグインとの組み合わせの定義である。該定義は、プラグインAPI ID、バリアントID、1つのオーディオトランスポートバスソースIDs、及び(エリア/ゾーンマネージャ264について)関連付けられたアバターIDを、完全に指定する。接続及びサーバミックスマネージャ262は、提供されたIDsに基づいて、AudioEffectプラグインの指示バリアントを生成して、それをオーディオトランスポートバスに渡す。
AudioCalculationは、AudioCalculationプラグインの定義である。該定義は、プラグインAPI ID、バリアントID、関連付けられたオーディオトランスポートバスAudioSourceオブジェクトID、構成要素の自身のオーディオトランスポートバスID、及び2つの状態指定パラメータを、完全に指定する。AudioCalculationオブジェクトは、オーディオチェーン(鎖)内においてオーディオデータを直接処理していない。その代りに、AudioCalculationオブジェクトは、「ドメインオブジェクトモデル」、手動設定(HUD内のミュート、ボリューム制御)などの外部情報、アバター位置及び動作(モーション)、リバーブ空間、及びWindows(登録商標)設定(インスタンスのためのコントロールパネル内のスピーカ選択)に基づいて、他のオーディオグラフ構成要素のための設定(セッティング)を計算する。AudioCalculationオブジェクトは、通常のオーディオレンダリングに比べるとまれな、異なるレンダリングタイマーイベント上において実行される。これは、それらが計算のための入力として使用するデータが、ゆっくりと変化するからである。接続及びサーバミックスマネージャ262は、提供されたIDsに基づいて、AudioCalculationプラグインの指示バリアントを生成して、それをオーディオトランスポートバスに渡す。
AudioRecordは、AudioSinkプラグインの定義である。該定義は、オーディオグラフ内のポイントを、記憶装置構成要素にリンクさせる。レンダリング時において、AudioRecord構成要素は、レンダリング自体をトリガしない。しかしながら、別のAudioSink構成要素によってレンダリングがトリガされた場合には、そのレンダリングされるオーディオデータは、指示された記憶装置構成要素に転送するためにAudioRecordオブジェクトに提供される。接続及びサーバミックスマネージャ262は、AudioSinkクプラグインを生成して、それをオーディオトランスポートバスに渡す。
AudioPlaybackは、AudioSourceプラグインの定義である。該定義は、オーディオグラフ内のポイントを、記憶装置構成要素にリンクさせる。オーディオチェーン(鎖)が、この構成要素を参照する場合には、フレーム準備時間において、1つのタイムスライスに値するオーディオデータが、記憶装置構成要素からフェッチされて、この構成要素の出力として提供される。接続及びサーバミックスマネージャ262は、AudioSourceプラグインを生成して、それをオーディオトランスポートバスに渡す。
接続及びサーバミックスマネージャ262は、エリアサーバから受け取った定義に従って、トランスポートバス276とオーディオストリームサービス272とを設定する。各定義は、(オーディオストリームプラグインか、オーディオ計算プラグインか、又はオーディオソースプラグインである)オーディオプロセッシンググラフ要素の作成を結果として生じさせる。ローカルオーディオデバイス(例えば、マイクロホン、スピーカ(複数可)、及びSkypeオーディオ)は、HIDコンフィギュレーションツールを通じて選択された設定(セッティング)に従って構成(又は設定)され得る。該HIDコンフィギュレーションツールによって、ユーザが、3D共同空間をナビゲートするためにキーボード及びマウスオプションを選択することが可能になる。例えば、ショートカットキーを定義することができ、マウスジェスチャーが、アバターの振る舞いに跳ね返る(バウンドする)。幾つかの実施形態において、オーディオ出力選択は、オーディオ及び音声のための、Windows(登録商標)コントロールパネル「サウンドとオーディオデバイス」設定に従う。このことは、通常のVOIP会話に対して使用されるのと同じオーディオ設定が、仮想エリア通信に対しても使用されるということを保証する。
エリアサーバセッショントランスポート失敗のイベントでは、接続及びサーバミックスマネージャ262は、回復を試みる。それは、セッションを壊して、異なるエリアサーバ上にそれを再ランチさせる。メディアストリーム失敗のイベントでは、接続及びサーバミックスマネージャ262は、回復を試みる。このプロセスでは、接続及びサーバミックスマネージャ262は、クライアントネットワークノードに再接続することを試みる。該再接続の試みが失敗した場合には、接続及びサーバミックスマネージャ262は、エリアサーバに対して聞き取り不可能として通信者状態を画定する。
(i)エリア/ゾーンマネージャ
Figure 2012511213
幾つかの実施形態において、エリア/ゾーンマネージャ264は、Windows(登録商標)サービスDLLである。
エリア/ゾーンマネージャ264は、ゾーン定義及びアバター位置定義に従って、オーディオストリームサービス272ミックスパラメータを調整する。エリアサービス26は、SODA定義を、エリア/ゾーンマネージャ264に公開(又は発行)し、該SODA定義は、そのアバターのモーションに応答するオーディオプロセッシンググラフ要素に各アバターを関連付ける。アバター位置データが使用されて、仮想エリア内に参加しているクライアントネットワークノードの各々からのオーディオストリームが(各通信者が、ローカルゾーン定義に従って、正しいオーディオ位置において正しいボリュームで他の通信者を聞くことが可能になるという手法において)ミックスされる。オーディオプロセッシンググラフ要素に提供されるパラメータ値は、典型的には、(相対位置、通信者の配向、ゾーン定義、仮想エリアのオーディオ特性、及び、通信者によって設定される手動設定(例えば、ミュート、ボリューム)を含む)計算に依存する。
幾つかの実施形態において、エリア/ゾーンマネージャ264は、以下のSODA定義を処理する。該SODA定義は、シミュレートされるオーディオ空間の全体的(グロス)特徴に関連する。該シミュレートされるオーディオ空間内において、現在のオーディオグラフがレンダリングされている。
●AudioReverb(オーディオリバーブ)
●AudioAperture(オーディオアパーチャ)
●AudioObstruction(オーディオ障害物)
これらのSODA定義が、以下のパラグラフ内において説明される。
AudioReverbは、「空洞(中空空間)」であるリバーブ空間の定義であり、それにより、あるリバーブ(残響)か又はエコーエフェクトを生じる結果となる。該定義は、ある位置での単一ジオメトリを識別する。この定義は、ドメインオブジェクトモデル(DOM)内に、全てのAudioCalculationオブジェクトに対して、それらAudioCalculationオブジェクトが呼び出された時に、提供される。
AudioApertureは、2つのリバーブ空間の間の接続の定義である。それは、2つのリバーブ空間をIDにより識別して、それらの間のオーディオ接続を指定する。ある位置及び配向において、該接続は円(輪)である。この定義は、ドメインオブジェクトモデル(DOM)内に、全てのAudioCalculationオブジェクトに対して、それらAudioCalculationオブジェクトが呼び出された時に、提供される。
AudioObstructionは、音の伝搬に対する物理的なバリアの定義である。ある位置において、それは球としてモデル化される。この定義は、ドメインオブジェクトモデル(DOM)内に、全てのAudioCalculationオブジェクトに対して、それらAudioCalculationオブジェクトが呼び出された時に、提供される。
上述のSODA定義は、AudioCalculationオブジェクトに対する入力であり、それらは、スクリプトにすることが可能な計算プラグインであり、以下のパラメータを、すなわち、
サウンドソースとサウンドシンクとの両方の物理特性、
ソース及びシンクについてのゾーン定義、
手動設定(個別のミュート、ボリューム/AGC)、
環境設定(グローバルなミュート、ボリューム)、及び、
部屋のオーディオ特性
を、引数として取得する。
初期のAudioCalculationプラグインは、次のものを含む。すなわち、
Manual Mute(手動ミュート)、
Manual Volume(手動ボリューム)、
Location(位置)、
Doppler shift(ドップラーシフト)、
Orientation(配向)(正面を向いている/外を向いている)、
Zone(ゾーン)、及び、
Room Reverb(部屋の残響)
を含む。
幾つかの計算は、個々のオーディオソースにとって適切であり、幾つかの計算は、部屋全体の最終ミックスにとって適切である。仮想エリアアプリケーションは、新たなプラグインを、オーディオ定義内においてそれらを参照することにより、自由自在に導入することができる。エリア/ゾーンマネージャ264は、それが所有していないプラグインを認可することとなり、エリアサーバからそれらの定義を受け取ることとなる。
Figure 2012511213
図23は、4人の通信者のオーディオプロセシンググラフ380の一例を示す。該オーディオプロセシンググラフ380は、エリアサーバアプリケーションによって指定され得る。オーディオプロセッシンググラフ要素(例えば、コーデック、ネットワーク、フィルタリング、特殊エフェクト、及びエラー隠蔽グラフ要素)は、(それらは典型的には、完全なオーディオプロセッシンググラフ内に存在するが)単純化のため、この例では除外されている。
矢印382、384、386、388、390は、AudioSourceを表しており、それらは、全てドライモノラルオーディオソースである。アバター1、2、及び3は、リモートクライアントネットワークノードからのネットワークストリームである。ささやき声は、指定ソースからの、オプションのローカルオーディオフィードである。オーディオ・パンナーズ(又はスクロールする音声)の左側の全ては、加えられる一連のエフェクトを有したモノラルである。これらのエフェクトは、ゾーン及びスピーカ配向に従ってボリュームを調整することと、スピーカとリスナーの相対速度の根拠となるドップラーシフトを提供することと、を含む。オーディオ・パンナーズ(又はスクロールする音声)は、各々の調整されたモノラル信号を、仮想エリアにおける現在占有されたゾーンの360度オーディオ空間内に位置付ける。リスナーに相対するスピーカの位置が使用される。オーディオ・パンナー(又はスクロールする音声)の右側の全体が、5.1オーディオである。部屋オーディオプロセッシンググラフ要素は、オーディオ信号に関する部屋音響特性(又は部屋音響効果)のエフェクトを計算する。それは、スピーカ及びリスナーの位置、部屋の特性、及び障害物を考慮する。最終的なミックスオーディオプロセッシンググラフ要素は、全ての処理したオーディオ信号を一緒に追加して、結果ストリームを生成する。該結果ストリームは、指定されたオーディオ出力デバイス(すなわち、SPKR。該SPKRは、図示された例の中のローカルなスピーカ(複数可)を表す)に対してパイピングされる。
幾つかのオーディオプロセッシンググラフ要素(inserts)は、固定パラメータを有するものであり、従って、どのランタイム計算プラグインスクリプトにも関連付けられない。これらの要素は、エコー及びノイズキャンセル、自動利得制御(AGC)、サイレンス検出、固定ソースパンナー、及び最終ミックスを含む。
j.アセットキャッシュサービス
Figure 2012511213
幾つかの実施形態において、アセットキャッシュサービス275は、Windows(登録商標)サービスDLLである。
アセットは、GUIDによってインデックス付けられたローカルデータベース内か又はテーブルサービス内に記録される。アセットデータは、不定形記憶装置プール内に保持される。特定アセットに関するIDは、決して変化しない。従って、如何なるキャッシュ一貫性問題も回避される。アセットは、SODA記録によってキャッシュされる。このことは、大きなアセットを、多くの部分(ピース)において格納することができるということを意味する。何故ならば、SODA記録は、UDP MTU(約1000バイト)にサイズが制限されるからである。アセットキャッシュは、GUIDによって、及び、SODA記録内にファイリングされているデータオフセットによって、記録をインデックス付けなければならない。
(i)アセットインデックス
アセットは、クラステーブル内において、及び、オプションの属性テーブル内において、表される。
アセットクラステーブルは、アセットGUIDを、クラスGUIDと、データ格納参照とにマッピングする。
Figure 2012511213
アセット属性テーブルは、タグ付けされた属性スカラー値を、アセットに対して添付する。
(ii)データ格納(記憶)
レンダリングプラットフォームに基づく仮想エリアのアセット記憶装置インターフェースは、データを積み重ねること(heaping)と、トランザクション的に別個インデックスを格納することと、未使用のアセット記憶装置を再使用するためにスカベンジングすることと、を可能にする。データベースとファイルとの組み合わせは、アセット記憶装置としての機能を果たすこととなる。データベースは、2つのテーブルを含む。すなわち、記憶装置(又は記憶)割り当てテーブルと、GUID/オフセットインデックスとを含む。前記ファイルが、設定されたキャッシュサイズに従って固定サイズで生成される。アセットが、ヒープ・バケット(heap-bucket)アルゴリズム用いてファイル内に格納される。
アセットキャッシュデータ格納は、GUID及びオフセットによって、インデックス付けられることとなる。前記ヒープ(積み重ね)は、2つの中に、データサイズごとにバケット内へとパーティションに分けられる。最小バケットは、32バイトであり、最大バケットは、2キロバイトであり、それらは総計で7バケットにされる。各バケットは、同量の記憶装置(又は記憶量)が割り当てられ、このことは、各連続するバケット内に半分ほどのアイテムが存在するということを意味する。各バケットは、記憶バジェットを満たすために十分なアイテムをハッシュするのに十分に大きいヒープテーブルであり、このことは、ハッシュコリジョンの変化を合理的に小さくさせる。
(iii)SODAアセット定義記録
アセットは、伝送のために、SODA記録内にカプセル化される。定義は、アセットGUIDと、そのコンテンツ(体系化されていないデータ)と、(もしもそれが1記録(1レコード)よりも大きい場合には)そのオフセットと、属性のテーブルと、を含む。アセットをカプセル化するSODA記録は、記憶装置システムに対する如何なる参照も決して含まない。
Figure 2012511213
オフセット及びデータフィールドは、それらが1記録(1レコード)にそれらが一致するまで長く繰り返され得る。
アセットについてのクレリは定義である。
Figure 2012511213
アセットは、ある定義を用いて忘れ去られる。
Figure 2012511213
(iv)属性ヒエラルキ
アセットは、属性を有しており、それらのうちの最も重要なものは、タイプとデフォルトである。タイプは、アセットの目的を指定する。デフォルトは、所与のアセットの場所の中で使用され得るベースアセットを指定する。例示的な属性ヒエラルキは、次のテーブル内に示される。
Figure 2012511213
この例の中では、SococoTableテクスチャを含む仮想エリアシーンが、SococoTableから、ConfTableWoodを通じて、次いでTableTop1を通じて、等により、検索した利用可能な第1のテクスチャを用いて、レンダリングされることとなる。
アートベース(Artbase)は、デフォルトアセットに基づく、巨大な階層的なアセットツリーを有することとなり、全てが最終的には少数の基本アセットに基づく。これらの基本アセットは、クライアントソフトウェアパッケージの一部としてインストールされる。この機能(特徴)は、コールされる指定アート(art)アセットを有したレベルを設計することを可能にすることと、全てのアート(art)アセットが実際に設計される前にそれをレンダリングすることを可能にすることとが意図される。更にまた、全てのアート(art)アセットがロードされる前に、仮想エリアのレンダリングを開始することが望ましい場合がある。
オプションの属性は、デフォルト、作者(Author)、アプリケーション、及びColladaIDを含む。該ColladaIDは、アセットが導出されるColladaソースに対する参照である。作者(Author)ステーション上において実行されているブラウジングツールは、任意の及び全ての属性によって、アセットをインデックス付けることとなる。
k.オーディオトランスポートバス
オーディオトランスポートバスは、オーディオストリームを処理(ハンドル)するトランスポートバス276の構成要素である。幾つかの実施形態において、オーディオトランスポートバスは、構成要素オブジェクトのコレクションとしてオーディオグラフを管理するライブラリによって実現される。オーディオグラフオブジェクトの全てが、オーディオトランスポートバスに固有IDで登録(記録)される。オーディオトランスポートバスは、オーディオをレンダリングする時に、オーディオグラフオブジェクトを管理することの責任を負う。オーディオトランスポートバスは、IDにより、オーディオグラフ構成要素をトレースする。このプロセス内において、オーディオトランスポートバスは、各オーディオグラフ構成要素を順に呼び出して、IDによって名付けられた入力構成要素からのオーディオデータを提供する。
オーディオトランスポートバスは、クライアントネットワークノード上において利用可能な各オーディオストリームの、1つの時間インターバルをバッファリングする。オーディオトランスポートバスは、オーディオストリームサービス272によって設定(又は構成)されると、これらのストリームを、零か又は1人以上の加入者に提供する。データをストリームすることは、pullモデルを使用する。該pullモデルでは、最終出力ステージが、先行するステージを、必要とされるデータのためにコールする。元のオーディオストリームソースが到達されるまでの前に、各ステージがステージをコールする。もしも該ソースが、レートを制御すること(フロー制御)を必要とするのであれば、それは、典型的には、その自身のバッファリングを実施し、及び、その自身の具体的な信号伝達スキームを有する。例えば、ローカルファイルソースは、ダブルバッファリングすることができ、及び、先行するものを処理している間に、1つの時間インターバルを先読みすることができる。ネットワークファイルソースは、サーバに対して、ネットワーク上のフローレートとバッファ制限とを信号で知らせることができる。一方、ローカルマイクロホンソースは、フローレートを制御するための能力(機能)を全く有していない。
オーディオトランスポートバスは、2つのフェーズ内において動作する。すなわち、タイマーイベントをレンダリングしている時には、それは、既存のレンダリングされたデータをAudioSink構成要素に対して提供するフェーズと、オーディオトランスポートバスが次いで、オーディオグラフをトラバースして、次の時間スライスに値する(レンダリングされ且つバッファリングされることとなる)オーディオデータを生じさせるフェーズ、である。この技法は、可変レイテンシオーディオソースデータがたとえ存在しても、オーディオグラフに、連続的な再生を提供する良いチャンスを与える。
幾つかの実施形態において、オーディオトランスポートバスは、各オーディオグラフ構成要素のレンダリングレイテンシを測定し、及び、全ての依存する(ソース)オーディオ構成要素レイテンシを集計することによって各レンダリングチェーン(鎖)レイテンシを総計する。オーディオトランスポートバスは、そのレンダリングレイテンシ統計値を、集めて登録(記録)する。これらの統計値に基づいて、リアルタイムスケジューラ278が、(オーディオグラフプロセッシング目標を達成するために)いつ及び如何にして、オーディオグラフが変更されるべきかを決定する。幾つかの実施形態において、リアルタイムスケジューラ278は、(オーディオグラフプロセッシング目標を達成するために)いつ及び如何にしてオーディオグラフが変更されるべきかを決定するプロセス内において図13及び図14に関連して上述の1つか又は複数の方法を実行する。
オーディオトランスポートバスの別の機能は、AudioCalculationオブジェクトを周期的に呼び出すことである。AudioCalculationオブジェクトは、オーディオグラフプロセッシング要素のうちの関連付けられた幾つかのものの設定(セッティング)を変更するために使用される。AudioCalculationを実行する周期は、典型的には、オーディオグラフレンダリング周期よりも、ずっとより長い(頻度が低い)。
オーディオトランスポートバスは、典型的には、ストリームを記録し、及び、記録したストリームを再生する能力を有する。生(raw)のオーディオストリームは、典型的には、再生中に、視聴者の視点に従ってミックスが再レンダリングされ得ることとなるように記録される。幾つかの実施形態は、全ての生(raw)のオーディオストリームを受け取るハブを含む。これらの実施形態において、ハブは、典型的には、セッションの記録(レコーディング)を処理(ハンドル)する。セッションを再レンダリングすることが望まれない時には、オーディオトランスポートバスは、典型的には、クライアントネットワークノードにおいてオーディオストリームのみを記録する。
AudioSourceオブジェクトは、全てのオーディオソースにとってのベース(基本)である。このオブジェクトは、ポーリングされた時にはデータを配信し、及び、その所望のレイテンシとチャンネル(例えば、モノラル、ステレオ、5.1)とを画定する。導出されるオブジェクトは、Microphone(マイクロホン)と、MediaStream(メディアストリーム)と、クリップ(Clip)と、WaveFileと、DirectXオーディオと、Mixプラグインの出力側とを含む。
AudioSinkオブジェクトは、オーディオ出力デバイスのためのベースオブジェクトである。このオブジェクトは、ポーリングされた時にはAudioSourceからのデータをリクエストする。導出されるオブジェクトは、Speaker(スピーカ)と、MediaStreamと、Mixプラグインの入力側とを含む。
(i)オーディオプラグインAPI
幾つかの実施形態において、オーディオプラグインは、VSTオーディオエフェクトC++オブジェクトを組み込む。該VSTオーディオエフェクトC++オブジェクトは、Steinberg Media Technologies GmbHから利用可能である。具体的には、オーディオプラグインが、プラグインとしてラッピングされたVSTオブジェクトを組み込む。shimライブラリが、オーディオプラグインとしてVSTオブジェクトをラッピングするために提供される。このラッパは、オーディオプラグインAPIを提供する。VSTオブジェクトのAPIは、オーディオプラグインクラスの指定APIとして使用されることとなる。このAPIは、
setBusArrangements (inputs, nInput, output, nOutput) と、
getBusArrangements (direction, index, speaker&) と、
canProcessSampleSize(size) と、
getLatencySamples()と、
setupProcessing(process)と、
setProcessing(state) と、
process(data&) と、
getTailSamples()
とを含む。
これらの実施形態において、VSTプラグインは、AudioSource及びAudioSinkとしてラッピングされる。例えば、AudioSource::Frame(data&, size)コールが、先行するAudioSource::Frame(data&, size&)に対するコールとして実現されることとなり、setupProcessing(process)及びprocess(data&)により後続されることとなる。Configuration(latency&channelLayout&)コールが、各サポートされるチャンネルごとに、getLatencySamples()及びgetBusArrangements(output, i, channelLayout&)に関して実現される。ラッパの存在は、VSTソースコードが、既存VSTプラグインをオーディオバス内へとシム(shim)することに必要とされるということを意味する。
(ii)OpenAL
大抵のオーディオプロセッシンググラフミキシング及びエフェクト要素は、www.openal.org.から利用可能なOpenALクロスプラットフォームオーディオAPIを用いて実行される。OpenALライブラリは、最良機能を実現するために利用可能なサウンドカードの該最良機能を用いて、エリア/ゾーンマネージャセクション内においてリストアップされた全パラメータを計算することができる。具体的には、OpenAL Sources、Listeners、及びプログラムBuffersが、ミュートから最終ミックスまでのオーディオグラフ内の各動作ごとに生成される。各更新(アップデート)の前に、計算プラグインに従ってバッファパラメータが変更される。
幾つかの実施形態において、Global IP Solutions,Inc.から利用可能な、コンポーネント化されたGIPSオーディオライブラリが、ストリーム処理構成要素(inserts)を実現するために使用される。該GIPSオーディオライブラリは、以下のオーディオプラグインを直接サポートする。すなわち、コーデック、エラー隠蔽、ジッタ制御、エコー及びノイズキャンセル、AGC(自動利得制御)、及びサイレンス検出を直接サポートする。
Figure 2012511213
Figure 2012511213
l.ローカルストリームソース
ローカルストリームソースは、マイクロホン、(記録されたwavファイル及び音楽などの)ローカルサウンドソース、及びサウンドアートリソースである。これらのソースの各々を添付して、分配のためにそれらをオーディオトランスポートバスに対して提示するため、Windows(登録商標)オペレーティングシステムAPIが使用される。各ソースは、AudioSource導出クラスとして「ラッピングされる」。ソースオブジェクトラッパが、定義が受け取られる時に生成される(セクションVI内のAudioDeviceSODA定義を参照)。DirectSoundAPIsは、Windows(登録商標)ベースのコンピューティングシステム上において、マイクロホン、クリップ、Skype、及びCDサウンドのために使用される。RTPストリーミングは、リアルタイムプロトコル(RTP)サービスを囲う単なるAudioSourceラッパーであり、UDPソケット上においてストリーミングデータ(例えば、オーディオ)を配信するために使用される。インターネット上のストリーミングオーディオは、ウェブベースのダウンロード及び再生をサポートし、更にまた、マイクロソフトメディアサーバストリームもサポートする。
Figure 2012511213
幾つかの実施形態において、リアルタイムカーネル260は、非仮想エリアベースの通信(例えば、Skype及びVOIPオーディオ)との仮想エリアベースの通信のセッションのソーシング(sourcing)及びミキシングをサポートする。これらの実施形態において、リアルタイムカーネルは、非仮想エリアベースの通信を傍受して、それらをローカルオーディオソースとして提示する。非仮想エリアベースの通信セッション生(raw)オーディオを他のクライアントネットワークノードと共有することの責任を負うクライアントネットワークノード上の通信者のうちの1人によって、非仮想エリアベースの通信セッションが開始される。クライアントネットワークノードをホストすることはまた、非仮想エリアベースの通信アプリケーションを介して伝達(通信)を行っている通信者についての仮想エリア通信環境に関連付けられたオーディオをミックスする。
図24は、(「システム2」とラベル付けされた)コンピュータシステム389の一実施形態を示す。該コンピュータシステム389によって、人々が、異なる通信アプリケーション(例えば、Skype及びVOIP)を介して仮想エリア通信者と伝達し合うことが可能になる。図24内において、オーディオ通信チャンネルは、仮想エリアを共有する4つのネットワークノード(すなわち、システム1、システム2、システム3、及びシステム4)間において確立される。システム1は、仮想エリアベースの通信アプリケーションが実行されていないクライアントネットワークノードを表す。その代りに、システム1は、代替の通信アプリケーション(例えば、Skype)を動作させるよう構成されている。システム2は、リアルタイムカーネル260の一実施形態が実行されている、通信者のネットワークノードを表しており、システム1との仮想エリアベースのセッションをソース(発信)及びミックスするストリームハンドラ391を含む。このプロセス内において、ストリームハンドラ391は、システム1の再生とオーディオキャプチャストリームとを仮想化する統合構成要素393を使用する。システム3及び4は、仮想エリアベースの通信アプリケーションが実行されている2つの他のクライアント端末を表す。図24内に示されたシステムの構成要素は、次のものを含む。
●ストリームハンドラ391:以下のオーディオグラフ処理要素から構成される。
○統合構成要素393は、代替の再生及びキャプチャストリームを仮想化する。このプロセス内において、統合構成要素393は、仮想化代替再生から受け取ったマイクロホン(マイク)1を、Cスプリット1に送り、マイクロホン2と3と4とのミックスを、Pミックスから受け取って、システム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ルートはまた、マイクロホン1、3、及び4をシステム2再生に送って、マイクロホン3及び4を、Pミックスに送る。
○Pミックスは、Cスプリット2からマイクロホン2を受け取って、Pルートからマイクロホン3及び4を受け取り、仮想化したものを送信出力するために、マイクロホン2、3、及び4のミックスをストリームハンドラ391に送る。
●C:仮想エリアベースの通信アプリケーションによるオーディオキャプチャ
●P:仮想エリアベースの通信アプリケーションによるオーディオ再生
●C:システム1の代替オーディオアプリケーションによるオーディオキャプチャ
●P:システム2の代替オーディオアプリケーションによるオーディオ再生
●Vマイク:システム2代替オーディオに関連付けられた仮想マイクロホン
●Vスピーカ:システム2代替オーディオに関連付けられた仮想スピーカ(複数可)
コンピュータシステム389の動作中、I/Oマルチプレクサ/デマルチプレクサは、システム1及び2から受け取ったオーディオ信号1及び2を、システム3とシステム4との両方に送る。I/Oマルチプレクサ/デマルチプレクサはまた、システム3及び4から受け取ったオーディオ信号3及び4を、ストリームハンドラ391のPルート構成要素に送る。Pルート構成要素は、オーディオ信号1、3、及び4を、システム2の再生構成要素に送って、オーディオ信号3及び4を、システム2のPミックス構成要素に渡す。ストリームハンドラ391のPミックス構成要素は、オーディオ信号2、3、4をミックスして、そのミックスした信号を、システム2の統合構成要素に渡す。統合構成要素393は、該ミックスした信号を、代替通信アプリケーション(例えば、Skype)のオーディオキャプチャ構成要素に渡す。該代替通信アプリケーションは、システム2上において実行されており、及び、システム1により使用されている通信アプリケーション395(例えば、Skype)に対応する。代替オーディオキャプチャシステム(C)は、キャプチャしたミックス信号2+3+4を、システム1上において実行されている代替通信アプリケーション395の再生構成要素に渡す。
通信インフラ389の幾つかの実施形態において、Pミックスは、システムがより対称なものになるようにするため、I/Oマルチプレクサ/デマルチプレクサを直接的に認可する。これらの実施形態において、Pルートは、Pミックス1となり、3、4をI/Oから受け取り、及び、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内において、2つのストリームが、コンマで区切られている時はいつでも(それはマルチチャンネルルートであるということを意味する)、システムは、内部通信リソースを節約するために、ミックスしたストリームを送ることもできる(例えば、I/Oマルチプレクサ/デマルチプレクサの出力)。ミックスされることとなるストリームは、プラス符号で示されている(すなわち、統合構成要素393によって代替キャプチャ構成要素Cに送られる仮想化されたマイクロホン信号)。
m.リアルタイムスケジューラ
Figure 2012511213
幾つかの実施形態において、リアルタイムスケジューラサービス278は、Windows(登録商標)サービスDLLである。
幾つかの実施形態において、オーディオ及び3Dシーンのレンダリングは、フレーム毎ベースで行われる。最初に、ストリームが開始され、次いで、ある遅延の後に、リアルタイムスケジューラサービス278が、第1のフレームの処理をはじめる。該遅延は、各オーディオ及びビデオプロセッシングチェーン(鎖)における組み合わされた所望のレイテンシにより調整される。リアルタイムスケジューラサービス278は、以前に準備したフレームの消費を開始して、次いで、50ミリ秒の期間を有する時間刻みで、次のフレームを処理する。
各チェーン(鎖)内の最終的なレンダリングオブジェクトは、リアルタイムスケジューラサービス278に登録(又は記録)される。オブジェクトは、SoFrameRendererクラスから導出される。該SoFrameRendererクラスは、下記メソッド、すなわち、
FrameRender(timeFrameMs)
を有する。
このメソッドは、特にレンダリングチェーン(オーディオか又はビデオ)であるデータソースから、指示された時間について1フレームを準備する。SoFrameRendererクラスは、別のメソッドを、すなわち、
FrameDeliver()
を含む。
このメソッドは、以前に準備したフレームを、特にレンダリングチェーンである最終的な宛先に配信する。SoFrameRendererオブジェクトは、2つ以上の完全フレームをバッファリング可能にすることが必要とされない。リアルタイムスケジューラサービス278は、以前に準備したフレームをスケジュール通りにフレーム配信(FrameDeliver)することとなり、次いで、次のインターバルのためのフレームを準備するために、FrameRenderをコールすることとなる。
Windows(登録商標)オペレーティングシステムは、「ハードスケジューリング」能力を有していない。幾つかの実施形態において、リアルタイムスケジューラサービス278は、1つか又は複数のSoFrameRendererクラスをコールするよう構成(又は設定)される。該SoFrameRendererクラスは、オーディオプロセッサ、グラフィカルプロセッサ、物理モデリング、及びスクリプトを含む。クライアントネットワークノードが、目標処理レベルを高いままに維持できないということの決定に応答して、リアルタイムスケジューラサービス278が、フレーム処理を再調整することが、該SoFrameRendererクラスによって可能になる。幾つかの実施形態において、リアルタイムスケジューラ278は、図13及び図14に関連して上述の方法のうちの1つか又は複数を実現する。幾つかのこれらの実施形態において、リアルタイムスケジューラサービス278は、全フレームについてレンダリング時間を測定して、SODAインターフェースを通じて統計値を利用可能にさせておく。該統計値が範囲を越えた場合には(例えば、フレームを準備するのに非常に長い時間がかかる場合)には、ログイベントが生成される。おそらくは、フレームをスキップして、範囲外のレンダリングチェーン(それらは、ハードウェアか又はネットワークエラーに起因して、典型的には、範囲外である)をドロップさせることによってか、或いは、より優先度が低いレンダリングチェーン(複数可)をドロップさせることによって、「追い上げる(キャッチアップする)」よう試みるために、ヒューリスティックがトリガされることとなる。優先度ベースのスケジューリングを実現することの目的のために、SoFrameRendererクラスは、次のメソッドを、すなわち、
FramePriority()
を画定(定義)する。
このメソッドは、最も重要である、より低い数の番号を返す。トータルな優先度に関して最小のインパクトで最大の利益を生み出すために、どのチェーン(複数可)がドロップされるべきかを、チェーン(鎖)のレイテンシ及び優先度から、ヒューリスティックが決定することができる。
幾つかの実施形態において、リアルタイムスケジューラサービス278は、追加的には、チェーン(鎖)内におけるステージを、ドロップさせることができる。この目的のために、リアルタイムスケジューラサービス278は、次のメソッドを、すなわち
Latency=FramePrune(priority)
をコールすることができる。
ここで、処理チェーンは、指示された優先度よりもより低い「リンクをドロップさせること」に対する責任を負う。リアルタイムスケジューラサービス278は、最大優先度においてコールすることを開始することができ、及び、所望のトータルレイテンシ内において全フレームがレンダリングされるまで逆向きにカウントすることができる。低い優先度のチェーンを反復的にドロップさせることと、チェーン自体を一部取り除くこと(又は枝刈り:pruning)、との組み合わせのヒューリスティック(発見的問題解決法)は、典型的には、ある優先度レベルにおいて終結する。もしもその優先度レベルが、閾値を下まわっている場合には、ログエントリがなされることが可能であり、幾つかのケースでは、そのセッションが閉じられる。
リアルタイムスケジューラサービス278はまた、クライアントネットワークノードクロックを、ネットワーク内の他のクライアントネットワークノードのクロックに同期させるために、SISタイムサービス(ネットワークリソース)に対するインターフェースを管理することの責任を負う。幾つかの実施形態において、該タイムサービスは、後述のように、プラグインによって実現される。
7.故障回復
ネットワーク及びサーバの故障(又は失敗)が存在する中で、リアルタイムカーネル260は、動作を継続するために、最大限の努力を試みることを行わせる。このプロセス内において、リアルタイムカーネル260は、2段階の故障(又は失敗)回復アルゴリズムを実現する。第1に、SODAチャンネルサービス270及びメディアサービス271は、故障(又は失敗)時に、接続を再確立することを独立に(又は自主的に)試みる。メディア回復によって、個別のオーディオチャンネルの故障(失敗)が存在する中で、会議が、継続するか、或いは、NATタイムアウトのケースにおいて回復するということが可能になることとなる。第2に、もしもSODAチャンネルサービス270及びメディアサービス271が、接続を再確立することに失敗した場合には、それらは、それらのクライアントに対して失敗を信号で知らせることとなる。幾つかの実施形態において、回復の試みを同期させることが可能なエリア・ボールト(vault)サーバに、クライアントノードセッションを登録することによって、複数の通信者が同時に回復を試みる行動(アクション)が連係される。
幾つかの実施形態において、エリア/ゾーンマネージャ264はまた、サーバ故障(又は失敗)のイベント内において回復を試みる。エリア/ゾーンマネージャ264は、ストリーム失敗をうまく処理して、次いでそのセッションを解体して、異なるエリアサーバ上においてそれを再ランチする。
8.プラグイン
幾つかの実施形態において、リアルタイムカーネル260は、コンポーネント化された、オープンな、及びプラットフォーム独立なアーキテクチャを有しており、該アーキテクチャによって、開発者が、独立に開発することと、リアルタイムカーネル260の構成要素をリモートに追加及び更新することとが、可能になる。
a.プラグイン設計
プラグインは、プラグインサーバからダウンロードされるプラットフォーム指定バイナリイメージである。Windows(登録商標)ベースのコンピュータシステム上において、プラグインは、DLLs(例えば、NETか又はCOMスタイルのプラグイン)として実現される。プラグインは、しかしながら、それらがロードされるというやり方において、通常のダイナミックリンクライブラリとは異なる。特に、ロード中に、プラグインライブラリにリンクする必要が無く、ソフトウェアコードの如何なる編集の必要性も無い。その代りに、プラグインマネージャ266は、プラグインディレクトリ内に含まれるプラグインを単にロードする。このようにして、ステーションにおける任意の更なるコンフィギュレーション(例えば、レジストリエントリ)も無しに、単に、実行可能なものをダウンロードするか又は削除することによって、プラグインは、クライアントネットワークノードに対して追加され得るか又は排除され得る。プラグインは、ある良好な画定(定義)されたやり方で各プラグインホストに接続する。
図25内に示されるように、プラグインのアクティブインスタンス(392)が、それぞれのプラグインバリアントクラス394から導出され、それが更に、それぞれのプラグインベースクラス396から導出される。幾つかの実施形態において、ベースプラグインオブジェクトを作成して、及び、該ベースプラグインオブジェクトを、インヘリタンス(継承)を通じて、識別されたバリアントにキャスティングすることによって、プラグインインスタンス392はインスタンス化される。各ベースクラス396及びバリアントクラス394は、あるインターフェースをそれが実現することを宣言することによって、それが、あるサービスを提供するということを示す。
図26は、プラグインベースクラス398、400の、1つの例示的なセットを示す。該プラグインベースクラス398、400の各々は、1つか又は複数の導出されたバリアントクラス402、404、及び、406、408のそれぞれのセットに関連付けられている。プラグインベースクラス398、400の各々が、機能性の特定カテゴリを画定する一方で、各プラグインバリアントクラスは、対応するベースクラス(例えば、API=human interface device, Variant=mouse)の機能性(又は機能)の振る舞いの特定の目的か又はカテゴリを画定する。プラグインは、典型的には、インターフェースと、インターフェース機能の機能プロパティと、該インターフェース機能を呼び出すためのマクロとを画定するために、ヘッダファイルを使用する。
プラグインは、GUIDによって、並びに、人間にとって読み取り可能な名称によって、識別される。単一プラグインは、サポートされる複数のAPIsと、並びに、同じAPIに関する複数のバリアントとを有することができる。幾つかの実施形態において、プラグインAPIは、インターフェースによって画定(定義)されるサービスを実現するプラグイン機能に対する関数ポインタを含むC言語データ構造である。
下記テーブルは、guidPhysicsSet1として識別される仮想物理プラグインの一例を示す。
Figure 2012511213
この例では、「Joint」APIにおける4つのバリアントと、「CollisionDetection」APIにおける2つのバリアントとが存在する。ファイル名称は、プラグインがファイルシステム内に格納される下での名称である。内部名称は、全体としてのプラグインを記述することが意図されている。識別子は、プラグインバイナリイメージ全体を識別するものであり、プラグインマネージャ266によってのみ使用される。APIは周知のGUIDであり、該GUIDは、プラグインによってサポートされている、手続きの(プロシージャの)APIを指定する。バリアントは、ある特定の目的のためのプラグインを選択するために、クライアントアプリケーションが使用することが可能な、周知のGUIDである。例えば、SODAチャンネルサービス270は、あるセッションにおいて使用するために、圧縮プラグインバリアントをネゴシエートすることができる。
図27は、プラグイン410の、1つの例示的なアーキテクチャを示す。該プラグイン410は、Microsoft(登録商標)のCOM(コンポーネント・オブジェクト・モデル)アーキテクチャと互換性がある。プラグイン410は、エントリポイント機能412のセットと、(第1のバリアント416と第2のバリアント418とを含む)第1のAPIクラス414と、第2のAPIクラス420とを含む。プラグイン410は、サポートされる全APIクラス414、420の中の、及び、各APIクラス内における全バリアントの中の、全機能を実現する。各APIクラスと、APIクラス内における各バリアントとが、それぞれのエントリポイント機能(「ファクトリ」としても呼ばれる)に関連付けられている。プラグイン410がロードされる時には、それぞれのエントリポイント機能が、サポートされる各APIクラスごとのプラグインホストに登録(又は記録)される。APIクラスをインスタンス化するために、及び、そのIUnknownインターフェースに対するポインタを取得するために、APIクラスに関連付けられているエントリポイント機能をプラグインホストが使用する。プラグインホストは、IUnknownインターフェースを使用して、APIクラスによってサポートされたバリアントのエントリポイント機能の検索を行う。プラグインホストは、バリアントをインスタンス化するために、及び、そのIUnknownインターフェースに対するポインタを取得するために、バリアントに関連付けられている該エントリポイント機能を使用する。プラグインホストは、IUnknownインターフェースを使用して、そのインターフェース機能テーブルについて、バリアントをクエリー(検索要求)する。該機能テーブルは、バリアントのAPI実現形態に対するアクセスを、ホストに提供する。
各々の実行可能なプラグインは、プラグインマネージャ266にプラグインを管理することを可能にさせるコアプラグインAPIをサポートする。該コアプラグインAPIは、実行可能なプラグインを、自己記述的にさせる。具体的には、各プラグインは、プラグインマネージャ266によってコールされ得る機能をエクスポートして、該プラグインに部ラグイン自体を登録することを可能にさせる。幾つかの実施形態において、実行可能な各プラグインは、下記のコアプラグインAPIをエクスポートする。
Figure 2012511213
(i)プラグインバリアント
プラグインバリアントのアクティブインスタンスは、クラスPlugInVariantから導出される。それらは、常に、PlugInオブジェクトを用いて生成される。全ての有用なプラグインは、このクラスを、API指定メソッドを含めるために拡張する。共通メソッドだけが、ジェネリックなコンフィギュレーションメソッドである。
Figure 2012511213
(ii)プラグインマネージャ
図28は、プラグインマネージャ266と、(プラグインコンテナ424のセットを含む)プラグインディレクトリ422と、プラグインデータベース426と、コーラー(caller)428とを含むプラグインアーキテクチャの一実施形態を示す。プラグインマネージャ266は、プラグインディレクトリ422内のプラグインコンテナ424をクエリー(検索要求)して、プラグインをプラグインデータベース426内に登録して、コーラー428からのAPIリクエストに応答して、利用可能なプラグインについての情報を送り、及び、指定されたプラグインバリアントをインスタンス化する。コーラー428は、典型的には、カーネル構成要素(例えば、インストールローダー構成要素、(接続及びサーバミックスマネージャ262及びエリア/ゾーンマネージャ264のような)カーネルマネージャ、及びカーネルサービス)である。しかしながら、幾つかの実施形態では、コーラー428は、クライアントノード上においてか又はリモートネットワークノード(例えば、サーバ)上において実行されているサービスか又はソフトウェアアプリケーションに対応することが可能である。
図29は、クライアントネットワークノード上において利用可能なプラグインを登録するプロセス内においてプラグインマネージャ266によって実現される一方法の一実施形態を示す。
図29の方法に従って、プラグインマネージャ266は、クライアントネットワークノード上において利用可能なプラグインを見つけ出す(図29のブロック430)。幾つかの実施形態において、クライアントネットワークノードのファイルシステム内に生成されている共有化されたプラグインディレクトリ内に全プラグインが格納される。これらの実施形態において、プラグインマネージャ266は、該共有化されたプラグインディレクトリをチェックすることによって、利用可能なプラグインを見つけ出す。他の実施形態において、プラグインマネージャ266は、利用可能なプラグインのために、他のファイル位置をチェックするよう構成(又は設定)され得る。
プラグインマネージャ266は、その見つけ出したプラグインを、それらプラグインがサポートする全てのAPIsについてクエリー(検索要求)する(図29のブロック432)。このプロセス内において、利用可能なプラグインに関連付けられたパラメータ値を列挙するために、プラグインマネージャ266は、コアAPIに対してコールを行う。例えば、プラグインのGUIDsと、サポートされるAPIsのGUIDsと、所与のAPIについてのサポートされるバリアントのGUIDsと、を返すコアAPIコールによって、プラグインマネージャ266は、プラグインをクエリー(検索要求)する。
クエリー(検索要求)を行った結果に基づいて、プラグインマネージャ266は、プラグインと、それらプラグインがそれぞれサポートするAPIsとの間の関連性を、プラグインデータベース426内に格納する(図29のブロック434)。このプロセス内において、プラグインマネージャ266は、プラグインがサポートするAPIsごとに、ディレクトリ422内の全てのプラグインを分類する。プラグインマネージャ266は、全てのサポートされるAPIsに従って、プラグインをプラグインデータベース426内へと自動的に入力する。このようにして、プラグインデータベース426によって、同じAPIによるプラグインが、バリアントについてクエリー(検索要求)されることが可能になる。追加的には、プラグインデータベース426内のプラグインは、APIごとに、及びバリアントごとに、及び仮想エリアアプリケーションによって参照された時に生成されたインスタンスごとに、列挙され得る。図30は、プラグインデータベース436の例示的な一実施形態を示す。
プラグインマネージャは、以下のAPIをエクスポートする。
Figure 2012511213
図31は、コーラー428からのAPIコールの受容に応答して、プラグインマネージャ266によって実現される一方法の一実施形態を示す。この方法に従って、APIsのうちの指定されたAPIをサポートする全プラグインを列挙するためのコールの受容に応答して(図31のブロック440)、プラグインマネージャ266は、プラグインデータベース内における該指定されたAPIに関連付けられている全プラグインの識別子を含むリストを返す(図31のブロック442)。複数プラグインのうちの識別されたプラグインによってサポートされるAPIsのうちの識別されたAPIのバリアントを列挙するためのコールの受容に応答して(図31のブロック444)、プラグインマネージャ266は、識別されたプラグインによってサポートされる所与のAPIの全バリアントの識別子を含むリストを返す(図31のブロック446)。複数プラグインのうちの識別されたプラグインによってサポートされるAPIsのうちの識別されたAPIの複数バリアントのうちの識別されたバリアントをインスタンス化するためのコールの受容に応答して(図31のブロック448)、プラグインマネージャ266は、識別されたプラグインをロードして、識別されたバリアントのインスタンスに対するポインタを返す(図31のブロック450)。このプロセス内において、指定されたバリアントが探し出されて、その指定されたバリアントが、コーラーのアドレス空間内へとロードされて、及び、ポインタの内部テーブルが、APIによって画定されるサービスを実現するバリアント機能の機能テーブルアドレスにポピュレートされる。
(iii)プラグインサーバ
サポートされる各プラットフォームごとに、適切なダウンロード可能形式において、サーバ上にプラグインが存在する。サーバは、最小セットの暗号化、圧縮、及び認証プラグインを常にサポートするので、サーバ接続を試みる時にはクライアントネットワークノードは常に成功する。
サードパーティ開発者によってサーバ上に最初に登録される時には、そのプラグインは、API仕様にそれが従うことを保証するために、自動化されたツールによって調査され、及び、受け入れることができないクライアントステーションAPI参照についてチェックされる。例えば、動的な結合(ビンディング)は、プラグイン環境内にまだ無いどのネイティブなインターフェースでも許されない。従って、プラグインは、ウイルスがスキャンされる。従って、サーバ上の全てのイメージは、ウイルスに対して安全である。
プラグインは、認証ユーザによってアクセス制御される。このようにして、アクセスに対する料金を支払ったユーザは、任意の位置からプラグインを使用することができる。幾つかの実施形態において、ユーザは、電子商取引エンジンを介したプラグインダウンロードについて認証される。
b.プラグインのクラス
全てのプラグインは、プラグインAPIに従う。幾つかのプラグインは、あるツール(例えば、OpenGL)に特有のものであり、それら自体の基準(スタンダード)がある。プラグインの各クラスは、クラス特有のAPIsを有する。幾つかの実施形態において、プラグインは、全てのクライアントステーションアクセスについて、ネイティブなアプリケーションランタイムに依存する。プラグインが使用される各構成要素において、GUID名称空間(ネームスペース)を用いて、プロトコルが、機能のネゴシエーションを可能にする。例えば、幾つかのインスタンスにおいて、ネットワークストリームを接続する時には、その提供するクライアントネットワークノードは、その暗号化プラグインGUIDリストを、好みの順序で提供し、及び、受け取るネットワークノードは、これらの提供された中から選択して、選択によってか又は拒否によって応答する。
幾つかの例示的な実施形態において、プラグインの下記クラスが定義されて、仮想エリア通信者環境を生成することにおいて使用されるためのプラグインを開発するために開発者によって使用される。
●暗号化アルゴリズム
●圧縮アルゴリズム
●認証アルゴリズム
●認証情報(クレデンシャル)
●グラフィックエフェクト
●物理エクステンション
●スクリプトエクステンション
●入力デバイスホスティング
●オーディオミックス
●オーディオソース
●オーディオインサート
●ストリームトランスポート
●タイムサービス
これらのプラグインクラスは、以下のパラグラフ内において画定(定義)される。
[暗号化アルゴリズム(Encryption algorithm)]
暗号化は、ストリームトランスポート機能であり、ストリーム生成時にネゴシエートされる。このセッション定義は、暗号化VariantIDを含むこととなる。例示的な暗号化バリアントは、AES及びRC4ブロック暗号化を含む。
[圧縮アルゴリズム(Compression algorithm)]
圧縮は、オプションのチャンネルコンテンツ機能である。トランスポートがチャンネル定義をネゴシエートする時に、チャンネルは圧縮を選択する。認可するステーションが、利用可能な圧縮オプションを提供し、及び、公開(又は発行)するステーションは、該公開されるもの(又は発行されるもの)が提供される時に、その選択を指示する。オーディオコーデックは、それらのコンテンツは既に圧縮されているので、圧縮をスキップするよう選択することができる。例示的なオーディオ圧縮プラグインバリアントは、チャンネル指定プライミングストリームによるITU−T V.44圧縮プロセスを実現する。
[認証アルゴリズム(Authentication algorithm)]
ネットワークインフラサービスは、接続を行うために、ある認証プロトコルを要求する。サードパーティのサーバは、特定の認証要件を有することができる。認証プロトコルは、時折、変更され得る。コアPluginAPIに加えて、認証プラグインは、認証プロトコルを実行するための、及び、ローカル認証情報(クレデンシャル)にアクセスするための、APIsを有する。例示的な認証プラグインバリアントは、イニシャルサーバに対して、SSLタイプの認証をサポートするプラグインバリアントと、トークンとして署名されたIDを用いて、後続のサーバログインをサポートするプラグインバリアントと、を含む。
[認証情報(クレデンシャル)(Credential)]
認証情報(クレデンシャル)は、生成されることが可能であり、及び、記憶させるために及び認証アルゴリズムによって使用されるためにプラグイン内にカプセル化される必要がある。例示的な認証情報(クレデンシャル)は、公開キーを含んだ証明書である。
[グラフィカルエフェクト(Graphical effect)]
OpenGL及びColladaは、スクリプトにすることが可能なシェーダー、サンプラ、プロファイル、及び注釈(アノテーション)をサポートする。幾つかの実施形態は、Collada cg_surface_typeと、シェーダーであるglsl_surface_typeと、サンプラであるgl_samplerX及びcg_samplerXと、をサポートする。
[物理エクステンション(Physics Extension)]
幾つかの実施形態において、動的な振る舞いのループ内へと特定のフック(hooks)が含まれるようにするために、オープン・ダイナミック・エンジン(ODE)が修正される。シーングラフ内のエンティティに対して物理プロパティを提供することによって、仮想エリアアプリケーションが、典型的には、物理特性を指定する。物理エクステンションプラグインは、そのプラグインによって処理される関連付けられたプロパティGUID(複数可)をクエリー(検索要求)するためのAPIを有する。このようにして、物理プラグインは、関連オブジェクト及び仮想エリアだけが呼び出される。幾つかの実施形態は、モデル内のジョイントであるCollada rigid_constraintと、アバター及びアーチファクトのためのグローバルなモーションアルゴリズムであるOpenGLコリジョン検出とをサポートする。
[スクリプトエクステンション(Script extension)]
スクリプトエクステンションプラグインは、スクリプトするルーチン(例えば、Java及びJavaスクリプト)のラッピングを可能にするための、及び、ネイティブなアプリケーションランタイムをそれに提供するための、追加的なAPIを有する。スクリプトは、スクリプトエクステンションプラグインのGUIDを含むSODA記録を通じて画定される。
[入力デバイスホスティング(Input device hosting)]
入力デバイスプラグインは、アプリケーション論理によって処理される標準入力イベント(例えば、コンピュータキーボード、コンピュータマウス、Xbox(登録商標)コントローラ、及びWii(登録商標)コントローラによって生成されるイベント)のためのSODA記録を生成する。
[オーディオミックス、オーディオソース、及びオーディオインサート(Audio Mix, Audio Source, and Audio Insert)]
オーディオ処理(プロセッシング)は、発生源(例えば、マイクロホン)においてが望ましく、エフェクト及びミキシングは、送り先(例えば、スピーカ)においてが望ましい。オーディオプラグインは、典型的には、オーディオネットワークルーティングを変更することができない。何故ならば、それは、他のユーザの経験(体験)に影響を及ぼすからである。Windows(登録商標)プラットフォーム上のオーディオプラグインは、AudioPluginAPIに従うDLLsである。それらは、リアルタイムカーネル260に登録され、SODAによる参照のために利用可能である。仮想エリア開発者は、仮想エリアアプリケーションの一部として(例えば、拡張Colladaフィールドか又はVSDL動作を用いて)、オーディオプラグインをリクエストすることができる。
その上、アバタースクリプトが、オーディオプラグインをリクエストすることが可能である。
ミックスバリアントは、エコー、エコーキャンセル、リバーブ、及びコンポーズを含む。
ソースバリアントは、マイクロホン、クリップ、メディア、Skype、及びストリーミングファイルを含む。
インサートバリアントは、パンナー、ボリューム、iLBC、RCU、iPCM−wb、イコライザー、LPF、HPF、AGC、ノイズキャンセル、エラー隠匿、ジッター制御、ミュート、遅延(ディレイ)、サイレンス検出、快適雑音を含む。
[ストリームトランスポート(Stream Transport)]
STRAWは、ネットワーク上のセッションをホストするためにストリームトランスポートプラグインを使用する。ストリームは、パケットを伝送(トランスポート)し、及び、信頼性、認証、及び暗号化を提供する。
[タイムサービス(Time Service)]
リアルタイムスケジューラ260は、クライアントネットワークノード間の時間を同期させることに関与している。この目的のため、各クライアントネットワークノードは、SISか、NTP(ネットワークタイムプロトコル)か、又はITS(インターネットタイムサービス)などのインターネット時間基準に同期することとなる。
c.プラグインクラスAPIs
全てのプラグインクラスオブジェクトは、PlugInVariantに基づく。
[暗号化アルゴリズム(Encryption algorithm)]
このプラグインは、PlugInVariantに基づく。該プラグインは、キーイング(keying)を含むブロック暗号化アルゴリズムを実施する。このプラグインは、キー(鍵)を除いて処理状態を維持しない(ステイトレスである)(すなわち、各暗号化が任意の他のものと独立している)。
Encryption::Ctor(algorithm, key)
Encryption::Encrypt(data, size, target)
Encryption::Decrypt(data, size, target)
Encryption::Dtor()
[圧縮アルゴリズム(Compression algorithm)]
このプラグインは、PlugInVariantに基づく。該プラグインは、1つか又は複数のロスレス圧縮/解凍アルゴリズムを実施する。該プラグインの圧縮は、連続的なストリームであり、内部状態テーブルを維持することができる。該アルゴリズムは、各KeyFrameに関して再開され、該アルゴリズムには、エミットされてはいないが圧縮状態に寄与してる「プライミング」ブロックを処理することを含めることができる。
Compression::Ctor(algorithm)
Compression::KeyFrame(preload)
Compression::Compress(data, size, target)
Compression::Decompress(data, size, target)
Compression::Dtor()
[認証アルゴリズム(Authentication algorithm)]
このプラグインは、PlugInVariantに基づく。該プラグインは、ローカル認証情報(クレデンシャル)にアクセスして、1つか又は複数状態の、クライアント認証・状態マシンを実現する。認証・状態マシンは、認証サーバに対する通信リンクの制御を行わない。認証・状態マシンは、メッセージのみを処理して、後続のメッセージを生成する。
Authentication::Ctor(algorithm, credential)
Authentication::InitialState()
Authentication::State(state)
Authentication::Advance(messageData, messageConsumer&)
Authentication::SessionKey(key&)
Authentication::Dtor()
[認証情報(クレデンシャル)(Credential)]
このプラグインは、PlugInVariantに基づく。該プラグインは、プラットフォーム特定クレデンシャル記憶部にアクセスする。
Credential::Ctor()
Credential::Select(index)
Credential::Accept(data, size, index&)
Credential::PrivateKey(key&)
Credential::PublicKey(key&)
Credential::Passphrase(passphrase&)
Credential::Dtor()
[グラフィカルエフェクト(Graphical effects) − シェーダー(Shader)]
このプラグインは、PlugInVariantに基づく。該プラグインは、3Dレンダリングに影響を及ぼす。
シェーダーAPIは、シェーダー(スクリプト化された手続きの(プロシージャの)表面生成器)をサポートする。
Shader::Ctor(gl&)
Shader::Initialize(format, size, mip, type, code, technique)
Shader::SetTextureParameters(texture)
Shader::SetTextureSteam(idStream)
Shader::Render(pass)
Shader::Dtor()
[グラフィカルエフェクト(Graphical effects) − サンプラ(Sampler)]
サンプラAPIは、PlugInVariantに基づく。該サンプラAPIは、表面に対してテクスチャをマッピングすることをサポートする。
Sampler::Ctor(gl&)
Sampler::Initialize(type, wrap, minFilter, magFilter, mipFilter, color, mipmap_maxLevel, mipmap_bias)
Sampler::Dtor()
[物理エクステンション(Physics Extension) − ジョイント(Joint)]
このプラグインは、PlugInVariantに基づく。該プラグインは、動作(モーション)のダイナミクスを拡張(拡大)する。
ジョイントAPIは、アバター及びアーチファクト・サブアセンブリに対するジョイント制約及びダイナミクスをサポートする。
Joint::Ctor(ode&, dimension, nUnbounded)
Joint::Initialize(body1, anchor1, orientation1, body2, anchor2, orientation2, axis, erp, cfm)
Joint::Torque(torque)
Joint::GetState(fps&, erp&, jLin1&, jAng1&, jLin2&, jAng2&, c&, cfm&, low&, high&)
[物理エクステンション(Physics Extension) − コリジョン(Collision)]
コリジョンAPIは、PlugInVariantに基づく。該コリジョンAPIは、コリジョン検出を迅速に計算することをサポートする。幾つかの実施形態において、コリジョンプラグインバリアントは、オープン・ダイナミクス・エンジン(ODE)内のクアッド・ツリークラスdxSpaceアルゴリズムを実現することができる。
Collision::Ctor(ode&, space)
Collision::Step()
[スクリプトエクステンション(Script extension)]
このプラグインは、PlugInVariantに基づく。該プラグインは、仮想エリアアプリケーションによって提供されるコードの実行をサポートする。このコードは、バイナリ形式におけるものであり、その特定コード定義がサポートするAPIと言葉とによってラベル付けられる。該プラグインは、言葉によって異なる。該プラグインは、ある特定のコード定義をロードし、及びそれをコールし、APIにとって適切なネイティブアプリケーションランタイムオブジェクトを提供する。
ScriptExtension::Ctor(sonar&)
ScriptExtension::Execute(code, api)
ScriptExtension::Dtor()
[入力デバイスホスティング(Input device hosting)]
このプラグインは、PlugInVariantに基づく。該プラグインは、ユーザイベントのキャプチャー(オーディオを除く)をサポートする。これは、マウスから、顔認識を有するビデオカメラまでのあらゆるものを含む。該プラグインは、ユーザイベントをキューに生成する。
InputDevice::Ctor(arg, queue)
InputDevice::Configure(arg)
[オーディオミックス(Audio Mix)]
このプラグインは、AudioComponentに基づく。該プラグインは、2つのオーディオストリームを組み合わせる。
AudioMix::Ctor(audioSrc1, audioSrc2, param)
AudioMix::Configure(param)
AudioMix::Dtor()
[オーディオソース(Audio Source)]
このプラグインは、AudioComponentに基づく。該プラグインは、ポーリング可能なオーディオストリームを提供する。
AudioSource::Ctor()
AudioSource::Configure(arg)
AudioSource::GetLatency(latency&)
AudioSource::Poll(data)
[オーディオインサート(Audio Insert)]
このプラグインは、AudioComponentに基づく。該プラグインは、オーディオストリームを変換する。該プラグインは、ストリームを、圧縮するか、解凍するか、又は単に修正することができる。
AudioInsert::Ctor(AudioSource&)
AudioInsert::GetLatency(latency&)
AudioInsert::Process()
[オーディオセンド(Audio Send)]
このプラグインは、AudioComponentに基づく。該プラグインは、オーディオストリームを2つの等しいストリームに分割する(ストリームをコピーする)。任意のAudioSourceが、任意の他のオーディオ要素にルーティングされ得る。
AudioSend::Ctor(AudioSource&)
AudioSend::Dtor()
AudioSend::Copy(data&)
[ストリームトランスポート(Stream Transport)]
このプラグインは、PlugInVariantに基づく。1つの例示的なストリームトランスポートプラグインバリアントは、設定可能な認証及び暗号化を有したIP UDPトランスポートをサポートする。
Transport::Ctor(port, station, session, encryption)
Transport::MTU()
Transport::Hello()
Transport::Challenge(credential)
Transport::Respond(challenge, encryption)
Transport::Response(response, encryption)
Transport::IdentifyingToken()
Transport::IdentifyingToken(token)
Transport::Send(data, size, idChannel)
Transport::Receive(record)
Transport::Dtor()
[タイムサービス(Time Service)]
このプラグインは、PlugInVariantに基づく。該プラグインは、クライアントネットワークノード時間を、インターネット基準に同期させる。
TimeSvc::Ctor()
TimeSvc::Sync()
TimeSvc::Dtor()
VI.SODA定義
Session
IDStation1 GUID
IDStation2 GUID
IDSession GUID

SessionFailure
IDSession GUID
Reason long
Parameter long

Station
ID GUID
STRAW_Address IP, Port
STRAW_Transport [GUID]

Publish
IDClient GUID
IDServer GUID
IDChannel GUID
IDCompression [GUID]

Subscribe
IDClient GUID
IDServer GUID
IDChannel GUID
IDChannelIndex GUID
Reliable bit
Compressed bit
KeyFrameUser bit
IDCompression GUID
Preload text

StreamKeepAlive
IDSession GUID
Timeout long

StreamFailure
IDSession GUID

ChannelFailure
IDChannelIndex GUID

CommunicantState
IDSelf GUID
IDCommunicant GUID
State short

HID
IDDeviceClass GUID
IDDevice GUID
ID GUID

AudioParameter
ID GUID
IDParameter GUID
Value short

AudioDevice
IDDeviceClass GUID
IDDevice GUID
ID GUID

AreaSession
IDArea GUID
ID GUID

PhysicsCheckpoint
Location doubleX3
Velocity doubleX3
Acceleration doubleX3
Orientation doubleX3
Center Of Gravity doubleX4
Inertia Tensor doubleX3
Mass double

Zone
ID GUID
Shape Mesh
Origin doubleX3
Avatar [GUID]

AudioAperture
ID GUID
Radius double
Origin doubleX3
Orientation doubleX3

AudioObstruction
ID GUID
Radius double
Origin doubleX3

AudioReverb
ID GUID
Shape Mesh
Origin doubleX3

AudioMix
ID GUID
Type GUID
Variant GUID
Avatar GUID
Source1 GUID
Source2 GUID

AudioEffect
ID GUID
Type GUID
Variant GUID
Avatar GUID
Source1 GUID

AudioStream
IDAudio GUID
Avatar GUID

AudioCalculation
IDSource GUID
IDSink GUID
IDComponent GUID
IDOperation GUID
Param1 long
Param2 long

PlugIn
Type GUID
Name Text
ID GUID
API Supported [GUID]

UpgradeDependencyList
Base Installation GUID
Description Text
Upgrade ID [GUID]

Upgrade
ID GUID
Offset long
Data []

AudioRecord
ID GUID
IDAudio GUID
IDStore GUID

AudioPlayback
ID GUID
IDAudio GUID
IDStore GUID

NetworkDNS
Address String

NetworkProxy
Address String

Debuglnfo
ID GUID
Statistic GUID
Reset Boolean

DebugTrap
ID GUID
Trap GUID
Rearm Boolean

HID
IDKvm GUID
HID event
VII.結論
本明細書内において記載されている実施形態は、それぞれのネットワークノード上において操作する通信者間のリアルタイム通信(又は伝達)をサポートするリアルタイムカーネルを提供する。通信者、仮想エリア、及び他のネットワークリソースに接続し、ユーザ入力に応答してこれらの接続をスイッチングし、及び、リアルタイムデータストリームをミキシングする、という複雑なタスクを、該リアルタイムカーネルが処理する。該リアルタイムカーネルによって、開発者は、低レベルな、コードの配管(plumbing)の代りに、高レベルの通信機能を開発することに集中することが可能になる。広範囲の現在利用可能なコンピューティングデバイス及びネットワーク接続を用いてリアルタイム通信性能が達成され得ることとなるように、リアルタイムカーネルは、比較的低い計算リソース要件を課す。
他の実施形態は、特許請求の範囲内にあるものである。

Claims (139)

  1. リモート制御されたリアルタイムデータストリーム処理を、コンピュータにより実現する方法であって、
    ローカルネットワークノード(12)において、1つか又は複数のストリームハンドリング命令を、リモートネットワークノード(16)から受け取り、ここで、該1つか又は複数のストリームハンドリング命令は、少なくとも1つのリアルタイムデータストリームを処理するためのストリームハンドラ(22)の仕様を含み、
    前記ローカルネットワークノード(16)において、前記仕様に従って、ストリームハンドラ(22)を作成し、及び、
    前記ローカルネットワークノード(16)において結果データストリームを生成する
    ことを含み、
    前記生成することが、前記作成したストリームハンドラ(22)を通じてリアルタイムデータストリームを処理することを含むことからなる、方法。
  2. 前記生成することが、
    前記1つか又は複数のストリームハンドリング命令内において指定されたリアルタイム状態情報からコンフィギュレーションパラメータ値を決定し、及び、
    前記ストリームハンドラ(22)を、前記コンフィギュレーションパラメータ値によって動的に構成する
    ことを含むことからなる、請求項1に記載の方法。
  3. 前記作成することは、前記1つか又は複数のストリームハンドリング命令内において指定されるミキシング機能を有した前記ストリームハンドラ(22)を構築することを含み、及び、前記生成することは、該ミキシング機能に従って、前記リアルタイムデータストリームを、少なくとも1つの他のリアルタイムデータストリームとミキシングして、ミックスされたリアルタイムデータストリームを生成することを含むことからなる、請求項1に記載の方法。
  4. 前記作成することは、前記1つか又は複数のストリームハンドリング命令内において指定された処理オブジェクトをインスタンス化して、該インスタンス化された処理オブジェクトを、前記ストリームハンドラ(22)における方向付けられたグラフ構成要素内へと、前記仕様に従って組み立てることを含み、及び、
    前記生成することは、前記方向付けられたグラフを通じて前記リアルタイムデータストリームを処理することを含むことからなる、請求項1に記載の方法。
  5. 前記生成することが、
    前記インスタンス化された処理オブジェクトのためのコンフィギュレーションパラメータ値を、前記1つか又は複数のストリームハンドリング命令内において指定されたリアルタイム状態情報から決定し、及び、
    前記処理オブジェクトを、前記コンフィギュレーションパラメータ値により構成する
    ことを含むことからなる、請求項4に記載の方法。
  6. 前記インスタンス化することは、前記1つか又は複数のストリームハンドリング命令内において指定されたミキシングオブジェクトをインスタンス化することを含み、及び、前記生成することは、該ミキシングオブジェクトを実行して、ミックスされたリアルタイムデータストリームを、前記リアルタイムデータストリームと、少なくとも1つの他のリアルタイムデータストリームとの組み合わせから生成することを含むことからなる、請求項4に記載の方法。
  7. 前記インスタンス化された処理オブジェクトのうちの少なくとも1つが、前記ローカルネットワークノード(16)のハードウェア構成要素を制御するドライバモジュールに対するぞれぞれのコールを、前記結果データストリームに少なくとも部分的に基づいて、カプセル化することからなる、請求項4に記載の方法。
  8. 前記1つか又は複数のストリームハンドリング命令は、それぞれの固有の識別子により前記処理オブジェクトを指定し、及び、前記インスタンス化することは、該識別子のうちの幾つかのそれぞれを含んだアプリケーションプログラムインターフェースプロシージャ(API)コールを、処理オブジェクトに対して発行することを含むことからなる、請求項4に記載の方法。
  9. 前記1つか又は複数のストリームハンドリング命令は、前記第1のリアルタイムデータストリームのデータタイプとは異なるデータタイプの少なくとも1つのリアルタイムデータストリームを処理するための第2のストリームハンドラ(22)の第2の仕様を含み、前記作成することは、該第2の仕様に従って第2のストリームハンドラ(22)を作成することを含み、及び、前記生成することは、リアルタイムデータストリームを該第2のストリームハンドラ(22)を通じて生成することを含むことからなる、請求項1に記載の方法。
  10. ローカルネットワークノード(16)は、仮想エリア(28)内の第1のオブジェクトに関連付けられおり、及び、前記仮想エリア(28)内の第2のオブジェクトに関連付けられている第2のリモートネットワークノードからのリアルタイムデータストリームを受け取ることを前記方法が更に含むことからなる、請求項1に記載の方法。
  11. 前記1つか又は複数のストリームハンドリング命令は、前記仮想エリア(28)内の前記第1及び第2のオブジェクトのそれぞれの位置を表すリアルタイム位置情報を含み、及び、前記生成することは、該リアルタイム位置情報からコンフィギュレーションパラメータ値を決定して、該コンフィギュレーションパラメータ値によって前記ストリームハンドラ(22)を構成することを含むことからなる、請求項10に記載の方法。
  12. 前記仮想エリア(28)内の第3のオブジェクトに関連付けられている第3のリモートネットワークノードから第2のリアルタイムデータストリームを受け取ることを更に含み、
    前記作成することは、前記1つか又は複数のストリームハンドリング命令内において指定されるミキシング機能を有した前記ストリームハンドラ(22)を構築することを含み、及び、生成することは、該ミキシング機能に従って第1のリアルタイムデータストリームと、前記第2のリアルタイムデータストリームとを組み合わせることを含むことからなる、請求項11に記載の方法。
  13. 前記1つか又は複数のストリームハンドリング命令は、第1のリアルタイムデータストリームとは異なるデータタイプにおける少なくとも1つのリアルタイムデータストリームを処理するための第2のストリームハンドラ(22)の第2の仕様を含み、
    第3のリモートネットワークノードから第2のリアルタイムデータストリームを受け取ることを前記方法が更に含み、及び、
    前記作成することは、前記第2の仕様に従って第2のストリームハンドラ(22)を作成することを含み、及び、前記生成することは、1つか又は複数の前記コンフィギュレーションパラメータ値に従って前記第2のストリームハンドラ(22)を構成して、該第2のストリームハンドラ(22)を通じて前記第1のリアルタイムデータストリームと前記第2のリアルタイムデータストリームとを処理することを含むことからなる、請求項11に記載の方法。
  14. 前記1つか又は複数のストリームハンドリング命令は、前記仮想エリア(28)内の前記第1及び第2のオブジェクトのそれぞれの位置を表すリアルタイム位置情報を含み、
    前記作成することは、前記1つか又は複数のストリームハンドリング命令内において指定される1つか又は複数のオブジェクト属性処理機能を有した前記ストリームハンドラ(22)を構築することを含み、
    前記生成することは、前記リアルタイム位置情報からオブジェクトコンフィギュレーションパラメータ値を決定して、前記結果データストリームを生成する間に、該オブジェクトコンフィギュレーションパラメータ値によって前記1つか又は複数のオブジェクト属性処理機能を動的に構成することを含み、及び、
    前記発生させることは、前記仮想エリア(28)内の前記第1及び第2のオブジェクトのビジュアル表現を含む可視出力を、前記結果データストリームに少なくとも部分的に基づいてレンダリングすることを含むことからなる、請求項10に記載の方法。
  15. 前記仮想エリア(28)内の前記第1のオブジェクトの配向と、位置と、動作と、及び、該位置に基づく姿勢とのうちの少なくとも1つに関して、前記第1のオブジェクトの前記ビジュアル表現を動的に制御するよう前記1つか又は複数のオブジェクト属性処理機能のうちの少なくとも1つが構成されることからなる、請求項14に記載の方法。
  16. 前記指定されるデータタイプは、オーディオであり、及び、前記発生させることは、可聴の出力を発生させることを含むことからなる、請求項1に記載の方法。
  17. 前記作成することは、前記1つか又は複数のストリームハンドリング命令内において指定される1つか又は複数のオーディオプロセッシング機能を有した前記ストリームハンドラ(22)を構築することを含むことからなる、請求項16に記載の方法。
  18. 前記ネットワークノードは、仮想エリア(28)内の第1のオブジェクトに関連付けられており、前記方法は、該仮想エリア(28)内の第2のオブジェクトに関連付けられている第2のネットワークノードからリアルタイムデータストリームを受け取ることを更に含み、及び、
    前記1つか又は複数のストリームハンドリング命令は、該仮想エリア(28)内の前記第1及び第2のオブジェクトのそれぞれの位置を表すリアルタイム位置情報を含み、及び、前記生成することは、該リアルタイム位置情報からオーディオプロセッシングコンフィギュレーションパラメータ値を決定して、該オーディオプロセッシングコンフィギュレーションパラメータ値によって前記ストリームハンドラ(22)を構成することを含むことからなる、請求項17に記載の方法。
  19. 前記作成することは、前記1つか又は複数のストリームハンドリング命令内において指定されるミキシング機能を有した前記ストリームハンドラ(22)を構築することを含み、及び、前記生成することは、該ミキシング機能に従って、前記リアルタイムデータストリームを、少なくとも1つの他のリアルタイムオーディオデータストリームと組み合わせることを含むことからなる、請求項16に記載の方法。
  20. 前記ローカルネットワークノード(16)において、
    前記リモートネットワークノードから受け取ったリモート公開定義を格納し、ここで、該定義は、1つか又は複数のリモートネットワークノードから利用可能なリアルタイムデータストリームが記載されたものであり、
    前記ローカルネットワークノード(16)のローカルリアルタイムカーネル構成要素によりリクエストされたリアルタイムデータストリームのローカル認可定義を格納し、及び、
    一致するリモート公開定義を有した前記ローカル認可定義の各々ごとにそれぞれのリアルタイムデータストリームリクエストを、1つか又は複数の前記リモートネットワークノードに送る
    ことを更に含むことからなる、請求項1に記載の方法。
  21. 前記ローカル認可定義に従って、前記ローカルリアルタイムカーネル構成要素のうちの幾つかの各々に対する前記リクエストに応答して前記1つか又は複数のリモートネットワークノードから受け取ったリアルタイムデータストリームを、前記ローカルネットワークノード(16)において導くことを更に含むことからなる、請求項20に記載の方法。
  22. 人間にとって知覚可能な出力を、前記結果データストリームに少なくとも部分的に基づいて前記ローカルネットワークノード(16)において発生させることを更に含むことからなる、請求項1に記載の方法。
  23. コンピュータ可読命令を格納するコンピュータ可読媒体と、
    メモリに結合されたデータプロセッシングユニットであって、
    ローカルネットワークノード(16)において、1つか又は複数のストリームハンドリング命令を、リモートネットワークノードから受け取り、ここで、該1つか又は複数のストリームハンドリング命令は、少なくとも1つのリアルタイムデータストリームを処理するためのストリームハンドラ(22)の仕様を含み、
    前記ローカルネットワークノード(16)において、前記仕様に従って、ストリームハンドラ(22)を作成し、及び、
    前記ローカルネットワークノード(16)において結果データストリームを生成する
    ことを含む動作を実施させるための動作可能な命令の実行に少なくとも部分的に基づいて、前記コンピュータ可読命令を実行するよう動作可能なデータプロセッシングユニット
    とを備えた装置であって、
    前記生成することが、前記作成したストリームハンドラ(22)を通じてリアルタイムデータストリームを処理することを含むことからなる、装置。
  24. 少なくとも1つのコンピュータ可読媒体であって、該コンピュータ可読媒体内に具現化されたコンピュータ可読プログラムコードを該コンピュータ可読媒体が有し、該コンピュータ可読プログラムコードは、
    ローカルネットワークノード(16)において、1つか又は複数のストリームハンドリング命令を、リモートネットワークノードから受け取り、ここで、該1つか又は複数のストリームハンドリング命令は、少なくとも1つのリアルタイムデータストリームを処理するためのストリームハンドラ(22)の仕様を含み、
    前記ローカルネットワークノード(16)において、前記仕様に従って、ストリームハンドラ(22)を作成し、及び、
    前記ローカルネットワークノード(16)において結果データストリームを生成する
    ことを含む方法を実現するために、コンピュータによって実行されるよう構成されており、前記生成することが、前記作成したストリームハンドラ(22)を通じてリアルタイムデータストリームを処理することを含むことからなる、少なくとも1つのコンピュータ可読媒体。
  25. リアルタイムデータストリーム処理を、コンピュータにより実現する方法であって、
    1つか又は複数のストリームハンドリング命令(210)から、リアルタイムストリームハンドラ(206)の仕様をパーズし、ここで、該パーズすることは、前記1つか又は複数のストリームハンドリング命令(210)から、入力ソース識別子、出力シンク識別子、及び、1つか又は複数のデータ処理オブジェクトの各々の識別子のそれぞれを、パーズすることを含んでおり、
    前記識別子のうちの幾つかのそれぞれに対応するリアルタイムストリーム処理オブジェクトをインスタンス化し、
    前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかを含む、方向付けられたグラフ(212)を、前記仕様に従って作成し、
    前記入力ソース識別子に対応する入力ソースからリアルタイムデータストリームを受け取り、及び、
    前記出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する
    ことを含み、
    前記生成することが、前記方向付けられたグラフ(212)を通じて前記リアルタイムデータストリームを処理することを含むことからなる、方法。
  26. 前記パーズすることは、前記1つか又は複数のストリームハンドリング命令(210)から、データ処理オブジェクトの識別子を抽出することを含み、及び、前記作成することは、前記抽出された識別子に対応するリアルタイムストリーム処理オブジェクトをインスタンス化したものから、前記方向付けられたグラフ(212)を組み立てることを含むことからなる、請求項25に記載の方法。
  27. 前記パーズすることは、前記1つか又は複数のストリームハンドリング命令(210)から、オーディオプロセッシングオブジェクトの識別子を抽出することを含み、及び、前記生成することは、前記抽出された識別子のうちの幾つかのそれぞれに対応する1つか又は複数のインスタンス化されたオーディオプロセッシングオブジェクトを通じて、前記リアルタイムデータストリームを処理することを含むことからなる、請求項25に記載の方法。
  28. 前記インスタンス化することは、それぞれの識別子についてオブジェクトライブラリをクエリーして、該クエリーすることに応答して該オブジェクトライブラリからオブジェクトを検索して、及び、該検索したオブジェクトをインスタンス化することを含むことからなる、請求項25に記載の方法。
  29. 前記インスタンス化することは、前記識別子のうちの幾つかのそれぞれを含んだアプリケーションプログラムインターフェースプロシージャ(API)コールを、処理オブジェクトに対して発行することを含むことからなる、請求項28に記載の方法。
  30. 前記生成することが、
    1つか又は複数の前記ストリームハンドリング命令(210)内において指定されたリアルタイム状態情報からコンフィギュレーションパラメータ値を決定し、及び、
    前記方向付けられたグラフ(212)内の1つか又は複数の前記インスタンス化されたリアルタイムストリーム処理オブジェクトを、前記コンフィギュレーションパラメータ値によって動的に構成する
    ことを含むことからなる、請求項25に記載の方法。
  31. 前記受け取ることは、前記仕様内の第2の入力ソース識別子に対応する第2の入力ソースからの第2のリアルタイムデータストリームを受け取ることを含み、及び、前記生成することは、前記方向付けられたグラフ(212)を通じて該第2のリアルタイムデータストリームを処理することを含むことからなる、請求項25に記載の方法。
  32. 前記インスタンス化することは、前記パーズした識別子のうちのそれぞれの1つに対応するリアルタイムストリームミキシングオブジェクト(220)をインスタンス化することを含み、前記作成することは、前記インスタンス化されたリアルタイムストリームミキシングオブジェクトを、前記方向付けられたグラフ(212)内へと組み込むことを含み、及び、前記生成することは、前記インスタンス化されたリアルタイムストリームミキシングオブジェクト(220)を実行して、前記第1のリアルタイムデータストリームと前記第2のリアルタイムデータストリームとを組み合わせることを含むことからなる、請求項31に記載の方法。
  33. 前記第1の入力ソースは、第1のリモートネットワークノードから到来するリアルタイムデータストリーム(214)の定義に対応し、及び、前記第2の入力ソースは、第2のリモートネットワークノードから到来するリアルタイムデータストリーム(214)の定義に対応することからなる、請求項32に記載の方法。
  34. 前記パーズすることは、前記1つか又は複数のストリームハンドリング命令(210)から、第2のリアルタイムストリームハンドラ(22)の第2の仕様をパーズすることを含み、該第2の仕様は、第2の入力ソース識別子、第2の出力シンク識別子、及び1つか又は複数のデータ処理オブジェクトの各々のそれぞれの識別子を含み、
    前記作成することは、前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかから、第2の方向付けられたグラフを、前記第2の仕様に従って作成することを含み、
    前記受け取ることが、前記第2の入力ソース識別子に対応する第2の入力ソースから第2のリアルタイムデータストリームを受け取ることを含み、ここで、前記第1及び第2のリアルタイムデータストリームは、データタイプに関して異なっており、及び、
    前記生成することが、第2の方向付けられたグラフを通じて、前記第2の出力シンク識別子に対応する第2の出力シンクへと、前記第2のリアルタイムデータストリームを処理することを含むことからなる、請求項25に記載の方法。
  35. 前記第1のリアルタイムデータストリームと前記第2のリアルタイムデータストリームとが、同時に処理されることからなる、請求項34に記載の方法。
  36. 前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの少なくとも1つが、ローカルハードウェア構成要素を制御するドライバモジュールに対するそれぞれのコールをカプセル化することからなる、請求項25に記載の方法。
  37. 前記パーズすること、前記インスタンス化すること、前記作成すること、前記受け取ること、前記生成すること、及び前記発生させることは、仮想エリア(28)内の第1のオブジェクトに関連付けられたローカルネットワークノード(16)上において実施され、及び、前記受け取ることは、該仮想エリア(28)内の第2のオブジェクトに関連付けられたリモートネットワークノードから前記リアルタイムデータストリームを受け取ることを含むことからなる、請求項25に記載の方法。
  38. 前記1つか又は複数のストリームハンドリング命令(210)は、前記仮想エリア(28)内の前記第1及び第2のオブジェクトのそれぞれの位置を表すリアルタイム位置情報を含み、及び、前記生成することは、該リアルタイム位置情報からコンフィギュレーションパラメータ値を決定して、前記方向付けられたグラフ内の、1つか又は複数の前記インスタンス化されたリアルタイムストリーム処理オブジェクトを、該コンフィギュレーションパラメータ値によって動的に構成することを含むことからなる、請求項37に記載の方法。
  39. 前記受け取ることは、前記仮想エリア(28)内の第3のオブジェクトに関連付けられている第2のリモートネットワークノードから第2のリアルタイムデータストリームを受け取ることを含み、前記作成することは、前記パーズした識別子のうちのそれぞれの1つに対応するインスタンス化されたミキシングオブジェクトを有した前記方向付けられたグラフを構築することを含み、及び、前記生成することは、該インスタンス化されたミキシングオブジェクト(220)を実行して、前記第1のリアルタイムデータストリームと前記第2のリアルタイムデータストリームとを組み合わせることを含むことからなる、請求項38に記載の方法。
  40. 前記パーズすることは、前記1つか又は複数のストリームハンドリング命令(210)から、第2のリアルタイムストリームハンドラ(22)の第2の仕様をパーズすることを含み、該第2の仕様は、第2の入力ソース識別子、第2の出力シンク識別子、及び1つか又は複数のデータ処理オブジェクトの各々のそれぞれの識別子を含み、
    前記作成することは、前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかから、第2の方向付けられたグラフを、前記第2の仕様に従って作成することを含み、
    前記受け取ることが、前記第2の入力ソース識別子に対応する第2の入力ソースから、第2のリアルタイムデータストリームを受け取ることを含み、ここで、該第2の入力ソースは、第2のリモートネットワークノードから到来するリアルタイムデータストリームの定義に対応しており、及び、前記第1及び第2のリアルタイムデータストリームは、データタイプに関して異なっており、及び、
    前記生成することが、第2の方向付けられたグラフを通じて、前記第2の出力シンク識別子に対応する第2の出力シンクへと、前記第2のリアルタイムデータストリームを処理することを含むことからなる、請求項38に記載の方法。
  41. 前記パーズすることは、前記1つか又は複数のストリームハンドリング命令(210)から、グラフィックオブジェクト外観処理オブジェクトの識別子を抽出することを含み、及び、
    前記作成することは、前記抽出した識別子のうちの幾つかの各々に対応する1つか又は複数のインスタンス化されたグラフィックオブジェクト外観処理オブジェクトを通じて前記リアルタイムデータストリームを処理して、該インスタンス化されたグラフィックオブジェクト外観処理オブジェクトを動的に構成して、前記仮想エリア(28)内の前記第1のオブジェクトの配向と、位置と、動作と、該位置に少なくとも部分的に基づいた姿勢とのうちの少なくとも1つに関して、第1のオブジェクトのビジュアル表現を制御することを含むことからなる、請求項38に記載の方法。
  42. 前記パーズすること、前記インスタンス化すること、前記作成すること、前記受け取ること、前記生成すること、及び前記発生させることは、リモートネットワークノード上において実施され、及び、
    ローカルネットワークノード(16)上において実行するユーザレベルアプリケーションのインターフェース要素を、前記リアルタイムデータストリームに関連付けて、及び、該ローカルネットワークノード(16)から前記リモートネットワークノードへと該リアルタイムデータストリームを伝達する、ことを前記方法が更に含むことからなる、請求項25に記載の方法。
  43. 前記1つか又は複数のストリームハンドリング命令を、前記ローカルネットワークノード(16)から前記リモートネットワークノードへと伝達することを更に含むことからなる、請求項42に記載の方法。
  44. 前記ユーザレベルアプリケーションが、デスクトップアプリケーションプログラムであることからなる、請求項43に記載の方法。
  45. 前記ユーザレベルアプリケーションが、MicrosoftのOffice(登録商標)デスクトップアプリケーションプログラムであることからなる、請求項44に記載の方法。
  46. 機能に対する参照を行うことなく、前記ストリームハンドリング命令(210)が、前記リアルタイムストリームハンドラ(22)を指定することからなる、請求項25に記載の方法。
  47. ストリームタイプに対する参照を行うことなく、前記ストリームハンドリング命令(210)が、前記リアルタイムストリームハンドラ(22)を指定することからなる、請求項25に記載の方法。
  48. 連続する固定長インターバルの各々の間、前記出力シンクから前記入力ソースまでの前記方向付けられたグラフ(212)を、トラバースすることを、前記生成することが含むことからなる、請求項25に記載の方法。
  49. 前記パーズすることが、1つか又は複数の記録をパーズすることを含み、該1つか又は複数の記録の各々は、それぞれの定義タイプと、それぞれの定義長と、定義タイプ特定フィールド及びそれぞれの定義タイプ特定定義のうちの少なくとも1つと、を含むことからなる、請求項25に記載の方法。
  50. 前記結果データストリームに少なくとも部分的に基づいて、人間にとって知覚可能な出力を発生させることを更に含むことからなる、請求項25に記載の方法。
  51. コンピュータ可読命令を格納するコンピュータ可読媒体と、
    メモリに結合されたデータプロセッシングユニットであって、
    1つか又は複数のストリームハンドリング命令(210)から、リアルタイムストリームハンドラ(22)の仕様をパーズし、ここで、該パーズすることは、前記1つか又は複数のストリームハンドリング命令から、入力ソース識別子、出力シンク識別子、及び、1つか又は複数のデータ処理オブジェクトの各々の識別子のそれぞれを、パーズすることを含んでおり、
    前記識別子のうちの幾つかのそれぞれに対応するリアルタイムストリーム処理オブジェクトをインスタンス化し、
    前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかを含む、方向付けられたグラフ(212)を、前記仕様に従って作成し、
    前記入力ソース識別子に対応する入力ソースからリアルタイムデータストリーム(214)を受け取り、及び、
    前記出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する
    ことを含む動作を実施させるための動作可能な命令の実行に少なくとも部分的に基づいて、前記コンピュータ可読命令を実行するよう動作可能なデータプロセッシングユニット
    とを備えた装置であって、
    前記生成することが、前記方向付けられたグラフ(212)を通じてリアルタイムデータストリームを処理することを含むことからなる、装置。
  52. 少なくとも1つのコンピュータ可読媒体であって、該コンピュータ可読媒体内に具現化されたコンピュータ可読プログラムコードを該コンピュータ可読媒体が有し、該コンピュータ可読プログラムコードは、
    1つか又は複数のストリームハンドリング命令(210)から、リアルタイムストリームハンドラ(22)の仕様をパーズし、ここで、該パーズすることは、前記1つか又は複数のストリームハンドリング命令から、入力ソース識別子、出力シンク識別子、及び、1つか又は複数のデータ処理オブジェクトの各々の識別子のそれぞれを、パーズすることを含んでおり、
    前記識別子のうちの幾つかのそれぞれに対応するリアルタイムストリーム処理オブジェクトをインスタンス化し、
    前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかを含む、方向付けられたグラフ(212)を、前記仕様に従って作成し、
    前記入力ソース識別子に対応する入力ソースからリアルタイムデータストリーム(214)を受け取り、及び、
    前記出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する
    ことを含む方法を実現するために、コンピュータによって実行されるよう構成されており、前記生成することが、前記方向付けられたグラフ(212)を通じてリアルタイムデータストリームを処理することを含むことからなる、少なくとも1つのコンピュータ可読媒体。
  53. リアルタイムデータストリーム処理を、コンピュータにより実現する方法であって、
    ローカルネットワークノード(16)と、少なくとも1つのリモートネットワークノードとの間において、少なくとも1つのリアルタイムデータストリーム接続を確立し(230)、
    前記ローカルネットワークノード(16)において、前記リモートネットワークノードにより発生した少なくとも1つのリアルタイムデータストリームを処理し、ここで、該処理することは、1つか又は複数のリアルタイムデータ処理動作を通じて前記少なくとも1つのリアルタイムデータストリームを処理して結果データストリームを生成することを含み(232)、
    前記処理を監視し(234)、及び、
    前記処理が性能目標から逸れることを監視することに基づく決定に応答して、リアルタイム性能目標付けルーチンに従って前記処理を変更する(236)
    をことを含む、方法。
  54. 前記処理が前記性能目標を満たすことに失敗したという決定に応答して、前記リアルタイムデータストリームにおける1つか又は複数の部分の処理を省略することを、前記変更すること(236)が含むことからなる、請求項53に記載の方法。
  55. 前記処理が前記性能目標を満たすことに失敗したという決定に応答して、1つか又は複数の前記リアルタイムデータ処理動作を省略することを、前記変更すること(236)が含むことからなる、請求項53に記載の方法。
  56. 前記省略することは、前記性能目標の外側であるそれぞれの性能値によって特徴付けられた1つか又は複数の前記データ処理動作を省略することを含むことからなる、請求項55に記載の方法。
  57. 前記データ処理動作のうちの幾つかは、それぞれの優先度値が割り当てられ、及び、前記省略することは、該割り当てられた優先度値に基づいて1つか又は複数の前記データ処理動作を優先的に省略することを含むことからなる、請求項55に記載の方法。
  58. 前記処理が前記性能目標を満たすことに失敗したという決定に応答して、前記リアルタイムデータ処理動作のうちの少なくとも1つを、異なるそれぞれのリアルタイムデータ処理動作に置き換えることを、前記変更すること(236)が含むことからなる、請求項53に記載の方法。
  59. 1つか又は複数の前記リアルタイムデータ処理動作は、それぞれ優先度値が割り当てられ、前記リアルタイム性能目標付けルーチンは、省略すべき前記データ処理動作のうちの幾つかを、前記割り当てられた優先度値に基づいて決定するヒューリスティックを含み、及び、前記変更すること(236)は、該ヒューリスティックに従って実施されることからなる、請求項53に記載の方法。
  60. 前記ヒューリスティックは、省略すべき前記データ処理動作のうちの幾つかを、時間ベースの性能統計値によって、前記割り当てられた優先度値の重み付けを行うことに基づいて、決定することからなる、請求項59に記載の方法。
  61. 前記変更すること(236)は、前記指定された性能目標内に前記処理がなるまで、前記処理を反復的に変更することを含むことからなる、請求項53に記載の方法。
  62. 前記処理すること(232)が、
    処理オブジェクトをインスタンス化し、ここで、該処理オブジェクトのうちの幾つかは、前記データ処理動作のうちの幾つかのそれぞれを実施するよう動作可能なものであり、
    前記インスタンス化された処理オブジェクトのうちの幾つかから、方向付けられたグラフを構築し、及び、
    前記方向付けられたグラフを通じて前記リアルタイムデータストリームを処理する
    ことを含むことからなる、請求項53に記載の方法。
  63. 前記変更すること(236)は、前記方向付けられたグラフから、1つか又は複数の前記インスタンス化された処理オブジェクトを、一部取り除くことを含むことからなる、請求項62に記載の方法。
  64. 前記処理オブジェクトのうちの幾つかは、それぞれの優先度値が割り当てられ、及び、前記一部取り除くことは、前記インスタンス化された処理オブジェクトのうちの幾つかを、前記方向付けられたグラフから、前記割り当てられた優先度値に基づいて排除することを含むことからなる、請求項63に記載の方法。
  65. 前記一部取り除くことは、優先度閾値を満たすことに失敗した、それぞれの優先度値が割り当てられた前記インスタンス化された処理オブジェクトのうちの幾つかを、前記方向付けられたグラフから、排除することを含むことからなる、請求項64に記載の方法。
  66. 前記処理すること(232)が、
    第2の方向付けられたグラフを、前記インスタンス化された処理オブジェクトのうちの幾つかから構築し、及び、
    前記ローカルネットワークノード(16)と前記少なくとも1つのリモートネットワークノードとのうちの一方により発生した第2のリアルタイムデータストリームを、前記第2の方向付けられたグラフを通じて処理する
    ことを含むことからなる、請求項62に記載の方法。
  67. 前記第1及び第2の方向付けられたグラフは、それぞれの優先度値が割り当てられており、及び、前記変更すること(236)は、前記第1及び第2の方向付けられたグラフのうちの一方を、前記割り当てられた優先度値に基づいて優先的に修正することを含むことからなる、請求項66に記載の方法。
  68. 前記変更すること(236)は、最低の優先度値が割り当てられた前記第1及び第2の方向付けられたグラフのうちの一方のそれぞれを通じて、前記第1及び第2のリアルタイムデータストリームのうちの一方の前記処理を省略することを含むことからなる、請求項67に記載の方法。
  69. 前記処理すること(232)は、前記ローカルネットワークノード(16)と、前記少なくとも1つのリモートネットワークノードとのうちの一方により発生した第2のリアルタイムデータストリームを、前記方向付けられたグラフを通じて処理することを含むことからなる、請求項62に記載の方法。
  70. 前記第1及び第2のリアルタイムデータストリームは、それぞれの優先度値が割り当てられており、及び、前記変更すること(236)は、前記割り当てられた優先度値に基づいて、前記第1及び第2のリアルタイムデータストリームのうちの一方を処理することを優先的に変更することを含むことからなる、請求項69に記載の方法。
  71. 前記確立すること(230)は、前記ローカルネットワークノード(16)と複数のリモートネットワークノードとの間においてそれぞれのリアルタイムデータストリーム接続を確立することを含み、及び、前記処理すること(232)は、前記リモートネットワークノードのうちの幾つかのそれぞれにより発生したリアルタイムデータストリームを、前記方向付けられたグラフを通じて処理することを含むことからなる、請求項62に記載の方法。
  72. 前記リアルタイムデータストリームは、それぞれの優先度値が割り当てられており、及び、前記変更すること(236)は、1つか又は複数の前記リアルタイムデータストリームの処理を、前記割り当てられた優先度値に基づいて優先的に変更することを含むことからなる、請求項71に記載の方法。
  73. 前記方向付けられたグラフは、前記インスタンス化された処理オブジェクトのうちの幾つかのそれぞれから成る複数の方向付けられたチェーンを含み、及び、前記処理すること(232)は、前記リアルタイムデータストリームのうちの1つのそれぞれを、前記方向付けられたチェーンの各々を通じて処理することを含み、ここで、該リアルタイムデータストリームの各々は、前記ローカルネットワークノード(16)と、前記リモートネットワークノードとのうちの一方のそれぞれにより生じられることからなる、請求項71に記載の方法。
  74. 前記変更すること(236)は、前記指定された性能目標内に前記処理がなるまで、前記処理を反復的に変更することを含み、各反復の間、前記変更することは、(i)前記方向付けられたグラフから前記チェーンのうちの1つか又は複数を排除することと、(ii)前記方向付けられたグラフから、前記インスタンス化された処理オブジェクトのうちの1つか又は複数を一部取り除くことと、のうちの一方か又は両方を実施することを含むことからなる、請求項73に記載の方法。
  75. 前記性能目標は、前記結果データストリームの生成に関する時間ベースの閾値を含むことからなる、請求項53に記載の方法。
  76. 前記ローカルネットワークノード(16)において、リモートネットワークノードから、前記1つか又は複数のリアルタイムデータ処理動作に対するそれぞれの優先度値の割り当てを含む1つか又は複数のストリームハンドリング命令を受け取ることを、前記方法が更に含み、
    前記変更すること(236)は、前記割り当てられた優先度値に基づいて前記処理を変更することを含むことからなる、請求項53に記載の方法。
  77. 前記変更すること(236)は、前記処理が前記性能目標を満たすことに失敗したという決定に応答して、計算リソース負荷を、より低いレベルに低減することを含むことからなる、請求項53に記載の方法。
  78. 前記変更すること(236)は、前記処理が前記性能目標を満たしているという決定に応答して、前記計算リソース負荷を、前記より低いレベルから増加させることを含むことからなる、請求項77に記載の方法。
  79. 前記リアルタイムデータストリームは、複数フレーム内へとパケット化されており、及び、前記監視することは、該フレームの各々に関して実施されることからなる、請求項53に記載の方法。
  80. 前記処理すること(232)は、 ローカルクロックに従って設定される連続的な固定長インターバルの各々の間、前記リアルタイムデータストリームの前記フレームを処理することを含むことからなる、請求項79に記載の方法。
  81. 前記ローカルネットワークノード(16)において、前記ローカルクロックを、リモートマスタークロックサービスに同期させることを更に含むことからなる、請求項80に記載の方法。
  82. 前記監視すること(234)が、前記ローカルネットワークノード(16)における少なくとも1つのプロセッサの利用を監視することを含むことからなる、請求項53に記載の方法。
  83. 前記監視すること(234)が、前記ローカルネットワークノード(16)における少なくとも1つのネットワーキングリソースによる帯域幅の利用を監視することを含むことからなる、請求項53に記載の方法。
  84. 前記ローカルネットワークノード(16)において、前記結果データストリームに応答して、人間にとって知覚可能な出力を発生させることを更に含むことからなる、請求項53に記載の方法。
  85. 前記ローカルネットワークノード(16)と前記リモートネットワークノードとが、仮想エリア(28)内のそれぞれのオブジェクトに関連付けられており、及び、人間にとって知覚可能な出力は、該仮想エリア(28)内の該オブジェクトの、ディスプレイ上への視覚化であることからなる、請求項84に記載の方法。
  86. コンピュータ可読命令を格納するコンピュータ可読媒体と、
    メモリに結合されたデータプロセッシングユニットであって、
    ローカルネットワークノード(16)と、少なくとも1つのリモートネットワークノードとの間において、少なくとも1つのリアルタイムデータストリーム接続を確立し(230)、
    前記ローカルネットワークノード(16)において、前記リモートネットワークノードにより発生した少なくとも1つのリアルタイムデータストリームを処理し、ここで、該処理することは、1つか又は複数のリアルタイムデータ処理動作を通じて前記少なくとも1つのリアルタイムデータストリームを処理して結果データストリームを生成することを含み(232)、
    前記処理を監視し(234)、及び、
    前記処理が性能目標から逸れることを監視することに基づく決定に応答して、リアルタイム性能目標付けルーチンに従って前記処理を変更する(236)
    ことを含む動作を実施させるための動作可能な命令の実行に少なくとも部分的に基づいて、前記コンピュータ可読命令を実行するよう動作可能なデータプロセッシングユニット
    とを備える、装置。
  87. 少なくとも1つのコンピュータ可読媒体であって、該コンピュータ可読媒体内に具現化されたコンピュータ可読プログラムコードを該コンピュータ可読媒体が有し、該コンピュータ可読プログラムコードは、
    ローカルネットワークノード(16)と、少なくとも1つのリモートネットワークノードとの間において、少なくとも1つのリアルタイムデータストリーム接続を確立し(230)、
    前記ローカルネットワークノード(16)において、前記リモートネットワークノードにより発生した少なくとも1つのリアルタイムデータストリームを処理し、ここで、該処理することは、1つか又は複数のリアルタイムデータ処理動作を通じて前記少なくとも1つのリアルタイムデータストリームを処理して結果データストリームを生成することを含み(232)、
    前記処理を監視し(234)、及び、
    前記処理が性能目標から逸れることを監視することに基づく決定に応答して、リアルタイム性能目標付けルーチンに従って前記処理を変更する(236)
    ことを含む方法を実現するために、コンピュータによって実行されるよう構成されていることからなる、少なくとも1つのコンピュータ可読媒体。
  88. コンピュータによって実現される方法であって、
    コネクションレス・トランスポート・プロトコルに従ってトランスポートストリームに関するリモートネットワークノードとの第1のセッションを、ローカルネットワークノード(16)上において確立し(362)、
    前記ローカルネットワークノード(16)上における1つか又は複数のソフトウェアエンティティのために、前記第1のセッション内において、前記ローカルネットワークノード(16)と前記リモートネットワークノードとの間においてデータが伝達される1つか又は複数のチャンネルを自動的にオープンし(364)、
    前記第1のセッション内において、複数チャンネルのうちの幾つかのオープンチャンネルを識別するテーブルを維持して、それぞれの属性値をその識別されたチャンネルに関連付け(366)、
    前記第1のセッションが失敗したという決定に応答して、前記コネクションレス・トランスポート・プロトコルに従って、第2のトランスポートストリームに関する前記リモートネットワークノードとの第2のセッションを確立することを自動的に試み(368)、及び、
    前記第2のセッションの確立の成功に応答して、前記テーブル内の識別されたチャンネルの各々を、自動的にオープンする(370)
    ことを含む、方法。
  89. 前記確立すること(362)は、前記リモートネットワークノードに割り当てられる第1のステーション定義を決定することを含み、及び、前記維持することは、該第1のステーション定義を、前記オープンチャンネルの各々の属性として、前記テーブル内に格納することを含むことからなる、請求項88に記載の方法。
  90. 前記第1のセッションの失敗を発見することを、前記方法が更に含み、
    前記発見することが、前記リモートネットワークノードに割り当てられる現在のステーション定義を決定し、及び、該現在のステーション定義が、前記第1のステーション定義とは異なっているという決定に応答して、前記第1のセッションが失敗したということを決定することを含むことからなる、請求項89に記載の方法。
  91. 前記決定することが、前記リモートネットワークノードから受け取ったステーション定義記録をパーズすることを含み、
    前記ステーション定義記録は、フィールドのセットを含み、該フィールドの各々は、それぞれのフィールドタイプと、関連付けられたフィールド値とによって画定され、及び、該フィールドタイプの各々は、それぞれのグローバル固有識別子(GUID)によって識別されることからなる、請求項89に記載の方法。
  92. 前記ローカルネットワークノード(16)から利用可能なローカル公開チャンネルと、前記1つか又は複数のソフトウェアエンティティによってリクエストされたローカル認可チャンネルと、前記リモートネットワークノードから利用可能なリモート公開チャンネルと、前記リモートネットワークノードによってリクエストされたリモート認可チャンネルと、の属性を記録することを更に含むことからなる、請求項88に記載の方法。
  93. 前記記録することは、前記ローカル公開チャンネル上にデータを公開するための容量を示す前記複数ソフトウェアエンティティのうちの1つのソフトウェアエンティティの識別子と、前記ローカル公開チャンネルを認可するリモートネットワークノードの識別子と、前記ローカル公開チャンネルの識別子と、を含む記録を、前記ローカル公開チャンネルの各々ごとに維持することを含むことからなる、請求項92に記載の方法。
  94. 前記記録することは、前記ローカル認可チャンネルを認可する前記複数ソフトウェアエンティティのうちの1つのソフトウェアエンティティの識別子と、前記ローカル認可チャンネル上にデータを公開するための容量を示すリモートネットワークノードの識別子と、前記ローカル認可チャンネルの識別子と、前記ローカル認可チャンネルに関連付けられた1つか又は複数のネットワークトランスポートパラメータと、を含む記録を、前記ローカル認可チャンネルの各々ごとに維持することを含むことからなる、請求項92に記載の方法。
  95. 前記記録することは、前記リモート公開チャンネル上においてデータを公開するための容量を示すリモートネットワークノードの識別子と、前記リモート公開チャンネルの識別子と、を含む記録を、前記リモート公開チャンネルの各々ごとに維持することを含むことからなる、請求項92に記載の方法。
  96. 前記オープンすることは、前記ローカル公開チャンネルを画定する記録を前記リモートネットワークノードに送ることを含むことからなる、請求項92に記載の方法。
  97. 前記オープンすることは、前記リモート公開チャンネルのうちの1つのリモート公開チャンネルの識別子に一致する識別子を有する前記ローカル認可チャンネルの各々の記録を、前記リモートネットワークノードに送ることを含むことからなる、請求項92に記載の方法。
  98. 前記確立すること(362)は、
    インターネットプロトコル(IP)アドレスと、ポートアドレスと、トランスポートプロトコルのグローバル固有識別子とを含むセッションの定義を作成して、及び、
    前記定義を前記リモートネットワークノードに送る
    ことを含むことからなる、請求項88に記載の方法。
  99. 前記セッション内において、前記1つか又は複数のオープンチャンネル上で、前記ローカルネットワークノード(16)と前記リモートネットワークノードとの間においてデータを伝達することを更に含むことからなる、請求項88に記載の方法。
  100. 前記伝達することは、記録内の前記データを伝達することを含み、該記録の各々は、フィールドのセットを含み、該フィールドの各々は、それぞれのフィールドタイプと、関連付けられたフィールド値とによって画定され、及び、該フィールドタイプの各々は、それぞれのGUIDによって識別されることからなる、請求項99に記載の方法。
  101. 前記伝達することは、レンダリング可能なデータのパケットを含むメディアデータを含むメディア記録を伝達することと、コンフィギュレーション設定の定義を含むコンフィギュレーションデータを含むコンフィギュレーション記録を伝達することとを含むことからなる、請求項99に記載の方法。
  102. 前記伝達することは、メディア記録とコンフィギュレーション記録とを、トランスポートストリーム上のトランスポート記録内にカプセル化することを含むことからなる、請求項101に記載の方法。
  103. 前記カプセル化することは、第1のデータ圧縮サービスを用いて前記メディア記録のうちの幾つかを圧縮することと、第2のデータ圧縮サービスを用いて前記コンフィギュレーション記録のうちの幾つかを圧縮することとを含むことからなる、請求項102に記載の方法。
  104. 前記カプセル化することは、前記トランスポート記録を、それらが伝達される複数チャンネルのうちの幾つかのチャンネルの各々の識別子に関連付け、該トランスポート記録を暗号化し、及び、その暗号化されたトランスポート記録を順序付けることを含むことからなる、請求項102に記載の方法。
  105. 前記リモートネットワークノードから伝達された前記トランスポート記録のうちの幾つかを、前記ローカルネットワークノード(16)において受け取ることを、前記方法が更に含み、
    前記受け取ることは、前記トランスポート記録を解読して、その解読したトランスポート記録内に含まれる前記メディア記録と前記コンフィギュレーション記録とを、ソフトウェアエンティティのうちの認可する幾つかのソフトウェアエンティティへと発送することを含むことからなる、請求項102に記載の方法。
  106. コンピュータ可読命令を格納するコンピュータ可読媒体と、
    メモリに結合されたデータプロセッシングユニットであって、
    コネクションレス・トランスポート・プロトコルに従ってトランスポートストリームに関するリモートネットワークノードとの第1のセッションを、ローカルネットワークノード(16)上において確立し(362)、
    前記ローカルネットワークノード(16)上における1つか又は複数のソフトウェアエンティティのために、前記第1のセッション内において、前記ローカルネットワークノード(16)と前記リモートネットワークノードとの間においてデータが伝達される1つか又は複数のチャンネルを自動的にオープンし(364)、
    前記第1のセッション内において、複数チャンネルのうちの幾つかのオープンチャンネルを識別するテーブルを維持して、それぞれの属性値をその識別されたチャンネルに関連付け(366)、
    前記第1のセッションが失敗したという決定に応答して、前記コネクションレス・トランスポート・プロトコルに従って、第2のトランスポートストリームに関する前記リモートネットワークノードとの第2のセッションを確立することを自動的に試み(368)、及び、
    前記第2のセッションの確立の成功に応答して、前記テーブル内の識別されたチャンネルの各々を、自動的にオープンする(370)
    ことを含む動作を実施させるための動作可能な命令の実行に少なくとも部分的に基づいて、前記コンピュータ可読命令を実行するよう動作可能なデータプロセッシングユニット
    とを備える、装置。
  107. 少なくとも1つのコンピュータ可読媒体であって、該コンピュータ可読媒体内に具現化されたコンピュータ可読プログラムコードを該コンピュータ可読媒体が有し、該コンピュータ可読プログラムコードは、
    コネクションレス・トランスポート・プロトコルに従ってトランスポートストリームに関するリモートネットワークノードとの第1のセッションを、ローカルネットワークノード(16)上において確立し(362)、
    前記ローカルネットワークノード(16)上における1つか又は複数のソフトウェアエンティティのために、前記第1のセッション内において、前記ローカルネットワークノード(16)と前記リモートネットワークノードとの間においてデータが伝達される1つか又は複数のチャンネルを自動的にオープンし(364)、
    前記第1のセッション内において、複数チャンネルのうちの幾つかのオープンチャンネルを識別するテーブルを維持して、それぞれの属性値をその識別されたチャンネルに関連付け(366)、
    前記第1のセッションが失敗したという決定に応答して、前記コネクションレス・トランスポート・プロトコルに従って、第2のトランスポートストリームに関する前記リモートネットワークノードとの第2のセッションを確立することを自動的に試み(368)、及び、
    前記第2のセッションの確立の成功に応答して、前記テーブル内の識別されたチャンネルの各々を、自動的にオープンする(370)
    ことを含む方法を実現するために、コンピュータによって実行されるよう構成されていることからなる、少なくとも1つのコンピュータ可読媒体。
  108. ローカルネットワークノード(16)上において実施される方法であって、
    1つか又は複数のカーネルサービス構成要素を含むカーネル構成要素のリストをパーズし(320)、
    前記パーズしたリスト内の全てのカーネル構成要素であって、ローカルな保存場所から無くなっている、該全てのカーネル構成要素を決定し(322)、
    無くなっていることが決定された前記カーネル構成要素の各々を回復させ(324)、
    前記カーネルサービスカーネル構成要素のうちの幾つかから、カーネルサービスをインスタンス化し(326)、
    前記インスタンス化されたカーネルサービスを、仮想エリア(28)に関して画定された通信環境内における1つか又は複数のリモートネットワークノードと伝達し合うために実行する(328)
    ことを含む、方法。
  109. 前記インスタンス化すること(326)は、ストリーム接続カーネルサービスをインスタンス化することを含み、及び、前記実行すること(328)は、前記ストリーム接続カーネルサービスを実行して、信頼性機能、認証機能、及び暗号化機能のうちの少なくとも1つを提供する少なくとも1つのストリームトランスポートプラグインを動的にロードすることを含むことからなる、請求項108に記載の方法。
  110. 前記実行すること(328)は、前記リモートネットワークノードのうちの1つから受け取ったネットワーク接続定義に応答して、前記少なくとも1つのストリームトランスポートプラグインを動的にロードすることを含むことからなる、請求項109に記載の方法。
  111. 前記インスタンス化すること(326)は、リアルタイムスケジューラカーネルサービスをインスタンス化することを含み、及び、前記実行すること(328)は、前記リアルタイムスケジューラカーネルサービスを実行して、時間同期機能を提供するタイムサービスプラグインを動的にロードすることを含むことからなる、請求項108に記載の方法。
  112. 前記実行すること(328)は、前記リモートネットワークノードのうちの1つから受け取ったネットワーク接続定義に応答して、前記タイムサービスプラグインを動的にロードすることを含むことからなる、請求項111に記載の方法。
  113. 前記インスタンス化すること(326)は、1つか又は複数のストリームハンドリングカーネルサービスをインスタンス化することを含み、及び、前記実行すること(328)は、前記1つか又は複数のストリームハンドリングカーネルサービスを実行して、ストリーム処理機能を提供する1つか又は複数のプラグインから、少なくとも1つのストリームハンドラ(22)を動的に作成及び構成することを含むことからなる、請求項108に記載の方法。
  114. 前記実行すること(328)は、前記リモートネットワークノードのうちの1つから受け取ったストリームハンドラ仕様に応答して、前記ストリームハンドラ(22)を動的に作成及び構成することを含むことからなる、請求項113に記載の方法。
  115. 前記実行すること(328)は、前記プラグインのうちの複数プラグインを、方向付けられたグラフ内へと、前記ストリームハンドラ仕様に従って組み立てることを含むことからなる、請求項114に記載の方法。
  116. 前記実行すること(328)は、前記1つのリモートネットワークノードから受け取った第2のストリームハンドラ仕様に従って、前記プラグインのうちの1つを、第2の方向付けられたグラフ内へと組み立てることを含み、前記第1及び第2の方向付けられたグラフは、異なるそれぞれのプラグイントポロジを有することからなる、請求項115に記載の方法。
  117. 前記構成することが、前記ストリームハンドラ(22)を動的に構成すると共に、該ストリームハンドラ(22)が、前記リモートネットワークノードのうちの1つから受け取ったリアルタイムデータストリームを処理することを含むことからなる、請求項114に記載の方法。
  118. 前記1つか又は複数のリモートネットワークノードは、前記仮想エリア(28)内の各オブジェクトに関連付けられており、及び、前記構成することは、前記仮想エリア(28)内のオブジェクトの位置に基づいてコンフィギュレーションパラメータ値を決定して、前記ストリームハンドラ(22)内において前記プラグインのうちの幾つかを、該コンフィギュレーションパラメータ値により構成することを含むことからなる、請求項114に記載の方法。
  119. 前記ローカルネットワークノード(16)上において、
    前記仮想エリア(28)に進入する意志を、ネットワークインフラサービスに宣言し、及び、
    前記仮想エリア(28)をレンダリングするために必要なプラグインの識別(ID)を前記ネットワークインフラサービスから受け取る
    ことを更に含むことからなる、請求項108に記載の方法。
  120. 前記ローカルネットワークノード(16)上において、
    前記ローカルネットワークノード(16)から無くなっている前記プラグインのうちの幾つかを、リモートネットワークノードから回復させる
    ことを更に含むことからなる、請求項119に記載の方法。
  121. 前記プラグインのうちの少なくとも1つをロードし、及び、前記ローカルネットワークノード(16)上で前記仮想エリア(28)をレンダリングするプロセス内において、該ロードしたプラグインにおける1つか又は複数の機能を呼び出すことを更に含むことからなる、請求項119に記載の方法。
  122. 前記ローカルネットワークノード(16)と、前記リモートネットワークノードのうちの1つとの間におけるネットワークセッションを確立することを前記方法が更に含み、
    前記確立することは、識別されたトランスポートアプリケーションプログラミングインターフェース(API)のバリアントのセットの識別(ID)を受け取って、該セットから前記バリアントのうちの1つを選択して、及び、前記セッション時に前記ローカルネットワークノード(16)と前記1つのリモートネットワークノードとの間においてリアルタイムデータストリームを転送するプロセス内において、該選択されたバリアントにおける1つか又は複数の機能を呼び出すことを含むことからなる、請求項108に記載の方法。
  123. 前記呼び出すことは、前記識別されたトランスポートAPIをサポートするトランスポートプラグインをロードして、該トランスポートプラグインにおける1つか又は複数の機能を呼び出すことを含むことからなる、請求項122に記載の方法。
  124. コンピュータ可読命令を格納するコンピュータ可読媒体と、
    メモリに結合されたデータプロセッシングユニットであって、
    1つか又は複数のカーネルサービス構成要素を含むカーネル構成要素のリストをパーズし(320)、
    前記パーズしたリスト内の全てのカーネル構成要素であって、ローカルな保存場所から無くなっている、該全てのカーネル構成要素を決定し(322)、
    無くなっていることが決定された前記カーネル構成要素の各々を回復させ(324)、
    前記カーネルサービスカーネル構成要素のうちの幾つかから、カーネルサービスをインスタンス化し(326)、及び、
    前記インスタンス化されたカーネルサービスを、仮想エリア(28)に関して画定された通信環境内における1つか又は複数のリモートネットワークノードと伝達し合うために実行する(328)
    ことを含む動作を実施させるための動作可能な命令の実行に少なくとも部分的に基づいて、前記コンピュータ可読命令を実行するよう動作可能なデータプロセッシングユニット
    とを備える、装置。
  125. 少なくとも1つのコンピュータ可読媒体であって、該コンピュータ可読媒体内に具現化されたコンピュータ可読プログラムコードを該コンピュータ可読媒体が有し、該コンピュータ可読プログラムコードは、
    1つか又は複数のカーネルサービス構成要素を含むカーネル構成要素のリストをパーズし(320)、
    前記パーズしたリスト内の全てのカーネル構成要素であって、ローカルな保存場所から無くなっている、該全てのカーネル構成要素を決定し(322)、
    無くなっていることが決定された前記カーネル構成要素の各々を回復させ(324)、
    前記カーネルサービスカーネル構成要素のうちの幾つかから、カーネルサービスをインスタンス化し(326)、及び、
    前記インスタンス化されたカーネルサービスを、仮想エリア(28)に関して画定された通信環境内における1つか又は複数のリモートネットワークノードと伝達し合うために実行する(328)
    ことを含む方法を実現するために、コンピュータによって実行されるよう構成されていることからなる、少なくとも1つのコンピュータ可読媒体。
  126. ローカルネットワークノード(16)上において実施される方法であって、
    仮想エリア(28)によって画定されたコンテキスト内において少なくとも1つのリモートネットワークノードとのリアルタイム通信をサポートするために前記ローカルネットワークノード(16)を構成し、ここで、該構成することが、
    指定されたアプリケーションプログラムインターフェース(API)をサポートする全プラグインを列挙するためのコールに応答して、プラグインデータベース内における該指定されたAPIに関連付けられている全プラグインの識別子を含むリストを返し(442)、
    前記プラグインのうちの識別されたプラグインによってサポートされる所与のAPIのバリアントを列挙するためのコールに応答して、該識別されたプラグインによってサポートされる所与のAPIの全バリアントの識別子を含むリストを配信し(446)、及び、
    複数プラグインのうちの識別されたプラグインによってサポートされる識別されたAPIの複数バリアントのうちの識別されたバリアントをインスタンス化するためのコールに応答して、該識別されたプラグインをロードして、該識別されたバリアントのインスタンスに対するポインタを提供する(450)
    ことを含んでおり、及び、
    構成されたローカルネットワークノード(16)と、前記少なくとも1つのリモートネットワークノードとの間において少なくとも1つのリアルタイムデータストリーム接続を確立する
    ことを含むことからなる、方法。
  127. 前記ロードすること(450)は、ベースプラグインオブジェクトを作成することを含み、及び、返される前記ポインタは、前記ベースプラグインオブジェクトを指し示し、及び、
    前記識別されたバリアントインスタンスを実行することを前記方法が更に含み、ここで、該実行することは、前記ベースプラグインオブジェクトを、インヘリタンスを通じて、前記識別されたバリアントにキャスティングすることを含むことからなる、請求項126に記載の方法。
  128. 前記通信することは、
    あるセット内の前記複数プラグインの識別子と、該セット内の該複数プラグインによってそれぞれサポートされる複数APIのうちの1つか又は複数のAPIの識別子とを含むコールに応答して、該セット内の前記複数プラグインのうちの幾つかをインスタンス化し、及び、
    前記インスタン化したプラグインを、方向付けられたグラフ内へと組み立てる
    ことを含むことからなる、請求項126に記載の方法。
  129. 前記組み立てることが、リモートネットワークノードから受け取ったストリームハンドリング仕様に従って実施されることからなる、請求項128に記載の方法。
  130. 前記返すこと、前記配信すること、及び前記ロードすることが、APIタイプとは無関係に実施されることからなる、請求項126に記載の方法。
  131. 前記複数プラグインのうちの少なくとも1つのプラグインが、複数の前記APIのうちの多数APIと、該プラグインがサポートする該多数APIのうちの少なくとも1つのAPIの多数バリアントとをサポートすることからなる、請求項126に記載の方法。
  132. 仮想エリア(28)に関して画定された通信環境内において、1つか又は複数のリモートネットワークノードと通信することを前記方法が更に含み、
    前記通信することは、前記識別されたバリアントインスタンスを実行することを含むことからなる、請求項126に記載の方法。
  133. 前記通信することは、ストリームトランスポート機能を提供する前記複数プラグインのうちの少なくとも1つをインスタンス化することを含むことからなる、請求項132に記載の方法。
  134. 前記通信することは、オーディオストリームプロセッシング機能を提供する前記複数プラグインのうちの少なくとも1つをインスタンス化することを含むことからなる、請求項132に記載の方法。
  135. 前記通信することは、ビジュアルグラフィカルエフェクト機能を提供する前記複数プラグインのうちの少なくとも1つをインスタンス化することを含むことからなる、請求項132に記載の方法。
  136. 前記通信することは、コリジョン検出機能を提供する前記複数プラグインのうちの少なくとも1つをインスタンス化することを含むことからなる、請求項132に記載の方法。
  137. 前記ローカルネットワークノード(16)上において利用可能なプラグインを見つけ出して(430)、
    前記プラグインを、それらプラグインがサポートする全てのアプリケーションプログラミングインターフェース(APIs)について、クエリーし(432)、及び、
    前記クエリーすることに基づいて、前記プラグインと、それらプラグインがそれぞれサポートする複数APIとの間の関連性を、コンピュータ可読媒体上のプラグインデータベース内に格納する(434)
    ことを更に含むことからなる、請求項126に記載の方法。
  138. 装置であって、
    コンピュータ可読命令を格納するコンピュータ可読媒体と、
    メモリに結合されたデータプロセッシングユニットであって、
    仮想エリア(28)によって画定されたコンテキスト内において少なくとも1つのリモートネットワークノードとのリアルタイム通信をサポートするためにローカルネットワークノード(16)を構成し、及び、
    前記構成されたローカルネットワークノード(16)と、前記少なくとも1つのリモートネットワークノードとの間において少なくとも1つのリアルタイムデータストリーム接続を確立する
    ことを含む動作を実施させるための動作可能な命令の実行に少なくとも部分的に基づいて、前記コンピュータ可読命令を実行するよう動作可能な、データプロセッシングユニット
    とを備え、
    前記構成することが、
    指定されたアプリケーションプログラムインターフェース(API)をサポートする全プラグインを列挙するためのコールに応答して、プラグインデータベース内における該指定されたAPIに関連付けられている全プラグインの識別子を含むリストを返し(442)、
    複数プラグインのうちの識別されたプラグインによってサポートされる所与のAPIのバリアントを列挙するためのコールに応答して、該識別されたプラグインによってサポートされる所与のAPIの全バリアントの識別子を含むリストを配信し(446)、及び、
    複数プラグインのうちの識別されたプラグインによってサポートされる識別されたAPIの複数バリアントのバリアントのうちの識別されたバリアントをインスタンス化するためのコールに応答して、該識別されたプラグインをロードして、該識別されたバリアントのインスタンスに対するポインタを提供する(450)
    ことを含むことからなる、装置。
  139. 少なくとも1つのコンピュータ可読媒体であって、該コンピュータ可読媒体内に具現化されたコンピュータ可読プログラムコードを該コンピュータ可読媒体が有し、該コンピュータ可読プログラムコードは、
    仮想エリア(28)によって画定されたコンテキスト内において少なくとも1つのリモートネットワークノードとのリアルタイム通信をサポートするためにローカルネットワークノード(16)を構成し、ここで、該構成することは、
    指定されたアプリケーションプログラムインターフェース(API)をサポートする全プラグインを列挙するためのコールに応答して、プラグインデータベース内における該指定されたAPIに関連付けられている全プラグインの識別子を含むリストを返し(442)、
    複数プラグインのうちの識別されたプラグインによってサポートされる所与のAPIのバリアントを列挙するためのコールに応答して、該識別されたプラグインによってサポートされる所与のAPIの全バリアントの識別子を含むリストを配信し(446)、及び、
    複数プラグインのうちの識別されたプラグインによってサポートされる識別されたAPIの複数バリアントのうちの識別されたバリアントをインスタンス化するためのコールに応答して、該識別されたプラグインをロードして、該識別されたバリアントのインスタンスに対するポインタを提供する(450)
    ことを含んでおり、及び、
    前記構成されたローカルネットワークノード(16)と、前記少なくとも1つのリモートネットワークノードとの間において少なくとも1つのリアルタイムデータストリーム接続を確立する
    ことを含む方法を実現するために、コンピュータによって実行されるよう構成されていることからなる、少なくとも1つのコンピュータ可読媒体。
JP2011539734A 2008-12-05 2009-12-04 リアルタイムカーネル Expired - Fee Related JP5721634B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12037208P 2008-12-05 2008-12-05
US61/120,372 2008-12-05
PCT/US2009/066764 WO2010065848A2 (en) 2008-12-05 2009-12-04 Realtime kernel

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP2012262551A Division JP2013065341A (ja) 2008-12-05 2012-11-30 リアルタイムカーネル
JP2012262550A Division JP2013084283A (ja) 2008-12-05 2012-11-30 リアルタイムカーネル

Publications (3)

Publication Number Publication Date
JP2012511213A true JP2012511213A (ja) 2012-05-17
JP2012511213A5 JP2012511213A5 (ja) 2014-08-28
JP5721634B2 JP5721634B2 (ja) 2015-05-20

Family

ID=42232283

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2011539734A Expired - Fee Related JP5721634B2 (ja) 2008-12-05 2009-12-04 リアルタイムカーネル
JP2012262550A Pending JP2013084283A (ja) 2008-12-05 2012-11-30 リアルタイムカーネル
JP2012262551A Pending JP2013065341A (ja) 2008-12-05 2012-11-30 リアルタイムカーネル

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2012262550A Pending JP2013084283A (ja) 2008-12-05 2012-11-30 リアルタイムカーネル
JP2012262551A Pending JP2013065341A (ja) 2008-12-05 2012-11-30 リアルタイムカーネル

Country Status (7)

Country Link
US (6) US8578000B2 (ja)
EP (1) EP2377031A4 (ja)
JP (3) JP5721634B2 (ja)
KR (3) KR20130010910A (ja)
CN (2) CN102362269B (ja)
IL (1) IL213038A0 (ja)
WO (1) WO2010065848A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014507697A (ja) * 2010-12-14 2014-03-27 マイクロソフト コーポレーション リモート・セッションにおけるリアルタイム・メディア最適化
WO2015059736A1 (ja) * 2013-10-23 2015-04-30 株式会社シナジードライブ Snsユーザーインタフェースシステム

Families Citing this family (163)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8407605B2 (en) 2009-04-03 2013-03-26 Social Communications Company Application sharing
US11876707B2 (en) * 2007-10-24 2024-01-16 Sococo, Inc. Routing virtual area based communications
US8397168B2 (en) * 2008-04-05 2013-03-12 Social Communications Company Interfacing with a spatial virtual communication environment
US7769806B2 (en) 2007-10-24 2010-08-03 Social Communications Company Automated real-time data stream switching in a shared virtual area communication environment
US8756304B2 (en) * 2010-09-11 2014-06-17 Social Communications Company Relationship based presence indicating in virtual area contexts
US9514444B2 (en) 2009-01-15 2016-12-06 Sococo, Inc. Encapsulating virtual area based communicant assemblies
US9401937B1 (en) 2008-11-24 2016-07-26 Shindig, Inc. Systems and methods for facilitating communications amongst multiple users
US8390670B1 (en) 2008-11-24 2013-03-05 Shindig, Inc. Multiparty communications systems and methods that optimize communications based on mode and available bandwidth
CN102362269B (zh) 2008-12-05 2016-08-17 社会传播公司 实时内核
US9853922B2 (en) * 2012-02-24 2017-12-26 Sococo, Inc. Virtual area communications
US20130283169A1 (en) 2012-04-24 2013-10-24 Social Communications Company Voice-based virtual area navigation
TWI534633B (zh) * 2009-03-31 2016-05-21 萬國商業機器公司 管理一虛擬物件的方法、電腦程式產品及伺服器裝置
US9344745B2 (en) 2009-04-01 2016-05-17 Shindig, Inc. Group portraits composed using video chat systems
WO2010121945A2 (en) * 2009-04-21 2010-10-28 International Business Machines Corporation Method and system for interaction with unmodified 3d graphics applications
US8779265B1 (en) 2009-04-24 2014-07-15 Shindig, Inc. Networks of portable electronic devices that collectively generate sound
US8629866B2 (en) * 2009-06-18 2014-01-14 International Business Machines Corporation Computer method and apparatus providing interactive control and remote identity through in-world proxy
US8675019B1 (en) 2009-12-03 2014-03-18 Innoventions, Inc. View navigation guidance system for hand held devices with display
US8244754B2 (en) * 2010-02-01 2012-08-14 International Business Machines Corporation System and method for object searching in virtual worlds
US8949316B2 (en) * 2010-03-09 2015-02-03 Avistar Communications Corp. Scalable high-performance interactive real-time media architectures for virtual desktop environments
US9021390B1 (en) * 2010-05-05 2015-04-28 Zynga Inc. Methods and apparatus for optimized pausing of an embedded application to render pop-up window
JP5204155B2 (ja) * 2010-06-21 2013-06-05 株式会社スクウェア・エニックス ビデオゲームシステム
US9444620B1 (en) * 2010-06-24 2016-09-13 F5 Networks, Inc. Methods for binding a session identifier to machine-specific identifiers and systems thereof
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
WO2012027020A1 (en) 2010-08-24 2012-03-01 Exxonmobil Upstream Research Company System and method for planning a well path
US9100385B1 (en) * 2010-10-01 2015-08-04 Google Inc. Management and synchronization of electronic media content information
US8949717B2 (en) * 2010-10-18 2015-02-03 Yehonatan Rafael Maor Method of controlling avatars
US9560141B2 (en) * 2010-12-29 2017-01-31 Open Invention Network, Llc Method and apparatus of performing peer-to-peer communication establishment
US20120192088A1 (en) * 2011-01-20 2012-07-26 Avaya Inc. Method and system for physical mapping in a virtual world
EP2668641B1 (en) 2011-01-26 2020-04-15 Exxonmobil Upstream Research Company Method of reservoir compartment analysis using topological structure in 3d earth model
AU2011360212B2 (en) 2011-02-21 2017-02-02 Exxonmobil Upstream Research Company Reservoir connectivity analysis in a 3D earth model
WO2012118917A2 (en) 2011-03-03 2012-09-07 Social Communications Company Realtime communications and network browsing client
US8521860B2 (en) 2011-03-29 2013-08-27 Microsoft Corporation Providing a witness service
KR101312954B1 (ko) * 2011-03-31 2013-10-01 주식회사 리코시스 3차원 테마를 표현하는 커버페이지를 제공하는 사용자 인터페이스 장치 및 그 구동 방법
CN107656615B (zh) 2011-05-06 2021-09-14 奇跃公司 大量同时远程数字呈现世界
US8799898B2 (en) * 2011-05-31 2014-08-05 Adobe Systems Incorporated Methods and apparatus for binding applications to a cloud computing environment
US8799788B2 (en) * 2011-06-02 2014-08-05 Disney Enterprises, Inc. Providing a single instance of a virtual space represented in either two dimensions or three dimensions via separate client computing devices
US9323871B2 (en) * 2011-06-27 2016-04-26 Trimble Navigation Limited Collaborative development of a model on a network
US20130166766A1 (en) * 2011-06-30 2013-06-27 The Board Of Trustees Of The University Of Illinois Streaming Service for Correlated Multi-Streaming
WO2013006226A1 (en) * 2011-07-01 2013-01-10 Exxonmobil Upstream Research Company Plug-in installer framework
US8984156B2 (en) * 2011-07-21 2015-03-17 Salesforce.Com, Inc. Multi-party mesh conferencing with stream processing
WO2013039748A2 (en) * 2011-09-16 2013-03-21 Social Communications Company Capabilities based management of virtual areas
US20130097244A1 (en) * 2011-09-30 2013-04-18 Clearone Communications, Inc. Unified communications bridging architecture
WO2013074574A1 (en) 2011-11-15 2013-05-23 Trimble Navigation Limited Controlling rights to a drawing in a three-dimensional modeling environment
US9460542B2 (en) 2011-11-15 2016-10-04 Trimble Navigation Limited Browser-based collaborative development of a 3D model
WO2013074565A1 (en) 2011-11-15 2013-05-23 Trimble Navigation Limited Providing a real-time shared viewing experience in a three-dimensional modeling environment
EP2783296A4 (en) 2011-11-22 2015-06-03 Trimble Navigation Ltd BETWEEN THE WEB BROWSER OF A CLIENT DEVICE AND A SERVER DISTRIBUTED 3D MODELING SYSTEM
US9654821B2 (en) 2011-12-30 2017-05-16 Sonos, Inc. Systems and methods for networked music playback
US8452901B1 (en) * 2011-12-30 2013-05-28 Emc Corporation Ordered kernel queue for multipathing events
CN102571634A (zh) * 2012-01-18 2012-07-11 孙明昭 利用标识实现网络平台信息交互的系统
KR101335711B1 (ko) 2012-01-20 2013-12-04 연세대학교 산학협력단 서버, 연산 처리 방법 및 연산 처리 시스템
DE102012201505B4 (de) * 2012-02-02 2013-08-22 Siemens Aktiengesellschaft Authentisierungssystem für mobile Geräte zum Datenaustausch von medizinischen Daten
WO2013119802A1 (en) * 2012-02-11 2013-08-15 Social Communications Company Routing virtual area based communications
SE537794C2 (sv) * 2012-03-20 2015-10-20 Propellerhead Software Aktiebolag Förfaranden för att distribuera en dataprogramprodukt och ett datorsystem
US8954574B1 (en) 2012-05-23 2015-02-10 Amazon Technologies, Inc. Best practice analysis, migration advisor
US9626710B1 (en) 2012-05-23 2017-04-18 Amazon Technologies, Inc. Best practice analysis, optimized resource use
US8769059B1 (en) * 2012-05-23 2014-07-01 Amazon Technologies, Inc. Best practice analysis, third-party plug-ins
US10740765B1 (en) 2012-05-23 2020-08-11 Amazon Technologies, Inc. Best practice analysis as a service
WO2013181026A1 (en) 2012-06-02 2013-12-05 Social Communications Company Interfacing with a spatial virtual communications environment
US9674587B2 (en) 2012-06-26 2017-06-06 Sonos, Inc. Systems and methods for networked music playback including remote add to queue
TWI567563B (zh) * 2012-08-10 2017-01-21 A user input screen generation system and a method thereof
US9122873B2 (en) 2012-09-14 2015-09-01 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US9031953B2 (en) * 2012-11-19 2015-05-12 Realnetworks, Inc. Method and system to curate media collections
US20140195672A1 (en) * 2013-01-09 2014-07-10 Microsoft Corporation Automated failure handling through isolation
US20140278911A1 (en) * 2013-03-15 2014-09-18 Telemetry Limited Method and apparatus for determining digital media audibility
US9432485B2 (en) * 2013-03-15 2016-08-30 Srinivasan Viswanathan Method and system of an accelerated application-oriented middlewarelayer
US9438638B2 (en) * 2013-03-15 2016-09-06 Silicon Graphics International Corp. Method for transparently connecting augmented network socket operations
US20140285519A1 (en) * 2013-03-22 2014-09-25 Nokia Corporation Method and apparatus for providing local synchronization of information for augmented reality objects
US20140310606A1 (en) * 2013-04-11 2014-10-16 Xiaomi Inc. Method and device for providing plugin in contact list
US9247363B2 (en) 2013-04-16 2016-01-26 Sonos, Inc. Playback queue transfer in a media playback system
US9501533B2 (en) 2013-04-16 2016-11-22 Sonos, Inc. Private queue for a media playback system
US9361371B2 (en) 2013-04-16 2016-06-07 Sonos, Inc. Playlist update in a media playback system
US10584570B2 (en) 2013-06-10 2020-03-10 Exxonmobil Upstream Research Company Interactively planning a well site
US10749761B1 (en) * 2013-09-27 2020-08-18 Amazon Technologies, Inc. Unique user session tracking in adaptive bitrate video delivery
US9864098B2 (en) 2013-09-30 2018-01-09 Exxonmobil Upstream Research Company Method and system of interactive drill center and well planning evaluation and optimization
US10271010B2 (en) * 2013-10-31 2019-04-23 Shindig, Inc. Systems and methods for controlling the display of content
US9276959B2 (en) * 2013-11-11 2016-03-01 Amazon Technologies, Inc. Client-configurable security options for data streams
CN104703049A (zh) * 2013-12-09 2015-06-10 中兴通讯股份有限公司 媒体流报文的nat穿越方法、mdu及iptv系统
US9462329B2 (en) * 2013-12-20 2016-10-04 Mediatek Inc. Method and apparatus for frame rate control in transmitter of wireless communications system
US9421461B2 (en) * 2013-12-26 2016-08-23 Microsoft Technology Licensing, Llc Player avatar movement assistance in a virtual environment
US9791485B2 (en) 2014-03-10 2017-10-17 Silver Spring Networks, Inc. Determining electric grid topology via a zero crossing technique
US9916188B2 (en) 2014-03-14 2018-03-13 Cask Data, Inc. Provisioner for cluster management system
CN103877726B (zh) * 2014-04-10 2017-09-26 北京蚁视科技有限公司 一种虚拟现实组件系统
US9733333B2 (en) 2014-05-08 2017-08-15 Shindig, Inc. Systems and methods for monitoring participant attentiveness within events and group assortments
GB2530472A (en) * 2014-05-21 2016-03-30 Euronet Usa Llc Financial switching engine
US20150348177A1 (en) * 2014-05-29 2015-12-03 International Business Machines Corporation Managing lease transactions in distributed systems
US9396698B2 (en) * 2014-06-30 2016-07-19 Microsoft Technology Licensing, Llc Compound application presentation across multiple devices
US9749447B2 (en) * 2014-06-30 2017-08-29 Mark Spence Distributed Process Framework
CN105323534B (zh) * 2014-07-14 2019-04-23 深圳市潮流网络技术有限公司 一种第三方应用的会议处理方法和通讯设备
US20160042563A1 (en) * 2014-08-11 2016-02-11 Empire Technology Development Llc Augmented reality information management
CN104144221B (zh) * 2014-08-19 2017-07-14 湖北盛天网络技术股份有限公司 文件访问方法及装置
US10225245B2 (en) * 2014-11-18 2019-03-05 Auth0, Inc. Identity infrastructure as a service
EP3238008A4 (en) * 2014-12-22 2018-12-26 Intel Corporation Multi-touch virtual mouse
US10609105B2 (en) * 2015-01-29 2020-03-31 Spotify Ab System and method for streaming music on mobile devices
US11516340B2 (en) * 2015-01-30 2022-11-29 Vonage America Llc System and method for playing buffered audio of a dropped telephone call
WO2016138470A1 (en) * 2015-02-26 2016-09-01 Kazanchian Armen E Radio frequency module
CN106034370B (zh) * 2015-03-20 2018-06-26 立锜科技股份有限公司 用于驱动led数组的驱动电路
FR3034608A1 (fr) * 2015-03-31 2016-10-07 Orange Procede de priorisation de flux medias dans un reseau de communications
KR101581776B1 (ko) * 2015-05-14 2015-12-31 주식회사 티맥스 소프트 웹 서버에서 파일 디스크립터를 분배하는 방법, 이를 사용한 웹 서버 및 컴퓨터 판독 가능한 기록 매체
US9900275B2 (en) * 2015-06-01 2018-02-20 Apple Inc. Tracking object across processes
CN108028829A (zh) * 2015-07-02 2018-05-11 瑞典爱立信有限公司 用于获得对网络的初始接入的方法以及相关的无线设备和网络节点
KR20170010574A (ko) * 2015-07-20 2017-02-01 삼성전자주식회사 정보처리장치, 영상처리장치 및 그들의 제어방법
US10911503B2 (en) * 2015-08-27 2021-02-02 Drop In, Inc. Methods, devices, and systems for live video streaming from a remote location based on a received request utilizing keep alive messages
CN105187943B (zh) * 2015-09-21 2018-06-15 三星电子(中国)研发中心 电视频道追加方法和装置
US10482231B1 (en) * 2015-09-22 2019-11-19 Amazon Technologies, Inc. Context-based access controls
JP6659944B2 (ja) * 2015-11-18 2020-03-04 アイコム株式会社 データ設定システム、データ更新システムおよびデータ設定方法
US9699226B1 (en) 2015-12-17 2017-07-04 8X8, Inc. Display dependent analytics
US10095669B1 (en) 2015-12-22 2018-10-09 Amazon Technologies, Inc. Virtualized rendering
WO2017220165A1 (en) 2016-06-24 2017-12-28 Rwe International Se Augmented reality system
US10860347B1 (en) 2016-06-27 2020-12-08 Amazon Technologies, Inc. Virtual machine with multiple content processes
US11083968B2 (en) * 2016-07-05 2021-08-10 Lego A/S Method for creating a virtual object
EP3481520A1 (en) 2016-07-05 2019-05-15 Lego A/S Method for creating a virtual object
US20180063205A1 (en) * 2016-08-30 2018-03-01 Augre Mixed Reality Technologies, Llc Mixed reality collaboration
US10680902B2 (en) * 2016-08-31 2020-06-09 At&T Intellectual Property I, L.P. Virtual agents for facilitation of network based storage reporting
US10133916B2 (en) 2016-09-07 2018-11-20 Steven M. Gottlieb Image and identity validation in video chat events
CN106452784B (zh) * 2016-09-28 2019-07-23 苏州超块链信息科技有限公司 一种数字资产原始属性的匿名对等互证方法
US11063758B1 (en) 2016-11-01 2021-07-13 F5 Networks, Inc. Methods for facilitating cipher selection and devices thereof
US11290572B2 (en) * 2016-11-07 2022-03-29 Constructive Labs System and method for facilitating sharing of virtual three-dimensional space
CN106708634B (zh) * 2016-12-09 2020-08-25 福建省天奕网络科技有限公司 Vr应用设备与厂家设备的通讯方法及其系统
US10764367B2 (en) * 2017-03-15 2020-09-01 Hewlett Packard Enterprise Development Lp Registration with a storage networking repository via a network interface device driver
JP6610610B2 (ja) * 2017-04-27 2019-11-27 トヨタ自動車株式会社 音声入出力装置、無線接続方法、音声対話システム
US10592215B1 (en) 2017-08-17 2020-03-17 NanoVMs, Inc. Unikernel cross-compilation
US10897489B2 (en) 2017-12-07 2021-01-19 Mcom Media Comunications Dmcc Managing content casting
WO2019113352A1 (en) * 2017-12-07 2019-06-13 Mcom Media Communications Dmcc Managing content casting
US20190260826A1 (en) * 2018-02-21 2019-08-22 Artem Gurtovoy P2p video communication with a third-parties
US20210303316A1 (en) * 2018-04-11 2021-09-30 NanoVMs, Inc. Unikernel provisioning
US10628177B1 (en) * 2018-04-11 2020-04-21 NanoVMs, Inc. Unikernel provisioning
US11017078B2 (en) * 2018-04-24 2021-05-25 Microsoft Technology Licensing, Llc Environmentally-trained time dilation
US10965444B2 (en) * 2018-04-24 2021-03-30 Microsoft Technology Licensing, Llc Mitigating timing attacks via dynamically triggered time dilation
US11683395B2 (en) * 2018-05-07 2023-06-20 Convida Wireless, Llc Mechanisms for an intelligent service layer request abstraction service
CN110633155A (zh) * 2018-05-31 2019-12-31 北京京东尚科信息技术有限公司 一种插件化框架的通信方法、装置、介质及电子设备
US20220101619A1 (en) * 2018-08-10 2022-03-31 Nvidia Corporation Cloud-centric platform for collaboration and connectivity on 3d virtual environments
WO2020061087A1 (en) * 2018-09-20 2020-03-26 Ocelot Laboratories Llc Method and device for attenuation of co-user interactions in simulated reality (sr) space
KR102119509B1 (ko) * 2018-10-02 2020-06-05 주식회사 한글과컴퓨터 안정적인 실행을 보장하는 OpenCL 가상화 실행환경 제공 방법 및 장치
US10963331B2 (en) * 2018-12-13 2021-03-30 Microsoft Technology Licensing, Llc Collecting repeated diagnostics data from across users participating in a document collaboration session
CN109739728B (zh) * 2019-01-08 2023-06-13 武汉益模科技股份有限公司 一种mes系统性能和日志数据监控方法
US11939856B2 (en) 2019-01-24 2024-03-26 Halliburton Energy Services, Inc. Operating wellbore equipment using data from mediator computing devices
US10554596B1 (en) * 2019-03-28 2020-02-04 Wormhole Labs, Inc. Context linked messaging system
CN111835685B (zh) * 2019-04-19 2022-10-28 厦门网宿有限公司 一种监控Nginx网络隔离空间的运行状态的方法和服务器
CN111835684B (zh) * 2019-04-19 2023-01-20 厦门网宿有限公司 一种haproxy设备的网络隔离监控方法及系统
US11667033B2 (en) * 2019-06-10 2023-06-06 Argos Labs Inc. Systems and methods for robotic process automation
CN110475272A (zh) * 2019-07-31 2019-11-19 苏州星际靶战网络信息技术有限公司 一种虚拟化网络设备库信息传输方法及系统
CN110365546B (zh) * 2019-08-22 2022-03-22 广州大学 节点数据流的监控方法、存储介质和计算设备
US11027197B2 (en) * 2019-09-30 2021-06-08 Sony Interactive Entertainment Inc. Serverless gaming through zero-knowledge proofs
US11297147B2 (en) * 2019-11-22 2022-04-05 Amazon Technologies, Inc. Managed data export to a remote network from edge devices
US11120702B2 (en) 2019-12-01 2021-09-14 Salesforce.Com, Inc. Systems and methods for validating localized assessments in an external system
SE2030252A1 (en) * 2020-08-13 2022-02-14 Nagoon AB Method performed by a computer system for creation of augmented reality experiences and connection of these to the real world
US11012482B1 (en) * 2020-08-28 2021-05-18 Tmrw Foundation Ip S. À R.L. Spatially aware multimedia router system and method
US11343136B2 (en) 2020-10-01 2022-05-24 Bank Of America Corporation System for real time recovery of resource transfers over a distributed server network
US11893541B2 (en) * 2020-10-15 2024-02-06 Prezi, Inc. Meeting and collaborative canvas with image pointer
US20220134222A1 (en) * 2020-11-03 2022-05-05 Nvidia Corporation Delta propagation in cloud-centric platforms for collaboration and connectivity
US20220147433A1 (en) * 2020-11-12 2022-05-12 New Relic, Inc. Automation solutions for event logging and debugging on kubernetes
CN113082710A (zh) * 2021-04-23 2021-07-09 杭州雾联科技有限公司 一种音频播放方法、装置、电子设备及存储介质
CN113515255B (zh) * 2021-05-17 2023-02-07 英华达(上海)科技有限公司 音频播放控制方法、系统、电子设备及存储介质
US11743198B1 (en) * 2021-06-09 2023-08-29 T-Mobile Usa, Inc. Systems and methods for traffic classification
CN113590217B (zh) * 2021-07-26 2022-12-02 北京百度网讯科技有限公司 基于引擎的函数管理方法、装置、电子设备及存储介质
US20230222010A1 (en) * 2022-01-10 2023-07-13 Nvidia Corporation Application programming interface to indicate execution of graph nodes
US11871208B2 (en) * 2022-01-14 2024-01-09 Verizon Patent And Licensing Inc. Methods and systems for spatial rendering of multi-user voice communication
US20230310995A1 (en) * 2022-03-31 2023-10-05 Advanced Micro Devices, Inc. Detecting personal-space violations in artificial intelligence based non-player characters
US20230353401A1 (en) * 2022-04-29 2023-11-02 Zoom Video Communications, Inc. Providing presence in persistent hybrid virtual collaborative workspaces
US20240013495A1 (en) * 2022-07-06 2024-01-11 Journee Technologies Gmbh Systems and methods for the interactive rendering of a virtual environment on a user device with limited computational capacity
US20240098122A1 (en) * 2022-09-16 2024-03-21 International Business Machines Corporation Unplanned remote collaboration
JP7281012B1 (ja) 2022-12-26 2023-05-24 グリー株式会社 プログラム、情報処理方法及び情報処理システム

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH099222A (ja) * 1995-06-16 1997-01-10 Nippon Telegr & Teleph Corp <Ntt> 仮想空間共有システム
JP2000244487A (ja) * 1999-02-18 2000-09-08 Nippon Telegr & Teleph Corp <Ntt> 多人数参加型仮想空間コミュニケーションシステム
JP2002063601A (ja) * 2000-08-15 2002-02-28 Shinji Shimojo 仮想空間システム
JP2004024859A (ja) * 2002-05-16 2004-01-29 Microsoft Corp プレーヤが口頭でコミュニケーションできるようにする方法及び口頭のコミュニケーションを可能にするシステム
JP2005523620A (ja) * 2002-04-19 2005-08-04 アカマイ テクノロジーズ インコーポレイテッド ジャストインタイムのリソース提供機能、自動化された信号取得及びストリーミング機能、並びに完全自動化されたイベントアーカイブ機能を備えたウェブキャスティング
JP2005326987A (ja) * 2004-05-13 2005-11-24 Sony Corp オーディオ信号伝送システム、オーディオ信号伝送方法、サーバー、ネットワーク端末装置、プログラム及び記録媒体
JP2007072739A (ja) * 2005-09-07 2007-03-22 Hitachi Communication Technologies Ltd 多地点会議システム、多地点会議装置およびクライアント端末

Family Cites Families (228)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU650242B2 (en) * 1989-11-28 1994-06-16 International Business Machines Corporation Methods and apparatus for dynamically managing input/output (I/O) connectivity
JP2852817B2 (ja) 1991-02-04 1999-02-03 中小企業事業団 加熱炉
US5745711A (en) 1991-10-23 1998-04-28 Hitachi, Ltd. Display control method and apparatus for an electronic conference
CA2084575C (en) * 1991-12-31 1996-12-03 Chris A. Dinallo Personal computer with generalized data streaming apparatus for multimedia devices
US5675746A (en) * 1992-09-30 1997-10-07 Marshall; Paul S. Virtual reality generator for use with financial information
US6594688B2 (en) * 1993-10-01 2003-07-15 Collaboration Properties, Inc. Dedicated echo canceler for a workstation
US5434913A (en) * 1993-11-24 1995-07-18 Intel Corporation Audio subsystem for computer-based conferencing system
US5491743A (en) 1994-05-24 1996-02-13 International Business Machines Corporation Virtual conference system and terminal apparatus therefor
US6343263B1 (en) * 1994-08-02 2002-01-29 Apple Computer, Inc. Real-time signal processing system for serially transmitted data
US5903752A (en) * 1994-10-13 1999-05-11 Intel Corporation Method and apparatus for embedding a real-time multi-tasking kernel in a non-real-time operating system
US5721922A (en) * 1994-10-13 1998-02-24 Intel Corporation Embedding a real-time multi-tasking kernel in a non-real-time operating system
US5619733A (en) * 1994-11-10 1997-04-08 International Business Machines Corporation Method and apparatus for synchronizing streaming and non-streaming multimedia devices by controlling the play speed of the non-streaming device in response to a synchronization signal
US6260057B1 (en) * 1995-03-01 2001-07-10 Sun Microsystems, Inc. Apparatus and method for high performance implementation of system calls
US6466962B2 (en) * 1995-06-07 2002-10-15 International Business Machines Corporation System and method for supporting real-time computing within general purpose operating systems
US5874960A (en) 1995-07-05 1999-02-23 Microsoft Corporation Method and system for sharing applications between computer systems
US6219045B1 (en) * 1995-11-13 2001-04-17 Worlds, Inc. Scalable virtual world chat client-server system
US5880731A (en) 1995-12-14 1999-03-09 Microsoft Corporation Use of avatars with automatic gesturing and bounded interaction in on-line chat session
US5960173A (en) * 1995-12-22 1999-09-28 Sun Microsystems, Inc. System and method enabling awareness of others working on similar tasks in a computer work environment
IL116708A (en) * 1996-01-08 2000-12-06 Smart Link Ltd Real-time task manager for a personal computer
US6405255B1 (en) * 1996-07-01 2002-06-11 Sun Microsystems, Inc. Mixing and splitting multiple independent audio data streams in kernel space
US7145898B1 (en) 1996-11-18 2006-12-05 Mci Communications Corporation System, method and article of manufacture for selecting a gateway of a hybrid communication system architecture
US6335927B1 (en) 1996-11-18 2002-01-01 Mci Communications Corporation System and method for providing requested quality of service in a hybrid network
US5913038A (en) * 1996-12-13 1999-06-15 Microsoft Corporation System and method for processing multimedia data streams using filter graphs
US5995745A (en) * 1996-12-23 1999-11-30 Yodaiken; Victor J. Adding real-time support to general purpose operating systems
US6317774B1 (en) * 1997-01-09 2001-11-13 Microsoft Corporation Providing predictable scheduling of programs using a repeating precomputed schedule
US6006279A (en) * 1997-01-21 1999-12-21 Canon Information Systems, Inc. Plug-in module host framework
US6016515A (en) * 1997-04-04 2000-01-18 Microsoft Corporation Method, computer program product, and data structure for validating creation of and routing messages to file object
US5991836A (en) * 1997-05-02 1999-11-23 Network Computing Devices, Inc. System for communicating real time data between client device and server utilizing the client device estimating data consumption amount by the server
US6904110B2 (en) * 1997-07-31 2005-06-07 Francois Trans Channel equalization system and method
JP3753207B2 (ja) 1997-08-11 2006-03-08 富士ゼロックス株式会社 共同作業支援システムおよび共同作業支援方法
US5991402A (en) * 1997-09-23 1999-11-23 Aegisoft Corporation Method and system of dynamic transformation of encrypted material
GB9721667D0 (en) 1997-10-14 1997-12-10 Philips Electronics Nv Virtual environment navigation aid
US6349344B1 (en) * 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
US6216173B1 (en) * 1998-02-03 2001-04-10 Redbox Technologies Limited Method and apparatus for content processing and routing
US6141686A (en) * 1998-03-13 2000-10-31 Deterministic Networks, Inc. Client-side application-classifier gathering network-traffic statistics and application and user names using extensible-service provider plugin for policy-based network control
US6148336A (en) * 1998-03-13 2000-11-14 Deterministic Networks, Inc. Ordering of multiple plugin applications using extensible layered service provider with network traffic filtering
US6380952B1 (en) 1998-04-07 2002-04-30 International Business Machines Corporation System for continuous display and navigation in a virtual-reality world
US7065553B1 (en) * 1998-06-01 2006-06-20 Microsoft Corporation Presentation system with distributed object oriented multi-user domain and separate view and model objects
US6243753B1 (en) * 1998-06-12 2001-06-05 Microsoft Corporation Method, system, and computer program product for creating a raw data channel form an integrating component to a series of kernel mode filters
US6604136B1 (en) * 1998-06-27 2003-08-05 Intel Corporation Application programming interfaces and methods enabling a host to interface with a network processor
US5999208A (en) 1998-07-15 1999-12-07 Lucent Technologies Inc. System for implementing multiple simultaneous meetings in a virtual reality mixed media meeting room
US6119147A (en) 1998-07-28 2000-09-12 Fuji Xerox Co., Ltd. Method and system for computer-mediated, multi-modal, asynchronous meetings in a virtual space
US6731314B1 (en) 1998-08-17 2004-05-04 Muse Corporation Network-based three-dimensional multiple-user shared environment apparatus and method
JP2000076487A (ja) 1998-09-03 2000-03-14 Sony Corp 情報処理装置および方法、並びに提供媒体
US7159222B1 (en) * 1998-09-09 2007-01-02 Microsoft Corporation Highly componentized system architecture with object mutation
US6807667B1 (en) * 1998-09-21 2004-10-19 Microsoft Corporation Method and system of an application program interface for abstracting network traffic control components to application programs
US6470397B1 (en) * 1998-11-16 2002-10-22 Qlogic Corporation Systems and methods for network and I/O device drivers
US6490611B1 (en) * 1999-01-28 2002-12-03 Mitsubishi Electric Research Laboratories, Inc. User level scheduling of inter-communicating real-time tasks
US6862735B1 (en) * 1999-02-11 2005-03-01 Sun Microsystems, Inc. Mechanism by which platform independent software may bind to and access platform dependent software
US7168048B1 (en) 1999-03-24 2007-01-23 Microsoft Corporation Method and structure for implementing a layered object windows
US6615278B1 (en) * 1999-03-29 2003-09-02 International Business Machines Corporation Cross-platform program, system, and method having a global registry object for mapping registry equivalent functions in an OS/2 operating system environment
US6493324B1 (en) * 1999-03-29 2002-12-10 Worldcom, Inc. Multimedia interface for IP telephony
US7007235B1 (en) 1999-04-02 2006-02-28 Massachusetts Institute Of Technology Collaborative agent interaction control and synchronization system
US6388688B1 (en) 1999-04-06 2002-05-14 Vergics Corporation Graph-based visual navigation through spatial environments
US6779027B1 (en) * 1999-04-30 2004-08-17 Hewlett-Packard Development Company, L.P. Intelligent management module application programming interface with utility objects
US7006616B1 (en) * 1999-05-21 2006-02-28 Terayon Communication Systems, Inc. Teleconferencing bridge with EdgePoint mixing
US6742176B1 (en) * 1999-06-14 2004-05-25 Lycos, Inc. Secure flexible plugin software architecture
US6292188B1 (en) 1999-07-28 2001-09-18 Alltrue Networks, Inc. System and method for navigating in a digital information environment
US6442748B1 (en) * 1999-08-31 2002-08-27 Accenture Llp System, method and article of manufacture for a persistent state and persistent object separator in an information services patterns environment
US7140015B1 (en) * 1999-09-29 2006-11-21 Network Appliance, Inc. Microkernel for real time applications
US20010044904A1 (en) * 1999-09-29 2001-11-22 Berg Ryan J. Secure remote kernel communication
US7581191B2 (en) 1999-11-15 2009-08-25 Xenogen Corporation Graphical user interface for 3-D in-vivo imaging
JP2001154966A (ja) 1999-11-29 2001-06-08 Sony Corp コンピュータ・ネットワーク上で構築・提供される共有仮想空間上で複数ユーザが参加可能な仮想会話を支援する会話支援システム及び会話支援方法、並びに、プログラム記憶媒体
US7213054B2 (en) * 1999-12-15 2007-05-01 Microsoft Corporation Methods and apparatuses for handling single-user applications in multi-user computing environments
US6708172B1 (en) 1999-12-22 2004-03-16 Urbanpixel, Inc. Community-based shared multiple browser environment
SE517156C2 (sv) * 1999-12-28 2002-04-23 Global Ip Sound Ab System för överföring av ljud över paketförmedlade nät
US7069590B1 (en) * 2000-02-17 2006-06-27 Microsoft Corporation System and method for protecting data streams in hardware components
US7240093B1 (en) 2000-02-29 2007-07-03 Microsoft Corporation Use of online messaging to facilitate selection of participants in game play
US6990669B1 (en) * 2000-03-21 2006-01-24 Microsoft Corporation Real-time scheduler
US6871345B1 (en) * 2000-04-04 2005-03-22 Motive, Inc. Self managing software agents with introspection
US8020176B2 (en) * 2000-04-06 2011-09-13 Infineon Technologies Ag Virtual machine interface for hardware reconfigurable and software programmable processors
JP3345600B2 (ja) 2000-04-10 2002-11-18 コナミ株式会社 ゲームシステムおよびコンピュータ読取可能な記憶媒体
US6961631B1 (en) * 2000-04-12 2005-11-01 Microsoft Corporation Extensible kernel-mode audio processing architecture
US6646195B1 (en) * 2000-04-12 2003-11-11 Microsoft Corporation Kernel-mode audio processing modules
US20060067500A1 (en) * 2000-05-15 2006-03-30 Christofferson Frank C Teleconferencing bridge with edgepoint mixing
EP1170673A1 (en) * 2000-07-05 2002-01-09 Sony International (Europe) GmbH Portal application
US6763176B1 (en) * 2000-09-01 2004-07-13 Matrox Electronic Systems Ltd. Method and apparatus for real-time video editing using a graphics processor
US7599753B2 (en) * 2000-09-23 2009-10-06 Microsoft Corporation Systems and methods for running priority-based application threads on a realtime component
US7263550B1 (en) * 2000-10-10 2007-08-28 Juniper Networks, Inc. Agent-based event-driven web server architecture
US7203741B2 (en) 2000-10-12 2007-04-10 Peerapp Ltd. Method and system for accelerating receipt of data in a client-to-client network
JP2002123478A (ja) 2000-10-17 2002-04-26 Isao:Kk チャットシステム、チャット情報処理装置、チャット情報処理方法、および、記録媒体
US7313593B1 (en) * 2000-10-24 2007-12-25 International Business Machines Corporation Method and apparatus for providing full duplex and multipoint IP audio streaming
US6961942B1 (en) * 2000-11-06 2005-11-01 Microsoft Corporation Bluetooth TDI and winsock interface
US7149314B2 (en) * 2000-12-04 2006-12-12 Creative Technology Ltd Reverberation processor based on absorbent all-pass filters
US20020116458A1 (en) 2000-12-14 2002-08-22 Jonathan Bricklin Web-based dating service
US20020075305A1 (en) 2000-12-18 2002-06-20 Beaton Brian F. Graphical user interface for a virtual team environment
US7925703B2 (en) 2000-12-26 2011-04-12 Numedeon, Inc. Graphical interactive interface for immersive online communities
US7296226B2 (en) * 2001-02-15 2007-11-13 Accenture Gmbh XML-based multi-format business services design pattern
US7376475B2 (en) * 2001-03-05 2008-05-20 Microsoft Corporation Audio buffer configuration
US7107110B2 (en) * 2001-03-05 2006-09-12 Microsoft Corporation Audio buffers with audio effects
US7386356B2 (en) * 2001-03-05 2008-06-10 Microsoft Corporation Dynamic audio buffer creation
US20020165922A1 (en) 2001-04-13 2002-11-07 Songxiang Wei Application based screen sampling
US20020178072A1 (en) 2001-05-24 2002-11-28 International Business Machines Corporation Online shopping mall virtual association
US6996832B2 (en) * 2001-05-30 2006-02-07 Bea Systems, Inc. System and method for software component plug-in framework
US7562306B2 (en) * 2001-05-31 2009-07-14 International Business Machines Corporation System and method for reducing memory use associated with the graphical representation of a list control
US6918093B2 (en) * 2001-05-31 2005-07-12 International Business Machines Corp. Inheritance of background color in a containment hierarchy of objects in a graphical user interface
US7017162B2 (en) * 2001-07-10 2006-03-21 Microsoft Corporation Application program interface for network software platform
US20030043200A1 (en) 2001-08-09 2003-03-06 Urbanpixel Inc Interactive multi-level mapping in a multiple browser environment
JP2003058482A (ja) 2001-08-14 2003-02-28 Fujitsu Ltd エリアチャットルーム提供方法,端末側エリアチャット処理方法,エリアチャットルーム提供処理プログラム記録媒体,エリアチャットルーム提供装置
US20030065558A1 (en) 2001-09-12 2003-04-03 Cameron Shaw Method and apparatus for multi-vendor powered business portal with intelligent service promotion and user profile gathering
US7254610B1 (en) * 2001-09-19 2007-08-07 Cisco Technology, Inc. Delivery of services to a network enabled telephony device based on transfer of selected model view controller objects to reachable network nodes
US7254814B1 (en) * 2001-09-28 2007-08-07 Emc Corporation Methods and apparatus for managing plug-in services
US20030077561A1 (en) 2001-10-18 2003-04-24 Abraham Alsop Web server for printable whiteboards
US7415502B2 (en) 2001-11-16 2008-08-19 Sbc Technology Resources, Inc. Method and system for intelligent routing based on presence detection
US7673246B2 (en) 2001-12-12 2010-03-02 Canon Kabushiki Kaisha Image information processing apparatus and method, virtual space presentation apparatus, information administration apparatus, and control methods thereof
US6679848B2 (en) 2002-03-07 2004-01-20 Koninklijke Philips Electronics N.V. Method for allowing plug-in architecture for digital echocardiography lab image processing applications
US7418664B2 (en) 2002-04-03 2008-08-26 Microsoft Corporation Application sharing single document sharing
US7036089B2 (en) 2002-04-23 2006-04-25 Hewlett-Packard Development Company, L.P. Distribution of application windows in a computing device display
WO2003096669A2 (en) 2002-05-10 2003-11-20 Reisman Richard R Method and apparatus for browsing using multiple coordinated device
KR100918782B1 (ko) 2002-05-17 2009-09-23 한라공조주식회사 열교환기용 핀
US7293243B1 (en) 2002-05-22 2007-11-06 Microsoft Corporation Application sharing viewer presentation
US8165959B2 (en) * 2002-06-24 2012-04-24 Siebel Systems, Inc. Method and apparatus for pricing calculation
JP4408635B2 (ja) * 2002-06-27 2010-02-03 ナヴィゲイション テクノロジーズ コーポレイション 経路情報と共に位置に基づく広告を提供する方法
US7631318B2 (en) * 2002-06-28 2009-12-08 Microsoft Corporation Secure server plug-in architecture for digital rights management systems
US6782424B2 (en) * 2002-08-23 2004-08-24 Finite State Machine Labs, Inc. System, method and computer program product for monitoring and controlling network connections from a supervisory operating system
US7035942B2 (en) 2002-09-17 2006-04-25 Bellsouth Intellectual Property Corp. Server-based message protocol translation
US7434167B2 (en) 2002-09-30 2008-10-07 Microsoft Corporation Accessibility system and method
US6724416B1 (en) 2002-10-01 2004-04-20 Jianxin Liu Image transceiving telephone with integrated digital camera
US20040064210A1 (en) * 2002-10-01 2004-04-01 Puryear Martin G. Audio driver componentization
US8176186B2 (en) * 2002-10-30 2012-05-08 Riverbed Technology, Inc. Transaction accelerator for client-server communications systems
US20040088704A1 (en) * 2002-10-30 2004-05-06 Advanced Simulation Technology, Inc. Method for running real-time tasks alongside a general purpose operating system
WO2004045154A1 (en) 2002-11-13 2004-05-27 Intel Corporation Multi-modal web interaction over wireless network
US20040179037A1 (en) 2003-03-03 2004-09-16 Blattner Patrick D. Using avatars to communicate context out-of-band
CA2525939C (en) 2003-05-16 2015-09-22 Picasa, Inc. Networked chat and media sharing systems and methods
US20050060137A1 (en) * 2003-09-12 2005-03-17 Lanus Mark S. Method and apparatus to emulate an execution environment
CA2532814C (en) 2003-09-16 2012-12-11 Research In Motion Limited Handheld electronic device and associated method providing availability data in a messaging environment
US7503006B2 (en) 2003-09-25 2009-03-10 Microsoft Corporation Visual indication of current voice speaker
US7813488B2 (en) 2003-09-29 2010-10-12 Siemens Enterprise Communications, Inc. System and method for providing information regarding an identity's media availability
AU2003276496A1 (en) 2003-10-27 2005-05-11 Nokia Corporation Method and devices for relayed peer-to-peer communications between terminals in mobile networks
WO2005059699A2 (en) 2003-12-15 2005-06-30 Quantum Matrix Holdings, Llc System and method for multi-dimensional organization, management, and manipulation of data
US7707503B2 (en) 2003-12-22 2010-04-27 Palo Alto Research Center Incorporated Methods and systems for supporting presentation tools using zoomable user interface
JP2005196286A (ja) * 2003-12-26 2005-07-21 Okuma Corp リアルタイムアプリケーションプログラムを動作可能なオペレーティングシステム及びその制御方法、共有ライブラリをロードする方法
US20100005531A1 (en) * 2004-12-23 2010-01-07 Kenneth Largman Isolated multiplexed multi-dimensional processing in a virtual processing space having virus, spyware, and hacker protection features
US7985138B2 (en) * 2004-02-17 2011-07-26 International Business Machines Corporation SIP based VoIP multiplayer network games
KR100566263B1 (ko) 2004-03-26 2006-03-29 삼성전자주식회사 스케쥴 내용에 따라 메신저 상태 정보를 변경하는 메신저서비스 제공 시스템 및 방법
JP2005286749A (ja) * 2004-03-30 2005-10-13 Matsushita Electric Ind Co Ltd 映像復号化装置およびそれを用いた映像伝送システム
US20060031779A1 (en) 2004-04-15 2006-02-09 Citrix Systems, Inc. Selectively sharing screen data
US7945619B1 (en) 2004-09-20 2011-05-17 Jitendra Chawla Methods and apparatuses for reporting based on attention of a user during a collaboration session
WO2006042300A2 (en) * 2004-10-12 2006-04-20 Mindego, Inc. System and method for creating, distributing, and executing rich multimedia applications
US7342587B2 (en) 2004-10-12 2008-03-11 Imvu, Inc. Computer-implemented system and method for home page customization and e-commerce support
US20060168114A1 (en) * 2004-11-12 2006-07-27 Arnaud Glatron Audio processing system
JP2008520052A (ja) 2004-11-12 2008-06-12 モク3, インコーポレイテッド シーン間遷移のための方法
US20070043804A1 (en) * 2005-04-19 2007-02-22 Tino Fibaek Media processing system and method
US20060244818A1 (en) * 2005-04-28 2006-11-02 Comotiv Systems, Inc. Web-based conferencing system
US20070064851A1 (en) * 2005-09-02 2007-03-22 Sbc Knowledge Ventures Lp Method for synchronizing a customer edge router or customer premise equipment associated therewith
US7506264B2 (en) 2005-04-28 2009-03-17 International Business Machines Corporation Method and apparatus for presenting navigable data center information in virtual reality using leading edge rendering engines
JP2006012127A (ja) * 2005-05-16 2006-01-12 Sony Corp コンテンツ配信システム及びコンテンツ配信方法、並びに端末装置
US8606950B2 (en) * 2005-06-08 2013-12-10 Logitech Europe S.A. System and method for transparently processing multimedia data
KR100686382B1 (ko) 2005-07-08 2007-02-22 엔에이치엔(주) 싱크 서버를 이용한 메신저 알림 시스템 및 방법
US7734692B1 (en) 2005-07-22 2010-06-08 Oracle America, Inc. Network collaboration system with private voice chat
ATE550756T1 (de) * 2005-08-04 2012-04-15 Nuance Communications Inc Sprachdialogsystem
AU2006280934B2 (en) * 2005-08-19 2012-06-28 Google Llc Software architecture for displaying information content from plug-in modules in a user interface
US20080214204A1 (en) 2005-11-01 2008-09-04 Jorey Ramer Similarity based location mapping of mobile comm facility users
US8429630B2 (en) * 2005-09-15 2013-04-23 Ca, Inc. Globally distributed utility computing cloud
US9454735B2 (en) 2005-09-26 2016-09-27 Nokia Corporation Integrating data with a contact
US7509654B2 (en) * 2005-09-29 2009-03-24 Avaya Inc. Data-driven and plug-in defined event engine
US8498629B2 (en) * 2005-10-18 2013-07-30 Harris Corporation Extensible human machine interface (HMI) plugin architecture for radio software system and related method
US20070098238A1 (en) 2005-10-31 2007-05-03 Pere Obrador Imaging methods, imaging systems, and articles of manufacture
US20070127668A1 (en) * 2005-12-02 2007-06-07 Ahya Deepak P Method and system for performing a conference call
US7489772B2 (en) 2005-12-30 2009-02-10 Nokia Corporation Network entity, method and computer program product for effectuating a conference session
JP4643454B2 (ja) * 2006-01-10 2011-03-02 株式会社東芝 動画像復号装置及び動画像復号方法
US8185437B2 (en) 2007-07-12 2012-05-22 Utbk, Inc. Systems and methods to provide communication connections via partners
US20070184855A1 (en) 2006-02-03 2007-08-09 Research In Motion Limited Visual representation of contact location
US20070192427A1 (en) 2006-02-16 2007-08-16 Viktors Berstis Ease of use feature for audio communications within chat conferences
US20070240134A1 (en) * 2006-02-28 2007-10-11 Joydeep Buragohain Software packaging model supporting multiple entity types
JP4617268B2 (ja) * 2006-03-14 2011-01-19 キヤノン株式会社 記憶装置および記憶装置の処理方法
US20070286366A1 (en) 2006-03-17 2007-12-13 Scott Deboy Chat presence system
US8199761B2 (en) * 2006-04-20 2012-06-12 Nokia Corporation Communications multiplexing with packet-communication networks
US20070250540A1 (en) 2006-04-20 2007-10-25 Hsu Mike S C A Computer System with File Attribute Extension
US20080052373A1 (en) 2006-05-01 2008-02-28 Sms.Ac Systems and methods for a community-based user interface
EP2367343B1 (en) * 2006-05-11 2017-03-22 Google, Inc. Audio mixing
US20070280206A1 (en) * 2006-05-31 2007-12-06 Samsung Electronics Co., Ltd. Method for consuming heterogeneous services on heterogeneous devices using script plugins
US7643459B2 (en) 2006-06-16 2010-01-05 Alcatel-Lucent Usa Inc. Methods, devices and architectures for establishing peer-to-peer sessions
US20070291034A1 (en) 2006-06-20 2007-12-20 Dones Nelson C System for presenting a navigable virtual subway system, and method for operating and using the same
US20070299778A1 (en) 2006-06-22 2007-12-27 Microsoft Corporation Local peer-to-peer digital content distribution
US20080005721A1 (en) * 2006-06-29 2008-01-03 Augusta Systems, Inc. Method and System for Rapidly Developing Sensor-Enabled Software Applications
US7469641B2 (en) * 2006-07-19 2008-12-30 Asf-Keystone, Inc. Bolster and spring pockets for use with rail truck
US8869027B2 (en) 2006-08-04 2014-10-21 Apple Inc. Management and generation of dashboards
US20080033941A1 (en) 2006-08-07 2008-02-07 Dale Parrish Verfied network identity with authenticated biographical information
US7991401B2 (en) 2006-08-08 2011-08-02 Samsung Electronics Co., Ltd. Apparatus, a method, and a system for animating a virtual scene
US8817668B2 (en) 2006-09-15 2014-08-26 Microsoft Corporation Distributable, scalable, pluggable conferencing architecture
US20080085502A1 (en) * 2006-10-04 2008-04-10 Ecollege.Com Web service api for student information and course management systems
WO2008067075A2 (en) 2006-10-20 2008-06-05 Citrix Systems, Inc. Systems and methods for responding to the occurrence of an event
CN101170572A (zh) 2006-10-23 2008-04-30 日电(中国)有限公司 基于p2p sip技术实现的多媒体网络通信系统
WO2008064483A1 (en) 2006-11-30 2008-06-05 James Andrew Wanless A method and system for providing automated real-time contact information
US8706169B2 (en) 2006-12-28 2014-04-22 Yahoo! Inc. Interface overlay
WO2008082441A1 (en) 2006-12-29 2008-07-10 Prodea Systems, Inc. Display inserts, overlays, and graphical user interfaces for multimedia systems
US8554868B2 (en) 2007-01-05 2013-10-08 Yahoo! Inc. Simultaneous sharing communication interface
US7696992B2 (en) * 2007-01-16 2010-04-13 Motorola, Inc. Method and apparatus to facilitate multi-setting virtual reality experiences
US20080209075A1 (en) 2007-02-22 2008-08-28 Yahoo! Inc. Synchronous delivery of media content and real-time communication for online dating
US20080215994A1 (en) 2007-03-01 2008-09-04 Phil Harrison Virtual world avatar control, interactivity and communication interactive messaging
US20080263460A1 (en) 2007-04-20 2008-10-23 Utbk, Inc. Methods and Systems to Connect People for Virtual Meeting in Virtual Reality
US8601386B2 (en) 2007-04-20 2013-12-03 Ingenio Llc Methods and systems to facilitate real time communications in virtual reality
WO2009019671A1 (en) 2007-08-09 2009-02-12 Markport Limited Network resource management
CN101110780A (zh) * 2007-08-24 2008-01-23 张建中 一种传输控制数据流的方法和装置以及系统
US8245241B2 (en) 2007-10-02 2012-08-14 International Business Machines Corporation Arrangements for interactivity between a virtual universe and the world wide web
US8407605B2 (en) 2009-04-03 2013-03-26 Social Communications Company Application sharing
US7844724B2 (en) 2007-10-24 2010-11-30 Social Communications Company Automated real-time data stream switching in a shared virtual area communication environment
US9357025B2 (en) 2007-10-24 2016-05-31 Social Communications Company Virtual area based telephony communications
US8397168B2 (en) 2008-04-05 2013-03-12 Social Communications Company Interfacing with a spatial virtual communication environment
US7769806B2 (en) 2007-10-24 2010-08-03 Social Communications Company Automated real-time data stream switching in a shared virtual area communication environment
US8095680B2 (en) * 2007-12-20 2012-01-10 Telefonaktiebolaget Lm Ericsson (Publ) Real-time network transport protocol interface method and apparatus
CN101499080A (zh) 2008-02-01 2009-08-05 网秦无限(北京)科技有限公司 在移动终端上快捷获取信息服务的方法和系统
US20090222742A1 (en) 2008-03-03 2009-09-03 Cisco Technology, Inc. Context sensitive collaboration environment
KR101467767B1 (ko) 2008-03-31 2014-12-03 엘지전자 주식회사 단말기 및 이것의 인스턴트 메시징 서비스 수행 방법
US8531447B2 (en) 2008-04-03 2013-09-10 Cisco Technology, Inc. Reactive virtual environment
US8312380B2 (en) 2008-04-04 2012-11-13 Yahoo! Inc. Local map chat
US8756304B2 (en) 2010-09-11 2014-06-17 Social Communications Company Relationship based presence indicating in virtual area contexts
JP5368547B2 (ja) 2008-04-05 2013-12-18 ソーシャル・コミュニケーションズ・カンパニー 共有仮想エリアコミュニケーション環境ベースの装置および方法
US20120246582A1 (en) 2008-04-05 2012-09-27 Social Communications Company Interfacing with a spatial virtual communications environment
US8042051B2 (en) 2008-05-30 2011-10-18 International Business Machines Corporation Apparatus for navigation and interaction in a virtual meeting place
US20100058202A1 (en) 2008-08-28 2010-03-04 Mohamed Rostom Method system and program product for providing enabling an interactive and social search engine
US7962627B2 (en) 2008-12-04 2011-06-14 Microsoft Corporation Peer-to-peer network address translator (NAT) traversal techniques
CN102362269B (zh) * 2008-12-05 2016-08-17 社会传播公司 实时内核
EP2377089A2 (en) 2008-12-05 2011-10-19 Social Communications Company Managing interactions in a network communications environment
US9065874B2 (en) 2009-01-15 2015-06-23 Social Communications Company Persistent network resource and virtual area associations for realtime collaboration
US8396960B2 (en) 2009-05-08 2013-03-12 Canon Kabushiki Kaisha Efficient network utilization using multiple physical interfaces
WO2010143286A1 (ja) 2009-06-10 2010-12-16 パイオニア株式会社 通信端末、アドレス解決サーバ、及びコンピュータプログラム
US7921150B1 (en) 2009-10-23 2011-04-05 Eastman Kodak Company Method for viewing videos on distributed networks
US8924261B2 (en) 2009-10-30 2014-12-30 Etsy, Inc. Method for performing interactive online shopping
US20110169927A1 (en) 2010-01-13 2011-07-14 Coco Studios Content Presentation in a Three Dimensional Environment
KR101565665B1 (ko) 2010-08-16 2015-11-04 소우셜 커뮤니케이션즈 컴퍼니 네트워크 통신 환경에서 커뮤니컨트 상호작용을 촉진하는 방법
US8863256B1 (en) 2011-01-14 2014-10-14 Cisco Technology, Inc. System and method for enabling secure transactions using flexible identity management in a vehicular environment
US9270784B2 (en) 2011-02-16 2016-02-23 Masque Publishing, Inc. Peer-to-peer communications
WO2012135231A2 (en) 2011-04-01 2012-10-04 Social Communications Company Creating virtual areas for realtime communications
US8837483B2 (en) 2011-04-11 2014-09-16 Alcatel Lucent Mapping private and public addresses
US8612279B2 (en) 2011-06-27 2013-12-17 Cisco Technology, Inc. Ad hoc generation of work item entity for geospatial entity based on symbol manipulation language-based workflow item
WO2013039748A2 (en) 2011-09-16 2013-03-21 Social Communications Company Capabilities based management of virtual areas

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH099222A (ja) * 1995-06-16 1997-01-10 Nippon Telegr & Teleph Corp <Ntt> 仮想空間共有システム
JP2000244487A (ja) * 1999-02-18 2000-09-08 Nippon Telegr & Teleph Corp <Ntt> 多人数参加型仮想空間コミュニケーションシステム
JP2002063601A (ja) * 2000-08-15 2002-02-28 Shinji Shimojo 仮想空間システム
JP2005523620A (ja) * 2002-04-19 2005-08-04 アカマイ テクノロジーズ インコーポレイテッド ジャストインタイムのリソース提供機能、自動化された信号取得及びストリーミング機能、並びに完全自動化されたイベントアーカイブ機能を備えたウェブキャスティング
JP2004024859A (ja) * 2002-05-16 2004-01-29 Microsoft Corp プレーヤが口頭でコミュニケーションできるようにする方法及び口頭のコミュニケーションを可能にするシステム
JP2005326987A (ja) * 2004-05-13 2005-11-24 Sony Corp オーディオ信号伝送システム、オーディオ信号伝送方法、サーバー、ネットワーク端末装置、プログラム及び記録媒体
JP2007072739A (ja) * 2005-09-07 2007-03-22 Hitachi Communication Technologies Ltd 多地点会議システム、多地点会議装置およびクライアント端末

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014507697A (ja) * 2010-12-14 2014-03-27 マイクロソフト コーポレーション リモート・セッションにおけるリアルタイム・メディア最適化
US9276972B2 (en) 2010-12-14 2016-03-01 Microsoft Technology Licensing, Llc Real-time media optimization over remoted sessions
US9699225B2 (en) 2010-12-14 2017-07-04 Microsoft Technology Licensing, Llc Real-time media optimization over remoted sessions
WO2015059736A1 (ja) * 2013-10-23 2015-04-30 株式会社シナジードライブ Snsユーザーインタフェースシステム

Also Published As

Publication number Publication date
CN106131178A (zh) 2016-11-16
US9055131B2 (en) 2015-06-09
WO2010065848A3 (en) 2010-09-16
CN102362269B (zh) 2016-08-17
WO2010065848A9 (en) 2010-11-04
US20140136726A1 (en) 2014-05-15
KR20130010911A (ko) 2013-01-29
KR20130010910A (ko) 2013-01-29
US20100146085A1 (en) 2010-06-10
US8578000B2 (en) 2013-11-05
KR101490548B1 (ko) 2015-02-05
JP2013065341A (ja) 2013-04-11
US20190132373A1 (en) 2019-05-02
US10972523B2 (en) 2021-04-06
JP2013084283A (ja) 2013-05-09
CN102362269A (zh) 2012-02-22
KR20110106870A (ko) 2011-09-29
US20210185105A1 (en) 2021-06-17
JP5721634B2 (ja) 2015-05-20
US10158689B2 (en) 2018-12-18
EP2377031A2 (en) 2011-10-19
US11882165B2 (en) 2024-01-23
US20240114064A1 (en) 2024-04-04
IL213038A0 (en) 2011-07-31
US20150281348A1 (en) 2015-10-01
EP2377031A4 (en) 2012-11-21
WO2010065848A2 (en) 2010-06-10

Similar Documents

Publication Publication Date Title
US11882165B2 (en) Realtime kernel
US11368352B2 (en) Pervasive realtime framework
US11201953B2 (en) Application sharing
US20150215355A1 (en) Phoning into virtual communication environments
US20140237393A1 (en) Shared virtual area communication environment based apparatus and methods
US20030177187A1 (en) Computing grid for massively multi-player online games and other multi-user immersive persistent-state and session-based applications
US20130132058A1 (en) Creating and managing virtual areas
JP2013524632A (ja) ネットワークノード間のネットワーク通信の管理及びストリームトランスポートプロトコル
CN102932428B (zh) 设备链接
WO2023142601A1 (zh) 一种基于区块链的数据处理方法、设备以及可读存储介质
US20230410448A1 (en) System and method of creating, hosting, and accessing virtual reality projects
CN114816082A (zh) 应用于云应用的输入控制方法、装置以及电子设备

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121130

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121130

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140107

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140311

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140318

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140703

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20140703

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150303

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150324

R150 Certificate of patent or registration of utility model

Ref document number: 5721634

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees