(57)【要約】  デバイスリンキングについて記述される。１つまたは複数の実施態様では、ネットワークサービスのユーザーアカウントと結合される複数のデバイスの特性を記述しているデータは、ネットワークサービスで維持される。通信は、デバイス間のローカルネットワーク接続を開始するために、複数のデバイスのうちの１つであって、複数のデバイスのうちの別の１つに関係し、かつ受け取る側のデバイスがその複数のデバイスのうちのその別の１つを発見するのに適したデータの一部を含んだ、複数のデバイスのうちの１つによって受け取られるように形成される。
2015501477.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークサービスを実施する１つまたは複数の計算デバイスによって実施される方法であって、
前記ネットワークサービスのユーザーアカウントと関連付けられた複数のデバイスの特性を記述しているデータを前記ネットワークサービスで維持するステップと、
前記デバイス間のローカルネットワーク接続を開始するために、前記複数のデバイスのうちの１つによって受け取られる通信であって、前記複数のデバイスのうちの別の１つに関係し、受け取るデバイスが前記複数のデバイスのうちの前記別の１つを発見するのに適したデータの部分を含む通信を形成するステップと
を含む方法。
【請求項２】
請求項１に記載の方法であって、前記通信が、前記デバイス間のリモートネットワーク接続を開始するために、前記複数のデバイスのうちの前記別のデバイスに関係し、前記複数のデバイスのうちの前記別のデバイスを発見するのに適した前記データの別の部分をさらに含む、方法。
【請求項３】
請求項１に記載の方法であって、前記データの前記部分が有線または無線サブネットを記述しており、前記別のデバイスは、前記有線または無線サブネットを介して、前記ローカルネットワーク接続を介してアクセスすることができる、方法。
【請求項４】
請求項１に記載の方法であって、前記データの前記部分が、前記別のデバイスが前記ローカルネットワーク接続を介してアクセスできないとの判定に応答して前記別のデバイスとのリモートネットワーク接続を形成するために、前記受け取るデバイスによる使用が可能である、方法。
【請求項５】
請求項１に記載の方法であって、前記データの前記部分が、前記ローカルネットワーク接続およびリモートネットワーク接続を含む前記別のデバイスとの混成ネットワーク接続を形成するために、前記受け取るデバイスによる使用が可能である、方法。
【請求項６】
請求項１に記載の方法であって、前記データの前記部分が、前記ローカルネットワーク接続またはリモートネットワーク接続が利用できないとの判定に応答して、前記ローカルネットワーク接続と前記リモートネットワーク接続とを切り換えるためのフォールバック操作を実施するために、前記受け取るデバイスによる使用が可能である、方法。
【請求項７】
請求項１に記載の方法であって、前記データの前記部分が、前記受け取るデバイスと前記別のデバイスの間の通信の暗号化をサポートするために、前記受け取るデバイスによる使用が可能である、方法。
【請求項８】
少なくとも部分的にハードウェアの中で実施される１つまたは複数のモジュールを備える計算デバイスであって、前記１つまたは複数のモジュールが、
ユーザーアカウントに関連付けられ、前記ユーザーアカウントに関連付けられた別の計算デバイスを識別するデータを、ネットワークサービスから受け取るステップと、
ローカルネットワーク接続を介して前記別の計算デバイスを利用することができるとの判定に応答して、前記別の計算デバイスとの前記ローカルネットワーク接続を前記計算デバイスによって形成するステップと、
ローカルネットワーク接続を介して前記別の計算デバイスを利用することができないとの判定に応答して、前記別の計算デバイスとの非ローカルネットワーク接続を前記計算デバイスによって形成するステップと
を含む操作を実施するように構成された、計算デバイス。
【請求項９】
請求項８に記載の計算デバイスであって、前記データが有線または無線サブネットを記述しており、前記別の計算デバイスは、前記有線または無線サブネットを介して、前記ローカルネットワーク接続を介してアクセスすることができる、計算デバイス。
【請求項１０】
請求項８に記載の計算デバイスであって、前記データが前記別の計算デバイスによって前記ネットワークサービスに提供される、デバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]ユーザーは、所与の日に様々な異なるデバイスと対話することができる。例えばユーザーは、デスクトップＰＣ、ラップトップコンピューター、モバイル通信デバイス（例えば携帯電話）、およびゲームコンソール等々と対話することができる。しかしながら、これらのデバイスとの従来の対話は、あるデバイスと対話すると、別のデバイスとの対話が途絶えてしまうことがしばしばであった。さらに、この問題の解決を試行するための技法が引き続いて開発されてはいるが、これらの技法は、しばしば複雑で、効率的でなく、したがってユーザーは、通常この機能を控える選択をしている。
【発明の概要】
【０００２】
[0002]デバイスリンキングが記述される。１つまたは複数の実施態様では、ネットワークサービスのユーザーアカウントと関連付けられた複数のデバイスの特性を記述しているデータは、ネットワークサービスで維持される。通信は、デバイス間のローカルネットワーク接続を開始するために、複数のデバイスのうちの１つであって、複数のデバイスのうちの別の１つに関係し、かつ受け取る側のデバイスがその複数のデバイスのうちのその別の１つを発見するのに適したデータの一部を含んだ、複数のデバイスのうちの１つによって受け取られるように形成される。
【０００３】
[0003]１つまたは複数の実施態様では、データは、ユーザーアカウントに関連付けられている計算デバイスにおいて、ユーザーアカウントと関連付けられた別の計算デバイスを識別するネットワークサービスから受け取られる。計算デバイスが、ローカルネットワーク接続を介してその別の計算デバイスを利用することができることを決定すると、それに応答して、その別の計算デバイスと共に計算デバイスによってローカルネットワーク接続が形成される。計算デバイスが、ローカルネットワーク接続を介してその別の計算デバイスを利用することができないことを決定すると、それに応答して、その別の計算デバイスと共に計算デバイスによって非ローカルネットワーク接続が形成される。
【０００４】
[0004]１つまたは複数の実施態様では、コンパニオン経験をサポートするために、デバイスのネットワークサービスとの通信を介して利用可能性が発見され、この利用可能性は、デバイスとユーザーアカウントとの関連付けを介して決定される。コンパニオン経験に含まれているデータを通信するために使用することができることを発見した結果として、ネットワークサービスから受け取ったデータを使用して、計算デバイスとデバイスの間のローカルネットワーク接続が開始される。
【０００５】
[0005]この「発明の概要」は、以下で、「発明を実施するための形態」でさらに説明される概念の選択を簡易形態で紹介するために提供されたものである。この「発明の概要」には、特許請求される主題の重要な特徴または本質的な特徴を識別することも、特許請求される主題の範囲を決定する際の補助として使用されることも意図されていない。
【０００６】
[0006]詳細な説明は、添付の図を参照して述べられる。図においては、参照番号の一番左側の１つまたは複数の桁は、その参照番号が最初に出現する図を識別している。説明および図の中の異なる例における同じ参照番号の使用は、同様の項目または全く同じ項目を示している。図に示されている実体は、１つまたは複数の実体を表していることがあり、したがって説明の中では、これらの実体の単一の形態または複数の形態を交換可能に参照することができる。
【図面の簡単な説明】
【０００７】
【図１】[0007]本明細書において説明されているデバイスリンキング技法を実施するように動作させることができる一実施態様例における環境を示す図である。
【図２】[0008]図１の計算デバイスおよびサービスプロバイダーをより詳細に示す一実施態様例におけるシステムを示す図である。
【図３】[0009]ネットワークサービスがデバイス間の接続を仲介するように構成されている一実施態様例における手順を示す流れ図である。
【図４】[0010]別の計算デバイスと通信するために、ローカルネットワーク接続および／またはリモートネットワーク接続を活用するように計算デバイスが構成される一実施態様例における手順を示す流れ図である。
【図５】[0011]コンパニオン経験がデバイスリンキングを介してサポートされる一実施態様例における手順を示す流れ図である。
【図６】[0012]図１を参照して説明される計算デバイスを含んだ一システム例を示す図である。
【図７】[0013]本明細書において説明される技法の実施形態を実施するために、図１〜図４を参照して説明される任意のタイプの計算デバイスとして実施することができる一デバイス例の様々な構成要素を示す図である。
【発明を実施するための形態】
【０００８】
概説
[0014]複数のデバイスを一体にリンクするために利用されていた従来の技法には、通常、ユーザーによる複数の手動ステップの実施が必要である。さらに、これらのステップは複雑であることがしばしばであり、したがってユーザーは、従来より、利用可能ではあってもこれらの技法を利用することはなかった。
【０００９】
[0015]デバイスリンキング技法について記述される。１つまたは複数の実施態様では、ゲームコンソールとの対話をサポートするためのモバイル通信デバイスの使用など、異なるタイプのデバイスを共に動作させることができる技法が記述される。本明細書においては、例えばこの対話をサポートするために、複数のデバイスを一体にリンクするように活用することができる様々な技法が説明される。この例には、セットアップを実施するための「クラウド」およびローカル接続の使用の活用、ローカル接続およびリモート接続の使用の活用、およびフォールバック機能のサポートの活用等々がある。この活用および他の技法についてのさらなる説明については、以下の節を参照されたい。
【００１０】
[0016]以下の説明では、最初に、本明細書において説明されている技法を使用することができる一環境例が記述される。次に、上記環境例ならびに他の環境で実施することができる手順例が記述される。したがって上記手順例の実施は上記環境例に限定されず、また、上記環境例は、上記手順例の実施に限定されない。
【００１１】
環境例
[0017]図１は、本明細書において説明されている技法を使用するように動作させることができる一実施態様例における環境１００を示したものである。図に示されている環境１００は、様々な方法で構成することができる２つの計算デバイス１０２、１０４の例を含む。計算デバイス１０２、１０４は、例えば、動作環境およびデバイスの例に関連してさらに説明するように、従来のコンピューター、（例えばデスクトップ・パーソナル・コンピューター、およびラップトップコンピューター等々）、移動局、娯楽機器、表示デバイス（例えばテレビジョン）に通信結合されたゲームコンソール、モバイル通信デバイス（例えば無線電話、タブレット）、ならびにネットブック等々として構成することができる。したがって計算デバイス１０２、１０４は、かなりの記憶装置およびプロセッサー資源（例えばパーソナルコンピューター、ゲームコンソール）を備えた全資源デバイスから、限られた記憶装置および／または処理資源（例えば従来のセットトップボックス、ハンドヘルドゲームコンソール）を備えた低資源デバイスまでの範囲に及ぶことができる。図に示されている実施態様では、計算デバイス１０２はゲームコンソールとして構成されており、また、別の計算デバイス１０４はモバイル通信デバイスとして構成されているが、上で説明したような他の実施態様も同じく企図されている。
【００１２】
[0018]計算デバイス１０２、１０４は、それぞれ入力／出力モジュール１０６、１０８を含むものとして示されている。入力／出力モジュール１０６、１０８は、個々の計算デバイスによる入力の認識および／または出力の準備に関連する機能を表している。例えば入力／出力モジュール１０６、１０８は、キーボード、マウスから入力を受け取るように構成することができ、それにより例えばジェスチャーを識別し、かつそのジェスチャーに対応する操作を実施する等々を実施ことができる。入力は、入力／出力モジュール１０６、１０８によって様々な異なる方法で検出することができる。
【００１３】
[0019]例えば入力／出力モジュール１０６は、図に示されているコントローラー１１０などのハードウェアデバイスとの接触対話を介して１つまたは複数の入力を受け取るように構成することができる。接触対話は、ボタンを押すこと、ジョイスティックを動かすこと、トラックパッド全体の運動、および表示デバイスのタッチスクリーンの使用（例えば計算デバイス１０２によるユーザーの手の指またはスタイラスの検出）等々を含むことができる。
【００１４】
[0020]入力の認識は、入力／出力モジュール１０６、１０８によって活用することができ、それにより個々の計算デバイス１０２、１０４によって出力されるユーザーインタフェースと対話して、例えばゲーム、アプリケーションと対話すること、インターネットを検索すること、および計算デバイス１０２、１０４の１つまたは複数の設定を変更すること等々を実施することができる。デバイスとの接触対話を含んだ様々な他のハードウェアデバイスも同じく企図されている。このようなハードウェアデバイスの例には、カーソル制御デバイス（例えばマウス）、リモート制御（例えばテレビジョンリモート制御）、モバイル通信デバイス（例えば計算デバイス１０４によって示されているように、計算デバイス１０２の１つまたは複数の操作を制御するように構成された無線電話）、およびユーザーまたは対象の一部との接触を含んだ他のデバイスがある。
【００１５】
[0021]また、入力／出力モジュール１０６、１０８は、ナチュラル・ユーザーインタフェース（ＮＵＩ）をサポートすることも可能であり、それにより例えば接触を含むことができない対話を認識することができる。例えば計算デバイス１０２、１０４は、ユーザーによる特定のデバイスへの接触を必要とすることなく入力を検出することができるよう入力デバイスを活用することができ、それにより例えばマイクロホンを使用して音声入力を認識することができる。例えば入力／出力モジュール１０６、１０８は、音声認識を実施し、それにより特定の発声（例えば口頭指令）を認識し、かつその発声をもたらした特定のユーザーを認識するように構成することができる。
【００１６】
[0022]他の例では、入力／出力モジュール１０６、１０８は、カメラを使用することにより、ジェスチャー、表示される対象、および画像等々を認識するように構成することができる。カメラは、例えば、ゲームコンソール構成における計算デバイス１０２に対して示されているように、異なる透視画を捕獲することができ、したがって深度を決定することができるよう、複数のレンズを含むように構成することができる。例えば異なる透視画を使用して入力デバイスからの相対距離を決定することができ、したがってこの相対距離の変化を決定することができる。この異なる透視画は、深度知覚として個々の計算デバイス１０２、１０４によって活用することができる。当然、モバイル通信デバイスとして構成される計算デバイス１０４のカメラなどの深度知覚を使用することなく他の画像を活用することも可能である。画像を活用して、特定のユーザーの識別（例えば顔認識によって）、対象の識別、および探索の実施等々のための技法などの様々な機能を提供することができる。
【００１７】
[0023]入力／出力モジュール１０６、１０８は、入力を活用して、人体の特定の点（例えば４８の骨格点）の特徴抽出と共に骨格のマッピングを実施し、それにより１人または複数のユーザー（例えば４人のユーザーを同時に）追跡して運動解析を実施することができる。例えば捕獲された画像は、入力／出力モジュール１０６、１０８によって解析することができ、それによりユーザーによってなされた１つまたは複数の運動を認識することができ、この認識には、その運動をもたらすために使用された身体部分についての認識、ならびにその運動をもたらしたユーザーについての認識を含む。一例は、ユーザーの手１１２の１本または複数の指の位置および運動および／またはユーザーの手１１２全体の運動の認識を通して示されている。運動は、入力／出力モジュール１０６、１０８によってジェスチャーとして識別することができ、それにより対応する操作を開始することができる。
【００１８】
[0024]計算デバイス１０２、１０４は、さらに、個々のリンキングモジュール１１４、１１６を含むものとして示されている。リンキングモジュール１１４、１１６は、デバイス間の１つまたは複数のネットワーク接続を開始し、かつ管理するための個々のデバイスの機能を表している。これらの接続を使用して、コンパニオン経験などの様々な異なる機能をサポートすることができる。例えばモバイル通信デバイスとして構成された計算デバイス１０４は、ユーザー経験を補足するために、ゲームコンソールとして構成された計算デバイス１０２と対話することができる。これには、ゲームコントローラーとしての計算デバイス１０４の使用、および計算デバイス１０２による同報通信コンテンツの出力を制御するための電子プログラムガイドの出力等々を含むことができる。したがって計算デバイス１０４との対話を使用して、計算デバイス１０２によって実施される１つまたは複数の操作を制御することができ、かつその逆に計算デバイス１０２との対話を使用して、計算デバイス１０４によって実施される１つまたは複数の操作を制御することができる。例えば計算デバイス１０２は、計算デバイス１０４による出力に対する補足的コンテンツを提供することができる。
【００１９】
[0025]リンキングモジュール１１４、１１６は、ネットワーク接続を開始し、かつ管理するための様々な異なる機能を含むことができる。例えばリンキングモジュール１１４、１１６は、デバイス間のローカルネットワーク接続１１８（例えばローカルＷｉ−Ｆｉ接続）を形成し、かつ／またはネットワーク１２０を含んだリモート接続、例えばインターネットを介してアクセスすることができるサービスプロバイダー１２２を活用することによって「オーバー・ザ・クラウド」を形成するための機能を含むことができる。したがってこの第２の例では、サービスプロバイダー１２２は、同じくデバイスリンキング機能をサポートするサービスプロバイダー１２２の機能を表すリンキングモジュール１２４を同じく含むものとして示されている。
【００２０】
[0026]例えばリンキングモジュール１１４、１１６は、ネットワーク１２０のリモート接続を活用することができ、それによりサービスプロバイダー１２０と接触して、デバイスの発見、例えば通信するデバイスの「突き止め（ｌｏｃａｔｅ）」を実施することができる。次に、このデータを使用してデバイス間のローカルネットワーク接続１１８をセットアップし、上で説明したコンパニオン経験をサポートすることができる。他の例では、ネットワーク１２０、例えばインターネットまたは他の広域ネットワークを含んだリモート接続を介して、全体的に、または部分的にこの接続を維持することができる。したがってリンキングモジュール１１４、１１６は、これらの接続を形成するために様々な異なるタイプの接続および技法を活用することができ、その詳細については、以下の図に関連して説明する。
【００２１】
[0027]概して、本明細書において説明されている機能は、すべて、ソフトウェア、ファームウェア、ハードウェア（例えば固定論理回路機構）またはこれらの実施態様の組合せを使用して実施することができる。本明細書において使用されている「モジュール」、「機能」および「論理」という用語は、通常、ソフトウェア、ファームウェア、ハードウェアまたはそれらの組合せを表している。ソフトウェア実施態様の場合、モジュール、機能または論理は、プロセッサー（例えば１つまたは複数のＣＰＵ）上で実行されると規定されたタスクを実施するプログラムコードを表している。プログラムコードは、１つまたは複数のコンピューター可読メモリー素子に記憶することができる。以下で説明される技法の特徴は、プラットフォーム独立型であり、これらの技法は、様々なプロセッサーを有する様々な商用計算プラットフォーム上で実施することができることを意味している。
【００２２】
[0028]例えば計算デバイス１０２、１０４は、計算デバイス１０２、１０４のハードウェアに動作、例えばプロセッサー、および機能ブロック等々を実施させる実体（例えばソフトウェア）を含むことも可能である。例えば計算デバイス１０２、１０４は、計算デバイス、より詳細には計算デバイス１０２、１０４のハードウェアが動作を実施することになる命令を維持するように構成することができるコンピューター可読媒体を含むことができる。したがって命令は、ハードウェアを構成して動作を実施させるように機能し、この方法によれば、ハードウェアの形を変えて機能を実施することができる。命令は、コンピューター可読媒体によって、様々な異なる構成を介して計算デバイス１０２に提供することができる。
【００２３】
[0029]コンピューター可読媒体のこのような構成の１つは、信号を担っている媒体であり、したがってネットワークなどを介して計算デバイスのハードウェアに命令を伝送するように構成されている（例えば搬送波として）。また、コンピューター可読媒体は、コンピューター可読記憶媒体として構成することも可能であり、したがって信号を担っている媒体ではない。コンピューター可読記憶媒体の例には、ランダム・アクセス・メモリー（ＲＡＭ）、リード・オンリー・メモリー（ＲＯＭ）、光ディスク、フラッシュメモリー、ハード・ディスク・メモリー、および命令および他のデータを記憶するための磁気技法、光学技法および他の技法を使用することができる他のメモリー素子がある。
【００２４】
[0030]図２は、計算デバイス１０２、１０４およびサービスプロバイダー１２２をより詳細に示すシステム２００を示したものである。コンパニオン経験をサポートするための、計算デバイス１０２と１０４の間の接続は、様々な方法で開始し、かつ維持することができる。例えば計算デバイス１０２、１０４の各々は、サービスプロバイダー１２２のネットワークサービスのユーザーアカウントと関連付けることができる。したがってユーザーは、ネットワーク１２０を介して信用証明書を提供することにより、余計なログイン情報、およびキーコード等々を必要とすることなく、サービスプロバイダー１２２のユーザーアカウントに単純にログインすることができる。これらの信用証明書は、次に、ユーザーを認証するために、サービスプロバイダー１２２のアカウント管理プログラム・モジュール２０２によって処理することができる。さらに、この認証を使用して、「ワン・タイム」ログインを介してサービスプロバイダー１２２（および他のサービスプロバイダー）の様々な異なるサービスにアクセスすることができ、例えば音楽サービス、メッセージングサービス、カレンダーリングサービス、およびコンタクトサービス等々などにアクセスすることができる。
【００２５】
[0031]認証されると、リンキングモジュール１２４の機能を実施し、例えばデバイス間の接続を形成することができる。例えばリンキングモジュール１２４は、デバイス間のネットワーク接続の形成に利用することができるネットワーク接続の詳細を記述しているデータを維持するように構成することができる。これには、例えば識別子、およびネットワーク名等々を使用してＷｉ−Ｆｉ接続をサポートするために、ローカルネットワーク接続１１８の詳細を記述しているデータを含むことができる。また、このデータは、リモート接続の詳細を記述することも可能であり、それによりネットワーク１２０（例えばインターネット）を介して、ＩＰアドレス、サポートされている帯域幅、位置情報、およびネットワーク・アクセス・タイプ等々などにアクセスすることができる。
【００２６】
[0032]データは、様々な方法で、様々な時間にサービスプロバイダー１２２に通信することができる。例えばデータは、認証の一部として通信すること、先行する通信から記憶すること、およびサービスプロバイダー１２２から受け取った要求に応答して提供すること等々が（例えば認証された後に）ができる。したがってリンキングモジュール１１４、１１６は、接続を形成するために活用することができる様々な異なるデータを通信することができる。
【００２７】
[0033]１つまたは複数の実施態様では、このデータを提供するかどうかを制御するために、個々のリンキングモジュール１１４、１１６に対して設定を実施することができる。例えば個々の計算デバイスを発見可能にするために構成設定を実施することができ、デフォルトとして「オン」を設定することができるが、他の例も同じく企図されている。
【００２８】
[0034]さらに、他の構成設定を使用して、計算デバイスのサービスプロバイダー１２２との生きた接続を維持するかどうかを制御することも可能であり、デフォルトとして「オフ」に設定することができる。これを使用して、デバイス接続特徴を維持することを望んでいないデバイスに対して、そのようにすることをサービスプロバイダー１２２が強制されないよう、資源の消費（例えばネットワーク１２０および／またはサービスプロバイダーによる消費）を少なくすることができる。例えばこの設定は、最初は「オフ」に設定することができる。しかしながら、接続が試行されると、この設定を自動的に「オン」に切り換えることができ、また、ユーザーが介在することなく「レディ」オープン接続を維持して、本明細書において説明されているリンキングを実施することができる。
【００２９】
[0035]接続を開始するために、計算デバイス１０２、１０４は、最初に、様々な方法で互いに「発見」することができる。例えばリンキングモジュール１１４、１１６は、最初に、Ｗｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標）または他の有線ネットワークもしくは無線ネットワークを介して利用することができるような他のデバイスをローカルネットワーク接続１１８を介して利用することができるかどうかを決定するように構成することができる。この発見は、個々のリンキングモジュール１１４、１１６によって予め記憶されている、個々の計算デバイス１０２、１０４の特定のネットワーク識別子の識別、ネットワークおよび他の情報などのデータを活用するように構成することができるが、他の例も同じく企図されている。
【００３０】
[0036]デバイスが発見されない場合、リンキングモジュール１１４、１１６は、接続のために別のデバイスを利用することができるかどうか発見するようサービスプロバイダー１１２に通信することができる。例えば計算デバイス１０２、１０４は、デバイスの位置を示すデータ、およびローカル接続を介してデバイスを発見するために使用することができるデータ等々を通信することができる。データは、特定の部屋の中などの特定の位置、活用ＧＰＳ座標および他の位置決定機能を示すことができる。さらに、例えばデバイスがローカルネットワーク接続１１８によってサポートされる距離より長い距離を隔てて位置しており、そのためにローカルネットワーク接続１１８を利用することができない場合、この情報を使用して、例えばネットワーク１２０を介してリモート接続を確立するために確立すべき接続のタイプを決定することも可能である。
【００３１】
[0037]例えば計算デバイス１０４は、ネットワーク１２０を介してサービスプロバイダー１２２のリンキングモジュール１２４と通信し、ユーザーのアカウントに登録されている他のデバイス（例えば計算デバイス１０２）をリンキングのために利用することができるかどうかを決定することができる。サービスプロバイダー１２２は、次に、これらのデバイスのための追加ローカルネットワーク接続情報（例えば無線サブネットまたは有線サブネット）を含むことができる回答を返すことができる。計算デバイス１０４のリンキングモジュール１１６は、次に、その情報を使用してローカルネットワークを探索し、１つまたは複数の他のデバイスを見出すべく試行することができる。１つまたは複数の他のデバイスが見出されると、計算デバイス１０２、１０４は、通信のための直接リンクをローカルネットワーク接続１１８を介して交渉することができ、この直接リンクは、１つまたは複数の例では、ネットワーク１２０を介したサポートよりもさらに効果的に通信をサポートすることができる。例えばローカルネットワーク接続１１８は、ネットワーク１２０を介したリモート接続より高い帯域幅をサポートすることができる。さらに、使用するネットワークに関する決定プロセスの一環として費用考察事項を利用することも可能であり、例えばＷｉ−Ｆｉネットワーク対利用キャップを有する携帯電話ネットワークを利用することができる。
【００３２】
[0038]１つまたは複数の他のデバイスが見出されない場合、計算デバイス１０２、１０４は、ネットワーク１２０を介して様々な方法で通信することができる。例えば通信は、仲介としてサービスプロバイダー１２２を通すことができる。したがってこの例における通信は、インターネットまたは他の広域ネットワークを活用してデバイスを互いに接続することができる。リモート接続の他の例では、トンネリング技法をサポートして、例えば個々のリンキングモジュール１１４、１１６によって他のデバイスのＩＰアドレスを活用することによって通信することができ、それによりネットワーク１２０を介して、サービスプロバイダー１２２を仲介として積極的に働かせることなく直接通信することができる。
【００３３】
[0039]異なる通信が異なるネットワークを介して実施される混成モードなどの様々な他の例も同じく企図されている。例えばこのような混成モードを使用して、ネットワーク１２０を介したコマンドの通信をサポートし、また、ローカルネットワーク接続１１８を介したコンテンツの通信をサポートすることができ、また、それとは逆に、ネットワーク１２０を介したコンテンツの通信をサポートし、また、ローカルネットワーク接続１１８を介したコマンドの通信をサポートすることができる。通信のこの分割は、個々のネットワークによってサポートされる特定のネットワーク接続のトポロジーの制限などの様々な理由で実施することができる。
【００３４】
[0040]いくつかの例では、使用中にネットワーク接続の特性を変更することができる。したがってリンキングモジュール１１４、１１６、１２４は、これらの変更に対処するために様々な異なる方法で構成することができる。例えばリンキングモジュール１１４、１１６、１２４は、この変更をユーザーに通知する（例えばユーザーインタフェースを介して）ように構成することができる。さらに、リンキングモジュール１１４、１１６、１２４は、例えば分解能、通信指向である機能、およびそのネットワークによってサポートされていない特徴等々を低減するために、この状態では良好に働かない可能性のある特徴を調整する（例えば不能にする）ように構成することも可能である。
【００３５】
[0041]さらに、リンキングモジュール１１４、１１６、１２４は、効率を改善し、かつ断続的接続問題を取り扱うために使用することができるコマンドを保存するように構成することも可能である。この保存は、計算デバイス１０２、１０４ならびにサービスプロバイダー１２２で実施することができる。様々な他の例も同じく企図されている。
【００３６】
[0042]例えばリンキングモジュール１１４、１１６、１２４は、自動フォールバック回復をサポートするように構成することができる。例えばローカルネットワーク接続１１８は、計算デバイス１０２から遠ざかる方向への計算デバイス１０４の移動、およびネットワーク干渉等々などのために劣化し、または切断されることがある。このような例では、上で説明した混成フォーマット等々の使用を決定することができる代わりに、リンキングモジュール１１４、１１６、１２４は、ネットワーク１２０を介して接続を達成しなければならないことになる。ネットワーク１２０の信頼性が低下した場合、ユーザーが介在することなく、自動的にローカルネットワーク接続１１８を活用してデバイス間の通信をサポートすることができる点では、その逆も真である。
【００３７】
[0043]また、この変更を使用して、複数のネットワークのうちの別の１つが利用可能になったことの決定に応答してネットワークを切り換えることも可能である。例えば計算デバイス１０４は、ローカルネットワーク接続１１８がサポートされていない距離に計算デバイス１０４が位置した場合などでは、最初はインターネットを介して計算デバイス１０２と通信することができる。計算デバイス１０４が現在は計算デバイス１０２のローカルネットワーク範囲内に位置していることが決定されると、リンキングモジュール１１４、１１６は、それに応答して、ローカルネットワーク接続１１８を介して自動的に通信することができる。上で説明したように、この機能の使用に際しては、上で説明した費用考察事項などの様々な考察事項を考慮することができる。したがって様々な異なる機能を活用してデバイスリンキングをサポートすることができ、この活用を同じく使用して、上で説明したコンパニオン経験などの様々な追加機能をサポートすることができる。
【００３８】
[0044]リンキングモジュール１１４、１１６、１２４は、様々な他の機能をサポートすることも可能である。例えば上で説明したように、接続は、複数のデバイスの各々が他のデバイスにデータを送り、かつ他のデバイスからデータを受け取ることができるよう、双方向接続であってもよい。この機能は、様々な方法で活用することができる。例えば計算デバイス１０２は、現在の状態について、コンテンツの出力の中で計算デバイス１０４に知らせるように構成することができる。計算デバイス１０４は、次に、この情報を活用して、例えば関連するコンテンツを突き止めること、およびその関連するコンテンツと関連付けられた１つまたは複数のシーンに基づいてインターネット探索を実施すること等々のための機能を提供することができる。計算デバイス１０４は、デバイスによって活用して、例えば計算デバイス１０２による現時点における、計算デバイス１０４によるコンテンツの出力に対応するコンテンツの再生を継続するための機能をサポートすることができる状態を計算デバイス１０２に通信することができる点では、その逆も真である。
【００３９】
[0045]他の例では、リンキングモジュール１１４、１１６、１２４は、ローカルネットワーク接続１１８を介した通信およびネットワーク１２０を介したリモート通信の両方等々を保護するための様々な異なる暗号化方式をサポートすることも可能である。さらに、インターネットは、ネットワーク１２０に関連して説明されているが、これらの技法は、例えば単一領域、企業の一部、およびイントラネット等々などの様々な異なるタイプのネットワークをサポートすることも可能である。デバイスリンキング技法についてのさらなる説明については、以下の手順を参照されたい。
【００４０】
手順例
[0046]以下の説明は、上で説明したシステムおよびデバイスを利用して実施することができるデバイスリンキング技法を示したものである。手順の個々の態様は、ハードウェア、ファームウェアもしくはソフトウェア、またはそれらの組合せの中で実施することができる。手順は、１つまたは複数のデバイスによって実施される操作を明記した一組のブロックとして示されているが、個々のブロックによって実施される操作の順序は、必ずしも図に示されている順序に限定されない。以下の説明の一部には、図１の環境１００および図２のシステム２００が参照されている。
【００４１】
[0047]図３は、ネットワークサービスがデバイス間の接続を仲介するように構成されている一実施態様例における手順３００を示す流れ図である。ネットワークサービスのユーザーアカウントと関連付けられた複数のデバイスの特性を記述しているデータは、ネットワークサービスで維持される（ブロック３０２）。例えばサービスプロバイダー１２２のリンキングモジュール１２４は、ユーザーのアカウントと関連付けられた計算デバイス１０２、１０４からデータを受け取ることができる。このデータは、デバイスの発見を許容するための個々のデバイスにおける設定の選択に応答して受け取ることができる。
【００４２】
[0048]通信は、デバイス間のローカルネットワーク接続を開始するために、複数のデバイスのうちの１つであって、複数のデバイスのうちの別の１つに関係し、かつ受け取る側のデバイスがその複数のデバイスのうちのその別の１つを発見するのに適したデータの一部を含んだ複数のデバイスのうちの１つによって受け取られるように形成される（ブロック３０４）。例えば通信は、デバイスを例えば有線サブネットまたは無線サブネットでローカルに突き止めるために使用することができるデータを含むことができ、その別のデバイスは、この有線サブネットまたは無線サブネットを介して、ローカルネットワーク接続を介してアクセスすることができる。また、通信は、デバイスをリモートに突き止めるために使用することができるＩＰアドレスなどのデータを含むことも可能である。次にこのデータを使用して、上で説明したコンパニオン経験などの様々な機能をサポートするために使用することができる接続を形成することができる。
【００４３】
[0049]図４は、別の計算デバイスと通信するために、ローカルネットワーク接続および／またはリモートネットワーク接続を活用するように計算デバイスが構成される一実施態様例における手順４００を示す流れ図である。データは、ユーザーアカウントに関連付けられた別の計算デバイスを識別するネットワークサービスから、ユーザーアカウントと関連付けられた計算デバイスで受け取られる（ブロック４０２）。上で説明したように、データは、ネットワークアドレス、およびデバイスの名称等々などによって様々な方法でデバイスを記述することができる。
【００４４】
[0050]計算デバイスが、ローカルネットワーク接続を介してその別の計算デバイスを利用することができることを決定すると、それに応答して、その別の計算デバイスと共に計算デバイスによってローカルネットワーク接続が形成される（ブロック４０４）。例えば計算デバイス１０２は、利用可能であれば計算デバイス１０４と共にローカル無線接続（例えばＷｉ−Ｆｉ）を形成することができる。
【００４５】
[0051]計算デバイスが、ローカルネットワーク接続を介して別の計算デバイスを利用することができないことを決定すると、それに応答して、その別の計算デバイスと共に計算デバイスによって非ローカルネットワーク接続が形成される（ブロック４０６）。上記の例を継続すると、ローカルネットワーク接続１１８を介して計算デバイス１０４を利用することができない場合、計算デバイス１０２は、ネットワーク１２０を介してネットワーク接続、例えばインターネットまたは他の広域ネットワークを形成することができる。様々な他の例も同じく企図されている。
【００４６】
[0052]図５は、コンパニオン経験がデバイスリンキングを介してサポートされる一実施態様例における手順５００を示す流れ図である。コンパニオン経験をサポートするために、デバイスのネットワークサービスとの通信を介して利用可能性が発見され、この利用可能性は、デバイスとユーザーアカウントとの関連付けを介して決定される（ブロック５０２）。例えばモバイル通信デバイス（例えば無線電話）として構成された計算デバイス１０４は、サービスプロバイダー１２２と通信して、ゲームコンソールとして構成された計算デバイス１０２などのデバイスを利用することができるかどうかを決定することができる。
【００４７】
[0053]コンパニオン経験に含まれているデータを通信するために使用することができることを発見した結果として、ネットワークサービスから受け取ったデータを使用して、計算デバイスとデバイスの間のローカルネットワーク接続が開始される（ブロック５０４）。例えば計算デバイス１０４は、有線サブネットまたは無線サブネットを記述したデータを受け取ることができ、計算デバイス１０２は、この有線サブネットまたは無線サブネットを介してアクセスすることができる。様々な他の例も同じく企図されており、その例については、以下の実施態様例を参照されたい。
【００４８】
実施態様例
[0054]以下は、上で説明した技法の一実施態様例を示したものである。１つまたは複数のコンパニオン経験シナリオでは、ユーザーは、コンソール上でビデオカタログ等々を検索し、次に映画をピックアップし、それを借り、かつ再生するためのデバイスを使用することができる。映画を見ている間、ユーザーは、モバイル通信デバイスまたは他のデバイスを使用して映画を制御することができ、例えば再生／一時停止、速送りおよび巻戻し等々を制御することができる。また、ゲームコンソールは、現在の映画の状態、およびコンソール上でのタイトル変化等々などのコンソール上で生じていることについてデバイスに知らせるように構成することも可能である。ユーザーは、デバイスからコンソール上にタイトルを起動することができ、それにより例えばコンソール上で走っているタイトルのタイトルＩＤを得ることができる。
【００４９】
[0055]デバイス間の通信に関して、メッセージ交換は、様々なカテゴリーに分類することができ、それの例には、
・Ｏｐｅｒａｔｉｏｎｓ：どうすれば別のデバイス上のワークをトリガーすることができますか？
・Ｎｏｔｉｆｉｃａｔｉｏｎｓ：どうすれば別のデバイス上の状態変化を通知されることができますか？
がある。
【００５０】
[0056]システムに生じる可能性がある様々な通知が存在している。
・Ａｃｔｉｖｅ  Ｔｉｔｌｅ  Ｃｈａｎｇｅｄ：新しいタイトルが起動されている。この通知は、コントローラー入力またはコンパニオンコマンドのいずれかを介して新しいタイトルがコンソール上に起動されるとき生じる。
【００５１】
・Ｍｅｄｉａ  Ｓｔａｔｅ  Ｃｈａｎｇｅ：現在のＩＤ、再生速度、再生ヘッド位置または再生／一時停止状態などの再生ヘッド状態の何らかの状況が変更されている。この通知は、位置変数をデバイス全体にわたって同期した状態に維持するために周期的に生じ、また、変化がユーザー入力に基づいて生じると（例えば停止ボタンが押されると）、直ちに生じる。
【００５２】
[0057]システム内で発することができる様々な操作が存在している。
・Ｌａｕｎｃｈ  Ｔｉｔｌｅ：任意選択で、表示するメディアコンテンツ片を示すために使用されるコマンド・ライン・アーギュメントを使用してコンソール・タイトルを起動する。このコマンドは、新しいコンテンツ片がガイドまたは探索結果から選択されると、コンパニオンデバイス（以下の説明では「コンパニオン」とも呼ばれている）によって発することができる。
【００５３】
・Ｇｅｔ  Ａｃｔｉｖｅ  Ｔｉｔｌｅ：現在走っているタイトルについてコンソールに問い合わせる。これは、コンパニオンが最初にコンソールに接続して初期タイトルＩＤを獲得する際に呼び出すことができ、また、顧客がこの情報を明確にリフレッシュすると（例えば休止状態から復帰すると）、いつでも呼び出すことができる。このコマンドの結果は、Ａｃｔｉｖｅ  Ｔｉｔｌｅ  Ｃｈａｎｇｅｄ通知と同じ情報を含む。
【００５４】
・Ｓｅｎｄ  Ｉｎｐｕｔ：コンソールに入力コマンドを送る。トランスポート制御（例えば再生、一時停止、停止）がクリックされると、コンパニオンによって必ずこのコマンドが発せられる。
【００５５】
・Ｇｅｔ  Ｍｅｄｉａ  Ｓｔａｔｅ：現在の媒体状態についてコンソールに問い合わせる。これは、コンパニオンが最初にコンソールに接続して初期媒体状態を獲得する際に呼び出され、また、顧客がこの情報を明確にリフレッシュする必要がある場合に（例えば休止状態から復帰する場合に）、必ず呼び出される。このコマンドの結果は、Ｍｅｄｉａ  Ｓｔａｔｅ  Ｃｈａｎｇｅｄ通知と同じ情報を含む。
【００５６】
媒体状態
[0058]プロトコルおよびＡＰＩの両方に使用される、この例における一次データ構造は媒体状態構造である。この構造は、現在の再生ヘッド状態および媒体アプリケーション／タイトル内で再生中の現在のＩＤを表す。Ｍｅｄｉａ  Ｓｔａｔｅは、コンソールＭｅｄｉａ  ＡＰＩから引き出すことができ、以下の欄／属性を含む。
【００５７】
【表１】
2015501477.tif 000003
【００５８】
[0059]ＳｃｏｕｒＴｒａｎｓｐｏｒｔＳｔａｔｅは、コンソール媒体ＡＰＩから得られる列挙である。
enum ScourTransportState
{
//未定義
SCOURTRANSPORTSTATE_INVALID    = 0,
//停止が受け取られたか、あるいはコンテンツの終わりに到達した
SCOURTRANSPORTSTATE_STOPPED   = 1,
//再生/非一時停止が受け取られたが、再生は未だ始まっていない
SCOURTRANSPORTSTAT_STARTING    = 2,
//コンテンツは現在再生中である
SCOURTRANSPORTSTATE_PLAYING    = 3,
//一時停止が受け取られ、再生/非一時停止が受け取られるまで再生が一時中断される
SCOURTRANSPORTSTATE_PAUSED    = 4,
//コンテンツ・バッファリングが生じており、バッファリングが終了するまで再生が一時中断される
SCOURTRANSPORTSTATE_BUFFERING  = 5,
};
[0060]媒体が再生されていない（例えばゲームが走っている）ことを示すための追加列挙値は、以下のように構成することができる。
【００５９】
‖媒体が再生されていない
ＳＣＯＵＲＴＲＡＮＳＰＯＲＴＳＴＡＴＥ＿ＮＯＭＥＤＩＡ＝−１
この値が使用される場合、媒体状態の残りの欄は定義されない。
【００６０】
[0061]ＴｒａｎｓｐｏｒｔＣａｐａｂｉｌｉｔｉｅｓは、メディアプレーヤーが実施することができる操作を示すフラグ列挙である。
enum TransportCapabilities
{
// SendInput(Stop)に応答することができる
TRANSPORTCAPABILITIES_CANSTOP = 0x1,
// SendInput(Pause)に応答することができる
TRANSPORTCAPABILITIES_CANPAUSE = 0x2,
// SendInput(Rewind)に応答することができる
TRANSPORTCAPABILITIES_CANREWIND = 0x4,
// SendInput(FastForward)に応答することができる
TRANSPORTCAPABILITIES_CANFASTFORWARD = 0x8,
// SendInput(Play)に応答することができる
TRANSPORTCAPABILITIES_CANPLAY = 0x10,
// SendInput(TogglePlayPause)に応答することができる
TRANSPORTCAPABILITIES_CANPLAYPAUSE = 0x20,
// SendInput(SkipForward)に応答することができる
TRANSPORTCAPABILITIES_CANSKIPFORWARD = 0x40,
// SendInput(SkipBackward)に応答することができる
TRANSPORTCAPABILITIES_CANSKIPBACKWARD = 0x80,
// SendInput(Seek,Position)に応答することができる
TRANSPORTCAPABILITIES_CANSEEK = 0x100,
// TODO、認可:???
TRANSPORTCAPABILITIES_ISLIVETRANSPORT = 0x200,
}
通信
[0062]コンパニオンシナリオを可能にするために使用される通信スタックは、ローカル低レイテンシＴＣＰおよびＵＤＰメッセージングとクラウドベースサービスを結合することができ、それにより機密保護およびデバイス発見、ならびにライン・オブ・サイトＩＰ接続性を有していないデバイス間の通信をサポートすることができる。
【００６１】
[0063]通信は、クラウド、例えばネットワークサービスを介して調整することができる。コンソールは、コンパニオンデバイスによって発見される順にコンパニオンサービスに登録する。コンパニオンデバイスは、コンパニオンサービスを使用して、コンパニオンデバイスが通信することができるデバイスを決定する。コンソールとコンパニオンデバイスの間にライン・オブ・サイトＩＰ接続性が存在している場合、そのデバイスとコンソールの間の後続する通信は、サービスが介在することなく、ローカルＴＣＰおよびＵＤＰメッセージングを介して実施することができる。コンソールとコンパニオンデバイスの間にライン・オブ・サイトＩＰ接続性が存在していない場合、レイテンシがより高くなるが、コンパニオンサービスを介して通信することができる。コンパニオンアプリケーションは、低レイテンシ通信スタックを利用することができるかどうかに基づいて、そのユーザーインタフェースに適合することができ、クラウドベースのメッセージングを利用している場合、「意味をなさない」という特徴を不能にすることができる。
【００６２】
[0064]デバイス発見／ペアリング／許可は、コンパニオンサービスを介して実施することができる。システムは、これを以下のようにして実施することができる。
１．コンパニオンデバイスは、Ｌｏｇｉｎ  ＩＤに対応する認証されたネットワークＩＤを使用する。
【００６３】
２．所与のデバイスは、そのデバイス上の現在のユーザーがログインしているコンソールと通信する。送信勧誘コードまたは他のより進歩したユーザーインタフェースを使用したゲスト・ペアリング／許可をサポートすることも可能である。
【００６４】
[0065]コンソールは、ログオンされたユーザーのセットに変更が生じると、コンパニオンサービスに再登録することができる。この登録の一部は、一組のアクティブユーザー、コンソールのＩＰアドレス、およびローカルコンパニオンコマンドを聞くために使用されるＴＣＰポートを含むことができる。登録されると、コンパニオンサービスは、コンソールが確信をもってサインするために使用することができる保護セッションキーおよび暗号化されたメッセージをローカルサブネット上に返すことができる。
【００６５】
[0066]コンパニオンデバイスがセッションに加わるべく試行する場合、コンパニオンデバイスはコンパニオンサービスと接触し、コンパニオンサービスは、次に、現在のユーザーがログインしているコンソールのネットワークアドレス、ならびにサインするために使用することができ、また、メッセージを封印するために使用することができる保護セッションキーの両方をローカルサブネット上に返す。
【００６６】
[0067]サービスとの通信は、ＨＴＴＰＳを介して実施することができる。ライン・オブ・サイトＩＰ接続性を利用することができる場合、後続する通信は、コマンドに対してはＴＣＰ／ＩＰを使用して実施することができ（コンソールのＴＣＰ／ＩＰアドレスを使用して）、また、通知に対してはＵＤＰ同報通信を使用して実施することができる（コンソールのＩＰサブネットアドレスを使用して）。ライン・オブ・サイトＩＰ接続性を利用することができない場合、後続する通信は、コンパニオンサービスを介して実施することができる。
【００６７】
[0068]１つまたは複数の実施態様では、コンソールに対するＴＣＰ接続性は可能であっても、デバイスに対するＵＤＰ同報通信は、コンソールおよびコンパニオンデバイスがＩＰルーターによって分離されているために不可能であることがあり得る。その場合、コンパニオンデバイスは、コンパニオンサービスを介して通知を受け取ることができるが、依然としてコマンドの発行（およびそれらに対する応答の受取り）は、コンソールへの直接ＴＣＰを介して実施される。
【００６８】
機密保護
[0069]ローカルサブネット（例えばＷｉ−Ｆｉを介したＷＥＰまたはＷＰＡ）によって提供される機密保護に加えて、システム内における通信は、以下のようにして保護することができる。
【００６９】
コンパニオンデバイス−コンパニオンサービス
[0070]コンパニオンデバイスとサービスの間の通信は、有効コンソールＩＤに対応するネットワークＩＤを使用して認証することができるＨＴＴＰＳを介して実施することができる。例えばモバイル通信デバイスは、ＸＢＬなどのリンキングサービスから認証（例えばＳＡＭＬ）送信権を取得することができ、次にモバイル通信デバイスは、この認証送信権をコンパニオンサービスに提示する。コンパニオンサービスは、次に、サービスに対する後続する呼出しのための１つまたは複数の機密保護送信権を発行する。例えばサービスに対する後続する呼出しのために１つの送信権を使用することができ、また、コンソールおよびモバイル通信デバイスに対する呼出しのために他の送信権を使用し、それによりメッセージを認証することができる。
【００７０】
コンソール−コンパニオンサービス
[0071]コンソールとサービスの間の通信は、ＨＴＴＰＳを介して実施することができる。ＸＢＬにログインされたコンソール上のユーザーのセットが変化すると、コンソールは、ＸＢＬからＳＡＭＬ送信権を取得することができ、次にコンソールは、このＳＡＭＬ送信権をコンパニオンサービスに提示する。コンパニオンサービスは、次に、サービスに対する後続する呼出しのための機密保護送信権を発行する。
【００７１】
コンパニオンデバイス−コンソール／コンソール−コンパニオンデバイス
[0072]コンパニオンデバイスまたはコンソールがコンパニオンサービスを認証すると、デバイスは、次に、互いの通信のための保護セッションを確立することができる。セッションは、複数のデバイスが通信のために使用することができる保護文脈と見なすことができる。個々のセッションは、
１．セッションＩＤ（ｇｕｉｄ）であって、この通信セッションを独自に識別するサービスによって追跡されるセッションＩＤ
２．サインするために使用される１２８ビットセッションキー、およびローカルサブネットを介して送られる暗号化されたメッセージ
を有することができる。ログオンされたユーザーのセットがコンソール上で変化すると、コンソールは、コンパニオンサービスを使用して必ず再認証することができ、その前のユーザーがログオフしている場合、新しいセッションキーをそのセッションのために生成することができる。
【００７２】
[0073]ローカルサブネット上のデバイス間で送られるメッセージは、完全性が保護され、かつ暗号化されたメッセージであってもよい。完全性保護は、ＨＭＡＣ−ＳＨＡ１を使用して提供することができ、一方、暗号化は、ＣＢＣモードのＡＥＳ−１２８を使用して実施することができる。シーケンス番号を使用して再生保護を実施することも可能である。受信側は、「最高点」数およびより小さい数字を有する拒絶メッセージを維持することができる。
【００７３】
コンソール実施態様
[0074]コンパニオンのためのほとんどの通信スタックは、タイトルに露出される最小のＡＰＩセットで、コンソール・オペレーティング・システムの中で実施することができる。
【００７４】
コンソールＡＰＩ
[0075]コンパニオンＡＰＩは、タイトルによって呼び出すことができる。ＡＰＩは、「ＬｒｃＳｅｔＭｅｄｉａＳｔａｔｅ」と呼ぶことができる。ＬｒｃＳｅｔＭｅｄｉａＳｔａｔｅは、再生ヘッド状態またはコンテンツＩＤが変化したことを通信するためにメディアプレーヤータイトルによって呼び出される。この機能は、
１．コンテンツＩＤの明確な変化（例えば同じコンソール・タイトル／ａｐｐ内での最初の映画の再生から次の映画の再生への変化）に応答して
２．トランスポート制御要求（例えば停止が押された、ＦＦ／ＲＥＷのために再生速度が変化した）の処理に応答して
３．ストリームの末端への到達またはバッファリングの開始もしくは終了を含む、通常の再生による再生ヘッド状態の進行に応じて周期的に
呼び出すことができる。このＡＰＩの実施態様は、アプリケーションの実行を混乱させることなく、またはタイトル資源を消費することなく、再生ヘッド状態に対する後続する要求を満たすために、最後の呼出しで引き渡されたデータをしまっておくことができる。
【００７５】
[0076]このＡＰＩの実施態様は、ヒューリスティックスを実施して、生じた変化のタイプに基づいて、実際に媒体状態変化通知を送る時期を決定することができる。概して、
１．位置以外の欄に対する変化は、利用することができる次の機会に送られる通知をトリガーすることができる。
【００７６】
２．位置欄に対してのみ生じた変化は、送られる通知をトリガーすることはできない。その代わりに、コンソール・オペレーティング・システムは、周期的媒体状態変化通知を送ることができ、また、次の状態変化で、最後の位置変化をピックアップすることができる。ローカルサブネットを介した周期的変化の場合、１０秒毎にこれらの変化を送ることができる。クラウドを介した周期的変化の場合、３０秒毎にこれらの変化を送ることができる。
【００７７】
[0077]ＡＰＩのシグネチャーは以下の通りである。
struct LrcMediaState
{
ULONGLONG duration; //100ns単位における総コンテンツ継続時間
ULONGLONG minSeek; //100ns単位における最小シーク位置
ULONGLONG maxSeek; //100ns単位における最大シーク位置
ULONGLONG position; //100ns単位における現在の再生位置
float fRate; //現在の再生速度(1.0f==通常の再生)
ScourTransportState eTransportState; //現在のトランスポート状態
TransportCapabilities eTransportCapabilities;
// Wire repは「mediaType:mediaAssetId」である
BYTE MediaAssetId[256]; //ヌル終了UTF-8
// TODO:Minは、彼がコンソール上のZuneから正しい資産idを得ることができることを保障する
};
機能は、成功するとＳ＿ＯＫを返し、失敗するとＥ＿ＦＡＩＬを返す。
【００７８】
ＬｒｃＧｅｔＩｎｐｕｔ／ＬｒｃＧｅｔＩｎｐｕｔＷｉｔｈＳｅｅｋ
[0078]ＬｒｃＧｅｔＩｎｐｕｔ／ＬｒｃＧｅｔＩｎｐｕｔＷｉｔｈＳｅｅｋ  ＡＰＩは、タイトルの入力ポーリングルーチンの一部として呼ばれるように設計されている。ＬｒｃＧｅｔＩｎｐｕｔは、コンパニオンデバイスから制御コマンドを得るためのシークコマンドをサポートすることができないタイトルから呼ばれるように設計されている。ＬｒｃＧｅｔＩｎｐｕｔＷｉｔｈＳｅｅｋは、「シーク」操作をサポートすることができるタイトルのために設計されている。
【００７９】
HRESULT WINAPI LrcGetInput(
IN OUT DWORD* pdwUserlndex,
IN DWORD dwFlags,
OUT XINPUT_KEYSTROKE *pKeystroke
);
HRESULT WINAPI LrcGetInputWithSeek(
IN OUT DWORD*pdwUserlndex,
IN DWORD dwFlags,
OUT XINPUT_KEYSTROKE *pKeystroke,
OUT ULONGLONG *pSeekPos
);
入力事象が存在している場合、機能はＥＲＲＯＲ＿ＳＵＣＣＥＳＳを返す。入力事象が存在していない場合、機能はＥＲＲＯＲ＿ＥＭＰＴＹを返す。
【００８０】
[0079]ｐｄｗＵｓｅｒＩｎｄｅｘは、署名して入った、デバイスと関連付けられたユーザー（例えばゲーマー）のインデックスに対するポインターであり、次の利用可能入力事象を任意のユーザーから取り出すために、０からＸＵＳＥＲ＿ＭＡＸ＿ＣＯＵＮＴ−１までの範囲の値にするか、またはＸＵＳＥＲ＿ＩＮＤＥＸ＿ＡＮＹに設定することができる。
【００８１】
[0080]復帰すると、ｐｄｗＵｓｅｒＩｎｄｅｘによって指示された変数は、入力事象の原始であったデバイスと関連付けられたゲーマーのインデックスを含むことができる。これは、ｐｄｗＵｓｅｒＩｎｄｅｘによって指示された変数がＸＵＳＥＲ＿ＩＮＤＥＸ＿ＡＮＹを入力上に含んでいると有用である。
【００８２】
[0081]ｄｗＦｌａｇｓパラメーターは、ＸＩＮＰＵＴ＿ＦＬＡＧ＿ＡＮＹＤＥＶＩＣＥであっても、またはｐｄｗＵｓｅｒＩｎｄｅｘが値ＸＵＳＥＲ＿ＩＮＤＥＸ＿ＡＮＹを有している場合はＸＩＮＰＵＴ＿ＦＬＡＧ＿ＡＮＹＵＳＥＲであってもよい。
【００８３】
[0082]ｐＫｅｙｓｔｒｏｋｅパラメーターは、ＸＩＮＰＵＴ＿ＫＥＹＳＴＲＯＫＥ構造に対する非ヌルポインターであってもよい。
[0083]ｐＳｅｅｋＰｏｓパラメーターは、ＵＬＯＮＧＬＯＮＧに対する非ヌルポインターであってもよい。
【００８４】
[0084]ＬｒｃＧｅｔＩｎｐｕｔの場合、機能がＥＲＲＯＲ＿ＳＵＣＣＥＳＳを返すと、ｐＫｅｙｓｔｒｏｋｅによって参照される構造は、この入力事象に対してＸＩＮＰＵＴ＿ＫＥＹＳＴＲＯＫＥデータを含むことができる。
【００８５】
[0085]ＬｒｃＧｅｔＩｎｐｕｔＷｉｔｈＳｅｅｋの場合、
１．入力がシークコマンドであった場合と、ｐＳｅｅｋＰｏｓによって参照されるＵＬＯＮＧＬＯＮＧは、１００ｎｓ単位の所望の位置を含むことができ、また、ｐＫｅｙｓｔｒｏｋｅによって参照される構造は未定義であってもよい。
【００８６】
２．入力はシークコマンドではなかったが、機能がＥＲＲＯＲ＿ＳＵＣＣＥＳＳを返した場合、ｐＳｅｅｋＰｏｓによって参照されるＵＬＯＮＧＬＯＮＧは−１であってもよく、また、ｐＫｅｙｓｔｒｏｋｅによって参照される構造は、この入力事象に対してＸＩＮＰＵＴ＿ＫＥＹＳＴＲＯＫＥデータを含むことができる。
【００８７】
[0086]これらのＡＰＩのいずれの場合も、入力に対応するヒューマン・インタフェース・デバイス（ＨＩＤ）コードは、標準ハードウェアコードである。ＵｓｅｒＩｎｄｅｘは、コンパニオンデバイスの現在のユーザーに基づいて、ゼロないし３であってもよい正しいインデックスに設定することができる。新しいキーが押されなかった場合（また、ＧｅｔＩｎｐｕｔＷｉｔｈＳｅｅｋの場合で、シーク情報が存在しない場合）、ＡＰＩはＥＲＲＯＲ＿ＥＭＰＴＹを返す。ｐｄｗＵｓｅｒＩｎｄｅｘが入力上にＩＤを含んでおり、それに対する対応するログオンユーザーが存在しない場合、これらのＡＰＩはＥＲＲＯＲ＿ＤＥＶＩＣＥ＿ＮＯＴ＿ＣＯＮＮＥＣＴＥＤを返す。
【００８８】
コンソール内のコンパニオン構成要素の実施態様
[0087]ブート時に、コンソールは、ＸとＹの間のダイナミックポート上に、コマンドのための入り接続をサポートするためのＴＣＰリスナーソケットを生成する。リスン待ち行列の長さは１であり、また、コンソールは、資源を節約するために一度に１つの入り接続を受け取ることができる。これは、コンソールは、入りコマンド要求を処理し、かつ対応する応答を送った後、リスナーソケットに対して次のアクセプトコールを実施する前にＴＣＰ接続を閉じることができることを意味している。
【００８９】
[0088]ローカルサブネットを介して通知を送る場合、コンソールは、ＵＤＰソケットを生成し、送るための呼出しを実施した後、ソケットを閉じることができる。ＴＣＰソケットおよびＵＤＰソケットの両方の使用は、開いているソケットの数を少なくするために最適化され、この最適化は、コンソール内で走っているコードに対する正しい最適化であることに留意されたい。プロトコルは、複数のメッセージ交換の間、実施態様がＴＣＰ接続を開いた状態に保持することができるように設計することができる。上で説明したソケットの使用に加えて、コンソールがコンパニオンサービスと対話するためにもう１つソケットを消費することができる。
【００９０】
[0089]ＸＢＬアカウント／プロファイルのログインまたはログアウトを必要とするログオンが変化する毎に、コンソールはコンパニオンサービスと接触して、ユーザーのセットがそのコンソール上で変化したことを示す。また、これは、コンソールのローカルＩＰアドレスおよび入りコマンド要求を聞くために使用されるＴＣＰポートの登録を必要とする。さらに、懸案のＣＯＭＥＴスタイルＨＴＴＰ要求は、非ライン・オブ・サイトＩＰデバイスからの入り要求に応答するために、サービス上に「留めておく」ことができる。この要求は、３０秒毎に再発行することができ、また、コンソール上のログオンセットが変化すると終了する。
【００９１】
通信資源消費
[0090]コンソールからの総ソケット使用は、
・１個の静的に割り当てられる、ログオンセット登録およびＣＯＭＥＴ事象獲得の両方のために使用される、サービスとのＨＴＴＰ通信のためのアウトバウンドＴＣＰソケット
・１個の静的に割り当てられる、ローカルサブネット要求のためのＴＣＰリスンソケット
・１個の動的に割り当てられる、入りローカルサブネット要求を処理するためのＴＣＰストリームソケット
・１個の動的に割り当てられる、通知メッセージを送るためのＵＤＰソケット
である。
【００９２】
[0091]これは、少なくとも２個のソケットが消費され、また、最大４個（ＴＣＰ応答の送信に先立ってＵＤＰ通知の送信が許容される場合）、または３個（ＴＣＰ接続が切り離されるまで通知の送信が延期される場合）のソケットが消費されることを意味している。
【００９３】
プロトコル概説
[0092]プロトコルは、コンパニオンデバイスからコンソールに向かって開始される直接ＴＣＰ接続を使用して、コンソール上での呼出し操作をサポートする。プロトコル設計は、ＴＣＰ接続毎に複数の懸案要求をサポートし、かつ順序外れの応答引渡しをサポートするが、本発明のコンソール実施態様は、最初の応答を送った後、接続を閉じることができる。
【００９４】
[0093]プロトコルは、コンソールからコンパニオンデバイスへのＵＤＰ同報通信を使用して、通知の送信をサポートする。ＴＣＰまたはＵＤＰを介して、以下で説明する署名／暗号化規則を使用して、以下のメッセージフォーマットを安全に送ることができる。
【００９５】
メッセージフォーマット
[0094]メッセージは、ネットワークを介して、２進ビッグ・エンディアン・フォーマットで符号化することができる。個々のメッセージ欄は、それらの固有の境界上で整列させることができる（すなわち２バイト境界上のＷＯＲＤ、および４バイト境界上のＤＷＯＲＤ等々）。固定長列が「＼０」で終了するＵＴＦ−８テキストとして符号化され、作成者によって縞をつけることができる先頭のユニコードＢＯＭは含んでいない。
【００９６】
[0095]ＴＣＰ接続およびＵＤＰペイロードの両方に使用するため保護フレーミングプロトコルが定義されている。これらのメッセージのフォーマットは、
１．バージョン情報、機密保護データ、アドレス情報およびメッセージＩＤを含んだ固定長のＭｅｓｓａｇｅ  Ｈｅａｄｅｒ
２．メッセージタイプ特化データを含んだ可変長のＭｅｓｓａｇｅ  Ｂｏｄｙ（メッセージボディの長さは、メッセージヘッダー内の欄によって示される）
３．メッセージヘッダーおよびメッセージボディ上にＨＭＡＣ−ＳＨＡ１シグネチャーを含んだ固定長のＭｅｓｓａｇｅ  Ｔｒａｉｌｅｒ
を含む。
【００９７】
Ｍｅｓｓａｇｅ  Ｈｅａｄｅｒｓ
[0096]メッセージは、３２バイトメッセージヘッダーで始まり、その内容は以下の通りである。
【００９８】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = <残りのメッセージ中のバイト数>
DWORD SequenceNumber = <再生検出、相関応答のために、また暗号化のための初期化ベクトルとして使用され、メッセージ毎に増分される>
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的であり、OxFFFFFFFFは同報通信を示す>
DWORD From = <デバイスidメッセージの出所であり、応答をアドレス指定するために使用される>
DWORD MessageKind = <以下を参照>
DWORD MessageType = <以下を参照>
[0097]「Ｔｏ」および「Ｆｒｏｍ」メッセージヘッダー欄は、個々のコンパニオンデバイスが独自のシーケンス番号を有しているため、再生検出をサポートするために使用される。要求の中に「Ｆｒｏｍ」欄がない場合、コンソールは、メッセージを送った顧客を決定することができず、したがって正しいシーケンス番号を決定することができない。応答の中に「Ｔｏ」欄がない場合、アタッカーは、可能性として、異なるデバイスに対して、あるデバイスのために意図されたメッセージを再生することができる。
【００９９】
[0098]メッセージヘッダーには、ＭｅｓｓａｇｅＫｉｎｄおよびＭｅｓｓａｇｅＴｙｐｅの２つのディスクリミネーター欄が存在している。ＭｅｓｓａｇｅＫｉｎｄ欄は、メッセージが、
操作の実施を要求するために使用される［０ｘ０００００００１］Ｒｅｑｕｅｓｔメッセージ（例えばコマンド、問合せ、接続管理）であるかどうか、または
特定の要求メッセージに応答して実施された操作の結果を伝える［０ｘ０００００００２］Ｒｅｓｐｏｎｓｅメッセージであるかどうか、または
状態変化事象を伝える［０ｘ０００００００３］Ｎｏｔｉｆｉｃａｔｉｏｎメッセージであるかどうか
を示している。
【０１００】
[0099]ＭｅｓｓａｇｅＴｙｐｅ欄は、所与の操作または通知のフォーマットおよびセマンティクスを識別する。サポートされるメッセージタイプの一リスト例は、
[0x80000001] JoinSession (要求および応答)
[0x80000002] LeaveSession (要求および応答)
[0x00000001] GetActiveTitleld ([要求および応答)
[0x00000002] LaunchTitle (要求および応答)
[0x00000003] SendInput (要求および応答)
[0x00000004] GetMediaAndTitleState (要求および応答)
[0x00000005] NonMediaTitleStateNotification (通知)
[0x00000006] MediaTitleStateNotification (通知)
[00100]応答メッセージは、それらのメッセージヘッダーの中に追加欄を有していなければならない。
【０１０１】
DWORD ResponseTo = <これが対応する要求のSequenceNumber>
DWORD ResultCode = <HRESULTベースの状態コード>
[00101]「応答」メッセージは、ＨＲＥＳＵＬＴのように処理される４バイト結果コードで始まる。詳細には、ＯｘＯＯＯＯＯＯＯＯ／Ｓ＿ＯＫの値は、要求された操作の実行が成功したことを表している。特定の結果コードは、応答メッセージタイプ毎に定義される。
【０１０２】
Ｍｅｓｓａｇｅ  Ｔｒａｉｌｅｒｓ
[00102]メッセージは２０バイトで終了する。
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
Ｍｅｓｓａｇｅ  Ｂｏｄｉｅｓ
[00103]この部分は、プロトコルによってサポートすることができる特定のメッセージタイプのフォーマットおよびセマンティクスを定義する。ＳｅｑｕｅｎｃｅＮｕｍｂｅｒメッセージヘッダー欄の後にバイトが続き、また、メッセージトレーラーに先行し暗号化される。
【０１０３】
ＪｏｉｎＳｅｓｓｉｏｎ  Ｒｅｑｕｅｓｔ  Ｍｅｓｓａｇｅ
[00104]このメッセージは、（ａ）プロトコルバージョンが一致していることを保証し、かつ（ｂ）インバウンドおよびアウトバウンドメッセージのために使用するための初期シーケンス番号を得るために、コンパニオンデバイスからコンソールへ送られる。ＪｏｉｎＳｅｓｓｉｏｎ要求／応答は、コンパニオンデバイスから何らかの追加メッセージがローカルサブネットを介してコンソールに送られる前に生じてもよい。
【０１０４】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = <残りのメッセージ中のバイト数>
DWORD SequenceNumber = 0xnnnnnnnn <無作為初期値>
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000001 <要求>
DWORD MessageType = 0x80000001 <JoinSession>
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
ＪｏｉｎＳｅｓｓｉｏｎ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ
[00105]このメッセージは、（ａ）プロトコルバージョンが一致していることを保証し、かつ（ｂ）インバウンドおよびアウトバウンドメッセージのために使用するための初期シーケンス番号を伝えるために、コンパニオンデバイスからコンソールへ、また、コンソールからコンパニオンデバイスへ送られる。
【０１０５】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = <残りのメッセージ中のバイト数>
DWORD SequenceNumber = 0xnnnnnnnn <常に要求のSeqeuenceNumber+1>
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的であり、JoinSession Requestメッセージ中のFromと同様>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000002 <応答>
DWORD MessageType = 0x80000001 <JoinSession>
DWORD ResponseTo = 0xnnnnnnnn
DWORD ResultCode = <以下を参照>
DWORD SupportedProtocolVersion = 0xnnnnnnnn
DWORD ClientSequenceNumber = <顧客が次の要求のために使用することができるシーケンス番号>
DWORD NotificationSequenceNumber = <サーバーが次のUDP通知メッセージのために使用することができるシーケンス番号>
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
[00106]ＲｅｓｕｌｔＣｏｄｅがＳ＿ＯＫ（０）である場合、要求されたプロトコルバージョンがサポートされる。また、
１．ＳｕｐｐｏｒｔｅｄＰｒｏｔｏｃｏｌＶｅｒｓｉｏｎは、このサーバーによってサポートされるプロトコルバージョン番号を含む。
【０１０６】
２．ＣｌｉｅｎｔＳｅｑｕｅｎｃｅＮｕｍｂｅｒは、顧客が次のメッセージをサーバーに送るために使用することができるシーケンス番号を含む。
３．ＮｏｔｉｆｉｃａｔｉｏｎＳｅｑｕｅｎｃｅＮｕｍｂｅｒは、ＵＤＰを介してサーバーによって送られる次の通知メッセージのためのシーケンス番号を含む。
ＲｅｓｕｌｔＣｏｄｅがＥ＿ＶＥＲＳＩＯＮ＿ＭＩＳＭＡＴＣＨ（０ｘ８ｈｈｈｈｈｈｈ）である場合、セッションは結合されておらず、ＳｕｐｐｏｒｔｅｄＰｒｏｔｏｃｏｌＶｅｒｓｉｏｎ欄のみが有効である。ＲｅｓｕｌｔＣｏｄｅがＥ＿ＴＯＯ＿ＭＡＮＹ＿ＣＯＮＮＥＣＴＩＯＮＳ（０ｘ８ｈｈｈｈｈｈｈ）である場合、セッションは結合されておらず、ＳｕｐｐｏｒｔｅｄＰｒｏｔｏｃｏｌＶｅｒｓｉｏｎ、ＣｌｉｅｎｔＳｅｑｕｅｎｃｅＮｕｍｂｅｒおよびＮｏｔｉｆｉｃａｔｉｏｎＳｅｑｕｅｎｃｅＮｕｍｂｅｒは無効である。
【０１０７】
ＧｅｔＡｃｔｉｖｅＴｉｔｌｅＩｄ  Ｒｅｑｕｅｓｔ  Ｍｅｓｓａｇｅ
[00107]このメッセージは、コンソール上でアクティブタイトルＩＤを問い合わせるためにコンパニオンデバイスからコンソールへ送られる。
【０１０８】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000001 <要求>
DWORD MessageType = 0x00000001 <GetActiveTitleId>
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
ＧｅｔＡｃｔｉｖｅＴｉｔｌｅＩｄ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ
[00108]このメッセージは、ＧｅｔＡｃｔｉｖｅＴｉｔｌｅＩｄ要求メッセージに応答してコンパニオンデバイスからコンソールへ、また、コンソールからコンパニオンデバイスへ送られ、現在走っているタイトルを示す。
【０１０９】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的であり、GetActiveTitleId Requestメッセージ中のFromと同様>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000002 <応答>
DWORD MessageType = 0x00000001 <GetActiveTitleId>
DWORD ResponseTo = 0xnnnnnnnn
DWORD ResultCode = 0x00000000
DWORD TitleId = 0xnnnnnnnn
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
ＴｉｔｌｅＩｄは、コンソール上で現在走っているタイトルのためのコンソールＴｉｔｌｅ  ＩＤである。
【０１１０】
ＬａｕｎｃｈＴｉｔｌｅ  Ｒｅｑｕｅｓｔ  Ｍｅｓｓａｇｅ
[00109]このメッセージは、明記されたコマンド・ライン・アーギュメントを有するタイトルを起動するためにコンパニオンデバイスからコンソールへ送られる。
【０１１１】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000001 <要求>
DWORD MessageType = 0x00000002 <LaunchTitle>
DWORD Titleld
DWORD LaunchParameterLength; (使用せず)
BYTE[900] LaunchParameter (ヌル終了UTF-8テキスト)
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
ＴｉｔｌｅＩｄは、コンソール上で現在走っているタイトルのためのコンソールＴｉｔｌｅ  ＩＤである。ＬａｕｎｃｈＰａｒａｍｅｔｅｒ欄は、通常、一旦タイトルが起動すると、再生すべき内容を識別する。この欄の正確な翻訳はタイトル特化である。
【０１１２】
ＬａｕｎｃｈＴｉｔｌｅ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ
[00110]このメッセージは、タイトル起動の成功／失敗を示すためにコンソールからコンパニオンデバイスへ送られる。
【０１１３】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的であり、LaunchTitle Requestメッセージ中のFromと同様>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000002 <応答>
DWORD MessageType = 0x00000002 <起動>
DWORD ResponseTo = 0xnnnnnnnn
DWORD ResultCode = 0x00000000
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
ＳｅｎｄＩｎｐｕｔ  Ｒｅｑｕｅｓｔ  Ｍｅｓｓａｇｅ
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000001 <要求>
DWORD MessageType = 0x00000003 <SendInput>
DWORD ValidFields = 0x01 - VirtualKey, 0x02 - SeekPos, 0x03 - Both
DWORD VirtualKey = <XDKからの仮想キーコード>
ULONGLONG SeekPosition
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumberおよび後続する欄の暗号化バージョン>
ＶａｌｉｄＦｉｅｌｄｓ欄は、要求がキーストロークを含んでいる場合は０ｘ０１の値を有しており、要求がシークコマンドを含んでいる場合は０ｘ０２の値を有しており、かつ要求がそれらの両方を含んでいる場合は０ｘ０３の値を有している。ＶｉｒｔｕａｌＫｅｙは、ＸＩＮＰＵＴ＿ＫＥＹＳＴＲＯＫＥにおけるその定義と全く同じである。ＳｅｅｋＰｏｓｉｔｉｏｎは、シークコマンドを伝えるために使用される。この要求メッセージがシークを示していない場合、この欄は、ＯｘＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦ（−１）の値を有することができる。
【０１１４】
ＳｅｎｄＩｎｐｕｔ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ
[00111]このメッセージは、ＳｅｎｄＩｎｐｕｔ操作が成功したこと／失敗したことを示すためにコンパニオンデバイスからコンソールへ、また、コンソールからコンパニオンデバイスへ送られる。
【０１１５】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的であり、SendInput Requestメッセージ中のFromと同様>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000002 <応答>
DWORD MessageType = 0x00000003 <SendInput>
DWORD ResponseTo = 0xnnnnnnnn
DWORD ResultCode = 0x00000000
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
ＧｅｔＭｅｄｉａＡｎｄＴｉｔｌｅＳｔａｔｅ  Ｃｏｍｍａｎｄ  Ｍｅｓｓａｇｅ
[00112]このメッセージは、コンソール上の媒体状態を問い合わせるためにコンパニオンデバイスからコンソールへ送られる。
【０１１６】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000001 <要求>
DWORD MessageType = 0x00000004 <GetMediaAndTitleState>
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumber、および後続するメッセージヘッダー欄およびメッセージボディ全体の暗号化バージョン>
ＧｅｔＭｅｄｉａＡｎｄＴｉｔｌｅＳｔａｔｅ  Ｒｅｓｐｏｎｓｅ  Ｍｅｓｓａｇｅ
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = <デバイスidメッセージが意図されている目的であり、GetMediaAndTitleState Requestメッセージ中のFromと同様>
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000002 <応答>
DWORD MessageType = 0x00000004 <GetMediaAndTitleState>
DWORD ResponseTo = 0xnnnnnnnn
DWORD ResultCode = 0x00000000
DWORD TitleId
ULONGLONG Duration (100ns単位)
ULONGLONG Position (100ns単位)
ULONGLONG MinSeek (100ns単位)
ULONGLONG MaxSeek (100ns単位)
FLOAT Rate (再生速度、1.0==通常)
DWORD TransportState (以下のコンソールAPI内のScourTransportState列挙参照)
DWORD TransportCapabilities (以下のコンソールAPI内のTransportCapabilities列挙参照)
DWORD MediaAssetIdLength; (使用せず)
BYTE[256] MediaAssetId (ヌル終了UTF-8テキスト)
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumberおよび後続する欄の暗号化バージョン>
[00113]ＲｅｓｕｌｔＣｏｄｅがＳ＿ＯＫ（０）で、かつＴｒａｎｓｐｏｒｔＳｔａｔｅがＳＣＯＵＲＴＲＡＮＳＰＯＲＴＳＴＡＴＥ＿ＮＯＭＥＤＩＡではない場合、他の媒体状態欄（Ｄｕｒａｔｉｏｎ、Ｐｏｓｉｔｉｏｎ、…、ＭｅｄｉａＡｓｓｅｔＩｄ）はすべて有効である。ＲｅｓｕｌｔＣｏｄｅがＳ＿ＯＫ（０）で、かつＴｒａｎｓｐｏｒｔＳｔａｔｅがＳＣＯＵＲＴＲＡＮＳＰＯＲＴＳＴＡＴＥ＿ＮＯＭＥＤＩＡである場合、現在、コンソール上には媒体は存在せず、残りの媒体状態値は定義されない。
【０１１７】
ＮｏｎＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎ  Ｍｅｓｓａｇｅ
[00114]ＮｏｎＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎメッセージは、非媒体イネーブル・コンソール・タイトル（例えばゲーム）が、現在、コンソール上で走っている最中であることを示す。ＮｏｎＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎメッセージは、以下の場合に、コンソールによってＵＤＰ同報通信を介して送られる。
【０１１８】
１．非媒体イネーブル・タイトルが走っている最中である（例えばゲーム）。および
２．更新時間間隔（１０秒）のためにＮｏｎＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎまたはＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎが未だ送られていない。または非媒体イネーブル・タイトルが起動されている。
【０１１９】
[00115]タイトルの変更は、タイトルＩＤを伝えるクラウドに対して再認証を強制するため、このメッセージは、コンソールからクラウドへ送る必要はない。このメッセージは、クラウドからコンパニオンデバイスへ送ることができる。
【０１２０】
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = 0xFFFFFFFF
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000003 <通知>
DWORD MessageType = 0x00000005 <NonMediaTitleStateNotification>
DWORD TitleId
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumberおよび後続する欄の暗号化バージョン>
ＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎ  Ｍｅｓｓａｇｅ
[00116]ＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎメッセージは、媒体イネーブル・コンソール・タイトル（例えばビデオ・ストリーミング・サービスに関連するタイトル）が、現在、コンソール上で走っている最中であることを示す。このメッセージは、コンソール・タイトルＩＤならびに現在のコンテンツＩＤの両方、および再生ヘッド状態を伝える。
【０１２１】
[00117]ＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎメッセージは、以下の場合に、コンソールによってＵＤＰ同報通信を介して送られる。
１．媒体イネーブル・タイトルが走っている最中である（例えばゲーム）。および
２．更新時間間隔（１０秒）のためにＮｏｎＭｅｄｉａＳｔａｔｅＴｉｔｌｅＮｏｔｉｆｉｃａｔｉｏｎまたはＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎが未だ送られていない。あるいは媒体イネーブル・タイトルが起動されているか、またはトランスポート制御コマンドがタイトルによって処理されている（例えば再生、停止）。
【０１２２】
[00118]ＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎメッセージは、以下の場合に、コンソールによってクラウドへ送られる。
１．媒体イネーブル・タイトルが走っている最中である（例えばゲーム）。および
２．更新時間間隔（３０秒）のためにＮｏｎＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎまたはＭｅｄｉａＴｉｔｌｅＳｔａｔｅＮｏｔｉｆｉｃａｔｉｏｎが未だ送られていない。あるいは媒体イネーブル・タイトルが起動されているか、またはトランスポート制御コマンドがタイトルによって処理されている（例えば再生、停止）。
【０１２３】
[00119]このメッセージは、クラウドからコンパニオンデバイスへ送ることができる。
DWORD HeaderSignature = 0xBEDABEDA
DWORD MessageLength = 0xnnnnnnnn
DWORD SequenceNumber = 0xnnnnnnnn
DWORD ProtocolVersion = 0x00000001
DWORD To = 0xFFFFFFFF
DWORD From = <デバイスidメッセージの出所>
DWORD MessageKind = 0x00000003 <通知>
DWORD MessageType = 0x00000006 <MediaTitleNotification>
DWORD TitleId
ULONGLONG Duration (100ns単位)
ULONGLONG Position (100ns単位)
ULONGLONG MinSeek (100ns単位)
ULONGLONG MaxSeek (100ns単位)
FLOAT Rate (再生速度、1.0==通常)
DWORD TransportState (以下のコンソールAPI内のScourTransportState列挙参照)
DWORD TransportCapabilities (以下のコンソールAPI内のTransportCapabilities列挙参照)
DWORD MediaAssetIdLength; (使用せず)
BYTE[256] MediaAssetId (ヌル終了UTF-8テキスト)
BYTE[20] hmac = <HeaderSignature上のHMAC-SHA1、MessageLength、SequenceNumberおよび後続する欄の暗号化バージョン>
[00120]ＴｒａｎｓｐｏｒｔＳｔａｔｅがＳＣＯＵＲＴＲＡＮＳＰＯＲＴＳＴＡＴＥ＿ＮＯＭＥＤＩＡではない場合、他の媒体状態欄（Ｄｕｒａｔｉｏｎ、Ｐｏｓｉｔｉｏｎ、…、ＭｅｄｉａＡｓｓｅｔＩｄ）は有効である。ＴｒａｎｓｐｏｒｔＳｔａｔｅがＳＣＯＵＲＴＲＡＮＳＰＯＲＴＳＴＡＴＥ＿ＮＯＭＥＤＩＡである場合、現在、コンソール上には媒体は存在せず、残りの媒体状態値は定義されない。
【０１２４】
コンソールおよびクラウド通信
[00121]ユーザーがコンソールにログオンすると、コンソールは、ユーザー情報をクラウドに報告し、したがってクラウドは、コンソールにログオンしたユーザーを知ることができる。また、コンソールは、そのローカルサブネットＩＰアドレスについてクラウドに話す。コンソールは、ユーザーがログオフすると、そのことをクラウドに報告する。
【０１２５】
通知モデル
[00122]コンソールは、ユニキャスト手法を使用して、タイトル変化、および媒体状態変化等々のようなコンソール上の特定の変化を知らせることができる。これは、デバイスとコンソールの間に確立されるソケットを使用して実施することができる。
【０１２６】
[00123]コンパニオンデバイス側では、実行時ライブラリーは、通知機能を提供することができる。すなわち、リンキングモジュールは、リンキングモジュールが興味をもった事象は、何でも登録することができ、また、実行時層は、事象が生じると、それらの事象をａｐｐに通知することができる。
【０１２７】
デバイス側の実行時ライブラリー
[00124]実行時ライブラリーは、サポートされている個々のデバイス上で利用することができる。
【０１２８】
[00125]サポートすることができるＡＰＩ例は以下の通りである。
１．ブールＪｏｉｎＳｅｓｓｉｏｎ（）
このＡＰＩは、デバイスを「ｈｏｓｔＩＰＡｄｄｒｅｓｓ」によって特定されるコンソールホストに接続することができる。
【０１２９】
リターン値：接続が良好であればリターンＴＲＵＥ。さもなければリターンフォールス。
サンプル使用：ＪｏｉｎＳｅｓｓｉｏｎ（）；
それは、ペアリング後のコンソールのローカルサブネットＩＰアドレスが成功しているクラウドから得ることができる。また、それは、コンソールとの通信を保護するために使用することができる機密保護キーをクラウドから得る。
【０１３０】
２．ＤｉｓｃｏｎｎｅｃｔＳｅｓｓｉｏｎ（）
このＡＰＩは、デバイスと現在接続されているコンソールの間の接続を閉じることができる。ランタイムは、このＡＰＩを使用してセッションデータを一掃し、コンソールを使用してソケットを閉じることに留意されたい。当然、デバイスが休止状態に入ると、コンソールはそれを知ることができる。したがってコンソールはソケットを閉じることができる。
【０１３１】
３．ＴｉｔｌｅＩｎｆｏ[]  ＧｅｔＡｖａｉｌａｂｌｅＴｉｔｌｅｓ（）
このＡＰＩは、リビング・ルーム・コンパニオン経験が現在サポートしているタイトルのリストを提供することができる。
【０１３２】
struct TitleInfo
{
uint titleId;
string friendlyName;
}
例えば以下は、この機能からの可能な戻りの１つである。
【０１３３】
{
1481115612;
"Zune";
}
{
"1481115605";
"Netflix";
}
４．符号なしｉｎｔ  ＧｅｔＣｕｒｒｅｎｔＲｕｎｎｉｎｇＴｉｔｌｅＩｄ（）
このＡＰＩは、現在接続されているコンソール上で現在走っているタイトルのｔｉｔｌｅＩＤに戻す。
【０１３４】
５．ボイドＬａｕｎｃｈ（符号なしｉｎｔ  ＴｉｔｌｅＩＤ、列パラメーター）
このＡＰＩは、「パラメーター」の中で特定されている所与のパラメーターを使用して、「ＴｉｔｌｅＩｄ」によって特定されるａｐｐを起動することができる。
ＴｉｔｌｅＩｄ：起動したいａｐｐのタイトルＩＤ。発信者は、呼出し「ＧｅｔＬｉｓｔＯｆＡｖａｉｌａｂｌｅＴｉｔｌｅｓ（）」からフレンドリーａｐｐ名を得る。
Ｐａｒａｍｅｔｅｒ：起動中にタイトルに渡したいパラメーター
６．ボイドＳｅｎｄＣｏｎｔｒｏｌＣｏｍｍａｎｄ（ＣｏｍｍａｎｄＴｙｐｅキー）
このＡＰＩは、コンソール制御コマンドを現在接続されているコンソールに送る。
【０１３５】
CommandType
{
Play,
Pause,
FastForword,
Rewind,
Stop
}
７．Ｎｏｔｉｆｉｃａｔｉｏｎ  ＡＰＩ
enum consoleProperty
{
TitleChanged,
MediaStateChange,
SubNetConnectionLost
} ;
public interface IconsolePropertyChangeDelegate
{
void propertyChanged( Object value );
} ;
ボイドＳｅｔＰｒｏｐｅｒｔｙＣｈａｎｇｅｄＣａｌｌｂａｃｋ（ｃｏｎｓｏｌｅＰｒｏｐｅｒｔｙ  ｐｒｏｐｅｒｔｙＴｙｐｅ、ＩｃｏｎｓｏｌｅＰｒｏｐｅｒｔｙＣｈａｎｇｅＤｅｌｅｇａｔｅ委託）
[00126]これらのＡＰＩは、デバイスに、状態変化、およびコンソール上のタイトル変化等々のような通知事象をコンソールから受け取らせるために使用される。特定の例が説明されているが、説明および特許請求の範囲は、必ずしもこれらの例に限定されないことは容易に明らかであろう。
【０１３６】
システムおよびデバイス例
[00127]図６は、図１を参照して説明した計算デバイス１０２を含んだ一システム例６００を示したものである。このシステム例６００は、パーソナルコンピューター（ＰＣ）、テレビジョンデバイスおよび／またはモバイルデバイス上でアプリケーションを走らせると、ユーザーのシームレス経験のための偏在環境を可能にする。サービスおよびアプリケーションは、アプリケーションを利用している間、ビデオゲームを再生している間、およびデオを見ている間等々の間、１つのデバイスから次のデバイスへ移行する際に、共通のユーザー経験のための３つのすべての環境で実質的に同様に走る。
【０１３７】
[00128]このシステム例６００では、複数のデバイスが中央計算デバイスを介して相互接続されている。中央計算デバイスは、これらの複数のデバイスに対してローカルに配置することも、またはこれらの複数のデバイスからリモートに配置することも可能である。一実施形態では、中央計算デバイスは、ネットワーク、インターネットまたは他のデータ通信リンクを介してこれらの複数のデバイスに接続される１つまたは複数のサーバーコンピューターのクラウドであってもよい。一実施形態では、この相互接続アーキテクチャーにより、複数のデバイス全体の間で機能を引き渡すことができ、それにより共通のシームレス経験をこれらの複数のデバイスのユーザーに提供することができる。これらの複数のデバイスの各々は、異なる物理的要求事項および機能を有することができ、また、中央計算デバイスは、プラットフォームを使用して、デバイスに適合され、かつ依然としてすべてのデバイスに対して共通の経験をデバイスに引き渡すことができる。一実施形態では、目標デバイスの等級が生成され、かつ経験がデバイスの包括的等級に適合される。デバイスの等級は、物理的特徴、使用のタイプまたはデバイスの他の共通の特性によって定義することができる。
【０１３８】
[00129]様々な実施態様では、計算デバイス１０２は、コンピューター６０２、モバイル６０４およびテレビジョン６０６に使用するためなどの様々な異なる構成を想定することができる。これらの構成の各々は、概ね異なる構造および機能を有することができるデバイスを含み、したがって計算デバイス１０２は、異なる複数のデバイス等級のうちの１つまたは複数に従って構成することができる。例えば計算デバイス１０２は、パーソナルコンピューター、デスクトップコンピューター、マルチ・スクリーン・コンピューター、ラップトップコンピューター、およびノートブック等々を含むデバイスのコンピューター６０２等級として実施することができる。
【０１３９】
[00130]また、計算デバイス１０２は、携帯電話、携帯型音楽プレーヤー、携帯型ゲーミングデバイス、タブレットコンピューター、およびマルチ・スクリーン・コンピューター等々などのモバイルデバイスを含むデバイスのモバイル６０４等級として実施することも可能である。また、計算デバイス１０２は、普段の観察環境で概ねより大型のスクリーンを有しているか、またはこのようなスクリーンに接続されるデバイスを含むデバイスのテレビジョン６０６等級として実施することも可能である。これらのデバイスは、テレビジョン、セットトップボックス、およびゲーミングコンソール等々を含む。本明細書において説明されている技法は、これらの様々な構成の計算デバイス１０２によってサポートすることができ、また、本明細書において説明されている技法の特定の例に限定されない。
【０１４０】
[00131]クラウド６０８は、コンテンツサービス６１２のためのプラットフォーム６１０を含み、かつ／またはコンテンツサービス６１２のためのプラットフォーム６１０を表している。プラットフォーム６１０は、ハードウェア（例えばサーバー）の基礎をなしている機能およびクラウド６０８のソフトウェア資源を抽象している。コンテンツサービス６１２は、計算デバイス１０２からリモートに位置しているサーバー上でコンピューター処理が実行されている間、利用することができるアプリケーションおよび／またはデータを含むことができる。コンテンツサービス６１２は、インターネットを介した、および／またはセルラーまたはＷｉ−Ｆｉネットワークなどの加入者ネットワークを介したサービスとして提供することができる。これの例は、計算デバイス上のリンキングモジュール１１４の包含として示されている。上で説明したように、これらの技法も、同じく、以下で説明するプラットフォーム３１０の一部としてリンキングモジュール１２４の実施態様などを介して「クラウド」を活用することができる。
【０１４１】
[00132]プラットフォーム６１０は、計算デバイス１０２と他の計算デバイスを接続するための資源および機能を抽象することができる。また、プラットフォーム６１０は、資源のスケーリングを抽象して、プラットフォーム６１０を介して実施されるコンテンツサービス６１２のための遭遇デマンドに対するスケールの対応するレベルを提供するように働くことも可能である。したがって相互接続されたデバイスの実施形態では、本明細書において説明されている機能の実施態様は、システム６００全体に分散させることができる。例えば機能は、一部を計算デバイス１０２上で、かつクラウド６０８の機能を抽象しているプラットフォーム６１０を介して実施することができる。
【０１４２】
[00133]図７は、図１、図２および図６を参照して説明した任意のタイプの計算デバイスとして実施することができる、本明細書において説明されている技法の実施形態を実施するための一デバイス例７００の様々な構成要素を示したものである。デバイス７００は、デバイスデータ７０４（例えば受け取ったデータ、受信中のデータ、同報通信のためにスケジュールされたデータ、およびデータのデータパケット等々）の有線ならびに／または無線通信を可能にする通信デバイス７０２を含む。デバイスデータ７０４または他のデバイスコンテンツは、デバイスの構成設定、デバイス上に記憶されているメディアコンテンツ、および／またはデバイスのユーザーと関連付けられた情報を含むことができる。デバイス７００上に記憶されているメディアコンテンツは、任意のタイプの音声、ビデオおよび／または画像データを含むことができる。デバイス７００は、１つまたは複数のデータ入力７０６を含み、この１つまたは複数のデータ入力７０６を介して、ユーザー選択可能入力、メッセージ、音楽、テレビジョン・メディアコンテンツ、記録されたビデオコンテンツ、および任意のコンテンツおよび／またはデータ源から受け取った任意の他のタイプの音声、ビデオおよび／または画像データなどの任意のタイプのデータ、メディアコンテンツおよび／または入力を受け取ることができる。
【０１４３】
[00134]また、デバイス７００は、直列および／または並列インタフェース、無線インタフェース、任意のタイプのネットワークインタフェース、モデムのうちの任意の１つまたは複数として実施することができ、かつ任意の他のタイプの通信インタフェースとして実施することができる通信インタフェース７０８を含むことも可能である。通信インタフェース７０８は、デバイス７００と通信ネットワークの間の接続および／または通信リンクを提供し、他の電子デバイス、計算デバイスおよび通信デバイスは、この接続および／または通信リンクによってデバイス７００とデータを通信する。
【０１４４】
[00135]デバイス７００は、様々なコンピューター実行可能命令を処理してデバイス７００の動作を制御し、かつ本明細書において説明されている技法の実施形態を実施する１つまたは複数のプロセッサー７１０（例えばマイクロプロセッサー、およびコントローラー等々のうちの任意のプロセッサー）を含む。別法または追加として、デバイス７００は、ハードウェア、ファームウェア、または一括して７１２で識別されている処理回路および制御回路と共に実施される固定論理回路機構のうちの任意の１つまたは組合せを使用して実施することも可能である。図には示されていないが、デバイス７００は、デバイス内の様々な構成要素を結合するシステムバスすなわちデータ転送システムを含むことができる。システムバスは、メモリーバスもしくはメモリーコントローラー、周辺バス、ユニバーサル・シリアル・バスおよび／または様々なバスアーキテクチャーのうちの任意のバスアーキテクチャーを利用しているプロセッサーまたはローカルバスなどの異なるバス構造のうちの任意の１つまたは組合せを含むことができる。
【０１４５】
[00136]また、デバイス７００は、１つまたは複数のメモリー構成要素などのコンピューター可読媒体７１４を同じく含み、それらの例には、ランダム・アクセス・メモリー（ＲＡＭ）、不揮発性メモリー（例えばリード・オンリー・メモリー（ＲＯＭ）、フラッシュメモリー、ＥＰＲＯＭ、およびＥＥＰＲＯＭ等々のうちの任意の１つまたは複数）ならびにディスク記憶装置がある。ディスク記憶装置は、ハード・ディスク・ドライブ、記録型および／または書換え型コンパクトディスク（ＣＤ）、ならびに任意のタイプのディジタル汎用ディスク（ＤＶＤ）等々などの任意のタイプの磁気記憶装置または光学記憶装置として実施することができる。また、デバイス７００は、大容量記憶媒体デバイス７１６を含むことも可能である。
【０１４６】
[00137]コンピューター可読媒体７１４は、デバイスデータ７０４ならびに様々なデバイスアプリケーション７１８、およびデバイス７００の動作面に関連する任意の他のタイプの情報および／またはデータを記憶するためのデータ記憶機構を提供する。例えばオペレーティングシステム７２０は、コンピューター可読媒体７１４を使用して、コンピューターアプリケーションとして維持することができ、また、プロセッサー７１０上で実行することができる。デバイスアプリケーション７１８は、デバイス管理プログラム（例えば制御アプリケーション、ソフトウェアアプリケーション、信号処理および制御モジュール、特定のデバイスに固有のコード、ならびに特定のデバイスのためのハードウェア抽象層等々）を含むことができる。また、デバイスアプリケーション７１８は、本明細書において説明されている技法の実施形態を実施するための任意のシステム構成要素またはモジュールを同じく含む。この例では、デバイスアプリケーション７１８は、ソフトウェアモジュールおよび／またはコンピューターアプリケーションとして示されているインタフェースアプリケーション７２２および入力／出力モジュール７２４を含む。入力／出力モジュール７２４は、タッチスクリーン、トラックパッド、カメラ、およびマイクロホン等々などの入力を捕獲するように構成されたデバイスとのインタフェースを提供するために使用されるソフトウェアを表している。別法または追加として、インタフェースアプリケーション７２２および入力／出力モジュール７２４は、ハードウェア、ソフトウェア、ファームウェアまたはそれらの任意の組合せとして実施することも可能である。さらに、入力／出力モジュール７２４は、それぞれ視覚入力および音声入力を捕獲するための個別のデバイスなどの複数の入力デバイスをサポートするように構成することも可能である。
【０１４７】
[00138]また、デバイス７００は、音声システム７２８に音声データを提供し、かつ／または表示システム７３０にビデオデータを提供する音声および／またはビデオ入力／出力システム７２６を同じく含む。音声システム７２８および／または表示システム７３０は、音声データ、ビデオデータおよび画像データを処理し、表示し、かつ／またはさもなければ再現する任意のデバイスを含むことができる。ビデオ信号および音声信号は、ＲＦ（無線周波数）リンク、Ｓ−ビデオリンク、複合ビデオリンク、コンポーネント・ビデオ・リンク、ＤＶＩ（ディジタル・ビデオ・インタフェース）、アナログ音声接続、または他の同様の通信リンクを介して、デバイス７００から音声デバイスおよび／または表示デバイスへ通信することができる。一実施形態では、音声システム７２８および／または表示システム７３０は、デバイス７００の外部構成要素として実施される。別法としては、音声システム７２８および／または表示システム７３０は、デバイス例７００の統合構成要素として実施される。
【０１４８】
結び
[00139]以上、本発明について、構造的特徴および／または方法論的行為に特化された言語で説明したが、特許請求の範囲で定義されている本発明は、説明されている特定の特徴または行為に必ずしも限定されないことを理解されたい。そうでなく、これらの特定の特徴および行為は、特許請求される本発明を実施する形態例として開示されている。
【図１】
2015501477.tif 000004
【図２】
2015501477.tif 000005
【図３】
2015501477.tif 000006
【図４】
2015501477.tif 000007
【図５】
2015501477.tif 000008
【図６】
2015501477.tif 000009
【図７】
2015501477.tif 000010
【国際調査報告】
2015501477.tif 000011
2015501477.tif 000012