(57)【特許請求の範囲】
【請求項１】
ネットワーク通信環境におけるリアルタイムデータストリーム処理をコンピュータにより実現する方法であって、
前記ネットワーク通信環境は、少なくとも１つのサーバネットワークノードによって実施されるネットワークサービスを含み、かつ、ユーザーのそれぞれのネットワークノードと、１以上の仮想エリア内のそれぞれの通信者オブジェクトに関連する他の通信者との間のリアルタイム通信をサポートし、
前記方法が、
前記１以上の仮想エリアのうちの特定の仮想エリアに関連する前記ネットワークサービスから受け取った１つか又は複数のストリームハンドリング命令（210）から、リアルタイムストリームハンドラ（206）の仕様をパーズし、ここで、該パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、入力ソース識別子、出力シンク識別子、及び、１つか又は複数のデータ処理オブジェクトの各々の識別子のそれぞれを、パーズすることを含み、前記１つか又は複数のストリームハンドリング命令は、前記特定の仮想エリア内の通信者オブジェクトのそれぞれの位置を記述するリアルタイム位置情報に基づき、
前記パーズされた識別子に対応するリアルタイムストリーム処理オブジェクトをインスタンス化すること、
前記インスタンス化されたリアルタイムストリーム処理オブジェクトから、有向グラフ（212）を、前記仕様に従って作成すること、
前記入力ソース識別子に対応する入力ソースからリアルタイムデータストリームを受け取ること、及び、
前記出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成すること
を含み、
前記パーズすること、前記インスタンス化すること、前記作成すること、前記受け取ること、及び前記生成することが、前記ユーザーのネットワークノードによって実施され、
前記生成することが、前記有向グラフ（212）を通じて前記リアルタイムデータストリームを処理することを含み、
前記生成することが、前記リアルタイム位置情報から決定されたコンフィギュレーションパラメータ値に基づき、及び、前記コンフィギュレーションパラメータ値によって前記有向グラフ内の前記インスタンス化されたリアルタイムストリーム処理オブジェクトの１以上を動的に構成することを含むことからなる、方法。
【請求項２】
前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、データ処理オブジェクトの識別子を抽出することを含み、及び、前記作成することは、前記抽出された識別子に対応するリアルタイムストリーム処理オブジェクトをインスタンス化したものから、前記有向グラフ（212）を組み立てることを含むことからなる、請求項１に記載の方法。
【請求項３】
前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、オーディオプロセッシングオブジェクトの識別子を抽出することを含み、及び、前記生成することは、前記抽出された識別子のうちの幾つかのそれぞれに対応する１つか又は複数のインスタンス化されたオーディオプロセッシングオブジェクトを通じて、前記リアルタイムデータストリームを処理することを含むことからなる、請求項１に記載の方法。
【請求項４】
前記インスタンス化することは、それぞれの識別子についてオブジェクトライブラリをクエリーして、該クエリーすることに応答して該オブジェクトライブラリからオブジェクトを検索して、及び、該検索したオブジェクトをインスタンス化することを含むことからなる、請求項１に記載の方法。
【請求項５】
前記インスタンス化することは、前記識別子のうちの幾つかのそれぞれを含んだアプリケーションプログラムインターフェース（ＡＰＩ）プロシージャコールを、処理オブジェクトに対して発行することを含むことからなる、請求項４に記載の方法。
【請求項６】
前記生成することが、
１つか又は複数の前記ストリームハンドリング命令（210）内において指定されたリアルタイム状態情報からコンフィギュレーションパラメータ値を決定し、及び、
前記有向グラフ（212）内の１つか又は複数の前記インスタンス化されたリアルタイムストリーム処理オブジェクトを、前記コンフィギュレーションパラメータ値によって動的に構成する
ことを含むことからなる、請求項１に記載の方法。
【請求項７】
前記受け取ることは、前記仕様内の第２の入力ソース識別子に対応する第２の入力ソースからの第２のリアルタイムデータストリームを受け取ることを含み、及び、
前記生成することは、前記有向グラフ（212）を通じて該第２のリアルタイムデータストリームを処理することを含むことからなる、請求項１に記載の方法。
【請求項８】
前記インスタンス化することは、前記パーズした識別子のうちのそれぞれのものに対応するリアルタイムストリームミキシングオブジェクト（220）をインスタンス化することを含み、前記作成することは、前記インスタンス化されたリアルタイムストリームミキシングオブジェクトを、前記有向グラフ（212）内へと組み込むことを含み、及び、前記生成することは、前記インスタンス化されたリアルタイムストリームミキシングオブジェクト（220）を実行して、前記第１のリアルタイムデータストリームと前記第２のリアルタイムデータストリームとを組み合わせることを含むことからなる、請求項７に記載の方法。
【請求項９】
前記第１の入力ソースは、第１のリモートネットワークノードから到来するリアルタイムデータストリーム（214）の定義に対応し、及び、前記第２の入力ソースは、第２のリモートネットワークノードから到来するリアルタイムデータストリーム（214）の定義に対応することからなる、請求項８に記載の方法。
【請求項１０】
前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、第２のリアルタイムストリームハンドラ（22）の第２の仕様をパーズすることを含み、該第２の仕様は、第２の入力ソース識別子、第２の出力シンク識別子、及び１つか又は複数のデータ処理オブジェクトの各々のそれぞれの識別子を含み、
前記作成することは、前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかから、第２の有向グラフを、前記第２の仕様に従って作成することを含み、
前記受け取ることが、前記第２の入力ソース識別子に対応する第２の入力ソースから第２のリアルタイムデータストリームを受け取ることを含み、ここで、前記第１及び第２のリアルタイムデータストリームは、データタイプに関して異なっており、及び、
前記生成することが、第２の有向グラフを通じて、前記第２の出力シンク識別子に対応する第２の出力シンクへと、前記第２のリアルタイムデータストリームを処理することを含むことからなる、請求項１に記載の方法。
【請求項１１】
前記第１のリアルタイムデータストリームと前記第２のリアルタイムデータストリームとが、同時に処理されることからなる、請求項１０に記載の方法。
【請求項１２】
前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの少なくとも１つが、ローカルハードウェア構成要素を制御するドライバモジュールに対するそれぞれのコールをカプセル化することからなる、請求項１に記載の方法。
【請求項１３】
前記パーズすること、前記インスタンス化すること、前記作成すること、前記受け取ること、前記生成すること、及び前記発生させることは、仮想エリア（28）内の第１のオブジェクトに関連付けられたローカルネットワークノード（16）上において実施され、及び、前記受け取ることは、該仮想エリア（28）内の第２のオブジェクトに関連付けられたリモートネットワークノードから前記リアルタイムデータストリームを受け取ることを含むことからなる、請求項１に記載の方法。
【請求項１４】
前記１つか又は複数のストリームハンドリング命令（210）は、前記仮想エリア（28）内の前記第１及び第２のオブジェクトのそれぞれの位置を表すリアルタイム位置情報を含み、及び、前記生成することは、該リアルタイム位置情報からコンフィギュレーションパラメータ値を決定して、前記有向グラフ内の、１つか又は複数の前記インスタンス化されたリアルタイムストリーム処理オブジェクトを、該コンフィギュレーションパラメータ値によって動的に構成することを含むことからなる、請求項１３に記載の方法。
【請求項１５】
前記受け取ることは、前記仮想エリア（28）内の第３のオブジェクトに関連付けられている第２のリモートネットワークノードから第２のリアルタイムデータストリームを受け取ることを含み、前記作成することは、前記パーズした識別子のうちのそれぞれのものに対応するインスタンス化されたミキシングオブジェクトを有した前記有向グラフを構築することを含み、及び、前記生成することは、該インスタンス化されたミキシングオブジェクト（220）を実行して、前記第１のリアルタイムデータストリームと前記第２のリアルタイムデータストリームとを組み合わせることを含むことからなる、請求項１４に記載の方法。
【請求項１６】
前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、第２のリアルタイムストリームハンドラ（22）の第２の仕様をパーズすることを含み、該第２の仕様は、第２の入力ソース識別子、第２の出力シンク識別子、及び１つか又は複数のデータ処理オブジェクトの各々のそれぞれの識別子を含み、
前記作成することは、前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかから、第２の有向グラフを、前記第２の仕様に従って作成することを含み、
前記受け取ることが、前記第２の入力ソース識別子に対応する第２の入力ソースから、第２のリアルタイムデータストリームを受け取ることを含み、ここで、該第２の入力ソースは、第２のリモートネットワークノードから到来するリアルタイムデータストリームの定義に対応しており、及び、前記第１及び第２のリアルタイムデータストリームは、データタイプに関して異なっており、及び、
前記生成することが、第２の有向グラフを通じて、前記第２の出力シンク識別子に対応する第２の出力シンクへと、前記第２のリアルタイムデータストリームを処理することを含むことからなる、請求項１４に記載の方法。
【請求項１７】
前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、グラフィック処理オブジェクトの識別子を抽出することを含み、及び、
前記生成することは、前記抽出した識別子のうちの幾つかの各々に対応する１つか又は複数のインスタンス化されたグラフィック処理オブジェクトを通じて前記リアルタイムデータストリームを処理して、該インスタンス化されたグラフィック処理オブジェクトを動的に構成して、前記仮想エリア（28）内の前記第１のオブジェクトの配向と、位置と、動作と、該位置に少なくとも部分的に基づいた姿勢とのうちの少なくとも１つに関して、第１のオブジェクトのビジュアル表現を制御することを含むことからなる、請求項１４に記載の方法。
【請求項１８】
前記パーズすること、前記インスタンス化すること、前記作成すること、前記受け取ること、前記生成すること、及び前記発生させることは、リモートネットワークノード上において実施され、及び、
ローカルネットワークノード（16）上において実行するソフトウェアアプリケーションのインターフェース要素を、前記リアルタイムデータストリームに関連付けて、及び、該ローカルネットワークノード（16）から前記リモートネットワークノードへと該リアルタイムデータストリームを伝達する、ことを前記方法が更に含むことからなる、請求項１に記載の方法。
【請求項１９】
前記１つか又は複数のストリームハンドリング命令を、前記ローカルネットワークノード（16）から前記リモートネットワークノードへと伝達することを更に含むことからなる、請求項１８に記載の方法。
【請求項２０】
前記ソフトウェアアプリケーションが、デスクトップソフトウェアアプリケーションプログラムであることからなる、請求項１９に記載の方法。
【請求項２１】
前記ソフトウェアアプリケーションが、ＭｉｃｒｏｓｏｆｔのＯｆｆｉｃｅ（登録商標）デスクトップソフトウェアアプリケーションプログラムであることからなる、請求項２０に記載の方法。
【請求項２２】
前記ストリームハンドリング命令（210）が、それぞれの固有の識別子によって前記処理オブジェクトを指定することからなる、請求項１に記載の方法。
【請求項２３】
連続する固定長インターバルの各々の間、前記出力シンクから前記入力ソースまでの前記有向グラフ（212）を、トラバースすることを、前記生成することが含むことからなる、請求項１に記載の方法。
【請求項２４】
前記パーズすることが、１つか又は複数の記録をパーズすることを含み、該１つか又は複数の記録の各々は、それぞれの定義タイプと、それぞれの定義長と、定義タイプ特定フィールド及びそれぞれの定義タイプ特定定義のうちの少なくとも１つと、を含むことからなる、請求項１に記載の方法。
【請求項２５】
前記結果データストリームに少なくとも部分的に基づいて、人間にとって知覚可能な出力を発生させることを更に含むことからなる、請求項１に記載の方法。
【請求項２６】
装置であって、
コンピュータ可読命令を格納するコンピュータ可読媒体と、
メモリに結合されたデータプロセッシングユニット
を備え、
前記データプロセッシングユニットは、
少なくとも１つのサーバネットワークノードによって実施されるネットワークサービスを含み、かつ、前記装置と、１以上の仮想エリア内のそれぞれのオブジェクトに関連する他のネットワークノードとの間のリアルタイム通信をサポートするネットワーク通信環境において、
前記１以上の仮想エリアのうちの特定の仮想エリアに関連する前記ネットワークサービスから受け取った１つか又は複数のストリームハンドリング命令（210）から、リアルタイムストリームハンドラ（22）の仕様をパーズし、ここで、該パーズすることは、前記１つか又は複数のストリームハンドリング命令から、入力ソース識別子、出力シンク識別子、及び、１つか又は複数のデータ処理オブジェクトの各々の識別子のそれぞれを、パーズすることを含んでおり、前記１つか又は複数のストリームハンドリング命令は、前記特定の仮想エリア内の前記オブジェクトのそれぞれの位置を記述するリアルタイム位置情報に基づき、
前記パーズされた識別子に対応するリアルタイムストリーム処理オブジェクトをインスタンス化し、
前記インスタンス化されたリアルタイムストリーム処理オブジェクトから、有向グラフ（212）を、前記仕様に従って作成し、
前記入力ソース識別子に対応する入力ソースからリアルタイムデータストリーム（214）を受け取り、及び、
前記出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する
ことを含む動作を実施させるための動作可能な命令の実行に少なくとも部分的に基づいて、前記コンピュータ可読命令を実行するよう動作可能であり、
前記生成することが、前記有向グラフ（212）を通じてリアルタイムデータストリームを処理することを含み、
前記生成することが、前記リアルタイム位置情報から決定されたコンフィギュレーションパラメータ値に基づき、及び、前記コンフィギュレーションパラメータ値によって前記有向グラフ内の前記インスタンス化されたリアルタイムストリーム処理オブジェクトの１以上を動的に構成することを含むことからなる、装置。
【請求項２７】
少なくとも１つのコンピュータ可読媒体であって、該コンピュータ可読媒体内に具現化されたコンピュータ可読プログラムコードを該コンピュータ可読媒体が有し、
前記コンピュータ可読プログラムコードは、
少なくとも１つのサーバネットワークノードによって実施されるネットワークサービスを含み、かつ、前記コンピュータと、１以上の仮想エリア内のそれぞれのオブジェクトに関連する他のネットワークノードとの間のリアルタイム通信をサポートするネットワーク通信環境において、
前記１以上の仮想エリアのうちの特定の仮想エリアに関連する前記ネットワークサービスから受け取った１つか又は複数のストリームハンドリング命令（210）から、リアルタイムストリームハンドラ（22）の仕様をパーズし、ここで、該パーズすることは、前記１つか又は複数のストリームハンドリング命令から、入力ソース識別子、出力シンク識別子、及び、１つか又は複数のデータ処理オブジェクトの各々の識別子のそれぞれを、パーズすることを含んでおり、前記１つ又は複数のストリームハンドリング命令は、前記特定の仮想エリア内の前記オブジェクトのそれぞれの位置を記述するリアルタイム位置情報に基づき、
前記パーズされた識別子に対応するリアルタイムストリーム処理オブジェクトをインスタンス化し、
前記インスタンス化されたリアルタイムストリーム処理オブジェクトから、有向グラフ（212）を、前記仕様に従って作成し、
前記入力ソース識別子に対応する入力ソースからリアルタイムデータストリーム（214）を受け取り、及び、
前記出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する
ことを含む方法を実現するために、コンピュータによって実行されるよう構成されており、
前記生成することが、前記有向グラフ（212）を通じてリアルタイムデータストリームを処理することを含み、
前記生成することが、前記リアルタイム位置情報から決定されたコンフィギュレーションパラメータ値に基づき、及び、前記コンフィギュレーションパラメータ値によって前記有向グラフ内の前記インスタンス化されたリアルタイムストリーム処理オブジェクトの１以上を動的に構成することを含むことからなる、少なくとも１つのコンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
本発明の背景
アバター・ベースのバーチャルリアリティ通信システムに対する関心が、高処理能力と広帯域幅のネットワーク接続とを有したコンピューティングシステムにおける高められた可用性と共に高まってきている。そのようなバーチャルリアリティシステムの主要なゴールは、オーディオ、ビデオ、及びテキストチャットストリームなどのリアルタイムデータストリームを用いて、仮想空間の中で複数ユーザが相互作用（又は交流）し及び伝達（通信）し合うことが可能な該仮想空間を生成することである。該仮想空間は、空間のビジュアルジオメトリを描写するコンピュータグラフィックス仕様（スペック）と、該ビジュアルジオメトリ上にマッピングされる色及びテクスチャと、空間内において如何に巧みに複数ユーザが動かす（又は操作する）かを制御するコリジョン特性と、空間の残響（又は反響；リバーバレイション）及び吸音特性などの聴覚特性とによって、典型的には画定される。
【０００２】
典型的なバーチャルリアリティシステムにおいて、複数ユーザは、システムによってサポートされるリアルタイムデータストリームのうちの１つか又は複数のソース（発信側）であるか、シンク（受信側）であるか、或いはソースとシンクとの両方であるインターフェースを通じて各々のコンピュータから互いに伝達し合う（又は通信する）。ユーザの各コンピュータ上において実行中のバーチャルリアリティソフトウェアアプリケーションは、仮想空間内におけるアバターの位置を表す位置情報に基づいて、それ自体のオーディオ及びグラフィックレンダリングを設定（又は構成）する。該位置情報は、典型的には、他のユーザのコンピュータから直接的にか、或いは、中央プレゼンスサーバから間接的にかのいずれかによって受け取られる。デフォルトで、バーチャルリアリティソフトウェアアプリケーションは、仮想空間内に表された各ソースを、仮想空間内に表されたあらゆるシンクに典型的には接続して、グローバルなスイッチング規則、ローカルなユーザ選択（又はローカルユーザの好み）、及び、仮想空間内におけるオブジェクトの特性において指定される条件の影響を受ける。これらの条件は、典型的には、オブジェクト間の相対距離に関して指定される。例えば、幾つかのバーチャルリアリティソフトウェアアプリケーションは、アバター間の離間距離が最大閾値距離を超える場合には、リアルタイムデータストリーム接続が確立されないように設定（又は構成）される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
良好なバーチャルリアリティ通信システムは、現在利用可能なコンピューティングデバイス及びネットワーク帯域幅制約を用いてリアルタイム通信性能が達成され得るように、典型的には、比較的低い計算リソース要件を有するべきである。追加的には、そのようなシステムは、該システムが仮想エリアを発展させるようエリア設計者に促すようなやり方で、それにより、ユーザによる該システムの採用が高められるようなやり方で、典型的には実現されるべきである。
【課題を解決するための手段】
【０００４】
本発明の概略
一態様において、本発明は、リモートネットワークノードから、ローカルネットワークノードにおいて、１つか又は複数のストリームハンドリング命令が受け取られるということに従った方法が特徴となる。該１つか又は複数のストリームハンドリング命令は、少なくとも１つのリアルタイムデータストリームを処理するためのストリームハンドラの仕様（スペック）を含む。ローカルネットワークノードにおいて、該仕様に従ってストリームハンドラが作成される。結果データストリーム（結果として生じるデータストリーム）が、ローカルネットワークノードにおいて生成される。このプロセス内において、その生成したストリームハンドラを通じてリアルタイムデータストリームが処理される。
【０００５】
別の態様において、本発明は、リアルタイムストリームハンドラの仕様が、１つか又は複数のストリームハンドリング命令からパーズされるということに従った方法が特徴となる。このプロセス内において、入力ソース識別子、出力シンク識別子、及び、１つか又は複数のデータ処理オブジェクトのそれぞれの各識別子が、１つか又は複数のストリームハンドリング命令からパーズされる。該識別子のうちの幾つかの各々に対応するリアルタイムストリーム処理オブジェクトは、インスタンス化される。該インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかを含む有向グラフが、仕様に従って作成される。入力ソース識別子に対応する入力ソースから、リアルタイムデータストリームが受け取られる。結果データストリームが、出力シンク識別子に対応する出力シンクにおいて生成される。このプロセス内において、リアルタイムデータストリームは、有向グラフを通じて処理される。
【０００６】
別の態様において、本発明は、少なくとも１つのリアルタイムデータストリーム接続が、ローカルネットワークノードと、少なくとも１つのリモートネットワークノードとの間において確立されるということに従った方法が特徴となる。該ローカルネットワークノードにおいて、リモートネットワークノードによって発信された少なくとも１つのリアルタイムデータストリームが処理される。このプロセス内において、前記少なくとも１つのリアルタイムデータストリームが、１つか又は複数のリアルタイムデータ処理動作を通じて処理されて、結果データストリームが生成される。この処理は監視される。該処理が性能目標から逸れることを監視することに基づく決定に応答して、リアルタイム性能目標付けルーチンに従って該処理が修正（変更）される。
【０００７】
別の態様において、本発明は、コネクションレス・トランスポート・プロトコルに従って、トランスポートストリームに関するリモートネットワークノードとの第１のセッションが、ローカルネットワークノード上において確立されるということに従った方法が特徴となる。ローカルネットワークノード上の１つか又は複数のソフトウェアエンティティのために、第１のセッション内において、自動的に、ローカルネットワークノードとリモートネットワークノードとの間でデータが伝達される１つか又は複数のチャンネルが、オープンにされる。第１のセッション内において、テーブルが保持される。該テーブルは、チャンネルうちの幾つかのオープンしたものを識別して、各々の属性値を、その識別したチャンネルに関連付ける。第１のセッションが失敗したという決定に応答して、リモートネットワークノードによる第２のセッションが、自動的に試みられて、コネクションレス・トランスポート・プロトコルに従った第２のトランスポートストリームに関して確立されることとなる。第２のセッションの確立の成功に応答して、テーブル内において自動的に識別された各チャンネルが、オープンにされる。
【０００８】
別の態様において、本発明は、１つか又は複数のカーネルサービス構成要素を含むカーネル構成要素のリストがパーズされるということに従った方法が特徴となる。ローカルな保存場所から無くなっているカーネル構成要素であって、該パーズされるリスト内における全ての該カーネル構成要素が決定される。無くなっていることが決定されたカーネル構成要素の各々が、回復される。カーネルサービスカーネル構成要素のうちの幾つかから、カーネルサービスがインスタンス化される。該インスタンス化されたカーネルサービスは、ある仮想エリアに関連して画定された通信環境内において、１つか又は複数のリモートネットワークノードと伝達し合うよう実行される。
【０００９】
別の態様において、本発明は、ローカルネットワークノード上において実施される方法が特徴となる。この方法に従って、仮想エリアによって画定されたコンテキスト内において、少なくとも１つのリモートネットワークとのリアルタイム通信をサポートするようローカルネットワークノードが構成（又は設定）される。その構成（又は設定）プロセスは、指定されたアプリケーションプログラミングインターフェース（ＡＰＩ）をサポートする全てのプラグインを列挙するためのコールに応答して、プラグインデータベース内の指定されたＡＰＩに関連付けられた全てのプラグインの識別子を含むリストを返すことと、複数プラグインのうちの識別されたプラグインによってサポートされる所与のＡＰＩのバリアントを列挙するためのコールに応答して、識別されたプラグインによってサポートされる所与のＡＰＩの全バリアントの識別子を含むリストを配信することと、及び、該識別されたプラグインをロードして、複数プラグインのうちの識別されたプラグインによってサポートされる識別されたＡＰＩの複数バリアントのうちの識別されたバリアントをインスタンス化するためのコールに応答して、該識別されたバリアントのインスタンスに対するポインタを提供すること、とを含む。少なくとも１つのリアルタイムデータストリーム接続が、構成（又は設定）されたローカルネットワークノードと、少なくとも１つのリモートネットワークノードとの間に確立される。
【００１０】
本発明はまた、上述の本発明の方法を実現するよう動作可能な装置と、コンピュータに本発明の上述の方法を実現させるコンピュータ読み出し可能命令を格納するコンピュータ可読媒体とが特徴となる。
【００１１】
本発明の他の特徴及び利点が、図面と特許請求の範囲とを含めて以下の説明から明らかになってくるであろう。
【図面の簡単な説明】
【００１２】
【図１】ネットワークによって相互接続された第１のクライアントネットワークノード、第２のクライアントネットワークノード、及びエリアサーバネットワークノード１６を含む仮想エリア通信環境の一実施形態の概略図である。
【図２】リアルタイムカーネルの一実施形態によって実施される方法の一実施形態の流れ図である。
【図３Ａ】ピア・ツー・ピア・アーキテクチャにおいてネットワークノードが通信（伝達）する仮想エリア通信環境の一実施形態の概略図である。
【図３Ｂ】サーバが仲介するアーキテクチャにおいてネットワークノードが通信（伝達）する仮想エリア通信環境の一実施形態の概略図である。
【図４】仮想エリアの描写を提示するグラフィカルユーザインターフェースを含むネットワークノードの一実施形態の概略図である。
【図５Ａ】仮想エリアの描写を提示するグラフィカルユーザインターフェース上にスーパーインポーズされたヘッドアップディスプレイ（ＨＵＤ）の一実施形態の概略図である。
【図５Ｂ】図５Ａ内に示されたＨＵＤの概略図である。
【図５Ｃ】図５Ａ内に示されたＨＵＤの拡大図の概略図である。
【図６】エリアネットワークインフラサービスの一実施形態によって実現される方法の一実施形態の流れ図である。
【図７】リアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。
【図８】リアルタイムカーネルの一実施形態を含むクライアントネットワークノードの一実施形態のブロック図である。
【図９】仮想エリアに対する接続をリクエストするリアルタイムカーネルＡＰＩコールに応答して、図８のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。
【図１０】仮想エリア内へのエントリをリクエストするリアルタイムカーネルＡＰＩコールに応答して、図８のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。
【図１１】エリアサービスから受け取ったストリームハンドリング命令に応答して、図８のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。
【図１２】ストリームハンドラコンフィギュレーションマネージャによって作成されるストリームハンドラの一実施形態のブロック図である。
【図１３】リアルタイムカーネルによって実施されるスケジューリングタスクのプロセス内において、図８のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。
【図１４】少なくとも１つのリアルタイムデータストリームの処理を監視することに基づく、図８のリアルタイムカーネルの一実施形態によって実現される方法の一実施形態の流れ図である。
【図１５】図８のリアルタイムカーネルの一実施形態のブロック図である。
【図１６】アカウントサーバがその認証情報を通じて認証されることによる方法の一実施形態の流れ図である。
【図１７】図８のリアルタイムカーネルの一実施形態のローダー構成要素によって実現される方法の一実施形態の流れ図である。
【図１８】図８のリアルタイムカーネルの一実施形態のＳＴＲＡＷサービス構成要素によって実現されるセッション管理方法の一実施形態の流れ図である。
【図１９】エリアネットワークインフラサービスから受け取ったリモートストリームハンドリング命令に応答して、図８のリアルタイムカーネルの一実施形態の構成要素によって実現される方法の一実施形態の流れ図である。
【図２０】図８のリアルタイムカーネルの一実施形態のＳＴＲＡＷサービス構成要素によって実現されるトランスポートプロトコルの構成要素の概略図である。
【図２１】クライアントネットワークノード３４４とサーバ３４６との間においてサーバストリームが確立される方法の一実施形態を示す図である。
【図２２】図２２を参照すると、発行サーバによって呼び起こされた新たなＧＵＩＤによって各セッションが識別されている。
【図２３】４人の通信者のオーディオプロセッシンググラフの例示的な一実施形態の要素を示す図である。
【図２４】非仮想エリアベースの通信アプリケーションを介して仮想エリア通信者と人々が伝達し合うことを可能するコンピュータシステムの一実施形態を示す図である。
【図２５】プラグインクラス階層（ヒエラルキ）の一実施形態の概略図を示す図である。
【図２６】１つか又は複数の導出されたバリアントクラスの各セットに各々が関連付けられたプラグインベースのクラスのセットの一実施形態の概略図を示す図である。
【図２７】プラグインアーキテクチャの一実施形態のブロック図である。
【図２８】プラグインマネージャと、プラグインコンテナのセットを含むプラグインディレクトリと、プラグインデータベースと、コーラーとを含むプラグインアーキテクチャの一実施形態のブロック図である。
【図２９】クライアントネットワークノード上において利用可能なプラグインを登録するプロセス内において、図２８のプラグインマネージャの一実施形態によって実現される方法の一実施形態の流れ図である。
【図３０】プラグインデータベースの一実施形態の概略図である。
【図３１】コーラーからのＡＰＩコールの受容に応答して、図２８のプラグインマネージャの一実施形態によって実現される方法の一実施形態の流れ図である。
【実施例】
【００１３】
本発明の詳細な説明
以下の説明では、同様の要素を特定するのに同様の番号が用いられている。更にまた、図面は、例示的な実施形態の主要な特徴を図表の手法で説明するように意図されている。図面は、実際の実施形態の全ての特徴を図示することは意図されておらず、図示された要素の相対的な寸法の全てを図示することも意図されておらず、及び、一定の縮尺に従って描かれていない。
【００１４】
Ｉ．用語の定義
「コンピュータ」は、コンピュータ可読媒体上に一時的にか或いは永続的にかのいずれかの状態で格納されるコンピュータ可読命令に従ってデータを処理する任意の機器か、デバイスか、又は装置である。
【００１５】
「コンピュータオペレーティングシステム」は、タスク性能（動作）と、ソフトウェア及びハードウェアリソースを共有することとを管理し且つ連携させる、コンピュータのソフトウェア構成要素である。「カーネル」は、コンピュータリソース（例えば、ＣＰＵ、メモリ、ネットワークリンク、及び周辺装置のリソース）にアクセスするための特定機能を提供するためにソフトウェアアプリケーションによって呼び出され得るソフトウェア構成要素のコレクションである。「ソフトウェアアプリケーション」（ソフトウェア、アプリケーション、コンピュータソフトウェア、コンピュータアプリケーション、プログラム、及びコンピュータプログラムとしても呼ばれる）は、１つか又は複数のタスクを実施するためにコンピュータが解釈し且つ実行することが可能な命令のセットである。
【００１６】
「アプリケーションプログラミングインターフェース」（すなわちＡＰＩ）は、機能（又はプロシージャ）の宣言のセットであり、それにより、オペレーティングシステムか、ライブラリか、又はサービスプロバイダが、ソフトウェアアプリケーションによってなされるリクエストをサポートする。ＡＰＩは、インターフェースと、そのインターフェース内において指定された識別子の振る舞いを規定（又は指定）する。ＡＰＩの実現（又は実行）は、該ＡＰＩによって表される機能性（機能）を提供するソフトウェアアプリケーションコードを参照する。「コンピュータデータファイル」は、ソフトウェアアプリケーションによって使用されるために永続的にデータを格納する、情報のブロックである。
【００１７】
「サービス」は、単独で自発的に（他のプロセスとは独立して）あるタスクを実施するプロセスである。
【００１８】
「マネージャ」は、タスクを実施するサービスのためのゲートウェイである。マネージャは、単独で自発的にはタスクを実施しない。
【００１９】
「データベース」は、コンピュータによって検索され得る標準フォーマットにおいて提示されている記録（レコード）の系統立てられたコレクションである。データベースは、単一コンピュータ上の単一コンピュータ可読データ記憶媒体上に格納され得るか、或いは、１つか又は複数のコンピュータ上の複数のコンピュータ可読データ記憶媒体にわたって分配され（割り振られ）得る。
【００２０】
「データシンク」（本明細書内においては単に「シンク」と呼ばれる）は、データを受け取る任意の装置か、装置の一部（例えば、コンピュータ）か、又はソフトウェアである。
【００２１】
「データソース」（本明細書内においては単に「ソース」と呼ばれる）は、データを発生させる任意の装置か、装置の一部（例えば、コンピュータ）か、又はソフトウェアである。
【００２２】
「ネットワークノード」（単に「ノード」としても呼ばれる）は、通信ネットワーク内の接合点か又は接続点である。例示的なネットワークノードは、端子（又は端末；ターミナル）、コンピュータ、及びネットワークスイッチを含む（但しこれらに限定されない）。「サーバネットワークノード」は、ネットワーク上のホストコンピュータであり、情報か又はサービスに対するリクエストに応答する。「クライアントネットワークノード」は、ネットワーク上のコンピュータであり、サーバからの情報か又はサービスをリクエストする。「ネットワーク接続（又は接続部）」は、２つの通信ネットワークノード間のリンクである。用語「ローカルネットワークノード」は、現在、議論の主要な対象であるネットワークノードのことを指す。用語「リモートネットワークノード」は、ネットワーク通信リンクによってローカルネットワークノードに接続されているネットワークノードのことを指す。
【００２３】
「プレゼンス（Presence）」は、通信（伝達）を行うための、ネットワーク接続されたエンティティ（例えば、通信者か、サービスか、又は装置）の能力及び意欲のことを指す。ここで、該意欲は、ネットワーク上のエンティティの状態についての情報を検出して取得する能力（機能）と、エンティティに接続する能力（機能）とに影響を及ぼす。
【００２４】
「リアルタイムデータストリーム」は、連続的な流れで構成され且つ処理されるデータであり、遅延が無い状態でか又はわずかな微小な遅延と共に受け取られるように設計される。リアルタイムデータストリームは、音声、ビデオ、ユーザ動作（ムーブメント）、顔の表情、及び他の物理的な現象のディジタル表現を含み、並びに、迅速な伝送か、迅速な実行か、又は迅速な伝送と迅速な実行との両方（例えば、アバター動作命令、テキストチャット、リアルタイムデータフィード（例えば、センサデータ、機械制御命令、トランザクションストリーム、及び株価情報供給）、及びファイル転送を含む）による利益を得ることが可能なコンピューティング環境内におけるデータを含む。
【００２５】
「ストリームミックス」は、同一か又は意味的に一致したタイプ（例えば、オーディオ、ビデオ、チャット、及びモーションデータ）の２つか又は３つ以上のリアルタイムデータストリームの組み合わせである。例えば、音声ストリームのセットが、単一音声ストリーム内へとミックスされ得るか、或いは、ある音声ストリームが、ビデオストリームのオーディオ部分の中へとミックスされ得る。
【００２６】
「スイッチンング規則」は、１つか又は複数の先行条件の影響を受ける、１つか又は複数のリアルタイムデータソース及び１つか又は複数のリアルタイムデータシンクの接続か又は切断を指定する命令である。
【００２７】
「仮想エリア」（「エリア」か又は「場所」としても呼ばれる）は、コンピュータ管理された空間又は場（シーン）の表現である。仮想エリアは、典型的には、１次元か、２次元か、又は３次元の表現である。しかしながら、幾つかの実施形態において、仮想エリアは、単一ポイントに対応することも可能である。頻繁に、仮想エリアは、物理的な現実世界空間をシミュレートするよう設計される。例えば、従来のコンピュータモニタを用いて、仮想エリアを、３次元コンピュータ生成空間の２次元グラフィックとしてビジュアル化することができる。しかしながら、仮想エリアは、スイッチング規則を実現することに関連した視覚化を必要としない。仮想エリアは、典型的には、仮想エリアスキーマのインスタンスのことを指し、ここで、該スキーマは、バリアブルに関して、仮想エリアの構造とコンテンツとを画定し、インスタンスは、ある特定のコンテキストから決定された値に関して、仮想エリアの構造とコンテンツとを画定する。
【００２８】
「仮想エリアアプリケーション」（「仮想エリア仕様（スペック）」としても呼ばれる）は、仮想エリア通信環境を作成することにおいて使用される仮想エリアの記述である。仮想エリアアプリケーションは、典型的には、仮想エリアにおける１つか又は複数のゾーンに関連付けられている、ジオメトリの定義と、物理特性と、リアルタイムスイッチング規則と、を含む。
【００２９】
「仮想通信環境」は、コンピュータ管理された空間の表現であり、少なくとも１つの仮想エリアを含み、通信者間のリアルタイム通信をサポートする。
【００３０】
「ゾーン」は、少なくとも１つのスイッチング規則か又はガバナンス規則に関連付けられている仮想エリアの領域である。スイッチング規則は、仮想エリアのコンテキスト内において伝達しているネットワークノード間のリアルタイムデータストリームをスイッチングすること（例えば、ルーティングすること、接続すること、及び切断すること）を制御する。ガバナンス規則は、リソース（例えば、あるエリアか、あるエリアのある領域か、或いは、そのエリアか又は領域のコンテンツ）に対する通信者のアクセスと、そのアクセスの範囲と、そのアクセスの後続の結果（例えば、そのアクセスに関する監査記録が記録される必要があるという要件）とを制御する。
【００３１】
仮想エリア内の「位置（ポジション）」は、該仮想エリア内におけるあるポイントか又はあるエリアか又はあるボリュームの位置（ポジション）のことを指す。ポイントは、典型的には、仮想エリア内のスポットを画定する１次元か、２次元か、又は３次元の座標（例えば、ｘ、ｙ、ｚ）の単一セットによって表される。エリアは、典型的には、仮想エリア内における閉じた２次元形状の境界を画定する、３つか又は４つ以上の同一平面上にある頂点の３次元座標によって表される。ボリュームは、典型的には、仮想エリア内における３次元形状の閉じた境界を画定する、４つか又は５つ以上の同一平面上にはない頂点の３次元座標によって表される。
【００３２】
仮想エリアのコンテキスト内において、「オブジェクト」は、仮想エリア内の任意のタイプのディスクリートな要素であり、仮想エリアのジオメトリからは切り離して有益に取り扱われ得る。例示的なオブジェクトは、ドア、入口（ポータル）、窓、ビュースクリーン、及びスピーカーフォンを含む。オブジェクトは、典型的には、仮想エリアの属性及び特性とはかけ離れた及び異なる属性か又は特性を有する。「アバター」は、仮想エリア内の通信者を表すオブジェクトである。
【００３３】
「通信者（又は伝達者）」は、ネットワーク接続上において他の人々と通信する（又は伝達し合う）か又は別様には相互作用する人物であり、ここで、該通信（又は伝達）か又は相互作用は、仮想エリアのコンテキスト内において生じる可能性があるか又は生じない可能性がある。「ユーザ」は、説明する目的のために、ある特定の眺め（又は景色）を画定する特定ネットワークノードを操作する（又は動作させている）通信者である。
【００３４】
「エリアサーバ」は、エリアネットワークインフラサービスを含むネットワークノードであり、仮想エリアアプリケーションをホストする仮想エリアを、（該仮想エリア内のオブジェクトに関連付けられたクライアントノードのセッションを管理することによって）管理（又は運営）する。
【００３５】
本明細書内において用いられる時には、用語「含む（include）」は、〜を含む（但し、それ（又はそれら）に限定されない）ことを意味し、用語「含んでいる（including）」は、〜を含んでいる（但し、それ（又はそれら）に限定されない）ことを意味する。
【００３６】
ＩＩ．  イントロダクション
本明細書内において記載されている実施形態は、各ネットワークノード上において操作する（又は動作させる）通信者間におけるリアルタイム通信をサポートするリアルタイムカーネルを提供する。該リアルタイムカーネルは、通信者、仮想エリア、及び他のネットワークリソースに接続し、ユーザ入力に応答してこれらの接続をスイッチングし、及び、リアルタイムデータストリームをミキシングする、という複雑なタスクを処理（ハンドル）する。リアルタイムカーネルによって、開発者は、低レベルな、コードを配管すること（plumbing code）の代りに、高レベルの通信機能性を開発することに集中することが可能になる。広範囲の現在利用可能なコンピューティングデバイス及びネットワーク接続を用いて、リアルタイム通信性能が達成され得ることとなるように、リアルタイムカーネルは、比較的低い計算リソース要件を課す。
【００３７】
幾つかの実施形態において、リアルタイムカーネルは、リモートコンフィギュレーションと、オーディオ及びグラフィックレンダリングエンジンの実行とをサポートし、並びに、リモートにホストされる仮想エリアアプリケーションから受け取った（定義としても呼ばれる）命令に応答してリアルタイムデータストリームのスイッチングをサポートする。このようにして、リアルタイムカーネルによって、仮想エリア設計者が、リモートクライアントネットワークノード上の没入型（又は没頭型、又は集中型、又は熱中型；immersive）仮想通信環境のプレゼンテーションにわたる制御を維持することが可能になり、それにより、広い様々な異なるタイプの仮想エリアの発展（又は展開）を促すことが可能になり、通信システムを採用することを望んでいるであろうユーザの人数を増やすことが可能になる。
【００３８】
幾つかの実施形態において、リアルタイムカーネルは、リアルタイムデータストリームの処理を監視して、性能目標からの処理の逸れ（逸脱、又は偏差）に基づいて該処理を適合させる。このようにして、リアルタイムカーネルは、リアルタイムデータストリーム処理が実施されているコンピューティング環境とは無関係に、リアルタイム性能が達成され得る見込み（又は尤度、公算）を増加させる。
【００３９】
幾つかの実施形態では、リアルタイムカーネルは、接続及び切断において効率的な、並びに、伝送（トランスポート）において効率的な、ストリームトランスポートプロトコルを実現する。これらの実施形態のうちの幾つかにおいて、該ストリームトランスポートプロトコルが、接続配向された暗号化された接続を、コネクションレス・トランスポート・プロトコル（例えば、ＵＤＰ）において提供する。リアルタイムカーネルは、クライアントアプリケーションと、トランスポート層との間に、再接続メカニズムを追加的に提供する。該再接続メカニズムは、失敗した接続を、クライアントアプリケーションによる介入無しに再確立させることを自動的に試み、それにより、本質的には信頼性の無い通信プロトコルの頂上の上に、信頼性を追加する。
【００４０】
幾つかの実施形態において、プラグインアーキテクチャを、リアルタイムカーネルが有する。該プラグインアーキテクチャにより、カーネル構成要素の機能が（クライアントネットワークノード上において動的にロードされ得る１つか又は複数のプラグインによって）提供されることが可能になる。このようにして、カーネル構成要素は、独立に発展され得り、及び、リモートに管理及び更新（アップデート）され得る。該プラグインアーキテクチャによって、リアルタイムカーネルのインストール領域（フットプリント）が、実質的に低減されることが追加的に可能になり、それにより、該カーネルが、著しいコンピューティング及びメモリリソース制約を有するクライアントデバイスを含む広範囲のクライアントデバイス上にインストールされることが可能になる。
【００４１】
ＩＩＩ．概説
Ａ．イントロダクション
図１は、ネットワーク１８によって相互接続されている第１のクライアントネットワークノード１２と第２のクライアントネットワークノード１４とエリアサーバネットワークノード１６とを含む例示的な仮想エリア通信環境１０の一実施形態を示す。第１のクライアントネットワークノード１２は、１つか又は複数の構成（又は設定）可能なストリームハンドラ２２を含むリアルタイムカーネル２０の一実施形態と、入力／出力（Ｉ／Ｏ）ハードウェア２４とを含む。第２のクライアントネットワークノード１４は、第１のクライアントネットワーク１２とほぼ同じやり方で典型的には構成される。エリアサーバネットワークノード１６は、エリアネットワークインフラサービス２６（単に「エリアサービス」としても呼ばれる）を含む。該エリアネットワークインフラサービス２６は、仮想エリア２８内の第１及び第２のクライアントノード１２、１４のセッションを管理することによって仮想エリア２８を管理（又は運営）する。仮想エリア２８は、仮想エリアアプリケーション３０をホストする。該仮想エリアアプリケーション３０は、仮想エリア通信環境を作成することに使用される仮想エリアの表現（又は記述、又は記載）を含む。該エリアサービス２６は、仮想エリアアプリケーション３０に従って仮想エリア２８を管理（又は運営）する。
【００４２】
共有仮想エリア通信環境を作成するプロセス内において、エリアサービス２６は、第１及び第２のクライアントネットワークノード１２、１４内のリアルタイムカーネルを、仮想エリアアプリケーション３０に関する制約３２のセットの影響下のリモート仮想エリアアプリケーション３０に従って、リモートに構成（又は設定）する。制約３２は、典型的には、仮想エリアに対するアクセスに関するコントロールを含む。該アクセスコントロールは、典型的には、（適切な機能及び許可（承諾）を有する通信者か又はクライアントノードに対するアクセスが許可される）１つか又は複数の機能と、（リスト上にあるアイデンティティを有した通信者か又はクライアントノードに対するアクセスが許可される）アクセスコントロールリストとに基づく。幾つかの実施形態において、制約３２は、セキュリティネットワークインフラサービス（後述）によって管理（又は運用）される。第１及び第２のクライアントネットワークノード１２、１４上において動作しているクライアントソフトウェアアプリケーションにより、通信者が、共有仮想エリア通信環境にアクセスすることが（リアルタイムカーネル２０を介してエリアサービス２６から受け取ったデータに従って仮想エリアのそれぞれのビュー（又は景色、又は眺め）を提示することによって、及び、通信者からの受信コマンドにインターフェースを提供することによって）可能になる。通信者は、典型的には、それぞれのアバターによって仮想エリア内において表される。該アバターは、通信者のそれぞれのネットワークノードにおいて該通信者によって入力されるコマンドに応答して仮想エリアを動きまわる。仮想エリアの各通信者のビュー（又は景色、又は眺め）は、典型的には、通信者のアバターの眺め（perspective）から提示され、通信者によって経験される没入型のレベル（又は、該通信者があたかもその環境の中にいるように感じることができるレベル）を増加させる。各通信者は、典型的には、その通信者のアバターの周囲の仮想エリアの任意の部分を眺めることが可能である。第１及び第２のクライアントネットワークノード１２、１４上において動作しているリアルタイムカーネルは、仮想エリア内の、通信者のアバターの位置に少なくとも部分的に基づいて、仮想エリア通信環境を共有している他のネットワークノードとのリアルタイムデータストリーム接続を確立する。
【００４３】
図２は、リアルタイムカーネル２０によって実現される方法の例示的な一実施形態を示す。この方法に従って、リアルタイムカーネル２０は、エリアサービス２６とのセッションを確立する（図２のブロック３４）。通信者の入力に応答してか或いは自動的にかのいずれかで、リアルタイムカーネル２０は、仮想エリア２８のインスタンス内へのエントリをリクエストする（図２のブロック３６）。仮想エリアインスタンスに対する通信者のアクセスに関する制約３２が、もしも満たされていれば、エリアサービス２６は、リアルタイムカーネル２０に、仮想エリア内のアバターの位置を含めた現在の状態情報を含むコンフィギュレーションデータを伝達する。リアルタイムカーネル２０は、エリアサービス２６から該コンフィギュレーションデータを受け取る（図２のブロック３８）。リアルタイムカーネル２０は、エリアサービス２６から受け取った命令に従って、人間にとって知覚可能な仮想エリア通信者環境をレンダリングするために、Ｉ／Ｏハードウェア２４を設定（又は構成）する（図２のブロック４０）。
【００４４】
幾つかの実施形態において、Ｉ／Ｏハードウェア２４を設定（又は構成）するプロセスは、リモートネットワークノード１４から受け取られる命令と位置データとに従って、少なくとも１つのストリームハンドラ２２を動的に構成（又は設定）することを含む。例えば、仮想エリアアプリケーション３０は、現在仮想エリア内にあるオブジェクトに関連付けられているオーディオストリームに適用されるべき１つか又は複数のオーディオエフェクトを指定することが可能であり、このケースでは、エリアサービス２６が、第１及び第２のクライアントネットワークノード１２，１４上において実行しているリアルタイムカーネルに対して命令を送り、該命令によって、それらのそれぞれのオーディオストリームハンドラが、仮想エリア内のそれぞれのオブジェクトの位置に従って指定されたエフェクトを実施するよう構成（又は設定）される。
【００４５】
それぞれの出力３３を生成するために、各々の構成（又は設定）されたストリームハンドラ２２を通じて、リアルタイムカーネル２０は、通信者オブジェクトに関連付けられているリアルタイムデータストリームを処理する。そのコンテンツに依存して、出力３３は、コンピュータ可読媒体上に格納され得るか、或いは、第１及び第２のネットワークノード１２、１４上において動作するＩ／Ｏハードウェアにより、人間にとって知覚可能な出力へと変換され得る。例えば、オーディオ出力信号が、オーディオハードウェア（例えば、サウンドカード及びスピーカ）によって可聴音に変換され、及び、グラフィック出力信号が、グラフィックハードウェア（例えば、ビデオカード及びディスプレイ）によって可視画像に変換される。幾つかの実施形態において、少なくとも１つのストリームハンドラ２２によって生成された出力３３は、１つか又は複数の下流のソフトウェア構成要素によって処理され、該下流のソフトウェア構成要素は、コンピュータ可読媒体上に格納され得るか或いは人間にとって知覚可能な出力へと変換され得るかのいずれかの出力を、同様に生成する。
【００４６】
Ｂ．例示的な動作環境
リアルタイムカーネル２０は、仮想エリア通信環境１０のコンテキスト内において動作し、該仮想エリア通信環境１０は、ネットワーク１８と、ネットワークインフラサービス環境とを含み、該ネットワークインフラサービス環境は、エリアサービス２６を含む多くのネットワークインフラサービスを含む。リアルタイムカーネル２０及びネットワークインフラサービス環境は、通信者に対する仮想エリア通信環境を構築するためのプラットフォームを構成する。
【００４７】
１．ネットワーク環境
ネットワーク１８には、任意のローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、及びワイドエリアネットワーク（ＷＡＮ）（例えばインターネット）を含めることができる。ネットワーク１８は、典型的には、多くの異なるコンピューティングプラットフォームと、ネットワークノード間において広範囲の様々な異なる媒体タイプ（例えば、テキスト、音声、オーディオ、及びビデオ）の伝送をサポートするトランスポート設備とを含む。
【００４８】
管理上のポリシー、（ユーザの存在の移出、及び、エリア及び接続目標に対するユーザの接続に関する選択を含む）ユーザ選択、及び（他のネットワークノードとのリアルタイム接続の管理に影響を及ぼすローカルコンフィギュレーションを画定する）他の設定と共に、リアルタイムカーネル２０は、ハードウェアリソース及びソフトウェアリソースを含むネットワークノード上において典型的には動作する。ネットワークノード間のネットワーク接続は、ピア・ツー・ピア・アーキテクチャと、サーバが仲介するアーキテクチャと、（ピア・ツー・ピア・アーキテクチャの態様と、サーバが仲介するアーキテクチャの態様とを組み合わせた）ハイブリッドアーキテクチャとを含む、様々な異なるストリームハンドリングトポロジにおいて構成され得る。
【００４９】
図３Ａは、仮想エリア通信環境１０の一実施形態４２を示す。該一実施形態４２において、第１及び第２のネットワークノード１２、１４、及びリモートネットワークノード１６が、ピア・ツー・ピア・アーキテクチャにおいて通信ネットワーク１８によって相互接続されている。このアーキテクチャでは、ネットワークノード１２〜１６の各々が、状態変化を（例えば、仮想エリア２８内のアバターの動きを）、他のネットワークノードの各々へと伝達する。ネットワークノードのうちの１つ（典型的には、通信セッションを開始するネットワークノード）は、「エリアサーバ」として動作する。この例示的な実施形態では、ネットワークノード１６が、エリアサーバの役割として仮定されている。エリアサーバネットワークノード１６は、グローバル状態情報を保持し、及び、他のネットワークノード１２、１４に対するデータサーバとして機能する。該グローバル状態情報は、仮想エリア内に存在する全オブジェクトのリストと、仮想エリア内におけるそれらのそれぞれの位置とを含む。エリアサーバネットワークノード１６は、他のネットワークノード１２、１４を設定（又は構成）する命令を送る。エリアサーバネットワークノード１６はまた、初期化情報を記録して、通信セッションに参加することをリクエストする他のネットワークノードに対して該初期化情報を伝達する。このプロセス内において、エリアサーバネットワークノード１６は、仮想エリアアプリケーション３０に従ってクライアントネットワークノード上において仮想エリア２８をレンダリングするために必要とされる構成要素（例えばプラグイン）のリストを、各参加クライアントネットワークノードに対して伝達する。クライアントネットワークノード１２、１４上のリアルタイムカーネルは、典型的には、リスト上における任意の欠けている構成要素を、リモートサーバ（例えばプラグインサーバ）から回復させる（又は回収する）。通信エラー（又は通信故障；communication fault）が発生した場合には、他のネットワークノード１２、１４が、グローバル状態に同期することが可能であるということを、エリアサーバネットワークノード１６がまた保証する。
【００５０】
図３Ｂは、仮想エリア通信環境１０の一実施形態４４を示す。該一実施形態４４において、ネットワークノード１２〜１６（このアーキテクチャでは、「エリアクライアント」ネットワークノードとも呼ばれる）は、エリアサーバ４６によって仲介されるアーキテクチャにおいて通信（伝達）を行う。この実施形態では、エリアサーバ４６が、そのエリアサーバ機能を、図３Ａ内において示されたピア・ツー・ピア・アーキテクチャ実施形態においてネットワークノード１６によって該エリアサーバ機能があたかも実施されているかのように、仮定する。これに関して、エリアサーバ４６が、グローバル状態情報を保持し、及び、エリアクライアントネットワークノード１２〜１６に対するデータサーバとして機能する。このアーキテクチャによって、エリアクライアントノード１２〜１６間においてスイッチングされるリアルタイムデータストリームが、様々なトポロジにおいて処理されることが可能になる。該様々なトポロジは、ピア・ツー・ピア・トポロジと、完全にサーバによって仲介されたトポロジ（このトポロジでは、エリアサーバ４６がネットワークノード１２〜１６間の通信ブローカーとして動作する）と、（ピア・ツー・ピア・トポロジの態様と、完全にサーバによって仲介されたトポロジの態様とを組み合わせた）ハイブリッドトポロジとを含む。これらのタイプの例示的なトポロジは、米国特許出願番号第１１／９２３，６２９号及び第１１／９２３、６３４号内において記載されている（これらの米国特許出願は両方とも、2007年10月24日にファイリングされたものである）。
【００５１】
２．ネットワークインフラサービス
１つか又は複数のネットワークインフラサービスは、典型的には、他のネットワークノードとのネットワーク接続を確立する及び管理（又は運用）するプロセスにおいて、リアルタイムカーネル２０と連携する。ネットワークインフラサービスは、単一ネットワークノード上において実行することができるか、或いは、複数のネットワークノードにわたって分散（又は分配）され得る。ネットワークインフラサービスは、典型的には、１つか又は複数の専用ネットワークノード（例えば、サーバコンピュータか、或いは、ルーティング及びスイッチングなどのエッジサービスを実施するネットワーク装置）上において実行される。しかしながら、幾つかの実施形態では、１つか又は複数のネットワークインフラサービスは、通信者のネットワークノードのうちの少なくとも１つのネットワークノード上において実行される。ネットワークインフラサービスの中で、仮想エリア通信環境１０の例示的な実施形態内に含まれるものは、アカウントサービス、セキュリティサービス、エリアサービス２６、ランデブーサービス、及び相互作用サービスである。
【００５２】
アカウントサービスは、ネットワークインフラサービス環境内の通信者アカウントを管理する。アカウントサービスはまた、任意のネットワークインフラサービスに対するクライアントネットワークノード自体の認証を行うために該クライアントネットワークノードによって使用され得る認証トークンの生成及び発行を管理する。
【００５３】
セキュリティサービスは、仮想エリア通信環境１０の資産（資源）及び他のリソースに対する通信者のアクセスを制御する。セキュリティサービスによって実現されるこのアクセス制御方法は、典型的には、（適切な機能か又は許可（承諾）を有したエンティティに対してアクセスが許可される）１つか又は複数の機能と、（リスト上に存在するアイデンティティを有したエンティティに対してアクセスが許可される）アクセスコントロールリストとに基づく。ある特定の通信者が、あるリソースに対するアクセスを許可された後に、その通信者は、典型的には、仮想エリア通信環境１０内において相互作用するために、他のネットワークインフラサービスによって提供される機能を利用する。
【００５４】
エリアサービス２６は、仮想エリアを管理（運用）する。このプロセスにおいて、エリアサービス２６は、エンティティをリクエストする機能の影響を受ける仮想エリアに関連付けられている接続を管理し、仮想エリアについてのグローバル状態情報を維持し、及び仮想エリアにより画定されたコンテキスト内において共有通信セッション内に参加しているクライアントネットワークノードに対するデータサーバとして機能する。該グローバル状態情報は、仮想エリア内に存在する全オブジェクトのリストと、仮想エリア内におけるそれらのそれぞれ位置とを含む。エリアサービス２６は、クライアントネットワークノードを設定（又は構成）する命令を送る。エリアサービス２６はまた、初期化情報を記録して、通信セッションに参加することをリクエストする他のクライアントネットワークノードに対して該初期化情報を伝達する。この処理において、エリアサービス２６は、仮想エリアアプリケーション３０に従ってクライアントネットワークノード上において仮想エリア２８をレンダリングするために必要とされる構成要素（例えばプラグイン）のリストを、各参加クライアントネットワークノードに伝達する。通信エラー（又は通信故障）が発生した場合には、クライアントネットワークノードが、グローバル状態に同期することが可能であるということを、エリアサービス２６はまた保証する。
【００５５】
ランデブーサービスは、プレゼンス情報の収集（コレクション）、格納、及び分散（又は分配、又は分布）を管理して、エンティティをリクエストする機能の影響下において、（例えば、処理する接続の分布を管理することによって）互いに伝達し合うための機構をネットワークノードに提供する。ランデブーサービスは、典型的には、プレゼンス情報を、プレゼンスデータベース内に格納する。
【００５６】
相互作用サービスは、通信者間の相互作用（又は交流）を記録する相互作用データベースを維持し、及び、エンティティをリクエストする機能の影響を受ける相互作用データベースに関するクエリーをサポートする。通信者間の相互作用（交流）ごとに、仮想エリア通信環境１０内の１つか又は複数のサービス（例えば、エリアサービス２６）が、相互作用データを、相互作用サービスに伝達する。それに応答して、該相互作用サービスは、１つか又は複数のそれぞれの相互作用（交流）記録を、関連データベース内に生成する。それぞれの相互作用記録は、相互作用のコンテキストを記載する。例えば、幾つかの実施形態において、ある相互作用記録は、各通信者ごとの識別子と、相互作用の場所についての識別子（例えば、仮想エリアインスタンス）と、相互作用場所の階層（ヒエラルキ）の記載（例えば、あるより広いエリアに対して、相互作用部屋が如何に関係するかの記載）と、相互作用の開始及び終了時間と、全ファイルと相互作用中に共有される他のストリームとのリストとを含む。従って、各リアルタイム相互作用ごとに、相互作用サービスは、それが発生した時と、それが発生した場所と、及び、含まれる通信者に関して相互作用中に起こった出来事（例えば、進入及び退出）と、アクティブにされる／非アクティブにされるオブジェクトと、共有化されたファイルとを追跡する。
【００５７】
相互作用サービスは、場所に基づいて（例えば、最も頻度が高いか、又は最も最新の）ソートされた順序で、相互作用データベース記録に関するクエリーの結果を提示することができる。仮想エリア内で通信者が会合した者とのコンタクトの頻度ソートと、並びに、仮想エリアとは無関係に該通信者が会合した者のソートと、該通信者がほとんどの場合に頻繁に訪れる仮想エリアのソートと、を駆動（ドライブ）するために、そのクエリー結果が使用され得る。クエリー結果はまた、関係に基づいてあるタスクを自動化するヒューリスティック（発見的問題解決法）システムの一部として、アプリケーション開発者によって使用され得る。このタイプのヒューリスティック（発見的問題解決法）の一例は、６回以上ある特定の仮想エリアを訪れた通信者が、デフォルトで、ノックすること無く進入することが可能になるようなヒューリスティックであるか、或いは、ある特定の時間にあるエリア内に存在した通信者が、その同じ時間に同じエリア内に存在した別の通信者によって作成されたファイルを変更するか又は削除することが可能になるようなヒューリスティックである。相互作用データベースに関するクエリーは、他の検索と組み合わされ得る。例えば、相互作用データベースに関するクエリーは、ネットワークインフラサービス環境のドメインの外側の通信システム（例えば、Skype、Facebook、及びFlickr）を用いて、コンタクトによる相互作用について生成されたコンタクト履歴データに関するクエリーと組み合わされ得る。
【００５８】
３．仮想エリア
リアルタイムカーネル２０は、仮想エリアのインスタンスによって画定される通信コンテキスト内のネットワークノードとのリアルタイム接続を管理（運用）する。仮想エリアインスタンスは、抽象的な（又は概念上の、又は難解な）座標に関して画定される抽象的な（ジオメトリックでない）仮想空間に対応することができる。代替的には、仮想エリアインスタンスは、ある特定の視覚化（又は映像化；ビジュアライゼーション）に関連付けられている１次元か、２次元か、又は３次元のジオメトリック座標に関して画定されるビジュアル仮想空間に対応することができる。抽象的な仮想エリアは、それぞれの視覚化に関連付けられることが可能であるか又は不可能である一方で、ビジュアル仮想エリアは、それぞれの視覚化に関連付けられる。
【００５９】
上記に説明したように、通信者は、典型的には、ある関連付けられた視覚化（映像化）を有した仮想エリア内のそれぞれのアバターによって表現される。該アバターは、通信者によって該通信者のそれぞれのネットワークノードにおいて入力される入力コマンドに応答して仮想エリアを動きまわる。ある関連付けられた視覚化を有した仮想エリアインスタンスの通信者の景色（ビュー）は、典型的には、その通信者のアバターの眺めから提示（表現）され、各通信者は、典型的には、該通信者のアバターの周囲のビジュアル仮想エリアの任意の部分を眺めることができ、その通信者によって経験される没入レベル（又は、該通信者があたかもその環境の中にいるように感じることができるレベル）が増加する。
【００６０】
図４は、コンピュータシステム４８によって実現される例示的なネットワークノードの一実施形態を示す。コンピュータシステム４８は、ディスプレイモニタ５０、コンピュータマウス５２、キーボード５５４、スピーカ５６、５８、及びマイクロホン６０を含む。ディスプレイモニタ５０は、グラフィカルユーザインターフェース６２を表示する。グラフィカルユーザインターフェース６２は、ｗｉｎｄｏｗｓベースのグラフィカルユーザインターフェースであり、該グラフィカルユーザインターフェースには、複数のウィンドウ（窓）、アイコン、及びポインタ６４を含めることができる。この例示的な実施形態において、グラフィカルユーザインターフェース６２は、画廊（アートギャラリー）を表す３次元視覚化に関連付けられている共有仮想エリア６６の２次元の描写を提示（表現）する。通信者は、それぞれのアバター６８、７０、７２によって仮想エリア６６内に表現されており、該アバター６８、７０、７２の各々は、仮想エリア６６のコンテキスト内において、それぞれ役割（例えば、館長、画家、及び訪問者）を有することができる。
【００６１】
下記において詳細に説明されるように、仮想エリア６６は、ゾーン７４、７６、７８、８０、８２を含み、それらゾーンは、それぞれの規則に関連付けられており、該規則は、仮想エリア６６内のアバター６８〜７２によって表されるネットワークノード間のリアルタイムデータストリームのスイッチングに影響を与える（典型的な通信セッション中には、そのようなゾーン境界に関連付けられたビジュアルキューがあっても、図４内のゾーン７４〜８２の境界を定める点線（ダッシュ線）が、通信者にとっては見ることができない）。スイッチング規則は、各ネットワークノード上において実行しているローカル接続プロセスが、仮想エリア６６のゾーン７４〜８２内の通信者のアバター６８〜７２の位置に基づいて、他のネットワークノードとの通信を、如何にして確立するかを命令する。
【００６２】
仮想エリアは、仮想エリアのジオメトリック要素の記載（又は表現）と、（スイッチング規則及びガバナンス規則を含む）１つか又は複数の規則とを含む仕様（スペック）によって画定される。スイッチング規則は、ネットワークノード間のリアルタイムストリーム接続に影響を与える。ガバナンス規則は、仮想エリア自体、仮想エリアによる領域、及び仮想エリア内におけるオブジェクトなどのリソースに対する通信者のアクセスを制御する。幾つかの実施形態において、仮想エリアのジオメトリック要素は、（http://www.khronos.org/collada/から利用可能な）2006年4月の仕様のDigital Asset Schema Release 1.4.1のＣＯＬＬＡＤＡに従って表され（又は記載され）、及び、スイッチング規則は、米国特許出願番号第１１／９２３，６２９号及び第１１／９２３、６３４号内に記載されたＣＯＬＬＡＤＡストリームリファレンス仕様に従って、拡張マークアップ言語（ＸＭＬ）テキストフォーマット（本明細書内においては仮想空間記述フォーマット（ＶＳＤＬ）と呼ばれる）を用いて記載される。
【００６３】
仮想エリアのジオメトリック要素は、典型的には、仮想エリアの物理ジオメトリとコリジョンジオメトリとを含む。物理ジオメトリは、仮想エリアの形状を表す（又は記載する）。物理ジオメトリは、典型的には、三角形か、四角形か、又はポリゴンの表面から形成される。色及びテクスチャが、物理ジオメトリ上へとマッピングされて、仮想エリアについてのより現実的な外観が形成される。例えば、ビジュアルジオメトリ上に光をペイントして、そのテクスチャか、色か、又は強度を、光に近く修正することによって、照明効果が提供され得る。コリジョンジオメトリは、仮想エリア内においてオブジェクトが移動できる方向を決定する不可視表面を表す（又は記載する）。コリジョンジオメトリは、ビジュアルジオメトリと同時に発生する可能性があり、ビジュアルジオメトリのより簡単な近似値に対応する可能性があるか、又は仮想エリア設計者のアプリケーション仕様要件に関連する可能性がある。
【００６４】
スイッチング規則は、典型的には、仮想エリア内の位置に関してリアルタイムデータストリームのソース及びシンクを接続するための条件の記載を含む。各規則は、典型的には、規則が適用されるリアルタイムデータストリームタイプと、規則を適用する仮想エリア内の位置（複数可）とを画定する属性を含む。幾つかの実施形態において、規則の各々には、オプションで、ソースにおける要求される役割と、シンクにおける要求される役割と、ストリームの優先レベルと、リクエストされたストリームハンドリングトポロジとを指定する１つか又は複数の属性を含めることができる。幾つかの実施形態において、仮想エリアのある特定の部分について定義された明確なスイッチング規則が存在しない場合には、１つか又は複数の暗黙のか又はデフォルトのスイッチング規則を、該仮想エリアのその部分に適用することができる。１つの例示的なデフォルトのスイッチング規則は、ポリシー規則の影響下で、全てのソースを、エリア内における互換性のある全てのシンクに接続するという規則である。ポリシー規則は、エリアクライアント間の全ての接続に対してグローバルに適用することができるか、或いは、個々のエリアクライアントとのそれぞれの接続のみ対して適用することができる。ポリシー規則の一例は、仮想エリア内における互いのある規定された距離（又は半径）内において存在する各オブジェクトに関連付けられている互換性のあるシンクとのソースの接続のみを可能にするという近接ポリシー規則である。
【００６５】
幾つかの実施形態において、仮想エリアに対するアクセスを有する者と、そのコンテンツに対するアクセスを有する者と、仮想エリアのコンテンツに対するそのアクセスの範囲が何か（例えば、そのコンテンツでユーザが何をすることができるか）と、これらのコンテンツをアクセスすることの後続の結果が何か（例えば、監査ログなどの記録を取ること、及び支払い要求）とを制御するために、ガバナンス規則が仮想エリアに関連付けられる。幾つかの実施形態において、仮想エリア全体か又は仮想エリアにおけるあるゾーンが、「ガバナンスメッシュ」に関連付けられる。幾つかの実施形態において、ガバナンスメッシュは、米国特許出願番号第１１／９２３，６２９号及び第１１／９２３、６３４号内に記載されたゾーンメッシュの実現形態に類似したやり方で実現される。ガバナンスメッシュによって、ソフトウェアアプリケーション開発者が、ガバナンス規則を、仮想エリアにか又は仮想エリアのゾーンに関連付けることが可能になる。このことによって、仮想エリア内の各ファイルごとに個別の許可を作成する必要性が回避され、及び、コンテキストに依存して同じ文書を異なって取り扱う必要性がある時に潜在的に生じる可能性がある複雑性に対処する必要性が回避される。
【００６６】
幾つかの実施形態において、仮想エリアにおける１つか又は複数のゾーンを、ディジタルライト管理（ＤＲＭ：digital rights management）機能に関連付けるガバナンスメッシュに仮想エリアが関連付けられる。ＤＲＭ機能は、１つか又は複数の仮想エリアか、或いは仮想エリア内における１つか又は複数のゾーンか、或いは仮想エリア内におけるオブジェクト、に対するアクセスを制御する。仮想エリア内におけるガバナンスメッシュ境界線を通信者が横断するたびごとにＤＲＭ機能がトリガされる。トリガするアクションが許可されるのかどうかと、もしも許可されるのであれば、許可されるアクションの範囲は何かと、支払いが必要とされるのかどうかと、監査記録が生成される必要性があるのかどうかと、をＤＲＭ機能が決定する。仮想エリアの例示的な一実現形態において、もしも通信者が仮想エリアに進入することが可能であるならば、該通信者が、該仮想エリアに関連付けられている全ての文書に関するアクション（該文書を操作すること、該文書を眺めること、該文書をダウンロードすること、該文書を削除すること、該文書を変更すること、及び、該文書を再アップロードすることを含む）を実施することができることとなるように、関連付けられたガバナンスメッシュが設定（又は構成）される。このようにして、仮想エリアは、仮想エリアによって画定されたコンテキスト内において共有された及び検討された情報のための保存場所となることができる。
【００６７】
仮想エリアの仕様に関する追加的な詳細事項は、米国特許出願番号（2008年4月4日にファイリングされた）第６１／０４２７１４号、（2007年10月24日にファイリングされた）第１１／９２３，６２９号、及び（2007年10月24日にファイリングされた）第１１／９２３、６３４号内に記載されている。
【００６８】
４．他のプラットフォーム構成要素
リアルタイムカーネル２０は、
ａ．ヘッドアップディスプレイ（ＨＵＤ）ソフトウェアアプリケーションと、
ｂ．ローカルヒューマンインターフェースデバイス（ＨＩＤ）及びオーディオ再生装置と、
ｃ．Ｓｏ３Ｄグラフィックディスプレイ、アバター、及び物理エンジンと、
ｄ．システムデータベース及び記憶設備
とを追加的に含む、クライアントソフトウェアパッケージの一部としての、ローカルネットワークノードの構成要素として、働くよう設計される。
【００６９】
ａ．ヘッドアップディスプレイ（ＨＵＤ）
ヘッドアップディスプレイ（ＨＵＤ）は、各クライアントネットワークノード上で動作するリアルタイムカーネル２０に対するアプリケーションインターフェースである。ＨＵＤは、ユーザが該ユーザのデスクトップ上において常に維持し及び実行したままにすることが可能な小型で軽量なインターフェースである。ヘッドアップディスプレイ（ＨＵＤ）は、仮想エリアアプリケーションを起動するためのユーザのインターフェースであり、該ユーザに、リアルタイムコンタクト及びリアルタイム共同場所（又はエリア）に対する即座のアクセスを提供する。仮想エリアは、ＨＵＤ及びリアルタイムカーネル２０を通じて、ユーザのデスクトップと統合され、これにより、ユーザは、仮想エリア通信環境内へとファイルをドラッグ＆ドロップすることが可能になることとなり、仮想エリア通信環境とは独立に、ネイティブなクライアントソフトウェアアプリケーションを用いて、仮想エリアに関連付けられた格納されたファイルを使用することが可能になることとなる一方で、仮想エリア内に依然として存在したままであることが可能になることとなり、及びより一般的には、幾つかのアプリケーションのうちの単なる１つというよりもむしろ、他のオペレーティングシステム機能に類似した該ユーザのオペレーティング環境の一態様として、仮想エリア内におけるプレゼンス及び位置を扱うことが可能になることとなる。
【００７０】
図５Ａ及び図５Ｂは、通信者のデスクトップの右下側の隅にドッキングされた半透明なユーザインターフェースによって実現されるＨＵＤの一実施形態８４を示す。ＨＵＤ８４は、プラットフォームに対するアプリケーションインターフェースである。ＨＵＤ８４の特徴は、
●ユーザのデスクトップ上において常時実行されていることが意図される小型で軽量なアプリケーションであることと、
●コンタクトを見るための及びコンタクトと相互作用するための簡易なインターフェースを、並びに、相互作用（交流）が生じる仮想エリアを、ユーザに提供すること
とを含む。
【００７１】
この実施形態において、ＨＵＤ８４は、持続性インターフェースとコントロールに対するアクセスとを提供するほぼ透明な（半透明の）ユーザインターフェースオーバーレイによって実現される。図５Ａ内に示された実施形態において、ＨＵＤ８４は、インターフェースの下記半透明要素のうちの、すなわち、
●プログレッシブ没入型コントロールの輪郭（アウトライン）と、
●ユーザの現在の位置の概要（アウトライン）と、
●仮想エリア８６内のリアルタイムコンタクトを表すスプライトと、
●ＨＵＤエリアの境界線を定めるライン
とのうちの１つか又は複数の限定セットを除いて透明である。
【００７２】
通信者は、通常のデスクトップコンピューティング環境内で仕事をすることが可能であると同時に、リアルタイムカーネル２６０及びＨＵＤ８４が実行されており及びリアルタイム通信セッションを開始する準備ができている。例えば、通信者は、Ｍｉｃｒｏｓｏｆｔ（登録商標）のＥｘｃｅｌ（登録商標）などの他のアプリケーションと共に仕事をすることができ、リアルタイム通信セッション内において後に共有化されることが可能な文書を作成することができる。仮想エリア８６は、通信者のデスクトップに統合化されて、これにより、通信者がファイルを仮想エリア内へとドラッグ＆ドロップすることが可能になることとなり、仮想エリア通信環境とは独立に、ネイティブなクライアントソフトウェアアプリケーションを用いて、仮想エリアに関連して格納されたファイルを使用することが可能になることとなる一方で、仮想エリア内に依然として存在したままであることが可能になり、及びより一般的には、幾つかのアプリケーションのうちの１つというよりもむしろ、他のオペレーティングシステム機能に類似したオペレーティング環境の一態様として、仮想エリア内におけるプレゼンス及び位置を取り扱うことが可能になることとなる。
【００７３】
仮想エリア８６内において通信者が相互作用する（交流し合う）一方で、ＨＵＤ８４は、該通信者に、該通信者の所望の視覚化にわたって独立コントロールを提供する。例えば、通信者は、仮想エリアの最小化された（デスクトップの右下側の隅に最小化された）ビュー（又は景色、又は眺め）を表示することができ、及び、仮想エリア内の別の通信者との音声会話に参加することができる一方で、Ｍｉｃｒｏｓｏｆｔ（登録商標）のＥｘｃｅｌ（登録商標）などの異なるアプリケーションにおいて仕事をすることができる。通信者は、従って、該通信者の視覚化スキーマを変更することができ、仮想エリア８６の、より没入型の（又は、該通信者があたかもその環境の中にいるようにより感じることができる）３次元レンダリング内へと進入することができる。このことは、ＨＵＤ８４内のプログレッシブ没入スライダー８８の設定を、「デスクトップ」から「３Ｄ」に変更することによって成し遂げられる。３Ｄ視覚化モードに入ると、通信者のデスクトップは、（図５Ａ内に示されているように）仮想エリア８６の３Ｄ演出を表示する。（デスクトップモードにおいてスプライト９０、９２、９４によって表されている）通信者は、図５Ａ内に示されているように、３次元アバター９６、９８、１００の形態となって現われる。
【００７４】
仮想エリア８６に関連付けられている任意のデータが、ビュースクリーン１０２、１０４、１０６上に表示され得る。ビュースクリーンは、任意の好みのデータをレンダリングするために使用され得る構成要素をレンダリングする包括的な（ジェネリック）データである。ビュースクリーン上にレンダリングされ得るデータのタイプの例は、
●マイクロソフトのパワーポイントのプレゼンテーションと、
●映像（ビデオ）と、
●ウェブカメラ（Webcam）の出力と、
●組織のＥＲＰシステムから直接到来するリアルタイムデータ
とを含む。
【００７５】
図５Ｃ内に示されているように、ＨＵＤ８４は、通信者のディスプレイモニタ上に提示されているグラフィカルユーザインターフェース６２の基本的なパーツにおける最小の曖昧さだけで、情報を表示し、且つ、コントロールに対するアクセスを提供する、真のインターフェースとして機能するよう設計される。ＨＵＤ８４は、
●通信者のリアルタイムコンタクトのうちの幾つかのリアルタイムコンタクトであって、現在オンラインであるリアルタイムコンタクトと、
●通信者と通信者のリアルタイムコンタクトの場所であって、仮想エリア８６内に現在「位置付けられている」場所と、
●仮想エリア８６の視覚化を制御するプログレッシブ没入型コントロールと、
●ユーザに、ある特定の場所に迅速に接続させることを可能にするナビゲーションコントロール
とを効果的に示す。
具体的には、ＨＵＤ８４は、通信者に、彼らのリアルタイムコンタクトに対する迅速なアクセスと、リアルタイムコラボレーションが生じる仮想エリアとを提供する。人々の位置と仮想エリア内への景色（ビュー）とに基づいて、ＨＵＤ８４は、エリアを通じたナビゲーションを可能にする。これらの仮想エリアは、幾つかの手法でアクセスされ得る。すなわち、もっとも頻繁に使用された手法でか、最も最近使用された手法でか、又はアプリケーション指定手法でアクセスされ得る。
【００７６】
ＨＵＤ８４は、場所タイル１０８、１１０、１１２における順番付けられたセットを示す。該場所タイルのうちの１つをクリックすると、ユーザを、その選択された場所タイルによって表された仮想エリアにもっていく。人々に関して、（通信者のエリアに）行って（Ｇｏ）及び取ってくる（Ｇｅｔ）（それらをユーザのエリアにもってくる）という基本的なメタファーを我々が有する。このことは、通信者が、行くか（ｇｏ）又は取ってくる（ｇｅｔ）ためにリクエストをキュー（待ち行列）に入れることを可能にさせることによって、並びに、通信者が、テキストか又は音声を介して「移動する」ことなく人々と通信を行うことを可能にさせることによって、ＨＵＤ８４内において洗練される。ＨＵＤ８４は、各通信リクエストが別の通信者から受け取られる時に、通信者に通知する。通信者は、そのリクエストを受け取ることができるか、それを無視することができるか、或いは、通信キューに対してそれを追加することができる。このようにして、通信者は、優先度が高くない通信に後になって応答することができる。例えば、通信者は、通信者が忙しい時（例えば、現在の通信セッション内に没頭している時）の時間中に受け取った通信をキューに入れることができ、そして、該通信者がフリーになった後に、該通信者は、その通信キュー内の通信リクエストに応答することができる。
【００７７】
上述のように、相互作用ネットワークインフラサービスは、通信者と会合する者と場所とを記録する相互作用データベースを保持する。該相互作用サービスは、場所に基づいて（例えば、最も頻度が高い順序か、又は最も最近の順序で）ソートされた順序において提示され得るクエリー結果によって、関連データベースに関するクエリーに応答する。エリア内で通信者が会合した者の頻度ソートと、並びに、エリアとは無関係に通信者が会合した者のソートと、通信者がほとんどの場合に頻繁に訪れるエリアのソートと、を駆動（ドライブ）するために、関連データベース情報が使用され得る。このデータは、ＨＵＤ８４内において使用される。このデータはまた、ヒューリスティック（発見的問題解決法）システムの一部として、仮想エリアアプリケーション開発者によって使用され得る（例えば、ある特定の仮想エリアを６回以上訪れた人々は、デフォルトで、ノックすること無く進入することが可能になるような規則であるか、或いは、ある特定の時間にある仮想エリア内に存在した人々が、その同じ時間にそこの別の通信者によって作成されたファイルを変更する及び削除することが可能になるような規則）。
【００７８】
図５Ｃ内において、ＨＵＤ８４は、それぞれの仮想エリアを表す一連の場所タイル１０８、１１０、１１２を提示している。該仮想エリアの各々は、関連データベースに関するクエリーに結びつけられる。各仮想エリアに関して、ランデブーサービスが、該仮想エリア内においてユーザが会合した全コンタクトについての関連データベースに関するクエリーを行う。ランデブーサービスは、典型的には、リスト内において識別したコンタクトを提示する。該リストは、相互作用の頻度によってか又は相互作用の最新さ（例えば、通信者が最後に相互作用（交流）したコンタクト（接触者））によってのいずれかでソートされる。他の実施形態において、コンタクトは、幾つかの他のアプリケーション依存方法においてソートされ得る。
【００７９】
関連データベースに関するクエリーは、他の検索と組み合わされ得る。例えば、関連データベースに関するクエリーは、別の通信システム（例えば、Skype、Facebook、及びFlickr）を用いて、コンタクトとの相互作用について生成されたコンタクト履歴データに関するクエリーと組み合わされ得る。一例において、Skype仮想エリア１１２は、該Skype仮想エリア１１２と通信者のSkype履歴データとに関連付けられた通信者の関連データに関するクエリーに関連付けられ得り、該Skype仮想エリア１１２に関連付けられている、ユーザのリアルタイムコンタクトの、ソートされたリストが生成される。
【００８０】
図５Ｃは、ＨＵＤ８４内のコンタクト及び仮想エリアの基本ナビゲーションを示す。仮想エリアタイル１０８〜１１２の各々に関連付けられた左向矢印をクリックすると、所与の場所における、相互作用の頻度によってソートされたリアルタイムコンタクトのリストを表示する。例えば、（「オフィス」というラベルが貼られた）メインＨＵＤタイル８４の左向矢印１１４をクリックすると、仮想エリア８６内において最も頻繁にユーザが通信するリアルタイムコンタクトを表示する。（それぞれのアイコンタイルによって表されている）コンタクトのリストは、頻度によってソートされる。リスト内の第１のコンタクト（この例では、ＤＶＷ）は、仮想エリア８６内においてユーザが最も頻繁にコラボレートするコンタクトを表し、ＰＪＢ、Ｔｉｍ、などと続く。上向矢印１１６をクリックすると、通信者が訪れた幾つかのか又は全ての仮想エリアを表す場所タイルのセットを表示する。場所タイルのセットは、典型的には、頻度によってか、最新さによってか、又は他の順序によってソートされる。仮想エリア場所タイルは、対応する仮想エリア内において現在生じているリアルタイム活動を示す。例えば、ＤＶＷ、Ｋｉｍ、及びＪｏｅ（メイン仮想エリアタイル１０８内にそれぞれのスピリットによって表されている）は、メイン仮想エリア内に全て提示されて、それらがリアルタイム会話を行う一方で、（仮想エリアタイル１１０内にそれぞれのスピリットによって表されている）Ｊｅｆｆ、Ａｎｎ、及びＪａｎｅは、全てFacebook仮想エリア内にある。
【００８１】
任意の通信者が仮想エリアを退出するか又は仮想エリアに進入する場合には、その仮想エリア内のプレゼンスインジケータ（すなわち、円によって示されたスピリットであり、それらは典型的には、名前か又は他の識別子に関連付けられている）が、リアルタイムに自動的に更新されることとなる。この特徴（機能）は、アプリケーション指定リアルタイムデータを場所タイル内に置く仮想エリア設計者の能力を明らかにする。該場所タイルは、通信者か又は通信者の場所のいずれかに関連付けられて表わすことができる。例えば、ゲーム開発者は、通信者が彼等のゲーム環境内にいる場所のマップをエクスポートすることができ、これにより、関連データベースを通じてその通信者に接続された他の人々は、その通信者の現在の活動のリアルタイムフィードを受け取ることとなる。これらの人々は、その通信者に対するナビゲートを行うためにか、彼又は彼女と通信するためにか、又は彼又は彼女とコンタクトするために（例えば、仮想エリアに入るための招待状を送るために）、この仮想エリアタイルを用いることができる。ＨＵＤ８４は、多くの異なる仮想エリアについて同時に、コンタクト及び仮想エリアに対するこのインターフェースを管理する。
【００８２】
ＨＵＤ仮想エリアタイル８４、１０８、１１０、１１２内において使用されるリアルタイムデータは、リアルタイムカーネル２０を介して関連エリアをホストするエリアサービスによって管理されるインターフェースによって提供される。ホストされた仮想エリアを見るための（ビューのための）通信者の許可に基づいて、各エリアサービスは、異なるそれぞれのＨＵＤ仮想エリアタイルデータフィードを、通信者に提供することができる。例えば、もしも通信者が、見る（ビュー）ための許可をその通信者が有していない仮想エリアに進入する場合には、ＨＵＤ仮想エリアタイルは、限定された情報か又は詳細でない情報を示すことができる。追加的には、ホストするエリアサービスによって提供されるＨＵＤ仮想エリアタイルデータフィードは、契約しているＨＵＤに対して仮想エリアのアプリケーション指定ビューを提示するためにそのエリアサービスを動作させている仮想エリアプロバイダによってカスタマイズされ得る。
【００８３】
ｂ．ローカルヒューマンインターフェースデバイス（ＨＩＤ）及びオーディオ再生装置
ローカルＨＩＤデバイスによって、通信者が、コマンド及び他の信号をクライアントネットワークノード内に入力することが可能になると同時に、仮想エリア通信セッションに参加することが可能になる。例示的なＨＩＤデバイスは、コンピュータキーボード、コンピュータマウス、タッチスクリーンディスプレイ、及びマイクロホンを含む。
【００８４】
オーディオ再生装置によって、仮想エリア通信セッション中に受け取ったオーディオ信号を、通信者が再生することが可能になる。例示的なオーディオ再生装置は、オーディオ信号を操作する（例えば、ミキシングする、及び特別なエフェクトをかける）ためのオーディオプロセッシングハードウェア（例えば、サウンドカード）と、音声を出力するためのスピーカとを含む。
【００８５】
ｃ．Ｓｏ３Ｄグラフィカルディスプレイ、アバター、及び物理エンジン
Ｓｏ３Ｄエンジンは、ディスプレイモニタ上の仮想エリア及び仮想エリア内のオブジェクトのそれぞれの景色（ビュー）の表示を制御する３次元視覚化エンジンである。Ｓｏ３Ｄエンジンは、仮想エリアの景色（ビュー）を提示するために、及び、通信者に、ＨＵＤアプリケーションの動作を制御させることを可能にするために、典型的には、グラフィカルユーザインターフェースドライバ及びＨＩＤデバイスとインターフェースする。
【００８６】
Ｓｏ３Ｄエンジンは、典型的には、グラフィックスレンダリング命令を、エリアサービス２６からリアルタイムカーネル２０を介して受け取る。幾つかの実施形態において、Ｓｏ３Ｄエンジンはまた、仮想エリア内において通信者のアバターをレンダリングするために必要な画像を含んだ通信者アバターデータベースを読み出す。この情報に基づいて、Ｓｏ３Ｄエンジンは、仮想エリア内の通信者のアバターの観点（位置及び配向）から、仮想エリアの及び仮想エリア内のオブジェクトのビジュアル表現（すなわち、画像）を生成する。仮想表現は、典型的には、オペレーティングシステムのグラフィックスレンダリング構成要素に送られて、クライアントネットワークノード上の仮想エリアのビジュアル表現をレンダリングするようにグラフィックスレンダリングハードウェアを駆動する。
【００８７】
通信者は、ＨＩＤデバイス（例えば、コンピュータマウス）からリアルタイムカーネル２０へとコマンドを伝達することによって、仮想エリアの提示されたビューを制御することができる。該リアルタイムカーネル２０は、ビュー制御コマンドをＳｏ３Ｄエンジンに伝達する。Ｓｏ３Ｄエンジンは、該ビュー制御コマンドに従って仮想エリアのビューを更新する。Ｓｏ３Ｄエンジンはまた、エリアサービス２６からリアルタイムカーネル２０を介して受け取られた更新されたオブジェクト位置情報に従って、ディスプレイモニタ上の仮想エリアのグラフィック表現を更新する。
【００８８】
ｄ．システムデータベース及び記憶設備
システムデータベース及び記憶設備は、プラットフォームによって使用される様々な種類の情報を格納する。記憶設備によって典型的には格納される例示的な情報は、プレゼンスデータベース、相互作用データベース、アバターデータベース、リアルユーザｉｄ（ＲＵＩＤ）データベース、アート（art）キャッシュデータベース、及び仮想エリア指定データベースを含む。この情報は、単一ネットワークノード上に格納され得るか、或いは、複数ネットワークノードにわたって分配（又は分散、又は分割）され得る。
【００８９】
Ｃ．例示的な通信セッション
再び図４を参照すると、通信セッション中に、各々のクライアントネットワークノードは、リアルタイムデータストリーム（例えば、モーションデータストリーム、オーディオデータストリーム、チャットデータストリーム、ファイル転送データストリーム、及びビデオデータストリーム）のそれぞれのセットを生成する。例えば、各通信者は、仮想エリア６６内の該通信者のアバターの動きを制御するモーションデータストリームを生成する１つか又は複数の入力デバイス（例えば、コンピュータマウス５２及びキーボード５４）を操作する。追加的には、通信者の声と、コンピュータシステム４８の付近において局所的に生成される他の音声とが、マイクロホン６０によって取り込まれる。マイクロホン６０は、リアルタイムオーディオストリームへと変換されるオーディオ信号を生成する。オーディオストリームのそれぞれのコピーが、仮想エリア６６内のアバターによって表される他のネットワークノードに伝達される。これらの他のネットワークノードにおいて局所的に生成される音声は、リアルタイムオーディオ信号へと変換されて、コンピュータシステム４８に伝達される。リアルタイムカーネル２０は、他のネットワークノードによって生成されるオーディオストリームを、スピーカ５６、５８によって再生（レンダリング）されるオーディオ信号へと変換する。モーションデータストリーム及びオーディオストリームは、通信者ノードの各々から、他のクライアントネットワークノードへと、直接的にか又は間接的にのいずれかで伝達され得る。幾つかのストリームハンドリングトポロジにおいて、クライアントネットワークノードの各々は、他のクライアントネットワークノードによって伝達されるリアルタイムデータストリームのコピーを受け取る。他のストリームハンドリングトポロジにおいて、１つか又は複数のクライアントネットワークノードは、ネットワークノードのうちの他の幾つかのネットワークノードからもたらされる（又は発生される）リアルタイムデータストリームから導出される１つか又は複数のストリームミックスを受け取る。
【００９０】
幾つかの実施形態において、エリアサービス２６は、仮想エリアの現在の仕様と、仮想エリア内にあるオブジェクトの現在のレジスタと、エリアサービス２６をホストしているネットワークノードによって現在生成されている任意のストリームミックスのリストと、を含むグローバル状態情報を保持する。オブジェクトレジスタは、典型的には、仮想エリア内の各オブジェクトについて、それぞれのオブジェクト識別子（例えば、オブジェクトを一意的に識別するラベル）と、オブジェクトに関連付けられているネットワークノードとの確立されることとなるネットワーク接続を可能にする接続ハンドル（例えば、ＩＰアドレスなどのＵＲＩ）と、オブジェクトに関連付けられているリアルタイムデータソース及びシンク（例えば、オブジェクトに関連付けられているネットワークノードのソース及びシンク）を識別するインターフェースデータと、を含む。オブジェクトレジスタはまた、典型的には、通信者か又はエリアサービス２６のいずれかによってオブジェクトに対して明確に割り当てられ得るか、或いは、オブジェクトの他の属性から推測され得る、１つか又は複数のオプションの役割（ロール）識別子を、各オブジェクトごとに含む。幾つかの実施形態において、オブジェクトレジスタはまた、仮想エリア内のオブジェクトに関連付けられたネットワークノードから受け取ったリアルタイムモーションデータストリームの分析からエリアサービス２６によって決定されたものとして、仮想エリア内のオブジェクトの各々の現在の位置を含む。これに関して、エリアサービス２６は、仮想エリア内のオブジェクトに関連付けられたネットワークノードからリアルタイムモーションデータストリームを受け取って、仮想エリア内に進入する、仮想エリア内を去る、及び仮想エリア内を動き回る通信者のアバターと他のオブジェクトとを、モーションデータに基づいて追跡する。エリアサービス２６は、追跡されるオブジェクトの現在の位置に従って、オブジェクトレジスタを更新する。
【００９１】
他のネットワークノードとのリアルタイムデータストリーム接続を管理（運用）するプロセス内において、エリアサービス２６は、インターフェースデータと、ゾーンリストと、現在仮想エリア内に存在するオブジェクトの位置とを含むコンフィギュレーションデータのセットを、各クライアントネットワークノードごとに保持する。インターフェースデータは、オブジェクトに関連付けられているリアルタイムデータストリームタイプにおける全てのソース及びシンクのそれぞれのリストを、クライアントネットワークノードの各々に関連付けられた各オブジェクトごとに含む。該ゾーンリストは、対応するクライアントネットワークノードに関連付けられたアバターによって現在占有されている仮想エリア内における全てのゾーンのレジスタ（又は記録）である。通信者が最初に仮想エリアに進入する時には、エリアサービス２６は、典型的には、現在のオブジェクト位置データベースを、位置初期化情報によって初期化する。その後、エリアサービス２６は、現在のオブジェクト位置データベースを、仮想エリア内のオブジェクトの現在の位置で（仮想エリアを共有する他のクライアントネットワークノードから受け取ったリアルタイムモーションデータストリームの分析から決定されたものとして）更新する。
【００９２】
図６は、エリアサービス２６の一実施形態が、ユーザが仮想エリアに進入した時か又は仮想エリアのゾーン間の境界線を横切った時に接続がなされる、要求されるリアルタイムデータストリーム接続のセットを、決定するということに従った一方法の一実施形態を示す。エリアサービス２６は、各通信者ごとの占有されたゾーンのリストを、仮想エリア仕様と、仮想エリアインスタンス内の通信者のアバターの位置とから構築する（図６のブロック１８０）。このプロセス内において、エリアサービス２６は、仮想エリアインスタンス内のユーザのアバターの現在の位置を、仮想エリアインスタンス内のアバターの現在の位置の座標を含んだ現在のオブジェクト位置データベースから読み出す。エリアサービス２６は、次いで、通信者のアバターの現在の位置を、仮想エリア仕様内のゾーン定義と比較する。エリアサービス２６は、通信者のアバターの現在の位置に一致する、仮想エリア仕様内の全ゾーンから、占有ゾーンリストを編集（コンパイル）する。例えば、幾つかの実施形態において、占有ゾーンリストは、通信者のアバターの現在の位置を、ゾーンのメッシュが含んだ全ゾーンからなる。
【００９３】
エリアサービス２６は、占有ゾーンリスト内のゾーンごとに画定される目標リアルタイムデータストリームタイプのセットを決定する（図６のブロック１８２）。エリアサービス２６は、次いで、要求されるリアルタイムデータストリームデータのセットを、目標リアルタイムデータストリームタイプのセットと、仮想エリアインスタンス内のオブジェクトの位置と、仮想エリア仕様内において定義されたスイッチング規則とから決定する（図６のブロック１８４）。
【００９４】
幾つかの例示的な実施形態において、エリアサービス２６が、リアルタイムデータストリームデータのセット（これにより、ユーザが、共有仮想エリアインスタンス内において他のネットワークノードとの合同通信セッション内に参加することが可能になる）を決定した後に（図６のブロック１８４）、エリアサービス２６は、リアルタイムデータストリーム接続を決定し、それによって、要求されるデータストリームデータの、コンピュータシステム１２０への配信が生じる結果となることとなる。
【００９５】
これらの実施形態のうちの幾つかでは、コンピュータシステム１２０の帯域幅性能に少なくとも部分的に基づいて、コンピュータシステム１２０にリアルタイムデータストリームのセットを配信するリアルタイムデータストリームハンドリングトポロジを、エリアサービス２６が決定する。このプロセス内において、エリアサービス２６は、非ミックスのリアルタイムデータストリームと、リアルタイムデータストリームの組み合わせから導出されたストリームミックスとから、リアルタイムデータストリームの各々を受け取るためのそれぞれの形式（フォーム）を決定する。エリアサービス２６はまた、直接的なピア・ツー・ピア・ネットワークルートからリアルタイムストリームの各々が受け取られるネットワークルートと、他のネットワークノードのうちの１つか又は複数によって仲介されるネットワークルートとを決定する。ストリームハンドリングトポロジが決定された後に、エリアサービス２６は、コンピュータシステム１２０上において動作するリアルタイムカーネルに対して命令を送る。該命令は、決定されたストリームハンドリングトポロジに従って、コンピュータシステム１２０と、ネットワークノードのうちの他の幾つかのネットワークノードとの間における要求されるリアルタイムデータストリーム接続を指定する。
【００９６】
図７は、要求されるデータストリームデータをコンピュータシステム１２０に配信するリアルタイムデータストリーム接続のトポロジを決定するプロセス内においてリアルタイムカーネル２０によって実現される一方法の一実施形態を示す。
【００９７】
この方法に従って、リアルタイムカーネル２０は、要求されるリアルタイムデータストリームデータ１８６のセットを、他のネットワークノードから直接的に受け取るのに、コンピュータシステム１２０が十分な帯域幅を有しているかどうかを決定する（図７のブロック１８８）。このプロセス内において、他のネットワークノードは、リンクリクエストをコンピュータシステム１２０に伝達する。該リンクリクエストは、コンピュータシステム１２０によって必要とされるリアルタイムデータストリームの各セットの伝達を行うためのそれぞれの帯域幅要件を示す。リアルタイムカーネル２０は、要求される直接的な接続を確立するために必要とされる全帯域幅と、コンピュータシステム１２０にとって現在利用可能なダウンロード帯域幅とを比較する。
【００９８】
もしも利用可能な帯域幅が、要求される全帯域幅に少なくとも等しければ、リアルタイムカーネル２０は、要求されるリアルタイムデータストリームデータを提供する他のネットワークノードとの直接的な接続を確立する（図７のブロック１９０）。このプロセス内において、リアルタイムカーネル２０は、コンピュータシステム１２０と、他のネットワークノードのうちの１つか又は複数のネットワークノードとの間においてソケット（例えば、ＴＣＰソケットか、又は性能のために最適化された特殊化されたリアルタイムソケット）を生成する。リアルタイムカーネル２０は、リアルタイムデータストリームを、（それらを暗号化することと、それらを記録することと、及び、処理されたデータストリームを下流のソフトウェア構成要素に、（ユーザインターフェース内へとレンダリングすることのために及びネットワーク１８上の伝送のために必要とされるものとして）配信することとを含めて）処理する。
【００９９】
もしも利用可能な帯域幅が、要求される帯域幅よりも狭い場合には（図７のブロック１８８）、リアルタイムカーネル２０は、ストリームミックスリストをチェックして、要求されるリアルタイムデータストリームデータを提供するストリームミックスが、エリアサービス２６によって現在生成されているかどうかを決定する（図７のブロック１９２）。必要なストリームミックスが利用可能であるならば、リアルタイムカーネル２０は、エリアサービス２６との接続を確立し、該接続上において、必要なリアルタイムデータストリームミックスのコピーが、エリアサーバ２８からコンピュータシステム１２０へと伝達される（図７のブロック１９４）。もしも必要なストリームミックスが利用可能でない場合には、リアルタイムカーネル２０は、ストリームミックスリクエストを、エリアサービス２６に送る（図７のブロック１９６）。もしも可能であるあれば、エリアサービス２６は、該ストリームミックスリクエストに応答して、必要なストリームミックスを生成する。
【０１００】
ＩＶ．システムアーキテクチャ
Ａ．イントロダクション
通信者は、典型的には、クライアントネットワークノードからネットワーク１８に接続し、このことは、典型的には、汎用コンピュータシステムか又は専用通信コンピュータシステム（又は、ネットワーク可能なビデオゲームコンソールのような「コンソール」）によって実現される。ネットワークノードは、他のネットワークノードとのリアルタイムデータストリーム接続を確立する通信プロセスを実行し、典型的には、通信者によって進入された各仮想エリアの景色（ビュー）を提示する視覚化レンダリングプロセスを実行する。
【０１０１】
図８は、コンピュータシステム１２０によって実現されるクライアントネットワークノードの一実施形態を示す。コンピュータシステム１２０は、プロセッシングユニット１２２と、システムメモリ１２４と、該プロセッシングユニット１２２をコンピュータシステム１２０の様々な構成要素に結合するシステムバス１２６とを備える。プロセッシングユニット１２２には、様々な商業的に利用可能なコンピュータプロセッサのうちの任意の１つの形態とすることが各々可能な１つか又は複数のデータプロセッサを含めることができる。システムメモリ１２４には、コンピュータシステム１２０のための起動ルーチンを含む基本入力／出力システム（ＢＩＯＳ）を格納する読み出し専用メモリ（ＲＯＭ）と、ランダムアクセスメモリ（ＲＡＭ）とを含めることができる。システムバス１２６は、メモリバスか、ペリフェラルバスか、又はローカルバスとすることができ、及び、（ＰＣＩ、ＶＥＳＡ、マイクロチャンネル、ＩＳＡ、及びＥＩＳＡを含む）任意の様々なバスプロトコルと互換性があるものとすることができる。コンピュータシステム１２０はまた、システムバス１２６に接続されている永続記憶メモリ１２８（例えば、ハードドライブ、フレキシブルディスクドライブ、ＣＤ ＲＯＭドライブ、磁気テープドライブ、フラッシュメモリデバイス、及びディジタルビデオディスク）を備えており、不揮発性か又は永続記憶装置をデータ、データ構造、及びコンピュータ実行可能命令に提供する１つか又は複数のコンピュータ可読媒体ディスクを含む。
【０１０２】
通信者は、１つか又は複数の入力デバイス１３０（例えば、１つか又は複数のキーボード、コンピュータマウス、マイクロホン、カメラ、ジョイスティック、Ｗｉｉ入力デバイスのような物理モーションセンサ、及びタッチパッド）を用いて、コンピュータシステム１２０と相互作用する（例えば、コマンド又はデータを入力する）ことができる。情報は、グラフィカルユーザインターフェース（ＧＵＩ）を通じて提示され得り、ディスプレイモニタ１３２上において通信者に対して提示される。該ディスプレイモニタ１３２は、ディスプレイコントローラ１３４によって制御される。コンピュータシステム１２０にはまた、他の入力／出力ハードウェア１３６（例えば、スピーカ及びプリンタのような周辺出力デバイス）を含めることができる。コンピュータシステム１２０は、（「ネットワークインターフェースカード」すなわちＮＩＣとしても呼ばれる）ネットワークアダプタ１３８を通じて他のネットワークノード１３８、１４０、及び１４２に接続する。
【０１０３】
オペレーティングシステム（ＯＳ）１４４（例えば、アメリカ合衆国ワシントン、レッドモンドのマイクロソフトコーポレイションから利用可能なＷｉｎｄｏｗｓＸＰ（登録商標）オペレーティングシステム）と、リアルタイムカーネル２０と、ドライバ１４６（例えば、ＧＵＩドライバ）と、ネットワークプロトコル１４８と、ローカルソフトウェアアプリケーション１５０（例えば、ＨＵＤ８４）と、データ（例えば、入力データ、出力データ、プログラムデータ、レジストリ１５６、及びコンフィギュレーション設定１５２）とを含む、多くのプログラムモジュールが、システムメモリ１２４内に格納され得る。
【０１０４】
Ｂ．オペレーティングシステム
オペレーティングシステム１４４は、基本オペレーティングシステムサービスを、コンピュータシステム１２０上の生成ランタイム実行環境に提供することによって、ソフトウェアアプリケーションをホストする。サービスの例示的なタイプの中で、典型的には、オペレーティングシステムによって提供されるものは、リソース管理、ファイル管理、セキュリティ、認証、検証（又は照合；ベリフィケーション）、通知、及びユーザインターフェース（例えば、ウィンドウイング、メニュー、ダイアログ、など）である。
【０１０５】
コンピュータシステム１２０のリソース（例えば、メモリ、プロセッサ、及びＩ／Ｏデバイス）の管理に関連するサービスは、典型的には、オペレーティングシステムカーネルによって実現される。ファイル管理は、オペレーティングシステムカーネルによって実現され得るか、或いは、別個のファイルシステムマネージャ（例えば、幾つかのＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムにおいて提供されるインストール可能なファイルシステム）によって実現され得る。ファイル（例えば、コンピュータデータファイルか又はソフトウェアアプリケーションファイル）をオープンさせるプロセス内において、ファイルシステムマネージャは、典型的には、データベース内のファイルのディスク記憶位置（例えば、ＦＡＴ、ＦＡＴ９８、ＶＦＡＴ、ＭＦＴ、及びＣＤＦＳなどのファイルアロケーションテーブル）を調べる適切なファイルシステムドライバをコールして、ディスク上のファイルの記憶位置を策定する。セキュリティ、認証、検証（又は照合）、通知、及びユーザインターフェースなどの、他のオペレーティングシステム機能は、オペレーティンシステムにおける１つか又は複数の他の構成要素（例えば、幾つかのＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム内の実行サービスレイヤ）によって提供され得る。
【０１０６】
サービスにおける例示的なタイプの中で、典型的には、オペレーティングシステムカーネルによって提供されるものは、プロセス管理、メモリ管理、デバイス管理、及びシステムコールハンドリングである。プロセス管理は、実行しているアプリケーションを含み、アプリケーションプログラミングインターフェース（ＡＰＩ）をコンピュータシステムのハードウェア構成要素に提供することを含む。ソフトウェアアプリケーションが実行中のプロセス内において、オペレーティングシステムカーネルは、典型的には、ソフトウェアアプリケーションのためにメモリ内のアドレス空間をセットアップし、ソフトウェアアプリケーションコードを含むファイルを該アドレス空間内へとロードし、及びそのロードしたソフトウェアアプリケーションコードを実行する。メモリ管理は、システムメモリ１２４に対するソフトウェアアプリケーションアクセスを管理することを含む。デバイス管理は、デバイスドライバを通じてハードウェアデバイスにアクセスを提供することを含む。システムコールハンドリングは、オペレーティングシステムカーネルサービスを、ユーザモードソフトウェアアプリケーションにさらすＡＰＩを提供すること含む。（例えば、プロセス間通信機構及びシステムコールを通じて）ＡＰＩを呼び出すことにより、ソフトウェアアプリケーションは、オペレーティングシステムカーネルからのサービスをリクエストすることができ、パラメータを渡すことができ、及び、該リクエストに応答して該サービスによって生成される結果を受け取ることができる。
【０１０７】
オペレーティングシステム１４４は、典型的には、ハードウェア及びソフトウェアコンフィギュレーション情報、ユーザ選択（又はユーザの好み）、及びセットアップ情報を、レジストリ１５６内に格納する。例えば、レジストリ１５６は、典型的には、以下の情報を含む。すなわち、システムを起動（ブート）して設定するために必要とされるパラメータ値と、オペレーティングシステム１４４の動作を制御するシステムワイドソフトウェア設定と、セキュリティデータベースと、ユーザごとのプロファイル設定と、を含む。幾つかの実施形態では、別個のデータベースの代りに、接続規則３２がレジストリ１５６内に格納される。
【０１０８】
Ｃ．ネットワークプロトコル
ネットワークプロトコル１４８は、コンピュータシステム１２０と、他のネットワークノードとの間のデータの接続、伝達、及び転送を制御するか又は可能にする。ネットワークプロトコルの例示的なタイプは、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）、ユーザデータグラムプロトコル／インターネットプロトコル（ＵＤＰ／ＩＰ）、リアルタイム転送プロトコル（ＲＴＰ）、及びセッションイニシエーションプロトコル（ＳＩＰ）を含む。
【０１０９】
ＴＣＰ／ＩＰは、ＴＣＰ部とＩＰ部とを含む。より小さなパケット内へとメッセージを挿入し、その通信ネットワークの他方端において該パケットを再構築し、及び、その途中で消失した任意のパケットを再送信する、ことによる伝送機能を、このプロトコルのＴＣＰ部が提供する。宛先ネットワークと該宛先ネットワークにおける目標ノードとに対するアドレスをデータパケットに割り当てることによるルーティング機能を、このプロトコルのＩＰ部が提供する。ＴＣＰ／ＩＰを用いて伝達される各データパケットは、ＴＣＰ及びＩＰ情報を含むヘッダ部を含む。ＩＰは、通信スタックにおけるより上層（レイヤ）へのパケット配信の保証を行わない。一方、ＴＣＰは、接続配向されたエンド・ツー・エンドトランスポートサービスに、保証された連続的なパケット配信を提供する。このようにして、ＴＣＰプロトコルは、信頼可能なトランスポート層接続を提供する。
【０１１０】
ＵＤＰは、メッセージ配向されたトランスポート層プロトコルであり、アプリケーション層とインターネット層との間のインターフェースを提供する。ＵＤＰは、アプリケーション層へのメッセージ配信の保証を行わない。ＵＤＰは、専用のエンド・ツー・エンド接続を設定するための努力がなされないという点においてコネクションレスプロトコルである。ＵＤＰの送り手は、ＵＤＰメッセージについての状態情報を、それらメッセージが送られた後には保持しない。受け手の状態をチェックすることなく行われる、ソースから宛先への一方向のメッセージの送信に、通信（伝達）が基づく。
【０１１１】
ＲＴＰは、ネットワーク接続上においてオーディオ及びビデオを配信するための標準化パケットフォーマットを画定する。ネットワークノード間でＲＴＰデータを送信すること及び受信することにおいて、（ピア・ツー・ピア・ネットワーキングフレームワークと、ＴＣＰソケットを単独でか又はＵＤＰと組み合わせて用いる中央集権化されたサーバと、マルチキャストプロトコルとを含む）様々なネットワークプロトコルが使用され得る。
【０１１２】
ＳＩＰは、互いを特定する（又は位置付ける）ための、通信セッションを確立するための、及び、アクティブセッションを終結させるための手段を、ユーザに提供する。ＳＩＰトランザクションによって、セッションネゴシエーションプロセスが、セッションディスクリプションプロトコル（ＳＤＰ）に従って処理される。
【０１１３】
Ｄ．デバイスドライバ
デバイスドライバ１４６は、典型的には、ソフトウェアアプリケーションによって実現され、該ソフトウェアアプリケーションによって、他のソフトウェアアプリケーション（例えば、ユーザモードソフトウェアアプリケーション及びオペレーティングシステム）が、コンピュータシステム１２０に接続されているハードウェアデバイスと相互作用することが可能になる。デバイスドライバは、典型的には、ソフトウェア処理とハードウェアデバイスとの間において伝送されるコマンド及びデータを変換するために、ソフトウェア処理によってなされるコールによって呼び出され得る機能にＡＰＩを提供する。
【０１１４】
Ｅ．リアルタイムカーネル
１．イントロダクション
仮想エリア通信環境を共有する他のネットワークノードとコンピュータシステム１２０との間においてリアルタイムデータストリームを処理すること及びスイッチングすることと、並びに、ディスプレイモニタ１３２上に仮想エリア及び該仮想エリア内のオブジェクトのそれぞれの景色（ビュー）を提示することと、を制御するサービスをリアルタイムカーネル２０が含む。これらの処理において、リアルタイムカーネルは、オペレーティングシステム機能とインターフェースし、該オペレーティングシステム機能は、リアルタイムデータストリームを、他のネットワークノードと交換するために、及び、没入型仮想エリア通信経験を通信者に提示するために、コンピュータシステム１２０のハードウェア構成要素へと及び該ハードウェア構成要素からコマンド及びデータを変換するドライバ１４８と伝達し合う。
【０１１５】
リアルタイムカーネル２０の実現形態は、１つか又は複数のディスクリートなモジュールか又はライブラリ（例えば、ダイナミックリンクライブラリ）を含み、それらは、いかなる特定のハードウェアか、ファームウェアか、又ソフトウェアコンフィギュレーションにも限定されない。一般に、（ディジタル電子回路構成（例えば、ディジタル信号プロセッサ（ＤＳＰ）のような特定用途向け集積回路）内においてか、或いは、コンピュータハードウェア内か、ファームウェア内か、デバイスドライバ内か、又はソフトウェア内においてを含む）任意のコンピューティングか又はデータ処理環境内において、これらのモジュールが実現され得る。幾つかの実施形態において、モジュールの機能性は、単一データ処理構成要素内へと組み合わされる。幾つかの実施形態において、１つか又は複数の各モジュールのそれぞれの機能（又は機能性）は、複数データ処理構成要素の、それぞれのセットによって実施される。幾つかの実現形態において、リアルタイムカーネル２０の実施形態によって実行される方法を実現するための処理命令（例えば、コンピュータソフトウェアのようなコンピュータ可読コード）と、並びに、それらが生成するデータとが、１つか又は複数のコンピュータ可読媒体内に格納される。これらの命令と、データとを明白に具現化するための適合可能な記憶装置は、（例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、及びフラッシュメモリデバイスのような半導体メモリデバイスを含む）不揮発性コンピュータ可読メモリの全形態と、（内蔵ハードディスク及びリムーバブルハードディスクなどの）磁気ディスクと、光磁気ディスクと、ＤＶＤ−ＲＯＭ／ＲＡＭと、ＣＤ−ＲＯＭ／ＲＡＭとを含む。
【０１１６】
２．例示的なリアルタイムカーネル機能（機能性）
リアルタイムカーネル２０は、コンピュータシステム１２０と、仮想エリア通信環境を共有する他のネットワークノードとの間でネットワーク接続を確立すること及び管理（運用）することにおいて、１つか又は複数のネットワークインフラサービスと協働する。例示的な機能（機能性）の中で、ネットワーク接続を確立すること及び管理（運用）することのプロセス内に含まれるものは、セッション管理（運用）、リモート制御ストリームハンドリング、及びリアルタイムタスクスケジューリングである。
【０１１７】
ｅ．セッション管理（運用）
図９は、仮想エリアに対する接続をリクエストするリアルタイムカーネルＡＰＩコールに応答して、リアルタイムカーネル２０によって実現される一方法の一実施形態を示す。
【０１１８】
図９の方法に従って、リアルタイムカーネル２０は、仮想エリアの指定を決定する（図９のブロック１６０）。幾つかの実施形態において、リアルタイムカーネル２０のこの機能（機能性）は、リアルタイムカーネルサービスに対する仮想エリア指定を含むリアルタイムカーネルＡＰＩコールを発行することによって呼び出される。リアルタイムカーネルＡＰＩコールは、任意のソフトウェアアプリケーション、オペレーティングシステムサービスによってなされ得る。
【０１１９】
リアルタイムカーネル２０は、指定された仮想エリアをホストするネットワークインフラサービスとのセッションを確立する（図９のブロック１６２）。このプロセス内において、リアルタイムカーネル２０は、エリアサービス２６とのセッションを確立する。リアルタイムカーネル２０は、次いで、指定された仮想エリアに接続するためのリクエストを、エリアサービス２６に伝達する。エリアサービス２６は、リアルタイムカーネル２０から受け取った該リクエスト内において指定される仮想エリアのインスタンスを決定する。仮想エリアインスタンスのインスタンスを決定した後に、エリアサービス４６は、ユーザの能力（又は機能）が、仮想エリアインスタンスに関連付けられた能力（又は機能）要件を満たしているかどうかを決定する。もしもユーザの能力（又は機能）が、該能力（又は機能）要件を満たしていれば、エリアサービス４６は、仮想エリアインスタンスの現在の状態を記述する状態データ（例えば、仮想エリアインスタンス内に現在存在するオブジェクトのリストに加えて、これらのオブジェクトに関連付けられた通信者の名前）の利用可能性を指示するメッセージを伝達する。
【０１２０】
リアルタイムカーネル２０は、仮想エリアインスタンスの現在の状態を記述した状態データを認可（又は承認）する（図９のブロック１６４）。この認可（又は承認）リクエストに応答して、エリアサービス２６は、リアルタイムカーネル２０とエリアサービス２６との間のリンク上のあるチャンネルに対して状態データを公開（又は発行）する。
【０１２１】
幾つかの実施形態において、リアルタイムカーネル２０のＳｏ３Ｄエンジンが、人間にとって知覚可能な、状態データのビューを、レンダリングするために、オペレーティングシステム１４４のユーザインターフェースサービスを呼び出す。例えば、Ｓｏ３Ｄエンジンは、ディスプレイ１３２上のエリア内に現在あるオブジェクトに関連付けられた各通信者の表現をレンダリングするために、インターフェースサービスを呼び出すことができる。幾つかの実施形態において、通信者は、アイコンによってか、サムネイル画像によってか、或いは、通信者の名前でオプションでラベル付けられた他のグラフィックによって、表現され得る。幾つかの実施形態において、リアルタイムカーネル２０の呼び出しにトリガされたソフトウェアアプリケーションのグラフィカルインターフェース内において状態データが提示される。幾つかの実施形態において、状態データは、ヘッドアップディスプレイ（ＨＵＤ）インターフェース８４の一実施形態において提示される（図５Ａ〜図５Ｃを参照）。
【０１２２】
仮想エリアインスタンスとの接続が確立された後に、リアルタイムカーネル２０の呼び出しにトリガされたソフトウェアアプリケーションは、仮想エリアインスタンス内へのエントリをリクエストするオプションをユーザに提供することができるか、或いは、仮想エリアインスタンス内へのエントリを、ユーザの代りに自動的にリクエストすることができる。
【０１２３】
図１０は、仮想エリア内へのエントリをリクエストするリアルタイムカーネルＡＰＩコールに応答して、リアルタイムカーネル２０によって実現される一方法の一実施形態を示す。
【０１２４】
図１０の方法に従って、リアルタイムカーネル２０は、仮想エリアに進入する意志を、仮想エリアをホストするネットワークインフラサービスに宣言する（図１０のブロック１６８）。このプロセス内において、リアルタイムカーネル２０は、該宣言を含んだメッセージを、エリアサービス２６に送る。該メッセージは、エリアサービス２６との既存リンクか、或いは、リアルタイムカーネル２０によってエリアサービス２６との確立された新規のリンク上、におけるチャンネル上において送られ得る。これに応答して、エリアサービス２６は、ユーザの能力が、仮想エリアインスタンスに関連付けられている能力要件を満たしているかどうかを決定する。もしもユーザの能力が、該能力要件を満たしていれば、エリアサービス２６は、リアルタイムカーネル２０にコンフィギュレーションデータを戻す。該コンフィギュレーションデータは、典型的には、仮想エリアインスタンスの定義と、仮想エリアインスタンス内に現在存在するオブジェクトのレジスタと、仮想エリアインスタンスの仕様に従って仮想エリア内のオブジェクトに関連付けられているリアルタイムデータストリームソース及びシンクのセットとを含む。
【０１２５】
リアルタイムカーネル２０は、仮想エリア内の少なくとも１つのオブジェクトにそれぞれ関連付けられた少なくとも１つのリアルタイムデータストリームソースとの少なくとも１つのネットワーク接続上における少なくとも１つのリアルタイムデータストリームの転送を開始する（図１０のブロック１７０）。このプロセス内において、リアルタイムカーネル２０は、エリアサービス２６から受け取ったコンフィギュレーションデータに基づいて、仮想エリアのインスタンスに関連付けられている１つか又は複数のネットワークノードを確認する。リアルタイムカーネル２０は、次いで、少なくとも１つの確認した（突き止めた）ネットワークノードとの少なくとも１つのネットワーク接続上における少なくとも１つのリアルタイムデータストリームの転送を開始する。リアルタイムカーネル２０と、他のネットワークノードとの間の接続は、ピア・ツー・ピア接続とすることができるか、又は、サーバが仲介した接続とすることができる。ピア・ツー・ピア接続に関連して、接続目標ネットワークノード及びリアルタイムカーネル２０は、典型的には、互いに認証を行って、次いで、少なくとも１つのリアルタイムデータストリームを、接続目標に対して送るか又は受け取るかのいずれかを行うためのリンクを確立する。リンクは、典型的には、一方向であり、送り手（トランスミッタ）によってリクエストされ、及び、受け手（レシーバ）によって受け取られるか又は拒否される。
【０１２６】
この例示された実施形態において、リアルタイムカーネル２０は、開始されたリアルタイムデータストリームを、仮想エリアインスタンスの仕様内の少なくとも１つのストリームハンドリング定義に従って処理する（図１０のブロック１７２）。このプロセス内において、リアルタイムカーネル２０は、ストリーム処理オブジェクトのセットを、有向グラフ内へと、仮想エリア仕様内において定義されるストリーム処理コンフィギュレーションに従って組み立てる。
【０１２７】
ｆ．リモート制御ストリームハンドリング
図１１は、エリアサービス２６から受け取られるストリームハンドリング命令に応答して、リアルタイムカーネル２０によって実現される一方法の一実施形態を示す。
【０１２８】
図１１の方法に従って、リアルタイムカーネル２０は、リモートネットワークノード上において動作するエリアサービス２６から１つか又は複数のストリームハンドリング命令を受け取る。ここで、該ストリームハンドリング命令は、少なくとも１つのリアルタイムデータストリームを処理するためのストリームハンドラの仕様を含む（図１１のブロック２００）。リアルタイムカーネル２０は、ストリームハンドラ仕様に従ってストリームハンドラを作成する（図１１のブロック２０２）。該ストリームハンドラは、典型的には、１つか又は複数のストリームハンドリング命令内において指定されるミキシング機能を含む。該ミキシング機能は、リアルタイムデータストリームを、少なくとも１つの他のリアルタイムデータストリームとミックスして、ミックスされたリアルタイムデータストリームを生成するために用いられる。リアルタイムカーネル２０は、生成したストリームハンドラを通じてリアルタイムデータストリームを処理することを含むプロセス内において、結果データストリームを生成する（図１１のブロック２０４）。幾つかの実施形態において、このプロセスは、１つか又は複数のストリームハンドリング命令内において指定されるリアルタイム状態情報からコンフィギュレーションパラメータ値を決定することと、該コンフィギュレーションパラメータ値によって、ストリームハンドラを動的に構成（又は設定）すること、とを含む。
【０１２９】
図１２は、エリアサービス２６から受け取られるストリームハンドリング命令２１０に従って、（リアルタイムカーネル２０の構成要素である）ストリームハンドラコンフィギュレーションマネージャ２０８によって作成されるストリームハンドラ２０６の一実施形態を示す。ストリームハンドラコンフィギュレーションマネージャ２０８は、典型的には、１つか又は複数の構成要素であるサービスと、リアルタイムカーネル２０の他の構成要素とから構成される。ストリームハンドラコンフィギュレーションマネージャ２０８は、（処理グラフ要素（プロセッシンググラフエレメント）すなわちＰＧＥｓとしても呼ばれる）処理オブジェクトのセットから、ストリームハンドラ２０６を構築する。処理オブジェクトの各々は、データストリームに関するある特定機能（例えば、変換機能、分割機能、及びミキシング機能）を実施することが可能なソフトウェアオブジェクトである。ストリームハンドラコンフィギュレーションマネージャ２０８は、１つか又は複数のストリームハンドリング命令内において指定される処理オブジェクトをインスタンス化して、該インスタンス化された処理オブジェクトを、仕様に従ってストリームハンドラ２０６における有向グラフ構成要素２１２内へと組み立てる。幾つかの実施形態において、ストリームハンドリング命令は、それぞれの固有の識別子によって処理オブジェクトを指定し、及び、ストリームハンドラコンフィギュレーションマネージャ２０８は、処理オブジェクトＡＰＩに対して、識別子のうちの幾つかの識別子のそれぞれを含むコールを発行することによって、処理オブジェクトをインスタンス化する。ストリームハンドラ２０６は、ある特定データタイプ（例えば、オーディオ、ビデオ、及びモーションデータタイプ）の複数データストリーム２１４を、それぞれの処理チェーン（鎖）２１６〜２１８を通じて処理するよう構成（又は設定）される。該処理チェーン２１６〜２１８は、処理オブジェクトのうちの幾つかのオブジェクトの各々から構成される。ストリームハンドラ２０６は、追加的には、（１つか又は複数のストリームハンドリング命令内において指定された）ミキシングオブジェクト２２０を含む。動作中、ストリームハンドラ２０６は、処理されるリアルタイムデータストリーム２１６〜２１８の組み合わせから、ミックスされたリアルタイムデータストリーム２２２を生成するためにミキシングオブジェクト２２０を実行する。幾つかの実施形態において、インスタンス化された処理オブジェクトのうちの少なくとも１つが、ドライバモジュール２２４に対するそれぞれのコールをカプセル化する。該ドライバモジュール２２４は、結果データストリーム２２２に少なくとも部分的に基づいて、ローカルネットワークノードのハードウェア構成要素を制御する
【０１３０】
ｇ．リアルタイムタスクスケジューリング
図１３は、リアルタイムカーネル２０によって実施されるスケジューリングタスクのプロセス内においてリアルタイムカーネル２０によって実現される一方法の一実施形態を示す。
【０１３１】
図１３の方法に従って、リアルタイムカーネル２０は、少なくとも１つのリモートネットワークノードとの少なくとも１つのリアルタイムデータストリーム接続を確立する（図１３のブロック２３０）。
【０１３２】
リアルタイムカーネル２０は、リモートネットワークノードにより発生される少なくとも１つのリアルタイムデータストリームを処理する（図１３のブロック２３２）。このプロセス内において、リアルタイムカーネル２０は、結果データストリームを生成するために１つか又は複数のリアルタイムデータ処理動作を通じて少なくとも１つのリアルタイムデータストリームを処理する。
【０１３３】
リアルタイムカーネル２０は、少なくとも１つのリアルタイムデータストリームの処理を監視する（図１３のブロック２３４）。幾つかの実施形態において、リアルタイムカーネル２０は、１つか又は複数の以下のパラメータを監視する。すなわち、結果データストリームが生成されるレートと、ローカルネットワークノードにおける少なくとも１つのプロセッサの利用と、ローカルネットワークノードにおける少なくとも１つのネットワーキングリソースによる帯域幅の利用とを監視する。幾つかの実施形態において、リアルタイムデータストリームが、複数フレーム内へとパケット化され、及び、（典型的にはリモートマスタークロックサービスと同期が取られる）ローカルクロックに従って設定される連続する各固定長インターバル中の該フレームの各々の処理をリアルタイムカーネル２０が監視する。監視することに基づいて、リアルタイムカーネル２０は、性能目標（性能ターゲット）から逸れたリアルタイムデータストリームを処理するか否かを決定する。幾つかの実施形態において、該性能目標は、結果データストリームの生成に関する時間ベースの閾値を含む。例えば、幾つかの実施形態において、性能目標は、結果データストリームのフレームが生成されるレートに基礎を置く（すなわち、条件とする）。このタイプの例示的な性能目標は、目標閾値と目標範囲とを含む。
【０１３４】
少なくとも１つのリアルタイムデータストリームの処理が、性能目標から変動しているという決定に応答して、リアルタイムカーネル２０は、リアルタイム性能目標付けルーチンに従って処理を変更する（図１３のブロック２３６）。
【０１３５】
図１４は、少なくとも１つのリアルタイムデータストリームの処理を監視することに基づいて、リアルタイムカーネル２０によって実現される一方法の一実施形態を示す。少なくとも１つのリアルタイムデータストリームの処理が、性能目標を満たすことに失敗したという決定に応答して（図１４のブロック２３８）、リアルタイムカーネル２０は、計算リソース負荷を、より低いレベルに低減させる（図１４のブロック２４０）。リアルタイム性能目標付けルーチンの設計に依存して、リアルタイムカーネル２０は、典型的には、計算リソースを、以下のやり方のうちの１つか又は複数のやり方において低減させる。すなわち、リアルタイムカーネル２０が、リアルタイムデータストリームのうちの１つか又は複数の部分の処理を省略することが可能であること（図１４のブロック２４２）と、リアルタイムカーネル２０が、１つか又は複数のリアルタイムデータ処理動作を省略することが可能であること（図１４のブロック２４４）と、リアルタイムカーネル２０が、少なくとも１つのリアルタイムデータ処理動作を、異なるそれぞれのデータ処理動作に置換することが可能であること（図１４のブロック２４６）と、において低減させる。リアルタイムデータストリームのうちの１つか又は複数の部分の処理を省略する前記プロセス内において、（図１４のブロック２４２）、リアルタイムカーネル２０は、典型的には、少なくとも１つの以下の動作を実施する、すなわち、性能目標の外側にあるそれぞれの性能値により特徴付けられる１つか又は複数のデータ処理動作を省略することと、１つか又は複数のデータ処理動作を、データ処理動作のうちの幾つかに対してそれぞれ割り当てられている優先度値に基づいて、優先的に省略することと、を実施する。
【０１３６】
もしも、少なくとも１つのリアルタイムデータストリームの処理が、性能目標を満たし（図１４のブロック２３８）、且つ、計算負荷が、上述の任意の方法によってより低いレベルに低減された場合（図１４のブロック２４８）には、リアルタイムカーネル２０は、計算負荷を、より低いレベルから増加させる（図１４のブロック２５０）。リアルタイムカーネル２０は、典型的には、ヒューリスティック（発見的問題解決法）に従ってブロック２４０内において計算リソース負荷を低減させるために用いられていた１つか又は複数の動作を反転（又は逆転）させることにより、計算リソース負荷を増加させる。もしも、少なくとも１つのリアルタイムデータストリームの処理が、性能目標を満たし（図１４のブロック２３８）、且つ、計算負荷が、上述の任意の方法によってより低いレベルに低減されなかった場合（図１４のブロック２４８）には、リアルタイムカーネル２０は、リアルタイムデータストリームの現在の処理を維持する。
【０１３７】
幾つかの実施形態において、リアルタイムカーネル２０は、少なくとも１つのリアルタイムデータストリームに関するデータ処理動作のうちの幾つかのそれぞれを実施する処理オブジェクトをインスタンス化する。リアルタイムカーネル２０は、有向グラフを、インスタンス化された処理オブジェクトのうちの幾つかの処理オブジェクトから構築して、該有向グラフを通じて、少なくとも１つのリアルタイムデータストリームを処理する。リアルタイム性能目標付けルーチンに依存して、リアルタイムカーネル２０は、インスタンス化された処理オブジェクトのうちの１つか又は複数を、該有向グラフから、一部取り除く（枝刈りを行う：pruning）ことによって、リアルタイムデータストリームの処理を変更することができる。幾つかの実施形態において、処理オブジェクトは、それぞれの優先度値が割り当てられ、リアルタイムカーネル２０は、インスタンス化された処理オブジェクトのうちの幾つかを、有向グラフから、該割り当てられた優先度値に基づいて排除することによって処理オブジェクトを一部取り除く。例えば、これらの実施形態のうちの幾つかでは、該一部取り除くことは、優先度閾値を満たすことに失敗した割り当てられた各優先度値を有したインスタンス化された処理オブジェクトのうちの幾つかを、有向グラフから排除することを含む。
【０１３８】
幾つかの実施形態において、リアルタイムカーネル２０は、インスタンス化された処理オブジェクトのうちの幾つかの処理オブジェクトから、第２の有向グラフを構築する。該第２の有向グラフは、ローカルネットワークノードと少なくとも１つのリモートネットワークノードとのうちの一方によって発生される第２のリアルタイムデータストリームを処理するために用いられる。これらの実施形態のうちの幾つかにおいて、第１及び第２の有向グラフは、それぞれの優先度値が割り当てられ、及び、リアルタイムカーネルが、割り当てられた優先度値に基づいて第１及び第２の有向グラフのうちの一方を優先的に変更することにより第１及び第２のリアルタイムデータストリームの処理を変更する。例えば、リアルタイムカーネルは、最小の優先度値が割り当てられている第１及び第２の有向グラフのうちの一方を引き下ろす（又は引きはがす）ことができる。
【０１３９】
幾つかの実施形態において、リアルタイムカーネル２０は、有向グラフを通じて第２のリアルタイムデータストリームを処理する。ここで、該第２のリアルタイムデータストリームは、ローカルネットワークノードと、少なくとも１つのリモートネットワークノードとのうちの一方によって生じられる。幾つかのこれらの実施形態において、第１及び第２のリアルタイムデータストリームは、それぞれの優先度値が割り当てられ、リアルタイムカーネル２０は、割り当てられた優先度値に基づいて、第１及び第２のリアルタイムデータストリームのうちの一方の処理を優先的に変更する。
【０１４０】
幾つかの実施形態において、リアルタイムカーネル２０は、ローカルネットワークノードと、複数のリモートネットワークノードとの間におけるそれぞれのリアルタイムデータストリーム接続を確立する。リアルタイムカーネル２０は、有向グラフを通じて、リモートネットワークノードのうちの幾つかの各々によって生じられるリアルタイムデータストリームを処理する。これらの実施形態のうちの幾つかにおいて、リアルタイムデータストリームは、それぞれの優先度値が割り当てられ、リアルタイムカーネル２０は、割り当てられた優先度値に基づいて、１つか又は複数のリアルタイムデータストリームの処理を優先的に変更する。有向グラフは、典型的には、インスタンス化された処理オブジェクトのうちの幾つかの各々の複数の方向付けられたチェーン（鎖）を含む。リアルタイムカーネル２０は、典型的には、該方向付けられたチェーンの各々を通じて、リアルタイムデータストリームのうちの１つのそれぞれを処理する。これらの実施形態のうちの幾つかにおいて、リアルタイムカーネル２０は、リアルタイムデータストリームの処理を、指定された性能目標内に該処理がなるまで反復的に変更する。各反復中に、該変更することは、典型的には、（i）有向グラフからチェーンのうちの１つか又は複数を除去することと、（ii）インスタンス化された処理オブジェクトのうちの１つか又は複数を、有向グラフから一部取り除くこと、とのうちの１つか又は複数を実施することを含む。
【０１４１】
Ｖ．例示的なリアルタイムカーネル実施形態
Ａ．イントロダクション
図１５は、リアルタイムカーネル２０の一実施形態２６０を示す。リアルタイムカーネル２６０は、異なるネットワークノード上における、２Ｄ／３Ｄグラフィックスレンダリングエンジン及びオーディオミキシング及びスイッチングエンジンのリモートコンフィギュレーション及び実行をサポートして、２人か又は３人以上の通信者間の物理的プレゼンスの感覚（センス）を生成する。単一仮想エリアインスタンス内において一度に相互作用する全通信者を管理するプロセス内において、エリアサービス２６は、リアルタイムカーネル２６０と、他のネットワークノードとの間のセッションを、リアルタイムカーネル２６０のパケットトランスポート構成要素（本明細書内においてＳＴＲＡＷサービス２６８として呼ばれる）を介して、リモートに設定（又は構成）する。幾つかの実施形態において、リアルタイムカーネル２６０は、エリアサービス２６との通信を最小化するためにポイント・ツー・ポイント（Ｐ２Ｐ）でデータストリーム（例えば、リアルタイムオーディオデータストリーム）を設定（又は構成）する。エリアサービス２６はまた、データストリームをミックスすることができ、及び、必要な時にはクライアントネットワークノードにそれらを渡すことができる。リアルタイムカーネル２６０は、Ｐ２Ｐ接続の失敗をエリアサービス２６に報告することとなり、その結果、エリアサービス２６は、クライアントネットワークノードのためにデータストリームをミックスする時を決定することが可能となる。リアルタイムカーネル２６０は、小さなイニシャル領域（フットプリント）を有しており、更新（アップデート）をロードし、及び、ネットワーク接続上において徐々に増加する機能をプラグインとしてロードする。
【０１４２】
リアルタイムカーネル２６０は、マネージャ及びサービスのセットを含む。リアルタイムカーネルマネージャの中には、接続及びサービスミックスマネージャ２６２、エリア／ゾーンマネージャ２６４、及びプラグインマネージャ２６６がある。リアルタイムカーネルサービスの中には、ＳＴＲＡＷサービス２６８、ＳＯＤＡハンドラサービス２７０、メディアサービス２７１、オーディオストリームサービス２７２、Ｓｏ３Ｄインターフェースサービス２７４、アセットキャッシュサービス２７５、１つか又は複数のソーシャルプロセッサ２７７、記録、再生、及びトランスポートバスサービス２７６、リアルタイムスケジューラサービス２７８、タイムサービス２８０、ＳＩＰサービス２８２、ローカルＨＩＤ／ＲＤＳドライバハンドラサービス２８４、及びローカルオーディオデバイスのためのインターフェースサービスがあり、該ローカルオーディオデバイスは、ローカルオーディオ再生２８６、ローカルスピーカ２８８、ローカルマイクロホン２９０、及びＳｋｙｐｅ（登録商標）オーディオを含む。例示的な一実施形態において、リアルタイムカーネル２６０は、以下のランタイムパッケージ構成要素（コンポーネント）によって実現される。
【０１４３】
ライブラリ：
ライブラリ名 説 明
SORK.DLL・・・・・リアルタイムスケジューラ２７８
Compress.DLL・・・圧縮エンジン
Media.DLL・・・・・ストリーミングオーディオ伝送のためのメディアサービス２７１
SODA.DLL・・・・・ストリーミングＳＯＤＡ定義伝送のためのＳＯＤＡチャンネルサービス２７０
GIPS.DLL・・・・・ＧＩＰＳ音声構成要素
OpenAL.DLL・・・・サウンドカードサポートのためのオープンオーディオライブラリ（Open Audio Library）
AudioSvc.DLL・・・オーディオストリームサービス２７２
TransBus.DLL・・・オーディオストリームサービス２７２を含むメディアトランスポートバス
OpenAL.DLL・・・・サウンドカード
STRAW.DLL・・・・ＳＴＲＡＷサービス２６８（パケットトランスポートエンジン）
CSMMgr.DLL・・・・接続及びサーバミックスマネージャ２６２
AreaZone.DLL・・・エリア／ゾーンマネージャ２６４
ArtCache.DLL・・・ローカルデータベース内のアート（art）に対してＳＯＤＡインターフェースを提供するアセットキャッシュサービス
So3D.DLL・・・・・３Ｄレンダリングエンジンに対するＳＯＤＡインターフェース
TimeSID.DLL・・・・ネットワーク時間基準インターフェース
PlugInMgr.DLL・・・プラグインマネージャ
他のプラグイン：
暗号化アルゴリズム
圧縮アルゴリズム
認証アルゴリズム
認証情報（クレデンシャル）
オーディオミックス
オーディオソース
オーディオコーデック
オーディオ計算
グラフィカルエフェクト
物理エクステンション
スクリプトエクステンション
入力デバイスホスティング
Ｂ．リアルタイムカーネル設計
図１５内に示されているように、リアルタイムカーネル２６０は、エリアサービス２６から受け取った命令に従って仮想エリア通信環境をレンダリングするためのプラットフォームの構成要素となるサービス、プラグイン、及びリアルタイムスケジューラのコレクションとして設計される。プラットフォームを実現するために複数サービスが協働して、オーディオ及びグラフィックスレンダリングコンフィギュレーションを通じてネットワーク機能とは異なるレベルで動作する。プラグインは、様々なクラスに属しており、各々は、（各々がそれ自身のクラスＡＰＩで）プラグイン管理（Plugin Management）ＡＰＩに準拠している。リアルタイムスケジューラ２７８は、オーディオ及びグラフィックレンダリングが、偶数フレームレートにおいて生じることを保証する。プラットフォームは、ＳＴＲＡＷ  ＵＤＰソケット（ＳＯＤＡ記録の例示的なセットのためのＳＯＤＡ定義を含むセクションＶＩを参照のこと）上において伝達されたＳＯＤＡ定義記録を通じてエリアサービス２６により仮想エリアのインスタンスに従って構成される。ＳＴＲＡＷサービス２６８は、公開／認可モデルを用いてＳＯＤＡ記録ストリームを逆多重化（デマルチプレクス）する。ＳＯＤＡ記録は、ＳＴＲＡＷソケットの他方端上に加入者が存在する時にのみ伝達される。受け取られたＳＯＤＡ記録は、到来時に、１つか又は複数の加入者に配信される。サービスは、Ｓｏ３Ｄグラフィックスエンジン及びＨＵＤ８４によって利用されるためのローカルＡＰＩをサポートする。
【０１４４】
以下のサブセクションは、リアルタイムカーネル２６０の実施形態とその構成要素のインストール、設計、及び動作を説明する。
１．インストール
ａ．概要
幾つかの実施形態において、仮想エリアベースのレンダリングプラットフォームが、インストールパッケージとして、インターネット上のソフトウェアパッケージとしてダウンロードされる。それは、ダウンロードサーバからＨＴＴＰダウンロードにより配信される。Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムが動作するクライアントネットワークノード上において、前記プラットフォームソフトウェアパッケージは、．ｍｓｉパッケージである。初期インストールは、更新が利用可能となるとダウンロードサーバ上において修正されている単一パッケージである。新規のクライアントネットワークノードが、最新のインストールを実施する際には、次の更新が生成されるような時まで他の更新は必要とされない。
【０１４５】
リアルタイムカーネル２６０は、アプリケーションをカスタマイズするために、プラグインを利用する。必要なプラグインは、インストールパッケージ内に含まれている。時々、構成要素（コンポーネント）は、独立に更新（アップデート）され得る（例えば、リアルタイムカーネルサービスがポイントリリースされ得り、及びプラグインが追加され得る）。このケースでは、別個のＷｉｎｄｏｗｓ（登録商標）．ｍｓｉインストールパッケージが、ポイントリリースのために生成され得り、及び、更新サーバによって登録され得る。このインストールされるプラットフォームソフトウェアは、更新の通知がなされることとなり、アップグレードすることのオプションを通信者に提供することとなる。何人かの通信者は、２つ以上の更新が利用可能になるまで、アップグレードすることが遅れる可能性がある。通信者が最終的にアップグレードすることに同意した時には、全ての利用可能な更新が連続的にロードされ且つ提供されることになる。
【０１４６】
プラグインの複数バージョンが、クライアントネットワークノード上に同時に提示され得る。これは、クライアントネットワークノードが、典型的には、機能をネゴシエートして、そのＡＰＩ及びバージョン要件に適合するプラグインを選択するからである。各プラグインは、そのＡＰＩ及びバリアントを公示（又は通告）する。プラグインは、ファイルシステム内において名称の衝突（コリジョン）を避けるため、異なるファイル名を有することとなる。同じＡＰＩで且つ異なるバリアントを有する２つのプラグインは、異なる実現形態であり、その選択は、（おそらくは、例えば、サーバとのネゴシエーションにより）プラグインをリクエストするサービスによってなされる。既存プラグインとして、同じＡＰＩ及びバリアントの状態で、プラグインがロードされる時には、これはバグ修正である。新規プラグインが、古いプラグインと置き換わる。サービスは、常に、アップグレードによって置き換わる。同じＡＰＩを有した２つのサービスは決して存在しない。Ｗｉｎｄｏｗｓ（登録商標）インストールは、マニフェストと、バンドルされたＷｉｎｄｏｗｓ（登録商標）依存のＤＬＬｓとを使用して、Ｗｉｎｄｏｗｓ（登録商標）環境の更新状態とは無関係に、製品を機能させることを保証する。Ｗｉｎｄｏｗｓ（登録商標）に並んだ機能が、他の製品インストール要件との衝突を避けるために用いられる。
【０１４７】
ｂ．更新サーバ
更新サーバは、各サポートされるホスト動作環境ごとのインストールパッケージと、以前にサポートした各インストールパッケージごとのアップグレードパッケージとを含む。
【０１４８】
クライアントネットワークノード及び更新サーバは、信頼可能なＳＴＲＡＷチャンネル上において伝達を行う。更新サーバは、利用可能なアップグレード定義を、各サポートされるホスト動作環境ごとに公開（又は発行）する。クライアントネットワークノード上にインストールされている仮想エリアベースのレンダリングプラットフォームソフトウェアは、その後、アップグレードに対する認可を行うことができる。更新サーバは、所望のソフトウェアを段階的に送ることを開始する。
【０１４９】
幾つかの実施形態において、ユーザに最新のクライアントソフトウェアバージョンを見せることを可能にさせるために、利用可能なアップグレードをリスト表示するために、及び、アップグレード処理を開始及び監視するために、クライアントバージョン及びアップグレードツールが、各クライアントネットワークノード上にインストールされる。クライアントネットワークノードは、提供されているアップグレードパッケージのＧＵＩＤｓのテーブルを維持することとなる。更新サーバにこのリストが提示されることとなり、その見返りに、ペンディング中のアップグレードのリストが、アプリケーション順にＧＵＩＤによって得られることとなる。それらは、添付された記述、サイズ、及び日付属性を有することとなる。
【０１５０】
アップグレードは、ダウンロードが完了し、且つ、自動インストールが成功を報告した時にのみ、「適用済み」とマーキングされる。該自動インストールのプロセスは、ＤＬＬｓがオーバーライトされる可能性があるため、任意の実行中のＳＯＲＫサービスを停止させることを含む。処理に割り込みがかけられて、如何なるデータ伝送の再送も無しに再開（レジューム）される可能性があるため、アップグレードをダウンロードすることは、ＳＯＤＡ記録のシーケンスを通じて行われる。該記録は、アップグレードＧＵＩＤ及びオフセットを含む。
【０１５１】
ロールバックすることか又はアンインストールすることのための要件は存在しないので、如何なるＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）「に並んだ（side-by-side）」ライブラリマニフェストも必要ない。任意の要求されたライブラリが、アップグレードの一部としてロードされ得る。
【０１５２】
アップグレードツールは、レジストリを登録させることとなるか、或いは、適用されるアップグレードのＧＵＩＤｓを含んだ、並びに、任意の最新のローディングアップグレードのＧＵＩＤを含んだファイルと、そのオフセットと、「今までの」データを含んだディスク上のファイルに対する参照とを含んだファイルを保持したままにさせることとなる。アップグレードパッケージは、適用（又は提供）されると削除される。アップグレードパッケージを、複数のクライアントネットワークノードについてキャッシュすることが望ましく、従って、キャッシングを行うこととなる同じクライアントプロキシでそれらを各々指し示すことが望ましい。
【０１５３】
ｃ．更新ローカルデータベース
クライアントネットワークノードは、仮想エリアベースのレンダリングプラットフォームサービス及びプラグインを、ローカルファイルシステム内のアセットディレクトリ内に格納する。該サービス及びプラグインは、ＡＰＩｓ及び添付リソースを通じて、自己記述的である。クライアントネットワークノードソフトウェア状態に関する更なる情報は保持されない。クライアントネットワークノードが、（おそらくは、ＯＳのアップグレード後に）仮想エリアベースのレンダリングプラットフォームソフトウェアを再インストールする時には、既存のプラグインが、典型的には、再有効化される（又は再認証される）。初期のインストールは、全ての基本的なサービス及びプラグインを含むが、マシンオプションのか又はアプリケーション指定のプラグインが存在する場合があり、それらは典型的には、削除されるか又は再有効化される（又は再認証される）。幾つかの実施形態において、有効なプラグインのバイナリコンテンツが、ハッシュされて、一方向に暗号化されて、その結果として生じた値が、添付リソースとして格納される。該添付リソースは、プラグインが本物であるか否かをチェックするために使用される。疑わしいプラグインが正しいものであることを確認するために、最新のプラグインコンテンツが、再ハッシュされ、暗号化されて、その結果として生じた値が、既存のリソースと比較される。該コンテンツが、該リソースに一致しない場合には、そのプラグインは無効にされる。
【０１５４】
ｄ．クライアント認証
ネットワーク認証は、典型的には、リアルタイムカーネル２６０がランチされる度ごとに一度だけなされる。幾つかの実施形態では、アカウントネットワークインフラサービスを実行するアカウントサーバが用いられて、通信者が認証されて、該通信者ごとにリアルユーザ識別子（ＲＵＩＤ）が生成される。アカウントサーバは、トークンを生成し（その後、該トークンはＲＵＩＤの一部として含められる）、他のサーバに対して自分自身が本物であることを証明するために、そのトークンをクライアントネットワークノードに対して提供する。このプロセス内において、クライアントネットワークノードは、認証情報（クレデンシャル）がセキュリティ上安全にインストール時に発行される。該認証情報（クレデンシャル）は、典型的には、認証局により署名された、認証局（ＣＡ）定義の証明書である。該証明書は、プライベートキー（鍵）とパブリックキー（鍵）とを含む。仮想エリアベースのレンダリングプラットフォームインストールパッケージは、パブリックキーのみを含む新たな認証情報（クレデンシャル）を生成する。プライベートキーは、クライアントネットワークノード上においてセキュリティ上安全に格納される。仮想エリアベースのレンダリングプラットフォームインストールパッケージは、プライベートキーを用いて署名を生成して、通信者によって提供されたパスワードのダイジェストを暗号化し、該署名を、セキュリティ上安全にアカウントサーバに対して伝達する。該アカウントサーバは、該ダイジェストを回復させて、クライアントを識別する秘密事項としてそれを格納する。
【０１５５】
接続を確立する時には、リアルタイムカーネル２６０は、認証情報（クレデンシャル）をアカウントサーバと共有する。該アカウントサーバは、この認証情報（例えば、サーバ側の証明書）に応答する。クライアントネットワークノード及びアカウントサーバは、レジストレーション権限を用いて、該認証情報を確認（又は認証）する。検証されると、サーバ側の認証情報は、どこのどのサーバに対しても有効になる。
【０１５６】
幾つかの実施形態において、アカウントサーバはまた、ランダムな１２８ビットのチャレンジフレーズを、クライアントネットワークノードに対して提供する。該クライアントネットワークノードは、通信者によって提供されたパスワードの暗号ダイジェストと共に該チャレンジフレーズをハッシュして、これを応答として戻す。アカウントサーバもまた、その通信者について以前に取得したダイジェストと共に該チャレンジフレーズをハッシュして、クライアントネットワークノードからの応答が一致することを検証する。次いでネットワーク接続が認証されて、プライベートキーの所有者として通信者が識別（特定）される。
【０１５７】
幾つかの実施形態において、アカウントサーバは、添付署名によるランダムなクライアントＩＤを通信者に割り当てる。該署名は、アカウントサーバプライベートキーを用いて暗号化されたクライアントＩＤの１２８ビットのハッシュである。該署名は、アカウントサーバによってのみ、生成され得る。トークンを受け取ったものは誰でも、アカウントサーバによって発行されたパブリックキーを用いてダイジェストを解読してそれをクライアントＩＤと比較することによって、通信者を認証することができる。
【０１５８】
ｅ．アカウントサーバ認証
図１６は、アカウントサーバ２９６がその認証情報（クレデンシャル）を通じて認証されることによる一方法の一実施形態を示す。この方法に従って、クライアントネットワークノード２９４とアカウントサーバ２９６とが認証情報（クレデンシャル）を交換する（図１６のブロック２９８、３００）。クライアントネットワークノード２９４に対するアカウントサーバ２９６の、後の高速な認証のために、クライアントネットワークノード２９４は、アカウントサーバ２９６に対してサーバＩＤ及びサーバトークンを発行する（図１６のブロック３０２）。アカウントサーバ２９６は、次いで、クライアントＩＤと、添付識別トークンとを、クライアントネットワークノード２９４に対して発行する（図１６のブロック３０４）。アカウントサーバへのストリームに関する認証フェーズは、参加者のパブリックキーを用いて暗号化される。
【０１５９】
２．初期化シーケンス
図１７は、クライアントネットワークノード上のオペレーティングシステムがランチされる度にリアルタイムカーネル２６０のローダー構成要素によって実現される一方法の一実施形態を示す。このプロセス内において、該ローダーは、１つか又は複数のカーネルサービス構成要素を含むカーネル構成要素の静的リストをパーズする（図１７のブロック３２０）。パーズしたリスト内の全てのカーネル構成要素であって、ローカルな保存場所（例えば、ローカルファイルシステム内のディレクトリ）から無くなっている、該全てのカーネル構成要素を、該ローダーが決定する（図１７のブロック３２２）。該ローダーは、無くなっていることが決定されたカーネル構成要素の各々を回復させる（図１７のブロック３２４）。幾つかの実施形態において、ローダーは、無くなっているカーネル構成要素をリモートネットワークノード（例えば、ダウンロードサーバか又は更新サーバ）から回復させる更新サービスをクライアントネットワークノード上においてインスタンス化する。無くなっているカーネル構成要素が回復された後に、該ローダーは、カーネルサービス構成要素のうちの幾つかの各々からカーネルサービスをインスタンス化する（図１７のブロック３２６）。インスタンス化されたカーネルサービスは、仮想エリアに関して画定される通信環境内における１つか又は複数のリモートネットワークノードと伝達し合うために実行される（図１７のブロック３２８）。例えば、幾つかの実施形態において、ＨＵＤ８４は、本明細書内において詳細に記載されているようなＨＵＤセッションか又はエリアセッションを確立するため、エリアサーバと伝達し合うためにカーネルサービスを呼び出す。
【０１６０】
幾つかの実施形態において、リアルタイムカーネル２６０の以下のサービスが、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬｓとして起動（ブート）時にロードされる。
【０１６１】
●ＳＴＲＡＷサービス２６８
●ＳＯＤＡサービス２７０
●メディアサービス２７１
●オーディオストリームサービス２７２
●接続及びサーバミックスマネージャ２６２
●エリア／ゾーンマネージャ２６４
●アセットキャッシュサービス２７５
●リアルタイムスケジューラサービス２７８
●ＨＵＤ８４
●デフォルトプラグイン
これらの実施形態において、サービスが、ＧＵＩＤによってでなく名称によってロードされる。各サービスのうちの１つのコピーのみが、一時、クライアントネットワークノード上に提示される。ロード後、ＳＯＤＡチャンネルサービス２７０、メディアサービス２７１、オーディオストリームサービス２７２、エリア／ゾーンマネージャ、及びリアルタイムスケジューラサービスが、アイドル状態で待機する。接続及びサーバミックスマネージャは、未設定のまま音声を放置して、エリアサーバに対する接続の定義を待つ。デフォルトプラグインが、ＧＵＩＤによってＡＰＩクラスオブジェクトとして登録される。ある定義内においてＧＵＩＤによって参照された時に、それらデフォルトプラグインがロードされる。ＨＵＤ８４は、アカウントサーバにコンタクトして、通信者を認証し且つ識別（特定）する。ＨＵＤ８４は、ランデブーネットワークインフラサービスと、相互作用ネットワークインフラサービスとに対するストリームを生成して、その最も最近に使用された（ＭＲＵ）友達及びエリアリストとその頻度の高い友達及びエリアリストとをポピュレートする。アセットキャッシュサービス２７５は、典型的には、アート（art）データベースサーバにコンタクトして、ヒューリスティック（発見的問題解決法）に従って、ディジタルリソースをキャッシュしはじめ、そのＧＵＩＤマップを更新する。
【０１６２】
３．セッション
リアルタイムカーネル２６０は、クライアントネットワークノードと他のネットワークノードとの間のセッションを管理する。あるセッション中、サーバとクライアントネットワークノードとの間で、ＳＴＲＡＷソケット上においてＳＯＤＡ定義記録として、データが共有化される。データは、公開／認可（又は承認、署名）モデル内において共有化される。リアルタイムカーネル２６０は、クライアントネットワークノードが必要なデータに対してのみ、認可（又は承認）をする。認可するために、リアルタイムカーネル２６０は、所望のサーバに対してＳＴＲＡＷチャンネルを生成する。ＳＴＲＡＷチャンネルは、特定の仮想エリアのために周知のＧＵＩＤによってネゴシエートされる。幾つかの実施形態において、ＳＴＲＡＷソケットが、設定（又は構成）されたＤＮＳ通じて提供されるアドレスを用いて接続される。
【０１６３】
エリアサービスは、通信者にとって利用可能なデータストリームを示す公開メッセージを送ることとなり、それら各々をＧＵＩＤハンドルによってタグ付けする。リアルタイムカーネル２６０は、従って、所望のデータストリームについての認可（又は承認、署名）メッセージを送る。認可されたチャンネルについてのエリアサービスデータに対する任意の変化が、ＳＯＤＡ定義記録として、これらチャンネルについて認可した全てのクライアントネットワークノードに送られる。
【０１６４】
２つの主要なタイプのセッションが存在する。すなわち、（ａ）ＨＵＤ８４内に現在の関係とプレゼンス情報とを表示することを含むＨＵＤセッションと、（ｂ）仮想エリアインスタンスに隠れて待機させることか又は進入させることかのいずれかを含むエリアセッションである。
【０１６５】
ａ．ＨＵＤセッション
ＨＵＤセッション内において、ＨＵＤ８４は、アカウントサーバ、ＲＵＩＤサーバ、及びランデブーサーバにコンタクトして、そしてＳＴＲＡＷチャンネルを通じて、通信者の自身のアカウントと関係情報とを認可（又は承認）する。ＨＵＤ８４は、従って、密接に関連したコンタクト及び仮想エリアについてのプレゼンス情報を認可（又は承認）する。この時点で、ＨＵＤ８４は、密接に関連したコンタクトについての動的プレゼンス情報を表示することができる。
【０１６６】
ｂ．エリアセッション
あるエリアセッション内において、ＨＵＤ８４は、関連した仮想エリアについての情報を認可（又は承認）する。幾つかの実施形態において、ＨＵＤによって指定される仮想エリアをホストする現在のエリアサーバを決定するために、ディレクトリサーバが調べられる。ＳＴＲＡＷストリームが、現在のエリアサーバに対して生成される。
【０１６７】
ＨＵＤは、仮想エリアに関連付けられているプレゼンスデータを認可（又は承認）して、その２Ｄヘッドアップディスプレイを、仮想エリア内に現在参加している他の通信者の名前で更新する。この時点において、該通信者は、仮想エリア内において、隠れて待機している。通信者のプレゼンスが、ポップアップリスト内に表示され得り、及び、アイコンが、ＨＵＤエリア表現において（例えば、図５Ａ〜図５Ｃ内に示されたオフィス場所タイルにおいて）表示される。
【０１６８】
もしも通信者が、仮想エリアに進入するようＨＵＤ８４に指示した場合には、仮想エリアに進入する、通信者のリクエストを、リアルタイムカーネルが、ランデブーサービスに知らせる。仮想エリアに関連付けられているプレゼンス情報に対する認可がなされている他の通信者は、仮想エリアに進入した新たな通信者の知らせを受ける。
【０１６９】
リアルタイムカーネル２６０は、相互作用環境をランチするようＳｏ３Ｄエンジンに指示する。該Ｓｏ３Ｄエンジンは、エリアサーバ環境データ（例えば、レンダリング及びモーションデータ）を認可（承認）する。エリアサーバは、リクエストされたエリアサーバ環境データを、リアルタイムカーネル２６０に対してストリーミングすることを開始する。該リアルタイムカーネルは、リクエストされたデータを、Ｓｏ３Ｄエンジンに送って、該Ｓｏ３Ｄエンジンが、現在の視覚化モード（例えば、２Ｄオーバーヘッドビューか、低解像度ビューか、又は完全没入型３Ｄビュー）に従って該データをレンダリングする。
【０１７０】
エリアサーバは、仮想エリア内のオブジェクトに関連付けられているクライアントネットワークノード間において生（raw）のマイクロホンオーディオメディアストリームを画定する。エリアサーバはまた、仮想エリア仕様内のオーディオハンドリング命令（例えば、空間的なエフェクト定義、及びゾーン定義）に従って、オーディオミックス要素の定義を生成する。接続及びサーバミックスマネージャ２６２は、各Ｐ２ＰオーディオストリームごとのＧＵＩＤハンドルを含むオーディオ定義に耳を傾けて、各定義ごとにメディアストリームを生成する。メディアストリームの各々は、ローカルトランスポートバス２７６に登録（又は記録）されて、オーディオストリームサービス２７２によって適切なオーディオミキシング構成要素が生成される。エリア／ゾーンマネージャ２６４はまた、オーディオに対する及びアバター動作（モーション）及び配向データに対するＳＯＤＡ定義を認可（又は承認）する。エリア／ゾーンマネージャ２６４は、通信者のアバターが仮想エリアを進むと、各オーディオストリームのゲイン／ミュートを制御する。
【０１７１】
幾つかの実施形態において、エリア／ゾーンマネージャ２６４が、追加的には、関連データを認可（又は承認）する。該関連データは、仮想エリア内におけるアバターの配向／動作／姿勢（ポーズ）をソーシャルプロセッサ２７７（図１５を参照）を介して制御するためにエリア／ゾーンマネージャ２６４が使用する。このプロセス内において、エリア／ゾーンマネージャ２６４は、仮想エリア内のアバターの位置と該関係データとに基づいて、ソーシャルプロセッサ２７７のパラメータ値を設定する。このようにして、通信者が話す時にアバターの頭の位置と配向とを変更することによって、関係（関連）が指示され得る（例えば、仮想エリアのゾーンに別のアバターが進入した時にその別のアバターの方に向くようアバターを回転させるか、或いは、仮想エリアのメディアゾーンが進入を受けた時にビュースクリーンの最適な眺め（又は景色；ビューイング）にアバターを配向する）。幾つかの実施形態において、ソーシャルプロセッサ２７７は、サードパーティの開発者によって画定され、プラグインを介してクライアントネットワークノードに配信される。各ソーシャルプロセッサ２７７は、ある特定のイベントが発生した時に自動的に実行される命令のセットである（例えば、他のアバターか、あるエリア内のある位置か、或いはこれらの両方に対して、接近することによって、自動的な動作（モーション）がトリガされる）。ソーシャルプロセッサ２７７は、仮想エリア内のアバターか又はオブジェクトのモーションを制御する任意のプログラムルーチンとすることができる。例えば、幾つかの実施形態において、あるアバターがビュースクリーンに近づく場合には、ソーシャルプロセッサの１タイプは、仮想エリア仕様内において画定される格子（グリッド）に該アバターを自動的に素早くはめ込んで、ビュースクリーンの前に該アバターをセンタリングして、ユーザが容易にビュースクリーンのコンテンツを見ることができるようにする。このようにして、アバターの動作の複雑な操作の必要性が取り除かれる。別のタイプのソーシャルプロセッサ２７７は、別のユーザのプレゼンスを認識させるために、アバターを自動的に旋回及び回転させる。例えば、このタイプのソーシャルプロセッサの一実施形態は、仮想エリア内への新たな通信者のエントリに応答して、仮想エリア内のアバターを、互いに向き合った状態から、該アバターが新たな通信者のアバターの方を向いているそれぞれの配向へと、自動的に再配向させるよう構成される。このケースでは、もともと仮想エリア内の、アバターに関連付けられている通信者は、彼らのアバターを手動で操作する必要がない。その代りに、ソーシャルプロセッサが、新たな通信者のプレゼンスを認識させるために、それらアバターの頭を自動的に回転させる。
【０１７２】
４．管理セッション
図１８は、ＳＴＲＡＷサービス２６８によって実現されるセッション管理方法の一実施形態を示す。
【０１７３】
図１８の方法に従って、コネクションレス・トランスポート・プロトコル（例えば、ＵＤＰ）に従ってトランスポートストリームに関するリモートネットワークノードとの第１のセッションを、ＳＴＲＡＷサービス２６８が、ローカルネットワークノード上において確立する（図１８のブロック３６２）。ＳＴＲＡＷサービス２６８は、セッションの定義を生成し、ここで、該定義は、インターネットプロトコル（ＩＰ）アドレスと、ポートアドレスと、トランスポートプロトコルのグローバル固有識別子とを含む。ＳＴＲＡＷサービス２６８は、該定義をリモートネットワークノードに送る。ＳＴＲＡＷサービス２６８は、リモートネットワークノードに割り当てられる第１のステーション定義を決定して、該第１のステーション定義を、各々のオープンチャンネルの属性としてテーブル内に格納する。このプロセス内において、ＳＴＲＡＷサービス２６８は、リモートネットワークノードから受け取られるステーション定義記録をパーズする。該ステーション定義記録は、フィールドのセットを含み、ここで、該フィールドの各々は、それぞれのフィールドタイプと、関連付けられたフィールド値とによって画定され、該フィールドタイプの各々は、それぞれのグローバル固有識別子（ＧＵＩＤ）によって識別される。
【０１７４】
ローカルネットワークノード上における１つか又は複数のソフトウェアエンティティのために、ＳＴＲＡＷサービス２６８は、第１のセッション内において、ローカルネットワークノードとリモートネットワークノードとの間においてデータが伝達される１つか又は複数のチャンネルを自動的にオープンする（図１８のブロック３６４）。このプロセス内において、ＳＴＲＡＷサービス２６８は、ローカル公開チャンネルを画定する記録と、リモート公開チャンネルのうちの１つのリモート公開チャンネルの識別子に一致する識別子を有するローカル認可チャンネルの各々の記録とをリモートネットワークノードに送る。
【０１７５】
第１のセッション内において、ＳＴＲＡＷサービス２６８は、チャンネルのうちの幾つかのオープンチャンネルを識別（又は特定）するテーブルを維持して、それぞれの属性値を該識別したチャンネルに関連付ける（図１８のブロック３６６）。ＳＴＲＡＷサービス２６８は、ローカルネットワークノードから利用可能なローカル公開チャンネルと、１つか又は複数のソフトウェアエンティティによってリクエストされたローカル認可チャンネルと、リモートネットワークノードから利用可能なリモート公開チャンネルと、リモートネットワークノードによってリクエストされたリモート認可チャンネルと、の属性を記録する。このプロセス内において、ローカル公開チャンネル上においてデータを公開するための容量（キャパシティ）を示す複数ソフトウェアエンティティのうちの１つのソフトウェアエンティティの識別子と、ローカル公開チャンネルを認可するリモートネットワークノードの識別子と、ローカル公開チャンネルの識別子と、を含む記録を、ＳＴＲＡＷサービス２６８は、各ローカル公開チャンネルごとに維持する。ローカル認可チャンネルを認可する複数ソフトウェアエンティティのうちの１つのソフトウェアエンティティの識別子と、ローカル認可チャンネル上においてデータを公開するための容量（キャパシティ）を示すリモートネットワークノードの識別子と、ローカル認可チャンネルの識別子と、ローカル認可チャンネルに関連付けられた１つか又は複数のネットワークトランスポートパラメータと、を含む記録を、ＳＴＲＡＷサービス２６８は、各ローカル認可チャンネルごとに維持する。リモート公開チャンネル上においてデータを公開するための容量（キャパシティ）を示すリモートネットワークノードの識別子と、リモート公開チャンネルの識別子と、を含む記録を、ＳＴＲＡＷサービス２６８は、各リモート公開チャンネルごとに維持する。
【０１７６】
ＳＴＲＡＷサービス２６８は、セッション内において、１つか又は複数のオープンチャンネル上において、ローカルネットワークノードとリモートネットワークノードとの間においてデータを伝達する。幾つかの実施形態において、記録（レコード）の形態においてデータが伝達され、該記録の各々は、フィールドのセットを含む。記録の該フィールドの各々は、それぞれのフィールドタイプと、関連付けられたフィールド値とによって画定され、それぞれの該フィールドタイプは、それぞれのＧＵＩＤによって識別される。幾つかの記録は、メディア記録であり、該メディア記録は、メディアデータを含み、該メディアデータは、レンダリング可能なデータのパケットを含む。他の記録は、コンフィギュレーション記録であり、該コンフィギュレーション記録は、コンフィギュレーションデータを含み、該コンフィギュレーションデータは、コンフィギュレーション設定（セッティング）の定義を含む。メディア記録及びコンフィギュレーション記録は、典型的には、トランスポートストリーム上のトランスポート記録内にカプセル化される。メディア記録は、典型的には、第１のデータ圧縮サービスを用いて圧縮され、及び、コンフィギュレーション記録は、典型的には、第２のデータ圧縮サービスを用いて圧縮される。送信時に、ＳＴＲＡＷサービス２６８は、該トランスポート記録を、それらが伝達される複数チャンネルのうちの幾つかのチャンネルの各々の識別子に関連付け、該トランスポート記録を暗号化し、及び、その暗号化されたトランスポート記録を順序付ける。受信時に、ＳＴＲＡＷサービス２６８は、該トランスポート記録を解読して、その解読したトランスポート記録内に含まれるメディア記録とコンフィギュレーション記録とを、ソフトウェアエンティティのうちの認可する幾つかのソフトウェアエンティティへと発送する。
【０１７７】
第１のセッションが失敗したという決定（判定）に応答して、ＳＴＲＡＷサービス２６８は、コネクションレス・トランスポート・プロトコルに従って、第２のトランスポートストリームに関するリモートネットワークノードとの第２のセッションを確立することを自動的に試みる（図１８のブロック３６８）。幾つかの実施形態において、ＳＴＲＡＷサービス２６８は、リモートネットワークノードに割り当てられた現在のステーション定義が、第１のセッションが確立された時にリモートネットワークノードに割り当てられた第１のステーション定義とは異なっているという決定に応答して、第１のセッションが失敗したということを決定（判定）する。
【０１７８】
第２のセッションの確立の成功に応答して、ＳＴＲＡＷサービス２６８は、テーブル内の識別されたチャンネルの各々を、自動的にオープンする（図１８のブロック３７０）。
【０１７９】
５．データストリームの処理
リアルタイムカーネル２６０は、他のネットワークノードからクライアントネットワークノードによって受け取られるデータストリームを処理するためのストリームハンドラのリモートコンフィギュレーションをサポートする。エリアサービス２６から受け取られる命令に応答して、様々なサービスと、リアルタイムカーネル２６０における他の構成要素とが協力して、処理要素における有向グラフを、データストリームを処理するために使用されるストリームハンドラ内へと構築及び構成する。エリアサービス命令は、エリアサービス２６によって管理される仮想エリアによってホストされている仮想エリアアプリケーションに従ってストリームハンドラを構成（又は設定）する。
【０１８０】
図１９は、エリアサービス２６から受け取られるリモートストリームハンドリング命令に応答して、リアルタイムカーネル２６０の構成要素によって実現される一方法の一実施形態を示す。
【０１８１】
図１９の方法に従って、リアルタイムカーネル２６０は、１つか又は複数のストリームハンドリング命令から、リアルタイムストリームハンドラの仕様をパーズする（図１９のブロック３３０）。このプロセス内において、ＳＴＲＡＷサービス２６８が、ストリームハンドラを構成（又は設定）するためのＳＯＤＡ定義を、エリアサービス２６から受け取る。ＳＴＲＡＷサービス２６８は、該ＳＯＤＡ定義を、接続及びサーバミックスマネージャ２６２と、エリア／ゾーンマネージャ２６４とに発送する。該接続及びサーバミックスマネージャ２６２は、１つか又は複数のストリームハンドリング命令から、入力ソース識別子と、出力シンク識別子と、１つか又は複数のデータ処理オブジェクトの各々におけるそれぞれの識別子とを、パーズする。
【０１８２】
接続及びサーバミックスマネージャ２６２は、前記複数識別子のうちの幾つかの識別子のそれぞれに対応するリアルタイムストリームハンドリングオブジェクトをインスタンス化する（図１９のブロック３３２）。接続及びサーバミックスマネージャ２６２は、そのインスタンス化されたオブジェクトを、トランスポートバス２７６に登録（又は記録）する。
【０１８３】
トランスポートバス２７６は、仕様に従って、インスタンス化されたリアルタイムストリームハンドリングオブジェクトのうちの幾つかを含む有向グラフを生成する（図１９のブロック３３４）。エリア／ゾーンマネージャ２６４は、オーディオ計算ＳＯＤＡ定義を、該有向グラフ内における、指定されたオーディオ計算オブジェクトに対して送る。
【０１８４】
ＳＴＲＡＷサービス２６８は、入力ソース識別子に対応する入力ソースからリアルタイムデータストリームを受け取る（図１９のブロック３３６）。ＳＴＲＡＷサービス２６８は、リアルタイムデータストリームを、メディアサービス２７１に送り、該メディアサービス２７１は、該ストリームを処理して、それをトランスポートバス２７６に送る。トランスポートバス２７６は、ストリームハンドラの処理グラフ要素を順に実行して、リアルタイムデータストリームの指定処理を実施する。
【０１８５】
ストリームハンドラは、出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する（図１９のブロック３３８）。該結果データストリームは、次いで、クライアントネットワークノードのレンダリング構成要素に送られる。
【０１８６】
６．リアルタイムカーネルのサービス及び他の構成要素
リアルタイムカーネル２６０の構成要素は、サービス、プラグイン、及びライブラリを含む。
【０１８７】
ａ．コンプレッサ（Compressor）ライブラリ
【表１】
0005721634.tif 000002
コンプレッサライブラリは、伝送データのための、オプションの圧縮レイヤを実現する。プロトコルヘッダか又はリンクネゴシエーション交換を圧縮することは意図されていない。
【０１８８】
コンプレッサライブラリは、ＳＯＤＡチャンネルサービス２７０によって、及び、メディアサービス２７１によって、使用される。暗号化が設定される時には、これらのサービス２７０、２７１は、２つのコンプレッサインスタンスと、データが通るパイプチャンネルとを生成する。一方のコンプレッサインスタンスは送信用に使用され、他方のコンプレッサインスタンスは受信用に使用される。
【０１８９】
コンプレッサライブラリは、バリアントごとに設定される圧縮／解凍プラグインを使用する。圧縮バリアントをネゴシエートして、それをコンプレッサに提供することは、サービス次第である。
【０１９０】
ｂ．オーディオストリームサービス（Audio Stream Service）
【表２】
0005721634.tif 000003
幾つかの実施形態において、オーディオストリームサービス２７２は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。
【０１９１】
オーディオストリームサービス２７２は、オーディオストリームミキシングを管理する。オーディオストリームサービス２７２は、オーディオプロセッシンググラフ要素（AudioComponentオブジェクトとしても呼ばれる）を生成し且つ設定（又は構成）するためのＡＰＩｓを画定する。該オーディオプロセッシンググラフ要素は、エリア／ゾーンマネージャ２６４によって操作される。オーディオストリームサービス２７２は、トランスポートバス２７６のクライアントである。全てのオーディオプロセッシンググラフ要素は、トランスポートバス２７６に登録（又は記録）される。
【０１９２】
オーディオプロセッシンググラフ要素は、以下のＡＰＩコールを介して、プラグインマネージャ２６６（PlugInMgr）通じて生成される。
PlugInMgr::APIEnumerate（guiPluginApi）
PlugInMgr::VariantEnumerate（guidIdentifier, guidPluginApi）
PlugInMgr::CreateInstance（guidIdentifier, guidPluginApi, guidVariant）
PlugInMgr::CreateInstance()ＡＰＩの起動が、ＡＰＩの所望バリアントのインスタンスを表すguidPluginをもたらす。
【０１９３】
オーディオプロセッシンググラフ要素のために使用されるプラグインＡＰＩｓは、
AudioMix（オーディオミックス）
AudioSource（オーディオソース）
AudioInsert（オーディオインサート）
AudioSend（オーディオセンド）
である。コーラー（caller）が、バリアントを提供し、該バリアントは、オーディオストリームサービス２７２によって単に送られる。該バリアントは、仮想エリアアプリケーション内において画定（定義）されたものとして、オーディオプロセッシンググラフ要素の一実現形態を表す。オーディオストリームサービス２７２は、次いで、プラグインインスタンス（guidPlugin）をカプセル化するAudioComponentオブジェクト（オーディオ構成要素オブジェクト）を生成する。該AudioComponentは、プラグインマネージャ２６６を使用して、プラグインのメソッドにアクセスする。該オーディオストリームサービス２７２は、各オーディオＡＰＩごとに、すなわち、
AudioMix（オーディオミックス）
AudioSource（オーディオソース）
AudioInsert（オーディオインサート）
AudioSend（オーディオセンド）
ごとに、コレクトタイプの導出AudioComponentを生成する。
AudioComponentオブジェクトは、トランスポートバス２７６に登録（又は記録）される。トランスポートバスＡＰＩは、複数構成要素をグラフ内にリンクさせるために使用される。該AudioComponentＡＰＩは、トランスポートバス２７６及びエリア／ゾーンマネージャ２６４の動作をサポートする。ベースクラスAudioComponentは、AudioSource（オーディオソース）のＡＰＩとAudioSink（オーディオシンク）のＡＰＩとを有し、それらＡＰＩは両方とも、同じプラグインの態様である。
【０１９４】
ｃ．ＳＴＲＡＷサービス
【表３】
0005721634.tif 000004
（ｉ）概要
いくつかの実施形態において、ＳＴＲＡＷサービス２６８は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。
【０１９５】
ＳＴＲＡＷサービス２６８は、ＳＴＲＡＷトランスポートプロトコルを実現する。該ＳＴＲＡＷトランスポートプロトコルは、コネクションレス・トランスポート・プロトコル（例えば、ＵＤＰ）上のネットワークノード間において、接続配向された暗号化された安全なソケット接続を可能にする。ＳＴＲＡＷトランスポートプロトコルは、固定長のグローバル固有識別子（ＧＵＩＤｓ）を用いて、全記録と、該記録内の全フィールドタイプとを識別する。例えば、幾つかの実施形態において、ネットワークノード（又はステーション）が、IP_Address（ＩＰアドレス）及びPort（ポート）によって画定される。これらの実施形態において、ＳＴＲＡＷステーション識別記録は、下記ＧＵＩＤｓすなわち｛ＧＵＩＤ１、ＧＵＩＤ２、ＧＵＩＤ３、ＧＵＩＤ４、ＧＵＩＤ５、ＧＵＩＤ６｝のセットによって、特定のネットワークノードを画定する。ここで、
●ＧＵＩＤ１は、ＳＴＲＡＷ記録を、ＳＯＤＡ記録として識別する。
●ＧＵＩＤ２は、ＳＴＲＡＷ記録を、ネットワークノード識別記録として識別する。
●ＧＵＩＤ３は、ＩＰアドレスフィールドタグである。
●ＧＵＩＤ４は、ネットワークノードのＩＰアドレスである。
●ＧＵＩＤ５は、ポート番号フィールドタグである。及び、
●ＧＵＩＤ６は、ネットワークノードのポート番号である。
これらの実施形態において、ステーション識別記録は、小さなサイズに容易に圧縮可能なバイナリデータからなる。幾つかの実施形態において、フィールドタグを省くことによって、１つか又は複数のＳＴＲＡＷ記録のサイズを、更に低減することができる。これらの実施形態において、ＳＴＲＡＷ記録の送り手（トランスミッタ）と受け手（レシーバ）との両方が、ＳＴＲＡＷ記録のフォーマットを知るので、任意のフィールドタグを参照することなく、フィールド値の意味が知られることとなる。
【０１９６】
図２０を参照すると、ＳＴＲＡＷサービス２６８は、トランスポートストリーム３４２上のセッション３４０を管理する。幾つかの実施形態において、ＳＴＲＡＷセッションのコンテキスト内のストリームは、｛ＩＰ、ポート｝アドレスの対（ペア）とトランスポートＧＵＩＤとによって画定される。あるセッションは、零か又は１つ以上の論理チャンネルからなり、ここで、あるチャンネルは、特定のカーネルマネージャ（例えば、Ｓｏ３Ｄグラフィックスエンジン２７４、接続及びサーバミックスマネージャ２６２、及びエリア／ゾーンマネージャ２６４）に適切な記録のシーケンスである。複数のカーネルマネージャが、チャンネルごとに識別（又は区別）されて、同じストリームから記録を受け取ることができる。
【０１９７】
ＳＴＲＡＷサービス２６８は、２種類のチャンネルを管理する。すなわち、ストリーミングデータ（例えば、オーディオ）を含むメディアチャンネルと、定義（又は命令）のＳＯＤＡ記録を含むＳＯＤＡチャンネルと、を管理する。ＳＴＲＡＷ記録は、ストリーム上のＳＯＤＡ記録とメディア記録とをカプセル化する。ＳＴＲＡＷ記録は、暗号化され、シーケンス化され、メッセージ整合性フィールドを含む。該シーケンスは、記録ソースか又は目的から独立している、すなわち、それは、順序狂い（又は故障）か又は記録失敗を検出するために使用されるリンクレベル機能である。
【０１９８】
ＳＴＲＡＷ記録は、チャンネルごとに識別される。ＧＵＩＤｓが、チャンネル識別子として使用される。ＳＯＤＡ及びメディア記録は、ＳＴＲＡＷ記録カプセル化にかかわりなくストリームとして、チャンネルレベルにおいて圧縮され得る。各ＳＯＤＡ記録は、１つか又は複数のＳＯＤＡ定義３４４を含む。ＳＯＤＡ定義の例は、処理グラフ要素（例えば、AudioMix（オーディオミックス）及びAudioEffect（オーディオエフェクト））、３Ｄレンダリングアセット（例えば、テクスチャ及びメッシュ）、及びＲＤＳ（例えば、アバターモーションチェックポイント）を含む。各メディア記録は、１つのメディアパケット３４６を含む。メディアパケットの例は、オーディオコーデック及びテキストを含む。
【０１９９】
アプリケーションは、周知のＧＵＩＤ  ＩＤを用いて、セッションに関するチャンネルを公開する。カーネルマネージャが、チャンネルを認可する。公開／認可モデルは、コネクションレスである。チャンネルを認可したカーネルマネージャは、チャンネル状態変化の通知と、チャンネル記録とを、（それらが到来した時に）受け取ったことを登録（又は記録）する。
【０２００】
（ｉｉ）ストリーム、対、セッション、対、チャンネル、対、記録（レコード）
ＳＴＲＡＷセッションのコンテキスト内において、ストリームは、２つのＩＰアドレス／ポート対（ペア）及びトランスポートＧＵＩＤによって画定された２つのネットワークノード間の双方向ＵＤＰソケットである。ストリームは、チャンネルのセッションをサポートする。セッションは、論理的なノード・ツー・ノードの接続である。セッションは、２つのノードのためのチャンネルを伝送する。セッションは、１つか又は複数のプロキシステーションを通過することができ、複数セッションを含めることが可能なストリーム上にわたって伝送される。
【０２０１】
チャンネルは、セッション内において２つのネットワークノード間においてＳＯＤＡか又はメディア記録を伝送する論理的な構成体である。チャンネルは、信頼性があるものとすることができるか又は信頼性が無いものとすることができ、圧縮され得るか又は非圧縮にされ得る。チャンネルのコンテンツは、コンテンツＧＵＩＤによって識別される。チャンネル記録は、同じヘッダCHANNEL_CLIENT IDを共有するＳＴＲＡＷ記録のシーケンス内において、及び、シーケンシャルなパケット番号と、ＭＡＣフィールドと共に、伝送される。ＭＡＣ計算は、一方向のみにおける所与のチャンネル上のパケットシーケンスに依存する。単一チャンネル上において伝達される全記録は、コンフィギュレーションパラメータの単一セット（例えば、｛Client、reliable、compressed｝）を共有する。単一チャンネル上の記録は、シリアルストリームとして圧縮される。信頼性がある（信頼可能な）チャンネルのみが、通常、圧縮され得る。幾つかの実施形態において、信頼性の無い（信頼不可能な）チャンネルは、各キーフレームにおいて圧縮を再開する圧縮プロセスによって、圧縮され得る。信頼性が無いチャンネル上において消失パケットがあるケースでは、そのチャンネル上の記録は、キーフレームが到着されるまでに破棄される（何故ならば、それらは、順序が狂った状態で解凍されることが不可能であるからである）。
【０２０２】
圧縮は、Compress.libを使用する。圧縮を改善するために、チャンネル定義には、プリロードデータを含めることができる。該プリロードデータは、コンプレッサを通じて実行されるが、伝達はされない。その目的は、共通のフレーズを有した圧縮状態テーブルを準備することである。キーフレームが受け取られるたびごとに、圧縮状態テーブルはリセットされて再構築される。
【表４】
0005721634.tif 000005
（ｉｉｉ）ＳＯＤＡ記録
ＳＯＤＡ記録は、イニシャルＧＵＩＤ ＩＤと、１つか又は複数のＳＯＤＡ定義とを有したネスト化された構造である。ＳＯＤＡ定義は、定義タイプと、定義長と、１つか又は複数のフィールドとを有する。該定義タイプは、周知のＧＵＩＤ（例えば、guidAsset）である。該定義長は、フィールドの全長を示す。フィールドは、タイプ指定固定フィールドと、ネスト化されたＳＯＤＡ定義との組み合わせである。すなわち、
ＳＯＤＡ記録：
guid ID
ＳＯＤＡ定義
...
ＳＯＤＡ定義：
Guid定義タイプ
long length;
［フィールド］−定義タイプに依存
フィールド：
固定フィールド
又は ＳＯＤＡ定義
例えば、
【表５】
0005721634.tif 000006
ＳＯＤＡ記録が、ＳＴＲＡＷ記録内においてカプセル化される。すなわち、
【表６】
0005721634.tif 000007
（ｉｖ）チャンネル信頼性及びリンクレベルプロトコル
ＳＴＲＡＷ記録は、番号付けられ、チャンネルＩＤを含む。パケットを受け取った後に、及び、短時間の遅延の後、そのトランスポートは、各チャンネルごとの次に期待されるパケットの番号を含むＡＣＫ（肯定応答）記録を送って、それにより、送り手（センダー）が、伝達した記録が受け取られたことを確認することができるようにし、及び、ローカルリソースを解放することができるようにする。周期的な送信の他に、このＡＣＫに対する信頼性機能は存在しない。ほとんど全ての記録がうまく受け取られると仮定すると、このスキームは、信頼性のために最小のネットワークリソースを用いる。
【０２０３】
ＭＡＣフィールドが、伝達される各ＳＴＲＡＷ記録ごとに計算される。それは、受け取り時にチェックされる。
【０２０４】
信頼性のある（信頼可能な）チャンネルについて：
もしもチャンネル内の記録が、順序が狂って受け取られた場合には、その失敗した記録に対するＮＡＣＫ（否定応答）が伝達される。ＭＡＣ障害もまた、ＮＡＣＫが結果として生じられ、該ＮＡＣＫは、期待される記録に対して伝達される。単一記録に対して、最大で４つまでのＮＡＣＫが許可され、次いで、このトランスポートは、失敗メッセージを、任意の認可カーネルマネージャに対するキューに入れて、そのチャンネル定義を消去する。
【０２０５】
信頼性の無い（信頼不可能な）チャンネルについて：
もしもチャンネル内の記録が、順序が狂って受け取られた場合には、その失敗したパケット番号が、チャンネルに対して認可した任意のマネージャに対して信号で伝達され、ＮＡＣＫは送られない。ＭＡＣ障害もまた、失敗したパケットとして、チャンネルを許可した任意のカーネルマネージャに対して指示されて、ＮＡＣＫは送られない。失敗したパケットに対する閾値は存在せず、チャンネルは、そのトランスポートによって決して閉じられない。
【０２０６】
チャンネルを「閉じる」必要性は無い。全てのカーネルマネージャが認可しない場合には、チャンネル上のデータ送信が停止する。チャンネルは論理的なエンティティであるため、オペレーティングシステムリソースは使用されない。
【０２０７】
（ｖ）公開／認可
ＳＴＲＡＷサービス２６８は、ローカル公開及び認可エントリのリストを維持する。各エントリは、
エントリを生成したローカルマネージャと、
サーバ識別子と、
チャンネル識別子と、
公開又は認可と、
（認可のための）トランスポートパラメータ
とを含む。
このリストは、｛STRAW Service, GUID_NULL, Session, Subscribe, Reliable, Uncompressed｝によって初期化される。
このようにして、ＳＴＲＡＷサービス２６８は、任意のセッションチャンネル上に到来する、全ての到来ＳＯＤＡ記録を認可する。これらは、公開及び認可定義を含む。GUID_NULLチャンネルは、決して公開されず、全ストリーム毎の周知のチャンネルＩＤによって許可されることとなる全てのサーバによってみなされる。
【０２０８】
ＳＴＲＡＷサービス２６８はまた、ローカルリスト内に遅れた認可が登録されるケースにおいて使用されるために、全ての到来した公開定義のテーブルを維持する。
｛IDCliant, IDServer, IDChannel｝
ここで、IDCliantは、チャンネルが意図されるある特定クライアントの（おそらくは零（NULL）の）ＧＵＩＤであり、IDServerは、チャンネル記録のリモートソースであり、及びIDChannelは、チャンネルの、チャンネルの周知のＧＵＩＤである。
【０２０９】
別のステーションに対する所望の接続についてのセッション定義をＳＴＲＡＷサービス２６８が受け取った時には、ＳＴＲＡＷサービス２６８は、ストリームを確立し、そのセッション定義を送り、次いで、セッションチャンネル上においてＳＯＤＡ記録内の全てのローカルテーブル公開エントリを送る。公開定義がＳＴＲＡＷサービス２６８に到着した時には、ＳＴＲＡＷサービス２６８は、その定義を、公開定義テーブル内へと入力し、次いで、公開記録内の一致チャンネルＩＤを有したローカルリスト内の各認可エントリごとにセッションチャンネル上において認可定義を送る。認可定義が到着した時には、ＳＴＲＡＷサービス２６８は、その定義についてのＳＯＤＡ記録を含むＳＴＲＡＷ記録として所与のチャンネル上において（公開アプリケーションからパイピングされる）定義更新（アップデート）を送りはじめる。記録は、複数チャンネル上において送られ得る。
【０２１０】
カーネルマネージャが、サーバとのチャンネル内に参加することを望む時には、カーネルマネージャは、任意のＳＴＲＡＷストリームが任意のサーバに存在するのか否か、認可リクエストを画定する。もしも仮想エリアアプリケーションが後に公開する場合には（すなわち、後続ストリームが確立される場合には）、ローカルテーブル内の変化が、テーブル内の公開エントリの再送をトリガする。該ローカルテーブル内の変化は、リンクの他方端において認可する任意の潜在物（latent）を自動的にトリガする。カーネルマネージャが後に認可し、且つ、公開テーブル内にエントリが存在する場合には、ＳＴＲＡＷサービス２６８は、認可リクエストを自動的に送る。このプロセスは、リンク上にチャンネルデータが送られることがレシーバ（受け手）によって望まれた場合にのみ、リンク上にチャンネルデータが送られるということを保証する。
【０２１１】
（ｖｉ）チャンネル記録発送
ＳＴＲＡＷ記録は、それらが到着すると（暗号が）解読される。もしも有効である場合には、それらの埋め込まれた記録が解凍され、次いで、全ての認可するカーネルマネージャに発送される。ローカル認可エントリのリストが調査されて、（認可トランスポート情報内の）チャンネルＩＤに一致する全エントリが、それらのメッセージキュー上の記録のコピーを受け取る。
【０２１２】
認可するカーネルマネージャは、メッセージが処理されると、該メッセージを解放する責任を負う。メッセージのバルクデータ部分はコピーされないが、ＳＴＲＡＷ記録を含んでいるオリジナルネットワークバッファを指示（ポイント）する。各カーネルマネージャは、メッセージを解放し、それにより、それらメッセージが全て解放された時に、ネットワークバッファが、リサイクルされ得ることとなる。
【０２１３】
（ｖｉｉ）ＳＴＲＡＷストリームの確立
クライアントネットワークノードは、ストリーム上のセッションを、サーバ及びピアネットワークノードに接続する。このプロセス内において、各パーティは、自身が本物であることを他に対して認証する。
【０２１４】
ＳＴＲＡＷストリームは、信頼性があり且つ確実なものである。このことは次のことを意味する。すなわち、
●クライアントネットワークノードは、パートナーの正体（アイデンティティ）を確信している。
●メッセージは、個人用（プライベート）である。
●受け取ったメッセージは、送られた（どこかの中間地点で変更を受けていない）保証できるメッセージである。及び、
●同じやり方で、両パーティによってメッセージが解釈されることが可能であろう。
【０２１５】
セッション定義の一部は、ストリームトランスポートプラグインＧＵＩＤｓのリストである。定義に応答するクライアントネットワークノードが、少なくとも１つのＧＵＩＤｓをサポートする場合には、該クライアントネットワークノードは、プラグインをロードして、セッションを確立するために該プラグインを使用する。定義を生成するサーバは、含まれる各クライアントネットワークノードのサポートリストを調査することができ、及び、定義内に含めるトランスポートプラグインＧＵＩＤを決定することができる。
【０２１６】
セッション定義の一部は、ストリーム暗号化プラグインＧＵＩＤｓのリストである。定義に応答するクライアントネットワークノードが、少なくとも１つのＧＵＩＤｓをサポートする場合には、該クライアントネットワークノードは、プラグインをロードして、セッションを暗号化するために該プラグインを使用する。定義を生成するサーバは、含まれる各クライアントネットワークノードのサポートリストを調査することができ、及び、定義内に含めるストリーム暗号化プラグインＧＵＩＤを決定することができる。
【０２１７】
（ｖｉｉｉ）サーバストリーム
幾つかの実施形態において、クライアントネットワークノード３４４からサーバ３４６へのストリームは、ディレクトリサーバか、マップサーバか、又はエリアサーバなどのサーバから取得されるアドレスを用いて確立される。ストリームの例示的な目的は、プレゼンス情報を得ることと、マップサーバからのレンダリング定義を用いてパブリック空間をレンダリングすることと、及び、エリアサーバからのレンダリング定義を用いて仮想エリアをレンダリングすることと、を含む。
【０２１８】
図２１は、一方法の一実施形態を示しており、該方法によって、クライアントネットワークノード３４４とサーバ３４６との間において、サーバストリームが確立される。この方法に従って、クライアントネットワークノード３４４は、クライアント認証情報（クレデンシャル）とストリームＩＤとを、サーバ３４６に対して送る（図２１のブロック３４８）。サーバ３４６は、サーバ認証情報（クレデンシャル）とプリ・マスター・シークレットとで返答する（図２１のブロック３５０）。ストリーム生成時に、接続するクライアントネットワークノード３４４が、暗号セットをネゴシエートして、次いで、その識別トークンを提示することによって本物であることを認証する（図２１のブロック３５２）。サーバ３４６は、クライアントネットワークノード３４４にとって適切なサーバトークンを提示する（ストリームＩＤにより選択されて、及び、アカウントサーバによりサーバ３４６に伝達される）（図２１のブロック３５４）。
【０２１９】
（ｉｘ）クライアントストリーム
図２２を参照すると、各セッションが、発行サーバによって生成される新たなＧＵＩＤによって識別される。ストリーム内に含まれるネットワークノードは、セッション定義を通知され、及び、セッションＧＵＩＤのハッシュと、ストリーム暗号化キーとしてのクライアントＩＤとを用いて、各ネットワークノードはその他のものと伝達し合う。図２２内に示された例示的な実施例において、エリアサーバ３５６が、２つのクライアントネットワークノード３５８と３６０との間のセッションを画定する。クライアントネットワークノード３５８、３６０の各々は、エリアサーバに対して本物であることを認証して、（セッション定義を含めて）定義を伝達するために、暗号化したチャンネルを使用する。クライアントネットワークノード３５８、３６０にとって、いかなる更なる認証の情報も互いに共有する必要が無い。クライアントネットワークノード３５８、３６０の各々は、それぞれのＧＵＩＤを用いて、サーバ３４６によって識別される。各セッション定義は、クライアントネットワークノード３５８と３６０との両方を、それらのＧＵＩＤｓによって識別する。セッション上において公開するチャンネルを決定するために、クライアントネットワークノード３５８、３６０は、この情報を使用することができる。
【０２２０】
クライアントネットワークノード３５８、３６０のうちの一方について、ストリームか又はセッションが失敗した場合には、そのクライアントネットワークノードは、SessionFailureＳＯＤＡ定義を用いて、その失敗を、エリアサーバ３５６に通知する。失敗の理由には、例えば、互換性のあるトランスポートが無かったためと、利用可能なチャンネルが無かったためと、信頼性のある（信頼可能な）チャンネルが失敗したためと、が含まれる。幾つかの実施形態において、エリアサーバ３５６は、ストリームを再ルーティングすることを試みることによって（例えば、プロキシか又はサーバを通じてオーディオストリームを反射（又は反映）させることによって）、SessionFailureＳＯＤＡ定義に応答する。
【０２２１】
幾つかの実施形態において、クライアントネットワークノード３５８、３６０は、（ＳＴＵＮに省略される）シンプル・トラバーサル・オブ・ＵＤＰ・スルー・ネットワーク・アドレス・トランスレータズ（ＮＡＴｓ）ネットワークプロトコルに従って、Ｐ２Ｐで伝達を行う。これらの実施形態において、クライアント３５８、３６０は、それぞれのＮＡＴｓを通じて動作する。サーバ（例えば、エリアサーバ３５６）は、ＳＴＵＮサーバとして振る舞い、ＮＡＴｓの公衆側のネットワーク内の２つのＩＰアドレスに耳を傾け、ＮＡＴｓの外側におけるマッピングされたＩＰアドレス及びポートを報告する。この情報から、クライアントネットワークノード３５８、３６０は、プレゼンスと特定タイプのＮＡＴとを見出すことができ、及び、マッピングされた（外部の）ＩＰアドレス（ＮＡＴアドレス）と、リモートホストに対する、クライアントのＵＤＰ接続について、ＮＡＴが割り当てたポート番号とを取得することができる。クライアントネットワークノード３５８、３６０は、次いで、外部ＩＰアドレスを使用して、ＵＤＰプロトコルに従って互いにＰ２Ｐで伝達し合う。ＳＴＵＮプロトコルに関する追加的な詳細事項を、Jonathan Rosenberg他による「STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)」，インターネット標準化への提唱 RFC 3489 （2003年3月）から得ることができる。
【０２２２】
（ｘ）キープ・アライブ（Keep-Alive）
幾つかの実施形態において、ストリームが確立されると、クライアントネットワークノード上のトランスポートが、周期性アイドルのStreamKeepAlive定義を発行する。パートナーネットワークノードは、許容可能な最大インターバルであると見積もるタイムアウトセットであれば何でも、該タイムアウトセットでStreamKeepAlive定義を返す。このメッセージの目的は、任意のＮＡＴファイアウォール・ピンホールをアクティブのまま保持することである。パートナーネットワークノードは、所望のタイムアウトを記録し、及び、該インターバルを毎回延ばす。次のメッセージが、異なるＩＰ及びポートから到来した場合には、ＮＡＴは、タイムアウトされて、該キープアライブによって新たなピンホールが生成されることとなる。該インターバルは、従って短くされるはずである。
【０２２３】
アイドルタイマーが期限切れとなり且つメッセージが受け取られなかったためか、或いは、キープアライブメッセージに対して返答が受け取られなかったためかのいずれかの理由により、StreamKeepAliveが失敗していることに、クライアントネットワークノードか又はパートナーネットワークノードのいずれかが気づいた場合には、それは、非常に短いタイムアウトを有した即時StreamKeepAliveを発行する。これは、ドロップしたステーションとドロップしたＵＤＰパケットとを区別するためである。何回かの再試行（リトライ）が試みられ得る。該再試行の後に、返答が受け取られない場合には、失敗したセッションＩＤ（複数可）を有したローカルStreamFailureイベントが生成されて、そのストリーム定義が削除される。
【０２２４】
幾つかの実施形態において、ＳＴＲＡＷサービス２６８は、自動的にリンクの再確立を行うことによって、及び、アプリケーション（又はクライアント）の介入無しに、ローカル公開及び認可テーブルエントリに基づいて、全ての認可及びデータフローを再リンクさせることによって、壊れたリンクに応答する。
【０２２５】
ｆ．メディアチャンネルサービス
【表７】
0005721634.tif 000008
幾つかの実施形態において、メディアチャンネルサービス２７１は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。
【０２２６】
メディアチャンネルサービス２７１は、音声（オーディオ）とテキストチャットとを確実にＰ２Ｐで伝達させるために用いられる。メディアチャンネルサービス２７１は、ストリームを圧縮するよう設定されていれば、そのようにすることとなる。コンプレッサライブラリは、リクエストされると圧縮を遂行する。メディアチャンネルサービスは、バリアントにより設定されたオーディオコーデックプラグインを用いる。バリアントＧＵＩＤは、ストーム定義から取得される。
ｇ．ＳＯＤＡチャンネルサービス
【表８】
0005721634.tif 000009
幾つかの実施形態において、ＳＯＤＡチャンネルサービス２７０は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。
【０２２７】
ＳＯＤＡチャンネルサービス２７０は、ＳＯＤＡ定義を確実にＰ２Ｐで伝達させるために用いられる。ＳＯＤＡチャンネルサービス２７０は、ストリームを圧縮するよう設定されていれば、そのようにすることとなる。コンプレッサライブラリは、リクエストされると圧縮を遂行する。これは、データ構造がネットワークバイト順序に変換される場所である。幾つかの実施形態において、リトルエンディアン（インテル）ネットワークバイト順序が用いられる。
【０２２８】
ｈ．接続及びサーバミックスマネージャ
【表９】
0005721634.tif 000010
幾つかの実施形態において、接続及びサーバミックスマネージャ２６２は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。
【０２２９】
幾つかの実施形態において、接続及びサーバミックスマネージャ２６２は、ローカル会議スケジューリングツールのために利用可能な、手続きの（プロシージャの）ＡＰＩをエクスポートして、エリアサーバとのセッションを開始する。このＡＰＩは、セッションを生成するためのイニシャルエントリポイントである。接続及びサーバミックスマネージャ２６２は、アクティブセッション定義を公開（又は発行）する。エリアサーバは、ＳＯＤＡチャンネル上において、該セッション定義を受け取る。
【０２３０】
接続及びサーバミックスマネージャ２６２はまた、オーディオグラフプロセッシング要素からオーディオグラフを構築する。該オーディオグラフプロセッシング要素は、ＳＯＤＡ記録を介して直接的にか、或いは、ＶＳＤＬスクリプトを介して間接的に、のいずれかで、エリアサービス２６によって設定（又は構成）される。任意のケースにおいて、ＳＯＤＡ定義は結果である。幾つかの実施形態において、接続及びサーバミックスマネージャ２６２は、エリアサービス２６によって送られた以下のＳＯＤＡ定義を処理する。
●AudioDevice（オーディオデバイス）
●AudioStream（オーディオストリーム）
●AudioMix（オーディオミックス）
●AudioEffect（オーディオエフェクト）
●AudioCalculation（オーディオ計算）
●AudioRecord（オーディオ記録）
●AudioPlayback（オーディオ再生）
これらのＳＯＤＡ定義は、以下のパラグラフ内において説明される。
【０２３１】
AudioDeviceは、AudioSource（オーディオソース）として、（トランスポートバス２７６の構成要素である）オーディオトランスポートバスに登録（又は記録）されることとなるローカルオーディオデバイスの定義である。標準ローカルオーディオソース（マイクロホン、ヘッドセット）か又は登録されたローカルオーディオ記録（ファイル、ストリーミングＣＤオーディオ）の周知ＩＤが、インスタンスＩＤ（複数が利用可能であるのであればそのヘッドセット）と共に提供される。オーディオトランスポートバス上で使用されるために新たなＩＤがデバイスに提供される。接続及びサーバミックスマネージャ２６２は、周知のオーディオソースＩＤを用いて、AudioDeviceプラグインの適切なバリアントのインスタンスを作成して、それをオーディオトランスポートバスに渡す。
【０２３２】
AudioStreamは、AudioSource（オーディオソース）として、オーディオトランスポートバスに登録されることとなる到来するオーディオストリームの定義である。到来するオーディオストリームは、伝送されるチャンネルＩＤによって画定される。（エリア／ゾーンマネージャ２６４によって行われる）動的ミキシングの目的のために、ストリームをアバターＩＤに関連付けることが必要である。デバイスは、そのオーディオトランスポートバスＩＤとして、チャンネルＩＤを使用する。接続及びサーバミックスマネージャ２６２は、チャンネルタイプＩＤに基づいてAudioStreamプラグインの適切なバリアントのインスタンスを作成して、それをオーディオトランスポートバスに渡す。
【０２３３】
AudioMixは、AudioSourceプラグインとAudioSinkプラグインとの組み合わせの定義である。該定義は、プラグインＡＰＩ ＩＤ、バリアントＩＤ、１つか又は２つのオーディオトランスポートバスソースＩＤｓ、及び（エリア／ゾーンマネージャ２６４について）関連付けられたアバターＩＤを、完全に指定する。接続及びサーバミックスマネージャ２６２は、提供されたＩＤｓに基づいて、AudioMixプラグインの指示バリアントを生成して、それをオーディオトランスポートバスに渡す。
【０２３４】
AudioEffectは、AudioSourceプラグインとAudioSinkプラグインとの組み合わせの定義である。該定義は、プラグインＡＰＩ ＩＤ、バリアントＩＤ、１つのオーディオトランスポートバスソースＩＤｓ、及び（エリア／ゾーンマネージャ２６４について）関連付けられたアバターＩＤを、完全に指定する。接続及びサーバミックスマネージャ２６２は、提供されたＩＤｓに基づいて、AudioEffectプラグインの指示バリアントを生成して、それをオーディオトランスポートバスに渡す。
【０２３５】
AudioCalculationは、AudioCalculationプラグインの定義である。該定義は、プラグインＡＰＩ ＩＤ、バリアントＩＤ、関連付けられたオーディオトランスポートバスAudioSourceオブジェクトＩＤ、構成要素の自身のオーディオトランスポートバスＩＤ、及び２つの状態指定パラメータを、完全に指定する。AudioCalculationオブジェクトは、オーディオチェーン（鎖）内においてオーディオデータを直接処理していない。その代りに、AudioCalculationオブジェクトは、「ドメインオブジェクトモデル」、手動設定（ＨＵＤ内のミュート、ボリューム制御）などの外部情報、アバター位置及び動作（モーション）、リバーブ空間、及びＷｉｎｄｏｗｓ（登録商標）設定（インスタンスのためのコントロールパネル内のスピーカ選択）に基づいて、他のオーディオグラフ構成要素のための設定（セッティング）を計算する。AudioCalculationオブジェクトは、通常のオーディオレンダリングに比べるとまれな、異なるレンダリングタイマーイベント上において実行される。これは、それらが計算のための入力として使用するデータが、ゆっくりと変化するからである。接続及びサーバミックスマネージャ２６２は、提供されたＩＤｓに基づいて、AudioCalculationプラグインの指示バリアントを生成して、それをオーディオトランスポートバスに渡す。
【０２３６】
AudioRecordは、AudioSinkプラグインの定義である。該定義は、オーディオグラフ内のポイントを、記憶装置構成要素にリンクさせる。レンダリング時において、AudioRecord構成要素は、レンダリング自体をトリガしない。しかしながら、別のAudioSink構成要素によってレンダリングがトリガされた場合には、そのレンダリングされるオーディオデータは、指示された記憶装置構成要素に転送するためにAudioRecordオブジェクトに提供される。接続及びサーバミックスマネージャ２６２は、AudioSinkクプラグインを生成して、それをオーディオトランスポートバスに渡す。
【０２３７】
AudioPlaybackは、AudioSourceプラグインの定義である。該定義は、オーディオグラフ内のポイントを、記憶装置構成要素にリンクさせる。オーディオチェーン（鎖）が、この構成要素を参照する場合には、フレーム準備時間において、１つのタイムスライスに値するオーディオデータが、記憶装置構成要素からフェッチされて、この構成要素の出力として提供される。接続及びサーバミックスマネージャ２６２は、AudioSourceプラグインを生成して、それをオーディオトランスポートバスに渡す。
【０２３８】
接続及びサーバミックスマネージャ２６２は、エリアサーバから受け取った定義に従って、トランスポートバス２７６とオーディオストリームサービス２７２とを設定する。各定義は、（オーディオストリームプラグインか、オーディオ計算プラグインか、又はオーディオソースプラグインである）オーディオプロセッシンググラフ要素の作成を結果として生じさせる。ローカルオーディオデバイス（例えば、マイクロホン、スピーカ（複数可）、及びSkypeオーディオ）は、ＨＩＤコンフィギュレーションツールを通じて選択された設定（セッティング）に従って構成（又は設定）され得る。該ＨＩＤコンフィギュレーションツールによって、ユーザが、３Ｄ共同空間をナビゲートするためにキーボード及びマウスオプションを選択することが可能になる。例えば、ショートカットキーを定義することができ、マウスジェスチャーが、アバターの振る舞いに跳ね返る（バウンドする）。幾つかの実施形態において、オーディオ出力選択は、オーディオ及び音声のための、Ｗｉｎｄｏｗｓ（登録商標）コントロールパネル「サウンドとオーディオデバイス」設定に従う。このことは、通常のＶＯＩＰ会話に対して使用されるのと同じオーディオ設定が、仮想エリア通信に対しても使用されるということを保証する。
【０２３９】
エリアサーバセッショントランスポート失敗のイベントでは、接続及びサーバミックスマネージャ２６２は、回復を試みる。それは、セッションを壊して、異なるエリアサーバ上にそれを再ランチさせる。メディアストリーム失敗のイベントでは、接続及びサーバミックスマネージャ２６２は、回復を試みる。このプロセスでは、接続及びサーバミックスマネージャ２６２は、クライアントネットワークノードに再接続することを試みる。該再接続の試みが失敗した場合には、接続及びサーバミックスマネージャ２６２は、エリアサーバに対して聞き取り不可能として通信者状態を画定する。
【０２４０】
（ｉ）エリア／ゾーンマネージャ
【表１０】
0005721634.tif 000011
幾つかの実施形態において、エリア／ゾーンマネージャ２６４は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。  
【０２４１】
エリア／ゾーンマネージャ２６４は、ゾーン定義及びアバター位置定義に従って、オーディオストリームサービス２７２ミックスパラメータを調整する。エリアサービス２６は、ＳＯＤＡ定義を、エリア／ゾーンマネージャ２６４に公開（又は発行）し、該ＳＯＤＡ定義は、そのアバターのモーションに応答するオーディオプロセッシンググラフ要素に各アバターを関連付ける。アバター位置データが使用されて、仮想エリア内に参加しているクライアントネットワークノードの各々からのオーディオストリームが（各通信者が、ローカルゾーン定義に従って、正しいオーディオ位置において正しいボリュームで他の通信者を聞くことが可能になるという手法において）ミックスされる。オーディオプロセッシンググラフ要素に提供されるパラメータ値は、典型的には、（相対位置、通信者の配向、ゾーン定義、仮想エリアのオーディオ特性、及び、通信者によって設定される手動設定（例えば、ミュート、ボリューム）を含む）計算に依存する。
【０２４２】
幾つかの実施形態において、エリア／ゾーンマネージャ２６４は、以下のＳＯＤＡ定義を処理する。該ＳＯＤＡ定義は、シミュレートされるオーディオ空間の全体的（グロス）特徴に関連する。該シミュレートされるオーディオ空間内において、現在のオーディオグラフがレンダリングされている。
●AudioReverb（オーディオリバーブ）
●AudioAperture（オーディオアパーチャ）
●AudioObstruction（オーディオ障害物）
これらのＳＯＤＡ定義が、以下のパラグラフ内において説明される。
【０２４３】
AudioReverbは、「空洞（中空空間）」であるリバーブ空間の定義であり、それにより、あるリバーブ（残響）か又はエコーエフェクトを生じる結果となる。該定義は、ある位置での単一ジオメトリを識別する。この定義は、ドメインオブジェクトモデル（ＤＯＭ）内に、全てのAudioCalculationオブジェクトに対して、それらAudioCalculationオブジェクトが呼び出された時に、提供される。
【０２４４】
AudioApertureは、２つのリバーブ空間の間の接続の定義である。それは、２つのリバーブ空間をＩＤにより識別して、それらの間のオーディオ接続を指定する。ある位置及び配向において、該接続は円（輪）である。この定義は、ドメインオブジェクトモデル（ＤＯＭ）内に、全てのAudioCalculationオブジェクトに対して、それらAudioCalculationオブジェクトが呼び出された時に、提供される。
【０２４５】
AudioObstructionは、音の伝搬に対する物理的なバリアの定義である。ある位置において、それは球としてモデル化される。この定義は、ドメインオブジェクトモデル（ＤＯＭ）内に、全てのAudioCalculationオブジェクトに対して、それらAudioCalculationオブジェクトが呼び出された時に、提供される。
【０２４６】
上述のＳＯＤＡ定義は、AudioCalculationオブジェクトに対する入力であり、それらは、スクリプトにすることが可能な計算プラグインであり、以下のパラメータを、すなわち、
サウンドソースとサウンドシンクとの両方の物理特性、
ソース及びシンクについてのゾーン定義、
手動設定（個別のミュート、ボリューム／ＡＧＣ）、
環境設定（グローバルなミュート、ボリューム）、及び、
部屋のオーディオ特性
を、引数として取得する。
【０２４７】
初期のAudioCalculationプラグインは、次のものを含む。すなわち、
Manual Mute（手動ミュート）、
Manual Volume（手動ボリューム）、
Location（位置）、
Doppler shift（ドップラーシフト）、
Orientation（配向）（正面を向いている／外を向いている）、
Zone（ゾーン）、及び、
Room Reverb（部屋の残響）
を含む。
【０２４８】
幾つかの計算は、個々のオーディオソースにとって適切であり、幾つかの計算は、部屋全体の最終ミックスにとって適切である。仮想エリアアプリケーションは、新たなプラグインを、オーディオ定義内においてそれらを参照することにより、自由自在に導入することができる。エリア／ゾーンマネージャ２６４は、それが所有していないプラグインを認可することとなり、エリアサーバからそれらの定義を受け取ることとなる。
【０２４９】
【表１１】
0005721634.tif 000012
図２３は、４人の通信者のオーディオプロセシンググラフ３８０の一例を示す。該オーディオプロセシンググラフ３８０は、エリアサーバアプリケーションによって指定され得る。オーディオプロセッシンググラフ要素（例えば、コーデック、ネットワーク、フィルタリング、特殊エフェクト、及びエラー隠蔽グラフ要素）は、（それらは典型的には、完全なオーディオプロセッシンググラフ内に存在するが）単純化のため、この例では除外されている。
【０２５０】
矢印３８２、３８４、３８６、３８８、３９０は、AudioSourceを表しており、それらは、全てドライモノラルオーディオソースである。アバター１、２、及び３は、リモートクライアントネットワークノードからのネットワークストリームである。ささやき声は、指定ソースからの、オプションのローカルオーディオフィードである。オーディオ・パンナーズ（又はスクロールする音声）の左側の全ては、加えられる一連のエフェクトを有したモノラルである。これらのエフェクトは、ゾーン及びスピーカ配向に従ってボリュームを調整することと、スピーカとリスナーの相対速度の根拠となるドップラーシフトを提供することと、を含む。オーディオ・パンナーズ（又はスクロールする音声）は、各々の調整されたモノラル信号を、仮想エリアにおける現在占有されたゾーンの３６０度オーディオ空間内に位置付ける。リスナーに相対するスピーカの位置が使用される。オーディオ・パンナー（又はスクロールする音声）の右側の全体が、５．１オーディオである。部屋オーディオプロセッシンググラフ要素は、オーディオ信号に関する部屋音響特性（又は部屋音響効果）のエフェクトを計算する。それは、スピーカ及びリスナーの位置、部屋の特性、及び障害物を考慮する。最終的なミックスオーディオプロセッシンググラフ要素は、全ての処理したオーディオ信号を一緒に追加して、結果ストリームを生成する。該結果ストリームは、指定されたオーディオ出力デバイス（すなわち、ＳＰＫＲ。該ＳＰＫＲは、図示された例の中のローカルなスピーカ（複数可）を表す）に対してパイピングされる。
【０２５１】
幾つかのオーディオプロセッシンググラフ要素（inserts）は、固定パラメータを有するものであり、従って、どのランタイム計算プラグインスクリプトにも関連付けられない。これらの要素は、エコー及びノイズキャンセル、自動利得制御（ＡＧＣ）、サイレンス検出、固定ソースパンナー、及び最終ミックスを含む。
【０２５２】
ｊ．アセットキャッシュサービス
【表１２】
0005721634.tif 000013
幾つかの実施形態において、アセットキャッシュサービス２７５は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。  
【０２５３】
アセットは、ＧＵＩＤによってインデックス付けられたローカルデータベース内か又はテーブルサービス内に記録される。アセットデータは、不定形記憶装置プール内に保持される。特定アセットに関するＩＤは、決して変化しない。従って、如何なるキャッシュ一貫性問題も回避される。アセットは、ＳＯＤＡ記録によってキャッシュされる。このことは、大きなアセットを、多くの部分（ピース）において格納することができるということを意味する。何故ならば、ＳＯＤＡ記録は、ＵＤＰ ＭＴＵ（約１０００バイト）にサイズが制限されるからである。アセットキャッシュは、ＧＵＩＤによって、及び、ＳＯＤＡ記録内にファイリングされているデータオフセットによって、記録をインデックス付けなければならない。
【０２５４】
（ｉ）アセットインデックス
アセットは、クラステーブル内において、及び、オプションの属性テーブル内において、表される。
【０２５５】
アセットクラステーブルは、アセットＧＵＩＤを、クラスＧＵＩＤと、データ格納参照とにマッピングする。
【表１３】
0005721634.tif 000014
アセット属性テーブルは、タグ付けされた属性スカラー値を、アセットに対して添付する。
【０２５６】
（ｉｉ）データ格納（記憶）
レンダリングプラットフォームに基づく仮想エリアのアセット記憶装置インターフェースは、データを積み重ねること（heaping）と、トランザクション的に別個インデックスを格納することと、未使用のアセット記憶装置を再使用するためにスカベンジングすることと、を可能にする。データベースとファイルとの組み合わせは、アセット記憶装置としての機能を果たすこととなる。データベースは、２つのテーブルを含む。すなわち、記憶装置（又は記憶）割り当てテーブルと、ＧＵＩＤ／オフセットインデックスとを含む。前記ファイルが、設定されたキャッシュサイズに従って固定サイズで生成される。アセットが、ヒープ・バケット（heap-bucket）アルゴリズム用いてファイル内に格納される。
【０２５７】
アセットキャッシュデータ格納は、ＧＵＩＤ及びオフセットによって、インデックス付けられることとなる。前記ヒープ（積み重ね）は、２つの中に、データサイズごとにバケット内へとパーティションに分けられる。最小バケットは、３２バイトであり、最大バケットは、２キロバイトであり、それらは総計で７バケットにされる。各バケットは、同量の記憶装置（又は記憶量）が割り当てられ、このことは、各連続するバケット内に半分ほどのアイテムが存在するということを意味する。各バケットは、記憶バジェットを満たすために十分なアイテムをハッシュするのに十分に大きいヒープテーブルであり、このことは、ハッシュコリジョンの変化を合理的に小さくさせる。
【０２５８】
（ｉｉｉ）ＳＯＤＡアセット定義記録
アセットは、伝送のために、ＳＯＤＡ記録内にカプセル化される。定義は、アセットＧＵＩＤと、そのコンテンツ（体系化されていないデータ）と、（もしもそれが１記録（１レコード）よりも大きい場合には）そのオフセットと、属性のテーブルと、を含む。アセットをカプセル化するＳＯＤＡ記録は、記憶装置システムに対する如何なる参照も決して含まない。
【０２５９】
【表１４】
0005721634.tif 000015
オフセット及びデータフィールドは、それらが１記録（１レコード）にそれらが一致するまで長く繰り返され得る。
【０２６０】
アセットについてのクレリは定義である。
【表１５】
0005721634.tif 000016
アセットは、ある定義を用いて忘れ去られる。
【０２６１】
【表１６】
0005721634.tif 000017
（ｉｖ）属性ヒエラルキ
アセットは、属性を有しており、それらのうちの最も重要なものは、タイプとデフォルトである。タイプは、アセットの目的を指定する。デフォルトは、所与のアセットの場所の中で使用され得るベースアセットを指定する。例示的な属性ヒエラルキは、次のテーブル内に示される。
【表１７】
0005721634.tif 000018
この例の中では、SococoTableテクスチャを含む仮想エリアシーンが、SococoTableから、ConfTableWoodを通じて、次いでTableTop1を通じて、等により、検索した利用可能な第１のテクスチャを用いて、レンダリングされることとなる。
【０２６２】
アートベース（Artbase）は、デフォルトアセットに基づく、巨大な階層的なアセットツリーを有することとなり、全てが最終的には少数の基本アセットに基づく。これらの基本アセットは、クライアントソフトウェアパッケージの一部としてインストールされる。この機能（特徴）は、コールされる指定アート（art）アセットを有したレベルを設計することを可能にすることと、全てのアート（art）アセットが実際に設計される前にそれをレンダリングすることを可能にすることとが意図される。更にまた、全てのアート（art）アセットがロードされる前に、仮想エリアのレンダリングを開始することが望ましい場合がある。
【０２６３】
オプションの属性は、デフォルト、作者（Author）、アプリケーション、及びColladaＩＤを含む。該ColladaＩＤは、アセットが導出されるColladaソースに対する参照である。作者（Author）ステーション上において実行されているブラウジングツールは、任意の及び全ての属性によって、アセットをインデックス付けることとなる。
【０２６４】
ｋ．オーディオトランスポートバス
オーディオトランスポートバスは、オーディオストリームを処理（ハンドル）するトランスポートバス２７６の構成要素である。幾つかの実施形態において、オーディオトランスポートバスは、構成要素オブジェクトのコレクションとしてオーディオグラフを管理するライブラリによって実現される。オーディオグラフオブジェクトの全てが、オーディオトランスポートバスに固有ＩＤで登録（記録）される。オーディオトランスポートバスは、オーディオをレンダリングする時に、オーディオグラフオブジェクトを管理することの責任を負う。オーディオトランスポートバスは、ＩＤにより、オーディオグラフ構成要素をトレースする。このプロセス内において、オーディオトランスポートバスは、各オーディオグラフ構成要素を順に呼び出して、ＩＤによって名付けられた入力構成要素からのオーディオデータを提供する。
【０２６５】
オーディオトランスポートバスは、クライアントネットワークノード上において利用可能な各オーディオストリームの、１つの時間インターバルをバッファリングする。オーディオトランスポートバスは、オーディオストリームサービス２７２によって設定（又は構成）されると、これらのストリームを、零か又は１人以上の加入者に提供する。データをストリームすることは、ｐｕｌｌモデルを使用する。該ｐｕｌｌモデルでは、最終出力ステージが、先行するステージを、必要とされるデータのためにコールする。元のオーディオストリームソースが到達されるまでの前に、各ステージがステージをコールする。もしも該ソースが、レートを制御すること（フロー制御）を必要とするのであれば、それは、典型的には、その自身のバッファリングを実施し、及び、その自身の具体的な信号伝達スキームを有する。例えば、ローカルファイルソースは、ダブルバッファリングすることができ、及び、先行するものを処理している間に、１つの時間インターバルを先読みすることができる。ネットワークファイルソースは、サーバに対して、ネットワーク上のフローレートとバッファ制限とを信号で知らせることができる。一方、ローカルマイクロホンソースは、フローレートを制御するための能力（機能）を全く有していない。
【０２６６】
オーディオトランスポートバスは、２つのフェーズ内において動作する。すなわち、タイマーイベントをレンダリングしている時には、それは、既存のレンダリングされたデータをAudioSink構成要素に対して提供するフェーズと、オーディオトランスポートバスが次いで、オーディオグラフをトラバースして、次の時間スライスに値する（レンダリングされ且つバッファリングされることとなる）オーディオデータを生じさせるフェーズ、である。この技法は、可変レイテンシオーディオソースデータがたとえ存在しても、オーディオグラフに、連続的な再生を提供する良いチャンスを与える。
【０２６７】
幾つかの実施形態において、オーディオトランスポートバスは、各オーディオグラフ構成要素のレンダリングレイテンシを測定し、及び、全ての依存する（ソース）オーディオ構成要素レイテンシを集計することによって各レンダリングチェーン（鎖）レイテンシを総計する。オーディオトランスポートバスは、そのレンダリングレイテンシ統計値を、集めて登録（記録）する。これらの統計値に基づいて、リアルタイムスケジューラ２７８が、（オーディオグラフプロセッシング目標を達成するために）いつ及び如何にして、オーディオグラフが変更されるべきかを決定する。幾つかの実施形態において、リアルタイムスケジューラ２７８は、（オーディオグラフプロセッシング目標を達成するために）いつ及び如何にしてオーディオグラフが変更されるべきかを決定するプロセス内において図１３及び図１４に関連して上述の１つか又は複数の方法を実行する。
【０２６８】
オーディオトランスポートバスの別の機能は、AudioCalculationオブジェクトを周期的に呼び出すことである。AudioCalculationオブジェクトは、オーディオグラフプロセッシング要素のうちの関連付けられた幾つかのものの設定（セッティング）を変更するために使用される。AudioCalculationを実行する周期は、典型的には、オーディオグラフレンダリング周期よりも、ずっとより長い（頻度が低い）。
【０２６９】
オーディオトランスポートバスは、典型的には、ストリームを記録し、及び、記録したストリームを再生する能力を有する。生（raw）のオーディオストリームは、典型的には、再生中に、視聴者の視点に従ってミックスが再レンダリングされ得ることとなるように記録される。幾つかの実施形態は、全ての生（raw）のオーディオストリームを受け取るハブを含む。これらの実施形態において、ハブは、典型的には、セッションの記録（レコーディング）を処理（ハンドル）する。セッションを再レンダリングすることが望まれない時には、オーディオトランスポートバスは、典型的には、クライアントネットワークノードにおいてオーディオストリームのみを記録する。
【０２７０】
AudioSourceオブジェクトは、全てのオーディオソースにとってのベース（基本）である。このオブジェクトは、ポーリングされた時にはデータを配信し、及び、その所望のレイテンシとチャンネル（例えば、モノラル、ステレオ、5.1）とを画定する。導出されるオブジェクトは、Microphone（マイクロホン）と、MediaStream（メディアストリーム）と、クリップ（Clip）と、WaveFileと、DirectXオーディオと、Mixプラグインの出力側とを含む。
【０２７１】
AudioSinkオブジェクトは、オーディオ出力デバイスのためのベースオブジェクトである。このオブジェクトは、ポーリングされた時にはAudioSourceからのデータをリクエストする。導出されるオブジェクトは、Speaker（スピーカ）と、MediaStreamと、Mixプラグインの入力側とを含む。
【０２７２】
（ｉ）オーディオプラグインＡＰＩ
幾つかの実施形態において、オーディオプラグインは、ＶＳＴオーディオエフェクトＣ＋＋オブジェクトを組み込む。該ＶＳＴオーディオエフェクトＣ＋＋オブジェクトは、Steinberg Media Technologies GmbHから利用可能である。具体的には、オーディオプラグインが、プラグインとしてラッピングされたＶＳＴオブジェクトを組み込む。ｓｈｉｍライブラリが、オーディオプラグインとしてＶＳＴオブジェクトをラッピングするために提供される。このラッパは、オーディオプラグインＡＰＩを提供する。ＶＳＴオブジェクトのＡＰＩは、オーディオプラグインクラスの指定ＡＰＩとして使用されることとなる。このＡＰＩは、
setBusArrangements (inputs, nInput, output, nOutput) と、
getBusArrangements (direction, index, speaker&) と、
canProcessSampleSize(size) と、
getLatencySamples()と、
setupProcessing(process)と、 
setProcessing(state) と、
process(data&) と、
getTailSamples()
とを含む。 
【０２７３】
これらの実施形態において、ＶＳＴプラグインは、AudioSource及びAudioSinkとしてラッピングされる。例えば、AudioSource::Frame(data&, size)コールが、先行するAudioSource::Frame(data&, size&)に対するコールとして実現されることとなり、setupProcessing(process)及びprocess(data&)により後続されることとなる。Configuration(latency&channelLayout&)コールが、各サポートされるチャンネルごとに、getLatencySamples()及びgetBusArrangements(output, i, channelLayout&)に関して実現される。ラッパの存在は、ＶＳＴソースコードが、既存ＶＳＴプラグインをオーディオバス内へとシム（shim）することに必要とされるということを意味する。
【０２７４】
（ｉｉ）ＯｐｅｎＡＬ
大抵のオーディオプロセッシンググラフミキシング及びエフェクト要素は、www.openal.org.から利用可能なＯｐｅｎＡＬクロスプラットフォームオーディオＡＰＩを用いて実行される。ＯｐｅｎＡＬライブラリは、最良機能を実現するために利用可能なサウンドカードの該最良機能を用いて、エリア／ゾーンマネージャセクション内においてリストアップされた全パラメータを計算することができる。具体的には、ＯｐｅｎＡＬ Sources、Listeners、及びプログラムBuffersが、ミュートから最終ミックスまでのオーディオグラフ内の各動作ごとに生成される。各更新（アップデート）の前に、計算プラグインに従ってバッファパラメータが変更される。
【０２７５】
幾つかの実施形態において、Global IP Solutions,Inc.から利用可能な、コンポーネント化されたＧＩＰＳオーディオライブラリが、ストリーム処理構成要素（inserts）を実現するために使用される。該ＧＩＰＳオーディオライブラリは、以下のオーディオプラグインを直接サポートする。すなわち、コーデック、エラー隠蔽、ジッタ制御、エコー及びノイズキャンセル、ＡＧＣ（自動利得制御）、及びサイレンス検出を直接サポートする。
【０２７６】
【表１８】
0005721634.tif 000019
【表１９】
0005721634.tif 000020
ｌ．ローカルストリームソース
ローカルストリームソースは、マイクロホン、（記録されたｗａｖファイル及び音楽などの）ローカルサウンドソース、及びサウンドアートリソースである。これらのソースの各々を添付して、分配のためにそれらをオーディオトランスポートバスに対して提示するため、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムＡＰＩが使用される。各ソースは、AudioSource導出クラスとして「ラッピングされる」。ソースオブジェクトラッパが、定義が受け取られる時に生成される（セクションＶＩ内のAudioDeviceＳＯＤＡ定義を参照）。DirectSoundＡＰＩｓは、Ｗｉｎｄｏｗｓ（登録商標）ベースのコンピューティングシステム上において、マイクロホン、クリップ、Ｓｋｙｐｅ、及びＣＤサウンドのために使用される。ＲＴＰストリーミングは、リアルタイムプロトコル（ＲＴＰ）サービスを囲う単なるAudioSourceラッパーであり、ＵＤＰソケット上においてストリーミングデータ（例えば、オーディオ）を配信するために使用される。インターネット上のストリーミングオーディオは、ウェブベースのダウンロード及び再生をサポートし、更にまた、マイクロソフトメディアサーバストリームもサポートする。
【０２７７】
【表２０】
0005721634.tif 000021
幾つかの実施形態において、リアルタイムカーネル２６０は、非仮想エリアベースの通信（例えば、Ｓｋｙｐｅ及びＶＯＩＰオーディオ）との仮想エリアベースの通信のセッションのソーシング（sourcing）及びミキシングをサポートする。これらの実施形態において、リアルタイムカーネルは、非仮想エリアベースの通信を傍受して、それらをローカルオーディオソースとして提示する。非仮想エリアベースの通信セッション生（raw）オーディオを他のクライアントネットワークノードと共有することの責任を負うクライアントネットワークノード上の通信者のうちの１人によって、非仮想エリアベースの通信セッションが開始される。クライアントネットワークノードをホストすることはまた、非仮想エリアベースの通信アプリケーションを介して伝達（通信）を行っている通信者についての仮想エリア通信環境に関連付けられたオーディオをミックスする。
【０２７８】
図２４は、（「システム２」とラベル付けされた）コンピュータシステム３８９の一実施形態を示す。該コンピュータシステム３８９によって、人々が、異なる通信アプリケーション（例えば、Ｓｋｙｐｅ及びＶＯＩＰ）を介して仮想エリア通信者と伝達し合うことが可能になる。図２４内において、オーディオ通信チャンネルは、仮想エリアを共有する４つのネットワークノード（すなわち、システム１、システム２、システム３、及びシステム４）間において確立される。システム１は、仮想エリアベースの通信アプリケーションが実行されていないクライアントネットワークノードを表す。その代りに、システム１は、代替の通信アプリケーション（例えば、Ｓｋｙｐｅ）を動作させるよう構成されている。システム２は、リアルタイムカーネル２６０の一実施形態が実行されている、通信者のネットワークノードを表しており、システム１との仮想エリアベースのセッションをソース（発信）及びミックスするストリームハンドラ３９１を含む。このプロセス内において、ストリームハンドラ３９１は、システム１の再生とオーディオキャプチャストリームとを仮想化する統合構成要素３９３を使用する。システム３及び４は、仮想エリアベースの通信アプリケーションが実行されている２つの他のクライアント端末を表す。図２４内に示されたシステムの構成要素は、次のものを含む。
【０２７９】
●ストリームハンドラ３９１：以下のオーディオグラフ処理要素から構成される。
○統合構成要素３９３は、代替の再生及びキャプチャストリームを仮想化する。このプロセス内において、統合構成要素３９３は、仮想化代替再生から受け取ったマイクロホン（マイク）１を、Ｃスプリット１に送り、マイクロホン２と３と４とのミックスを、Ｐミックスから受け取って、システム１に対して伝達するために仮想化代替キャプチャに送る。
○Ｃスプリット１は、統合構成要素３９３からマイクロホン１を受け取って、マイクロホン１を、Ｐルートと、Ｉ／Ｏマルチプレクサ／デマルチプレクサとの両方に送る。
○Ｃスプリット２は、システム２キャプチャからマイクロホン１を受け取って、マイクロホン２を、Ｐミックスと、Ｉ／Ｏマルチプレクサ／デマルチプレクサとに送る。
○Ｐルートは、Ｃスプリット１からマイクロホン１を受け取って、Ｉ／Ｏマルチプレクサ／デマルチプレクサからマイクロホン２及び３を受け取る。Ｐルートはまた、マイクロホン１、３、及び４をシステム２再生に送って、マイクロホン３及び４を、Ｐミックスに送る。
○Ｐミックスは、Ｃスプリット２からマイクロホン２を受け取って、Ｐルートからマイクロホン３及び４を受け取り、仮想化したものを送信出力するために、マイクロホン２、３、及び４のミックスをストリームハンドラ３９１に送る。
●Ｃ：仮想エリアベースの通信アプリケーションによるオーディオキャプチャ
●Ｐ：仮想エリアベースの通信アプリケーションによるオーディオ再生
●ＣＡ：システム１の代替オーディオアプリケーションによるオーディオキャプチャ
●ＰＡ：システム２の代替オーディオアプリケーションによるオーディオ再生
●Ｖマイク：システム２代替オーディオに関連付けられた仮想マイクロホン
●Ｖスピーカ：システム２代替オーディオに関連付けられた仮想スピーカ（複数可）
コンピュータシステム３８９の動作中、Ｉ／Ｏマルチプレクサ／デマルチプレクサは、システム１及び２から受け取ったオーディオ信号１及び２を、システム３とシステム４との両方に送る。Ｉ／Ｏマルチプレクサ／デマルチプレクサはまた、システム３及び４から受け取ったオーディオ信号３及び４を、ストリームハンドラ３９１のＰルート構成要素に送る。Ｐルート構成要素は、オーディオ信号１、３、及び４を、システム２の再生構成要素に送って、オーディオ信号３及び４を、システム２のＰミックス構成要素に渡す。ストリームハンドラ３９１のＰミックス構成要素は、オーディオ信号２、３、４をミックスして、そのミックスした信号を、システム２の統合構成要素に渡す。統合構成要素３９３は、該ミックスした信号を、代替通信アプリケーション（例えば、Ｓｋｙｐｅ）のオーディオキャプチャ構成要素に渡す。該代替通信アプリケーションは、システム２上において実行されており、及び、システム１により使用されている通信アプリケーション３９５（例えば、Ｓｋｙｐｅ）に対応する。代替オーディオキャプチャシステム（ＣＡ）は、キャプチャしたミックス信号２＋３＋４を、システム１上において実行されている代替通信アプリケーション３９５の再生構成要素に渡す。
【０２８０】
通信インフラ３８９の幾つかの実施形態において、Ｐミックスは、システムがより対称なものになるようにするため、Ｉ／Ｏマルチプレクサ／デマルチプレクサを直接的に認可する。これらの実施形態において、Ｐルートは、Ｐミックス１となり、３、４をＩ／Ｏから受け取り、及び、Ｃスプリット１から１を受け取る。これらは、独立チャンネルとして送られるので、Ｃスプリット１の出力は、再生構成要素に対して直接送られ得るが、それは、全くフレキシブルではない（Ｐミックスは、独立チャンネルの通過の代りに実際のミックスを実施することができるため。下記３を参照）。このケースでは、Ｐミックスは、Ｐミックス２となり、Ｉ／Ｏから３、４を受け取り、Ｃスプリット２から２を受け取る。代替オーディオシステムは、単一チャンネル通信システムであるため、このミキサの出力は、真のミックスである（たとえチャンネルがステレオであったとしても、複数ソースからの信号を混ぜ合わせるためのマルチトラックミキサが他方端には存在しない）。
【０２８１】
図２４は、システム３とシステム４との間の互いの相互作用を示しておらず、システム２による作用だけしか、ひいてはシステム１による作用だけしか示していない。システム３と４との間の相互作用は、上述のように、ピア・ツー・ピアか、或いは、サーバが仲介するものいずれかとすることができる。
【０２８２】
図２４内において、２つのストリームが、コンマで区切られている時はいつでも（それはマルチチャンネルルートであるということを意味する）、システムは、内部通信リソースを節約するために、ミックスしたストリームを送ることもできる（例えば、Ｉ／Ｏマルチプレクサ／デマルチプレクサの出力）。ミックスされることとなるストリームは、プラス符号で示されている（すなわち、統合構成要素３９３によって代替キャプチャ構成要素ＣＡに送られる仮想化されたマイクロホン信号）。
【０２８３】
ｍ．リアルタイムスケジューラ
【表２１】
0005721634.tif 000022
幾つかの実施形態において、リアルタイムスケジューラサービス２７８は、Ｗｉｎｄｏｗｓ（登録商標）サービスＤＬＬである。
【０２８４】
幾つかの実施形態において、オーディオ及び３Ｄシーンのレンダリングは、フレーム毎ベースで行われる。最初に、ストリームが開始され、次いで、ある遅延の後に、リアルタイムスケジューラサービス２７８が、第１のフレームの処理をはじめる。該遅延は、各オーディオ及びビデオプロセッシングチェーン（鎖）における組み合わされた所望のレイテンシにより調整される。リアルタイムスケジューラサービス２７８は、以前に準備したフレームの消費を開始して、次いで、５０ミリ秒の期間を有する時間刻みで、次のフレームを処理する。
【０２８５】
各チェーン（鎖）内の最終的なレンダリングオブジェクトは、リアルタイムスケジューラサービス２７８に登録（又は記録）される。オブジェクトは、SoFrameRendererクラスから導出される。該SoFrameRendererクラスは、下記メソッド、すなわち、
FrameRender(timeFrameMs)
を有する。
このメソッドは、特にレンダリングチェーン（オーディオか又はビデオ）であるデータソースから、指示された時間について１フレームを準備する。SoFrameRendererクラスは、別のメソッドを、すなわち、
FrameDeliver()
を含む。
このメソッドは、以前に準備したフレームを、特にレンダリングチェーンである最終的な宛先に配信する。SoFrameRendererオブジェクトは、２つ以上の完全フレームをバッファリング可能にすることが必要とされない。リアルタイムスケジューラサービス２７８は、以前に準備したフレームをスケジュール通りにフレーム配信（FrameDeliver）することとなり、次いで、次のインターバルのためのフレームを準備するために、FrameRenderをコールすることとなる。
【０２８６】
Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムは、「ハードスケジューリング」能力を有していない。幾つかの実施形態において、リアルタイムスケジューラサービス２７８は、１つか又は複数のSoFrameRendererクラスをコールするよう構成（又は設定）される。該SoFrameRendererクラスは、オーディオプロセッサ、グラフィカルプロセッサ、物理モデリング、及びスクリプトを含む。クライアントネットワークノードが、目標処理レベルを高いままに維持できないということの決定に応答して、リアルタイムスケジューラサービス２７８が、フレーム処理を再調整することが、該SoFrameRendererクラスによって可能になる。幾つかの実施形態において、リアルタイムスケジューラ２７８は、図１３及び図１４に関連して上述の方法のうちの１つか又は複数を実現する。幾つかのこれらの実施形態において、リアルタイムスケジューラサービス２７８は、全フレームについてレンダリング時間を測定して、ＳＯＤＡインターフェースを通じて統計値を利用可能にさせておく。該統計値が範囲を越えた場合には（例えば、フレームを準備するのに非常に長い時間がかかる場合）には、ログイベントが生成される。おそらくは、フレームをスキップして、範囲外のレンダリングチェーン（それらは、ハードウェアか又はネットワークエラーに起因して、典型的には、範囲外である）をドロップさせることによってか、或いは、より優先度が低いレンダリングチェーン（複数可）をドロップさせることによって、「追い上げる（キャッチアップする）」よう試みるために、ヒューリスティックがトリガされることとなる。優先度ベースのスケジューリングを実現することの目的のために、SoFrameRendererクラスは、次のメソッドを、すなわち、
FramePriority()
を画定（定義）する。
このメソッドは、最も重要である、より低い数の番号を返す。トータルな優先度に関して最小のインパクトで最大の利益を生み出すために、どのチェーン（複数可）がドロップされるべきかを、チェーン（鎖）のレイテンシ及び優先度から、ヒューリスティックが決定することができる。
【０２８７】
幾つかの実施形態において、リアルタイムスケジューラサービス２７８は、追加的には、チェーン（鎖）内におけるステージを、ドロップさせることができる。この目的のために、リアルタイムスケジューラサービス２７８は、次のメソッドを、すなわち
Latency=FramePrune(priority)
をコールすることができる。
ここで、処理チェーンは、指示された優先度よりもより低い「リンクをドロップさせること」に対する責任を負う。リアルタイムスケジューラサービス２７８は、最大優先度においてコールすることを開始することができ、及び、所望のトータルレイテンシ内において全フレームがレンダリングされるまで逆向きにカウントすることができる。低い優先度のチェーンを反復的にドロップさせることと、チェーン自体を一部取り除くこと（又は枝刈り：pruning）、との組み合わせのヒューリスティック（発見的問題解決法）は、典型的には、ある優先度レベルにおいて終結する。もしもその優先度レベルが、閾値を下まわっている場合には、ログエントリがなされることが可能であり、幾つかのケースでは、そのセッションが閉じられる。
【０２８８】
リアルタイムスケジューラサービス２７８はまた、クライアントネットワークノードクロックを、ネットワーク内の他のクライアントネットワークノードのクロックに同期させるために、ＳＩＳタイムサービス（ネットワークリソース）に対するインターフェースを管理することの責任を負う。幾つかの実施形態において、該タイムサービスは、後述のように、プラグインによって実現される。
【０２８９】
７．故障回復
ネットワーク及びサーバの故障（又は失敗）が存在する中で、リアルタイムカーネル２６０は、動作を継続するために、最大限の努力を試みることを行わせる。このプロセス内において、リアルタイムカーネル２６０は、２段階の故障（又は失敗）回復アルゴリズムを実現する。第１に、ＳＯＤＡチャンネルサービス２７０及びメディアサービス２７１は、故障（又は失敗）時に、接続を再確立することを独立に（又は自主的に）試みる。メディア回復によって、個別のオーディオチャンネルの故障（失敗）が存在する中で、会議が、継続するか、或いは、ＮＡＴタイムアウトのケースにおいて回復するということが可能になることとなる。第２に、もしもＳＯＤＡチャンネルサービス２７０及びメディアサービス２７１が、接続を再確立することに失敗した場合には、それらは、それらのクライアントに対して失敗を信号で知らせることとなる。幾つかの実施形態において、回復の試みを同期させることが可能なエリア・ボールト（vault）サーバに、クライアントノードセッションを登録することによって、複数の通信者が同時に回復を試みる行動（アクション）が連係される。
【０２９０】
幾つかの実施形態において、エリア／ゾーンマネージャ２６４はまた、サーバ故障（又は失敗）のイベント内において回復を試みる。エリア／ゾーンマネージャ２６４は、ストリーム失敗をうまく処理して、次いでそのセッションを解体して、異なるエリアサーバ上においてそれを再ランチする。
【０２９１】
８．プラグイン
幾つかの実施形態において、リアルタイムカーネル２６０は、コンポーネント化された、オープンな、及びプラットフォーム独立なアーキテクチャを有しており、該アーキテクチャによって、開発者が、独立に開発することと、リアルタイムカーネル２６０の構成要素をリモートに追加及び更新することとが、可能になる。
【０２９２】
ａ．プラグイン設計
プラグインは、プラグインサーバからダウンロードされるプラットフォーム指定バイナリイメージである。Ｗｉｎｄｏｗｓ（登録商標）ベースのコンピュータシステム上において、プラグインは、ＤＬＬｓ（例えば、ＮＥＴか又はＣＯＭスタイルのプラグイン）として実現される。プラグインは、しかしながら、それらがロードされるというやり方において、通常のダイナミックリンクライブラリとは異なる。特に、ロード中に、プラグインライブラリにリンクする必要が無く、ソフトウェアコードの如何なる編集の必要性も無い。その代りに、プラグインマネージャ２６６は、プラグインディレクトリ内に含まれるプラグインを単にロードする。このようにして、ステーションにおける任意の更なるコンフィギュレーション（例えば、レジストリエントリ）も無しに、単に、実行可能なものをダウンロードするか又は削除することによって、プラグインは、クライアントネットワークノードに対して追加され得るか又は排除され得る。プラグインは、ある良好な画定（定義）されたやり方で各プラグインホストに接続する。
【０２９３】
図２５内に示されるように、プラグインのアクティブインスタンス（３９２）が、それぞれのプラグインバリアントクラス３９４から導出され、それが更に、それぞれのプラグインベースクラス３９６から導出される。幾つかの実施形態において、ベースプラグインオブジェクトを作成して、及び、該ベースプラグインオブジェクトを、インヘリタンス（継承）を通じて、識別されたバリアントにキャスティングすることによって、プラグインインスタンス３９２はインスタンス化される。各ベースクラス３９６及びバリアントクラス３９４は、あるインターフェースをそれが実現することを宣言することによって、それが、あるサービスを提供するということを示す。
【０２９４】
図２６は、プラグインベースクラス３９８、４００の、１つの例示的なセットを示す。該プラグインベースクラス３９８、４００の各々は、１つか又は複数の導出されたバリアントクラス４０２、４０４、及び、４０６、４０８のそれぞれのセットに関連付けられている。プラグインベースクラス３９８、４００の各々が、機能性の特定カテゴリを画定する一方で、各プラグインバリアントクラスは、対応するベースクラス（例えば、API=human interface device, Variant=mouse）の機能性（又は機能）の振る舞いの特定の目的か又はカテゴリを画定する。プラグインは、典型的には、インターフェースと、インターフェース機能の機能プロパティと、該インターフェース機能を呼び出すためのマクロとを画定するために、ヘッダファイルを使用する。
【０２９５】
プラグインは、ＧＵＩＤによって、並びに、人間にとって読み取り可能な名称によって、識別される。単一プラグインは、サポートされる複数のＡＰＩｓと、並びに、同じＡＰＩに関する複数のバリアントとを有することができる。幾つかの実施形態において、プラグインＡＰＩは、インターフェースによって画定（定義）されるサービスを実現するプラグイン機能に対する関数ポインタを含むＣ言語データ構造である。
【０２９６】
下記テーブルは、guidPhysicsSet1として識別される仮想物理プラグインの一例を示す。
【表２２】
0005721634.tif 000023
この例では、「Joint」ＡＰＩにおける４つのバリアントと、「CollisionDetection」ＡＰＩにおける２つのバリアントとが存在する。ファイル名称は、プラグインがファイルシステム内に格納される下での名称である。内部名称は、全体としてのプラグインを記述することが意図されている。識別子は、プラグインバイナリイメージ全体を識別するものであり、プラグインマネージャ２６６によってのみ使用される。ＡＰＩは周知のＧＵＩＤであり、該ＧＵＩＤは、プラグインによってサポートされている、手続きの（プロシージャの）ＡＰＩを指定する。バリアントは、ある特定の目的のためのプラグインを選択するために、クライアントアプリケーションが使用することが可能な、周知のＧＵＩＤである。例えば、ＳＯＤＡチャンネルサービス２７０は、あるセッションにおいて使用するために、圧縮プラグインバリアントをネゴシエートすることができる。
【０２９７】
図２７は、プラグイン４１０の、１つの例示的なアーキテクチャを示す。該プラグイン４１０は、Ｍｉｃｒｏｓｏｆｔ（登録商標）のＣＯＭ（コンポーネント・オブジェクト・モデル）アーキテクチャと互換性がある。プラグイン４１０は、エントリポイント機能４１２のセットと、（第１のバリアント４１６と第２のバリアント４１８とを含む）第１のＡＰＩクラス４１４と、第２のＡＰＩクラス４２０とを含む。プラグイン４１０は、サポートされる全ＡＰＩクラス４１４、４２０の中の、及び、各ＡＰＩクラス内における全バリアントの中の、全機能を実現する。各ＡＰＩクラスと、ＡＰＩクラス内における各バリアントとが、それぞれのエントリポイント機能（「ファクトリ」としても呼ばれる）に関連付けられている。プラグイン４１０がロードされる時には、それぞれのエントリポイント機能が、サポートされる各ＡＰＩクラスごとのプラグインホストに登録（又は記録）される。ＡＰＩクラスをインスタンス化するために、及び、そのIUnknownインターフェースに対するポインタを取得するために、ＡＰＩクラスに関連付けられているエントリポイント機能をプラグインホストが使用する。プラグインホストは、IUnknownインターフェースを使用して、ＡＰＩクラスによってサポートされたバリアントのエントリポイント機能の検索を行う。プラグインホストは、バリアントをインスタンス化するために、及び、そのIUnknownインターフェースに対するポインタを取得するために、バリアントに関連付けられている該エントリポイント機能を使用する。プラグインホストは、IUnknownインターフェースを使用して、そのインターフェース機能テーブルについて、バリアントをクエリー（検索要求）する。該機能テーブルは、バリアントのＡＰＩ実現形態に対するアクセスを、ホストに提供する。
【０２９８】
各々の実行可能なプラグインは、プラグインマネージャ２６６にプラグインを管理することを可能にさせるコアプラグインＡＰＩをサポートする。該コアプラグインＡＰＩは、実行可能なプラグインを、自己記述的にさせる。具体的には、各プラグインは、プラグインマネージャ２６６によってコールされ得る機能をエクスポートして、該プラグインに部ラグイン自体を登録することを可能にさせる。幾つかの実施形態において、実行可能な各プラグインは、下記のコアプラグインＡＰＩをエクスポートする。
【０２９９】
【表２３】
0005721634.tif 000024
（ｉ）プラグインバリアント
プラグインバリアントのアクティブインスタンスは、クラスPlugInVariantから導出される。それらは、常に、PlugInオブジェクトを用いて生成される。全ての有用なプラグインは、このクラスを、ＡＰＩ指定メソッドを含めるために拡張する。共通メソッドだけが、ジェネリックなコンフィギュレーションメソッドである。
【０３００】
【表２４】
0005721634.tif 000025
（ｉｉ）プラグインマネージャ
図２８は、プラグインマネージャ２６６と、（プラグインコンテナ４２４のセットを含む）プラグインディレクトリ４２２と、プラグインデータベース４２６と、コーラー（caller）４２８とを含むプラグインアーキテクチャの一実施形態を示す。プラグインマネージャ２６６は、プラグインディレクトリ４２２内のプラグインコンテナ４２４をクエリー（検索要求）して、プラグインをプラグインデータベース４２６内に登録して、コーラー４２８からのＡＰＩリクエストに応答して、利用可能なプラグインについての情報を送り、及び、指定されたプラグインバリアントをインスタンス化する。コーラー４２８は、典型的には、カーネル構成要素（例えば、インストールローダー構成要素、（接続及びサーバミックスマネージャ２６２及びエリア／ゾーンマネージャ２６４のような）カーネルマネージャ、及びカーネルサービス）である。しかしながら、幾つかの実施形態では、コーラー４２８は、クライアントノード上においてか又はリモートネットワークノード（例えば、サーバ）上において実行されているサービスか又はソフトウェアアプリケーションに対応することが可能である。
図２９は、クライアントネットワークノード上において利用可能なプラグインを登録するプロセス内においてプラグインマネージャ２６６によって実現される一方法の一実施形態を示す。
【０３０１】
図２９の方法に従って、プラグインマネージャ２６６は、クライアントネットワークノード上において利用可能なプラグインを見つけ出す（図２９のブロック４３０）。幾つかの実施形態において、クライアントネットワークノードのファイルシステム内に生成されている共有化されたプラグインディレクトリ内に全プラグインが格納される。これらの実施形態において、プラグインマネージャ２６６は、該共有化されたプラグインディレクトリをチェックすることによって、利用可能なプラグインを見つけ出す。他の実施形態において、プラグインマネージャ２６６は、利用可能なプラグインのために、他のファイル位置をチェックするよう構成（又は設定）され得る。
【０３０２】
プラグインマネージャ２６６は、その見つけ出したプラグインを、それらプラグインがサポートする全てのＡＰＩｓについてクエリー（検索要求）する（図２９のブロック４３２）。このプロセス内において、利用可能なプラグインに関連付けられたパラメータ値を列挙するために、プラグインマネージャ２６６は、コアＡＰＩに対してコールを行う。例えば、プラグインのＧＵＩＤｓと、サポートされるＡＰＩｓのＧＵＩＤｓと、所与のＡＰＩについてのサポートされるバリアントのＧＵＩＤｓと、を返すコアＡＰＩコールによって、プラグインマネージャ２６６は、プラグインをクエリー（検索要求）する。
【０３０３】
クエリー（検索要求）を行った結果に基づいて、プラグインマネージャ２６６は、プラグインと、それらプラグインがそれぞれサポートするＡＰＩｓとの間の関連性を、プラグインデータベース４２６内に格納する（図２９のブロック４３４）。このプロセス内において、プラグインマネージャ２６６は、プラグインがサポートするＡＰＩｓごとに、ディレクトリ４２２内の全てのプラグインを分類する。プラグインマネージャ２６６は、全てのサポートされるＡＰＩｓに従って、プラグインをプラグインデータベース４２６内へと自動的に入力する。このようにして、プラグインデータベース４２６によって、同じＡＰＩによるプラグインが、バリアントについてクエリー（検索要求）されることが可能になる。追加的には、プラグインデータベース４２６内のプラグインは、ＡＰＩごとに、及びバリアントごとに、及び仮想エリアアプリケーションによって参照された時に生成されたインスタンスごとに、列挙され得る。図３０は、プラグインデータベース４３６の例示的な一実施形態を示す。
【０３０４】
プラグインマネージャは、以下のＡＰＩをエクスポートする。
【表２５】
0005721634.tif 000026
図３１は、コーラー４２８からのＡＰＩコールの受容に応答して、プラグインマネージャ２６６によって実現される一方法の一実施形態を示す。この方法に従って、ＡＰＩｓのうちの指定されたＡＰＩをサポートする全プラグインを列挙するためのコールの受容に応答して（図３１のブロック４４０）、プラグインマネージャ２６６は、プラグインデータベース内における該指定されたＡＰＩに関連付けられている全プラグインの識別子を含むリストを返す（図３１のブロック４４２）。複数プラグインのうちの識別されたプラグインによってサポートされるＡＰＩｓのうちの識別されたＡＰＩのバリアントを列挙するためのコールの受容に応答して（図３１のブロック４４４）、プラグインマネージャ２６６は、識別されたプラグインによってサポートされる所与のＡＰＩの全バリアントの識別子を含むリストを返す（図３１のブロック４４６）。複数プラグインのうちの識別されたプラグインによってサポートされるＡＰＩｓのうちの識別されたＡＰＩの複数バリアントのうちの識別されたバリアントをインスタンス化するためのコールの受容に応答して（図３１のブロック４４８）、プラグインマネージャ２６６は、識別されたプラグインをロードして、識別されたバリアントのインスタンスに対するポインタを返す（図３１のブロック４５０）。このプロセス内において、指定されたバリアントが探し出されて、その指定されたバリアントが、コーラーのアドレス空間内へとロードされて、及び、ポインタの内部テーブルが、ＡＰＩによって画定されるサービスを実現するバリアント機能の機能テーブルアドレスにポピュレートされる。
【０３０５】
（ｉｉｉ）プラグインサーバ
サポートされる各プラットフォームごとに、適切なダウンロード可能形式において、サーバ上にプラグインが存在する。サーバは、最小セットの暗号化、圧縮、及び認証プラグインを常にサポートするので、サーバ接続を試みる時にはクライアントネットワークノードは常に成功する。
【０３０６】
サードパーティ開発者によってサーバ上に最初に登録される時には、そのプラグインは、ＡＰＩ仕様にそれが従うことを保証するために、自動化されたツールによって調査され、及び、受け入れることができないクライアントステーションＡＰＩ参照についてチェックされる。例えば、動的な結合（ビンディング）は、プラグイン環境内にまだ無いどのネイティブなインターフェースでも許されない。従って、プラグインは、ウイルスがスキャンされる。従って、サーバ上の全てのイメージは、ウイルスに対して安全である。
【０３０７】
プラグインは、認証ユーザによってアクセス制御される。このようにして、アクセスに対する料金を支払ったユーザは、任意の位置からプラグインを使用することができる。幾つかの実施形態において、ユーザは、電子商取引エンジンを介したプラグインダウンロードについて認証される。
【０３０８】
ｂ．プラグインのクラス
全てのプラグインは、プラグインＡＰＩに従う。幾つかのプラグインは、あるツール（例えば、ＯｐｅｎＧＬ）に特有のものであり、それら自体の基準（スタンダード）がある。プラグインの各クラスは、クラス特有のＡＰＩｓを有する。幾つかの実施形態において、プラグインは、全てのクライアントステーションアクセスについて、ネイティブなアプリケーションランタイムに依存する。プラグインが使用される各構成要素において、ＧＵＩＤ名称空間（ネームスペース）を用いて、プロトコルが、機能のネゴシエーションを可能にする。例えば、幾つかのインスタンスにおいて、ネットワークストリームを接続する時には、その提供するクライアントネットワークノードは、その暗号化プラグインＧＵＩＤリストを、好みの順序で提供し、及び、受け取るネットワークノードは、これらの提供された中から選択して、選択によってか又は拒否によって応答する。
【０３０９】
幾つかの例示的な実施形態において、プラグインの下記クラスが定義されて、仮想エリア通信者環境を生成することにおいて使用されるためのプラグインを開発するために開発者によって使用される。
●暗号化アルゴリズム
●圧縮アルゴリズム
●認証アルゴリズム
●認証情報（クレデンシャル）
●グラフィックエフェクト
●物理エクステンション
●スクリプトエクステンション
●入力デバイスホスティング
●オーディオミックス
●オーディオソース
●オーディオインサート
●ストリームトランスポート
●タイムサービス
これらのプラグインクラスは、以下のパラグラフ内において画定（定義）される。
【０３１０】
［暗号化アルゴリズム（Encryption algorithm）］
暗号化は、ストリームトランスポート機能であり、ストリーム生成時にネゴシエートされる。このセッション定義は、暗号化VariantＩＤを含むこととなる。例示的な暗号化バリアントは、ＡＥＳ及びＲＣ４ブロック暗号化を含む。
【０３１１】
［圧縮アルゴリズム（Compression algorithm）］
圧縮は、オプションのチャンネルコンテンツ機能である。トランスポートがチャンネル定義をネゴシエートする時に、チャンネルは圧縮を選択する。認可するステーションが、利用可能な圧縮オプションを提供し、及び、公開（又は発行）するステーションは、該公開されるもの（又は発行されるもの）が提供される時に、その選択を指示する。オーディオコーデックは、それらのコンテンツは既に圧縮されているので、圧縮をスキップするよう選択することができる。例示的なオーディオ圧縮プラグインバリアントは、チャンネル指定プライミングストリームによるＩＴＵ−Ｔ Ｖ．４４圧縮プロセスを実現する。
【０３１２】
［認証アルゴリズム（Authentication algorithm）］
ネットワークインフラサービスは、接続を行うために、ある認証プロトコルを要求する。サードパーティのサーバは、特定の認証要件を有することができる。認証プロトコルは、時折、変更され得る。コアPluginＡＰＩに加えて、認証プラグインは、認証プロトコルを実行するための、及び、ローカル認証情報（クレデンシャル）にアクセスするための、ＡＰＩｓを有する。例示的な認証プラグインバリアントは、イニシャルサーバに対して、ＳＳＬタイプの認証をサポートするプラグインバリアントと、トークンとして署名されたＩＤを用いて、後続のサーバログインをサポートするプラグインバリアントと、を含む。
【０３１３】
［認証情報（クレデンシャル）（Credential）］
認証情報（クレデンシャル）は、生成されることが可能であり、及び、記憶させるために及び認証アルゴリズムによって使用されるためにプラグイン内にカプセル化される必要がある。例示的な認証情報（クレデンシャル）は、公開キーを含んだ証明書である。
【０３１４】
［グラフィカルエフェクト（Graphical effect）］
ＯｐｅｎＧＬ及びＣｏｌｌａｄａは、スクリプトにすることが可能なシェーダー、サンプラ、プロファイル、及び注釈（アノテーション）をサポートする。幾つかの実施形態は、Collada cg_surface_typeと、シェーダーであるglsl_surface_typeと、サンプラであるgl_samplerX及びcg_samplerXと、をサポートする。
【０３１５】
［物理エクステンション（Physics Extension）］
幾つかの実施形態において、動的な振る舞いのループ内へと特定のフック（hooks）が含まれるようにするために、オープン・ダイナミック・エンジン（ＯＤＥ）が修正される。シーングラフ内のエンティティに対して物理プロパティを提供することによって、仮想エリアアプリケーションが、典型的には、物理特性を指定する。物理エクステンションプラグインは、そのプラグインによって処理される関連付けられたプロパティＧＵＩＤ（複数可）をクエリー（検索要求）するためのＡＰＩを有する。このようにして、物理プラグインは、関連オブジェクト及び仮想エリアだけが呼び出される。幾つかの実施形態は、モデル内のジョイントであるCollada rigid_constraintと、アバター及びアーチファクトのためのグローバルなモーションアルゴリズムであるＯｐｅｎＧＬコリジョン検出とをサポートする。
【０３１６】
［スクリプトエクステンション（Script extension）］
スクリプトエクステンションプラグインは、スクリプトするルーチン（例えば、Ｊａｖａ及びＪａｖａスクリプト）のラッピングを可能にするための、及び、ネイティブなアプリケーションランタイムをそれに提供するための、追加的なＡＰＩを有する。スクリプトは、スクリプトエクステンションプラグインのＧＵＩＤを含むＳＯＤＡ記録を通じて画定される。
【０３１７】
［入力デバイスホスティング（Input device hosting）］
入力デバイスプラグインは、アプリケーション論理によって処理される標準入力イベント（例えば、コンピュータキーボード、コンピュータマウス、Ｘｂｏｘ（登録商標）コントローラ、及びＷｉｉ（登録商標）コントローラによって生成されるイベント）のためのＳＯＤＡ記録を生成する。
【０３１８】
［オーディオミックス、オーディオソース、及びオーディオインサート（Audio Mix, Audio Source, and Audio Insert）］
オーディオ処理（プロセッシング）は、発生源（例えば、マイクロホン）においてが望ましく、エフェクト及びミキシングは、送り先（例えば、スピーカ）においてが望ましい。オーディオプラグインは、典型的には、オーディオネットワークルーティングを変更することができない。何故ならば、それは、他のユーザの経験（体験）に影響を及ぼすからである。Ｗｉｎｄｏｗｓ（登録商標）プラットフォーム上のオーディオプラグインは、AudioPluginＡＰＩに従うＤＬＬｓである。それらは、リアルタイムカーネル２６０に登録され、ＳＯＤＡによる参照のために利用可能である。仮想エリア開発者は、仮想エリアアプリケーションの一部として（例えば、拡張Colladaフィールドか又はＶＳＤＬ動作を用いて）、オーディオプラグインをリクエストすることができる。
【０３１９】
その上、アバタースクリプトが、オーディオプラグインをリクエストすることが可能である。
【０３２０】
ミックスバリアントは、エコー、エコーキャンセル、リバーブ、及びコンポーズを含む。
【０３２１】
ソースバリアントは、マイクロホン、クリップ、メディア、Ｓｋｙｐｅ、及びストリーミングファイルを含む。
【０３２２】
インサートバリアントは、パンナー、ボリューム、ｉＬＢＣ、ＲＣＵ、ｉＰＣＭ−ｗｂ、イコライザー、ＬＰＦ、ＨＰＦ、ＡＧＣ、ノイズキャンセル、エラー隠匿、ジッター制御、ミュート、遅延（ディレイ）、サイレンス検出、快適雑音を含む。
【０３２３】
［ストリームトランスポート（Stream Transport）］
ＳＴＲＡＷは、ネットワーク上のセッションをホストするためにストリームトランスポートプラグインを使用する。ストリームは、パケットを伝送（トランスポート）し、及び、信頼性、認証、及び暗号化を提供する。
【０３２４】
［タイムサービス（Time Service）］
リアルタイムスケジューラ２６０は、クライアントネットワークノード間の時間を同期させることに関与している。この目的のため、各クライアントネットワークノードは、ＳＩＳか、ＮＴＰ（ネットワークタイムプロトコル）か、又はＩＴＳ（インターネットタイムサービス）などのインターネット時間基準に同期することとなる。
【０３２５】
ｃ．プラグインクラスＡＰＩｓ
全てのプラグインクラスオブジェクトは、PlugInVariantに基づく。
［暗号化アルゴリズム（Encryption algorithm）］
このプラグインは、PlugInVariantに基づく。該プラグインは、キーイング（keying）を含むブロック暗号化アルゴリズムを実施する。このプラグインは、キー（鍵）を除いて処理状態を維持しない（ステイトレスである）（すなわち、各暗号化が任意の他のものと独立している）。
【０３２６】
Encryption::Ctor(algorithm, key) 
Encryption::Encrypt(data, size, target) 
Encryption::Decrypt(data, size, target) 
Encryption::Dtor() 
［圧縮アルゴリズム（Compression algorithm）］
このプラグインは、PlugInVariantに基づく。該プラグインは、１つか又は複数のロスレス圧縮／解凍アルゴリズムを実施する。該プラグインの圧縮は、連続的なストリームであり、内部状態テーブルを維持することができる。該アルゴリズムは、各KeyFrameに関して再開され、該アルゴリズムには、エミットされてはいないが圧縮状態に寄与してる「プライミング」ブロックを処理することを含めることができる。
【０３２７】
Compression::Ctor(algorithm)
Compression::KeyFrame(preload)
Compression::Compress(data, size, target)
Compression::Decompress(data, size, target)
Compression::Dtor()
［認証アルゴリズム（Authentication algorithm）］
このプラグインは、PlugInVariantに基づく。該プラグインは、ローカル認証情報（クレデンシャル）にアクセスして、１つか又は複数状態の、クライアント認証・状態マシンを実現する。認証・状態マシンは、認証サーバに対する通信リンクの制御を行わない。認証・状態マシンは、メッセージのみを処理して、後続のメッセージを生成する。
【０３２８】
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に基づく。該プラグインは、３Ｄレンダリングに影響を及ぼす。
【０３３０】
シェーダーＡＰＩは、シェーダー（スクリプト化された手続きの（プロシージャの）表面生成器）をサポートする。
【０３３１】
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）］
サンプラＡＰＩは、PlugInVariantに基づく。該サンプラＡＰＩは、表面に対してテクスチャをマッピングすることをサポートする。
【０３３２】
Sampler::Ctor(gl&)
Sampler::Initialize(type, wrap, minFilter, magFilter, mipFilter, color, mipmap_maxLevel, mipmap_bias)
Sampler::Dtor()
［物理エクステンション（Physics Extension） − ジョイント（Joint）］
このプラグインは、PlugInVariantに基づく。該プラグインは、動作（モーション）のダイナミクスを拡張（拡大）する。
【０３３３】
ジョイントＡＰＩは、アバター及びアーチファクト・サブアセンブリに対するジョイント制約及びダイナミクスをサポートする。
【０３３４】
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）］
コリジョンＡＰＩは、PlugInVariantに基づく。該コリジョンＡＰＩは、コリジョン検出を迅速に計算することをサポートする。幾つかの実施形態において、コリジョンプラグインバリアントは、オープン・ダイナミクス・エンジン（ＯＤＥ）内のクアッド・ツリークラスdxSpaceアルゴリズムを実現することができる。
【０３３５】
Collision::Ctor(ode&, space) 
Collision::Step() 
［スクリプトエクステンション（Script extension）］
このプラグインは、PlugInVariantに基づく。該プラグインは、仮想エリアアプリケーションによって提供されるコードの実行をサポートする。このコードは、バイナリ形式におけるものであり、その特定コード定義がサポートするＡＰＩと言葉とによってラベル付けられる。該プラグインは、言葉によって異なる。該プラグインは、ある特定のコード定義をロードし、及びそれをコールし、ＡＰＩにとって適切なネイティブアプリケーションランタイムオブジェクトを提供する。
【０３３６】
ScriptExtension::Ctor(sonar&)
ScriptExtension::Execute(code, api)
ScriptExtension::Dtor() 
［入力デバイスホスティング（Input device hosting）］
このプラグインは、PlugInVariantに基づく。該プラグインは、ユーザイベントのキャプチャー（オーディオを除く）をサポートする。これは、マウスから、顔認識を有するビデオカメラまでのあらゆるものを含む。該プラグインは、ユーザイベントをキューに生成する。
【０３３７】
InputDevice::Ctor(arg, queue) 
InputDevice::Configure(arg) 
［オーディオミックス（Audio Mix）］
このプラグインは、AudioComponentに基づく。該プラグインは、２つのオーディオストリームを組み合わせる。
【０３３８】
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に基づく。該プラグインは、オーディオストリームを２つの等しいストリームに分割する（ストリームをコピーする）。任意のAudioSourceが、任意の他のオーディオ要素にルーティングされ得る。
【０３４１】
AudioSend::Ctor(AudioSource&) 
AudioSend::Dtor() 
AudioSend::Copy(data&)
［ストリームトランスポート（Stream Transport）］ 
このプラグインは、PlugInVariantに基づく。１つの例示的なストリームトランスポートプラグインバリアントは、設定可能な認証及び暗号化を有したＩＰ ＵＤＰトランスポートをサポートする。
【０３４２】
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()
ＶＩ．ＳＯＤＡ定義
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 
ＶＩＩ．結論
本明細書内において記載されている実施形態は、それぞれのネットワークノード上において操作する通信者間のリアルタイム通信（又は伝達）をサポートするリアルタイムカーネルを提供する。通信者、仮想エリア、及び他のネットワークリソースに接続し、ユーザ入力に応答してこれらの接続をスイッチングし、及び、リアルタイムデータストリームをミキシングする、という複雑なタスクを、該リアルタイムカーネルが処理する。該リアルタイムカーネルによって、開発者は、低レベルな、コードの配管（plumbing）の代りに、高レベルの通信機能を開発することに集中することが可能になる。広範囲の現在利用可能なコンピューティングデバイス及びネットワーク接続を用いてリアルタイム通信性能が達成され得ることとなるように、リアルタイムカーネルは、比較的低い計算リソース要件を課す。
【０３４４】
他の実施形態は、特許請求の範囲内にあるものである。以下に、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
１．リアルタイムデータストリーム処理を、コンピュータにより実現する方法であって、
１つか又は複数のストリームハンドリング命令（210）から、リアルタイムストリームハンドラ（206）の仕様をパーズし、ここで、該パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、入力ソース識別子、出力シンク識別子、及び、１つか又は複数のデータ処理オブジェクトの各々の識別子のそれぞれを、パーズすることを含んでおり、
前記識別子のうちの幾つかのそれぞれに対応するリアルタイムストリーム処理オブジェクトをインスタンス化し、
前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかを含む、有向グラフ（212）を、前記仕様に従って作成し、
前記入力ソース識別子に対応する入力ソースからリアルタイムデータストリームを受け取り、及び、
前記出力シンク識別子に対応する出力シンクにおいて結果データストリームを生成する
ことを含み、
前記生成することが、前記有向グラフ（212）を通じて前記リアルタイムデータストリームを処理することを含むことからなる、方法。
２．前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、データ処理オブジェクトの識別子を抽出することを含み、及び、前記作成することは、前記抽出された識別子に対応するリアルタイムストリーム処理オブジェクトをインスタンス化したものから、前記有向グラフ（212）を組み立てることを含むことからなる、上項１に記載の方法。
３．前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、オーディオプロセッシングオブジェクトの識別子を抽出することを含み、及び、前記生成することは、前記抽出された識別子のうちの幾つかのそれぞれに対応する１つか又は複数のインスタンス化されたオーディオプロセッシングオブジェクトを通じて、前記リアルタイムデータストリームを処理することを含むことからなる、上項１に記載の方法。
４．前記インスタンス化することは、それぞれの識別子についてオブジェクトライブラリをクエリーして、該クエリーすることに応答して該オブジェクトライブラリからオブジェクトを検索して、及び、該検索したオブジェクトをインスタンス化することを含むことからなる、上項１に記載の方法。
５．前記インスタンス化することは、前記識別子のうちの幾つかのそれぞれを含んだアプリケーションプログラムインターフェースプロシージャ（ＡＰＩ）コールを、処理オブジェクトに対して発行することを含むことからなる、上項４に記載の方法。
６．前記生成することが、
１つか又は複数の前記ストリームハンドリング命令（210）内において指定されたリアルタイム状態情報からコンフィギュレーションパラメータ値を決定し、及び、
前記有向グラフ（212）内の１つか又は複数の前記インスタンス化されたリアルタイムストリーム処理オブジェクトを、前記コンフィギュレーションパラメータ値によって動的に構成する
ことを含むことからなる、上項１に記載の方法。
７．前記受け取ることは、前記仕様内の第２の入力ソース識別子に対応する第２の入力ソースからの第２のリアルタイムデータストリームを受け取ることを含み、及び、前記生成することは、前記有向グラフ（212）を通じて該第２のリアルタイムデータストリームを処理することを含むことからなる、上項１に記載の方法。
８．前記インスタンス化することは、前記パーズした識別子のうちのそれぞれの１つに対応するリアルタイムストリームミキシングオブジェクト（220）をインスタンス化することを含み、前記作成することは、前記インスタンス化されたリアルタイムストリームミキシングオブジェクトを、前記有向グラフ（212）内へと組み込むことを含み、及び、前記生成することは、前記インスタンス化されたリアルタイムストリームミキシングオブジェクト（220）を実行して、前記第１のリアルタイムデータストリームと前記第２のリアルタイムデータストリームとを組み合わせることを含むことからなる、上項７に記載の方法。
９．前記第１の入力ソースは、第１のリモートネットワークノードから到来するリアルタイムデータストリーム（214）の定義に対応し、及び、前記第２の入力ソースは、第２のリモートネットワークノードから到来するリアルタイムデータストリーム（214）の定義に対応することからなる、上項８に記載の方法。
１０．前記パーズすることは、前記１つか又は複数のストリームハンドリング命令（210）から、第２のリアルタイムストリームハンドラ（22）の第２の仕様をパーズすることを含み、該第２の仕様は、第２の入力ソース識別子、第２の出力シンク識別子、及び１つか又は複数のデータ処理オブジェクトの各々のそれぞれの識別子を含み、
前記作成することは、前記インスタンス化されたリアルタイムストリーム処理オブジェクトのうちの幾つかから、第２の有向グラフを、前記第２の仕様に従って作成することを含み、
前記受け取ることが、前記第２の入力ソース識別子に対応する第２の入力ソースから第２のリアルタイムデータストリームを受け取ることを含み、ここで、前記第１及び第２のリアルタイムデータストリームは、データタイプに関して異なっており、及び、
前記生成することが、第２の有向グラフを通じて、前記第２の出力シンク識別子に対応する第２の出力シンクへと、前記第２のリアルタイムデータストリームを処理することを含むことからなる、上項１に記載の方法。
１１．前記第１のリアルタイムデータストリームと前記第２のリアルタイムデータストリームとが、同時に処理されることからなる、上項１０に記載の方法。
【図１】
0005721634.tif 000027
【図２】
0005721634.tif 000028
【図３Ａ】
0005721634.tif 000029
【図３Ｂ】
0005721634.tif 000030
【図４】
0005721634.tif 000031
【図５Ａ】
0005721634.tif 000032
【図５Ｂ】
0005721634.tif 000033
【図５Ｃ】
0005721634.tif 000034
【図６】
0005721634.tif 000035
【図７】
0005721634.tif 000036
【図８】
0005721634.tif 000037
【図９】
0005721634.tif 000038
【図１０】
0005721634.tif 000039
【図１１】
0005721634.tif 000040
【図１２】
0005721634.tif 000041
【図１３】
0005721634.tif 000042
【図１４】
0005721634.tif 000043
【図１５】
0005721634.tif 000044
【図１６】
0005721634.tif 000045
【図１７】
0005721634.tif 000046
【図１８】
0005721634.tif 000047
【図１９】
0005721634.tif 000048
【図２０】
0005721634.tif 000049
【図２１】
0005721634.tif 000050
【図２２】
0005721634.tif 000051
【図２３】
0005721634.tif 000052
【図２４】
0005721634.tif 000053
【図２５】
0005721634.tif 000054
【図２６】
0005721634.tif 000055
【図２７】
0005721634.tif 000056
【図２８】
0005721634.tif 000057
【図２９】
0005721634.tif 000058
【図３０】
0005721634.tif 000059
【図３１】
0005721634.tif 000060