IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ フェイスブック,インク.の特許一覧

特許7092878グループビデオ通話におけるサイマルキャストストリームを最適化するためのシステムおよび方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-20
(45)【発行日】2022-06-28
(54)【発明の名称】グループビデオ通話におけるサイマルキャストストリームを最適化するためのシステムおよび方法
(51)【国際特許分類】
   H04N 7/14 20060101AFI20220621BHJP
   H04M 3/56 20060101ALI20220621BHJP
【FI】
H04N7/14
H04M3/56 C
【請求項の数】 18
(21)【出願番号】P 2020531667
(86)(22)【出願日】2018-02-01
(65)【公表番号】
(43)【公表日】2021-05-13
(86)【国際出願番号】 US2018016511
(87)【国際公開番号】W WO2019152043
(87)【国際公開日】2019-08-08
【審査請求日】2020-11-05
(31)【優先権主張番号】15/885,696
(32)【優先日】2018-01-31
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】508178054
【氏名又は名称】メタ プラットフォームズ, インク.
(74)【代理人】
【識別番号】110002974
【氏名又は名称】特許業務法人World IP
(72)【発明者】
【氏名】カヴァルカンティ アレム, アーサー
(72)【発明者】
【氏名】ロリモア, ブレット
(72)【発明者】
【氏名】サドワニ, シャーム
(72)【発明者】
【氏名】ホー, チ ワン
【審査官】鈴木 隆夫
(56)【参考文献】
【文献】米国特許出願公開第2013/0208075(US,A1)
【文献】特開2010-141824(JP,A)
【文献】中国特許出願公開第108093197(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 7/14
H04M 3/56
(57)【特許請求の範囲】
【請求項1】
コンピューティングシステムによって、グループビデオ通話における参加者のセットを識別することであって、各参加者が、アップリンク容量とダウンリンク容量とに関連付けられ、参加者の前記セットが、送出側参加者のセットとサブスクライバ参加者のセットとを含む、前記識別することと、
前記コンピューティングシステムによって、送出側参加者の前記セットのうちの送出側参加者について、サブスクライバ参加者の前記セットのうちの1人または複数のサブスクライバ参加者のダウンリンク容量に基づいて、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を反復的に決定することであってランク付けに基づく順序で各送出側参加者を反復的に処理することを含む、前記反復的に決定することと、
前記1人または複数のサブスクライバ参加者の各サブスクライバ参加者について、前記コンピューティングシステムによって、送出側参加者の前記セットのうちの少なくとも1人の送出側参加者によってアップロードされるべき少なくとも1つのビデオストリーム層を受信するように、サブスクライバ参加者を割り当てることと
を含む、コンピュータ実装方法。
【請求項2】
送出側参加者の前記セットのうちの各送出側参加者によってアップロードされるべき前記1つまたは複数のビデオストリーム層が、送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量に基づいて決定される、請求項1に記載のコンピュータ実装方法。
【請求項3】
各サブスクライバ参加者が、少なくとも1人の送出側参加者にサブスクライブしている、請求項1または2に記載のコンピュータ実装方法。
【請求項4】
送出側参加者の前記セットのうちの1人の送出側参加者によってアップロードされるべき各ビデオストリーム層が、あるビットレートに関連付けられる、請求項1から3のいずれか一項に記載のコンピュータ実装方法。
【請求項5】
送出側参加者の前記セットのうちの各送出側参加者によってアップロードされるべき各ビデオストリーム層についてのビットレートを、該送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量と、該送出側参加者に関連付けられた前記アップリンク容量とに基づいて決定することをさらに含む、請求項4に記載のコンピュータ実装方法。
【請求項6】
送出側参加者の前記セットが、アップリンク容量に基づいてランク付けされる、請求項1から5のいずれか一項に記載のコンピュータ実装方法。
【請求項7】
各送出側参加者を前記反復的に処理することが、複数の反復を含み、各反復が、送出側参加者の前記セットのうちの特定の送出側参加者に関連付けられ、
各反復が、反復に関連付けられた前記特定の送出側参加者にサブスクライブしている各サブスクライバ参加者を反復的に処理することを含む、
請求項1から6のいずれか一項に記載のコンピュータ実装方法。
【請求項8】
前記特定の送出側参加者にサブスクライブしている各サブスクライバ参加者を前記反復的に処理することが、
各サブスクライバ参加者について、前記特定の送出側参加者によってアップロードされるべき新しい層を作成すべきかどうかを決定すること、または前記特定の送出側参加者に関連付けられた既に作成された層にサブスクライバ参加者を割り当てること
を含む、請求項に記載のコンピュータ実装方法。
【請求項9】
少なくとも1つのプロセッサと、
命令を記憶するメモリと
を備えるシステムであって、前記命令は、前記少なくとも1つのプロセッサによって実行されたとき、前記システムに、
グループビデオ通話における参加者のセットを識別することであって、各参加者が、アップリンク容量とダウンリンク容量とに関連付けられ、参加者の前記セットが、送出側参加者のセットとサブスクライバ参加者のセットとを含む、前記識別することと、
送出側参加者の前記セットのうちの送出側参加者について、サブスクライバ参加者の前記セットのうちの1人または複数のサブスクライバ参加者のダウンリンク容量に基づいて、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を反復的に決定することであってランク付けに基づく順序で各送出側参加者を反復的に処理することを含む、前記反復的に決定することと、
前記1人または複数のサブスクライバ参加者の各サブスクライバ参加者について、送出側参加者の前記セットのうちの少なくとも1人の送出側参加者によってアップロードされるべき少なくとも1つのビデオストリーム層を受信するように、サブスクライバ参加者を割り当てることと
を含む方法を実施させる、システム。
【請求項10】
送出側参加者の前記セットのうちの各送出側参加者によってアップロードされるべき前記1つまたは複数のビデオストリーム層が、送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量に基づいて決定される、請求項に記載のシステム。
【請求項11】
各サブスクライバ参加者が、少なくとも1人の送出側参加者にサブスクライブしている、請求項9または10に記載のシステム。
【請求項12】
送出側参加者の前記セットのうちの1人の送出側参加者によってアップロードされるべき各ビデオストリーム層が、あるビットレートに関連付けられる、請求項9から11のいずれか一項に記載のシステム。
【請求項13】
前記命令が、前記少なくとも1つのプロセッサによって実行されたとき、前記システムに、送出側参加者の前記セットのうちの各送出側参加者によってアップロードされるべき各ビデオストリーム層についてのビットレートを、該送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量と、該送出側参加者に関連付けられた前記アップリンク容量とに基づいて決定することをさらに実施させる、請求項12に記載のシステム。
【請求項14】
命令を含む非一時的コンピュータ可読記憶媒体であって、前記命令は、コンピューティングシステムの少なくとも1つのプロセッサによって実行されたとき、前記コンピューティングシステムに、
グループビデオ通話における参加者のセットを識別することであって、各参加者が、アップリンク容量とダウンリンク容量とに関連付けられ、参加者の前記セットが、送出側参加者のセットとサブスクライバ参加者のセットとを含む、前記識別することと、
送出側参加者の前記セットのうちの送出側参加者について、サブスクライバ参加者の前記セットのうちの1人または複数のサブスクライバ参加者のダウンリンク容量に基づいて、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を反復的に決定することであってランク付けに基づく順序で各送出側参加者を反復的に処理することを含む、前記反復的に決定することと、
前記1人または複数のサブスクライバ参加者の各サブスクライバ参加者について、送出側参加者の前記セットのうちの少なくとも1人の送出側参加者によってアップロードされるべき少なくとも1つのビデオストリーム層を受信するように、サブスクライバ参加者を割り当てることと
を含む方法を実施させる、非一時的コンピュータ可読記憶媒体。
【請求項15】
送出側参加者の前記セットの各送出側参加者によってアップロードされるべき前記1つまたは複数のビデオストリーム層が、送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量に基づいて決定される、請求項14に記載の非一時的コンピュータ可読記憶媒体。
【請求項16】
各サブスクライバ参加者が、少なくとも1人の送出側参加者にサブスクライブしている、請求項14または15に記載の非一時的コンピュータ可読記憶媒体。
【請求項17】
送出側参加者の前記セットのうちの1人の送出側参加者によってアップロードされるべき各ビデオストリーム層が、あるビットレートに関連付けられる、請求項14から16のいずれか一項に記載の非一時的コンピュータ可読記憶媒体。
【請求項18】
前記命令が、コンピューティングシステムの少なくとも1つのプロセッサによって実行されたとき、前記コンピューティングシステムに、送出側参加者の前記セットのうちの各送出側参加者によってアップロードされるべき各ビデオストリーム層についてのビットレートを、該送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量と、該送出側参加者に関連付けられた前記アップリンク容量とに基づいて決定することをさらに実施させる、請求項17に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、デジタル通信の分野に関する。より詳細には、本技術は、グループビデオ通話におけるサイマルキャストストリームを最適化するための技法に関する。
【背景技術】
【0002】
今日、人々は、しばしば、多種多様な目的でコンピューティングデバイスを利用する。ユーザは、自身のコンピューティングデバイスを使用して、たとえば、他のユーザと通信することができる。そのような通信は、ソーシャルネットワーキングシステムを介してますます普及している。ソーシャルネットワーキングシステム上でのデジタル通信など、デジタル通信は、様々なタイプの通信を伴い得る。いくつかのタイプのデジタル通信は、ユーザが、焦点を当てた交換に関与することを可能にする。たとえば、ユーザは、ソーシャルネットワーキングシステムによってサポートされたメッセージングシステムまたは電子メールシステムの使用を通して、特定の1人または複数のユーザをターゲットにし得る。別の例として、ユーザは、他のユーザとのオーディオ通信またはビデオ通信に入ることができる。
【0003】
多くの事例では、ビデオ通信は、ユーザが、最も効果的に情報を伝達し、実生活のコミュニケーションをシミュレートすることを可能にすることができるので、ビデオ通信は、ユーザによって好まれ得る。いくつかの事例では、異なるロケーションにいる2人の参加者が、ビデオ通信に関与することができる。また、複数のロケーションにいるユーザのグループが、ビデオ通信を使用してグループの間のコミュニケーションを容易にすることを可能にすることが、望ましいことがある。
【発明の概要】
【0004】
本開示の様々な実施形態は、グループビデオ通話における参加者のセットを識別するように構成されたシステム、方法、および非一時的コンピュータ可読媒体を含むことができ、各参加者が、アップリンク容量とダウンリンク容量とに関連付けられ、参加者のセットが、送出側参加者(sender participant)のセットとサブスクライバ参加者(subscriber participant)のセットとを含む。送出側参加者のセットのうちの第1の送出側参加者について、第1の送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層が、サブスクライバ参加者のセットのうちの1人または複数のサブスクライバ参加者のダウンリンク容量に基づいて決定される。1人または複数のサブスクライバ参加者の各サブスクライバ参加者が、第1の送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層のうちの1つのビデオストリーム層を受信するように、割り当てられる。
【0005】
一実施形態では、第1の送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層が、第1の送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量に基づいて決定される。
【0006】
一実施形態では、各サブスクライバ参加者が、少なくとも1人の送出側参加者にサブスクライブしている。
【0007】
一実施形態では、第1の送出側参加者によってアップロードされるべき各ビデオストリーム層が、あるビットレートに関連付けられる。
【0008】
一実施形態では、第1の送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量と、第1の送出側参加者に関連付けられたアップリンク容量とに基づいて、第1の送出側参加者によってアップロードされるべき各ビデオストリームについて、ビットレートが決定される。
【0009】
一実施形態では、送出側参加者のセットは、アップリンク容量に基づいてランク付けされる。
【0010】
一実施形態では、送出側参加者のセットのうちの第1の送出側参加者について、第1の送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を決定することが、送出側参加者のセットの各送出側参加者について、送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量に基づいて、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を決定することをさらに含む。
【0011】
一実施形態では、参加者のセットの各送出側参加者について、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を決定することが、ランク付けに基づく順序で各送出側参加者を反復的に処理することを含む。
【0012】
一実施形態では、各送出側参加者を反復的に処理することは、複数の反復を含み、各反復が、送出側参加者のセットの特定の送出側参加者に関連付けられ、各反復が、反復に関連付けられた特定の送出側参加者にサブスクライブしている各サブスクライバ参加者を反復的に処理することを含む。
【0013】
一実施形態では、特定の送出側参加者にサブスクライブしている各サブスクライバ参加者を反復的に処理することが、各サブスクライバ参加者について、特定の送出側参加者によってアップロードされるべき新しい層を作成すべきかどうかを決定すること、または特定の送出側参加者に関連付けられた既に作成された層にサブスクライバ参加者を割り当てることを含む。
【0014】
開示される技術の多くの他の特徴、適用例、実施形態、および/または変形形態が、添付の図面および以下の発明を実施するための形態から明らかになることを諒解されたい。本明細書で説明される構造、システム、非一時的コンピュータ可読媒体、および方法の追加および/または代替の実装形態が、開示される技術の原理から逸脱することなく採用され得る。
【0015】
本発明による実施形態は、特に、方法、システムおよび記憶媒体を対象とする添付の特許請求の範囲において開示され、1つの請求項カテゴリー、たとえば、方法において述べられた任意の特徴は、別の請求項カテゴリー、たとえば、システムまたはコンピュータプログラム製品においても請求され得る。添付の特許請求の範囲における従属関係または参照は、形式的理由で選定されるにすぎない。ただし、前の請求項への意図的な参照(特に複数の従属関係)から生じる主題も請求され得、その結果、請求項とその特徴との任意の組合せが、開示され、添付の特許請求の範囲で選定された従属関係にかかわらず請求され得る。請求され得る主題は、添付の特許請求の範囲に記載の特徴の組合せだけでなく、特許請求の範囲における特徴の任意の他の組合せをも含み、特許請求の範囲において述べられた各特徴は、特許請求の範囲における任意の他の特徴または他の特徴の組合せと組み合わせられ得る。さらに、本明細書で説明または示される実施形態および特徴のいずれも、別個の請求項において、ならびに/あるいは、本明細書で説明もしくは示される任意の実施形態もしくは特徴との、または添付の特許請求の範囲の特徴のいずれかとの任意の組合せで、請求され得る。
【図面の簡単な説明】
【0016】
図1】は、本開示の一実施形態による、グループビデオ通話モジュールを含む例示的なシステムを示す図である。
図2】本開示の一実施形態による、自動帯域幅割振りに関連付けられた例示的な擬似コードを示す図である。
図3】本開示の一実施形態による、自動ダウンリンク容量予約に関連付けられた例示的な擬似コードを示す図である。
図4A】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4B】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4C】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4D】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4E】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4F】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4G】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4H】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4I】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4J】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4K】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4L】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4M】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4N】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4O】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4P】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図4Q】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオを示す図である。
図5】本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的な方法を示す図である。
図6】本開示の一実施形態による、様々なシナリオにおいて利用され得る例示的なソーシャルネットワーキングシステムを含む例示的なシステムのネットワーク図である。
図7】本開示の一実施形態による、様々なシナリオにおいて利用され得るコンピュータシステムまたはコンピューティングデバイスの一例を示す図である。
【発明を実施するための形態】
【0017】
図は、単に例示の目的で、開示される技術の様々な実施形態を示し、図は、同様の要素を識別するために同様の参照番号を使用する。当業者は、以下の説明から、本明細書で説明される開示される技術の原理から逸脱することなく、図に示されている構造および方法の代替実施形態が採用され得ることを容易に認識されよう。
【0018】
グループビデオ通話におけるサイマルキャストストリームのサイズを最適化すること
上述のように、人々は、しばしば、多種多様な目的でコンピューティングデバイスを利用する。ユーザは、自身のコンピューティングデバイスを使用して、たとえば、他のユーザと通信することができる。そのような通信は、ソーシャルネットワーキングシステムを介してますます普及している。ソーシャルネットワーキングシステム上でのデジタル通信など、デジタル通信は、様々なタイプの通信を伴い得る。いくつかのタイプのデジタル通信は、ユーザが、焦点を当てた交換に関与することを可能にする。たとえば、ユーザは、ソーシャルネットワーキングシステムによってサポートされたメッセージングシステムまたは電子メールシステムの使用を通して、特定の1人または複数のユーザをターゲットにし得る。別の例として、ユーザは、他のユーザとのオーディオ通信またはビデオ通信に入ることができる。
【0019】
多くの事例では、ビデオ通信は、ユーザが、最も効果的に情報を伝達し、実生活のコミュニケーションをシミュレートすることを可能にすることができるので、ビデオ通信は、ユーザによって好まれ得る。いくつかの事例では、異なるロケーションにいる2人の参加者が、ビデオ通信に関与することができる。また、複数のロケーションにいるユーザのグループが、ビデオ通信を使用してグループの間のコミュニケーションを容易にすることを可能にすることが、望ましいことがある。
【0020】
コンピュータ技術の領域において特に台頭しつつある従来の手法は、複数のユーザがグループビデオ通話に参加するデジタル通信を含む。概して、グループビデオ通話における1人または複数の参加者からのビデオストリームは、実質的にリアルタイムで他の参加者に送信される。グループビデオ通話における参加者は、様々なレベルのビデオ品質を要求することが可能であり得る。たとえば、参加者は、高品質ストリーム、標準品質ストリーム、または低品質ストリームを要求することができる。しかしながら、参加者が、参加者のネットワーク接続が提供するのに最適であるものよりも高い品質のビデオストリームを要求し得ることが可能である。たとえば、ユーザは、ユーザのネットワーク接続が高品質ビデオストリームを提供するのに最適でない場合でも、高品質ビデオストリームを要求し得る。そのようなシナリオでは、いくつかの従来の手法は、最も低い利用可能なダウンリンク容量をもつ参加者に基づいて、ビデオストリームビットレートを限定することを選択した。たとえば、グループビデオ通話において4人の参加者がいる例示的なシナリオについて考える。4人の参加者のうちの3人が、第4の参加者に高品質ビデオストリームを要求し得る。しかしながら、3人の参加者のうちの第1の参加者は、100kbpsのダウンリンク容量を有し、第2および第3の参加者は、各々、5Mbpsのはるかに大きいダウンリンク容量を有する。いくつかの従来の手法の下で、第4の参加者によってアップロードされる高品質ビデオストリームのビットレートおよび/または品質は、100kbpsダウンリンク容量をもつ第1の参加者に適応するために、100kbps未満になるように制限され得る。高品質ビデオストリームを要求するすべての3人の参加者が、第1の参加者の低いダウンリンク容量により、限定された高品質ビデオストリームを受信する。これは、グループビデオ通話における他の参加者が、より高い品質のビデオストリームを受信することが可能であり、アップロードするユーザが、より高い品質のビデオストリームをアップロードすることが可能である場合でも、グループビデオ通話における他の参加者は、より低い品質のビデオストリームを受信することを不必要に強制され得るという望ましくない結果につながる。そのような手法は、どのユーザがどのストリームを要求したかに応じて、「高品質」ストリームが「低品質」ストリームよりも低い品質を有するシナリオにつながることさえある。たとえば、上記の例示的なシナリオでは、5Mbpsダウンリンク容量を有する第3の参加者が、低品質ビデオストリームを要求した場合、低品質ビデオストリームは、第1の参加者が高品質ビデオストリームを限定しているので、高品質ビデオストリームよりも高い品質のものになることが可能である。
【0021】
他の従来の手法は、各アップロードする参加者のアップリンク容量を、様々な品質のビデオストリームに対する所定の比に分割した。たとえば、参加者のアップリンク容量は、高品質ストリームのためにアップリンク容量の80%が使用され、中間品質ストリームのためにアップリンク容量の15%が予約され、低品質ストリームのためにアップリンク容量の5%が予約されるように、分割され得る。しかしながら、この手法は、グループビデオ通話に参加しているユーザの特定の特性を考慮することができない。したがって、そのような手法は、グループビデオ通話に参加している参加者の特定のグループに基づいて、ユーザエクスペリエンスを最適化することができない。
【0022】
コンピュータ技術に由来する改善された手法が、コンピュータ技術の領域において特に台頭しつつある従来の手法に関連する上記のおよび他の欠点を克服する。概して、グループビデオ通話に参加している参加者のセットが、識別され得る。たとえば、参加者のセットは、グループビデオ通話を管理するというタスクを与えられた中央サーバによって識別され得る。参加者のセット中の各参加者が、アップリンク容量とダウンリンク容量とに関連付けられ得る。参加者のうちの1人または複数が、グループビデオ通話における他の参加者によって受信および閲覧されるべき1つまたは複数のビデオストリームをアップロードしていることになる、送出側参加者として識別され得る。1人または複数の参加者が、別の参加者によってアップロードされた少なくとも1つのビデオストリームを受信および閲覧していることになる、サブスクライバ参加者として識別され得る。グループビデオ通話における所与の参加者は、単に送出側参加者であるか、単にサブスクライバ参加者であるか、または送出側参加者とサブスクライバ参加者の両方であり得る。参加者のセット中の各送出側参加者は、様々な品質(たとえば、ビットレート)の1つまたは複数のビデオストリーム層をアップロードするように命令され得る。送出側参加者によってアップロードされるべきビデオストリーム層の数および各ビデオストリーム層に関連付けられたビットレートが、送出側参加者のアップリンク容量と、グループビデオ通話における他の参加者のダウンリンク容量とに基づいて決定され得る。この決定は、たとえば、中央サーバによって行われ得る。たとえば、中央サーバは、第1の参加者に、第1の品質(たとえば、第1のビットレート)を有する第1のビデオストリーム層と第2の品質(たとえば、第2のビットレート)を有する第2のビデオストリーム層とをアップロードするように命令し得る。第1および第2のビデオストリーム層と第1および第2のビットレートとは、第1の参加者のアップリンク容量に基づいて、およびグループビデオ通話における他の参加者のダウンリンク容量に基づいて決定され得る。ビデオストリーム層およびビットレートの決定は、各送出側参加者が、その送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を割り当てられるまで、反復的に実施され得る。反復が完了したとき、各送出側参加者は、その送出側参加者がアップロードするのを担当する1つまたは複数のビデオストリーム層に関連付けられ、各サブスクライバ参加者は、そのサブスクライバ参加者が受信することになる、1人または複数の送出側参加者の各々からの1つのビデオストリーム層に関連付けられる。いくつかの実施形態では、グループビデオ通話における各参加者は、中央サーバに通信可能に接続され得る。中央サーバは、1人または複数の送出側参加者からビデオストリーム層を受信することと、1人または複数のサブスクライバ参加者のサブスクリプションに基づいてそれらのサブスクライバ参加者にビデオストリーム層を送信することとを行うように構成され得る。開示される技術に関係するさらなる詳細が、以下で提供される。
【0023】
図1は、本開示の一実施形態による、グループビデオ通話モジュール102を含む例示的なシステム100を示す。グループビデオ通話モジュール102は、グループビデオ通話に参加している参加者のセットを識別するように構成され得る。参加者のセット中の各参加者が、アップリンク容量とダウンリンク容量とに関連付けられ得る。参加者のうちの1人または複数が、送出側参加者として識別され得る。送出側参加者は、グループビデオ通話における他の参加者によって受信および閲覧されるべき1つまたは複数のビデオストリームをアップロードしていることになる参加者である。1人または複数の参加者が、サブスクライバ参加者として識別され得る。サブスクライバ参加者は、別の参加者によってアップロードされた少なくとも1つのビデオストリームを受信および閲覧していることになる参加者である。グループビデオ通話における所与の参加者は、単に送出側参加者であるか、単にサブスクライバ参加者であるか、または送出側参加者とサブスクライバ参加者の両方であり得る。サブスクライバ参加者は、1つまたは複数のサブスクリプションに関連付けられ得る。各サブスクリプションは、サブスクライバ参加者および送出側参加者に関連付けられ得、サブスクリプションは、サブスクライバ参加者が、送出側参加者によってアップロードされた(本明細書では「ビデオストリーム層」とも呼ばれる)ビデオストリームを要求したこと、および/または受信していることになることを示すことができる。各サブスクリプションは、サブスクライバ参加者によって要求されるビデオストリームの品質を示す、品質設定または品質インジケータにも関連付けられ得る。たとえば、サブスクライバ参加者と送出側参加者との間のサブスクリプションは、サブスクライバ参加者が送出側参加者に、高品質ビデオストリーム層を要求したのか、標準品質ビデオストリーム層を要求したのか、低品質ビデオストリーム層を要求したのかを示すことができる。
【0024】
参加者のセット中の各送出側参加者について、グループビデオ通話モジュール102は、送出側参加者のアップリンク容量とグループビデオ通話における他の参加者(たとえば、サブスクライバ参加者)のダウンリンク容量とに基づいて、その送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を決定することができる。特定の送出側参加者によってアップロードされる各ビデオストリーム層は、特定の品質(たとえば、特定のビットレート)を有し、および/または特定の品質に関連付けられ得る。たとえば、参加者のセット中の第1の送出側参加者について、グループビデオ通話モジュール102は、第1の送出側参加者のアップリンク容量と、第1の送出側参加者にサブスクライブした各サブスクライバ参加者(たとえば、グループビデオ通話の一部として第1の送出側参加者からビデオストリームを受信することになる、各サブスクライバ参加者)についてのダウンリンク容量を検討することができる。これらのファクタに基づいて、グループビデオ通話モジュール102は、第1の送出側参加者(すなわち、第1の送出側参加者に関連付けられたコンピューティングデバイス)に、第1の品質(たとえば、第1のビットレート)を有する第1のビデオストリーム層、第2の品質(たとえば、第2のビットレート)を有する第2のビデオストリーム層などをアップロードするように命令することができる。様々な実施形態では、各送出側参加者がいくつのストリームをアップロードし、どんなビットレートでアップロードすることになるかを決定するとき、追加の考慮事項が考慮に入れられ得る。これらの追加の考慮事項は、たとえば、CPU速度、GPU処理速度、他のハードウェア性能メトリックまたは能力など、送出側参加者の能力を含むことができる。
【0025】
グループビデオ通話モジュール102は、グループビデオ通話における各送出側参加者を反復的に巡回し、各送出側参加者によってアップロードされるべきビデオストリーム層を決定し、グループビデオ通話におけるあらゆる送出側参加者についてそのような決定が行われるまで、それを行うことができる。様々な実施形態では、グループビデオ通話モジュール102による反復処理が完了したとき、各送出側参加者は、その送出側参加者がアップロードするのを担当する1つまたは複数のビデオストリーム層に関連付けられる。さらに、反復処理が完了したとき、各サブスクライバ参加者は、そのサブスクライバ参加者がサブスクライブしている各送出側参加者からの1つのビデオストリーム層に関連付けられる。たとえば、グループビデオ通話において3人の参加者がおり、各参加者は送出側参加者であり、各参加者はまた、あらゆる他の参加者にサブスクライブしている、例示的なシナリオについて考える。各参加者は、各ビデオストリーム層が特定のビットレートを有する、1つまたは複数のビデオストリーム層をアップロードするように命令され得る。第1の参加者は、第2の参加者からの特定のビデオストリーム層と第3の参加者からの特定のビデオストリーム層とを受信するように割り当てられ得、第2の参加者は、第1の参加者からの特定のビデオストリーム層と第3の参加者からの特定のビデオストリーム層とを受信するように割り当てられ得、第3の参加者は、第1の参加者からの特定のビデオストリーム層と第2の参加者からの特定のビデオストリーム層とを受信するように割り当てられ得る。送出側参加者によってアップロードされる特定のビデオストリーム層へのサブスクライバ参加者の割当ては、サブスクライバ参加者のダウンリンク容量と、送出側参加者のアップリンク容量とに基づいて決定され得る。グループビデオ通話モジュール102は、グループビデオ通話における各送出側参加者からビデオストリーム層を受信し、特定のビデオストリーム層への特定のサブスクライバ参加者の割当てに基づいて、ビデオストリーム層をグループビデオ通話におけるサブスクライバ参加者に送信するように構成され得る。様々な実施形態では、グループビデオ通話モジュール102の1つまたは複数の機能は、中央サーバにおいて実装され得る。グループビデオ通話の参加者は、中央サーバに接続され得、ビデオストリーム層を中央サーバにアップロードし、他の参加者によってアップロードされたビデオストリーム層を中央サーバから受信することができる。本開示の様々な実施形態は、グループビデオ通話を参照しながら様々な概念を説明するが、本開示は、オーディオデータ、ビデオデータ、他の媒体など、データストリームの任意の交換に適用され得ることを理解されたい。
【0026】
図1の例に示されているように、グループビデオ通話モジュール102は、参加者情報モジュール104と、帯域幅割振りモジュール106と、ビデオ通話モジュール108とを含むことができる。いくつかの事例では、例示的なシステム100は、少なくとも1つのデータストア110を含むことができる。この図および本明細書のすべての図に示されている構成要素(たとえば、モジュール、要素など)は例にすぎず、他の実装形態は、追加の構成要素、より少ない構成要素、統合された構成要素、または異なる構成要素を含み得る。いくつかの構成要素は、関連する詳細を不明瞭にしないように示されていないことがある。様々な実施形態では、グループビデオ通話モジュール102に関連して説明される機能性のうちの1つまたは複数は、任意の適切な組合せで実装され得る。
【0027】
いくつかの実施形態では、グループビデオ通話モジュール102は、部分的にまたは全体的に、ソフトウェア、ハードウェア、またはそれらの任意の組合せとして実装され得る。概して、本明細書で説明されるモジュールは、ソフトウェア、ハードウェア、またはそれらの任意の組合せに関連付けられ得る。いくつかの実装形態では、モジュールの1つまたは複数の機能、タスク、および/または動作は、ソフトウェアルーチン、ソフトウェアプロセス、ハードウェア、および/またはそれらの任意の組合せによって行われるか、または実施され得る。いくつかの場合には、グループビデオ通話モジュール102は、部分的にまたは全体的に、サーバシステムまたはクライアントコンピューティングデバイス上など、1つまたは複数のコンピューティングデバイスまたはシステム上で実行するソフトウェアとして実装され得る。いくつかの事例では、グループビデオ通話モジュール102は、部分的にまたは全体的に、図6のソーシャルネットワーキングシステム630など、ソーシャルネットワーキングシステム(またはサービス)の内部に実装されるか、あるいはソーシャルネットワーキングシステム(またはサービス)と連携して動作するように構成されるか、またはソーシャルネットワーキングシステム(またはサービス)と統合されるように構成され得る。同様に、いくつかの事例では、グループビデオ通話モジュール102は、部分的にまたは全体的に、図6のユーザデバイス610など、クライアントコンピューティングデバイスの内部に実装されるか、あるいはクライアントコンピューティングデバイスと連携して動作するように構成されるか、またはクライアントコンピューティングデバイスと統合されるように構成され得る。たとえば、グループビデオ通話モジュール102は、ユーザコンピューティングデバイスまたはクライアントコンピューティングシステム上で実行する専用アプリケーション(たとえばアプリ)、プログラム、またはアプレットとして実装されるか、あるいはそれらの内部に実装され得る。グループビデオ通話モジュール102の機能性を実施するための命令を組み込むまたは実装するアプリケーションが、開発者によって作成され得る。アプリケーションは、リポジトリに提供されるか、またはリポジトリ中で維持され得る。いくつかの場合には、アプリケーションは、ネットワーク(たとえば、インターネット)を介してリポジトリにアップロードされるか、またはさもなければ送信され得る。たとえば、アプリケーションの開発者に関連付けられた、またはアプリケーションの開発者の制御下のコンピューティングシステム(たとえば、サーバ)が、アプリケーションをリポジトリに提供するかまたは送信することができる。リポジトリは、たとえば、ユーザによるアクセスまたはダウンロードのためのアプリケーションが維持され得る「アプリ」ストアを含むことができる。アプリケーションをダウンロードするためのユーザによるコマンドに応答して、アプリケーションは、リポジトリからユーザに関連付けられたコンピューティングデバイスにネットワークを介して提供されるか、またはさもなければ送信され得る。たとえば、リポジトリの管理者に関連付けられた、またはリポジトリの管理者の制御下のコンピューティングシステム(たとえば、サーバ)は、ユーザがアプリケーションをインストールおよび実行することができるように、アプリケーションがユーザのコンピューティングデバイスに送信されることを引き起こすかまたは可能にすることができる。アプリケーションの開発者とリポジトリの管理者とは、いくつかの場合には異なるエンティティであり得るが、他の場合には同じエンティティであり得る。多くの変形形態が可能であることを理解されたい。
【0028】
グループビデオ通話モジュール102は、例示的なシステム100に示されているように、少なくとも1つのデータストア110と通信および/または動作するように構成され得る。データストア110は、様々なタイプのデータを記憶および維持するように構成され得る。いくつかの実装形態では、データストア110は、ソーシャルネットワーキングシステム(たとえば、図6のソーシャルネットワーキングシステム630)に関連付けられた情報を記憶することができる。ソーシャルネットワーキングシステムに関連付けられた情報は、ユーザに関するデータ、ユーザ識別子、ソーシャルつながり、ソーシャル対話、プロファイル情報、人口統計学的情報、ロケーション、ジオフェンスエリア、地図、場所、イベント、ページ、グループ、投稿、通信、コンテンツ、フィード、アカウント設定、プライバシー設定、ソーシャルグラフ、および様々な他のタイプのデータを含むことができる。いくつかの実施形態では、データストア110は、グループビデオ通話モジュール102によって利用される情報を記憶することができる。たとえば、データストア110は、グループビデオ通話におけるビデオストリーム層作成および/または帯域幅割振りのための様々なルール、グループビデオ通話サブスクリプション情報、ダウンリンク容量およびアップリンク容量などのユーザ特性などを記憶することができる。多くの変形形態または他の可能性があり得ることが、企図される。
【0029】
参加者情報モジュール104は、グループビデオ通話に参加している参加者のセットを識別するように構成され得る。各参加者は、アップリンク容量とダウンリンク容量とに関連付けられ得る。参加者情報モジュール104は、各参加者のアップリンク容量とダウンリンク容量とを決定するか、またはこの情報を別のソースから受信するように構成され得る。
【0030】
参加者情報モジュール104はまた、グループビデオ通話における参加者についてのサブスクリプション情報を受信するように構成され得る。説明されたように、グループビデオ通話における1人または複数の参加者が、グループビデオ通話における他の参加者によって受信および閲覧されるべき1つまたは複数のビデオストリーム層をアップロードすることになる、送出側参加者として識別され得る。さらに、グループビデオ通話における1人または複数の参加者が、グループビデオ通話における他の参加者によってアップロードされた1つまたは複数のビデオストリーム層を受信および閲覧することになる、サブスクライバ参加者として識別され得る。所与の参加者は、送出側参加者とサブスクライバ参加者の両方であり得る。たとえば、あらゆる参加者が、ビデオストリームをアップロードし、また、グループビデオ通話におけるすべての他の参加者のビデオストリームを閲覧しているグループビデオ通話では、あらゆる参加者が、送出側参加者とサブスクライバ参加者の両方である。
【0031】
参加者情報モジュール104によって受信されたサブスクリプション情報は、どのサブスクライバ参加者がグループビデオ通話におけるどの送出側参加者にサブスクライブしているかを識別し得る。サブスクリプション情報は、サブスクライバ参加者と送出側参加者との間の各サブスクリプションについての要求される品質レベルを示す品質情報をも含み得る。たとえば、品質情報は、サブスクライバ参加者が特定の送出側参加者に、高品質ビデオストリーム層を要求したのか、標準品質ビデオストリーム層を要求したのか、低品質ビデオストリーム層を要求したのかを示し得る。
【0032】
いくつかの実施形態では、サブスクリプションについての品質情報が、参加者によって直接入力され得る。たとえば、サブスクライバ参加者は、サブスクライバ参加者が受信することを望む品質レベルを指定する、ユーザインターフェースにおけるオプションを選択し得る。いくつかの実施形態では、サブスクリプションについての品質情報が推論され得る。この実施形態の特定の事例では、品質情報が、サブスクライバ参加者の閲覧モードに基づいて推論され得る。たとえば、サブスクライバ参加者が、第1の送出側参加者をフルスクリーンビューにおいて有し、すべての残りの送出側参加者をサムネイルビューにおいて有する場合、サブスクライバ参加者が、第1の送出側参加者からの高品質ビデオストリームと、残りの送出側参加者からの低品質ビデオストリームとを望むことが推論され得る。別の例では、サブスクライバ参加者が、送出側参加者が実質的に等しいサイズのタイル中で表示されるように、すべての送出側参加者をグリッドビューにおいて有する場合、サブスクライバ参加者が各送出側参加者からの中間品質ビデオストリームを望むことが推論され得る。この実施形態の別の事例では、品質情報が、サブスクライバ参加者および/または送出側参加者によって利用されているグループビデオ通話機器に基づいて推論され得る。グループビデオ通話機器は、ハードウェアおよび/またはソフトウェア構成要素を含むことができる。たとえば、サブスクライバ参加者が、ハイエンド専用ビデオ会議機器を使用してグループビデオ通話に接続されている場合、サブスクライバ参加者が各送出側参加者からの利用可能な最高品質ビデオストリーム層を受信することを望むと仮定され得る。
【0033】
帯域幅割振りモジュール106は、グループビデオ通話における各送出側参加者について、送出側参加者のアップリンク容量とグループビデオ通話における他の参加者のダウンリンク容量とに基づいて、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を決定するように構成され得る。帯域幅割振りモジュール106はまた、送出側参加者のアップリンク容量とグループビデオ通話における他の参加者のダウンリンク容量とに基づいて、各ビデオストリーム層についての品質レベル(たとえば、ビットレート)を決定するように構成され得る。いくつかの実施形態では、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層およびそれらのビデオストリーム層のそれぞれのビットレートは、送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量に基づいて決定され得る。
【0034】
帯域幅割振りモジュール106はまた、サブスクライバ参加者がサブスクライブしているグループビデオ通話における各送出側参加者から1つのビデオストリーム層を受信するように、グループビデオ通話における各サブスクライバ参加者を割り当てるように構成され得る。サブスクライバ参加者を送出側参加者によってアップロードされる特定のビデオストリーム層に割り当てることによって、帯域幅割振りモジュール106は、サブスクライバ参加者が送出側参加者から特定のビットレートを有するビデオストリーム層を受信することになることを決定する。
【0035】
様々な実施形態では、帯域幅割振りモジュール106は、反復的に、グループビデオ通話における送出側参加者によってアップロードされるべきビデオストリーム層を決定することができる。たとえば、送出側参加者のセットは、ランク付け基準に基づいて順序付けおよび/またはランク付けされ得、帯域幅割振りモジュール106は、順序に基づいて連続的に各送出側参加者を処理することができる。各送出側参加者が処理されているとき、帯域幅割振りモジュール106は、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層、ならびに各ビデオストリーム層についての品質レベル(たとえば、ビットレート)を決定することができ、1つまたは複数のビデオストリーム層のうちの特定のビデオストリーム層を受信するように、送出側参加者にサブスクライブしている各サブスクライバ参加者を割り当てることができる。一実施形態では、帯域幅割振りモジュール106は、最低アップリンク容量から最高アップリンク容量への昇順で、アップリンク容量に基づいて送出側参加者のセットをランク付けすることができる。帯域幅割振りモジュール106は、ランク付けに基づいて送出側参加者を連続的に処理することができる。たとえば、帯域幅割振りモジュール106は、最初に、最低アップリンク容量を有する第1の送出側参加者を処理し、第1の送出側参加者のアップリンク容量と第1の送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量とに基づいて、第1の送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層と1つまたは複数のビデオストリーム層についてのビットレートとを決定することができる。帯域幅割振りモジュール106は、次いで、第2の最低アップリンク容量を有する第2の送出側参加者を処理し、第2の送出側参加者のアップリンク容量と第2の送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量とに基づいて、第2の送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層とビデオストリーム層についてのビットレートとを決定することができ、すべての送出側参加者が処理されるまで、以下同様である。すべての送出側参加者の反復処理が完了すると、各送出側参加者は、指定されたビットレートを有する1つまたは複数のビデオストリーム層をアップロードするというタスクを与えられ、各サブスクライバ参加者は、サブスクライバ参加者がサブスクライブしている各送出側参加者から1つのビデオストリーム層を受信するように割り当てられる。
【0036】
様々な実施形態では、帯域幅割振りモジュール106によって実施される処理は、周期的におよび/または間欠的に繰り返され得る。たとえば、いくつかの実施形態では、帯域幅割振りモジュール106によって実施される処理は、更新された参加者情報(たとえば、参加者の更新されたセット、更新されたアップリンク容量、更新されたダウンリンク容量、更新されたサブスクリプション情報など)に基づいて、規則的な時間間隔において(たとえば、2秒ごとに)周期的に実施され得る。いくつかの実施形態では、帯域幅割振りモジュール106によって実施される処理は、特定のイベントに基づいて、繰り返されおよび/または更新され得る。たとえば、帯域幅割振りモジュール106によって実施される処理は、参加者がグループビデオ通話に加わるたびにおよび/または参加者がグループビデオ通話を去るたびに、更新された参加者情報に基づいて繰り返され得る。
【0037】
理解の明快のために、帯域幅割振りモジュール106の様々な実施形態に対応する帯域幅割振りモジュール106の様々な特徴が、それぞれ、図2および図3に示されている擬似コード200および300の例示的なセットに関して、本明細書でより詳細に説明される。
【0038】
ビデオ通話モジュール108は、グループビデオ通話を管理するように構成され得る。説明されたように、グループビデオ通話は、1人または複数の送出側参加者と1人または複数のサブスクライバ参加者とを含む、複数の参加者を有することができる。複数の参加者は、様々な組合せで互いにサブスクライブしていることがある。複数の参加者の少なくともサブセット(すなわち、送出側参加者のセット)について上記で説明されたように、帯域幅割振りモジュール106は、各送出側参加者について、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層と、各ビデオストリーム層についてのビットレートとを決定することができる。ビデオ通話モジュール108は、グループビデオ通話における各送出側参加者によってアップロードされたビデオストリーム層を受信するように構成され得る。さらに、複数の参加者の少なくともサブセット(すなわち、サブスクライバ参加者のセット)について上記で説明されたように、帯域幅割振りモジュール106は、サブスクライバ参加者がサブスクライブしている各送出側参加者から1つのビデオストリーム層を受信するように、各サブスクライバ参加者を割り当てることができる。ビデオ通話モジュール108は、帯域幅割振りモジュール106によって決定されたビデオストリーム層割当てに基づいて、適切なビデオストリーム(すなわち、ビデオストリーム層)を各サブスクライバ参加者に送信することができる。
【0039】
図2は、本開示の一実施形態による、帯域幅割振りモジュール106の様々な機能および特徴を実装するための例示的な擬似コード200を示す。擬似コード200は、特定の実施形態を実装するが、本開示はこの実施形態に限定されず、多くの変形形態が可能であることを理解されたい。擬似コード200は、(「エンドポイント」とも呼ばれる)グループビデオ通話における参加者のリスト、各参加者についてのアップリンク容量、および各参加者についてのダウンリンク容量を入力としてとる。その関数は、様々な参加者間の「サブスクリプション」のセットを入力として受信することもできる。
【0040】
擬似コード200の行204において、参加者のセットが、アップリンク容量に基づいて昇順でソートされる。異なる実施形態では、帯域幅割振りモジュール106は、異なる順序付けまたはランク付け基準に基づいて、参加者のセットをランク付けおよび/または順序付けするように構成され得る。
【0041】
行205~237は、送出側参加者として識別される各参加者が、参加者のランク付けされた順序に基づいて連続的に処理される、第1の反復シーケンスを実装する。たとえば、この例示的な実施形態では、第1の反復は、最低アップリンク容量をもつ第1の送出側参加者を処理することになり、第2の反復は、第2の最低アップリンク容量をもつ第2の送出側参加者を処理することになり、すべての送出側参加者が処理されるまで、以下同様である。第1の反復シーケンスの各反復が、その反復において処理されている「送出側参加者」とその送出側参加者にサブスクライブしている1人または複数の「サブスクライバ参加者」とに関して説明される。
【0042】
行206~208において、送出側参加者にサブスクライブしているサブスクライバ参加者のセットが識別される。行209~210において、サブスクライバ参加者のセット中の各サブスクライバ参加者について、「予約済みダウンリンク」が決定される。各サブスクライバ参加者の予約済みダウンリンクは、関数「ComputeReservedDownlink」を使用して決定される。図3を参照しながら、各サブスクライバ参加者についての予約済みダウンリンクの決定がより詳細に説明される。この時点では、サブスクライバ参加者の予約済みダウンリンクが、処理されている送出側参加者のために一時的に予約された、サブスクライバ参加者の利用可能なダウンリンク容量の部分を表すということで、十分である。行212において、送出側参加者にサブスクライブしている各サブスクライバ参加者が、予約済みダウンリンクに基づいて昇順でランク付けされる。
【0043】
行213および214は、行215~231において実装される第2の反復シーケンスにおいて使用されるべき2つの値「prev_layer_kbps」および「current_layer_to_upload」を初期化する。第2の反復シーケンスは、第1の反復シーケンスの現在の反復において処理されている送出側参加者にサブスクライブしている各サブスクライバ参加者を反復的に処理する。この例示的な実施形態では、各サブスクライバ参加者は、最低予約済みダウンリンクから最高予約済みダウンリンクへの順序で連続的に処理される。第2の反復シーケンスは、第2の反復シーケンスの特定の反復において処理されている「現在のサブスクライバ参加者」と、より広い第1の反復シーケンスの特定の反復において処理されている「現在の送出側参加者」とに関して説明される。行216において、値「current_layer_kbps」が、現在のサブスクライバ参加者の予約済みダウンリンクと現在の送出側参加者の残りのアップリンク容量とのうちの少ないほうに等しくなるように設定される。値「current_layer_kbps」は、現在の送出側参加者のために作成され、および/または現在の送出側参加者に割り当てられ得る、潜在的な新しいビデオストリーム層のサイズを表す。
【0044】
行217~222において、最小差しきい値に基づいて現在の送出側参加者のために新しいビデオストリーム層を作成するべきか否かに関する決定が行われる。行217において、潜在的な新しいビデオストリーム層のサイズ(current_layer_kbps)が、前のビデオストリーム層に関する最小差しきい値を満たすかどうかに関する決定が行われる。この特定の実施形態では、潜在的な新しいビデオストリーム層のサイズが前のビデオストリーム層のサイズ(prev_layer_kbps)よりも少なくとも2倍大きいかどうかに関する決定が行われる。少なくとも2倍大きい場合、current_layer_to_uploadカウンタが増分され(行218)、送出側参加者のために新しいビデオストリーム層が作成される(行219)。新しいビデオストリーム層は、current_layer_kbpsに等しいビットレートを有する(行219)。行220において、新しいビデオストリーム層のビットレートは、現在の送出側参加者の利用可能なアップリンク容量から減算される。行230において、現在のサブスクライバ参加者は、新たに作成されたビデオストリーム層にマッピングされる。言い換えれば、現在のサブスクライバ参加者は、現在の送出側参加者から、current_layer_kbpsに等しいビットレートを有する新たに作成されたビデオストリーム層を受信することになる。
【0045】
しかしながら、潜在的な新しいビデオストリーム層(current_layer_kbps)が最小差しきい値を満たさない、すなわち、前のビデオストリーム層よりも少なくとも2倍大きくない場合、新しい層は作成されず、現在のサブスクライバ参加者は、前のビデオストリーム層にマッピングされる(行221、222、および230)。
【0046】
説明されたように、擬似コード200の行215~230は、現在の送出側参加者にサブスクライブしている各サブスクライバ参加者を反復的に処理する。各サブスクライバ参加者について、ビットレート割振りモジュール106は、作成され得る潜在的な新しいビデオストリーム層のサイズ(current_layer_kbps)を決定する。潜在的な新しいビデオストリーム層のサイズが、現在のサブスクライバ参加者の予約済みダウンリンクに等しいか、あるいは、現在の送出側参加者が、現在のサブスクライバ参加者の予約済みダウンリンクを満たすのに十分な残りのアップリンクを有しない場合、潜在的な新しいビデオストリーム層のサイズが、現在の送出側参加者の残りのアップリンク容量に等しい(行216)かのいずれかである。ビットレート割振りモジュール106は、潜在的な新しいビデオストリーム層が、送出側参加者によってアップロードされるべき新しいビデオストリーム層の作成を正当化するかどうか、または、現在のサブスクライバ参加者が、前に作成されたビデオストリーム層に割り当てられるべきであるかどうかを決定する。この決定は、潜在的な新しいビデオストリーム層のサイズと、前に作成されたビデオストリーム層のビットレートとの間の差しきい値に基づいて行われ得る。例示的な擬似コード200において、この差しきい値は、潜在的な新しいビデオストリーム層が、前のビデオストリーム層の少なくとも2倍の大きさでなければならないように定義される(行217)。他の実施形態では、異なる差しきい値が使用され得る。たとえば、差しきい値は、任意の倍数または絶対差(たとえば、前のビデオストリーム層よりも100kbps大きい)、あるいはそれらの組合せであり得る。いくつかの実施形態では、複数の差しきい値が、たとえば、ビットレートの異なる範囲について定義され得る。潜在的な新しいビデオストリーム層が差しきい値を満たす場合、新しいビデオストリーム層は、潜在的な新しいビデオストリーム層のサイズに等しいビットレートで作成され(行219)、現在のサブスクライバ参加者は、新しいビデオストリーム層に割り当てられる(行230)。また、現在の送出側参加者の残りのアップリンク容量は、新しいビデオストリーム層のサイズを減算することによって更新される(行220)。潜在的な新しいビデオストリーム層が差しきい値を満たさない場合、現在のサブスクライバ参加者は、前のビデオストリーム層(すなわち、すでに作成され、現在の送出側参加者に割り当てられたビデオストリーム層)に割り当てられる(行221、222、および230)。
【0047】
行215~231において実装される第2の反復シーケンスが、現在の送出側参加者にサブスクライブしているサブスクライバ参加者のセットの処理を完了すると、現在の送出側参加者は、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を割り当てられ、各ビデオストリーム層は特定のビットレートを有する。たとえば、送出側参加者が、100kbpsのビットレートを有する第1のビデオストリーム層と、500kbpsのビットレートを有する第2のビデオストリーム層と、1Mbpsのビットレートを有する第3のビデオストリーム層とをアップロードすることを割り当てられ得る。さらに、サブスクライバ参加者のセット中の各サブスクライバ参加者が、現在の送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層のうちの特定のビデオストリーム層に割り当てられた。サブスクライバ参加者が特定のビデオストリーム層に割り当てられることは、サブスクライバ参加者が、現在の送出側参加者から特定のビットレートを有するそのビデオストリーム層を受信することになることを示す。たとえば、第1のサブスクライバ参加者は、100kbpsビデオストリーム層を受信するように割り当てられ得、第2のサブスクライバ参加者は、500kbpsビデオストリーム層を受信するように割り当てられ得、第3のサブスクライバ参加者は、1Mbpsビデオストリーム層を受信するように割り当てられ得、第4のサブスクライバも、1Mbpsビデオストリーム層を受信するように割り当てられ得る。行232~236において、各サブスクライバ参加者のダウンリンク容量は、サブスクライバ参加者が割り当てられた、ビデオストリーム層のビットレートを減算することによって更新される。
【0048】
行205~237の第1の反復シーケンスの各反復は、特定の送出側参加者について行215~231の第2の反復シーケンスを実行する。行215~231の第2の反復シーケンスが各送出側参加者について実行されると、各送出側参加者は、送出側参加者がアップロードすることを担当する様々な品質の1つまたは複数のビデオストリーム層を割り当てられることになり、各サブスクライバ参加者は、サブスクライバ参加者がサブスクライブしている各送出側参加者からの特定のビデオストリーム層に割り当てられることになることがわかる。
【0049】
行223~229は、送出側参加者アップリンク容量使用量の潜在的なさらなる最適化を可能にする、代替実施形態を実装する。行224において、現在の送出側参加者の残りのアップリンク容量が、前のビデオストリーム層のビットレートよりも大きいかまたはそれに等しいかどうか、および、現在のサブスクライバ参加者の予約済みダウンリンクが、現在の送出側参加者の残りのアップリンク容量の2倍よりも大きいかまたは2倍に等しいかどうかに関する決定が行われる。これらの条件の両方が満たされる場合、前のビデオストリーム層のビットレートが、現在の送出側参加者の残りのアップリンク容量に加算される(行225)。前のビデオストリーム層のビットレートは、前のビデオストリーム層のビットレートが送出側参加者の残りのアップリンク容量の1/4に等しくなるように修正され(行226)、送出側参加者の残りのアップリンク容量の3/4に等しいビットレートを有する新しいビデオストリーム層が作成される(行227-228)。本質的に、これらの追加の行は、前のビデオストリーム層とは十分に別個である第2のビデオストリーム層に適応することが可能であるように、前のビデオストリーム層のビットレートを減少させることが望ましいことがある、固有の状況に対処する。
【0050】
図3は、本開示の一実施形態による、帯域幅割振りモジュール106の様々な機能を実装するための例示的な擬似コード300を示す。特に、擬似コード300は、帯域幅割振りモジュール106が、特定の送出側参加者に関するサブスクライバ参加者について予約済みダウンリンクを決定することができる、一実施形態を示す。サブスクライバ参加者の予約済みダウンリンクが、サブスクライバ参加者の残りのダウンリンク容量に基づいて決定され得る。説明されたように、サブスクライバ参加者の残りのダウンリンク容量は、図2の擬似コード200の行205~237において実装される反復シーケンスの各反復で更新される。第1の反復では、サブスクライバ参加者の残りのダウンリンク容量は、そのサブスクライバ参加者の総ダウンリンク容量に等しい。しかしながら、第1の反復の後、ダウンリンク容量のいくらかの部分が、第1の送出側参加者からビデオストリーム層を受信するように割り当てられ得、第2の反復の後、ダウンリンク容量のいくらかの部分が、第2の送出側参加者からビデオストリーム層を受信するように割り当てられ得、以下同様であり、その結果、特定のサブスクライバ参加者の残りのダウンリンク容量が、各反復で潜在的に減少することになる。様々な実施形態では、サブスクライバ参加者の予約済みダウンリンクが、決定のときのサブスクライバ参加者の残りのダウンリンク容量に基づいて決定され得る。
【0051】
サブスクライバ参加者の予約済みダウンリンクはまた、特定の送出側参加者に対するサブスクライバ参加者のサブスクリプションの品質レベルに基づいて決定され得る。説明されたように、特定の送出側参加者に対するサブスクライバ参加者のサブスクリプションは、複数の品質レベルのうちの特定の品質レベルに関連付けられ得る。たとえば、一実施形態では、低品質レベルと、中間品質レベルと、高品質レベルとがあり得る。一実施形態では、サブスクライバ参加者は、サブスクライバ参加者が特定の送出側参加者からどの品質レベルを受信することを望むかを指定し得る。別の実施形態では、品質レベルが、たとえば、サブスクライバ参加者によって選択された閲覧モードに基づいて推論され得る。
【0052】
例示的な擬似コード300では、4つの品質レベルが定義される。4の品質レベルは最高品質レベルを示し、1の品質レベルは最低品質レベルを示す。サブスクライバ参加者が、2の品質レベルを有するサブスクリプションを送出側参加者に要求した場合、サブスクライバ参加者の予約済みダウンリンクは、サブスクライバ参加者の残りのダウンリンク容量を、サブスクライバ参加者についてこれから処理されるべき送出側参加者の数で除算したものとして計算される(行305-306)。たとえば、サブスクライバ参加者が4人の異なる送出側参加者にサブスクライブしている、例示的なシナリオについて考える。図2の行205~237の反復シーケンスは、1つの反復を通過し、その結果、送出側参加者のうちの1人が処理され、サブスクライバ参加者は、その送出側参加者について特定のビデオストリーム層に割り当てられたが、残りの3人の送出側参加者はまだ処理されておらず、サブスクライバ参加者は、残りの3人の送出側参加者についてビデオストリーム層にまだ割り当てられていない。サブスクライバ参加者の残りのダウンリンク容量は、サブスクライバ参加者がサブスクライブしたその1つのビデオストリーム層を反映するために更新され、サブスクライバ参加者についてこれから処理されるべき送出側参加者の数は、3に等しい。したがって、この例示的なシナリオでは、サブスクライバ参加者の予約済みダウンリンクは、そのサブスクライバ参加者の残りのダウンリンク容量を3で除算したものに等しくなるであろう。
【0053】
サブスクライバ参加者が、レベル3またはレベル4サブスクリプション(すなわち、高品質サブスクリプション)を送出側参加者に要求した場合、サブスクライバ参加者の予約済みダウンリンクは、サブスクライバ参加者の残りのダウンリンク容量に高解像度比(HD_RATIO)を乗算したものとして計算される。例示的な擬似コード300では、予約済みダウンリンクが、サブスクライバ参加者の残りのダウンリンク容量の1/2として計算されるように、高解像度比は0.5に設定される(行304)。様々な実施形態では、HD_RATIOは、異なる値であり得、行304に対する注釈において示されているように、たとえば、処理されるべき残された、サブスクライバ参加者の残りのサブスクリプションに基づいて変動することができる。
【0054】
サブスクライバ参加者が、レベル1サブスクリプションを送出側参加者に要求した場合、サブスクライバ参加者の予約済みダウンリンクは、サブスクライバ参加者の残りのサブスクリプションに依存し得る。例示的な擬似コード300では、サブスクライバ参加者が、保留中の未処理のより高解像度の層サブスクリプション(たとえば、レベル3またはレベル4)を有する場合、予約済みダウンリンクは、サブスクライバ参加者の残りのダウンリンク容量に1-HD_RATIOを乗算したものとして計算され、その積が、サブスクライバ参加者の残りのサブスクリプション-1で除算される(行311~312)。本質的に、この計算は、サブスクライバ参加者の残りのダウンリンク容量と1-HD_RATIOとの積を計算し、次いで、残されたダウンリンク容量を、保留中のサブスクリプションの数-1で除算することによって、サブスクライバ参加者の残りのダウンリンク容量の一部分を、保留中のより高解像度の層サブスクリプションのために予約する。ただし、サブスクライバ参加者が、保留中の未処理の高解像度層サブスクリプションを有しない場合、予約済みダウンリンクは、レベル2/中間解像度サブスクリプションと同様のやり方で計算される(行313~315)。
【0055】
次に、例示的なシナリオに関して追加の明瞭性および説明が与えられる。
【0056】
図4A図4Qは、本開示の一実施形態による、グループビデオ通話サイマルキャスト最適化に関連付けられた例示的なシナリオ400を示す。例示的なシナリオ400は、様々な実施形態による、グループビデオ通話モジュール102の様々な機能を示す。図4Aに見られ得るように、例示的なシナリオ400は、グループビデオ通話に参加している4人のユーザ402、404、406、および408を含む。各ユーザは、あらゆる他のユーザにサブスクライブしている。さらに、例示的なシナリオ400は、3つのサブスクリプション品質レベル、すなわち、レベル1または「低解像度」(LD)、レベル2または「標準解像度」(SD)、およびレベル3または「高解像度」(HD)を含む。
【0057】
ユーザ402は、200kbpsのアップリンク容量と200kbpsのダウンリンク容量とを有する。ユーザ402は、標準解像度ビデオストリームをあらゆる他のユーザに要求した。これは、たとえば、ユーザ402が、他の参加者がすべて、実質的に等しいサイズの個々のウィンドウ中に表示されるように、グループビデオ通話の「グリッドビュー」を選択した事例であり得る。
【0058】
ユーザ404は、300kbpsのアップリンク容量と200kbpsのダウンリンク容量とを有する。ユーザ404は、低解像度ビデオストリームをユーザ406および408に要求し、高解像度ビデオストリームをユーザ402に要求した。これは、たとえば、ユーザ404が、ユーザ402をフルスクリーンビュー上に有し、サムネイルビューにおいて表示されたユーザ406および408を有する事例であり得る。
【0059】
ユーザ406は、350kbpsのアップリンク容量と600kbpsのダウンリンク容量とを有する。ユーザ402のように、ユーザ406は、標準解像度ビデオストリームをあらゆる他のユーザに要求した。
【0060】
ユーザ408は、800kbpsのアップリンク容量と1000kbpsのダウンリンク容量とを有する。ユーザ404と同様に、ユーザ408は、低解像度ビデオストリームをユーザ404および406に要求し、高解像度ビデオストリームをユーザ402に要求した。
【0061】
上記で説明されたように、一実施形態では、ユーザ402、404、406、408のセットは、アップリンク容量に基づいて昇順でランク付けされ、次いで、ランク付けに基づいて順次反復的に処理され得る。例示的なシナリオ400では、グループビデオ通話は、擬似コード200の行223~229が含まれる、図2の擬似コード200において実装される実施形態に従って処理される。
【0062】
図4Bでは、図2の行205~237において実装される反復シーケンスの第1の反復が、最低アップリンク容量を有するユーザ402を処理する。この第1の反復では、ユーザ402は送出側参加者であり、ユーザ404、406、および408は各々、ユーザ402にサブスクライブしているサブスクライバ参加者である。例示的なシナリオ400では、図3の擬似コード300において実装される実施形態に従って、送出側参加者に関する各サブスクライバ参加者について予約済みダウンリンクが決定される。説明されたように、各サブスクライバ参加者の予約済みダウンリンクは、サブスクライバ参加者の残りのダウンリンク容量と、送出側参加者に対するサブスクライバ参加者のサブスクリプションに関連付けられた品質レベルとに基づいて決定される。ユーザ404は、高解像度ビデオストリームを送出側参加者、すなわち、ユーザ402に要求した。したがって、ユーザ404の予約済みダウンリンクは、ユーザ404の残りのダウンリンク容量(200kbps)を(擬似コード300の行304におけるHD_RATIOにおいて指定されているように)2で除算したものとして計算される。したがって、ユーザ404の予約済みダウンリンクは、100kbpsである。ユーザ406は、標準解像度ビデオストリームをユーザ402に要求した。したがって、ユーザ406の予約済みダウンリンクは、ユーザ406の残りのダウンリンク容量(600kbps)を、処理されるべき残っているユーザ406のサブスクリプションの数で除算したものとして計算される。この第1の反復では、送出側参加者のいずれも処理されておらず、これは、ユーザ406が依然として、処理されるべき残っている3つのサブスクリプションを有することを意味する。したがって、ユーザ406の予約済みダウンリンクは、600kbps/3=200kbpsである。ユーザ408は、高解像度ビデオストリームをユーザ402に要求した。したがって、ユーザ408の予約済みダウンリンクは、ユーザ408の残りのダウンリンク容量(1000kbps)を2で除算したものとして計算され、これは500kbpsである。
【0063】
図4Cは、サブスクライバ参加者のさらなる処理を示す。図2の行212に従って、各サブスクライバ参加者は、予約済みダウンリンクに基づいて昇順でランク付けされる。図2の行215~236において実装される第2の反復シーケンスに従って、各サブスクライバ参加者は、ランク付けに基づいて連続的に処理される。第2の反復シーケンスの第1の反復が、最低予約済みダウンリンクを有するユーザ404を処理する。ユーザ404の予約済みダウンリンクに等しいサイズ(100kbps)を有する第1のビデオストリーム層が作成され、ユーザ404は、第1のビデオストリーム層に割り当てられる。100kbpsのビットレートを有する第1のビデオストリーム層の作成は、送出側参加者、ユーザ402が、100kbpsのビットレートを有する第1のビデオストリーム層をアップロードすることになることを示す。したがって、ユーザ402は、第1のビデオストリーム層に専用のユーザ402のアップリンク容量の100kbpsと、残っているアップリンク容量の100kbpsとを有する。この第1のビデオストリーム層へのサブスクライバ参加者、ユーザ404の割当ては、ユーザ404が、ユーザ402から100kbpsビデオストリーム層を受信することを示す。前に説明されたように、本開示は、サブスクライバ参加者が送出側参加者「から」ビデオストリーム層を受信することについて述べることがあるが、様々な実施形態では、この受信は、ある参加者から別の参加者へのビデオストリーム層の直接送信でないことを理解されたい。そうではなく、様々な実施形態では、サブスクライバ参加者は、送出側参加者がビデオストリーム層を中央サーバにアップロードすることと、サブスクライバ参加者がそのビデオストリーム層を受信するように割り当てられていることに基づいて、中央サーバがビデオストリーム層をサブスクライバ参加者に送信することとによって、送出側参加者「から」ビデオストリーム層を受信する。
【0064】
第2の反復シーケンスの第2の反復が、第2の最低予約済みダウンリンクを有するユーザ406を処理する。図2の行217に基づいて、ユーザ402の残りのアップリンク容量(100kbps)が、前に作成されたビデオストリーム層(100kbps)よりも2倍大きくないので、新しい層を作成するのに不十分な残りのアップリンク容量があるという決定が行われる。しかしながら、図2の行224に基づいて、ユーザ402の残りのアップリンク容量が、前に作成されたビデオストリーム層よりも大きいかまたはそれに等しく、ユーザ406の予約済みダウンリンクが、ユーザ402の残りのアップリンクの2倍よりも大きいかまたは2倍に等しいという決定が行われる。そのようなシナリオでは、図2の行224~229に基づいて、前のビデオストリーム層のビットレートが、ユーザ402の残りのアップリンク容量に加算され(行225)、前のビデオストリーム層が、残りのアップリンク容量の1/4に等しいビットレートを有するように再定義され(行226)、残りのアップリンク容量の3/4に等しいビットレートをもつ新しいビデオストリーム層が作成される(行228)。したがって、第1のビデオストリーム層は、100kbpsではなく50kbpsのビットレートを有するように再定義され、150kbpsのビットレートを有する新しい第2のビデオストリーム層が作成される。ユーザ404は、現在50kbpsビデオストリームである、第1のビデオストリーム層に割り当てられたままであり、ユーザ406は、150kbpsビデオストリームである、新たに作成された第2のビデオストリーム層に割り当てられる。ユーザ402は、現在、50kbpsビデオストリーム層と150kbpsビデオストリーム層とをアップロードするように割り当てられ、これは、ユーザ402のアップリンク容量を完全に利用する。
【0065】
第2の反復シーケンスの第3の反復が、第3の最低予約済みダウンリンクを有するユーザ408を処理する。ユーザ402が新しいビデオストリーム層を作成するために残っている、不十分なアップリンク容量がある。したがって、ユーザ408は、前のビデオストリーム層、すなわち、150kbpsビデオストリーム層に割り当てられる。
【0066】
図4Dは、図2の行205~237の反復シーケンスの第1の反復の結果を要約する。ユーザ402は、2つのビデオストリーム層、すなわち、50kbpsのビットレートを有する第1のビデオストリーム層と、150kbpsのビットレートを有する第2のビデオストリーム層とをアップロードするように割り当てられた。ユーザ402のアップリンク容量は、ユーザ402がアップロードすることになる2つのビデオストリーム層のビットレートを減算することによって更新され、0kbpsの残りのアップリンク容量に結果する。
【0067】
ユーザ404は、ユーザ402から第1のビデオストリーム層を受信するように割り当てられ、ユーザ406とユーザ408は両方とも、ユーザ402から第2のビデオストリーム層を受信するように割り当てられる。ユーザ404のダウンリンク容量は、50kbpsを減算することによって更新され、ユーザ406のダウンリンク容量は、150kbpsを減算することによって更新され、ユーザ408のダウンリンク容量は、150kbpsを減算することによって更新される。図4Eは、図2の行205~237の反復シーケンスの第1の反復の後の参加者のステータスを提示する。
【0068】
図4Fは、図2の行205~237の反復シーケンスの第2の反復の開始を示す。この第2の反復では、ユーザ404が4人のユーザの第2の最低アップリンク容量を有するので、ユーザ404は、処理される送出側参加者として選択され、ユーザ402、406、および408は各々、ユーザ404にサブスクライブしているサブスクライバ参加者である。もう一度、図3の擬似コード300において実装される実施形態に従って、送出側参加者に関する各サブスクライバ参加者について予約済みダウンリンクが決定される。ユーザ402は、標準解像度ビデオストリームを送出側参加者、すなわち、ユーザ404に要求した。したがって、ユーザ402の予約済みダウンリンクは、ユーザ402の残りのダウンリンク容量(200kbps)を、処理されるべき残っているユーザ402のサブスクリプションの数で除算したものとして計算される。ユーザ402は、依然として、処理されるべき残っている3つのサブスクリプション(ユーザ404、406、および408)を有し、したがって、ユーザ402の予約済みダウンリンクは、200kbps/3=66kbpsである。ユーザ406も、標準解像度ビデオストリームをユーザ404に要求した。したがって、ユーザ406の予約済みダウンリンクは、ユーザ406の残りのダウンリンク容量(450kbps)を、処理されるべき残っているユーザ406のサブスクリプションの数で除算したものとして計算される。ユーザ406のサブスクリプションのうちの1つ(ユーザ402)は、すでに処理されており、したがって、ユーザ406は、処理されるべき残っている2つのサブスクリプション(ユーザ404および408)のみを有する。したがって、ユーザ406の予約済みダウンリンクは、450kbps/2=225kbpsである。ユーザ408は、(図3の行309~315によって対処されるように)低解像度ビデオストリームをユーザ402に要求した。ユーザ408は、処理されるべき残っている高解像度サブスクリプションを有しない。したがって、ユーザ408の予約済みダウンリンクは、ユーザ408の残りのダウンリンク容量を、処理されるべき残っているユーザ408のサブスクリプションの数で除算したものに等しい。ユーザ408は、処理されるべき残っている2つのサブスクリプション(ユーザ404および406)を有する。したがって、ユーザ408の予約済みダウンリンクは、850kbps/2=425kbpsである。
【0069】
図4Gは、サブスクライバ参加者のさらなる処理を示す。図2の行212に従って、各サブスクライバ参加者は、予約済みダウンリンクに基づいて昇順でランク付けされる。図2の行215~236において実装される第2の反復シーケンスに従って、各サブスクライバ参加者は、ランク付けに基づいて連続的に処理される。第2の反復シーケンスの第1の反復が、最低予約済みダウンリンクを有するユーザ402を処理する。ユーザ402の予約済みダウンリンクに等しいサイズ(66kbps)を有する第1のビデオストリーム層が作成され、ユーザ402は、第1のビデオストリーム層に割り当てられる。66kbpsのビットレートを有する第1のビデオストリーム層の作成は、送出側参加者、ユーザ404が、66kbpsのビットレートを有する第1のビデオストリーム層をアップロードすることになることを示す。したがって、ユーザ404は、第1のビデオストリーム層に専用のユーザ404のアップリンク容量の66kbpsと、残っているアップリンク容量の234kbpsとを有する。
【0070】
第2の反復シーケンスの第2の反復が、第2の最低予約済みダウンリンクを有するユーザ406を処理する。(ユーザ404の残りのアップリンク容量よりも小さい)ユーザ406の予約済みダウンリンクが、前に作成されたビデオストリーム層の少なくとも2倍であるという決定が行われる。したがって、ユーザ406の予約済みダウンリンク(225kbps)に等しいサイズを有する新しい第2のビデオストリーム層が作成される。ユーザ404は、現在、2つのビデオストリーム、すなわち、66kbpsである第1のビデオストリームと、225kbpsである第2のビデオストリームとをアップロードするというタスクを与えられ、これは、ユーザ404が、残っているアップリンク容量の9kbpsを有することを意味する。ユーザ406は、第2のビデオストリーム層に割り当てられる。
【0071】
第2の反復シーケンスの第3の反復が、第3の最低予約済みダウンリンクを有するユーザ408を処理する。ユーザ404が新しいビデオストリーム層を作成するために残っている、不十分なアップリンク容量がある。したがって、ユーザ408は、前のビデオストリーム層、すなわち、225kbpsビデオストリーム層に割り当てられる。
【0072】
図4Hは、図2の行205~237の反復シーケンスの第2の反復の結果を要約する。ユーザ404は、2つのビデオストリーム層、すなわち、66kbpsのビットレートを有する第1のビデオストリーム層と、225kbpsのビットレートを有する第2のビデオストリーム層とをアップロードするように割り当てられた。ユーザ404のアップリンク容量は、ユーザ404がアップロードすることになる2つのビデオストリーム層のビットレートを減算することによって更新され、9kbpsの残りのアップリンク容量に結果する。ユーザ402は、ユーザ404から第1のビデオストリーム層を受信するように割り当てられ、ユーザ406とユーザ408は両方とも、ユーザ404から第2のビデオストリーム層を受信するように割り当てられる。ユーザ402のダウンリンク容量は、66kbpsを減算することによって更新され、ユーザ406のダウンリンク容量は、225kbpsを減算することによって更新され、ユーザ408のダウンリンク容量は、225kbpsを減算することによって更新される。図4Iは、図2の行205~237の反復シーケンスの第2の反復の後の参加者のステータスを提示する。
【0073】
図4Jは、図2の行205~237の反復シーケンスの第3の反復の開始を示す。この第3の反復では、ユーザ406が4人のユーザの第3の最低アップリンク容量を有するので、ユーザ406は、処理される送出側参加者として選択され、ユーザ402、404、および408は各々、ユーザ406にサブスクライブしているサブスクライバ参加者である。もう一度、図3の擬似コード300において実装される実施形態に従って、この反復ではユーザ406である、送出側参加者に関する各サブスクライバ参加者について予約済みダウンリンクが決定される。ユーザ402は、標準解像度ビデオストリームを送出側参加者、すなわち、ユーザ406に要求した。したがって、ユーザ402の予約済みダウンリンクは、ユーザ402の残りのダウンリンク容量(134kbps)を、処理されるべき残っているユーザ402のサブスクリプションの数で除算したものとして計算される。ユーザ402は、現在、処理されるべき残っている2つのサブスクリプション(ユーザ406および408)を有し、したがって、ユーザ402の予約済みダウンリンクは、134kbps/2=67kbpsである。ユーザ404は、低解像度ビデオストリームをユーザ406に要求した。ユーザ404は、処理されるべき残っている高解像度サブスクリプションを有しない。したがって、ユーザ404の予約済みダウンリンクは、ユーザ404の残りのダウンリンク容量(150kbps)を、処理されるべき残っているユーザ404のサブスクリプションの数で除算したものとして計算される。ユーザ404は、処理されるべき残っている2つのサブスクリプション(ユーザ406および408)を有する。したがって、ユーザ404の予約済みダウンリンクは、150kbps/2=75kbpsである。ユーザ408は、低解像度ビデオストリームをユーザ406に要求した。ユーザ408は、処理されるべき残っている高解像度サブスクリプションを有しない。したがって、ユーザ408の予約済みダウンリンクは、ユーザ408の残りのダウンリンク容量を、処理されるべき残っているユーザ408のサブスクリプションの数で除算したものに等しい。ユーザ408は、処理されるべき残っている1つのサブスクリプション(ユーザ406)のみを有する。したがって、ユーザ408の予約済みダウンリンクは、625kbps/1=625kbpsである。
【0074】
図4Kは、サブスクライバ参加者のさらなる処理を示す。図2の行212に従って、各サブスクライバ参加者は、予約済みダウンリンクに基づいて昇順でランク付けされる。図2の行215~236において実装される第2の反復シーケンスに従って、各サブスクライバ参加者は、ランク付けに基づいて連続的に処理される。第2の反復シーケンスの第1の反復が、最低予約済みダウンリンクを有するユーザ402を処理する。ユーザ402の予約済みダウンリンクに等しいサイズ(67kbps)を有する第1のビデオストリーム層が作成され、ユーザ402は、第1のビデオストリーム層に割り当てられる。これは、送出側参加者、ユーザ406が、67kbpsのビットレートを有する第1のビデオストリーム層をアップロードすることになることを示す。したがって、ユーザ406は、第1のビデオストリーム層に専用のユーザ406のアップリンク容量の67kbpsと、残っているアップリンク容量の283kbpsとを有する。
【0075】
第2の反復シーケンスの第2の反復が、第2の最低予約済みダウンリンクを有するユーザ404を処理する。ユーザ404の予約済みダウンリンクが、前のビデオストリーム層に関する差しきい値を満たさない、すなわち、前のビデオストリーム層のビットレートの少なくとも2倍でないという決定が行われる。したがって、ユーザ404は、67kbpsのビットレートを有する、前に作成された第1のビデオストリーム層に割り当てられる。
【0076】
第2の反復シーケンスの第3の反復が、第3の最低予約済みダウンリンクを有するユーザ408を処理する。ユーザ406の残りのアップリンク容量は、ユーザ408の予約済みダウンリンクよりも小さい。したがって、潜在的な新しい層のサイズは、ユーザ406の残りのアップリンク容量、すなわち、283kbpsに等しくなるように設定される。潜在的な新しい層のサイズは、差しきい値を満たし、すなわち、前のビデオストリーム層のビットレートの少なくとも2倍である。したがって、283kbpsのビットレートを有する、新しい第2のビデオストリーム層が作成される。ユーザ408は、第2のビデオストリーム層に割り当てられる。
【0077】
図4Lは、図2の行205~237の反復シーケンスの第3の反復の結果を要約する。ユーザ406は、2つのビデオストリーム層、すなわち、67kbpsのビットレートを有する第1のビデオストリーム層と、283kbpsのビットレートを有する第2のビデオストリーム層とをアップロードするように割り当てられた。ユーザ406のアップリンク容量は、ユーザ406がアップロードすることになる2つのビデオストリーム層のビットレートを減算することによって更新され、0kbpsの残りのアップリンク容量に結果する。ユーザ402とユーザ404は両方とも、ユーザ406から第1のビデオストリーム層を受信するように割り当てられ、ユーザ408は、ユーザ406から第2のビデオストリーム層を受信するように割り当てられる。ユーザ402のダウンリンク容量は、67kbpsを減算することによって更新され、ユーザ404のダウンリンク容量は、67kbpsを減算することによって更新され、ユーザ408のダウンリンク容量は、283kbpsを減算することによって更新される。図4Mは、図2の行205~237の反復シーケンスの第3の反復の後の参加者のステータスを提示する。
【0078】
図4Nは、図2の行205~237の反復シーケンスの第4および最終の反復の開始を示す。この第4の反復では、ユーザ408は、処理される送出側参加者として選択され、ユーザ402、404、および406は各々、ユーザ408にサブスクライブしているサブスクライバ参加者である。もう一度、図3の擬似コード300において実装される実施形態に従って、送出側参加者に関する各サブスクライバ参加者について予約済みダウンリンクが決定される。ユーザ402は、標準解像度ビデオストリームを送出側参加者、すなわち、ユーザ408に要求した。したがって、ユーザ402の予約済みダウンリンクは、ユーザ402の残りのダウンリンク容量(67kbps)を、処理されるべき残っているユーザ402のサブスクリプションの数で除算したものとして計算される。ユーザ402は、現在、処理されるべき残っている1つのサブスクリプション(ユーザ408)のみを有し、したがって、ユーザ402の予約済みダウンリンクは、67kbps/1=67kbpsである。ユーザ404は、低解像度ビデオストリームをユーザ408に要求した。ユーザ404は、処理されるべき残っている高解像度サブスクリプションを有しない。したがって、ユーザ404の予約済みダウンリンクは、ユーザ404の残りのダウンリンク容量(83kbps)を、処理されるべき残っているユーザ404のサブスクリプションの数で除算したものとして計算される。ユーザ404は、処理されるべき残っている1つのサブスクリプション(ユーザ408)のみを有する。したがって、ユーザ404の予約済みダウンリンクは、83kbps/1=83kbpsである。ユーザ406は、標準解像度ビデオストリームをユーザ408に要求した。したがって、ユーザ406の予約済みダウンリンクは、ユーザ406の残りのダウンリンク容量を、処理されるべき残っているユーザ406のサブスクリプションの数で除算したものに等しい。ユーザ406は、処理されるべき残っている1つのサブスクリプション(ユーザ408)のみを有する。したがって、ユーザ406の予約済みダウンリンクは、225kbps/1=225kbpsである。
【0079】
図4Oは、サブスクライバ参加者のさらなる処理を示す。図2の行212に従って、各サブスクライバ参加者は、予約済みダウンリンクに基づいて昇順でランク付けされる。図2の行215~236において実装される第2の反復シーケンスに従って、各サブスクライバ参加者は、ランク付けに基づいて連続的に処理される。第2の反復シーケンスの第1の反復が、最低予約済みダウンリンクを有するユーザ402を処理する。ユーザ402の予約済みダウンリンクに等しいサイズ(67kbps)を有する第1のビデオストリーム層が作成され、ユーザ402は、第1のビデオストリーム層に割り当てられる。ユーザ408は、第1のビデオストリーム層に専用のユーザ408のアップリンク容量の67kbpsと、残っているアップリンク容量の733kbpsとを有する。
【0080】
第2の反復シーケンスの第2の反復が、第2の最低予約済みダウンリンクを有するユーザ404を処理する。ユーザ404の予約済みダウンリンクが、前のビデオストリーム層に関する差しきい値を満たさない、すなわち、前のビデオストリーム層のビットレートの少なくとも2倍でないという決定が行われる。したがって、ユーザ404は、67kbpsの前に作成された第1のビデオストリーム層に割り当てられる。
【0081】
第2の反復シーケンスの第3の反復が、第3の最低予約済みダウンリンクを有するユーザ406を処理する。ユーザ406の予約済みダウンリンク(225kbps)は、ユーザ408の残りのアップリンク容量(733kbps)よりも小さい。したがって、潜在的な新しい層のサイズは、ユーザ406の予約済みダウンリンク、すなわち、225kbpsに等しくなるように設定される。潜在的な新しい層のサイズは、差しきい値を満たし、すなわち、前のビデオストリーム層のビットレートの少なくとも2倍である。したがって、225kbpsのビットレートを有する、新しい第2のビデオストリーム層が作成される。ユーザ406は、第2のビデオストリーム層に割り当てられる。
【0082】
図4Pは、図2の行205~237の反復シーケンスの第4の反復の結果を要約する。ユーザ408は、2つのビデオストリーム層、すなわち、67kbpsのビットレートを有する第1のビデオストリーム層と、225kbpsのビットレートを有する第2のビデオストリーム層とをアップロードするように割り当てられた。ユーザ408のアップリンク容量は、ユーザ408がアップロードすることになる2つのビデオストリーム層のビットレートを減算することによって更新され、508kbpsの残りのアップリンク容量に結果する。ユーザ402とユーザ404は両方とも、ユーザ408から第1のビデオストリーム層を受信するように割り当てられ、ユーザ406は、ユーザ408から第2のビデオストリーム層を受信するように割り当てられる。ユーザ402のダウンリンク容量は、67kbpsを減算することによって更新され、ユーザ404のダウンリンク容量は、67kbpsを減算することによって更新され、ユーザ406のダウンリンク容量は、225kbpsを減算することによって更新される。図4Qは、図2の行205~237の反復シーケンスの第4および最終の反復の後の参加者のステータスを提示する。見られ得るように、各送出側参加者(この場合、各参加者)は、参加者がアップロードすることになる1つまたは複数のビデオストリーム層を割り当てられ、各サブスクライバ参加者(この場合、各参加者)は、サブスクライバ参加者がサブスクライブしている各送出側参加者から、特定のビットレートを有する1つのビデオストリームを受信するように割り当てられた。
【0083】
上記で説明された例示的なシナリオは、グループビデオ通話におけるあらゆる参加者が送出側参加者とサブスクライバ参加者の両方である例示的なシナリオについて説明したが、本開示が、異なる特性を有するグループビデオ通話を処理および管理することが可能であることを諒解されたい。たとえば、何人かの参加者のみが、ビデオストリームをアップロードしているように、参加者のサブセットが送出側参加者であり、および/または、何人かの参加者のみが、他の参加者からビデオストリームを受信しているように、参加者のサブセットがサブスクライバ参加者である。同様に、上記で説明された例示的なシナリオは、あらゆる参加者があらゆる他の参加者からビデオストリームを受信する例示的なシナリオについて説明したが、本開示が、異なるシナリオに対処することができることを諒解されたい。たとえば、何人かのサブスクライバ参加者は、送出側参加者のサブセットからビデオフィードを受信するためにサブスクライブしているにすぎないことがある。多くの変形形態が可能である。
【0084】
上記で説明された例示的な実施形態は、概して、できる限り多くの送出側参加者のアップリンク容量と、できる限り多くのサブスクライバ参加者のダウンリンク容量とを利用することを試みた。しかしながら、いくつかのシナリオでは、追加のアップリンク容量および/またはダウンリンク容量が利用可能である場合でも、ビットレートに関して限度を課すかまたは上限を定めることが望ましいことがある。たとえば、サブスクライバ参加者が低解像度ビデオストリームを送出側参加者に要求した場合、低解像度ビデオストリームのビットレートの上限を定めることは、サブスクライバ参加者が十分なダウンリンク容量を有し、送出側参加者が、極めて高いビットレートビデオストリームに適応するために十分なアップリンク容量を有する場合でも、望ましいことがある。したがって、様々な実施形態では、特定の品質レベルのサブスクリプションが、最大ビットレートにおいて上限を定められ得る。たとえば、低品質サブスクリプションが、第1の最大ビットレートにおいて上限を定められ得、標準または中間品質サブスクリプションが、第1の最大ビットレートよりも大きい第2の最大ビットレートにおいて上限を定められ得、高品質サブスクリプションが、第2の最大ビットレートよりも大きい第3の最大ビットレートにおいて上限を定められ得るか、または、様々な実施形態ではまったく上限を定められないことがある。
【0085】
図5は、本開示の一実施形態による、グループビデオ通話サイマルキャストストリームを最適化することに関連付けられた例示的な方法500を示す。別段に明記されていない限り、本明細書で説明される様々な実施形態の範囲内で、同様の順序または代替の順序で、あるいは並行して実施される、追加のステップ、より少ないステップ、または代替のステップがあり得ることを諒解されたい。
【0086】
ブロック502において、例示的な方法500は、グループビデオ通話における参加者のセットを識別することができ、各参加者が、アップリンク容量とダウンリンク容量とに関連付けられ、参加者のセットが、送出側参加者のセットとサブスクライバ参加者のセットとを含む。ブロック504において、例示的な方法500は、送出側参加者のセットの各送出側参加者について、送出側参加者にサブスクライブしているサブスクライバ参加者のダウンリンク容量に基づいて、送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層を決定することができる。ブロック506において、例示的な方法500は、サブスクライバ参加者のセットの各サブスクライバ参加者について、サブスクライバ参加者がサブスクライブしている各送出側参加者によってアップロードされるべき1つまたは複数のビデオストリーム層のうちの1つのビデオストリーム層を受信するように、サブスクライバ参加者を割り当てることができる。
【0087】
本開示の様々な実施形態に関連する多くの他の使用、適用例、および/または変形形態があり得ることが企図される。たとえば、いくつかの場合には、ユーザは、開示される技術を利用することをオプトイン(opt-in)するか否かを選定することができる。開示される技術は、様々なプライバシー設定および選好が維持されることを確実にすることもでき、プライベート情報が漏らされるのを防ぐことができる。別の例では、本開示の様々な実施形態は、時間とともに学習し、改善し、および/または改良され得る。
【0088】
ソーシャルネットワーキングシステム-例示的な実装形態
図6は、本開示の一実施形態による、様々なシナリオにおいて利用され得る例示的なシステム600のネットワーク図を示す。システム600は、1つまたは複数のユーザデバイス610と、1つまたは複数の外部システム620と、ソーシャルネットワーキングシステム(またはサービス)630と、ネットワーク650とを含む。一実施形態では、上記で説明された実施形態に関して説明されるソーシャルネットワーキングサービス、プロバイダ、および/またはシステムは、ソーシャルネットワーキングシステム630として実装され得る。例示の目的で、図6によって示されているシステム600の実施形態は、単一の外部システム620と単一のユーザデバイス610とを含む。しかしながら、他の実施形態では、システム600は、より多くのユーザデバイス610および/またはより多くの外部システム620を含み得る。いくつかの実施形態では、ソーシャルネットワーキングシステム630は、ソーシャルネットワークプロバイダによって動作されるが、外部システム620は、外部システム620が、異なるエンティティによって動作され得るという点でソーシャルネットワーキングシステム630とは別個である。しかしながら、様々な実施形態では、ソーシャルネットワーキングシステム630と外部システム620とは連携して動作して、ソーシャルネットワーキングシステム630のユーザ(またはメンバー)にソーシャルネットワーキングサービスを提供する。この意味で、ソーシャルネットワーキングシステム630は、外部システム620などの他のシステムがインターネットにわたってユーザにソーシャルネットワーキングサービスおよび機能性を提供するために使用し得る、プラットフォームまたはバックボーンを提供する。
【0089】
ユーザデバイス610は、ユーザから入力を受信し、ネットワーク650を介してデータを送信および受信することができる、1つまたは複数のコンピューティングデバイスを備える。一実施形態では、ユーザデバイス610は、たとえば、Microsoft Windows互換オペレーティングシステム(OS)、Apple OS X、および/またはLinuxディストリビューションを実行する従来のコンピュータシステムである。別の実施形態では、ユーザデバイス610は、スマートフォン、タブレット、携帯情報端末(PDA)、携帯電話など、コンピュータ機能性を有するデバイスであり得る。ユーザデバイス610は、ネットワーク650を介して通信するように構成される。ユーザデバイス610は、アプリケーション、たとえば、ユーザデバイス610のユーザがソーシャルネットワーキングシステム630と対話することを可能にするブラウザアプリケーションを実行することができる。別の実施形態では、ユーザデバイス610は、iOSおよびANDROIDなど、ユーザデバイス610のネイティブオペレーティングシステムによって提供されるアプリケーションプログラミングインターフェース(API)を通して、ソーシャルネットワーキングシステム630と対話する。ユーザデバイス610は、ネットワーク650を介して外部システム620およびソーシャルネットワーキングシステム630と通信するように構成され、ネットワーク650は、ワイヤードおよび/またはワイヤレス通信システムを使用した、ローカルエリアネットワークおよび/またはワイドエリアネットワークの任意の組合せを備え得る。
【0090】
一実施形態では、ネットワーク650は、標準通信技術およびプロトコルを使用する。したがって、ネットワーク650は、イーサネット、802.11、ワールドワイドインターオペラビリティフォーマイクロウェーブアクセス(WiMAX)、3G、4G、CDMA、GSM、LTE、デジタル加入者回線(DSL)などの技術を使用するリンクを含むことができる。同様に、ネットワーク650上で使用されるネットワーキングプロトコルは、マルチプロトコルラベルスイッチング(MPLS)、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、ユーザデータグラムプロトコル(UDP)、ハイパーテキストトランスポートプロトコル(HTTP)、簡易メール転送プロトコル(SMTP)、ファイル転送プロトコル(FTP)などを含むことができる。ネットワーク650を介して交換されるデータは、ハイパーテキストマークアップ言語(HTML)と拡張可能マークアップ言語(XML)とを含む、技術および/またはフォーマットを使用して表され得る。さらに、全部または一部のリンクは、セキュアソケット層(SSL)、トランスポート層セキュリティ(TLS)、およびインターネットプロトコルセキュリティ(IPsec)など、従来の暗号化技術を使用して暗号化され得る。
【0091】
一実施形態では、ユーザデバイス610は、ブラウザアプリケーション612を使用して、外部システム620からおよびソーシャルネットワーキングシステム630から受信されたマークアップ言語ドキュメント614を処理することによって、外部システム620からのコンテンツおよび/またはソーシャルネットワーキングシステム630からのコンテンツを表示し得る。マークアップ言語ドキュメント614は、コンテンツと、そのコンテンツのフォーマッティングまたは提示を記述する1つまたは複数の命令とを識別する。マークアップ言語ドキュメント614中に含まれる命令を実行することによって、ブラウザアプリケーション612は、マークアップ言語ドキュメント614によって記述されるフォーマットまたは提示を使用して、識別されたコンテンツを表示する。たとえば、マークアップ言語ドキュメント614は、外部システム620およびソーシャルネットワーキングシステム630から取り出されたテキストおよび/または画像データを含む複数のフレームを有するウェブページを生成および表示するための命令を含む。様々な実施形態では、マークアップ言語ドキュメント614は、拡張可能マークアップ言語(XML)データ、拡張可能ハイパーテキストマークアップ言語(XHTML)データ、または他のマークアップ言語データを含む、データファイルを備える。さらに、マークアップ言語ドキュメント614は、外部システム620とユーザデバイス610との間のデータ交換を容易にするために、JavaScriptオブジェクト表記法(JSON)データと、パディング付きのJSON(JSONP)と、JavaScriptデータとを含み得る。ユーザデバイス610上のブラウザアプリケーション612は、マークアップ言語ドキュメント614を復号するためにJavaScriptコンパイラを使用し得る。
【0092】
マークアップ言語ドキュメント614はまた、FLASH(商標)アプリケーションまたはUnity(商標)アプリケーション、SilverLight(商標)アプリケーションフレームワークなど、アプリケーションまたはアプリケーションフレームワークを含むか、あるいはそれらのアプリケーションまたはアプリケーションフレームワークにリンクし得る。
【0093】
一実施形態では、ユーザデバイス610は、ユーザデバイス610のユーザがソーシャルネットワーキングシステム630にログインしたかどうかを示すデータを含む、1つまたは複数のクッキー616をも含み、クッキー616は、ソーシャルネットワーキングシステム630からユーザデバイス610に通信されるデータの修正を可能にし得る。
【0094】
外部システム620は、ネットワーク650を使用してユーザデバイス610に通信される1つまたは複数のウェブページ622a、622bを含む、1つまたは複数のウェブサーバを含む。外部システム620は、ソーシャルネットワーキングシステム630とは別個である。たとえば、外部システム620は、第1のドメインに関連付けられるが、ソーシャルネットワーキングシステム630は、別個のソーシャルネットワーキングドメインに関連付けられる。外部システム620中に含まれるウェブページ622a、622bは、コンテンツを識別し、識別されたコンテンツのフォーマッティングまたは提示を指定する命令を含む、マークアップ言語ドキュメント614を備える。
【0095】
ソーシャルネットワーキングシステム630は、ソーシャルネットワークのための1つまたは複数のコンピューティングデバイスを含み、ソーシャルネットワークは、複数のユーザを含み、ソーシャルネットワークのユーザにソーシャルネットワークの他のユーザと通信および対話する能力を提供する。いくつかの事例では、ソーシャルネットワークは、グラフ、すなわち、エッジとノードとを含むデータ構造によって表され得る。限定はしないが、データベース、オブジェクト、クラス、メタ要素、ファイル、または任意の他のデータ構造を含む、他のデータ構造も、ソーシャルネットワークを表すために使用され得る。ソーシャルネットワーキングシステム630は、オペレータによって、運用、管理、または制御され得る。ソーシャルネットワーキングシステム630のオペレータは、人間、自動化されたアプリケーション、または、コンテンツを管理し、ポリシーを規制し、ソーシャルネットワーキングシステム630内の使用量メトリックを収集するための一連のアプリケーションであり得る。任意のタイプのオペレータが使用され得る。
【0096】
ユーザは、ソーシャルネットワーキングシステム630に加わり、次いで、自身がつなげられることを望む、ソーシャルネットワーキングシステム630の任意の数の他のユーザへのつながりを追加し得る。本明細書で使用される「友達」という用語は、ユーザがソーシャルネットワーキングシステム630を介して、つながり、関連付け、または関係を形成した、ソーシャルネットワーキングシステム630の任意の他のユーザを指す。たとえば、一実施形態では、ソーシャルネットワーキングシステム630内のユーザがソーシャルグラフ中のノードとして表される場合、「友達」という用語は、2つのユーザノード間に形成され、2つのユーザノードを直接接続する、エッジを指すことがある。
【0097】
つながりは、ユーザによって明示的に追加され得るか、または、ユーザの共通特性(たとえば、同じ教育機関の卒業生であるユーザ)に基づいて、ソーシャルネットワーキングシステム630によって自動的に作成され得る。たとえば、第1のユーザが、友達になるための特定の他のユーザを具体的に選択する。ソーシャルネットワーキングシステム630内のつながりは、通常、両方向であるが、両方向である必要はなく、したがって、「ユーザ」および「友達」という用語は枠組みに依存する。ソーシャルネットワーキングシステム630のユーザ間のつながりは、通常、双方向(「二方向」)または「相互」であるが、つながりはまた、単方向または「一方向」であり得る。たとえば、ボブおよびジョーが、両者ともソーシャルネットワーキングシステム630のユーザであり、互いにつながっている場合、ボブおよびジョーは互いのつながりである。一方、ボブは、ジョーによってソーシャルネットワーキングシステム630に通信されたデータを閲覧するためにジョーにつながることを望むが、ジョーは、相互つながりを形成することを望まない場合、単方向つながりが確立され得る。ユーザ間のつながりは直接つながりであり得るが、ソーシャルネットワーキングシステム630のいくつかの実施形態は、つながりが、つながりの1つまたは複数のレベルまたは分離の程度を介して間接的であることを可能にする。
【0098】
ユーザ間のつながりを確立および維持し、ユーザ間の対話を可能にすることに加えて、ソーシャルネットワーキングシステム630は、ソーシャルネットワーキングシステム630によってサポートされる様々なタイプのアイテムに対してアクションをとる能力をユーザに提供する。これらのアイテムは、ソーシャルネットワーキングシステム630のユーザが属し得るグループまたはネットワーク(すなわち、人々、エンティティ、およびコンセプトのソーシャルネットワーク)、ユーザが関心があり得るイベントまたはカレンダーエントリ、ユーザがソーシャルネットワーキングシステム630を介して使用し得るコンピュータベースのアプリケーション、ソーシャルネットワーキングシステム630によってまたはソーシャルネットワーキングシステム630を通して提供されるサービスを介してユーザがアイテムを購入または販売することを可能にする取引、およびユーザがソーシャルネットワーキングシステム630内外で実施し得る広告との対話を含み得る。これらは、ユーザがソーシャルネットワーキングシステム630に作用し得るアイテムの数例にすぎず、多くの他の例が可能である。ユーザは、ソーシャルネットワーキングシステム630において、あるいは、ソーシャルネットワーキングシステム630とは別個の、またはネットワーク650を介してソーシャルネットワーキングシステム630に結合された外部システム620において、表されることが可能であるものと対話し得る。
【0099】
ソーシャルネットワーキングシステム630は、様々なエンティティをリンクすることも可能である。たとえば、ソーシャルネットワーキングシステム630は、ユーザが互いと対話すること、ならびに、API、ウェブサービス、または他の通信チャネルを通して外部システム620または他のエンティティと対話することを可能にする。ソーシャルネットワーキングシステム630は、複数のエッジによって相互接続された複数のノードを備える「ソーシャルグラフ」を生成および維持する。ソーシャルグラフ中の各ノードは、別のノードに作用することができるエンティティ、および/または別のノードによって作用され得るエンティティを表し得る。ソーシャルグラフは様々なタイプのノードを含み得る。ノードのタイプの例は、ユーザ、非人間エンティティ、コンテンツアイテム、ウェブページ、グループ、アクティビティ、メッセージ、コンセプト、およびソーシャルネットワーキングシステム630内のオブジェクトによって表され得る任意の他のものを含む。ソーシャルグラフ中の2つのノード間のエッジは、ノード関係から生じ得る、またはノードのうちの一方によって他方に対して実施されたアクションから生じ得る、2つのノード間の特定の種類のつながりまたは関連付けを表し得る。いくつかの場合には、ノード間のエッジは重み付けされ得る。エッジの重みは、ノード間のつながりまたは関連付けの強さなど、エッジに関連付けられた属性を表すことができる。異なるタイプのエッジが、異なる重みを提供され得る。たとえば、あるユーザが別のユーザに「いいね!」を表明するときに作成されるエッジは、ある重みを与えられ得るが、ユーザが別のユーザを友達にするときに作成されるエッジは、異なる重みを与えられ得る。
【0100】
一例として、第1のユーザが第2のユーザを友達として識別するとき、第1のユーザを表すノードと第2のユーザを表す第2のノードとを接続する、ソーシャルグラフ中のエッジが生成される。様々なノードが、互いと関係または対話するとき、ソーシャルネットワーキングシステム630は、それらの関係および対話を反映するように、それらの様々なノードを接続するエッジを修正する。
【0101】
ソーシャルネットワーキングシステム630は、ソーシャルネットワーキングシステム630とのユーザの対話を向上させる、ユーザ生成されたコンテンツをも含む。ユーザ生成されたコンテンツは、ユーザがソーシャルネットワーキングシステム630に追加、アップロード、送出、または「投稿」することができるものを含み得る。たとえば、ユーザは、ユーザデバイス610からソーシャルネットワーキングシステム630に投稿を通信する。投稿は、ステータス更新または他のテキストデータなどのデータ、ロケーション情報、写真などの画像、ビデオ、リンク、音楽、あるいは他の同様のデータおよび/またはメディアを含み得る。また、コンテンツは、サードパーティによってソーシャルネットワーキングシステム630に追加され得る。コンテンツ「アイテム」は、ソーシャルネットワーキングシステム630内でオブジェクトとして表される。このようにして、ソーシャルネットワーキングシステム630のユーザは、様々な通信チャネルを通して様々なタイプのメディアのテキストおよびコンテンツアイテムを投稿することによって、互いと通信することを促される。そのような通信は、互いとのユーザの対話を増加させ、ユーザがソーシャルネットワーキングシステム630と対話する頻度を増加させる。
【0102】
ソーシャルネットワーキングシステム630は、ウェブサーバ632と、API要求サーバ634と、ユーザプロファイルストア636と、つながりストア638と、アクションロガー640と、アクティビティログ642と、認証サーバ644とを含む。本発明の一実施形態では、ソーシャルネットワーキングシステム630は、様々なアプリケーションについて、追加の構成要素、より少ない構成要素、または異なる構成要素を含み得る。ネットワークインターフェース、セキュリティ機構、ロードバランサ、フェイルオーバサーバ、管理およびネットワーク動作コンソールなどの他の構成要素は、システムの詳細を不明瞭にしないように示されていない。
【0103】
ユーザプロファイルストア636は、ユーザによって申告された、またはソーシャルネットワーキングシステム630によって推測された、職歴、学歴、趣味または選好、ロケーションなど、経歴情報、人口統計学的情報、および他のタイプの記述情報を含む、ユーザアカウントに関する情報を維持する。この情報は、各ユーザが一意に識別されるように、ユーザプロファイルストア636に記憶される。ソーシャルネットワーキングシステム630はまた、異なるユーザ間の1つまたは複数のつながりを記述するデータをつながりストア638に記憶する。つながり情報は、同様または共通の職歴、グループメンバーシップ、趣味、または学歴を有するユーザを示し得る。さらに、ソーシャルネットワーキングシステム630は、ユーザが他のユーザとの自身の関係を指定することを可能にする、異なるユーザ間のユーザ定義されたつながりを含む。たとえば、ユーザ定義されたつながりは、友達、同僚、パートナーなど、ユーザの現実の関係に匹敵する他のユーザとの関係を、ユーザが生成することを可能にする。ユーザは、あらかじめ定義されたタイプのつながりから選択するか、またはユーザ自身のつながりタイプを必要に応じて定義し得る。非人間エンティティ、バケット、クラスタセンター、画像、関心事、ページ、外部システム、コンセプトなど、ソーシャルネットワーキングシステム630内の他のノードとのつながりも、つながりストア638に記憶される。
【0104】
ソーシャルネットワーキングシステム630は、ユーザが対話し得るオブジェクトに関するデータを維持する。このデータを維持するために、ユーザプロファイルストア636およびつながりストア638は、ソーシャルネットワーキングシステム630によって維持される対応するタイプのオブジェクトのインスタンスを記憶する。各オブジェクトタイプは、オブジェクトのタイプに適した情報を記憶するのに好適である情報フィールドを有する。たとえば、ユーザプロファイルストア636は、ユーザのアカウントとユーザのアカウントに関係する情報とを記述するのに好適なフィールドをもつデータ構造を含んでいる。特定のタイプの新しいオブジェクトが作成されるとき、ソーシャルネットワーキングシステム630は、対応するタイプの新しいデータ構造を初期化し、この新しいデータ構造に一意のオブジェクト識別子を割り当て、必要に応じて、そのオブジェクトにデータを追加し始める。これは、たとえば、ユーザがソーシャルネットワーキングシステム630のユーザになるときに発生し得、ソーシャルネットワーキングシステム630は、ユーザプロファイルストア636にユーザプロファイルの新しいインスタンスを生成し、ユーザアカウントに一意の識別子を割り当て、ユーザによって提供される情報でユーザアカウントのフィールドをポピュレートし始める。
【0105】
つながりストア638は、他のユーザへのユーザのつながり、外部システム620へのつながり、または他のエンティティへのつながりを記述するのに好適なデータ構造を含む。つながりストア638はまた、つながりタイプをユーザのつながりに関連付け得、つながりタイプは、ユーザに関する情報へのアクセスを規制するためにユーザのプライバシー設定とともに使用され得る。本発明の一実施形態では、ユーザプロファイルストア636およびつながりストア638は、連合データベースとして実装され得る。
【0106】
つながりストア638と、ユーザプロファイルストア636と、アクティビティログ642とに記憶されたデータは、様々なオブジェクトを識別するためのノードと、異なるオブジェクト間の関係を識別するためにノードを接続するエッジとを使用するソーシャルグラフを、ソーシャルネットワーキングシステム630が生成することを可能にする。たとえば、第1のユーザがソーシャルネットワーキングシステム630内で第2のユーザとのつながりを確立する場合、ユーザプロファイルストア636からの第1のユーザおよび第2のユーザのユーザアカウントが、ソーシャルグラフ中のノードとして働き得る。つながりストア638によって記憶された第1のユーザと第2のユーザとの間のつながりは、第1のユーザに関連付けられたノードと第2のユーザに関連付けられたノードとの間のエッジである。この例を続けると、第2のユーザは、次いで、ソーシャルネットワーキングシステム630内で第1のユーザにメッセージを送出し得る。メッセージを送出するアクションは、第1のユーザおよび第2のユーザを表す、ソーシャルグラフ中の2つのノード間の別のエッジであり、メッセージを送出するアクションは記憶され得る。さらに、メッセージ自体が、第1のユーザおよび第2のユーザを表すノードに接続される別のノードとして、ソーシャルグラフ中で識別され、ソーシャルグラフ中に含まれ得る。
【0107】
別の例では、第1のユーザは、ソーシャルネットワーキングシステム630によって維持される画像中で(または、代替的に、ソーシャルネットワーキングシステム630の外部の別のシステムによって維持される画像中で)第2のユーザをタグ付けし得る。画像は、それ自体がソーシャルネットワーキングシステム630内のノードとして表され得る。このタグ付けアクションは、第1のユーザと第2のユーザとの間のエッジを作成し、ならびに、ユーザの各々と、同じくソーシャルグラフ中のノードである画像との間のエッジを作成し得る。また別の例では、ユーザがイベントに参加することを確認した場合、ユーザおよびイベントは、ユーザプロファイルストア636から取得されるノードであり、イベントへの参加は、アクティビティログ642から取り出され得るノード間のエッジである。ソーシャルグラフを生成および維持することによって、ソーシャルネットワーキングシステム630は、多くの異なるタイプのオブジェクトを記述するデータと、それらのオブジェクトの間の対話およびつながりとを含み、社交上関連する情報の豊富なソースを提供する。
【0108】
ウェブサーバ632は、ネットワーク650を介して、ソーシャルネットワーキングシステム630を1つまたは複数のユーザデバイス610および/または1つまたは複数の外部システム620にリンクする。ウェブサーバ632は、ウェブページ、ならびに、Java、JavaScript、Flash、XMLなどの他のウェブ関係コンテンツを供給する。ウェブサーバ632は、メールサーバ、または、ソーシャルネットワーキングシステム630と1つまたは複数のユーザデバイス610との間のメッセージを受信およびルーティングするための他のメッセージング機能性を含み得る。メッセージは、インスタントメッセージ、キューメッセージ(たとえば、電子メール)、テキストおよびSMSメッセージ、または任意の他の好適なメッセージングフォーマットであり得る。
【0109】
API要求サーバ634は、1つまたは複数の外部システム620およびユーザデバイス610が、1つまたは複数のAPI関数を呼び出すことによって、ソーシャルネットワーキングシステム630からアクセス情報を呼び出すことを可能にする。API要求サーバ634は、外部システム620が、APIを呼び出すことによって、ソーシャルネットワーキングシステム630に情報を送出することをも可能にし得る。外部システム620は、一実施形態では、ネットワーク650を介してソーシャルネットワーキングシステム630にAPI要求を送出し、API要求サーバ634は、API要求を受信する。API要求サーバ634は、API要求に関連付けられたAPIを呼び出すことによって要求を処理して適切な応答を生成し、API要求サーバ634は、この応答を、ネットワーク650を介して外部システム620に通信する。たとえば、API要求に応答して、API要求サーバ634は、外部システム620にログインしたユーザのつながりなど、ユーザに関連付けられたデータを収集し、収集されたデータを外部システム620に通信する。別の実施形態では、ユーザデバイス610は、外部システム620と同じ様式で、APIを介してソーシャルネットワーキングシステム630と通信する。
【0110】
アクションロガー640は、ソーシャルネットワーキングシステム630内での、および/またはソーシャルネットワーキングシステム630外でのユーザアクションに関する通信を、ウェブサーバ632から受信することが可能である。アクションロガー640は、ユーザアクションに関する情報でアクティビティログ642をポピュレートし、ソーシャルネットワーキングシステム630の内部およびソーシャルネットワーキングシステム630の外部でソーシャルネットワーキングシステム630のユーザによってとられた様々なアクションを、ソーシャルネットワーキングシステム630が発見することを可能にする。特定のユーザがソーシャルネットワーキングシステム630上の別のノードに関してとる任意のアクションが、アクティビティログ642あるいは同様のデータベースまたは他のデータリポジトリに維持される情報を通して、各ユーザのアカウントに関連付けられ得る。識別および記憶される、ソーシャルネットワーキングシステム630内でユーザによってとられるアクションの例は、たとえば、別のユーザへのつながりを追加すること、別のユーザにメッセージを送出すること、別のユーザからのメッセージを読むこと、別のユーザに関連付けられたコンテンツを閲覧すること、別のユーザによって投稿されたイベントに参加すること、画像を投稿すること、画像の投稿を試みること、あるいは、別のユーザまたは別のオブジェクトと対話する他のアクションを含み得る。ユーザがソーシャルネットワーキングシステム630内でアクションをとると、そのアクションは、アクティビティログ642に記録される。一実施形態では、ソーシャルネットワーキングシステム630は、アクティビティログ642をエントリのデータベースとして維持する。ソーシャルネットワーキングシステム630内でアクションがとられると、そのアクションについてのエントリが、アクティビティログ642に追加される。アクティビティログ642は、アクションログと呼ばれることもある。
【0111】
さらに、ユーザアクションは、ソーシャルネットワーキングシステム630とは別個である外部システム620など、ソーシャルネットワーキングシステム630の外部のエンティティ内で発生するコンセプトおよびアクションに関連付けられ得る。たとえば、アクションロガー640は、外部システム620とのユーザの対話を記述するデータをウェブサーバ632から受信し得る。この例では、外部システム620は、ソーシャルグラフ中の構造化されたアクションおよびオブジェクトに従って、ユーザの対話を報告する。
【0112】
ユーザが外部システム620と対話するアクションの他の例は、外部システム620または別のエンティティに対する関心をユーザが表すこと、外部システム620または外部システム620内のウェブページ622aについて説明するコメントをユーザがソーシャルネットワーキングシステム630に投稿すること、ユニフォームリソースロケータ(URL)または外部システム620に関連付けられた他の識別子をユーザがソーシャルネットワーキングシステム630に投稿すること、外部システム620に関連付けられたイベントにユーザが参加すること、あるいは、外部システム620に関係するユーザによる任意の他のアクションを含む。したがって、アクティビティログ642は、ソーシャルネットワーキングシステム630のユーザと、ソーシャルネットワーキングシステム630とは別個である外部システム620との間の対話を記述するアクションを含み得る。
【0113】
認証サーバ644は、ソーシャルネットワーキングシステム630のユーザの1つまたは複数のプライバシー設定を施行する。ユーザのプライバシー設定は、ユーザに関連付けられた特定の情報がどのように共有され得るかを決定する。プライバシー設定は、ユーザに関連付けられた特定の情報の仕様と、情報が共有され得る1つまたは複数のエンティティの仕様とを含む。情報が共有され得るエンティティの例は、他のユーザ、アプリケーション、外部システム620、または、潜在的にその情報にアクセスすることができる任意のエンティティを含み得る。ユーザによって共有され得る情報は、プロファイル写真、ユーザに関連付けられた電話番号、ユーザのつながり、つながりを追加すること、ユーザプロファイル情報を変更することなどのユーザによってとられるアクションなど、ユーザアカウント情報を含む。
【0114】
プライバシー設定の仕様は、異なるレベルの粒度において提供され得る。たとえば、プライバシー設定は、他のユーザと共有されるべき具体的な情報を識別し得、プライバシー設定は、職場電話番号、または、プロファイル写真と、自宅電話番号と、ステータスとを含む個人情報など、関係する情報の具体的なセットを識別する。代替的に、プライバシー設定は、ユーザに関連付けられたすべての情報に適用され得る。特定の情報にアクセスすることができるエンティティのセットの仕様も、様々なレベルの粒度において指定され得る。情報が共有され得るエンティティの様々なセットは、たとえば、ユーザのすべての友達、友達のすべての友達、すべてのアプリケーション、またはすべての外部システム620を含み得る。一実施形態は、エンティティのセットの仕様がエンティティの一覧表を含むことを可能にする。たとえば、ユーザは、ある情報にアクセスすることを可能にされる外部システム620のリストを提供し得る。別の実施形態は、仕様が、情報にアクセスすることを可能にされない例外とともにエンティティのセットを含むことを可能にする。たとえば、ユーザは、すべての外部システム620がユーザの職場情報にアクセスすることを可能にし得るが、職場情報にアクセスすることを可能にされない外部システム620のリストを指定し得る。いくつかの実施形態は、ある情報にアクセスすることを可能にされない例外のリストを「ブロックリスト」と呼ぶ。ユーザによって指定されるブロックリストに属する外部システム620は、プライバシー設定において指定された情報にアクセスすることをブロックされる。情報の仕様の粒度と、情報が共有されるエンティティの仕様の粒度との様々な組合せが可能である。たとえば、すべての個人情報は、友達と共有され得るが、すべての職場情報は、友達の友達と共有され得る。
【0115】
認証サーバ644は、ユーザに関連付けられたある情報が、ユーザの友達、外部システム620、ならびに/または他のアプリケーションおよびエンティティによってアクセスされ得るかどうかを決定するためのロジックを含んでいる。外部システム620は、ユーザの職場電話番号など、ユーザのよりプライベートなおよび機密性の高い情報にアクセスするために、認証サーバ644からの認証を必要とし得る。ユーザのプライバシー設定に基づいて、認証サーバ644は、別のユーザ、外部システム620、アプリケーション、または別のエンティティが、ユーザによってとられたアクションに関する情報を含む、ユーザに関連付けられた情報にアクセスすることを可能にされるかどうかを決定する。
【0116】
いくつかの実施形態では、ソーシャルネットワーキングシステム630は、グループビデオ通話モジュール646を含むことができる。グループビデオ通話モジュール646は、たとえば、本明細書でより詳細に説明されるように、グループビデオ通話モジュール102として実装され得る。前に説明されたように、多くの変形形態または他の可能性があり得ることを諒解されたい。たとえば、いくつかの実施形態では、グループビデオ通話モジュール646の1つまたは複数の機能性は、ユーザデバイス610中で実装され得る。前に説明されたように、多くの変形形態または他の可能性があり得ることを諒解されたい。
【0117】
ハードウェア実装形態
上記のプロセスおよび特徴は、多種多様なマシンおよびコンピュータシステムアーキテクチャによって、ならびに、多種多様なネットワークおよびコンピューティング環境において実装され得る。図7は、本発明の一実施形態による、本明細書で説明される実施形態のうちの1つまたは複数を実装するために使用され得るコンピュータシステム700の一例を示す。コンピュータシステム700は、コンピュータシステム700に、本明細書で説明されるプロセスおよび特徴を実施させるための命令のセットを含む。コンピュータシステム700は、他のマシンに接続され(たとえば、ネットワーク化され)得る。ネットワーク化された展開では、コンピュータシステム700は、クライアントサーバネットワーク環境内のサーバマシンまたはクライアントマシンの資格で動作するか、あるいは、ピアツーピア(または分散)ネットワーク環境内のピアマシンとして動作し得る。本発明の一実施形態では、コンピュータシステム700は、ソーシャルネットワーキングシステム630、ユーザデバイス610、および外部システム620、またはそれらの構成要素であり得る。本発明の一実施形態では、コンピュータシステム700は、ソーシャルネットワーキングシステム630の全部または一部を構成する多数のサーバのうちの1つのサーバであり得る。
【0118】
コンピュータシステム700は、プロセッサ702と、キャッシュ704と、コンピュータ可読媒体に記憶され、本明細書で説明されるプロセスおよび特徴を対象とする、1つまたは複数の実行可能モジュールおよびドライバとを含む。さらに、コンピュータシステム700は、高性能入出力(I/O)バス706と、標準I/Oバス708とを含む。ホストブリッジ710は、プロセッサ702を高性能I/Oバス706に結合するが、I/Oバスブリッジ712は、2つのバス706および708を互いに結合する。システムメモリ714および1つまたは複数のネットワークインターフェース716が、高性能I/Oバス706に結合される。コンピュータシステム700は、ビデオメモリと、ビデオメモリに結合された表示デバイスとをさらに含み得る(図示せず)。大容量ストレージ718およびI/Oポート720が、標準I/Oバス708に結合される。コンピュータシステム700は、標準I/Oバス708に結合された、キーボードおよびポインティングデバイス、表示デバイス、または他の入出力デバイス(図示せず)を随意に含み得る。全体的に、これらの要素は、限定はしないが、カリフォルニア州サンタクララのIntel Corporationによって製造されるx86互換プロセッサ、カリフォルニア州サニーベルのAdvanced Micro Devices(AMD),Inc.によって製造されるx86互換プロセッサ、ならびに任意の他の好適なプロセッサに基づくコンピュータシステムを含む、広いカテゴリーのコンピュータハードウェアシステムを表すものである。
【0119】
オペレーティングシステムが、ソフトウェアアプリケーション(図示せず)との間のデータの入力および出力を含む、コンピュータシステム700の動作を管理および制御する。オペレーティングシステムは、システム上で実行されているソフトウェアアプリケーションと、システムのハードウェア構成要素との間のインターフェースを提供する。LINUXオペレーティングシステム、カリフォルニア州クパチーノのApple Computer,Inc.から入手可能なApple Macintoshオペレーティングシステム、UNIXオペレーティングシステム、Microsoft(登録商標)Windows(登録商標)オペレーティングシステム、BSDオペレーティングシステムなど、任意の好適なオペレーティングシステムが使用され得る。他の実装形態が可能である。
【0120】
コンピュータシステム700の要素が以下でより詳細に説明される。特に、ネットワークインターフェース716は、コンピュータシステム700と、イーサネット(たとえば、IEEE802.3)ネットワーク、バックプレーンなど、広範囲のネットワークのうちのいずれかとの間の通信を提供する。大容量ストレージ718は、上記で識別されたそれぞれのコンピューティングシステムによって実装される上記で説明されたプロセスおよび特徴を実施するためのデータおよびプログラミング命令のための永続的なストレージを提供するが、システムメモリ714(たとえば、DRAM)は、プロセッサ702によって実行されたとき、データおよびプログラミング命令のための一時的なストレージを提供する。I/Oポート720は、コンピュータシステム700に結合され得る追加の周辺デバイス間の通信を提供する、1つまたは複数のシリアルおよび/またはパラレル通信ポートであり得る。
【0121】
コンピュータシステム700は、様々なシステムアーキテクチャを含み得、コンピュータシステム700の様々な構成要素は再構成され得る。たとえば、キャッシュ704は、プロセッサ702とともにオンチップであり得る。代替的に、キャッシュ704およびプロセッサ702は「プロセッサモジュール」としてまとめられ得、プロセッサ702が「プロセッサコア」と呼ばれる。さらに、本発明のいくつかの実施形態は、上記の構成要素のすべてを必要とするとは限らず、また、含むとは限らないことがある。たとえば、標準I/Oバス708に結合された周辺デバイスは、高性能I/Oバス706に結合され得る。さらに、いくつかの実施形態では、単一のバスのみが存在し得、コンピュータシステム700の構成要素が、その単一のバスに結合される。その上、コンピュータシステム700は、追加のプロセッサ、記憶デバイス、またはメモリなど、追加の構成要素を含み得る。
【0122】
概して、本明細書で説明されるプロセスおよび特徴は、オペレーティングシステムまたは特定のアプリケーションの一部、構成要素、プログラム、オブジェクト、モジュール、あるいは「プログラム」と呼ばれる一連の命令として実装され得る。たとえば、1つまたは複数のプログラムが、本明細書で説明される特定のプロセスを実行するために使用され得る。プログラムは、典型的には、コンピュータシステム700内の様々なメモリおよび記憶デバイス中の1つまたは複数の命令を備え、それらの命令は、1つまたは複数のプロセッサによって読み取られ、実行されたとき、コンピュータシステム700に、本明細書で説明されるプロセスおよび特徴を実行するための動作を実施させる。本明細書で説明されるプロセスおよび特徴は、ソフトウェア、ファームウェア、ハードウェア(たとえば、特定用途向け集積回路)、またはそれらの任意の組合せとして実装され得る。
【0123】
一実装形態では、本明細書で説明されるプロセスおよび特徴は、分散コンピューティング環境において個々にまたはまとめて、コンピュータシステム700によって実行される一連の実行可能モジュールとして実装される。上記のモジュールは、ハードウェア、コンピュータ可読媒体(または機械可読媒体)に記憶された実行可能モジュール、または両方の組合せによって実現され得る。たとえば、モジュールは、プロセッサ702など、ハードウェアシステム内のプロセッサによって実行されるべき複数の命令または一連の命令を備え得る。最初に、一連の命令は、大容量ストレージ718などの記憶デバイスに記憶され得る。ただし、一連の命令は、任意の好適なコンピュータ可読記憶媒体に記憶され得る。さらに、一連の命令は、ローカルに記憶される必要はなく、ネットワーク上のサーバなどのリモート記憶デバイスからネットワークインターフェース716を介して受信され得る。命令は、大容量ストレージ718などの記憶デバイスからシステムメモリ714中にコピーされ、次いで、プロセッサ702によってアクセスされ、実行される。様々な実装形態では、1つまたは複数のモジュールは、並列処理環境中の複数のサーバなど、1つまたは複数のロケーションにある1つまたは複数のプロセッサによって実行され得る。
【0124】
コンピュータ可読媒体の例は、限定はしないが、揮発性メモリデバイスおよび不揮発性メモリデバイスなどの記録可能タイプ媒体、ソリッドステートメモリ、フロッピーディスクおよび他のリムーバブルディスク、ハードディスクドライブ、磁気媒体、光ディスク(たとえば、コンパクトディスク読取り専用メモリ(CD ROM)、デジタル多用途ディスク(DVD))、他の同様の非一時的(または一時的)有形(または非有形)記憶媒体、あるいは、本明細書で説明されるプロセスおよび特徴のうちの任意の1つまたは複数を実施するためにコンピュータシステム700が実行するための一連の命令を記憶、符号化、または搬送するのに好適な任意のタイプの媒体を含む。
【0125】
説明の目的で、多数の具体的な詳細が、説明の完全な理解を提供するために記載される。しかしながら、これらの具体的な詳細なしに本開示の実施形態が実施され得ることは、当業者には明らかであろう。いくつかの事例では、モジュール、構造、プロセス、特徴、およびデバイスは、説明を不明瞭にすることを回避するために、ブロック図の形式で示される。他の事例では、データおよび論理フローを表すために、機能ブロック図およびフロー図が示される。ブロック図およびフロー図の構成要素(たとえば、モジュール、ブロック、構造、デバイス、特徴など)は、本明細書において明確に説明および図示された様式以外の様式で、様々に組み合わされ、分離され、除去され、並べ替えられ、置換され得る。
【0126】
本明細書における、「一実施形態(one embodiment)」、「一実施形態(an embodiment)」、「他の実施形態」、「一連の実施形態」、「いくつかの実施形態」、「様々な実施形態」などへの言及は、実施形態に関して説明される特定の特徴、設計、構造、または特性が本開示の少なくとも一実施形態に含まれることを意味する。本明細書内の様々な箇所における、たとえば「一実施形態では(in one embodiment)」、または「一実施形態では(in an embodiment)」という句の出現は、必ずしもすべてが同じ実施形態に言及するものとは限らず、また、別個の実施形態または代替実施形態は、他の実施形態と相互排他的ではない。その上、「実施形態」などへの明示的な言及があるか否かにかかわらず、様々な特徴が説明され、様々な特徴は、いくつかの実施形態では様々に組み合わせられ、含まれ得るが、他の実施形態では様々に省略されることもある。同様に、いくつかの実施形態にとっては選好または要件であり得るが、他の実施形態にとっては選好または要件ではない、様々な特徴が説明される。
【0127】
本明細書において使用される言い回しは、主に、読みやすさおよび教授の目的で選択されており、本発明の主題を示すかまたは定めるために選択されていないことがある。したがって、本発明の範囲は、この発明を実施するための形態によってではなく、本明細書に基づく出願に関して生じる請求項によって限定されることが意図される。したがって、本発明の実施形態の開示は、以下の特許請求の範囲に記載される本発明の範囲を例示するものであり、限定するものではない。
図1
図2
図3
図4A
図4B
図4C
図4D
図4E
図4F
図4G
図4H
図4I
図4J
図4K
図4L
図4M
図4N
図4O
図4P
図4Q
図5
図6
図7