比較的複雑な協調効果を開始しないクライアントデバイスに関与するこの効果を実装するための技法について本明細書に記載する。これらの効果は、ビデオ中心の体験(例えば、ビデオ通話、共有ビデオ視聴)またはビデオ中心ではない体験(例えば、シングルレイヤーまたはマルチレイヤーゲーム、共有読書体験、共有写真アルバムなど)のコンテクストにおいて適用されてよい。
効果は、複数のデバイスにわたるインタラクティブ効果および体験を同期するためのプロトコルに従って適用されてよい。この協調アクティビティプロトコルは、リアルタイム通信(RTC)チャネルを介して複数のデバイス上で開始かつ協調される効果を可能にする。プロトコルは、効果を協調して開始するためにメッセージを交換すること、および(開始されると)アプリケーションプログラミングインターフェース(API)コールを介して一般データを交換することに関与する。それ故に、システムは、データタイプおよびプラットフォーム両方共にとらわれないことで、効果の開発者はデータがどのように解釈されるものにするのかを定義することが可能になる。
場合によっては、より高い水準のサービスは、(例えば、順番の交渉、順番の譲歩、スコア記録、指導者選出などの重要な共通アクティビティに対して)事前に定義されたタイプのデータを交換するために提供されてよい。
プロトコルを使用して、ビデオストリームにおける効果を同期し、ビデオ中心ではない体験(例えば、共同ビデオ視聴、読書、マルチプレーヤゲーム、観賞体験のあるシングルプレーヤゲーム、総当たり式の短期シングルプレーヤゲーム、写真アルバムの観賞/整理)などを協調させることができる。
例えば、共有体験は、複数の参加者によるテレビ会議であってよい。1つの例では、協調効果は、あるユーザ(開始ユーザ)によって別のユーザ(非開始ユーザ)に適用されてよい。これは、例えば、開始ユーザのビデオが処理される(例えば、非開始ユーザにひげを描き、その後、全ての参加者に見えるようになる)、または、開始ユーザが、開始ユーザのみならず、1または複数の非開始ユーザに関与する効果を開始することができる(例えば、開始ユーザが、火の玉を投げる真似をし、この火の玉は開始ユーザの手に現れた後、画面から離れて投げられるように見え、その後非開始ユーザのビデオに現れて、「燃えている」アニメーションを、これらがぶつけられる時にこれらのユーザに適用されるようにすることができる)やり方に影響を与えることなく、開始ユーザが非開始ユーザ(複数可)に効果を適用することに関与し得る。
協調効果はまた、共同体験においてビデオを視聴する複数のユーザに適用され得る。この場合、協調効果は、ビデオを開始する、ビデオを停止する、ビデオを一時停止する、参加デバイスの間でビデオの場所を同期させる、ビデオをサムネイルモードにする、またはビデオを全画面構成に大きくするなどのために適用可能であってよい。
ユーザの間で協調される体験はまた、写真アルバムを観賞するまたは整理すること、協調して読書すること、またはマルチプレーヤゲーム(または、複数のデバイスの間であるタイプの協調が必要とされるシングルプレーヤゲーム)に参加することなど、ビデオ中心でなくてよい。様々な協調効果は、協調体験の状態を変更するために適用されてよい。
上述したアクティビティは、これらが、テレビ会議などのビデオコンポーネントの存在を必要としない点でビデオ中心ではなく、協調効果は非ビデオ情報に適用される。それにもかかわらず、アクティビティは、ビデオコンポーネントに関連して(例えば、ユーザがゲームをしている一方、他のユーザはテレビ会議で視聴かつ通信する)用いられてよい。この場合、協調効果は、ビデオコンポーネント、非ビデオコンポーネント、または、ビデオコンポーネントおよび非ビデオコンポーネント両方に適用されてよい。
この簡単な概要は、以下により詳細に論じられる概念に対する非限定的な導入として機能することが意図される。しかしながら、さらなる例示的な実施形態について論じる前に、データプライバシに関する簡単な記述が、まず提供される。プライバシ設定および認証のより詳細な説明は、以下の図に関連して取り上げられるものとする。
データプライバシに関する記述
本明細書に説明されるいくつかの実施形態は、1人または複数のユーザによって自発的に提供される情報を含み得る訓練データまたは指標を利用する。そのような実施形態において、データプライバシは、いくつかのやり方で守られ得る。
例えば、ユーザは、ユーザデータが収集または使用される前に任意のデータ収集にオプトインすることを要求され得る。ユーザはまた、任意のデータ収集からオプトアウトする機会を提供され得る。データ収集にオプトインする前に、ユーザは、データが使用されるやり方、どのぐらいの間データが保持されるか、およびデータを開示から守るために適所にある安全措置についての説明を提供され得る。
データを収集されたユーザを識別するいかなる情報も、データから消去される、または切り離され得る。任意の識別情報が保持される必要がある場合(例えば、規制要件を満たすため)、ユーザは、その識別情報の収集、その識別情報が使用される用途、およびその識別情報が保持されることになる時間量を通知され得る。ユーザを具体的に識別する情報は、除去され得、また、例えば、総称の識別番号または他の非特異的な形態の識別と置き換えられ得る。
データは、一旦収集されると、データへの不正アクセスを防ぐために安全措置を含む安全なデータストレージ位置に記憶され得る。データは、暗号化された形式で記憶され得る。識別情報および/または非識別情報は、既定の時間期間後にデータストレージから消去され得る。
特定のプライバシ保護技術が例証の目的のために本明細書に説明されるが、当業者は、プライバシが他の様式でも同様に守られることを認識するものとする。データプライバシに関するさらなる詳細は、以下で、ネットワーク実施形態を説明するセクションにおいて論じられる。
ユーザのプライバシ条件が満たされると仮定して、例示的な実施形態は、数ある可能性の中でも、ソーシャルネットワーク内またはモバイルデバイス上でのメッセージング(例えば、メッセージングクライアントアプリケーションを通して、またはショートメッセージサービスを介して)を含む、多種多様なメッセージングシステムにおいて採用され得る。次に、メッセージングシステムにおける同時性ビデオ会話に参加するための例示的なロジックおよびプロセスの外観が提供される。
理解を助けるものとして、まず、一連の例が、根本の実装形態の詳細な説明が説明される前に、提示される。これらの例は、単に例証であることが意図されること、および本発明は示される実施形態に限定されないことに留意されたい。
協調効果
これより、図面を参照するが、ここでは同様の参照番号は、全体を通して同様の要素を指すために使用される。以下の説明において、説明の目的のため、多数の具体的な詳細事項が、それらの徹底的な理解を提供するために明記される。しかしながら、新規の実施形態は、これらの具体的な詳細事項なしに実践されてもよい。他の事例において、周知の構造およびデバイスは、それらの説明を容易にするためにブロック図の形態で示される。特許請求される主題と一致する全ての修正形態、均等物、および代替物を網羅することが意図される。
図および付随する説明において、指示表示「a」および「b」および「c」(ならびに同様の指示子)は、任意の正の整数を表す変数であることが意図される。したがって、例えば、実装形態が、a=5の値を設定する場合、コンポーネント122-1から122-aとして例証されるコンポーネント122の完全なセットは、コンポーネント122-1、122-2、122-3、122-4、および122-5を含み得る。実施形態は、この文脈に限定されない。
図1A~図1Jは、複数のユーザが共有体験で参加してよい例示のインターフェースを示す。様々なタイプの協調効果について、それぞれのインターフェースと併せて説明する。
一般に、協調効果は、協調アクティビティおよび/または協調アクティビティの状態と関連付けられたデータを修正する効果であってよく、この場合、修正は効果を開始しないデバイスによる協調を必要とする。
協調効果は、ビデオまたはインターフェースを修正するためにビデオまたはインターフェースに適用されてよいマスクまたはアニメーションなどの映像データを含む。しかしながら、協調効果はアニメーションまたはグラフィックデータに限定されない。例えば、オーディオ効果はビデオストリームに適用されてよい。オーディオ効果は、例えば、オーディオをストリームに加えること(例えば、笑い声トラックまたは拍手トラックなどのオーディオトラックを再生すること)、ストリームにおけるオーディオを修正すること(例えば、声のピッチ、音量などのユーザの声の性質を変更すること)、オーディオストリームにおける歌にマッチするビートを再生することなどを含んでよい。
さらに、本明細書に説明される技法は、ビデオを修正する視聴覚データの形式の協調効果に限定されない。いくつかの実施形態では、メッセージは、任意の協調アクティビティ(例えば、シングルまたはマルチプレーヤゲーム、協調観賞体験など)の状態を修正するために協調アクティビティプロトコルに従って交換されてよい。修正は、映像または音響データに適用されるグラフィックまたは音響オーバーレイを含んでよい、または協調アクティビティの状態(例えば、マルチプレーヤゲームでの競合解消の目的でリーダーデバイスを選出すること、ゲームの順番を飛ばすこと、インタラクティブな本、ビデオ、または写真アルバムにコマンドを発行することなど)を変更してよい。
協調効果は、協調効果を開始するユーザのビデオまたは体験に適用されてよい。協調効果は、ユーザによって直接(例えば、画面上のボタンを押す、あるいは協調効果を適用するためのコマンドを発行することによって)、または間接的に(例えば、既定の回数または間隔などで協調効果を適用することによって協調効果が適用されるものとする条件を検出することによって)適用されてよい。
いくつかの実施形態では、協調効果を、媒体効果を適用した参加者と異なる参加者に適用してよい、または、協調されるように複数のユーザに適用してよい。図1Aは、媒体効果がテレビ会議の複数のユーザに適用されるインターフェースの一例を示す。
この場合、システムは、第2の参加者(Jack)に向けられた第1の参加者(Jill)と関連付けられた感情状態(例えば、ロマンチックな感情状態)を検出した。システムはしたがって、協調アクティビティプロトコルによって、JillのビデオストリームおよびJackのビデオストリーム両方に対する「ロマンチックな」協調効果を開始する。この場合、アニメーションのキス媒体効果122-1が、最初はJillの口を中心にJillのディスプレイに現れる。効果122-1は、Jillの画面の端に飛ぶように見えて消える。この効果は、媒体効果122-2としてJackのディスプレイ上に再び現れて、Jackの頬に飛んでいく。通信中のそれぞれの参加者は、この協調媒体効果を見ることができる。他の例は、怒ったユーザの顔をドラゴンとしてアニメ化すること、および、ユーザが別のユーザに火を噴いていること、雪玉を投げることを示すことなどを含んでよい。
マルチユーザ協調効果は、感情状態が検出された元の(選択中の)ユーザ、および少なくとも1人の他のユーザに適用されてよい。他のユーザは、例えば、現在アクティブなユーザ(例えば、現在話している、あるいは最も関連しているとみなされるユーザ)、同じまたは対応する感情状態を有する別のユーザ、元のユーザが現在見ているディスプレイの一部分と関連付けられたユーザ(例えば、ユーザが、別のユーザのビデオストリームを凝視し、かつマルチユーザ媒体効果をトリガする感情を持っている場合、媒体効果は他のユーザのビデオストリームを対象にしている場合がある)、または選択済みの他のユーザであってよい。
いくつかの実施形態では、協調効果は直接自動的に適用されてよい。その他の場合、複数の候補の協調効果が識別される場合があり、推奨される協調効果のセットは、開始ユーザによる選択のために自動的に提示されてよい。
ビデオ通話において(または他のビデオデータに)音響またはグラフィック協調効果を適用する例では、協調アクティビティプロトコルを使用して、効果を適用するそれぞれのユーザが、必要なデータ(例えば、効果を適用するためのロジック、アニメーションデータなど)を確実に有するようにする効果を開始する、および、効果を適用することを可能にするデータを交換することができる。例えば、効果の場所またはパスは、ユーザの特定の特徴(例えば、鼻、口、手)の位置に左右される場合がある。効果(例えば、図1Aにおけるキスをすることは、Jillのパネルの端の場所から消え、Jackのパネル上の対応する場所に再び現れる)を協調させるために、場所情報は、協調アクティビティプロトコルを通して交換されてよい。
図1B~図1Dに示される別の例では、協調効果は、テレビ会議に対するグラフィカルユーザインターフェース(GUI)の状態を修正することができる。図1Bに示されるようなGUIにおいて、ユーザ(Jill)は第1のパネル106と関連付けられ、ユーザ(Jack)は第2のパネル104と関連付けられる。各パネルはそれぞれ、幅および高さによって定められる対応するサイズを有する。この場合、それぞれのパネルの幅および高さは、最初は同じである。例えば、第1のパネル106および第2のパネル104の幅はそれぞれ、最初はある特定の値d1に設定される。
テレビ会議アプリケーションは、協調アクティビティプロトコルによって、GUIを修正する協調効果をサポートしてよい。この場合、図1Cに示されるように、1つまたは複数の協調効果は、開始ユーザ(この場合はJill)が自身のパネル106の端108の1つに傾く時にトリガされてよい。ユーザが、十分な速度でパネルに傾く(または、自身の手でパネル106の端を押すことなどによって別のやり方で効果をトリガする)場合、テレビ会議アプリケーションはこの条件を1つまたは複数の協調効果の適用と関連付けてよい。開始クライアントデバイスの機能を果たすJillのクライアントデバイスは、この条件が満たされていることを検出することができ、かつ協調アクティビティプロトコルを通して関連付けられた効果を開始してよい。第1の効果として、アプリケーションは、ユーザの頭が、ビデオ通話におけるそれぞれの参加者のデバイス上で再生されるようにパネル110の端108に接触すると(ノック音などの)音が再生されるようにしてよい。オプションとして、アプリケーションは、インターフェースを振るなどして、即座の可視効果を引き起こしてもよい。
同時にまたはその後、アプリケーションは、各パネル106、104のサイズを変更させてよい。この場合、第1のパネル106は、Jillが押す方向(すなわち、端108の方向)に幅を拡張させ、第2のパネル104は同じ方向に対応する量で縮小する。その結果、第2のパネル104は、d2の幅に縮小し、これは第1のパネル106の幅d3より小さい。元のd1のサイズからその後のd2/d3のサイズに変更するための調節量は、開始ユーザが端108をどのくらい強く押すように見えるか(例えば、ユーザが端108にどれくらい迅速に傾くか)、および/または、ユーザが端108をどれくらい長く保持するかに左右される場合がある。媒体効果の適用を可能にする情報(例えば、開始ユーザの頭または手の位置、ユーザが移動する速度、ユーザが端108に触れてから経過した時間など)は、協調アクティビティプロトコルによって非開始ユーザと交換されてよい。
このような実施形態は、例えば、ユーザがこれらの映像の背景および/または画面内にあるものを示すことを望む時、有用である場合がある。
図1B~図1Dの例はまた、複数の協調効果を、同時に存在するおよび/または互いに重ね合わせられる場合があることを示すのに役立つ。例えば、図1Cからのオーディオ協調効果110は、パネル106が拡張し始めるのと同時に適用されてよい。さらなる実施形態では、協調効果はまた、非協調効果と重ね合わせられてよい。
この場合、Jillのデバイスが開始デバイスとしての役割を果たしたことも注目に値する。パネル拡張協調効果によって、Jackのパネルサイズが修正されて、Jackは非開始ユーザになっている。しかしながら、この会議における他の参加者も非開始ユーザとしてフラグが立てられるが、これは、変更がそれぞれのユーザのGUIを修正するためにこれらユーザのデバイスでも協調されなければならないからである。キス効果が適用された図1Aからの例では、これらの他のユーザを非開始ユーザとしてタグ付けすることは必要ではない場合があるが、これは、媒体効果が、JackおよびJillのビデオストリームに適用された後、必ずしも他のユーザによる協調を必要とすることなく他のユーザにブロードキャスト可能であるからである。同様に、オーディオ効果110は協調効果である必要はないが、これは、オーディオ効果110が、他のユーザが効果の適用時に協調することを必ずしも必要とするわけではなく、開始ユーザのオーディオデータに追加されてよいからである。
図1Eは、複数のユーザが(例えば、オンラインビデオ共有サービスを介して)共同ビデオ視聴体験を共有する別の例を示す。この例では、ビデオ118は、それぞれの参加者のクライアントアプリケーションのインターフェース上で表示され、ビデオの再生は、それぞれのユーザが同じビデオを同じ再生状態で同時に見るように同期される。
共同体験を作成するために、図1Eに示される実施形態は、二次特徴としてのテレビ会議を含む。ビデオ視聴体験を観賞している参加者は、プレビューパネル114における自身のテレビ会議データのプレビューを見ることができる。他の参加者は、参加者パネル116-1、116-2、116-3などに現れる。代替的には、参加者は、図1G~図1Hとの関連で説明されるように)オーディオ会議を介して通信でき、(図1Fとの関連で説明されるように)メッセージングインターフェースにおいてメッセージを交換できる、または、アプリケーションは、参加者通信能力を提供しないようにすることができ、代わりに、(図11の例にあるように)参加者体験を単に同期または協調させることができる。これらの異なる通信能力は、本明細書に説明される実施形態のいずれかと組み合わせられてよい。
ビデオの再生を制御するために、それぞれの参加者は、再生制御120が設けられている。制御120は、停止、再生、一時停止、早送り、巻き戻しなど、ビデオの状態を変更するのに適した任意の制御を含んでよい。これらの制御120をアクティブ化することによって、協調効果を、それぞれの参加者の再生状態の変更をもたらすようにアクティブ化させることができる。
協調効果は、いくつかのやり方で協調アクティビティプロトコルによって実装されてよい。例えば、アプリケーションは、開始メッセージを使用して一般的な「ビデオ再生」協調効果を開始後、データメッセージにおいて一般データとして個々の命令を送信してよい。代替的には、アプリケーションは、それぞれの制御に対する新しい効果(例えば、開始メッセージを介して開始される再生効果、開始メッセージを介して開始される停止効果など)を開始することが可能である。またさらに、アプリケーションは、一般ビデオ再生協調効果を開始することができ、さらにまた、協調アクティビティプロトコルの事前に構成された高水準サービス(例えば、再生サービス、停止サービスなど)を起動する既定のフォーマットのデータを伝達するデータメッセージを使用して個々の命令を送信してよい。
一時停止、再生、停止、早送り、および巻き戻しなどのいくつかの制御は、1参加者がコントロールをアクティブ化する場合、ビデオ再生の状態がそれぞれの参加者のアプリケーションで変更されるように協調させてよい。その他、音量などは、アプリケーションごとに適用されることが可能であり、それによって、これらの制御をアクティブ化することで別の参加者のアプリケーションにおける対応する制御に影響しないようにする。
この場合、協調効果は、(他の実施形態では、協調効果は、さらに、または交互に、テレビ会議情報に適用されてよいが)テレビ会議情報ではなく表示されているビデオ118に適用可能である。協調効果は、(例えば、開始メッセージを介して協調アクティビティプロトコルによって協調効果を開始後、プロトコルのデータメッセージを介して一般データまたはフォーマット済みデータを交換することによって)テレビ会議中心の実施形態およびテレビ会議中心ではない実施形態に対して同様のやり方で適用される。クライアント/サーバ環境(図2Aを参照)が、協調効果が非テレビ会議データに適用される時にわずかに異なっている場合があることは、留意されるべきである。例えば、図2Aに示される通信サーバは、オーディオおよびビデオデータを互いから受信後、データを再配布するのではなく、中央側から視聴されているビデオ118の配布を協調させてよい。協調効果に関連しているメッセージは、RTCチャネル上で提供され続けてよく、他のタイプのデータ(この場合のビデオデータ、または、後述される例では、写真データ、ゲームデータ、本データなど)は、これら自体の専用チャネル上で配布されてよい。それぞれの場合、共有体験は、オプションとして、テレビ会議またはオーディオ会議に関わる場合があるため、ビデオおよび/またはオーディオデータは、共有体験に直接関連している他のタイプのデータに加えて配布されてよい。テレビ会議および/またはオーディオ会議データは、他のタイプのデータおよび制御データを配布する同じ通信サーバによって配布されてよい、および/または別々のサーバによって取り扱われてよい。
ビデオ再生に関連する協調効果は、再生または一時停止ボタンを押すことなどによって明白にアクティブ化される効果に限定されない。協調効果はまた、例えば、ビデオの再生を協調させるアプリケーションによって自動的にアクティブ化されてよい。協調効果は、既定の条件の発生時にまたは既定のタイミングでアクティブ化されてよく、背景で(場合によって、ユーザの知識がなくても)実行されてよい。他のこのような例は、既定の間隔で自動的にアクティブ化されてよい同期効果である。各参加者のアプリケーションは、ビデオの現在の再生についてのタイミング情報(例えば、所定の時間でのビデオを通じたユーザの進行)を指示する、同期効果に関連しているデータメッセージを交換することができる。タイミング情報を使用して、それぞれのアプリケーションは、ビデオ再生をローカルに同期できることで、それぞれの参加者がビデオの同じ一部を同時に観賞するようにする。
自動的なまたは背景の効果の別の例は図1Fに示されている。この例では、参加者は、メッセージングインターフェース122を通して対話している。メッセージングインターフェースでは、ユーザは、会話パネル126においてテキストベースのメッセージを交換する権利が与えられてよい。この例では、会話パネル126におけるメッセージのうちの1つは、ビデオ124へのリンクを含む。1ユーザがリンクを選択する時、ビデオ124はインターフェース122において表示可能である。
アプリケーションは、ビデオにアクセスしたエントリポイントに左右される異なるやり方でビデオ124を表示するように構成されてよい。例えば、メッセージングによる会話における参加者がユーザに映画を勧めるボットと対話し、かつユーザのうちの1人が映画を再生し始めるようにボットに命令する場合、これは、(図1Eからの例と同様に見える場合がある)全画面モードでビデオ124の再生をトリガしてよい。他方では、会話パネル126におけるリンクを介してビデオにアクセスする時、ビデオ124は、図1Fに示されるように、サムネイルモードで表示されてよい。ビデオのエントリポイントに反応するサムネイルモードおよび全画面モードを可能にするために、データメッセージは、エントリポイントを表す(または、ビデオ124がサムネイルモードまたは全画面モードで再生されるものとすることを明白に指定する)協調アクティビティプロトコルによって交換されてよい。
図1Gに示される別の実施形態は、共有読書体験に関する。電子書籍インターフェース128は、複数の参加クライアントデバイスのディスプレイ上に本の同じページを表示することができるアプリケーションによって提供されてよい。この例では、コールパネル130は、参加者が、インターフェース128を観賞している間音声通話で通信していることを指示する。このような実施形態は、例えば、教科書を参照する勉強グループをサポートするための共有雑誌読書体験のために、親が自宅から離れている間に自分の子供に読書させることを可能にするのに有用である場合がある。協調アクティビティプロトコルを使用して、電子書籍の表示を同期させ続けることができる。
様々な対話可能な要素は、参加者が本を検索できるようにすることが可能である。例えば、リンク132は、参加者がディスプレイに本の目次(または、索引、図版一覧など)を示すようにすることを可能にしてよい。ディスプレイがタッチスクリーンである場合、現在のページの左領域134と対話することによって、本を前のページに戻るようにして、場合によってページめくりのアニメーションを示すことができる。同様に、右領域136と対話することによって、ページを進めさせることができる。いくつかの実施形態では、ページを後方にまたは前方にめくるための高速アイコンが提供されてよい。
これらの対話のそれぞれは、協調アクティビティプロトコルによって送られる対応する協調効果と関連付けられてよい。協調アクティビティプロトコルによってもたらされ得る協調アクションの他の例は、用語をサーチすること、指定されたページにジャンプすること、(例えば、目次から読んだばかりのページに戻るように、またはあるページからある索引に戻るようにジャンプするために)アクセスした前のページに戻ること、図を拡張すること、特定のページをブックマークすることなどを含む。
さらに別の実施形態では、協調体験は、図1Hに示されるように、写真アルバムインターフェース140における写真アルバムを観賞するまたは編集することに関与してよい。写真アルバムインターフェースにおいて、アルバムから現在観賞されている写真は、オプションとして、メインウィンドウ142に表示可能である。現在観賞されている写真は、前方インターフェース要素148を使用してアルバムにおける次の写真を、または、後方インターフェース要素146を使用してアルバムにおける前の写真を検索することによって変更されてよい。アルバムにおける写真のそれぞれ(または、利用可能な表示空間量に応じて、アルバムにおける写真の限定された部分集合)は、サムネイルバージョン144-1、144-2、144-3などにおいて表示されてよい。サムネイルバージョン144-iを選択することによって、関連付けられた写真をメインウィンドウ142において表示させてよい。アルバムライブラリリンク150は、ユーザが、現在のアルバムを出て、全ての利用可能なアルバムのリストを見ることができるようにしてよい。編集コマンド152は、メインウィンドウ142における写真を編集可能にすることができる。さらに、ユーザは、サムネイルビュー144-iにおける写真を選択し、かつこれらをアルバムにおける新しい場所にドラッグしてよい。さらなるオプションは、新しい画像をアルバムに追加する、またはアルバムにおける写真を削除するために提供されてよい。これらの対話のいずれも、協調効果と関連付け可能であることで、複数の参加者は協調してアルバムを観賞しかつ対話することができる。
協調体験のさらなる例は、シングルまたはマルチプレーヤゲームをプレイすることに関与する。図1Iは、ゲームの現在の状態を表示するためのゲームパネル156を含むマルチプレーヤゲームインターフェース154の一例を示す。ゲームの現在のプレーヤは、アバター158、160によって識別可能であり、コア162は表示されてよい。現在のプレーヤは、ゲームを観察することを望む任意の他のユーザと同様に、ゲームインターフェース154を観賞することができる。
この例では、協調効果は、スコアを記録する(例えば、スコアがローカルデバイスにおいて変化する時、かつどの程度変化するかを指示するデータメッセージを送信する)、ゲームパネル156におけるゲームの状態を同期させる、またはあるユーザから次のユーザに順番を飛ばすために提供されてよい。順番を飛ばすことは、図1Iに示されるビリヤードゲームにおいてショットを打つ時など、1プレーヤが、「最後の順番」要素を選択するまたは順番を最後にする行動を取る時、手動で取り扱われてよい。代替的にはまたはさらに、順番を飛ばすことは、(現在のプレーヤの順番と関連付けられたタイマが時間切れになる時など)あらかじめ定められた条件下で自動的に生じる受動アクティビティであってよい。
協調効果の別の例は、現在のプレーヤの中で「リーダ」デバイスを選択するための協調効果である。いくつかのゲームでは、データは、それぞれのユーザのアプリケーションに提供された後、ゲーム世界を構築し、かつユーザがゲーム世界と対話できるようにする。ローカルデバイスは、ゲーム世界の状態(例えば、バスケットボールが適切な軌道で送られて、ひいては最後にリングに入ったかどうか、ロケット発射装置からのロケットが特定の場所で接触したかどうかなど)を判断するために計算を行ってよい。場合によっては、異なるプレーヤのデバイスは、ゲーム世界の状態について異なる結論に達する場合があり、デバイスのうちの1つは、現在のゲーム状態のアービターであるように選択されなければならない。指導者選出を可能にする協調効果が提供されることによって、このプロセスは合理化可能である。
図1Iの例では、ゲームは限定数のプレーヤ(例えば、この場合二人)を可能にさせてよい。複数の人達は、一緒にプレイすることを希望してアプリケーションインターフェース154と対話してよい。それ故に、プレイするためのプレーヤの次のグループを選択するための協調効果が提供されてよい。これは、例えば、シングルまたはダブルエリミネーションのプレーオフ方式で全ての参加者の中で総当たり式に行われてよく、または、次のプレーヤは、現在のゲームの優勝者とプレイする(例えば、「次の挑戦者!」スタイルのプレイ)ようにランダムにまたはアルゴリズムで選択可能である。
同様の次のプレーヤ選択は、図1Jに示されるシングルプレーヤゲームインターフェース166などのシングルプレーヤゲームに対しても行われてよい。インターフェース166は、プレーヤが互いにテレビ会議する間、プレーヤのうちの1人はゲームをし、他の参加者はゲームビューパネル170において視聴できるようにする。インターフェース166は、現在のプレーヤを見ることができるプレビューウィンドウ168、およびプレイしない参加者を示すサムネイルビュー172-1、172-2、172-3を含む。
シングルプレーヤゲームでは、同様の効果はマルチプレーヤゲームにおけるように提供されてよい(例えば、ゲームをする次のプレーヤを選択すること、共有観賞体験を協調させること、ゲームを開始すること、ゲームを停止すること、ゲームを一時停止すること、ゲームビューパネル170の各ビューを同期させることなど)。
上述した協調効果のいずれも、アプリケーション開発者によって実装可能であり、協調アクティビティプロトコルは、プロトコルによって認識された既定のフォーマットではないデータを有するデータメッセージを交換することができる。この場合、メッセージは、各アプリケーションによって解釈可能である一般データを交換してよい。さらなる実施形態では、上述した効果のいずれも、高水準サービスのように協調アクティビティプロトコルによってサポートされてよく、データは、プロトコルによって認識可能であり、かつサービスと関連付けられた既定のフォーマットのものであってよい。
次に、協調効果を適用するためのクライアント/サーバ環境に対する例示の構成について、図2Aを参照して説明する。
例示のシステム構成およびデータ構造
図2Aは、協調効果を適用するための例示のシステムを示す。協調効果は、自動的に、手動で、またはこの両方の組み合わせで適用されてよい。
システムは、(例えば)1対1、1対多数、またはグループ通信であってよいビデオ通信を容易にすることができる。代替的にはまたはさらに、システムは、別のタイプの協調アクティビティ(例えば、ゲーム、インタラクティブな観賞体験など)を容易にすることができる。ビデオ会話への協調媒体効果の適用に関する一例について後述するが、本出願がこの例に限定されないことは理解されたい。
開始クライアント202-1は、通信中の第1の参加者と関連付けられたデバイスであってよい。開始クライアント202-1は、例えば、1人または複数の他の参加者との、ビデオベースの会議通話のためのビデオ通信など、協調アクティビティで参加するための通信アプリケーション404-1を実行するモバイルデバイスであってよい(が、本発明はモバイルデバイスによるアプリケーションに限定されない)。開始クライアント202-1は、1つまたは複数の非開始クライアント202-2、202-3、204-4などでまたはこれらによって適用される協調効果を開始するデバイスであってよい。
通信アプリケーション204-1は、ビデオ通信と関連付けられた情報を、通信を容易にする1つまたは複数のサーバに送信させることができる。例えば、情報は、通信と関連付けられたビデオフレームを含有するビデオデータ208、グラフィカルフレームと同期させるための音声情報を含有するオーディオデータ212、および制御データ216を含んでよい。制御データ216は、ビデオデータ208およびオーディオデータ212と関連付けられた(例えば、これらに同期させた)協調効果を適用するために使用される様々な命令、識別子、メタデータなどを含んでよい。
いくつかの例では、協調効果はアプリケーション204-1によって適用されてよい。その他では、アプリケーション204-1は、サードパーティが適切なコマンド(例えば、アプリケーションプログラミングインターフェースコマンド)または参照によって協調効果を挿入することができるフレームを定義してよい。
それぞれのタイプのデータは、関連付けられたチャネルで送信されてよい。例えば、通信アプリケーション204-1、またはクライアント202-1の別のコンポーネントは、通信サーバ218との、ビデオチャネル206、オーディオチャネル210、および制御チャネル214を開いてよい。ビデオチャネル206は、ビデオフォーマットのビデオデータ208のみを伝達してよい。よって、通信サーバ218は、ビデオチャネル206上で受信されたいずれのデータもビデオフォーマットのデータとして扱ってよく、データを適切に処理することができる。同様に、オーディオチャネル210は、オーディオフォーマットのオーディオデータ212のみを伝達してよい。
本発明が、ビデオチャネル206およびオーディオチャネル210上でそれぞれ、ビデオデータ208およびオーディオデータ212を送信することに限定されないことは理解されたい。例えば、グラフィックデータは、協調アクティビティが写真アルバムの観賞である場合にデータチャネルで共有されてよい。別の例では、ゲームデータは、ゲームの状態についての情報の伝達専用のデータチャネルで共有されてよい。共有聴取体験(例えば、複数のユーザが音楽アルバムまたはコンサートを同時に聞くこと)について、チャネルは、オーディオチャネル210を含んでよいが、ビデオチャネル206を含まない場合がある。それぞれの場合、制御チャネル414は、データチャネルと別個であり異なっているリアルタイムチャネルであってよい。
制御チャネル214は、必ずしも既定のフォーマットではない一般データを送信してよい、または指定された制御フォーマットで制御命令を送信してよい。例えば、制御チャネル214は、ビデオデータ208および/またはオーディオデータ212を分析するための命令を伝達してよい、または協調効果を適用するための命令を伝達してよい。制御チャネル214は、例えば、ウェブリアルタイム通信(WebRTC)チャネルであってよい。
ビデオチャネル206、オーディオチャネル210、および制御チャネルは、両方向に情報を伝達することができる。よって、例えば、ビデオチャネル206およびオーディオチャネル210は、開始クライアント202-1上での表示/再生のためのデータ(例えば、1つまたは複数の非開始クライアント202-2、2-3、202-4のビデオストリームに関するデータ)を伝達可能である。制御チャネル214は、通信サーバ218からの勧告、1つまたは複数の識別された感情状態、他の命令などを伝達することができる。
通信サーバ218は、効果協調ロジック220を適用することによって、1つまたは複数の開始クライアント202-1と1つまたは複数の非開始クライアント202-2、202-3、202-4との間における協調効果の適用などを協調させるように構成されてよい。通信サーバ218はまた、いくらかの利用可能な協調効果に関するデータを含む、協調効果ライブラリ(図示せず)を記憶してよい。協調効果は識別子によって識別可能であり、協調効果ライブラリは、オプションとして、クライアントデバイス202においてローカルに記憶された協調効果ライブラリをミラーリングすることができる。代替的にはまたはさらに、通信サーバ218に記憶された(または複数の通信サーバ218の間で分けられた)ライブラリは、ローカルクライアントデバイス202で部分的にキャッシュされてよい。場合によっては、ローカルクライアントデバイスは、協調効果のサムネイルバージョンを含んで、その効果を通信アプリケーション204で選択可能にしてよいが、協調効果の実装詳細を含まないことによってクライアントデバイス202上での記憶を存続させてよい。協調効果が適用されると、対応するクライアントデバイス202は、通信サーバ218からの実装詳細を要求することができる。
通信サーバ218は、ビデオデータ208、オーディオデータ212、および任意の適用された協調効果を組み合わせるための視聴覚コンパイルロジック224をさらに含んでよい。視聴覚コンパイルロジック224は、オーディオデータ212をビデオデータ208と同期させ、さらに協調効果を、組み合わせたオーディオ/ビデオデータと(またはオーディオデータ212もしくはビデオデータ208と個々に)同期させるためのロジックを含んでよい。
組み合わせられると、結果として生じた視聴覚データ230は、オプションとして、通信サーバ218からブロードキャストサーバ226に送信されてよい。ブロードキャストサーバ226は、ビデオ通信と関連付けられた1つまたは複数の受信側クライアント202-2、202-3、202-4を識別するブロードキャストロジック228を含んでよい。ブロードキャストサーバ226は、オーディオデータ212、ビデオデータ208、および適用された協調効果を含む視聴覚データ230を、受信側クライアント202-2、202-3、202-4のそれぞれに送信してよい。
場合によっては、視聴覚データ230は、全ての受信者202-2、202-3、202-4にブロードキャストしてよいが、協調効果に関連しているメッセージは、対応する制御チャネル206上で、この効果を作用させるために協調が必要とされる非開始クライアント202-iに送信されてよい。例えば、図1Aにおける例では、協調効果はJillのデバイスによって開始されてよく、(Jillのビデオと適切に協調させてJackのビデオ上に対応するキスアニメーションを適用するために)Jackのデバイスとの協調を必要とする場合がある。ビデオデータは、協調効果が適用されるとブロードキャストサーバ226によってブロードキャストされ続けてよいが、デバイスのそれぞれにかつそれぞれから提供される制御データは変化し得る。例えば、Jillのデバイスは、制御チャネル214上で開始命令を送信してよく、この命令は、(視聴覚データ230を受信する他のデバイスにではなく)Jackのデバイスに中継されてよい。Jackのデバイスは、受信確認、データなどを、これ自体の対応する制御チャネル214(図示せず)上で通信サーバ218に送信することができる。
協調効果はJackのデバイスとJillのデバイスとの間で協調されるため、それぞれのデバイスは、この効果を、これらの対応するオーディオデータ212および/またはビデオデータ208に適用可能にするために通信サーバ218に対して制御データ216を送信/受信してよい(または、これらの効果は、オプションとして、各クライアントデバイスによって協調されるようにローカルに適用されてよい)。結果として生じる修正された視聴覚データ230は、ブロードキャストサーバ226によって会話のそれぞれの参加者にブロードキャストされてよい。
図2B~図2Cは、協調効果の適用を協調させるために交換可能であるメッセージの例を示す。
図2Bは、非開始クライアントデバイスにおいて協調効果を開始するまたは初期化するために開始クライアントデバイスによって送信可能である開始メッセージ250を示す。開始メッセージ250は、RTCチャネル上で通信サーバによって受信されてよい。
開始メッセージ250は、協調効果開始メッセージとしてメッセージ250を識別するメッセージ250のヘッダにおいてフラグ252または他の識別子を含んでよい。それ故に、通信サーバ218は、メッセージ250を受信すると、メッセージ250を処理し、かつ1つまたは複数の非開始クライアントが協調効果を開始することを要求するための適切な措置を講じてよい。フラグ252は、例えば、開始メッセージ250のヘッダデータに含まれてよい。
開始メッセージ250は、協調効果タイプ識別子254をさらに含んでよい。識別子254は、協調効果のタイプを指定してよい(例えば、キス効果、同期効果、アプリケーションコマンド効果などを識別する)。識別子254は、通信サーバにおいて記憶される協調効果ライブラリにおける協調効果と関連付けられた識別子に対応し得る(図2Aに関連した説明を参照)。
メッセージ250は、1つまたは複数の非開始ユーザ識別子256をさらに指定してよい。これらの識別子256は、タイプ識別子254によって識別される協調効果の協調アクティビティにおけるどの参加者が、協調効果を適用するべきなのかを指示してよい。通信サーバは、非開始ユーザ識別子256を読み出し、かつ開始メッセージ250をRTCチャネル上の適切なデバイスに転送してよい。
協調効果が開始されると、開始ユーザデバイスおよび非開始ユーザデバイスは、データを交換することによって協調効果の適用を協調させてよい。この目的のために、データメッセージ260は、例えば、図2Cに示されるように使用されてよい。
データは、アプリケーションプログラミングインターフェース(API)コールを介して協調効果のために交換されてよい。例えば、ユーザデバイス上のアプリケーションは、協調効果を生成または修正するためにAPIコールをサポートするアプリケーションレベルプラットフォームと関連付けられ得る。このようなプラットフォームの1つの例は、カルフォルニア州メンロパークのFacebook社によるAR Studioである。
しかしながら、協調効果を協調させる協調アクティビティプロトコルは、協調効果の実装詳細を理解する必要はない。その効果を、一般データ(すなわち、開始メッセージ250およびデータメッセージ260のフォーマットを定義する協調アクティビティプロトコルによって事前に定義されるおよび/または認識されるフォーマットではないデータ)を交換するAPIコールを介して協調させることを可能にすることによって、プロトコルは、効果が影響を及ぼすデバイスのみならず、これらそのものの効果、およびこれらの効果をサポートするプラットフォームにとらわれないやり方で適用されてよい。
それ故に、協調アクティビティプロトコルは、データを互いに交換するために、効果および/または効果を実行するデバイスを可能にする一方、効果をサポートするアプリケーションおよび/またはプラットフォームが、そのデータがどのように解釈されるのかを判断可能にすることによって、様々な効果の協調をサポートする。よって、プロトコルは、新しい効果、プラットフォーム、およびデバイスに容易に拡張可能である。
協調アクティビティプロトコルは、異なる通信方法をサポートすることができる(および公開することができる)。1つの例では、プロトコルは、高信頼通信モードおよび信頼できない通信モードをサポートしてよい。データメッセージ260における信頼性フラグ262は、アプリケーションが、メッセージ260が高信頼モードまたは低信頼モードで送信されるべきかどうかを指定することを可能にする。
高信頼モードで送信される時、協調アクティビティプロトコルは、データメッセージ260がターゲットデバイスによって受信されることを保証することができる。例えば、通信サーバは、データメッセージ260を転送すると、受信側デバイスが受信確認を送るのを待機することができる。既定の時間に受信されるこのような受信確認がない場合、サーバは、受信が確認されるまで(または、送信が失敗したことを送信者が通知可能になる既定の試行数または既定の経過時間まで)データメッセージ260を再送信してよい。高信頼モードは、協調アクティビティの状態(例えば、ビデオ開始/停止/一時停止/再生/同期コマンド、ゲームでの順番の交渉、順番の譲歩、スコア記録など)に影響するコマンドおよび重要データにとって有用であり得る。メッセージは、メッセージの複製コピーが受信される場合、メッセージデータが複数回処理されないことを確実にするための識別子と共に送信されてよい。高信頼通信モードの一例は、ユーザデータグラムプロトコル(UDP)によって実施されるが、他の適した例が存在する。
低信頼モードで送信される時、協調アクティビティプロトコルは、データメッセージ260に対する配信保証を提供しない場合がある。通信サーバは、この意図される受信者にメッセージ260を一度送ることができ、メッセージの受信の確認を必要としない場合がある。低信頼モードは、例えば、1つまたはいくつかのデータポイントが失われても必ずしも協調効果の性能を低下させない場合があるデータのストリームにとって、有用であり得る。例えば、図1Aに関して後述される例では、Jillの口の場所は、キス効果の協調を可能にするために規則的な間隔で送信されてよい。しかしながら、これらのデータポイントの1つまたはいくつかが失われても致命的ではない場合があり、システムは、受信されるデータポイント間を補間することができる。これらのデータポイントを低信頼モードで送信可能にすることによって、効果は、開始側および非開始側において処理リソースを節約することができ、(メッセージが再送信される必要がなく、受信確認が送られる必要がなくなるため)ネットワークリソースをさらに節約することができる。
いくつかの実施形態では、開始メッセージ250は、高信頼モードで常に送信されるため、効果を保証されるやり方で開始可能にする。他の実施形態では、プロトコルは、開始メッセージ250が信頼性フラグ262を提供できるようにしてよいため、場合によって、開始メッセージ250は低信頼モードで送信されることが可能になる。これは、例えば、効果そのものを適用するアプリケーションが(例えば、開始側および非開始側におけるアプリケーションの間で直接通信することによって)配信を保証する時、使用可能である。
データメッセージ260は、協調効果をサポートするプラットフォームおよび/またはアプリケーションによって認識可能なAPIコール264を含んでよい。APIコール264は、メッセージ260が適用する協調効果を識別するオブジェクトまたは方法名266を含んでよい。協調効果が開始メッセージ250に応答して開始される時、プラットフォームはオブジェクト名または識別子をこの効果に割り当ててよい。名称または識別子は、いくつかある可能性の中でも特に、開始メッセージ250の一部として指定されてよい、開始メッセージ250と別個に開始デバイスによって指定されてよい、または、開始メッセージ250に応答して非開始デバイスによって割り当てされかつ開始メッセージ250の受信確認の一部として返されてよい。この名称または識別子は、メッセージ260が適切な効果に適用されることを確実にするためにAPIコール264において使用されてよい。
場合によっては、APIコール264は方法名を指定してよい。方法名は、協調効果がどれくらい適用されるまたは修正されるかを指示することができる。例えば、APIコール264は、共有ビデオ観賞体験の「停止」方法に対するコールであってよい。停止方法を適用することによって、ビデオの再生を、開始デバイスおよび非開始デバイス上で停止させることができる。
いくつかの実施形態では、協調効果の適用は、方法名とは別個にまたはこれに加えてデータを必要とする場合がある。それ故に、APIコール264は、オプションとして、協調効果によって使用可能なデータ268(例えば、協調、同期データなど)を指定することができる。
例えば、図1Aからの例では、キス効果は、画面のどの側がJillの口および/またはテレビ会議中のユーザインターフェースの現在のレイアウトに最も近いか(例えば、JackのビデオフレームがJillの左、右、上、または下に現れているかどうか)に応じて、Jillの画面から左、右、上、または下に飛ぶように見える場合がある。協調効果は、Jillのビデオ上の所定の場所から消えて、Jackのビデオ上の対応する近い場所に再び現れる。よって、データ268は、顔認識ロジックによって識別されるJillの口の場所を含むことができることで、キスアニメーションがJackのビデオ上に現れる時、Jillのビデオにおいて消えた場所に可能な限り近くの箇所から生じるように見える。
別の例では、キスアニメーションのパスは、Jillの口の場所およびJackの頬の場所両方に左右され得、テレビ会議しているユーザインターフェースにおいて観賞されるこれらの場所の間の最短のパスを取るように見える。よって、Jillのデバイスは、Jillの口の場所を識別するデータ268を送信することができ、Jackのデバイスは、Jackの頬の場所を識別するデータ268を送信することができる。キスアニメーションのパスは、JackおよびJillの各々のテレビ会議アプリケーションによって独立して判断されてよい、または中間通信サーバによって判断されてよい。
データ268は、効果が、Jillのビデオから消えることおよびJackのビデオ上に現れることが同時に生じることを可能にするタイミング情報をさらに含んでよい。
他の例では、データ268は、同期の目的でのタイミングデータ、シングルまたはマルチプレーヤゲームのゲーム状態に関する情報、アプリケーション特有のコマンド、または協調効果を適用するために使用可能な任意の他のタイプのデータを含んでよい。
データ268は、協調アクティビティプロトコルによってあらかじめ定められない一般フォーマットのものであってよい。代替的には、協調アクティビティプロトコルは、異なるプロバイダからの協調効果によって一般的に使用されるいくつかの高水準サービス(例えば、ゲームでの順番の交渉、指導者選出など)を直接サポート可能である。この場合、データ268は、適用される特定のサービスと関連付けられた既定のフォーマットでフォーマットされてよい。サーバまたは受信側クライアントが、データ268が特定のサービスと関連付けられた既定のフォーマットのものであることを識別する時、システムは、サービスを起動する一方、サービスの機能性をその効果に与えるようにデータ268をサービスに指定してよい。
場合によっては、データ268は、メッセージ260において明白に提供されてよく、データは、受信側クライアントデバイスに押されてよい。代替策として、フィールド268は、データが記憶される場所を指定してよく、受信側クライアントデバイスは、メッセージ260の受信時に(または、必要に応じてなど、その後に)その場所からデータを引き出すことができる。
データフローおよび例示の方法
図3A~図3Cは、様々な効果適用シナリオにおいて、図2Aに示されるものなど、様々なデバイスの間の情報交換を示す例示のデータフロー図を示す。
図3Aに示されるように、開始クライアントデバイス202-1は、非開始クライアントデバイス202-2によって協調アクティビティを初期化または開始するための命令302を送信してよい。命令302は、図2Bに示されるものなど、開始メッセージ250の形式のものであってよい。命令302は、協調効果が適用されるべきであると判断することに応答して開始クライアントデバイス202-1のアプリケーションによって生成されてよい。この判断は、アプリケーションが、ある特定の条件が適用されることなどを検出する時の協調効果の自動適用に基づいて、(例えば、協調効果を選択しかつこれを適用するようにアプリケーションに命令する)インターフェースにおけるユーザによる協調効果の手動適用から生じ得る。
命令302を受信すると、通信サーバは、(例えば、開始メッセージ250におけるUIDフィールド256に基づいて)命令302が向けられる1つまたは複数の非開始ユーザデバイスを識別してよく、この命令を識別されたデバイスに転送してよい。
受信時に、非開始クライアントデバイス202-2は、(例えば、ローカルデバイスが、協調効果に対して最新であるキャッシュされたロジックを有するかどうかを判断することによって)協調効果を適用することが可能であるかどうかを判断するようにチェックしてよい。オプションとして、非開始クライアントデバイスは、デバイスのユーザが、協調効果の適用を承認または取り消すことを可能にするプロンプトを表示してよい。
効果が適用され得ることを非開始クライアントデバイス202-2が判断することを想定して、非開始クライアントデバイス202-2は、確認304を通信サーバ218に送信し返してよい。通信サーバ218は、この確認を、命令302を最初に送った開始クライアントデバイス202-1に中継してよい。
複数の非開始クライアントデバイスが識別される場合、通信サーバは、非開始クライアントデバイスの全てが協調効果を開始する準備ができていることを確認するまで、確認304を開始クライアントデバイス202-1に送信しないようにしてよい。通信サーバ218は、オプションとして、協調効果に対するパーティの全てが準備ができてチェックインした時に非開始クライアントデバイスに信号送信してよい。
非開始クライアントデバイス202-2は、命令302を受信するとすぐに協調効果を、インスタンス化、初期化、または開始してよい。代替的には、それぞれの非開始クライアントデバイス202-2は、協調効果を、インスタンス化、初期化、または開始する意向を信号送信してよいが、全ての影響された非開始クライアントデバイスが準備ができてチェックインするまでこのように行うのを待機してよい。いくつかの実施形態では、協調効果は、いくつかある可能性の中でも特に、ある既定のまたはユーザ指定可能な時間で遅延させてよく、トリガ条件が発生すると適用されてよく、または、後続のメッセージ(第1のAPIコール306など)が受信される時に適用されてよい。
開始クライアントデバイス202-1が確認304を受信すると、協調効果は適用される準備ができている。開始クライアントデバイス202-1および非開始クライアントデバイス202-2は、(例えば、通信サーバ218を介して交換されるデータメッセージ260によって)APIコール306、310を通してデータを交換してよい。APIコール306、310が高信頼モードで送信される場合、APIコール306、310を受信するデバイスは、受信確認308と共にコールに応答してよい。サーバ218は、受信確認308を使用して、APIコール306、308を再送信するかどうかを判断してよい。オプションとして、受信確認が受信される時、サーバ218は、APIコール306、310を発したデバイスに戻って受信確認を中継してよい。
図3Bは、非開始クライアントデバイスが協調効果を適用しようとしているが、効果を適用するための必要な情報全てを有しているわけではない(例えば、非開始デバイスはローカルにキャッシュされる協調効果を実装するためのロジックのコピーを有していない)一例を示す。この場合、非開始クライアントデバイス202-2は、命令302を受信することに応答して遅延要求320を送信する。サーバ218は、オプションとして、遅延が要求されたことを開始クライアント202-1に通知してよく、代替的には、サーバ218は、協調効果の状況に関して開始クライアント202-1に報告を返す前に遅延が解消されるまで、単に待機してよい。
遅延要求320を送信後、非開始クライアント202-2は任意の欠けている協調効果データに対する要求322を送信してよい。代替的には、要求は、遅延要求320の一部であってよい、または遅延要求320の存在によってサーバ218から推論されてよい。それに応じて、サーバ218は、このローカルな協調効果ライブラリからまたは遠隔の場所から、要求322において指定された欠けているデータ(または協調効果と関連付けられた全てのデータ)を取り出してよい。サーバ218はさらにまた、協調効果データ324を非開始クライアント202-2に送信してよい。代替的には、サーバ218は、データが取り出され得る場所を送信してよく、非開始クライアント202-2は、指定された場所からデータを取り出してよい。
協調効果データが適用された後、非開始クライアント202-2は、非開始クライアント202-2が協調効果を開始する準備ができている(または既に開始している)という指示326を送信してよい。サーバ218は、指示326を開始クライアント202-1に送信してよく、その後、開始クライアント202-1および非開始クライアント202-2は、上述されるようにデータを交換可能である。
図3Cは、非開始デバイスが協調効果を適用することを拒否する一例を示す。この拒否には、非開始クライアント202-2が協調効果を適用する必要があるデータを有さず、データを取得できない場合、非開始デバイス202-2のユーザが、協調効果の適用を明白に取り消す、または協調効果が適用されないものとすることを指示する基本設定を指定している場合、非開始クライアント202-2上のアプリケーション204-2が協調効果の適用をサポートしない場合、非開始クライアントが協調効果を適用するのに利用可能な十分なリソースを有していない場合など、いくつかの理由のためである場合がある。協調効果の適用が非開始クライアント202-2で拒否される場合、拒否メッセージ330はサーバ218に送信されかつ開始クライアント202-1に中継されてよい。それに応じて、開始クライアント202-1は協調効果の適用を取り消してよい。
協調効果が複数の非開始クライアントで適用された場合、クライアントの1つまたは複数における効果の拒否は、効果が、全てのクライアントにおいて取り消されるようにしてもよいししなくてもよい。いくつかの実施形態では、ある特定のクライアントは、必須であるおよびその他はオプションであるとしてフラグが立てられてよく、オプションのクライアントにおける取り消しは、効果が残りのクライアントで取り消されるようにしないことになるが、必須のクライアントにおける取り消しはそのように行われることになる。他の実施形態では、効果は効果の適用を拒否しなかった任意のユーザに適用されてよい。さらにその他では、効果は、既定の閾値の数または割合のクライアントが効果の適用を拒否しない限り、適用されてよい。
次に、画像サーチに基づく協調効果を適用するための例示のロジック400について、図4A~図4Bに関連して説明する。図4A~図4Bは、示されるロジックブロックを、様々なロジックのグループ(例えば、命令受信ロジック404、命令転送ロジック408など)に整理する。いくつかの実施形態では、これらのロジックモジュールは、図2Aに示されるように、通信サーバ218上で提供されてよいが、このような構成が必須ではないことは理解されたい。モジュールの全ては、同じデバイスで実装されてよい、または任意の数のデバイスにわたって分散させてよい。モジュールの様々な組み合わせは、所定のデバイス上で用いられてよい、または個々のモジュールのロジックは異なるデバイスによって行われてよい。
処理はブロック402で始めてよく、ここで、システムは協調アクティビティまたは対話に関するデータを受信する。例えば、データは、テレビ会議用のビデオデータ、マルチプレーヤゲーム用のゲームデータ、写真アルバムを表示するためのグラフィックデータ、共有読書体験での使用のための本のコンテンツに関するデータなどを含んでよい。システムは、協調アクティビティと関連付けられた1つまたは複数のクライアントデバイスを識別してよい。
処理は、さらにまた、命令受信ロジック404にハンドオーバされてよい。命令受信ロジック404は、ブロック406において、ネットワークインターフェースを、命令を受信することに従事させてよい。ネットワークインターフェースは、リアルタイム通信(RTC)チャネル上で命令をリッスンしてよい。命令は、図2Bと関連して説明されるように、開始メッセージの形式のものであってよい。命令は、開始クライアントが発するものであってよく、システムに、非開始クライアント上でブロック402において参照されるアクティビティに関連している協調効果を開始するように命令してよい。
処理はさらにまた、命令転送ロジック408にハンドオーバされてよい。命令転送ロジック408は、ブロック410において、ネットワークインターフェースが、RTCチャネルを介して命令において識別される非開始クライアントデバイスに命令を転送することに従事させてよい。
処理はさらにまた、合意受信ロジック412にハンドオーバされてよい。オプションとして、合意受信ロジック412は、例えば、クライアントが、命令の受信を確認する、または応答メッセージを送信する(ブロック412~414)まで、各クライアントに命令を再送信することによって、非開始クライアントに命令の配信を保証することができる。
命令に応答して、非開始クライアントは、このRTCチャネル上でいくつかの異なるタイプのメッセージのうちの1つで応答してよい。ブロック418において、システムは、応答が、協調効果が非開始クライアントにおいて開始されているまたは開始されることになることの確認であるかどうかを判断してよい。ブロック418における判断が「はい」である場合、処理は合意転送ロジック436に渡されてよい(図4B)。
他方で、ブロック418における判断が「いいえ」である場合、処理はブロック420に進んでよく、システムは、メッセージが協調効果の拒否であるかどうかを判断してよい。拒否である場合、処理はブロック422に進み、ここで、上で概説されるように、システムは、拒否を開始クライアントに戻すように転送してよく、開始クライアントは、協調効果の適用を取り消してよい、または、非開始クライアントの部分集合に協調効果を適用してよい。処理はその後終了してよい。
ブロック420における判断が「いいえ」である場合、システムは、ブロック426に進み、メッセージが遅延要求であるかどうかを判断してよい。遅延要求である場合、システムは、(オプションとして)ブロック428において、開始クライアントデバイスに遅延要求の通知を転送してよい。遅延要求または後続のメッセージが協調効果に関するデータを要求する場合(ブロック430)、ブロック432において、システムは、関連データをローカルレポジトリから取り出してよい、またはデータが保持される遠隔の場所を識別してよい。システムは、データおよび/または場所情報をRTCチャネル上の要求しているデバイスに転送してよい。
ブロック434において、システムは、遅延要求の確認または拒否を受信してよい。メッセージが拒否される(例えば、非開始クライアントが、ブロック432においてデータを受信し、かつ協調効果を実行するための必要なリソースまたはアプリケーションの十分に最新のバージョンを有さないと判断した)場合、処理はブロック422に戻ってよく、システムは上述されるように拒否を処理してよい。メッセージが、効果が開始されているまたは開始されることになるとの確認である場合、処理は、合意転送ロジック436に渡されてよい(図4B)。
ブロック426~434は、遅延ロジック424を共に構成してよい。
図4Bに戻ると、合意転送ロジック436は、ブロック438において、非開始クライアントが、協調効果を開始しているまたは開始しようとしているとの確認を送信するように動作可能であってよい。確認は、RTCチャネル上のネットワークインターフェースによって送信されてよい。
協調効果が開始クライアントデバイスおよび非開始クライアントデバイス両方で開始された後、デバイスは、協調効果に関連している情報を交換してよい。それ故に、データ受信ロジック430は、ブロック432において、データと関連付けられるAPIコールを含有するメッセージを受信してよい。メッセージは、例えば、図2Cに示されるものなどのデータメッセージであってよい。メッセージは、送り側デバイスと関連付けられたRTCチャネル上のネットワークインターフェースによって受信されてよい。送り側デバイスは、開始クライアントであってよい、または非開始クライアントであってよい。処理はさらにまた、データ転送ロジック434に渡されてよい。
ブロック436において、データ転送ロジック434は、ブロック432で受信されるメッセージが協調プロトコルと関連付けられた高水準のあらかじめ定義されたサービス(すなわち、効果協調ロジック220を定義するプロトコルおよび/またはシステムにおいて交換されるメッセージのフォーマット)を起動するかどうか判断してよい。高水準サービスは、複数の異なる効果によって求められる場合があり、ひいては、協調アクティビティプロトコルによって標準的なやり方で(典型的には通信サーバ218上で)実施される一般的な機能性を含む。転送ロジック434は、例えば、APIコールがサービスに関連付けられるかどうか、またはメッセージがサービスと関連付けられたあらかじめ定義されたフォーマットのデータを含むかどうかを判断するために、APIコールを含むメッセージを分析してよい。
データ転送ロジック434が、メッセージが高水準サービスを起動することを判断する場合、ブロック438において、システムは、オプションとして、サービスと関連付けられたローカルアクションを行ってよい。例えば、高水準サービスがどのクライアントデバイスがマルチプレーヤゲームで次の順番を取ることになるか、またはどのデバイスが、シングルプレーヤゲームにおいて次回プレイするのかを交渉することに関与する場合、システムはプレーヤをローカルに選択してよい。サービスがスコア記録に関与する場合、システムは、(例えば、ブロック402において受信されたアクティビティデータに基づいて)ローカルに記憶されるゲームの状態を調べ、かつスコアを更新してよい。高水準サービスの他の例には、(能動的には、ユーザによる高速アクションを通して、または受動的には、条件の発生によって)順番を譲歩すること、指導者選出を行うこと(例えば、どのクライアントのゲーム状態が異なるデバイス上のゲーム状態の間の矛盾の場合制御するのかを判断すること)などが挙げられる。
場合によって、システムは、(例えば、システムが、協調アクティビティの状態についての全ての必要な情報を有しているわけではない時)高水準サービスに関連している全てのアクションを行うことができない場合がある。この場合、システムは、受信側クライアントデバイス上で実装される高水準サービスとしてメッセージにフラグを立ててよく、関係しているクライアントデバイスから追加の情報を要求してよく、および/またはサービスを実行するために受信側クライアントデバイス上で行う命令を生成してよい。
ブロック440において、システムは、APIコール、および/またはブロック432において受信されたメッセージの受信者へのサービスに関連している命令を転送してよい。
ブロック442において、システムは、メッセージが、(ブロック432において受信されるデータメッセージにおけるフラグによって指定されるように)高信頼モードまたは低信頼モードで送られるかどうかを判断してよい。モードが低信頼モードである場合、システムはブロック432に戻り、かつ新しいデータメッセージを待つことができる。
モードが高信頼モードである場合、システムは、ブロック444~450において、既定の時間待機した後、メッセージの受信確認が受信されたかどうかを判断してよい。該受信確認が受信された場合、システムは、オプションとして、受信確認を送り側クライアントに転送してよい(ブロック448)。該受信確認が受信されない場合、システムは、ブロック440で送信された元の情報を再送信後(ブロック450)、ブロック444に戻って、別の既定の時間待機することができる。ブロック444~450におけるループが既定の時間または既定の反復回数を超えて繰り返される場合、システムは、送信が失敗したと判断してよく、送り側クライアントデバイスにメッセージ送信の失敗を通知してよい。
オプションとして、データ送信が失敗の実行中の協調効果は、シャットダウンされ得る。同様に、システムは、協調効果が終了している(あるいは、協調効果が実行中に失敗する場合のように、デバイス上で終わっている)ことを指示するメッセージを開始クライアントデバイスまたは非開始クライアントデバイスから受信してよい。これらの場合、システムは、協調効果を実行している他のクライアントに、この効果が終わっていることを通知することなど、シャッドダウンおよびクリーンアップ手順を行ってよい。
通信システムの概要
これらの例は、クライアントデバイスでローカルに、または(例えば、リモートサーバで)遠隔で提供される通信システムによって実装されてよい。図5A~図5Cは、通信システムの様々な例を示し、以下により詳細に論じられる。
図5Aは、上述される機能性が通信サーバに統合される例示の集中型通信システム500を示す。中央集中システム500は、全体が単一の中央集中サーバデバイス526内にあるなど、単一のコンピューティングエンティティ内でメッセージングまたは通信サービスの構造および/または動作の一部または全てを実装することができる。
通信システム500は、1つまたは複数のコンポーネントを含むソフトウェアアプリケーションを有するコンピュータ実装システムを含み得る。図5Aに示される通信システム500は、特定のトポロジにおいて限定された数の要素を有するが、通信システム500は、代替トポロジにおいてはより多くのまたはより少ない要素を含み得る。
通信サービス500は、概して、メッセージを、受信、記憶、および伝達するように構成され得る。クライアントデバイス510上で実行などしてよいクライアント520がオフラインであり、かつクライアントが利用可能である際にメッセージ/通信を配信する間に、通信サービス500はメッセージまたはビデオ通信を記憶してよい。代替的にはまたはさらに、クライアント520はソーシャルネットワーキング機能性を含んでよい。
クライアントデバイス510は、受信ユーザ、ユーザアカウント、または受信側クライアントデバイス510に対して決定している他の識別子にアドレス指定されるメッセージを送信してよい。例示的な実施形態において、クライアントデバイス510の各々およびそれらのそれぞれの通信クライアント520は、通信サービス500の特定のユーザと関連付けられる。いくつかの実施形態において、クライアントデバイス510は、スマートフォンなどのセルラデバイスであってもよく、クライアントデバイス510の各々と関連付けられた電話番号に基づいて通信サービス500のものと識別され得る。いくつかの実施形態において、各通信クライアントは、通信サービス500に登録されたユーザアカウントと関連付けられてもよい。一般に、各通信クライアントは、メッセージの受信のための様々な技術により対処され得る。いくつかの実施形態においては、クライアントデバイス510はセルラデバイスであり得、他の実施形態においては、クライアントデバイス510のうちの1つまたは複数は、パーソナルコンピュータ、タブレットデバイス、任意の他の形態のコンピューティングデバイスであり得る。
クライアント510は、1つまたは複数の入力デバイス512および1つまたは複数の出力デバイス518を含み得る。入力デバイス512は、例えば、マイクロフォン、キーボード、カメラ、電子ペン、タッチスクリーン、ならびに、メッセージデータ、要求、コマンド、ユーザインターフェース対話、選択、および他のタイプの入力を含む、入力を受信するための他のデバイスを含み得る。出力デバイス518は、スピーカ、モニタまたはタッチスクリーンなどのディスプレイデバイス、および通信システム500にインターフェースを提示するための他のデバイスを含み得る。
クライアント510は、ハードドライブ、ソリッドステートドライブ、フラッシュストレージ、リードオンリメモリ、またはランダムアクセスメモリのうちの1つまたはそれらの組み合わせなど、非一時的コンピュータ可読記憶媒体であり得るメモリ519を含み得る。メモリ519は、入力514の表現、および/または出力516の表現、ならびに1つまたは複数のアプリケーションであり得る。例えば、メモリ519は、ユーザがソーシャルネットワーキングサービスと対話することを可能にする通信クライアント520および/またはソーシャルネットワーキングクライアントを記憶することができる。
入力514は、入力デバイス212がキーボードである場合など、テキストであってもよい。代替的に、入力514は、入力デバイス512がマイクロフォンまたはカメラである場合など、オーディオまたはビデオ記録であってもよい。したがって、入力514は、オーディオ記録を、通信システム500によって処理可能であるテキストへ変換するために、自動音声認識(ASR)ロジックの対象となり得る。ASRロジックは、クライアントデバイス510に位置し得る(オーディオ記録がクライアント510によってローカルで処理され、対応するテキストが通信サーバ526へ伝送されるように)か、または通信サーバ526に遠隔で位置し得る(この場合、オーディオ記録は通信サーバ826に伝送され得、通信サーバ526がオーディオをテキストへと処理し得る)。他の組み合わせもまた可能であり、例えば、入力デバイス512がタッチパッドまたは電子ペンである場合、入力514は、手書きの形態であり得、これは、入力512を処理可能なテキストに変換するために、手書きまたは光学文字認識分析ロジックの対象になり得る。
クライアント510は、インターネットなどのネットワーク524と通信するためのネットワークインターフェース522を備え得る。ネットワークインターフェース522は、ネットワーク524と互換性のある形式で、および/またはネットワーク524と互換性のあるプロトコルを使用して、入力514を伝送することができ、ネットワーク524から対応する出力516を受信することができる。
ネットワークインターフェース522は、ネットワーク524を介して通信サーバ526に通信することができる。通信サーバ526は、クライアント間の通信を受信、記憶、および転送するように動作可能であり得る。
通信サーバ526は、ネットワークインターフェース522、通信基本設定528、および通信ロジック530を含んでよい。通信基本設定528は、1つまたは複数のユーザおよび/またはメッセージスレッドに対する1つまたは複数のプライバシ設定または他の基本設定を含んでよい。さらに、通信基本設定528は、本明細書に説明されるロジックに対するデフォルトの設定を含む1つまたは複数の設定を含んでよい。
通信ロジック530は、本発明の上述される特徴のいずれかまたは全てを実装するためのロジックを含んでよい。代替的にはまたはさらに、特徴の一部または全ては、通信クライアント520などのアプリケーションに組み込まれるなどによって、クライアント510-iにおいて実装されてよい。
クライアント510のネットワークインターフェース522および/または通信サーバ526はまた、ネットワーク524を通してアプリサーバ540と通信するために使用されてよい。アプリサーバは、(いくつかあるエンティティの中でも特に)クライアント510-iおよび/または通信サーバ526によるダウンロードに利用可能なソフトウェアを表す、アプリライブラリ544におけるソフトウェアまたはアプリケーションを記憶してよい。アプリライブラリ544におけるアプリは、本明細書に説明される実施形態を完全にまたは部分的に実装してよい。例示の実施形態を組み込むソフトウェアをダウンロードするための要求を受信すると、アプリロジック542は、アプリライブラリ544における対応するアプリを識別可能であり、かつ(例えば、ネットワークインターフェースを介して)ソフトウェアを要求したエンティティにアプリを提供してよい。
クライアント510のネットワークインターフェース522および/または通信サーバ526はまた、ネットワーク524を通してソーシャルネットワーキングサーバ536と通信するために使用されてよい。ソーシャルネットワーキングサーバ536は、ソーシャルネットワーク内のつながりを規定するソーシャルネットワーキンググラフ538を含み得るか、またはそれと対話し得る。さらに、通信サーバ526は、つながり情報、通信履歴、イベント詳細などをソーシャルネットワークから取得することなど、様々な目的のためにソーシャルネットワーキングサーバ536に接続し得る。
クライアント510のユーザは、ソーシャルネットワーキングサーバ536と、またはそれを介して対話もしくは通信する、個人(人間のユーザ)、エンティティ(例えば、企業、ビジネス、またはサードパーティアプリケーション)、またはグループ(例えば、個人またはエンティティの)であってもよい。ソーシャルネットワーキングサーバ536は、オンラインソーシャルネットワークをホストするネットワークアドレス可能コンピューティングシステムであってもよい。ソーシャルネットワーキングサーバ536は、例えば、ユーザプロフィールデータ、概念プロフィールデータ、ソーシャルグラフ情報、またはオンラインソーシャルネットワークに関する他の好適なデータなど、ソーシャルネットワーキングデータを生成、記憶、受信、および送信することができる。ソーシャルネットワーキングサーバ536は、ネットワーク環境の他のコンポーネントによって、直接的に、またはネットワーク524を介するかのいずれかでアクセスされ得る。
ソーシャルネットワーキングサーバ536は、例えば適切なプライバシ設定を設定することによって、ユーザが、自らのアクションをソーシャルネットワーキングサーバ536によりログさせること、または他のシステム(例えば、通信サーバ526などのサードパーティシステム)と共有させることについてオプトインまたはオプトアウトすることを可能にする認証サーバ(または他の好適なコンポーネント)を含み得る。ユーザのプライバシ設定は、ユーザと関連付けられたどんな情報がログされ得るか、ユーザと関連付けられた情報がどのようにログされ得るか、ユーザと関連付けられた情報がいつログされ得るか、誰がユーザと関連付けられた情報をログし得るか、ユーザと関連付けられた情報が誰と共有され得るか、およびどんな目的でユーザと関連付けられた情報がログまたは共有され得るかを決定することができる。認証サーバは、ブロッキング、データハッシュ化、匿名化、または必要に応じて他の好適な技術により、ソーシャルネットワーキングサーバ536のユーザの1つまたは複数のプライバシ設定を強化するために使用され得る。
より具体的には、オンラインソーシャルネットワークのコンテンツオブジェクトのうちの1つまたは複数が、プライバシ設定と関連付けられてもよい。オブジェクトのためのプライバシ設定(または「アクセス設定」)は、例えば、オブジェクトと共同して、認証サーバ上のインデックス内など任意の好適な様式で、別の好適な様式で、またはそれらの任意の組み合わせで記憶され得る。オブジェクトのプライバシ設定は、オブジェクト(またはオブジェクトと関連付けられた特定の情報)がオンラインソーシャルネットワークを使用してどのようにアクセス(例えば、閲覧または共有)され得るかを指定することができる。オブジェクトのためのプライバシ設定が、特定のユーザがオブジェクトにアクセスすることを可能にする場合、オブジェクトは、ユーザに対して「可視」であると説明され得る。限定ではないが、例として、オンラインソーシャルネットワークのユーザは、ユーザプロフィールページ上の職歴情報にアクセスすることができるユーザのセットを識別する、ユーザプロフィールページのためのプライバシ設定を指定することができ、このようにして他のユーザをその情報にアクセスすることから除外する。特定の実施形態において、プライバシ設定は、オブジェクトと関連付けられた特定の情報にアクセスすることが許可されるべきではないユーザの「ブロックリスト」を指定することができる。言い換えると、ブロックリストは、オブジェクトが可視ではない1つまたは複数のユーザまたはエンティティを指定することができる。限定ではないが、例として、ユーザは、ユーザと関連付けられたフォトアルバムにアクセスすることができないユーザのセットを指定することができ、このようにしてそれらのユーザをフォトアルバムにアクセスすることから除外する(同時に、場合により、ユーザのセット内にない特定のユーザがフォトアルバムにアクセスすることを可能にする)。
特定の実施形態において、プライバシ設定は、ソーシャルネットワーキンググラフ538の特定の要素を関連付けられてもよい。ノードまたはエッジなどのソーシャルグラフ要素のプライバシ設定は、どのようにしてソーシャルグラフ要素、ソーシャルグラフ要素と関連付けられた情報、またはソーシャルグラフ要素と関連付けられたコンテンツオブジェクトがオンラインソーシャルネットワークを使用してアクセスされ得るかを指定することができる。限定ではないが、例として、特定の写真に対応する特定の概念ノードは、写真が、写真内でタグ付けされたユーザおよびそのユーザの友達によってのみアクセスされ得ることを指定するプライバシ設定を有し得る。特定の実施形態において、プライバシ設定は、ユーザが、自分のアクションをソーシャルネットワーキングサーバ536によってログさせることまたは他のシステムと共有させることについてオプトインまたはオプトアウトすることを可能にし得る。特定の実施形態において、オブジェクトと関連付けられたプライバシ設定は、許可されたアクセスまたはアクセスの否認の任意の好適な粒度を指定することができる。限定ではないが、例として、アクセスまたはアクセスの否認は、特定のユーザ(例えば、自分のみ、自分のルームメイト、および自分の上司)、特定の隔たりの次数以内のユーザ(例えば、友達、または友達の友達)、ユーザグループ(例えば、ゲーミングクラブ、自分の家族)、ユーザネットワーク(例えば、特定の雇用主の従業員、特定の大学の学生または卒業生)、全てのユーザ(「公開」)、ユーザなし(「非公開」)、サードパーティシステムのユーザ、特定のアプリケーション(例えば、サードパーティアプリケーション、外部ウェブサイト)、他の好適なユーザもしくはエンティティ、またはそれらの任意の組み合わせに対して指定され得る。本開示は、特定のプライバシ設定を特定の様式で使用することについて説明するが、本開示は、任意の好適なプライバシ設定を任意の好適な様式で使用することを企図する。
ユーザ(または他のエンティティ)からの、データストアに記憶された特定のオブジェクトの要求に応答して、ソーシャルネットワーキングサーバ536は、データストアに対するオブジェクトの要求を送信することができる。要求は、要求と関連付けられたユーザを識別することができる。要求されたデータオブジェクトは、認証サーバが、ユーザがオブジェクトと関連付けられたプライバシ設定に基づいてオブジェクトにアクセスする権限を与えられていることを決定する場合に、ユーザ(またはユーザのクライアントシステム510)にのみ送信され得る。要求しているユーザがオブジェクトにアクセスする権限を与えられていない場合、認証サーバは、要求されたオブジェクトがデータストアから取得されることを防ぐことができるか、または要求されたオブジェクトがユーザに送信されることを防ぐことができる。検索クエリという文脈においては、オブジェクトは、クエリを行っているユーザがオブジェクトにアクセスする権限を与えられている場合にのみ検索結果として生成され得る。言い換えると、オブジェクトは、クエリを行っているユーザにとって可視である可視性を有する必要がある。オブジェクトがユーザにとって可視ではない可視性を有する場合、オブジェクトは、検索結果から除外され得る。
いくつかの実施形態において、ターゲティング基準は、様々な目的のためにソーシャルネットワークのユーザを識別するために使用され得る。ユーザを識別して、ターゲティングするために使用されるターゲティング基準は、ソーシャルネットワーキングサーバ536上の明白な述べられたユーザ関心、または、ソーシャルネットワーキングサーバ536上のノード、オブジェクト、エンティティ、ブランド、もしくはページとのユーザの明白なつながりを含み得る。加えて、または代替として、そのようなターゲティング基準は、暗黙のまたは推測されるユーザ関心またはつながり(ユーザの履歴、デモグラフィック、ソーシャルアクティビティもしくは他のアクティビティ、友達のソーシャルアクティビティもしくは他のアクティビティ、サブスクリプション、またはユーザと似た(例えば、共有する関心、つながり、またはイベントに基づいて)他のユーザの先述のいずれかを分析することを含み得る)を含み得る。特定の実施形態は、プラットフォームおよび「いいね(like)」印象データ;コンテクスト信号(例えば、「コカ・コーラについてのページを、今誰が閲覧しているか、または最近閲覧したのは誰か?」);軽いつながり(例えば、「チェックイン」);つながり類似;ファン;抽出されたキーワード;EMU広告;推測広告;係数、親密性、または他のソーシャルグラフ情報;友達の友達つながり;ピンニングまたはブースティング;割引;投票;世帯収入、ソーシャルクラスタまたはグループ;画像または他のメディアで検出された製品;ソーシャルグラフまたはオープングラフエッジタイプ;geo予測;プロフィールまたはページの閲覧;ステータスアップデートまたは他のユーザ投稿(自然言語処理またはキーワード抽出を伴い得る分析);イベント情報;または協調フィルタリングを伴い得る、プラットフォームターゲティングを利用することができる。ユーザを識別しターゲティングすることはまた、必要に応じて、プライバシ設定(ユーザオプトアウトなど)、データハッシュ化、またはデータ匿名化を含意し得る。
図5Aに示される集中型実施形態は、新しいシステムとして、または既存のシステムに対するアップグレードとしての展開に適合し得るが、これは、例示の実施形態を実装するためのロジックが通信サーバ526に組み込まれるからである。対照的に、図5Bは、例示の実施形態を実装するための機能性が、分散され、かつ通信サーバから遠隔でアクセス可能である例示の分散型通信システム550を示す。分散通信システム550の例としては、クライアント-サーバアーキテクチャ、3層アーキテクチャ、N層アーキテクチャ、密結合またはクラスタアーキテクチャ、ピアツーピアアーキテクチャ、マスター-スレーブアーキテクチャ、共有データベースアーキテクチャ、および他のタイプの分散システムが挙げられる。
図5Bに示されるコンポーネントの多くは、図5Aのものと同一であり、これらの要素の説明は、簡潔にするためにここでは繰り返されない(アプリサーバ540は、論述を容易にするために図から省略されるが、この実施形態はまた、アプリサーバ540を用いる場合があることは理解されたい)。集中型実施形態と分散型実施形態との間の主な違いは、例示の実施形態を実装するためにロジック530をホストする別々の処理サーバ552の追加である。処理サーバ552は、通信サーバ526とは全く異なり得るが、ロジック530およびロジック534の機能を通信サーバ526に提供するために、直接的またはネットワーク524を介するかのいずれかで通信サーバ526と通信することができる。
図5Bに描写される実施形態は、例えば、既存の通信サーバを置き換えるのが困難であるか、または望ましくないときに、例示的な実施形態が既存の通信システムと一緒に配備されることを可能にするのに特によく適している可能性がある。加えて、いくつかの場合において、通信サーバ526は、追加のピボット機能の追加を制限するまたは不可能にする限られたリソース(例えば、処理またはメモリリソース)を有し得る。そのような状況では、本明細書に説明される能力は、依然として、別個の処理サーバ552を通じて提供されてもよい。
なおさらなる実施形態では、ロジック532は、例えば、通信クライアント520の一部として、クライアント510-iにおいてローカルに設けられてよい。これらの実施形態では、それぞれのクライアント510-iは、どのメッセージがどのスレッドに属するのか、およびどのようにディスプレイを更新しかつ通知を発行するのかに関する判断をこれ自体で行う。その結果、異なるクライアント510-iは、ローカル設定に応じて、同じ会話を異なるように表示可能である(例えば、同じメッセージは異なるスレッドに割り当て可能である、または同様のスレッドは異なるペアレントまたはハイライトを有してよい)。
図5Cは、ソーシャルネットワーキンググラフ538の例を例証する。例示的な実施形態において、ソーシャルネットワーキングサービスは、1つまたは複数のソーシャルグラフ538を、ソーシャルネットワーキングサービスを介したソーシャルグラフデータ構造として1つまたは複数のデータストアに記憶することができる。
ソーシャルグラフ538は、ユーザノード554および概念ノード556などの複数のノードを含み得る。ソーシャルグラフ228は、さらには、ノードを接続するエッジ558を含み得る。ソーシャルグラフ228のノードおよびエッジは、データオブジェクトして、例えば、データストア(ソーシャルグラフデータベースなど)に記憶され得る。そのようなデータストアは、ソーシャルグラフ228のノードまたはエッジの1つまたは複数の検索可能またはクエリ可能なインデックスを含み得る。
ソーシャルグラフ538には、ソーシャルネットワーキングサーバ226、クライアントシステム210、サードパーティシステム(例えば、翻訳サーバ224)、または適したアプリケーションのための任意の他の認可されたシステムまたはデバイスがアクセスすることができる。
ユーザノード554は、ソーシャルネットワーキングシステムのユーザに対応し得る。ユーザは、ソーシャルネットワーキングシステムと、またはそれを介して対話または通信する、個人(人間のユーザ)、エンティティ(例えば、企業、ビジネス、またはサードパーティアプリケーション)、またはグループ(例えば、個人またはエンティティの)であってもよい。例示的な実施形態において、ユーザがソーシャルネットワーキングシステムにアカウントを登録するとき、ソーシャルネットワーキングシステムは、ユーザに対応するユーザノード554を作成し、1つまたは複数のデータストアにユーザノード30を記憶することができる。本明細書に説明されるユーザおよびユーザノード554は、適切な場合、登録ユーザおよび登録ユーザと関連付けられたユーザノード554を指し得る。加えて、または代替的に、本明細書に説明されるユーザおよびユーザノード554は、適切な場合、ソーシャルネットワーキングシステムに登録していないユーザを指し得る。特定の実施形態において、ユーザノード554は、ユーザによって提供される情報、またはソーシャルネットワーキングシステムを含む様々なシステムによって生成される情報と関連付けられてもよい。限定ではないが、例として、ユーザは、自分の名前、プロフィール写真、連絡先情報、誕生日、性別、婚姻ステータス、家族ステータス、職業、学歴、嗜好、興味、または他のデモグラフィック情報を提供することができる。特定の実施形態において、ユーザノード554は、ユーザと関連付けられた情報に対応する1つまたは複数のデータオブジェクトと関連付けられてもよい。特定の実施形態において、ユーザノード554は、1つまたは複数のウェブページに対応してもよい。ユーザノード554は、ソーシャルネットワーキングシステム内のユーザについての固有ユーザ識別子と関連付けられてもよい。
特定の実施形態において、概念ノード556は、概念に対応してもよい。限定ではないが、例として、概念は、場所(例えば、映画館、レストラン、ランドマーク、または都市など)、ウェブサイト(例えば、ソーシャルネットワークサービスと関連付けられたウェブサイト、もしくはウェブアプリケーションサーバと関連付けられたサードパーティウェブサイトなど)、エンティティ(例えば、人、ビジネス、グループ、スポーツチーム、または有名人など)、ソーシャルネットワーキングシステム内もしくはウェブアプリケーションサーバなどの外部サーバ上に位置し得るリソース(例えば、オーディオファイル、ビデオファイル、デジタルフォト、テキストファイル、構造化文書、またはアプリケーションなど)、物的財産もしくは知的財産(例えば、彫刻、絵画、映画、ゲーム、楽曲、思想、写真、または著作物など)、ゲーム、アクティビティ、思想もしくは理論、別の好適な概念、または2つ以上のそのような概念に対応してもよい。概念ノード556は、ユーザによって提供される概念の情報、またはソーシャルネットワーキングシステムを含む様々なシステムによって収集される情報と関連付けられてもよい。限定ではないが、例として、概念の情報は、名称もしくはタイトル、1つまたは複数の画像(例えば、本の表紙の画像)、ロケーション(例えば、住所または地理的なロケーション)、ウェブサイト(URLと関連付けられ得る)、連絡先情報(例えば、電話番号または電子メールアドレス)、他の好適な概念情報、またはそのような情報の任意の好適な組み合わせを含み得る。特定の実施形態において、概念ノード556は、概念ノード556と関連付けられた情報に対応する1つまたは複数のデータオブジェクトと関連付けられてもよい。特定の実施形態において、概念ノード556は、1つまたは複数のウェブページに対応してもよい。
特定の実施形態において、ソーシャルグラフ538内のノードは、ウェブページ(「プロフィールページ」と称され得る)を表し得るか、またはウェブページによって表され得る。プロフィールページは、ソーシャルネットワーキングシステムによってホストされ得るか、またはソーシャルネットワーキングシステムにアクセス可能であり得る。プロフィールページはまた、サードパーティサーバと関連付けられたサードパーティウェブサイト上でホストされてもよい。限定ではないが、例として、特定の外部ウェブページに対応するプロフィールページは、特定の外部ウェブページであってもよく、プロフィールページは、特定の概念ノード556に対応してもよい。プロフィールページは、他のユーザの全てまたは選択されたサブセットによって閲覧可能であってもよい。限定ではないが、例として、ユーザノード554は、対応するユーザが、コンテンツを追加する、発言をする、または別のやり方で自己表現をすることができる対応するユーザプロフィールページを有し得る。ビジネスページ205などのビジネスページは、商業エンティティに対するユーザプロファイルページを備えてよい。限定ではないが、別の例として、概念ノード556は、特に概念ノード556に対応する概念に関して、1人または複数のユーザが、コンテンツを追加する、発言をする、または自己表現をすることができる対応する概念プロフィールページを有し得る。
特定の実施形態において、概念ノード556は、サードパーティウェブページ、またはサードパーティシステムによってホストされるリソースを表してもよい。サードパーティウェブページまたはリソースは、他の要素中でも特に、コンテンツ、選択可能なアイコンもしくは他のアイコン、またはアクションもしくはアクティビティを表す他の対話可能オブジェクト(例えば、JavaScript、AJAX、またはPHPコードで実装され得る)を含み得る。限定ではないが、例として、サードパーティウェブページは、「いいね」、「チェックイン」、「食べる」、「お薦め」、または別の好適なアクションもしくはアクティビティなどの選択可能なアイコンを含み得る。サードパーティウェブページを閲覧するユーザは、アイコンのうちの1つ(例えば、「食べる」)を選択して、クライアントシステムに、ユーザのアクションを示すメッセージをソーシャルネットワーキングシステムへ送信させることによって、アクションを実施することができる。メッセージに応答して、ソーシャルネットワーキングシステムは、ユーザに対応するユーザノード554とサードパーティウェブページまたはリソースに対応する概念ノード556との間にエッジ(例えば、「食べる」エッジ)を作成し、エッジ558を1つまたは複数のデータストアに記憶することができる。
特定の実施形態において、ソーシャルグラフ538内の一対のノードは、1つまたは複数のエッジ558によって互いに接続されてもよい。一対のノードを接続するエッジ558は、その一対のノード間の関係を表し得る。特定の実施形態において、エッジ558は、一対のノード間の関係に対応する1つまたは複数のデータオブジェクトまたは属性を含み得るか、またはこれを表し得る。限定ではないが、例として、第1のユーザは、第2のユーザが第1のユーザの「友達」であることを示し得る。この指示に応答して、ソーシャルネットワーキングシステムは、第2のユーザに「友達申請」を送信することができる。第2のユーザが「友達申請」を承認すると、ソーシャルネットワーキングシステムは、ソーシャルグラフ538において第1のユーザのユーザノード554を第2のユーザのユーザノード554に接続するエッジ558を作成し、エッジ558をソーシャルグラフ情報として1つまたは複数のデータストアに記憶することができる。図5Cの例では、ソーシャルグラフ538は、ユーザ「アマンダ」およびユーザ「ドロシー」のユーザノード554間の友達関係を示すエッジ558を含む。本開示は、特定のユーザノード554を接続する特定の属性を有する特定のエッジ558を説明または例証するが、本開示は、ユーザノード554を接続する任意の好適な属性を有する任意の好適なエッジ558を企図する。限定ではないが、例として、エッジ558は、友人関係、家族関係、ビジネスまたは雇用関係、ファン関係、フォロワー関係、ビジタ関係、サブスクライバ関係、上司/部下の関係、互恵関係、非互恵関係、別の好適なタイプの関係、または2つ以上のそのような関係を表し得る。さらに、本開示は、全体として、ノードを接続されるものとして説明するが、本開示はまた、ユーザまたは概念を接続されるものとして説明する。本明細書において、ユーザまたは概念が接続されているという言及は、適切な場合、それらのユーザまたは概念に対応するノードが、ソーシャルグラフ538内で1つまたは複数のエッジ558によって接続されることを指し得る。
特定の実施形態において、ユーザノード554と概念ノード556との間のエッジ558は、概念ノード556と関連付けられた概念に対して、ユーザノード554と関連付けられたユーザによって実施される特定のアクションまたはアクティビティを表し得る。限定ではないが、例として、図5Cに例証されるように、ユーザは、ある概念について、「いいね」、「出席した」、「再生した」、「聴いた」、「料理した」、「勤務した」、または「見た」とすることができ、それらの各々が、エッジタイプまたはサブタイプに対応し得る。概念ノード556に対応する概念プロフィールページは、例えば、選択可能な「チェックイン」アイコン(例えば、クリック可能な「チェックイン」アイコンなど)または選択可能な「お気に入りに追加」アイコンを含み得る。同様に、ユーザがこれらのアイコンをクリックした後、ソーシャルネットワーキングシステムは、それぞれのアクションに対応するユーザのアクションに応答して、「お気に入り」エッジまたは「チェックイン」エッジを作成することができる。限定ではないが、別の例として、ユーザ(ユーザ「カーラ」)は、特定のアプリケーション(オンラインミュージックアプリケーションであるSPOTIFY)を使用して特定の楽曲(「Across the Sea」)を聴き得る。この場合、ソーシャルネットワーキングシステムは、ユーザがその曲を聴いたこと、およびそのアプリケーションを使用したことを示すために、ユーザに対応するユーザノード554と楽曲およびアプリケーションに対応する概念ノード556との間に「聴いた」エッジ558および「使用した」エッジを作成することができる(図5Cに例証されるように)。さらに、ソーシャルネットワーキングシステムは、その特定の楽曲がその特定のアプリケーションによって再生されたことを示すために、楽曲およびアプリケーションに対応する概念ノード556間に「再生した」エッジ558を作成することができる(図5Cに例証されるように)。この場合、「再生した」エッジ558は、外部アプリケーション(SPOTIFY)によって外部オーディオファイル(楽曲「Across the Sea」)に対して実施されたアクションに対応する。本開示は、ユーザノード854および概念ノード556を接続する特定の属性を有する特定のエッジ858を説明するが、本開示は、ユーザノード554および概念ノード556を接続する任意の好適な属性を有する任意の好適なエッジ、558を企図する。さらに、本開示は、単一の関係を表す、ユーザノード554と概念ノード556との間のエッジを説明するが、本開示は、1つまたは複数の関係を表す、ユーザノード554と概念ノード556との間のエッジを企図する。限定ではないが、例として、エッジ558は、ユーザが、特定の概念において、いいねをすることおよび使用したことがあることの両方を表してもよい。代替的に、別のエッジ558は、ユーザノード554と概念ノード556との間(図5Cに例証されるように、ユーザ「エドウィン」のユーザノード554と「SPOTIFY」の概念ノード556との間)の関係の各タイプ(または多数の単一の関係)を表し得る。
特定の実施形態において、ソーシャルネットワーキングシステムは、ソーシャルグラフ538内にユーザノード554と概念ノード556との間にエッジ558を作成することができる。限定ではないが、例として、概念プロフィールページを閲覧する(例えば、ウェブブラウザ、またはユーザのクライアントシステムによってホストされる特定用途向けアプリケーションを使用することによってなど)ユーザは、「いいね」アイコンをクリックまたは選択することによって、自分が概念ノード556によって表される概念を好むことを示すことができ、「いいね」アイコンは、ユーザのクライアントシステムに、概念プロフィールページと関連付けられた概念のユーザによるいいねを示すメッセージをソーシャルネットワーキングシステムへ送信させることができる。このメッセージに応答して、ソーシャルネットワーキングシステムは、ユーザと概念ノード556との間の「いいね」エッジ558によって例証されるように、ユーザと関連付けられたユーザノード554と概念ノード556との間にエッジ558を作成することができる。特定の実施形態において、ソーシャルネットワーキングシステムは、エッジ558を1つまたは複数のデータストアに記憶することができる。特定の実施形態において、エッジ558は、特定のユーザアクションに応答して、ソーシャルネットワーキングシステムによって自動的に形成され得る。限定ではないが、例として、第1のユーザが、写真をアップロードする、映画を見る、または楽曲を聴くと、エッジ558が、第1のユーザに対応するユーザノード554とそれらの概念に対応する概念ノード556との間に形成され得る。本開示は、特定のエッジ558を特定の様式で形成することについて説明するが、本開示は、任意の好適なエッジ558を任意の好適な様式で形成することを企図する。
ソーシャルグラフ538は、複数の製品ノードをさらに含み得る。製品ノードは、特定の企業と関連付けられ得る特定の製品を表し得る。企業は、CtoB(Consumer to Business)サービスに製品カタログを提供し得、したがってCtoBサービスは、ソーシャルグラフ538内の製品内の製品の各々を表し得、各製品が異なる製品ノード内にある。製品ノードは、価格情報、説明的情報、製造者情報、在庫情報、および他の関連情報などの製品に関する情報を含み得る。例えば、レストランのメニュー上の品目の各々は、ソーシャルグラフ538内に品目の各々を説明する製品ノードにより表され得る。製品ノードは、エッジによって、製品を提供する企業にリンクされ得る。複数の企業が製品を提供する場合、各企業は、自らの製品提供と関連付けられた異なる製品ノードを有し得るか、または同じ製品ノードに各々リンクし得る。製品ノードは、エッジによって、製品を購入した、評価した、所有する、お薦めした、または閲覧した各ユーザにリンクされ得、このエッジは、関係の性質を説明している(例えば、購入した、評価した、所有する、お薦めした、閲覧した、または他の関係)。製品ノードの各々は、リンクされた小売企業に依って、グラフIDおよび関連小売IDと関連付けられてもよい。したがって、企業から入手可能な製品は、ソーシャルグラフ538内の企業のユーザノードにリンクされた入手可能な製品ノードを取得することによって、ユーザに通信され得る。製品ノードについての情報は、参照された製品に関する情報をカプセル化する製品オブジェクトとして、ソーシャルネットワーキングシステムによって操作され得る。
そのようなものとして、ソーシャルグラフ538は、ソーシャルネットワーキングシステムの2人以上のユーザの、共有される興味、共有される体験、または他の共有されるもしくは共通の属性を推測するために使用され得る。例えば、ソーシャルグラフ538内に表される共通の企業、製品、メディアアイテム、施設、または他のエンティティへのエッジを各々が有する2人以上のユーザは、そのエンティティとの共有される関係を示し得、これは、1人または複数のユーザに対して、メッセージングシステムを含むソーシャルネットワーキングシステムの使用のカスタマイズを提案するために使用され得る。
上に説明される実施形態は、メッセージングアーキテクチャによって実施され得、次に、その例が、図6を参照して説明される。
メッセージングアーキテクチャ
図6は、例示的な実施形態との使用に好適なメッセージングサービス600の様々な機能を実装する複数のサーバの実施形態を例証する。作用および機能の異なる分散が、メッセージングサービス600の様々な実施形態において使用され得ることを理解されたい。
メッセージングサービス600は、ドメイン名フロントエンド602を含み得る。ドメイン名フロントエンド602は、ドメイン名システム(DNS)内のメッセージングサービス600と関連付けられた1つまたは複数のドメイン名に割り当てられ得る。ドメイン名フロントエンド602は、入接続を受信し、様々なメッセージングサービスを提供するサーバへの接続を分散することができる。
メッセージングサービス602は、1つまたは複数のチャットサーバ604を含み得る。チャットサーバ604は、チャットメッセージなどのユーザツーユーザメッセージング更新を受信および伝送するためのフロントエンドサーバを含み得る。入接続は、作業負荷均衡化に基づいてドメイン名フロントエンド602によってチャットサーバ604に割り当てられ得る。
メッセージングサービス600は、バックエンドサーバ608を含み得る。バックエンドサーバ608は、フロントエンドチャットサーバ604のチャット動作の支援において専門タスクを実施することができる。複数の異なるタイプのバックエンドサーバ608が使用されてもよい。異なるバックエンドサーバ608に対するタスクのタイプの割り当ては、異なる実施形態においては異なり得ることを理解されたい。いくつかの実施形態において、専用サーバによって提供されるバックエンドサービスのうちのいくつかは、単一のサーバ、または、本明細書に説明される実施形態においては異なるサーバ間で分割される複数のタスクを各々が実施するサーバのセットにおいて組み合わされ得る。同様に、いくつかの実施形態において、本明細書に説明される専用バックエンドサーバのうちのいくつかのタスクは、異なるサーバグループの異なるサーバ間で分割され得る。
メッセージングサービス600は、1つまたは複数のオフラインストレージサーバ610を備え得る。1つまたは複数のオフラインストレージサーバ610は、保留中の現在オフラインのメッセージングクライアントのメッセージングコンテンツを、そのメッセージングクライアントが再接続するときのために、記憶することができる。
メッセージングサービス600は、1つまたは複数のセッションサーバ612を備え得る。1つまたは複数のセッションサーバ612は、接続されたメッセージングクライアントのセッション状態を維持することができる。
メッセージングサービス600は、1つまたは複数のプレゼンスサーバ614を備え得る。1つまたは複数のプレゼンスサーバ614は、メッセージングサービス600のためのプレゼンス情報を維持することができる。プレゼンス情報は、所与のユーザが、オンラインメッセージングクライアントを有し、チャットのために利用可能であるか否かを、オンラインメッセージングクライアントを有するが、現在そこから離れているか否かを、オンラインメッセージングクライアントを有さないのか否かを、および、任意の他のプレゼンス状態を示す、ユーザ特有の情報に対応してもよい。
メッセージングサービス600は、1つまたは複数のプッシュストレージサーバ616を備え得る。1つまたは複数のプッシュストレージサーバ616は、プッシュ要求をキャッシュに格納し、プッシュ要求をメッセージングクライアントに伝送することができる。プッシュ要求は、メッセージングクライアントをウェイクアップするため、メッセージング更新が利用可能であることをメッセージングクライアントに通知するため、およびメッセージングクライアントとのサーバ側主導の対話を別途実施するために使用され得る。
メッセージングサービス600は、1つまたは複数のグループサーバ618を備え得る。1つまたは複数のグループサーバ618は、グループのリストを維持すること、グループにユーザを追加すること、グループからユーザを除去すること、ならびにグループチャットメッセージの受信、キャッシュ、および転送を実施することができる。
メッセージングサービス600は、1つまたは複数のブロックリストサーバ620を備え得る。1つまたは複数のブロックリストサーバ620は、ユーザ特有のブロックリストを維持することができ、このユーザ特有の受信ブロックリストは、各ユーザに対してそのユーザにメッセージを送信することが禁じられている1つまたは複数の他のユーザを示す。代替的または追加的に、1つまたは複数のブロックリストサーバ620は、各ユーザに対してそのユーザがメッセージを伝送することを禁じられている1つまたは複数の他のユーザを示すユーザ特有の送信ブロックリストを維持することができる。受信ブロックリストおよび送信ブロックリストは、例えば、データベース内に、組み合わせて記憶されてもよく、受信ブロックリストおよび送信ブロックリストがブロック情報の同じレポジトリの異なる視点を表していることを理解されたい。
メッセージングサービス600は、1つまたは複数の最終視聴情報サーバ622を備え得る。1つまたは複数の最終視聴情報サーバ622は、最終視聴ロケーション、ステータス、メッセージングクライアント、およびメッセージングサービス600へのユーザの最終視聴接続の他の要素を示す情報を受信、記憶、および維持することができる。
メッセージングサービス600は、1つまたは複数のキーサーバ624を備え得る。1つまたは複数のキーサーバは、公開/秘密キー暗号化通信のための公開キーをホストすることができる。
メッセージングサービス600は、1つまたは複数のプロフィール写真サーバ626を備え得る。1つまたは複数のプロフィール写真サーバ626は、メッセージングサービス600の複数のユーザの取得可能プロフィール写真を記憶し、利用可能にすることができる。
メッセージングサービス600は、1つまたは複数のスパムログサーバ628を備え得る。1つまたは複数のスパムログサーバ628は、既知のスパムおよび疑わしいスパム(例えば、望まないメッセージ、特に宣伝性質のもの)をログすることができる。1つまたは複数のスパムログサーバ628は、メッセージがスパムであるかどうかを決定するため、および、いくつかの実施形態において、疑わしいスパマー(スパムメッセージを送信するユーザ)に対する処罰的処置を実施するために、メッセージを分析するように動作可能であり得る。
メッセージングサービス600は、1つまたは複数の統計サーバ630を備え得る。1つまたは複数の統計サーバは、メッセージングサービス600の動作およびメッセージングサービス600のユーザの挙動に関連する統計情報をコンパイルし、記憶することができる。
メッセージングサービス600は、1つまたは複数のウェブサーバ632を備え得る。1つまたは複数のウェブサーバ632は、ウェブブラウザとのハイパーテキスト転送プロトコル(HTTP)およびハイパーテキスト転送プロトコルセキュア(HTTPS)接続に携わり得る。
メッセージングサービス600は、1つまたは複数のチャットアクティビティ監視サーバ634を備え得る。1つまたは複数のチャットアクティビティ監視サーバ634は、メッセージングサービス600のユーザによる不正挙動または妨害挙動を決定するためにユーザのチャットを監視することができる。1つまたは複数のチャットアクティビティ監視サーバ634は、スパムログサーバ628およびブロックリストサーバ620と協働して作用することができ、1つまたは複数のチャットアクティビティ監視サーバ634が、スパムおよび他の妨害挙動を識別し、スパム情報をスパムログサーバ628に、および適切な場合には、ブロッキング情報をブロックリストサーバ620に提供する。
メッセージングサービス600は、1つまたは複数の同期サーバ636を備え得る。1つまたは複数の同期サーバ636は、メッセージングサービス600内のユーザの連絡先を決定するために、メッセージングシステム500を、携帯電話上のアドレス帳などのメッセージングクライアントからの連絡先情報と同期することができる。
メッセージングサービス600は、1つまたは複数のマルチメディアサーバ638を備え得る。1つまたは複数のマルチメディアサーバは、メッセージングクライアント間で転送中のマルチメディア(例えば、画像、ビデオ、オーディオ)、オフラインエンドポイントのためにキャッシュ格納されたマルチメディアを記憶することができ、マルチメディアのトランスコーディングを実施することができる。
メッセージングサービス600は、1つまたは複数の支払いサーバ640を備え得る。1つまたは複数の支払いサーバ640は、ユーザからの支払いを処理することができる。1つまたは複数の支払いサーバ640は、支払いの実施のために外部サードパーティサーバに接続することができる。
メッセージングサービス600は、1つまたは複数の登録サーバ642を備え得る。1つまたは複数の登録サーバ642は、メッセージングサービス600の新規ユーザを登録することができる。
メッセージングサービス600は、1つまたは複数の音声中継サーバ644を備え得る。1つまたは複数の音声中継サーバ644は、ボイスオーバインターネットプロトコル(VoIP)コールの実施のために、メッセージングクライアント間のVoIP音声通信を中継することができる。
上記の方法は、コンピュータ可読媒体上の命令として、またはコンピューティングアーキテクチャの一部として具現化され得る。図7は、先に説明されるような様々な実施形態を実装するのに好適である例示的なコンピューティングアーキテクチャ700の実施形態を例証する。1つの実施形態において、コンピューティングアーキテクチャ700は、コンピュータ701などの電子デバイスの一部を含み得るか、電子デバイスの一部として実装され得る。実施形態は、この文脈に限定されない。
本出願において使用される場合、用語「システム」および「コンポーネント」は、コンピュータ関連エンティティ、ハードウェア、ハードウェアおよびソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアのいずれかを指すことが意図され、その例は、例示的なコンピューティングアーキテクチャ700によって提供される。例えば、コンポーネントは、限定されるものではないが、プロセッサ上で実行するプロセス、プロセッサ、ハードディスクドライブ、複数のストレージデバイス(光学のものおよび/または磁気ストレージ媒体)、オブジェクト、実行可能ファイル、実行のスレッド、プログラム、および/またはコンピュータであってもよい。例証として、サーバ上で実行するアプリケーションおよびサーバの両方がコンポーネントであってもよい。1つまたは複数のコンポーネントは、実行のプロセスおよび/またはスレッド内に存在してもよく、コンポーネントは、1つのコンピュータ上に局在し得、および/または2つ以上のコンピュータに分散され得る。さらに、コンポーネントは、動作を協調させるために、様々なタイプの通信メディアによって互いに通信可能に結合されてもよい。この協調は、情報の一方向または双方向交換に関与し得る。例えば、コンポーネントは、通信メディアを介して通信される信号の形態で情報を通信することができる。情報は、様々な信号線に割り振られた信号として実装されてもよい。そのような割り振りにおいては、各メッセージは信号である。しかしながら、さらなる実施形態は、データメッセージを採用し得る。そのようなデータメッセージは、様々な接続にわたって送信され得る。例示的な接続としては、パラレルインターフェース、シリアルインターフェース、およびバスインターフェースが挙げられる。
コンピューティングアーキテクチャ700は、1つまたは複数のプロセッサ、マルチコアプロセッサ、コプロセッサ、メモリユニット、チップセット、コントローラ、周辺機器、インターフェース、発振器、タイミングデバイス、ビデオカード、オーディオカード、マルチメディア入力/出力(I/O)コンポーネント、電源などの様々な共通コンピューティング要素を含む。しかしながら、実施形態は、コンピューティングアーキテクチャ700による実装に限定されない。
図7に示されるように、コンピューティングアーキテクチャ700は、処理ユニット702、システムメモリ704、およびシステムバス706を備える。処理ユニット702は、限定しないが、AMD(登録商標)、Athlon(登録商標)、Duron(登録商標)、およびOpteron(登録商標)プロセッサ;ARM(登録商標)アプリケーション、埋め込み型かつ安全なプロセッサ;IBM(登録商標)およびMotorola(登録商標)DragonBall(登録商標)およびPowerPC(登録商標)プロセッサ;IBMおよびSony(登録商標)セルプロセッサ;Intel(登録商標)Celeron(登録商標)、Core(2)Duo(登録商標)、Itanium(登録商標)、Pentium(登録商標)、Xeon(登録商標)、およびXScale(登録商標)プロセッサ;ならびに同様のプロセッサを含む、様々な市販のプロセッサのいずれかであってもよい。デュアルマイクロプロセッサ、マルチコアプロセッサ、および他のマルチプロセッサアーキテクチャもまた、処理ユニット702として採用されてもよい。
システムバス706は、限定されるものではないが、システムメモリ704を含む、システムコンポーネントのための、処理ユニット702へのインターフェースを提供する。システムバス706は、様々な市販のバスアーキテクチャのいずれかを使用して、メモリバス(メモリコントローラありまたはなしの)、周辺機器用バス、およびローカルバスへさらに相互接続することができる、いくつかのタイプのバス構造のうちのいずれかであってもよい。インターフェースアダプタは、スロットアーキテクチャを介してシステムバス706に接続することができる。スロットアーキテクチャ例は、限定しないが、アクセラレイティッドグラフィックスポート(AGP:Accelerated Graphics Port)、カードバス、(拡張)業界標準アーキテクチャ((E)ISA:(Extended)Industry Standard Architecture)、マイクロチャネルアーキテクチャ(MCA:Micro Channel Architecture)、NuBus、周辺コンポーネント相互接続(拡張)(PCI(X):Peripheral Component Interconnect (Extended))、PCIエクスプレス、パーソナルコンピュータメモリカード国際協会(PCMCIA:Personal Computer Memory Card International Association)、および同様のものを含み得る。
コンピューティングアーキテクチャ700は、様々な製造品を備え得るか、または実装し得る。製造品は、ロジックを記憶するためのコンピュータ可読記憶媒体を備え得る。コンピュータ可読記憶媒体の例は、揮発性メモリまたは不揮発性メモリ、取り外し可能または取り外し不可能メモリ、消去可能または消去不可能メモリ、書き込み可能または書き換え可能メモリなどを含む、電子データを記憶することが可能な任意の有形媒体を含み得る。ロジックの例は、ソースコード、コンパイル済みコード、解釈されたコード、実行可能コード、静的コード、動的コード、オブジェクト指向コード、視覚的コード、および同様のものなどの、任意の好適なタイプのコードを使用して実施される実行可能なコンピュータプログラム命令を含み得る。実施形態はまた、本明細書に説明される動作の実施を可能にするために1つまたは複数のプロセッサによって読み出され、実行され得る、非一時的コンピュータ可読媒体内に含まれるか、または非一時的コンピュータ可読媒体上にある命令として少なくとも部分的に実施され得る。
システムメモリ704は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、ダブルデータレートDRAM(DDRAM)、同期DRAM(SDRAM)、スタティックRAM(SRAM)、プログラマブルROM(PROM)、消去可能なプログラマブルROM(EPROM)、電気的に消去可能なプログラマブルROM(EEPROM)、フラッシュメモリ、強誘電性ポリマーメモリなどのポリマーメモリ、オボニックメモリ、相変化または強誘電性メモリ、シリコン-酸化物-窒化物-酸化物-シリコン(SONOS)メモリ、磁気または光学カード、独立ディスクの冗長アレイ(RAID:Redundant Array of Independent Disk)ドライブなどのデバイスのアレイ、ソリッドステートメモリデバイス(例えば、USBメモリ、ソリッドステートドライブ(SSD))、および情報を記憶するのに好適な任意の他のタイプの記憶媒体などの、1つまたは複数の高速メモリユニットの形態にある様々なタイプのコンピュータ可読記憶媒体を含み得る。図7に示される例証された実施形態において、システムメモリ704は、不揮発性メモリ708および/または揮発性メモリ710を含み得る。基本入力/出力システム(BIOS)は、不揮発性メモリ708に記憶され得る。
コンピューティングアーキテクチャ700は、内部(または外部)ハードディスクドライブ(HDD)712、取り外し可能な磁気ディスク716から読み出すため、またはそれに書き込むための磁気フロッピディスクドライブ(FDD)714、および取り外し可能な光学ディスク720(例えば、CD-ROMまたはDVD)から読み出すため、またはそれに書き込むための光学ディスクドライブ718を含む、1つまたは複数の低速メモリユニットの形態にある様々なタイプのコンピュータ可読記憶媒体を含み得る。HDD712、FDD714、および光学ディスクドライブ720は、それぞれHDDインターフェース722、FDDインターフェース724、および光学ドライブインターフェース726によってシステムバス706に接続され得る。外部ドライブ実装のためのHDDインターフェース722は、ユニバーサルシリアルバス(USB)およびIEEE694インターフェース技術のうちの少なくとも一方または両方を含み得る。
ドライブおよび関連コンピュータ可読媒体は、データ、データ構造、コンピュータ実行可能命令などの揮発性および/または不揮発性ストレージを提供する。例えば、オペレーティングシステム728、1つまたは複数のアプリケーションプログラム730、他のプログラムモジュール732、およびプログラムデータ734を含む、いくつかのプログラムモジュールが、ドライブおよびメモリユニット708、712に記憶されてもよい。1つの実施形態において、1つまたは複数のアプリケーションプログラム730、他のプログラムモジュール732、およびプログラムデータ734は、例えば、メッセージングシステム500の様々なアプリケーションおよび/またはコンポーネントを含み得る。
ユーザは、コマンドおよび情報を、1つまたは複数の有線/ワイヤレス入力デバイス、例えば、キーボード736およびマウス738などのポインティングデバイスを通じてコンピュータ701に入力することができる。他の入力デバイスは、マイクロフォン、赤外線(IR)リモートコントロール、無線周波数(RF)リモートコントロール、ゲームパッド、スタイラスペン、カードリーダ、ドングル、指紋リーダ、グローブ、グラフィックスタブレット、ジョイスティック、キーボード、網膜リーダ、タッチスクリーン(例えば、容量性、抵抗性など)、トラックボール、トラックパッド、センサ、スタイラス、および同様のものを含み得る。これらの入力デバイスおよび他の入力デバイスは、多くの場合、システムバス706に結合される入力デバイスインターフェース740を通じて処理ユニット702に接続されるが、パラレルポート、IEEE694シリアルポート、ゲームポート、USBポート、IRインターフェースなどの他のインターフェースによって接続されてもよい。
モニタ742または他のタイプのディスプレイデバイスもまた、ビデオアダプタ744などのインターフェースを介してシステムバス706に接続される。モニタ742は、コンピュータ701の内部または外部にあってもよい。モニタ742に加えて、コンピュータは、典型的には、スピーカ、プリンタなどの他の周辺出力デバイスを含む。
コンピュータ701は、リモートコンピュータ744などの1つまたは複数のリモートコンピュータへの有線および/またはワイヤレス通信を介した論理接続を使用してネットワーク環境内で動作することができる。リモートコンピュータ744は、ワークステーション、サーバコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサベースのエンターテイメント機器、ピアデバイス、または他の共通ネットワークノードであってもよく、また典型的には、コンピュータ701に関連して説明される要素の多くまたは全てを含むが、簡潔性のために、メモリ/ストレージデバイス746のみが例証される。描写される論理接続は、ローカルエリアネットワーク(LAN)748、および/またはより大きいネットワーク、例えば、広域ネットワーク(WAN)750への有線/ワイヤレス接続を含む。そのようなLANおよびWANネットワーキング環境は、オフィスや会社内では通常のことであり、イントラネットなどの企業全体のコンピュータネットワークを促進し、このコンピュータネットワークの全てが、世界通信ネットワーク、例えば、インターネットに接続することができる。
LANネットワーキング環境で使用される場合、コンピュータ701は、有線および/またはワイヤレス通信ネットワークインターフェースまたはアダプタ752を通じてLAN748に接続される。アダプタ752は、LAN748への有線および/またはワイヤレス通信を促進することができ、LAN748もまた、アダプタ752のワイヤレス機能と通信するために配設されるワイヤレスアクセスポイントを含み得る。
WANネットワーキング環境で使用される場合、コンピュータ701は、モデム754を含み得るか、またはWAN750上の通信サーバに接続されるか、またはインターネットを用いるなど、WAN750を介した通信を確立するための他の手段を有する。内部または外部の、有線および/またはワイヤレスデバイスであり得るモデム754は、入力デバイスインターフェース740を介してシステムバス706に接続する。ネットワーク環境において、コンピュータ701に関して描写されるプログラムモジュール、またはその部分は、リモートメモリ/ストレージデバイス746に記憶されてもよい。示されるネットワーク接続は、例示的であり、コンピュータ間の通信リンクを確立するための他の手段が使用されてもよいことを理解されたい。
コンピュータ701は、ワイヤレス通信(例えば、IEEE802.13 OTA(Over The Air)変調技術)内に動作可能に配設されるワイヤレスデバイスなど、IEEE802規格ファミリを使用する有線およびワイヤレスデバイスまたはエンティティと通信するように動作可能である。これは、中でも特に、少なくともWi-Fi(またはワイヤレスフィディリティ)、WiMax、およびBluetooth(商標)ワイヤレス技術を含む。したがって、通信は、従来のネットワークのようにあらかじめ定められた構造であり得るか、または単に、少なくとも2つのデバイス間のアドホック通信であり得る。Wi-Fiネットワークは、安全で信頼性の高い高速ワイヤレス接続を提供するためにIEEE802.13x(a、b、g、nなど)と呼ばれる無線技術を使用する。Wi-Fiネットワークは、コンピュータを、互いに、インターネットに、および有線ネットワーク(IEEE802.3関連の媒体および機能を使用する)に接続するために使用されてもよい。
図8は、先に説明されるような様々な実施形態を実装するのに好適である例示的な通信アーキテクチャ800を描写するブロック図である。通信アーキテクチャ800は、送信器、受信器、トランシーバ、無線、ネットワークインターフェース、ベースバンドプロセッサ、アンテナ、増幅器、フィルタ、電源などの様々な一般的な通信要素を含む。しかしながら、実施形態は、通信アーキテクチャ800による実装に限定されない。
図8に示されるように、通信アーキテクチャ800は、1つまたは複数のクライアント802およびサーバ804を含む。クライアント802は、クライアントデバイス510を実装し得る。サーバ804は、サーバデバイス526を実装し得る。クライアント802およびサーバ804は、クッキーおよび/または関連文脈情報など、それぞれのクライアント802およびサーバ804にローカルな情報を記憶するために採用され得る1つまたは複数のそれぞれのクライアントデータストア806およびサーバデータストア808に動作可能に接続される。
クライアント802およびサーバ804は、通信フレームワーク810を使用して互いに情報を通信することができる。通信フレームワーク810は、任意の周知の通信技術およびプロトコルを実装し得る。通信フレームワーク810は、パケット交換ネットワーク(例えば、インターネットなどの公衆ネットワーク、企業イントラネットなどのプライベートネットワークなど)、回路交換ネットワーク(例えば、公衆電話交換ネットワーク)、またはパケット交換ネットワークおよび回路交換ネットワークの組み合わせ(好適なゲートウェイおよびトランスレータを用いて)として実装され得る。
通信フレームワーク810は、通信ネットワークを受容する、通信ネットワークと通信する、および通信ネットワークに接続するように構成される様々なネットワークインターフェースを実装し得る。ネットワークインターフェースは、入力出力インターフェースの特殊な形態とみなされ得る。ネットワークインターフェースは、限定することなく、直接接続、イーサネット(例えば、シック(Thick)、シン(Thin)、ツイストペア10/100/1000BASE T、および同様のもの)、トークンリング、ワイヤレスネットワークインターフェース、セルラネットワークインターフェース、IEEE802.8a-xネットワークインターフェース、IEEE802.16ネットワークインターフェース、IEEE802.20ネットワークインターフェース、および同様のものを含む接続プロトコルを採用し得る。さらに、複数のネットワークインターフェースが、様々な通信ネットワークタイプに関与するために使用されてもよい。例えば、複数のネットワークインターフェースが、ブロードキャスト、マルチキャスト、およびユニキャストネットワークを介した通信を可能にするために採用されてもよい。もし処理要件がより大きい速度および容量を指示する場合、同様に、分散ネットワークコントローラアーキテクチャが、クライアント802およびサーバ804によって必要とされる通信可能な帯域幅を、プールするため、負荷平衡するため、および他のやり方で増大するために採用されてもよい。通信ネットワークは、限定することなく、直接相互接続、安全なカスタム接続、プライベートネットワーク(例えば、企業イントラネット)、公衆ネットワーク(例えば、インターネット)、パーソナルエリアネットワーク(PAN:Personal Area Network)、ローカルエリアネットワーク(LAN:Local Area Network)、メトロポリタンエリアネットワーク(MAN:Metropolitan Area Network)、インターネット上のノードとしてのオペレーティングミッション(OMNI:Operating Missions as Nodes on the Internet)、広域ネットワーク(WAN:Wide Area Network)、ワイヤレスネットワーク、セルラネットワーク、および他の通信ネットワークを含む、有線および/またはワイヤレスネットワークのうちの任意の1つまたは組み合わせであってもよい。
図9は、メッセージングシステム500などのマルチキャリアOFDMシステムにおいて使用するためのデバイス900の実施形態を例証する。デバイス900は、例えば、メッセージングコンポーネントロジック600、意思決定ロジック700、およびグループ選択ロジック800を参照して説明されるようなソフトウェアコンポーネント902を実装し得る。デバイス900はまた、論理回路904を実装し得る。論理回路904は、メッセージングシステム600について説明される動作を実施するために物理回路を含み得る。図9に示されるように、デバイス900は、無線インターフェース906、ベースバンド回路908、およびコンピューティングプラットフォーム910を含み得るが、実施形態はこの設定に限定されない。
デバイス900は、全体が単一のデバイス内にあるなど、単一のコンピューティングエンティティ内のメッセージングシステム500および/または論理回路904の構造および/または動作の一部または全てを実施することができる。代替的に、デバイス900は、クライアント-サーバアーキテクチャ、3層アーキテクチャ、N層アーキテクチャ、密結合またはクラスタアーキテクチャ、ピアツーピアアーキテクチャ、マスター-スレーブアーキテクチャ、共有データベースアーキテクチャ、および他のタイプの分散システムなどの分散システムアーキテクチャを使用して、複数のコンピューティングエンティティにわたってメッセージングシステム500および/または論理回路904の構造および/または動作の部分を分散することができる。実施形態は、この文脈に限定されない。
1つの実施形態において、無線インターフェース906は、シングルキャリアまたはマルチキャリア変調信号(例えば、相補型符号変調(CCK)および/または直交周波数分割多重(OFDM)シンボルを含む)を伝送および/または受信するために適合されるコンポーネントまたはコンポーネントの組み合わせを含み得るが、実施形態は、任意の特定のOTA(Over The Air)インターフェースまたは変調スキームに限定されない。無線インターフェース906は、例えば、受信器912、送信器914、および/または周波数シンセサイザ916を含み得る。無線インターフェース906は、バイアス制御、水晶発振器、および/または1つまたは複数のアンテナ918を含み得る。別の実施形態において、無線インターフェース906は、要求に応じて、外部電圧制御発振器(VCO)、表面音響波フィルタ、中間周波数(IF)フィルタ、および/またはRFフィルタを使用してもよい。予想されるRFインターフェース設計の多様性に起因して、その広範な説明は省略される。
ベースバンド回路908は、受信および/または伝送信号を処理するために無線インターフェース906と通信することができ、また、例えば、受信信号をダウンコンバートするためのアナログ-デジタル変換器920、および伝送用に信号をアップコンバートするためのデジタル-アナログ変換器922を含み得る。さらに、ベースバンド回路908は、受信/伝送信号それぞれを処理するPHYリンク層のためのベースバンドまたは物理層(PHY)処理回路924を含み得る。ベースバンド回路908は、例えば、媒体アクセス制御(MAC)/データリンク層処理のための処理回路926を含み得る。ベースバンド回路908は、例えば1つまたは複数のインターフェース930を介して処理回路926および/またはコンピューティングプラットフォーム910と通信するためのメモリコントローラ928を含み得る。
いくつかの実施形態において、PHY処理回路924は、バッファメモリなどの追加の回路と併せて、無線フレームなどの通信フレームを構築および/または分解するために、フレーム構築および/または検出モジュールを含み得る。代替的に、または加えて、MAC処理回路926は、確実にこれらの機能の処理を共有するか、またはPHY処理回路924とは独立してこれらの処理を実施することができる。いくつかの実施形態において、MACおよびPHY処理は、単一の回路に統合されてもよい。
コンピューティングプラットフォーム910は、デバイス900にコンピューティング機能を提供することができる。示されるように、コンピューティングプラットフォーム910は、処理コンポーネント932を含み得る。ベースバンド回路908に加えて、またはベースバンド回路908の代わりに、デバイス900は、処理コンポーネント932を使用して、メッセージングシステム500および論理回路904の処理動作またはロジックを実行することができる。処理コンポーネント932(および/またはPHY924および/またはMAC926)は、様々なハードウェア要素、ソフトウェア要素、または両方の組み合わせを備え得る。ハードウェア要素の例は、デバイス、論理デバイス、コンポーネント、プロセッサ、マイクロプロセッサ、回路、プロセッサ回路、回路素子(例えば、トランジスタ、抵抗器、キャパシタ、インダクタなど)、集積回路、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、メモリユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセットなどを含み得る。ソフトウェア要素の例は、ソフトウェアコンポーネント、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、ソフトウェア開発プログラム、マシンプログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、関数、メソッド、プロシージャ、ソフトウェアインターフェース、アプリケーションプログラムインターフェース(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、またはそれらの任意の組み合わせを含み得る。実施形態がハードウェア要素および/またはソフトウェア要素を使用して実装されるかどうかを決定することは、所与の実装形態について所望されるような、所望の計算速度、電力レベル、熱耐性、処理サイクルバジェット、入力データレート、出力データレート、メモリリソース、データバス速度、および他の設計制約または性能制約などの任意の数の因子に応じて異なり得る。
コンピューティングプラットフォーム910は、他のプラットフォームコンポーネント934をさらに含み得る。他のプラットフォームコンポーネント934は、1つまたは複数のプロセッサ、マルチコアプロセッサ、コプロセッサ、メモリユニット、チップセット、コントローラ、周辺機器、インターフェース、発振器、タイミングデバイス、ビデオカード、オーディオカード、マルチメディア入力/出力(I/O)コンポーネント(例えば、デジタルディスプレイ)、電源などの一般的なコンピューティング要素を含む。メモリユニットの例は、限定することなく、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、ダブルデータレートDRAM(DDRAM)、同期DRAM(SDRAM)、スタティックRAM(SRAM)、プログラマブルROM(PROM)、消去可能なプログラマブルROM(EPROM)、電気的に消去可能なプログラマブルROM(EEPROM)、フラッシュメモリ、強誘電性ポリマーメモリなどのポリマーメモリ、オボニックメモリ、相変化または強誘電性メモリ、シリコン-酸化物-窒化物-酸化物-シリコン(SONOS)メモリ、磁気または光学カード、独立ディスクの冗長アレイ(RAID:Redundant Array of Independent Disk)ドライブなどのデバイスのアレイ、ソリッドステートメモリデバイス(例えば、USBメモリ、ソリッドステートドライブ(SSD))、および情報を記憶するのに好適な任意の他のタイプの記憶媒体などの、1つまたは複数の高速メモリユニットの形態にある様々なタイプのコンピュータ可読およびマシン可読記憶媒体を含み得る。
デバイス900は、例えば、ウルトラモバイルデバイス、モバイルデバイス、固定デバイス、マシンツーマシン(M2M)デバイス、パーソナルデジタルアシスタント(PDA)、モバイルコンピューティングデバイス、スマートフォン、電話機、デジタル電話機、携帯電話、ユーザ機器、電子書籍リーダ、ハンドセット、一方向ページャ、双方向ページャ、メッセージングデバイス、コンピュータ、パーソナルコンピュータ(PC)、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータ、サーバ、サーバアレイまたはサーバファーム、ウェブサーバ、ネットワークサーバ、インターネットサーバ、ワークステーション、ミニコンピュータ、メインフレームコンピュータ、スーパーコンピュータ、ネットワークアプライアンス、ウェブアプライアンス、分散コンピューティングシステム、マルチプロセッサシステム、プロセッサベースのシステム、家電製品、プログラマブル家電製品、ゲーム機、テレビ、デジタルテレビ、セットトップボックス、ワイヤレスアクセスポイント、基地局、ノードB、発展型ノードB(eNB)、加入者ステーション、モバイル加入者センター、無線ネットワークコントローラ、ルータ、ハブ、ゲートウェイ、ブリッジ、スイッチ、マシン、またはそれらの組み合わせであってもよい。したがって、本明細書に説明されるデバイス900の機能および/または特定の設定は、要求に応じて適宜、デバイス900の様々な実施形態に含まれ得るか、または省略され得る。いくつかの実施形態において、デバイス900は、3GPP LTE仕様、および/またはWMANのためのIEEE1402.16規格、および/または本明細書で引用される他の広帯域ワイヤレスネットワークのうちの1つまたは複数に関連したプロトコルおよび周波数に準拠するように設定され得るが、実施形態は、この点に関して限定されない。
デバイス900の実施形態は、単入力単出力(SISO)アーキテクチャを使用して実装され得る。しかしながら、特定の実装形態は、ビーム形成または空間分割多重アクセス(SDMA)のための適応アンテナ技術を使用する、および/またはMIMO通信技術を使用する、伝送および/または受信のための複数のアンテナ(例えば、アンテナ918)を含み得る。
デバイス900のコンポーネントおよび特徴は、ディスクリート回路、特定用途向け集積回路(ASIC)、論理ゲート、および/またはシングルチップアーキテクチャの任意の組み合わせを使用して実装され得る。さらに、デバイス900の特徴は、マイクロコントローラ、プログラマブル論理アレイ、および/もしくはマイクロプロセッサ、または適切な場合には適宜、先述の任意の組み合わせを使用して実装され得る。本明細書では、ハードウェア、ファームウェア、および/またはソフトウェア要素は、まとめて、または個別に、「ロジック」または「回路」と称され得ることに留意されたい。
図9のブロック図に示される例示的なデバイス900は、多くの予想される実装形態の1つの機能的な説明例を表し得るということを理解されたい。したがって、添付の図面に描写されるブロック機能の分割、省略、または包含は、これらの機能を実装するためのハードウェアコンポーネント、回路、ソフトウェア、および/または要素が、必ず、実施形態において分割、省略、または包含されることを類推するわけではない。
少なくとも1つのコンピュータ可読記憶媒体936は、実行されるとき、本明細書に説明されるコンピュータ実装方法のいずれかをシステムに実行させる命令を含み得る。
用語に関する一般的な注釈
いくつかの実施形態は、「1つの実施形態」または「実施形態」という表現、ならびにそれらの派生形を使用して説明され得る。これらの用語は、実施形態に関連して説明される特定の特徴、構造、または特性が、少なくとも1つの実施形態に含まれることを意味する。本明細書内の様々な場所での「1つの実施形態では」という句の登場は、必ずしも全てが同じ実施形態を指しているわけではない。さらに、別途記載のない限り、上に説明される特徴は、任意の組み合わせで一緒に使用可能であることが理解される。したがって、別個に論じられる任意の特徴は、その特徴が互いに相いれないことが記載されていない限りは、互いに組み合わせて用いられてもよい。
本明細書で使用される表記および専門用語を全体的に参照すると、本明細書における詳細説明は、コンピュータまたはコンピュータのネットワーク上で実行されるプログラムプロシージャの観点で提示され得る。これらの手続き的説明および表現は、当業者によって、他の当業者に自身の研究の内容を最も効果的に伝えるために使用される。
プロシージャは、ここでは、および一般的には、所望の結果をもたらす動作の首尾一貫したシーケンスであると考えられる。これらの動作は、物理的量の物理的操作を必要とするものである。必須ではないが、通常、これらの量は、記憶、転送、結合、比較、および別途操作されることが可能である電気、磁気、または光信号の形態をとる。場合によっては、主に一般的用法の理由から、これらの信号を、ビット、値、要素、シンボル、文字、項、数字、または同様のものと呼ぶことが簡便であることが分かっている。しかしながら、これらの用語および同様の用語の全ては、適切な物理的量と関連付けられるものとし、それらの量に適用される簡便なラベルにすぎないことに留意されたい。
さらに、実施される操作は、多くの場合、追加する、または比較するなどの用語で言及され、人間のオペレータによって実施される知的動作と一般的に関連付けられる。1つまたは複数の実施形態の一部を形成する、本明細書に説明される動作のいずれにおいても、人間のオペレータのそのような能力は必要ではないか、大半の場合は望ましくない。むしろ、動作はマシン動作である。様々な実施形態の動作を実施するための有用なマシンは、汎用デジタルコンピュータまたは同様のデバイスを含む。
いくつかの実施形態は、「結合される」または「接続される」という表現、ならびにそれらの派生形を使用して説明され得る。これらの用語は、必ずしも互いの同義語として意図されない。例えば、いくつかの実施形態は、2つ以上の要素が互いと直接的な物理接触または電気接触状態にあることを示すために、「接続される」および/または「結合される」という用語を使用して説明され得る。しかしながら、「結合される」という用語はまた、2つ以上の要素が、互いと直接的な物理接触状態にないが、それでも依然として互いと協働するか、または対話することを意味し得る。
様々な実施形態はまた、これらの動作を実施するための装置またはシステムに関する。この装置は、必要とされる目的のために特別に構築され得るか、またはそれは、コンピュータに記憶されるコンピュータプログラムによって選択的に有効化または再設定されるような汎用コンピュータを備え得る。本明細書に提示されるプロシージャは、特定のコンピュータまたは他の装置に本質的に関連するものではない。様々な汎用マシンが、本明細書内の教示に従って書かれたプログラムと共に使用され得るか、または様々な汎用マシンは、必要とされる方法ステップを実施するために、より特殊な装置を構築するのに簡便であることを証明し得る。様々なこれらのマシンのための必要とされる構造は、与えられる説明から明らかであるものとする。
本開示の要約書は、読み手が本技術開示の本質を迅速に理解できるようにするために提供されるということが強調される。要約書は、特許請求の範囲または意味を解釈または制限するために用いられないという理解のもとに提出される。加えて、先述の「発明を実施するための形態」において、様々な特徴が、本開示を効率化するという目的のために単一の実施形態内にまとめられていることが分かる。このような開示方法は、特許請求される実施形態が各請求項に明示的に列挙されるものよりも多くの特徴を必要とするという意図を示すものとして解釈されるべきではない。むしろ、以下の請求項が示すように、発明の主題は、単一の開示された実施形態の全ての特徴よりも少ないことにある。したがって、以下の請求項は、各請求項が別個の実施形態として自立した状態で、以後、「発明を実施するための形態」に組み込まれる。添付の請求項において、「including」および「in which」という用語は、それぞれ「comprising」および「wherein」という用語の平易な英語の均等物として使用される。さらに、「第1の」、「第2の」、「第3の」などの用語は、単にラベルとして使用され、それらの対象物に対して数値的要件を課すことは意図されない。
上に説明されていることは、開示されるアーキテクチャの例を含む。当然ながら、コンポーネントおよび/または方法論の全ての考えられる組み合わせを説明することは不可能であるが、当業者は、多くのさらなる組み合わせおよび置き換えが可能であることを認識し得る。したがって、新規のアーキテクチャは、添付の特許請求の範囲の趣旨および範囲内に入る全てのそのような変更、修正、および変形を包含することが意図される。