説明

デジタルコンテンツの配布のための適応型ストリーミング

本発明の一実施形態は、コンテンツサーバ及びコンテンツプレーヤを備えるコンテンツ配布システムにおいて使用可能な配布帯域幅に再生ビットレートを適応させるための技術を記載する。コンテンツプレーヤは、現在使用可能な帯域幅を想定して、所与のタイトルについて、所与の再生ビットレートが完全な再生をうまく提供することができるかどうかを周期的に推定する。現在使用可能な帯域幅を想定して、再生が現在のビットレートで実行不可能になる場合、コンテンツプレーヤは、実行可能なビットレートが達成されるまで、ビットレートを下方に適応させる。より高いビットレートを使用して再生が実行可能である場合、コンテンツプレーヤは、ビットレートを上方に適応させることができる。

【発明の詳細な説明】
【関連出願の相互参照】
【0001】
[0001]本出願は、参照により本明細書に組み込まれている2009年7月24日出願の米国特許出願第12/509,364号の利益を主張する。
【発明の背景】
【0002】
【発明の分野】
【0003】
[0002]本発明の実施形態は、一般にデジタルメディアに関し、より詳細には、デジタルコンテンツの配布のための適応型ストリーミング(adaptive streaming)に関する。
【関連技術の説明】
【0004】
[0003]デジタルコンテンツ配布システムは、従来、コンテンツサーバ、コンテンツプレーヤ、及びコンテンツサーバをコンテンツプレーヤに接続する通信ネットワークを含む。コンテンツサーバは、コンテンツサーバからコンテンツプレーヤにダウンロードすることができるデジタルコンテンツファイルを格納するように構成される。各デジタルコンテンツファイルは、例えば、ユーザに親しまれている「風と共に去りぬ」など、特定の識別タイトルに対応する。デジタルコンテンツファイルは、通常、再生年代順に従って編成された一連のコンテンツデータを含んでおり、音声データ、ビデオデータ、又はその組み合わせを備え得る。
【0005】
[0004]コンテンツプレーヤは、再生するためのタイトルを選択するユーザ要求に応答して、デジタルコンテンツファイルをダウンロードし、再生するように構成される。デジタルコンテンツファイルを再生するプロセスは、音声データ及びビデオデータを、スピーカサブシステム及びビデオサブシステムを有するディスプレイシステムを駆動することができる音声信号及びビデオ信号にデコードし、レンダリングすることを含む。再生は通常、当分野で「ストリーミング」として知られている技術を伴い、それによって、コンテンツサーバは、デジタルコンテンツファイルをコンテンツプレーヤに順次送信し、デジタルコンテンツファイルを備えるコンテンツデータが受信される間に、コンテンツプレーヤがデジタルコンテンツファイルを再生する。通信ネットワーク内での可変の待ち時間及び帯域幅を考慮に入れるために、コンテンツバッファは、コンテンツデータが実際に再生される前に、入って来るコンテンツデータを待ち行列に入れる。使用可能な帯域幅をより低減させるネットワーク輻輳の間、コンテンツデータはコンテンツバッファにあまり追加されず、ある再生ビットレートでの再生をサポートするために、コンテンツデータが待ち行列から取り出されるにつれて、コンテンツバッファは空になり得る。しかし、ネットワーク帯域幅が高い間、コンテンツバッファが再度概ねいっぱいになるまで、コンテンツバッファは補充され、追加のバッファ時間が追加される。実用的なシステムにおいて、コンテンツバッファは、数秒から1分以上にわたるタイムスパンに対応するコンテンツデータを待ち行列に入れることができる。
【発明の概要】
【発明が解決しようとする課題】
【0006】
[0005]コンテンツサーバに格納された各デジタルコンテンツファイルは、通常、特定の再生ビットレートのためにコード化されている。再生を開始する前に、コンテンツプレーヤは、コンテンツサーバから使用可能な帯域幅を測定することができ、測定された使用可能な帯域幅によってサポートすることができるビットレートを有するデジタルコンテンツファイルを選択することができる。再生品質を最大にするために、従来、最高ビットレートが測定された帯域幅を超えないデジタルコンテンツファイルが選択される。通信ネットワークがビットレート要件を満たしながら選択されたデジタルコンテンツファイルをダウンロードするのに十分な帯域幅を提供することができる範囲で、再生は申し分なく進行する。しかし、実際には、通信ネットワークにおいて使用可能な帯域幅は、通信ネットワークに接続された異なるデバイスが独立したタスクを実行するにつれて絶えず変化している。通信ネットワークにおいて使用可能な帯域幅がかなり長い期間の間再生ビットレート要件を満たすのに必要なレベルを下回る場合、コンテンツバッファは、完全に空になり、その結果、当分野でバッファアンダーランとして知られている状態になる。バッファアンダーランが生じる場合、再生は、きわめて信頼できなくなり、又はまったく停止し、全体的な再生品質をかなり低減させる可能性がある。従来の通信ネットワーク上でのトラフィックが予測不可能な傾向にあるので、輻輳及び帯域幅の低減がよく起こり、従来のストリーミング再生システムに負の影響を与える。
【0007】
[0006]ストリーミング再生システムにおけるバッファアンダーランの可能性を低減するための1つの技術は、再生のために控えめに低いビットレートを選択することである。しかし、この際、より高品質の経験が可能であった場合でも、ユーザは、結局低品質の再生経験で終わる。バッファアンダーランの可能性を低減するための別の技術は、再生を開始する前に全体的なデジタルコンテンツファイルの比較的大きい部分をプリバッファリングすることである。しかし、この技術は必然的に、再生が始まり得る前に、ユーザが比較的長い時間待つ必要があり、したがって、全体的な再生経験を低下させる。
【0008】
[0007]上記が示すように、当分野では、従来の手法より高品質の再生経験を提供するコンテンツプレーヤにデジタルコンテンツファイルをダウンロードするための手法が必要である。
【0009】
[0008]本発明の一実施形態は、コンテンツサーバからコンテンツプレーヤにデジタルコンテンツのファイルを適応的にダウンロードするための方法を記載する。この方法は、コンテンツプレーヤ内のコンテンツバッファに、ファイル内に含まれる第1のコード化済みシーケンスから少なくとも1単位のデジタルコンテンツをダウンロードするステップであり、ファイルが複数のコード化済みシーケンスを含み、各コード化済みシーケンスが、再生のためにコンテンツバッファに格納されたデジタルコンテンツにアクセスすることができる異なるビットレートに対応し、第1のコード化済みシーケンスが、再生のためにコンテンツバッファに格納されたデジタルコンテンツにアクセスすることができる最低のビットレートに対応する、ステップと、デジタルコンテンツのファイルの中の1単位又は複数単位のデジタルコンテンツを、依然として再生のためにダウンロードし、バッファに入れなければならないことを決定するステップと、次の単位のデジタルコンテンツをダウンロードするための複数のコード化済みシーケンスに含まれる次のコード化済みシーケンスを決定するステップと、次の単位のデジタルコンテンツを、再生のために、次のコード化済みシーケンスからコンテンツバッファにダウンロードするステップとを含む。
【0010】
[0009]開示された方法の1つの利点は、再生ビットレート及び使用可能なダウンロード帯域幅に基づく可能なバッファアンダーランが追跡され、バッファアンダーラン状態を回避しながら、複数単位のデジタルコンテンツが可能な限り最高の画質でダウンロードされることである。
【0011】
[0010]他の実施形態は、それだけには限定されないが、処理ユニットが開示された方法の1つ又は複数の態様を実施することができる命令を含むコンピュータ可読媒体、及び開示された方法の1つ又は複数の態様を実施するように構成されたシステムを含む。
【図面の簡単な説明】
【0012】
[0011]本発明の上記の特徴を詳しく理解することができるように、実施形態を参照して上記で簡単に要約した本発明のより特定の説明を行い、その一部が添付の図面に図示される。しかし、添付の図面は本発明の代表的な実施形態のみを示しており、したがって、本発明は、他の等しく有効な実施形態を認めることができるため、その範囲を制限するものと見なされないことに留意されたい。
【0013】
【図1】[0012] 本発明の1つ又は複数の態様を実施するように構成されたコンテンツ配布システムを示す図である。
【図2】[0013] 本発明の一実施形態による図1のコンテンツプレーヤのより詳細な図である。
【図3】[0014] 本発明の一実施形態による図1のコンテンツサーバのより詳細な図である。
【図4A】[0015] 本発明の一実施形態による図1のシーケンスヘッダインデックスのより詳細な図である。
【図4B】[0016] 本発明の一実施形態による、ある評価ポイントで、2つの異なるビットレートにおいて実行されるバッファ予測アルゴリズムの結果を示すグラフである。
【図4C】[0017] 本発明の一実施形態による、デジタルコンテンツファイルと関連したデジタルコンテンツのバッファリング及び再生のデータフローを示す図である。
【図5】[0018] 本発明の一実施形態による、再生のためにコンテンツデータをコンテンツバッファに適応的にバッファリングするための方法ステップのフロー図である。
【図6】[0019] 本発明の一実施形態による、再生のためにバッファリングすべきコード化済みシーケンスを変更するための方法ステップのフロー図である。
【図7A】[0020] 本発明の一実施形態による、現在のビットレートで再生を完了する実行可能性を予測するための方法ステップのフロー図である。
【図7B】[0021] 本発明の一実施形態による、図7Aにおける変数を初期化するステップを実行するための方法ステップのフロー図である。
【図7C】[0022] 本発明の一実施形態による、図7Aにおけるコンテンツバッファ状態を推定するステップを実行するための方法ステップのフロー図である。
【図7D】[0023] 本発明の一実施形態による、図7Aにおけるコンテンツバッファ状態を推定するステップを実行するための方法ステップのフロー図である。
【詳細な説明】
【0014】
[0024]以下の説明では、本発明をより完全に理解できるように、多数の特定の詳細について記載する。しかし、本発明をこれらの特定の詳細のうちの1つ又は複数なしに実施することができることは、当業者にとって明らかである。他の例では、本発明をわかりにくくすることを避けるために、周知の特徴については記載していない。
【0015】
[0025]図1は、本発明の1つ又は複数の態様を実施するように構成されたコンテンツ配布システム100を示す。示すように、コンテンツ配布システム100は、それだけには限定されないが、コンテンツプレーヤ110、1つ又は複数のコンテンツサーバ130、及び通信ネットワーク150を含む。コンテンツ配布システム100は、コンテンツディレクトリサーバ120も含み得る。一実施形態において、1つ又は複数のコンテンツサーバ130は、コンテンツ配布ネットワーク(CDN)140を備える。
【0016】
[0026]通信ネットワーク150は、コンテンツプレーヤ110と1つ又は複数のコンテンツサーバ130との間のデータ通信を容易にするように構成された、ルータやスイッチなど複数のネットワーク通信システムを含む。周知のインターネット通信ネットワークを配置する際に実施される技術を含めて、通信システム150を構築するための技術的に実行可能な多くの技術があることを当業者であれば認識されよう。
【0017】
[0027]コンテンツディレクトリサーバ120は、タイトルルックアップ要求152を受信し、ファイル位置データ154を生成するように構成されたコンピュータシステムを備える。タイトルルックアップ要求152は、それだけには限定されないが、ユーザによって要求される動画又は歌の名前を含む。コンテンツディレクトリサーバ120は、特定の再生ビットレートでコード化される所与のタイトルのビデオストリームを、関連するコンテンツサーバ130内にあるデジタルコンテンツファイル132にマップするデータベース(図示せず)に対する問い合わせを行う。ファイル位置データ154は、それだけには限定されないが、デジタルコンテンツファイル132をコンテンツプレーヤ110に提供するように構成されたコンテンツサーバ130への参照を含む。
【0018】
[0028]コンテンツサーバ130は、コンテンツプレーヤ110からのデジタルコンテンツファイル132についてのダウンロード要求に応えるように構成されたコンピュータシステムである。デジタルコンテンツファイルは、コンピュータシステムからアクセス可能な大容量記憶システムに存在し得る。大容量記憶システムは、それだけには限定されないが、直接接続されたストレージ、ネットワーク接続されたファイルストレージ、又はネットワーク接続されたブロックレベルストレージを含み得る。デジタルコンテンツファイル132は、任意の技術的に実行可能な技術を使用して、フォーマットされ、大容量記憶システムに格納され得る。デジタルコンテンツファイル132をコンテンツサーバ130からコンテンツプレーヤ110にダウンロードするために、データ転送プロトコル、例えば周知のハイパーテキストトランスファプロトコル(HTTP)を使用することができる。
【0019】
[0029]各タイトル(動画、歌、又は他の形のデジタルメディア)は、1つ又は複数のデジタルコンテンツファイル132に関連付けられる。各デジタルコンテンツファイル132は、それだけには限定されないが、シーケンスヘッダインデックス114、音声データ、及びコード化済みシーケンスを備える。コード化済みシーケンスは、特定の再生ビットレートにコード化された完全なバージョンのビデオデータ対応のタイトルを備える。例えば、所与のタイトルは、デジタルコンテンツファイル132−1、デジタルコンテンツファイル132−2、及びデジタルコンテンツファイル132−3と関連付けられ得る。デジタルコンテンツファイル132−1は、シーケンスヘッダインデックス114−1、及び約250キロビット/秒(Kbps)の平均再生ビットレートにコード化されたコード化済みシーケンスを備え得る。デジタルコンテンツファイル132−2は、シーケンスヘッダインデックス114−2、及び約1000Kbpsの平均再生ビットレートにコード化されたコード化済みシーケンスを備え得る。同様に、デジタルコンテンツファイル132−3は、シーケンスヘッダインデックス114−3、及び約1500Kbpsの平均再生ビットレートにコード化されたコード化済みシーケンスを備え得る。1500Kbpsのコード化済みシーケンスは、より高品質の再生を可能にし、したがって、250Kbpsのコード化済みシーケンスに対して、再生にはより望ましい。
【0020】
[0030]デジタルコンテンツファイル132内のコード化済みシーケンスは、固定スパンの再生時間を表す複数単位のビデオデータとして編成される。全再生時間は、それぞれ1つの再生時間の固定スパンに対応する一連のタイムスロットに編成される。所与のタイムスロットの間に、1単位のビデオデータが、デジタルコンテンツファイル132と関連した再生ビットレートについて、デジタルコンテンツファイル132内で表される。可変ビットレートのコード化が使用され得るため、再生時間の固定スパンに直接対応するにもかかわらず、各単位のビデオデータはサイズが可変とすることができる。上記の例について、1500Kbpsの再生ビットレートにコード化されるコード化済みシーケンスを備えるデジタルコンテンツファイル132−1内の各タイムスロットは、1500Kbpsでコード化される1単位のビデオデータを含む。一実施形態において、複数単位の音声データは、タイムスロットごとに固定ビットレートでコード化され、デジタルコンテンツファイル132に格納される。
【0021】
[0031]複数単位のビデオデータ及び複数単位の音声データは、各タイムスロットの最初に開始する、時間同期の再生を提供するように構成される。音声再生又はビデオ再生のいずれかが不足することを回避するために、音声バッファ244及びビデオバッファ246が相当する期間の再生時間をそれぞれ格納することを保証するために、複数単位の音声データ及び複数単位のビデオデータは、一般に交互のパターンでダウンロードされる。
【0022】
[0032]各コード化済みシーケンスは、上記に定義した通り、デジタルコンテンツ「ストリーム」を備えることを当業者であれば容易に理解されよう。さらに、特定のコード化済みシーケンスをコンテンツサーバ130からコンテンツプレーヤ110にダウンロードするプロセスは、特定の再生ビットレートで再生のためにコンテンツプレーヤ110にデジタルコンテンツを「ストリームすること」を備える。
【0023】
[0033]コンテンツプレーヤ110は、コンピュータシステム、セットトップボックス、携帯電話などのモバイルデバイス、又はネットワーク接続を有し、それぞれビデオフレームを提示し、音響出力を生成するための表示装置及びスピーカ装置に結合される、又は表示装置及びスピーカ装置を含む他の任意の技術的に実行可能なコンピューティングプラットフォームを備え得る。後でより詳細に説明するように、コンテンツプレーヤ110は、選択されたビットレートについて、1単位のビデオデータをダウンロードし、通信ネットワーク150内の主だった帯域幅状態に基づいて、選択されたビットレートを、その後ダウンロードされる複数単位のビデオデータに適応させるように構成される。
【0024】
[0034]通信ネットワーク150内で使用可能な帯域幅が制限されるようになるにつれて、コンテンツプレーヤは、その後のタイムスロットに対応してまだダウンロードされていない複数単位のビデオデータのために、より低いビットレートのコード化を選択することができる。使用可能な帯域幅が増加するにつれて、より高いビットレートのコード化を選択することができる。
【0025】
[0035]上記の説明において、1つのコンテンツプレーヤ110及び1つのCDN140を含むコンテンツ配布システム100が示されているが、図1のアーキテクチャは単に本発明の実施形態例を企図するにすぎないことを当業者であれば理解されよう。他の実施形態は、任意の数のコンテンツプレーヤ110及び/又はCDN140を含むことができる。したがって、図1は、決して本発明の範囲を制限するものではない。
【0026】
[0036]図2は、本発明の一実施形態による図1のコンテンツプレーヤ110のより詳細な図である。示すように、コンテンツプレーヤ110は、それだけには限定されないが、中央演算処理装置(CPU)210と、グラフィックサブシステム212と、入出力(I/O)デバイスインターフェース214と、ネットワークインターフェース218と、相互接続220と、メモリサブシステム230とを含む。コンテンツプレーヤ110は、大容量記憶装置216も含み得る。
【0027】
[0037]CPU210は、メモリサブシステム230に格納されたプログラミング命令を取り出し、実行するように構成される。同様に、CPU210は、メモリサブシステム230にアプリケーションデータを格納し、メモリサブシステム230にあるアプリケーションデータを取り出すように構成される。相互接続220は、CPU210、グラフィックサブシステム212、I/Oデバイスインターフェース214、大容量記憶装置216、ネットワークインターフェース218、及びメモリサブシステム230の間の例えばプログラミング命令及びアプリケーションデータなどデータの送信を容易にするように構成される。
【0028】
[0038]グラフィックサブシステム212は、ビデオデータの複数のフレームを生成し、ビデオデータの複数のフレームを表示装置250に送信するように構成される。一実施形態において、グラフィックサブシステム212は、CPU210とともに、集積回路に統合される。表示装置250は、表示する画像を生成するための任意の技術的に実行可能な手段を備え得る。例えば、表示装置250は、液晶式ディスプレイ(LCD)技術、陰極線技術、及び発光ダイオード(LED)ディスプレイ技術(有機又は無機)を使用して製造することができる。入出力(I/O)デバイスインターフェース214は、相互接続220を介してユーザI/O装置252から入力データを受信し、入力データをCPU210に送信するように構成される。例えば、ユーザI/O装置252は、1つ又は複数のボタン、キーボード、及びマウス又は他のポインティングデバイスを備え得る。I/Oデバイスインターフェース214は、電気音声出力信号を生成するように構成された音声出力ユニットも含む。ユーザI/O装置252は、電気音声出力信号に応答して音響出力を生成するように構成されたスピーカを含む。代替の実施形態では、表示装置250は、スピーカを含み得る。テレビは、ビデオフレームを表示し、音響出力を生成することができる、当分野で知られているデバイスの一例である。例えばハードディスクドライブ又はフラッシュメモリ記憶ドライブなど、大容量記憶装置216は、不揮発性データを格納するように構成される。ネットワークインターフェース218は、通信ネットワーク150を介してデータのパケットを送信及び受信するように構成される。一実施形態において、ネットワークインターフェース218は、周知のイーサネット標準を使用して通信するように構成される。ネットワークインターフェース218は、相互接続220を介してCPU210に結合される。
【0029】
[0039]メモリサブシステム230は、オペレーティングシステム232、ユーザインターフェース234、及び再生アプリケーション236を備えるデータ及びプログラミング命令を含む。オペレーティングシステム232は、例えばネットワークインターフェース218、大容量記憶装置216、I/Oデバイスインターフェース214、及びグラフィックサブシステム212を含むハードウェアデバイスの管理など、システム管理機能を実行する。また、オペレーティングシステム232は、ユーザインターフェース234及び再生アプリケーション236のプロセス及びメモリ管理モデルを提供する。ユーザインターフェース234は、コンテンツプレーヤ110とのユーザ対話のために、例えばウィンドウ及びオブジェクトメタファなど、特定の構造を提供する。当業者であれば、当分野で周知の、及びコンテンツプレーヤ110への組み込みに適している様々なオペレーティングシステム及びユーザインターフェースを認識されよう。
【0030】
[0040]再生アプリケーション236は、ネットワークインターフェース218を介してコンテンツサーバ130からデジタルコンテンツファイル132を取り出し、グラフィックサブシステム212を介してデジタルコンテンツファイル132を再生するように構成される。グラフィックサブシステム212は、レンダリングされたビデオ信号を表示装置250に送信するように構成される。通常の動作において、再生アプリケーション236は、特定のタイトルを再生する旨のユーザからの要求を受信する。次いで、再生アプリケーション236は、要求されたタイトルと関連したデジタルコンテンツファイル132の位置を突き止め、要求されたタイトルと関連した各デジタルコンテンツファイル132は、異なる再生ビットレートにコード化されたコード化済みシーケンスを含む。一実施形態において、再生アプリケーション236は、タイトルルックアップ要求152をコンテンツディレクトリサーバ120に対して掲示することによって、デジタルコンテンツファイル132の位置を突き止める。コンテンツディレクトリサーバ120は、タイトルルックアップ要求152に、要求されたタイトルと関連した各デジタルコンテンツファイル132のファイル位置データ154で答える。各ファイル位置データ154は、要求されたデジタルコンテンツファイル132が存在する、関連するコンテンツサーバ130への参照を含む。タイトルルックアップ要求152は、要求されたタイトルの名前、又はタイトルに関する他の識別情報を含み得る。再生アプリケーション236が要求されたタイトルと関連したデジタルコンテンツファイル132の位置を突き止めた後、再生アプリケーション236は、コンテンツサーバ130から要求されたタイトルと関連した各デジタルコンテンツファイル132と関連したシーケンスヘッダインデックス114をダウンロードする。図4Aでより詳細に記載する、デジタルコンテンツファイル132と関連したシーケンスヘッダインデックス114は、デジタルコンテンツファイル132に含まれるコード化済みシーケンスに関連した情報を含む。
【0031】
[0041]一実施形態において、再生アプリケーション236は、再生のための起動時間を最小化するために最低の再生ビットレートにコード化されたコード化済みシーケンスを備える要求されたタイトルと関連したデジタルコンテンツファイル132をダウンロードし始める。単に説明上、デジタルコンテンツファイル132−1は、要求されたタイトルと関連付けられ、最低の再生ビットレートにコード化されたコード化済みシーケンスを備える。要求されたデジタルコンテンツファイル132−1は、先入れ先出しキューとして働くように構成されるコンテンツバッファ112にダウンロードされる。一実施形態において、ダウンロードされたデータの各単位は、1単位のビデオデータ、又は1単位の音声データを備える。要求されたデジタルコンテンツファイル132−1と関連した複数単位のビデオデータがコンテンツプレーヤ110にダウンロードされるにつれて、複数単位のビデオデータはコンテンツバッファ112に押し込まれる。同様に、要求されたデジタルコンテンツファイル132−1と関連した複数単位の音声データがコンテンツプレーヤ110にダウンロードされるにつれて、複数単位の音声データはコンテンツバッファ112に押し込まれる。一実施形態において、複数単位のビデオデータは、コンテンツバッファ112内のビデオバッファ246に格納され、複数単位の音声データは、この場合もコンテンツバッファ112内の音声バッファ224に格納される。
【0032】
[0042]ビデオデコーダ248は、複数単位のビデオデータをビデオバッファ246から読み出し、期間において再生時間の固定スパンに対応する一連のビデオフレームにレンダリングする。ビデオバッファ246から1単位のビデオデータを読み出すことは、ビデオバッファ246(及びコンテンツバッファ112から)の待ち行列から1単位のビデオデータを効果的に取り出す。ビデオフレームのシーケンスは、グラフィックサブシステム212によって処理され、表示装置250に送信される。
【0033】
[0043]オーディオデコーダ242は、複数単位の音声データを音声バッファ244から読み出し、通常、ビデオフレームのシーケンスに時間的に同期して、一連の音声サンプルにレンダリングする。一実施形態において、音声サンプルのシーケンスはI/Oデバイスインターフェース214に送信され、I/Oデバイスインターフェース214は音声サンプルのシーケンスを電気音声信号に変換する。電気音声信号は、ユーザI/O装置252内のスピーカに送信され、ユーザI/O装置252は、その送信に応答して、音響出力を生成する。
【0034】
[0044]再生が開始されると、再生アプリケーション236は、最低の使用可能なビットレートにコード化される複数単位のビデオデータを要求し、それによって、ユーザによって認められる開始時刻が最小化される。しかし、通信ネットワーク150内の帯域幅状態が許容するなら、再生アプリケーション236は、より高いビットレートにコード化される複数単位のビデオデータを要求することができ、それによって、再生アプリケーション236によって最終的に達成される最高レベルの再生品質に相応した起動の遅延をもたらすことなく、時間にわたって再生品質を向上させる。通信ネットワーク150内の帯域幅状態が再生中に悪化する場合、再生アプリケーション236は、より低いビットレートにコード化される次の複数単位のビデオデータを要求することができる。一実施形態において、再生アプリケーション236は、最近ダウンロードされた1単位又は複数単位のビデオデータにわたって計算される帯域幅の評価に基づいて、どのコード化されたビットレートが1単位のビデオデータの順次の各ダウンロードに使用されるべきかを決定する。
【0035】
[0045]図3は、本発明の一実施形態による図1のコンテンツサーバ130のより詳細な図である。コンテンツサーバ130は、それだけには限定されないが、中央演算処理装置(CPU)310と、ネットワークインターフェース318と、相互接続320と、メモリサブシステム330と、大容量記憶装置316とを含む。コンテンツサーバ130は、I/Oデバイスインターフェース314も含み得る。
【0036】
[0046]CPU310は、メモリサブシステム330に格納されたプログラミング命令を取り出し、実行するように構成される。同様に、CPU310は、メモリサブシステム330にあるアプリケーションデータを格納し、取り出すように構成される。相互接続320は、CPU310、I/Oデバイスインターフェース314、大容量記憶装置316、ネットワークインターフェース318、及びメモリサブシステム330の間の例えばプログラミング命令及びアプリケーションデータなどデータの送信を容易にするように構成される。
【0037】
[0047]大容量記憶装置316は、デジタルコンテンツファイル132−1〜132−Nを格納する。デジタルコンテンツファイル132は、任意の技術的に実行可能なファイルシステムを使用して任意の技術的に実行可能なメディアに格納され得る。例えば、大容量記憶装置316は、従来のファイルシステムを組み込む独立ディスク冗長アレイ(RAID)システムを備え得る。
【0038】
[0048]メモリサブシステム330は、オペレーティングシステム332、ユーザインターフェース334、及びファイルダウンロードアプリケーション336を備えるデータ及びプログラミング命令を含む。オペレーティングシステム332は、例えばネットワークインターフェース318、大容量記憶装置316、及びI/Oデバイスインターフェース314を含むハードウェアデバイスの管理など、システム管理機能を実行する。また、オペレーティングシステム332は、ユーザインターフェース334及びファイルダウンロードアプリケーション336のプロセス及びメモリ管理モデルを提供する。ユーザインターフェース334は、コンテンツサーバ130とのユーザ対話のために、例えばウィンドウ及びオブジェクトメタファ又はコマンドラインインターフェースなど、特定の構造を提供する。ユーザは、ユーザインターフェース334を使用して、コンテンツサーバの機能を管理することができる。一実施形態において、ユーザインターフェース334は、コンテンツサーバ130の動作を管理するための管理ウェブページを提示する。当業者であれば、当分野で周知の、及びコンテンツプレーヤ130への組み込みに適している様々なオペレーティングシステム及びユーザインターフェースを認識されよう。
【0039】
[0049]ファイルダウンロードアプリケーション336は、ファイルダウンロード操作又は操作の組を介して、デジタルコンテンツファイル132−1〜132−Nのコンテンツプレーヤ110への転送を容易にするように構成される。ダウンロードされたデジタルコンテンツファイル132は、ネットワークインターフェース318によって、通信ネットワーク150を介してコンテンツプレーヤ110に送信される。一実施形態において、各デジタルコンテンツファイル132のファイルコンテンツは、任意の順序(当分野で「ランダムアクセス」として知られている)でアクセスされ得る。本明細書において上述したように、各デジタルコンテンツファイル132は、シーケンスヘッダインデックス114、及びコード化済みシーケンスを含む。コード化済みシーケンスは、特定のビットレートにコード化されたフルバージョンの所与の動画又は歌を備え、コード化済みシーケンスと関連したビデオデータは、複数単位のビデオデータに分割される。各単位のビデオデータは、特定のスパンの再生時間に対応し、ビデオデータの単位に格納されたビデオデータのサイズ及び解像度を指定するシーケンスヘッダを含むフレームで開始する。
【0040】
[0050]図4Aは、本発明の一実施形態による図1のシーケンスヘッダインデックス114のより詳細な図である。シーケンスヘッダインデックス114は、ビデオビットレートプロフィール452を含み、任意の技術的に実行可能なやり方で埋めることができるデータ構造である。
【0041】
[0051]デジタルコンテンツファイル132に含まれるシーケンスヘッダインデックス114は、デジタルコンテンツファイル132にも含まれるコード化済みシーケンスに関連した情報を指定する。ビデオビットレートプロフィール452は、コード化済みシーケンスの複数単位のビデオデータと関連した異なるシーケンスヘッダの位置及びタイムスタンプオフセットを指定する対応する1組のエントリ464を含む。通常、コード化済みシーケンスにおけるシーケンスヘッダは、(例えば3秒など)コード化済みシーケンス内で予測可能なタイムスタンプオフセットに位置する。所与のエントリ464は、ビデオビットレートプロフィール452と関連したコード化済みシーケンスの1単位のビデオデータ内に含まれる特定のシーケンスヘッダのタイムスタンプオフセット及び位置を示す。例えば、エントリ464−1は、コード化済みシーケンスの第1の単位のビデオデータと関連したシーケンスヘッダのタイムスタンプオフセット及び位置を示す。エントリ464−2は、同じコード化済みシーケンスの第2の単位のビデオデータと関連したシーケンスヘッダのタイムスタンプオフセット及び位置を示す。重要なことに、エントリ464の組に含まれるタイムスタンプオフセットに基づいて、エントリ464−Kと関連した現在の再生位置から再生の完了までの所与のコード化済みシーケンスを備えるバイトがいくつあるかを特徴付ける総バイト数を、計算することができる。
【0042】
[0052]拡張されたシーケンスと関連した音声データも、デジタルコンテンツファイル132に格納される。一実施形態において、音声データは、固定ビットレートのコード化を有する。代替実施形態において、音声データに可変ビットレートコード化技術が適用され、シーケンスヘッダインデックス114に音声ビットレートプロフィール472が含まれる。音声ビットレートプロフィール472は、それぞれの再生時間に音声データのそれぞれの単位ごとにタイムスタンプオフセット及びシーケンスヘッダ位置を格納するように構成されるエントリ484を含む。
【0043】
[0053]図4Bは、本発明の一実施形態による、ある評価ポイント444で、2つの異なるビットレート410、412において実行されるバッファ予測アルゴリズムの結果を示すグラフ401である。正の縦軸に沿って示されるバッファ時間430は、図1のコンテンツバッファ112内にどれくらい有効な再生時間が格納されるかを示す。負の縦軸に沿って示されるバッファアンダーラン時間434は、バッファアンダーラン420中の同等の時間の不足を示す。評価ポイント444で、図2の再生アプリケーション236は、現在使用可能な帯域幅が与えられると、再生が現在の再生ビットレート410で完了することができるかどうかを推定する。推定されたバッファ時間430が再生の完了の前に任意の再生時440に現在のビットレート410についてのバッファアンダーラン420を示す場合、現在のビットレートを維持することは実行不可能であるが、より低いビットレート412は実行可能であり得る。より低いビットレートは、現在使用可能な帯域幅が与えられると、再生をうまく完了することができるより低いビットレートを見つけるためにテストされる。一実施形態において、再生アプリケーション236は、再生の間、例えば3秒ごとなど周期的に、再生が、評価ポイント444で表される現在の再生ビットレートで完了することができるかどうかを推定する。
【0044】
[0054]示すように、バッファ時間430は、ビットレート410については、将来のある時点でバッファアンダーランがあること、ビットレート412については、バッファアンダーランがないことを推定する。こうしたシナリオでは、現在使用可能な帯域幅が与えられると、ビットレート410で再生を完了することは、実行不可能であり、一方、現在使用可能な帯域幅が与えられると、ビットレート412で再生を完了することは、実行可能であるように思える。
【0045】
[0055]特定のコード化済みシーケンスの実行可能性を予測するとき、再生アプリケーション236は、単一のコード化済みシーケンス、及びしたがって、単一の再生ビットレート、又は「集計されたコード化済みシーケンス(aggregate encoded sequence)」を、図5〜図7においてより詳細に記載される予測アルゴリズムへの入力として使用することを選択することができる。集計されたコード化済みシーケンスは、1つ又は複数のコード化済みシーケンスの組み合わせ、及び再生のために将来使用され得る1つ又は複数のコード化済みシーケンスについての対応する再生ビットレートを表す。例えば、再生アプリケーション236が高ビットレートのコード化済みシーケンスを再生している場合、再生アプリケーション236は、ダウンロードが一定の閾値期間の間続くことができる場合、(今のところ)コード化済みシーケンスが実行可能であると予測することができる。
【0046】
[0056]閾値期間の後、再生アプリケーション236は、追加の期間の間、現在のコード化済みシーケンスをバッファリングし続けることができ、その後低ビットレートのコード化済みシーケンスに切り替えることができる。このことは、現在のコード化済みシーケンスの一部を、より低いビットレートのコード化済みシーケンスと関連した時間の後の部分と集計し、結果として得られた集計されたコード化済みシーケンス、すなわち、2つのコード化済みシーケンスの集計の実行可能性を予測することによって達成される。再生アプリケーション236は、予想された切替の方向に応じて、予測計算において2つ以上のコード化済みシーケンスについての全期間の情報を分析することを選択することもできる。例えば、再生アプリケーション236が将来の再生のためにより高いビットレートのコード化済みシーケンスを評価する予定である場合、再生アプリケーション236は、より高いビットレートで実行可能性を確実にするためにより高いビットレートの全コード化済みシーケンスを評価することができる。しかし、再生アプリケーション236は、現在のコード化済みシーケンスである高ビットレートのコード化済みシーケンスを評価している場合、代わりに、より低いビットレートのコード化済みシーケンスへの切替を遅らせるために、現在のコード化済みシーケンスとより低いビットレートのコード化済みシーケンスとの集計における実行可能性を予測することができる。
【0047】
[0057]図4Cは、本発明の一実施形態による、デジタルコンテンツファイル132と関連したデジタルコンテンツ494のバッファリング及び再生のデータフローを示す。図1のコンテンツサーバ130は、複数単位の音声データ及び複数単位のビデオデータを備える、デジタルコンテンツファイル132のコンテンツデータ494をバッファリングプロセス490に提供する。バッファリングプロセス490は、コンテンツプレーヤ110内で実行されるスレッドとして実施することができる。バッファリングプロセス490は、コンテンツデータ494をダウンロードし、コンテンツバッファ112に書き込むように構成される。バッファリングプロセス490は、コンテンツバッファ112内の音声バッファ244に複数単位の音声データを書き込み、これもまたコンテンツバッファ112内のビデオバッファ246に複数単位のビデオデータを書き込む。一実施形態において、コンテンツバッファ112は、先入れ先出し方式(FIFO)キューとして構築される。再生プロセス492は、これもまたコンテンツプレーヤ110内で実行され、再生のために、コンテンツバッファ112の待ち行列から複数単位の音声データ及び複数単位のビデオデータを取り出す。コンテンツデータ494の連続的な再生を維持するために、コンテンツバッファ112は、再生プロセス492がコンテンツバッファ112において読み出しを実行する必要があるとき、使用可能な少なくとも1単位の音声データ及び1単位のビデオデータを常に有しているものとする。コンテンツバッファ112が空であり、再生プロセス492が読み出しの実行を必要とするとき、図4Bに示すように、バッファアンダーランが生じる。
【0048】
[0058]図5は、本発明の一実施形態による、再生のためにコンテンツデータをコンテンツバッファ112に適応的にバッファリングするための方法ステップ500のフロー図である。方法ステップは図1、図2、及び図3のシステムとの関係で記載されているが、方法ステップを任意の順序で実行するように構成される任意のシステムは本発明の範囲内に含まれることを当業者であれば理解されよう。
【0049】
[0059]方法は、ステップ510で開始し、図2の再生アプリケーション236は、デジタルコンテンツファイル132の再生を開始する旨の要求を受信する。ステップ512において、再生アプリケーション236は、図1のコンテンツバッファ112に、最低の使用可能なビットレートでデジタルコンテンツファイル132の1単位又は複数単位のビデオデータをプリバッファリングする。再生アプリケーション236は、コンテンツバッファ112に、対応する1単位又は複数単位の音声データもプリバッファリングする。プリバッファリングは、再生を開始する前に一定量のビデオデータ及び音声データをダウンロードすることを含む。ステップ514において、再生アプリケーション236は、再生を始める。これ以降、新しいデータをコンテンツバッファ112に入れるために方法ステップ500が実行される間に、コンテンツバッファ112からデータをレンダリングし、表示するために再生スレッドが実行される。一実施形態において、再生スレッドは、再生アプリケーション236の一部として実行される。
【0050】
[0060]ステップ520において、再生アプリケーション236は、ユーザシーク要求が受信されたかどうかを決定する。ステップ520で、ユーザシーク要求が受信された場合、方法はプリバッファリングのためにステップ512に戻る。しかし、ステップ520で、ユーザシーク要求が受信されていない場合、方法はステップ522に進む。ステップ522で、再生アプリケーション236は、音声バッファ244(AudioBuff)内に残っている再生時間がビデオバッファ246(VideoBuff)内に残っている再生時間未満であるかどうかを決定する。音声バッファ244内に残っている再生時間がビデオバッファ246内に残っている再生時間以上であるとき、より多くの単位のビデオデータが再生アプリケーション236によって再生のために必要とされる。音声バッファ244内に残っている再生時間がビデオバッファ246内に残っている再生時間未満であるとき、より多くの単位の音声データが再生アプリケーション236によって再生のために必要とされる。こうしたやり方で、再生アプリケーション236は、デジタルコンテンツファイル132の複数単位のビデオデータ及び複数単位の音声データのダウンロードのバランスをとる。
【0051】
[0061]ステップ522で、音声バッファ244内に残っている再生時間がビデオバッファ246内に残っている再生時間以上である場合、方法はステップ530に進む。ステップ530で、再生アプリケーション236は、現在再生しているビデオデータの単位についての一連のタイムスロットに対応するビデオインデックス(VideoIndex)が、現在再生されているデジタルコンテンツファイル132のビデオデータ(VideoUnits)の単位の合計数未満かどうかを決定する。デジタルコンテンツファイル132のビデオデータの単位の合計数を、デジタルコンテンツファイル132と関連したシーケンスヘッダインデックス114から取り出すことができる。
【0052】
[0062]ステップ530で、ビデオインデックスがデジタルコンテンツファイル132のビデオデータの単位の合計数未満である場合、すなわち、デジタルコンテンツファイル132のビデオデータのすべての単位が再生されたわけではない場合、方法はステップ540に進む。ステップ540で、再生アプリケーション236は、図6でより詳細に説明したように、バッファアンダーラン予測に基づいて、次の複数単位のビデオデータをバッファリングするための次のコード化済みシーケンスを決定する。次のコード化済みシーケンスは、より高いビットレートのコード化済みシーケンス、より低いビットレートのコード化済みシーケンス、又は現在のコード化済みシーケンスと同じコード化済みシーケンスでもよい。ステップ542で、再生アプリケーション236は、決定された次のコード化済みシーケンスに基づいて、1単位のビデオデータをダウンロードし、コンテンツバッファ112内のビデオバッファ246にその単位のビデオデータをバッファリングする。
【0053】
[0063]ステップ530に戻って、ビデオインデックスが現在再生されているデジタルコンテンツファイル132のビデオデータの単位の合計数以上であると再生アプリケーション236が決定した場合、再生アプリケーション236はビデオデータの単位をそれ以上必要とせず、方法はステップ590で終了する。
【0054】
[0064]ステップ522に戻って、音声バッファ244内に残っている時間がビデオバッファ246内に残っている時間未満であると再生アプリケーション236が決定した場合、再生アプリケーション236は再生のためにより多くの単位の音声データを必要し、方法はステップ550に進む。ステップ550で、再生アプリケーション236は、現在再生している音声データの単位についての一連のタイムスロットに対応する音声インデックス(AudioIndex)が、現在再生されているデジタルコンテンツファイル132の音声データ(AudioUnits)の単位の合計数未満かどうかを決定する。
【0055】
[0065]ステップ550で、音声インデックスが現在再生されているデジタルコンテンツファイル132の音声データの単位の合計数未満であると再生アプリケーション236が決定した場合、再生アプリケーション236は別の単位の音声データを必要し、方法はステップ552に進む。ステップ552で、再生アプリケーション236は、1単位の音声データをダウンロードし、コンテンツバッファ112内の音声バッファ244にその単位の音声データをバッファリングする。
【0056】
[0066]しかし、ステップ550で、音声インデックスが現在再生されているデジタルコンテンツファイル132の音声データの単位の合計数以上であると再生アプリケーション236が決定した場合、再生アプリケーション236は音声データの単位をそれ以上必要とせず、方法はステップ590で終了する。
【0057】
[0067]図6は、本発明の一実施形態による、再生のためにバッファリングすべき次のコード化済みシーケンスを決定するための方法ステップ600のフロー図である。方法ステップは図1、図2、及び図3のシステムとの関係で記載されているが、方法ステップを任意の順序で実行するように構成される任意のシステムは本発明の範囲内に含まれることを当業者であれば理解されよう。この場合もまた、方法ステップ600は、図5のステップ540をより詳細に記載し、一実施形態において、再生アプリケーション236によって実行される。
【0058】
[0068]方法は、ステップ610で開始し、再生アプリケーション236は、バッファアンダーランなしに完了まで現在のコード化済みシーケンスを再生する実行可能性を予測する。図4B及び図7Aとの関連で記載されている技術など、任意の技術的に実行可能な技術を使用して実行可能性の決定を実施することができることを当業者であれば理解されよう。
【0059】
[0069]ステップ620で、現在のビットレートに対応する現在のコード化済みシーケンスが実行可能でないと再生アプリケーション236が決定すると、方法はステップ630に進む。ステップ630で、再生アプリケーション236が最低のビットレートのコード化済みシーケンスではないコード化済みシーケンスを現在再生している場合、方法はステップ632に進み、再生アプリケーション236は、現在のビットレートより低いビットレートに対応するコード化済みシーケンスをコード化済みシーケンス候補として選択する。ステップ634で、再生アプリケーション236はコード化済みシーケンス候補を再生する実行可能性を予測し、この場合もまた、このステップは、図7Aにより詳細に記載されている。ステップ640で、コード化済みシーケンス候補が実行可能であると再生アプリケーション236が決定した場合、方法はステップ690で終了し、コード化済みシーケンス候補は、次のコード化済みシーケンスとして戻される。
【0060】
[0070]ステップ630に戻って、再生アプリケーション236が最低のビットレートに対応するコード化済みシーケンスを表すコード化済みシーケンスを現在再生している場合、方法はステップ690で終了し、現在の(最低の)コード化済みシーケンスが次のコード化済みシーケンスとして戻される。
【0061】
[0071]ステップ620に戻って、現在のコード化済みシーケンスが実行可能であると再生アプリケーション236が決定した場合、方法はステップ650に進む。ステップ650で、再生アプリケーション236が最高のビットレートのコード化済みシーケンスではないコード化済みシーケンスを現在再生している場合、方法はステップ652に進む。ステップ652で、再生アプリケーション236は、現在のビットレートより高いビットレートに対応するコード化済みシーケンスの実行可能性を予測する。この場合もまた、実行可能性を予測することは、図7Aにより詳細に記載されている。
【0062】
[0072]ステップ660で、より高いビットレートに対応するコード化済みシーケンスが実行可能であると再生アプリケーション236が決定した場合、方法はステップ662に進む。ステップ662で、再生アプリケーション236は、より高いビットレートのコード化済みシーケンスが次のコード化済みシーケンスとして戻されるように選択する。しかし、ステップ660で、より高いビットレートに対応するコード化済みシーケンスが実行可能でないと再生アプリケーション236が決定した場合、方法はステップ690で終了し、現在のコード化済みシーケンスが次のコード化済みシーケンスとして戻される。
【0063】
[0073]ステップ650に戻って、再生アプリケーション236が最高のビットレートに対応するコード化済みシーケンスを表すコード化済みシーケンスを現在再生している場合、方法はステップ690で終了し、現在の(最高の)コード化済みシーケンスが次のコード化済みシーケンスとして戻される。
【0064】
[0074]図7Aは、本発明の一実施形態による、現在のビットレートで再生を完了する実行可能性を予測するための方法ステップ700のフロー図である。方法ステップは図1、図2、及び図3のシステムとの関係で記載されているが、方法ステップを任意の順序で実行するように構成される任意のシステムは本発明の範囲内に含まれることを当業者であれば理解されよう。この場合もまた、方法ステップ700は、図6のステップ610、634、及び652をより詳細に記載し、一実施形態において、再生アプリケーション236によって実行される。
【0065】
[0075]方法は、ステップ710で開始し、再生アプリケーション236は、AudioIndex、VideoIndex、AudioBuffer、及びVideoBufferを含む1組の変数を初期化する。AudioIndexは、特定のタイムスロットに対応する1単位の音声データを選択するために使用されるインデックスを表す。VideoIndexは、特定のタイムスロットに対応する1単位のビデオデータを選択するために使用されるインデックスを表す。AudioBufferは、音声バッファ244に現在格納されているバッファに入れられた再生時間量を表す。VideoBufferは、ビデオバッファ246に現在格納されているバッファに入れられた再生時間量を表す。AudioIndexは、現在の音声のコード化済みシーケンスの現在の再生状態を表す現在のAudioIndexに初期化される。VideoIndexは、現在のビデオのコード化済みシーケンスの現在の再生状態を表す現在のVideoIndexに初期化される。AudioBufferは、現在のAudioBuffer再生値に初期化される。VideoBufferは、現在のVideoBuffer再生値に初期化される。
【0066】
[0076]ステップ712で、AudioBufferがVideoBuffer以上であると再生アプリケーション236が決定した場合、音声バッファより少ない再生時間がビデオバッファで使用可能であり、方法はステップ714に進んで、別の単位のビデオデータをダウンロードする影響を推定し始める。ステップ714で、VideoIndexが現在のコード化済みシーケンスのビデオデータの単位の合計数を表すVideoUnits未満であると再生アプリケーション236が決定した場合、再生アプリケーション236は、別の単位のビデオデータをダウンロードする必要があり、方法はステップ720に進む。ステップ720で、コンテンツバッファ112の現在の状態、及び主だった帯域幅の可用性が与えられると、別の単位のビデオデータがコンテンツサーバ130からダウンロードされる場合、再生アプリケーション236は、コンテンツバッファ112の結果として得られた状態を推定する。利点値も期間として計算、測定され、これは、1単位のビデオデータのダウンロードが実行される場合、ビデオバッファ246に追加することができる。利点値は、追加の単位のビデオデータをダウンロードすることと関連した追加の再生時間を表す。ステップ720は、図7Cにより詳細に記載されている。
【0067】
[0077]ステップ722で、VideoBufferがゼロ以上である場合、ビデオバッファ246におけるバッファアンダーランは、現在予想されておらず、方法はステップ724に進む。ステップ724で、AudioBufferがゼロ以上である場合、音声バッファ244におけるバッファアンダーランは、現在予想されておらず、方法はステップ726に進む。ステップ726で、利点値は、1単位のビデオデータのダウンロードを考慮に入れるために、VideoBuffer変数に追加される。ステップ728で、VideoIndexは、ビデオデータの単位のダウンロードを考慮に入れるために増分される。次のダウンロードは、VideoIndexの増分された値に対応する1単位のビデオデータについてのものである。
【0068】
[0078]ステップ724に戻って、AudioBufferがゼロ以下であると再生アプリケーション236が決定した場合、音声バッファ244におけるバッファアンダーランが予想され、方法はステップ740で終了し、戻り値は「実行不可能」である。
【0069】
[0079]ステップ722に戻って、VideoBufferがゼロ以下であると再生アプリケーション236が決定した場合、ビデオバッファ246におけるバッファアンダーランが予想され、方法はステップ740で終了し、戻り値は「実行不可能」である。
【0070】
[0080]ステップ714に戻って、VideoIndexが現在のコード化済みシーケンスのビデオデータの単位の合計数を表すVideoUnits以上であると再生アプリケーション236が決定した場合、再生アプリケーション236は、別の単位のビデオデータをダウンロードする必要はなく、バッファアンダーランは検出されていない。この時点で、ビデオ及び音声のコード化済みシーケンスのダウンロードを、バッファアンダーランなしで実行することができるとアプリケーション236が決定しており、方法はステップ742で終了し、戻り値は「実行可能」である。
【0071】
[0081]ステップ712に戻って、AudioBufferがVideoBuffer未満であると再生アプリケーション236が決定した場合、ビデオバッファより少ない再生時間が音声バッファで使用可能であり、方法はステップ716に進んで、別の単位の音声データをダウンロードする影響を推定し始める。ステップ716で、AudioIndexが現在のコード化済みシーケンスの音声データの単位の合計数を表すAudioUnits未満であると再生アプリケーション236が決定した場合、再生アプリケーション236は、別の単位の音声データをダウンロードする必要があり、方法はステップ730に進む。ステップ730で、コンテンツバッファ112の現在の状態、及び主だった帯域幅の可用性が与えられると、別の単位の音声データがコンテンツサーバ130からダウンロードされる場合、再生アプリケーション236は、コンテンツバッファ112の結果として得られた状態を推定する。利点値も期間として計算、測定され、これは、1単位の音声データのダウンロードが実行される場合、音声バッファ244に追加することができる。ステップ730は、図7Dにより詳細に記載されている。
【0072】
[0082]ステップ732で、VideoBufferがゼロ以上である場合、ビデオバッファ246におけるバッファアンダーランは、現在予想されておらず、方法はステップ734に進む。ステップ734で、AudioBufferがゼロ以上である場合、音声バッファ244におけるバッファアンダーランは、現在予想されておらず、方法はステップ736に進む。ステップ736で、利点値は、1単位の音声データのダウンロードを考慮に入れるために、AudioBuffer変数に追加される。ステップ738で、AudioIndexは、音声データの単位のダウンロードを考慮に入れるために増分される。次のダウンロードは、AudioIndexの増分された値に対応する1単位の音声データについてのものである。
【0073】
[0083]ステップ734に戻って、AudioBufferがゼロ以下であると再生アプリケーション236が決定した場合、音声バッファ244におけるバッファアンダーランが予想され、方法はステップ740で終了し、戻り値は「実行不可能」である。
【0074】
[0084]ステップ732に戻って、VideoBufferがゼロ以下であると再生アプリケーション236が決定した場合、ビデオバッファ246におけるバッファアンダーランが予想され、方法はステップ740で終了し、戻り値は「実行不可能」である。
【0075】
[0085]ステップ716に戻って、AudioIndexが現在のコード化済みシーケンスの音声データの単位の合計数を表すAudioUnits以上であると再生アプリケーション236が決定した場合、再生アプリケーション236は、別の単位の音声データをダウンロードする必要はなく、バッファアンダーランは検出されていない。この時点で、ビデオ及び音声のコード化済みシーケンスのダウンロードを、バッファアンダーランなしで実行することができるとアプリケーション236が決定しており、方法はステップ742で終了し、戻り値は「実行可能」である。
【0076】
[0086]図7Bは、本発明の一実施形態による、図7Aにおける変数を初期化するステップ710を実行するための方法ステップ701のフロー図である。方法ステップは図1、図2、及び図3のシステムとの関係で記載されているが、方法ステップを任意の順序で実行するように構成される任意のシステムは本発明の範囲内に含まれることを当業者であれば理解されよう。この場合もまた、方法ステップ701は、図7Aのステップ710をより詳細に記載し、一実施形態において、再生アプリケーション236によって実行される。
【0077】
[0087]方法は、ステップ750で開始し、AudioIndexは、現在の音声のコード化済みシーケンスの現在の再生状態を表す現在のAudioIndexに初期化される。ステップ752で、VideoIndexは、現在のビデオのコード化済みシーケンスの現在の再生状態を表す現在のVideoIndexに初期化される。ステップ754で、AudioBufferは、現在のAudioBuffer再生値に初期化される。方法は、ステップ756で終了し、VideoBufferは、現在のVideoBuffer再生値に初期化される。
【0078】
[0088]図7Cは、本発明の一実施形態による、図7Aにおけるコンテンツバッファ112の状態を推定するステップを実行するための方法ステップ702のフロー図である。方法ステップは図1、図2、及び図3のシステムとの関係で記載されているが、方法ステップを任意の順序で実行するように構成される任意のシステムは本発明の範囲内に含まれることを当業者であれば理解されよう。この場合もまた、方法ステップ702は、図7Aのステップ720をより詳細に記載し、一実施形態において、再生アプリケーション236によって実行される。
【0079】
[0089]方法は、ステップ760で開始し、再生アプリケーション236は、次の1単位のビデオデータのダウンロード時間を推定する。異なる再生ビットレートにコード化されたコード化済みシーケンスと関連しており、要求されたタイトルと関連した異なるデジタルコンテンツファイル132に含まれるビデオビットレートプロフィール452は、次の単位のビデオデータのサイズを調べるために、VideoIndexを使用してインデックスが付けられる。次の単位のビデオデータのサイズは、現在の帯域幅の可用性と直接連動して、推定ダウンロード時間を決定する。ステップ762で、再生アプリケーション236は、VideoBufferの現在の値からダウンロード時間を減算することによって、VideoBufferの値を計算する。この新しい値は、ダウンロード時間中のビデオバッファ246からのデータの推定された再生消費を表す。同様に、ステップ764で、再生アプリケーション236は、AudioBufferの現在の値からダウンロード時間を減算することによって、AudioBufferの値を計算する。
【0080】
[0090]図7Dは、本発明の一実施形態による、図7Aにおけるコンテンツバッファ112の状態を推定するステップを実行するための方法ステップ703のフロー図である。方法ステップは図1、図2、及び図3のシステムとの関係で記載されているが、方法ステップを任意の順序で実行するように構成される任意のシステムは本発明の範囲内に含まれることを当業者であれば理解されよう。この場合もまた、方法ステップ703は、図7Aのステップ730をより詳細に記載し、一実施形態において、再生アプリケーション236によって実行される。
【0081】
[0091]方法は、ステップ770で開始し、再生アプリケーション236は、次の1単位の音声データのダウンロード時間を推定する。次の単位の音声データのサイズは、現在の帯域幅の可用性と直接連動して、推定ダウンロード時間を決定する。ステップ772で、再生アプリケーション236は、VideoBufferの現在の値からダウンロード時間を減算することによって、VideoBufferの値を計算する。この新しい値は、ダウンロード時間中のビデオバッファ246からのデータの推定された再生消費を表す。同様に、ステップ774で、再生アプリケーション236は、AudioBufferの現在の値からダウンロード時間を減算することによって、AudioBufferの値を計算する。
【0082】
[0092]本発明の一実施形態は、コンテンツプレーヤ110内のコンピュータ可読記憶媒体に格納されるプログラム製品として実装することができる。この実施形態では、コンテンツプレーヤ110は、セットトップボックスなどの組み込みコンピュータプラットフォームを備える。本発明の代替実施形態は、インターネットウェブサイト内に組み込まれた実行可能命令など、コンピュータシステム内のメモリにダウンロードされるプログラム製品として実装することができる。この実施形態では、コンテンツプレーヤ110は、コンピュータシステムを備える。
【0083】
[0093]要するに、コンテンツプレーヤ110上でデジタルコンテンツファイルを再生するための技術が開示される。この技術は、現在使用可能な帯域幅が与えられると、特定のデジタルコンテンツファイルを特定のビットレートでうまく再生することができるかどうかを推定するステップと、主だった帯域幅状態を考慮に入れるためにビットレートを適応させるステップとを伴う。実行可能性を推定するステップは、実質的に、再生の完了に間に合うように、現在の再生位置からビデオ及び音声データの残りの単位のダウンロードをシミュレーションすることを伴う。実行可能性は、周期的に再評価され、必要に応じて、ビットレートは実行可能なビットレートまで下げられる。しかし、実行可能である場合、表示品質を増加させるために、ビットレートが増加する。
【0084】
[0094]開示された技術の1つの利点は、再生ビットレート及び使用可能なダウンロード帯域幅に基づく可能なバッファアンダーランが追跡され、バッファアンダーラン状態を回避しながら、複数単位のデジタルコンテンツが可能な限り最高の画質でダウンロードされることである。さらに、再生の始まりと関連した遅延時間は、比較的低いビットレートで再生を開始し、可能な場合はいつでも、より高い再生ビットレートに適応させることによって減らされる。
【0085】
[0095]上記は本発明の実施形態を対象とするが、本発明の他の及びさらなる実施形態は、その基本的な範囲を逸脱しない範囲で考案され得る。例えば、本発明の態様は、ハードウェア若しくはソフトウェア、又はハードウェアとソフトウェアとの組み合わせに実装することができる。本発明の一実施形態を、コンピュータシステム用のプログラム製品として実装することができる。プログラム製品のプログラム(複数可)は、(本明細書に記載した方法を含む)実施形態の機能を定義し、様々なコンピュータ可読記憶媒体上に含めることができる。コンピュータ可読記憶媒体例には、それだけには限定されないが、(i)情報が永久に格納される書き込み不可の記憶媒体(例えば、CD−ROMドライブによって読み込み可能なCD−ROMディスク、フラッシュメモリ、ROMチップ、又は任意のタイプの固体不揮発性半導体メモリなど、コンピュータ内の読み取り専用記憶装置)、及び(ii)変更可能な情報が格納される書き込み可能な記憶媒体(例えば、ディスケットドライブ又はハードディスクドライブ内のフロッピーディスク、又は任意のタイプの固体ランダムアクセス半導体メモリ)を含む。本発明の機能を指示するコンピュータ可読命令を含むとき、こうしたコンピュータ可読記憶媒体は本発明の実施形態である。
【0086】
[0096]上記を鑑み、本発明の範囲は、以下の特許請求の範囲によって決定される。

【特許請求の範囲】
【請求項1】
コンテンツサーバからコンテンツプレーヤにデジタルコンテンツのファイルを適応的にダウンロードするための方法であって、
前記コンテンツプレーヤ内のコンテンツバッファに、前記ファイル内に含まれる第1のコード化済みシーケンスから少なくとも1単位のデジタルコンテンツをダウンロードするステップであり、前記ファイルが複数のコード化済みシーケンスを含み、各コード化済みシーケンスが、再生のために前記コンテンツバッファに格納されたデジタルコンテンツにアクセスすることができる異なるビットレートに対応し、前記第1のコード化済みシーケンスが、再生のために前記コンテンツバッファに格納された前記デジタルコンテンツにアクセスすることができる最低のビットレートに対応する、ステップと、
デジタルコンテンツの前記ファイルの中の1単位又は複数単位のデジタルコンテンツを、依然として再生のためにダウンロードし、バッファに入れなければならないことを決定するステップと、
次の単位のデジタルコンテンツをダウンロードするための前記複数のコード化済みシーケンスに含まれる次のコード化済みシーケンスを決定するステップと、
前記次の単位のデジタルコンテンツを、再生のために、前記次のコード化済みシーケンスから前記コンテンツバッファにダウンロードするステップと
を含む方法。
【請求項2】
前記次のコード化済みシーケンスが前記第1のコード化済みシーケンスを備える請求項1に記載の方法。
【請求項3】
前記次のコード化済みシーケンスが、前記複数のコード化済みシーケンスに含まれる第2のコード化済みシーケンスを備え、前記第2のコード化済みシーケンスが、再生のために前記コンテンツバッファに格納された前記デジタルコンテンツにアクセスすることができる第2のビットレートに対応し、前記第2のビットレートが最低のビットレートより大きい請求項1に記載の方法。
【請求項4】
前記次のコード化済みシーケンスを決定する前記ステップが、再生のために前記コンテンツサーバからまだダウンロードされていないデジタルコンテンツの前記ファイルにおけるデジタルコンテンツの全単位は、前記第2のコード化済みシーケンスから少なくとも一部分ダウンロードすることができ、バッファアンダーランを引き起こすことなく、前記第2のビットレートで、再生のために前記コンテンツバッファからアクセスすることができることを決定するステップを含む請求項3に記載の方法。
【請求項5】
別の単位のデジタルコンテンツをダウンロードするための前記複数のコード化済みシーケンスに含まれる第3のコード化済みシーケンスを決定するステップをさらに含み、前記第3のコード化済みシーケンスが、再生のために前記コンテンツバッファに格納された前記デジタルコンテンツにアクセスすることができる第3のビットレートに対応し、前記第3のビットレートが前記最低のビットレートより大きく、しかし前記第2のビットレート未満である請求項4に記載の方法。
【請求項6】
前記第3のコード化済みシーケンスから前記コンテンツバッファに前記別の単位のデジタルコンテンツをダウンロードするステップをさらに含む請求項5に記載の方法。
【請求項7】
前記第3のコード化済みシーケンスを決定する前記ステップが、再生のために前記コンテンツバッファからまだダウンロードされていないデジタルコンテンツの前記ファイルにおけるデジタルコンテンツの全単位は、前記第3のコード化済みシーケンスから少なくとも一部分ダウンロードすることができ、バッファアンダーランを引き起こすことなく、前記第3のビットレートで、再生のために前記コンテンツバッファからアクセスすることができることを決定するステップを含む請求項5に記載の方法。
【請求項8】
前記第2のコード化済みシーケンスと関連した前記デジタルコンテンツの品質が前記第3のコード済みシーケンスと関連した前記デジタルコンテンツの品質より高い請求項5に記載の方法。
【請求項9】
前記次のコード化済みシーケンスが、再生のために前記コンテンツバッファに含まれるデジタルコンテンツにアクセスすることができる第1のビットレートに対応する第1の部分と、再生のために前記コンテンツバッファに含まれるデジタルコンテンツにアクセスすることができる第2のビットレートに対応する第2の部分とを含む集計されたコード化済みシーケンスを備え、前記第1のビットレートが前記第2のビットレートより大きく、前記第2のビットレートが前記最低のビットレート以上である請求項1に記載の方法。
【請求項10】
デジタルコンテンツの前記ファイルが、動画又はテレビ番組と関連したデジタルコンテンツを含む請求項1に記載の方法。
【請求項11】
処理ユニットによって実行されると、
前記コンテンツプレーヤ内のコンテンツバッファに、ファイル内に含まれる第1のコード化済みシーケンスから少なくとも1単位のデジタルコンテンツをダウンロードするステップであり、前記ファイルが複数のコード化済みシーケンスを含み、各コード化済みシーケンスが、再生のために前記コンテンツバッファに格納されたデジタルコンテンツにアクセスすることができる異なるビットレートに対応し、前記第1のコード化済みシーケンスが、再生のために前記コンテンツバッファに格納された前記デジタルコンテンツにアクセスすることができる最低のビットレートに対応する、ステップと、
デジタルコンテンツの前記ファイルの中の1単位又は複数単位のデジタルコンテンツを、依然として再生のためにダウンロードし、バッファに入れなければならないことを決定するステップと、
次の単位のデジタルコンテンツをダウンロードするための前記複数のコード化済みシーケンスに含まれる次のコード化済みシーケンスを決定するステップと、
前記次の単位のデジタルコンテンツを、再生のために、前記次のコード化済みシーケンスから前記コンテンツバッファにダウンロードするステップと
を実行することによって、前記処理ユニットに、コンテンツサーバからコンテンツプレーヤにデジタルコンテンツの前記ファイルを適応的にダウンロードさせる命令を含むコンピュータ可読媒体。
【請求項12】
前記次のコード化済みシーケンスが前記第1のコード化済みシーケンスを備える請求項11に記載のコンピュータ可読媒体。
【請求項13】
前記次のコード化済みシーケンスが、前記複数のコード化済みシーケンスに含まれる第2のコード化済みシーケンスを備え、前記第2のコード化済みシーケンスが、再生のために前記コンテンツバッファに格納された前記デジタルコンテンツにアクセスすることができる第2のビットレートに対応し、前記第2のビットレートが最低のビットレートより大きい請求項11に記載のコンピュータ可読媒体。
【請求項14】
前記次のコード化済みシーケンスを決定する前記ステップが、再生のために前記コンテンツサーバからまだダウンロードされていないデジタルコンテンツの前記ファイルにおけるデジタルコンテンツの全単位は、前記第2のコード化済みシーケンスから少なくとも一部分ダウンロードすることができ、バッファアンダーランを引き起こすことなく、前記第2のビットレートで、再生のために前記コンテンツバッファからアクセスすることができることを決定するステップを含む請求項13に記載のコンピュータ可読媒体。
【請求項15】
別の単位のデジタルコンテンツをダウンロードするための前記複数のコード化済みシーケンスに含まれる第3のコード化済みシーケンスを決定するステップをさらに含み、前記第3のコード化済みシーケンスが、再生のために前記コンテンツバッファに格納された前記デジタルコンテンツにアクセスすることができる第3のビットレートに対応し、前記第3のビットレートが前記最低のビットレートより大きく、しかし前記第2のビットレート未満である請求項14に記載のコンピュータ可読媒体。
【請求項16】
前記第3のコード化済みシーケンスから前記コンテンツバッファに前記別の単位のデジタルコンテンツをダウンロードするステップをさらに含む請求項15に記載のコンピュータ可読媒体。
【請求項17】
前記第3のコード化済みシーケンスを決定する前記ステップが、再生のために前記コンテンツバッファからまだダウンロードされていないデジタルコンテンツの前記ファイルにおけるデジタルコンテンツの全単位は、前記第3のコード化済みシーケンスから少なくとも一部分ダウンロードすることができ、バッファアンダーランを引き起こすことなく、前記第3のビットレートで、再生のために前記コンテンツバッファからアクセスすることができることを決定するステップを含む請求項15に記載のコンピュータ可読媒体。
【請求項18】
前記第2のコード化済みシーケンスと関連した前記デジタルコンテンツの品質が前記第3のコード化済みシーケンスと関連した前記デジタルコンテンツの品質より高い請求項15に記載のコンピュータ可読媒体。
【請求項19】
前記次のコード化済みシーケンスが、再生のために前記コンテンツバッファに含まれるデジタルコンテンツにアクセスすることができる第1のビットレートに対応する第1の部分と、再生のために前記コンテンツバッファに含まれるデジタルコンテンツにアクセスすることができる第2のビットレートに対応する第2の部分とを含む集計されたコード化済みシーケンスを備え、前記第1のビットレートが前記第2のビットレートより大きく、前記第2のビットレートが前記最低のビットレート以上である請求項11に記載のコンピュータ可読媒体。
【請求項20】
デジタルコンテンツの前記ファイルが、動画又はテレビ番組と関連したデジタルコンテンツを含む請求項11に記載のコンピュータ可読媒体。
【請求項21】
ダウンロードされたデジタルコンテンツを格納するためのコンテンツバッファを含むメモリと、
前記コンテンツバッファに、ファイル内に含まれる第1のコード化済みシーケンスから少なくとも1単位のデジタルコンテンツをダウンロードし、前記ファイルが複数のコード化済みシーケンスを含み、各コード化済みシーケンスが、再生のために前記コンテンツバッファに格納されたデジタルコンテンツにアクセスすることができる異なるビットレートに対応し、前記第1のコード化済みシーケンスが、再生のために前記コンテンツバッファに格納された前記デジタルコンテンツにアクセスすることができる最低のビットレートに対応し、
デジタルコンテンツの前記ファイルの中の1単位又は複数単位のデジタルコンテンツを、依然として再生のためにダウンロードし、バッファに入れなければならないことを決定し、
次の単位のデジタルコンテンツをダウンロードするための前記複数のコード化済みシーケンスに含まれる次のコード化済みシーケンスを決定し、
前記次の単位のデジタルコンテンツを、再生のために、前記次のコード化済みシーケンスから前記コンテンツバッファにダウンロードする
ように構成された、メモリに結合された処理ユニットと
を備える、コンテンツサーバからコンテンツプレーヤにデジタルコンテンツの前記ファイルを適応的にダウンロードするように構成されたコンテンツプレーヤデバイス。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

image rotate

【図4C】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7A】
image rotate

【図7B】
image rotate

【図7C】
image rotate

【図7D】
image rotate


【公表番号】特表2013−500634(P2013−500634A)
【公表日】平成25年1月7日(2013.1.7)
【国際特許分類】
【出願番号】特願2012−521842(P2012−521842)
【出願日】平成22年7月23日(2010.7.23)
【国際出願番号】PCT/US2010/043103
【国際公開番号】WO2011/011717
【国際公開日】平成23年1月27日(2011.1.27)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
2.フロッピー
【出願人】(506267178)ネットフリックス・インコーポレイテッド (6)
【氏名又は名称原語表記】NETFLIX, INC.
【Fターム(参考)】