"第1のバージョンのメディアプログラムを有する第1のビットストリームおよび第2のバージョンの前記メディアプログラムを有する第2のビットストリームから適応的に選択するようにメディアプレーヤを構成する方法であって、前記第1のビットストリームは、前記第2のビットストリームと異なるビットレートを有する方法であって、前記第1のビットストリームの前記ビットレートの時間変動性を記述するデータを受信することと、前記第1のビットストリームを通信チャネル上で受信することと、前記通信チャネルのスループットを判定することと、前記通信チャネルの前記スループットと前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記受信されたデータとの比較結果を生成することと、前記生成された比較結果に少なくとも部分的に従って、さらに受信するための前記第2のビットストリームを選択することと、の各ステップを備える方法。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記第1のビットストリームの前記ビットレートを時間の関数として記述する、請求項1に記載の方法。前記第1のビットストリームの前記時間変動性ビットレートを記述する前記データは、前記メディアプログラムの継続期間未満の期間にわたる前記第1のビットストリームの平均ビットレートを備える、請求項1に記載の方法。前記メディアプログラムは複数の時間期間を備え、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記複数の時間期間の各々に対する前記第1のビットストリームの平均ビットレートを備える、請求項3に記載の方法。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、複数の級数係数を備える、請求項1に記載の方法。前記方法は、前記第2のビットストリームの前記ビットレートの前記時間変動性を記述するデータを受信するステップをさらに備え、前記複数の通信のチャネルの前記スループットと前記受信されたデータとの前記生成された比較結果は、前記第1のビットストリームの前記ビットレートの前記時間変動性および前記第2のビットストリームの前記時間変動性ビットレートと比較される、請求項1に記載の方法。前記メディアプレーヤはバッファを備え、前記第2のビットストリームは、前記バッファの容量、および前記バッファが一杯であることに少なくとも部分的に従ってさらに選択される、請求項1に記載の方法。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データおよび前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信する前に受信される、請求項1に記載の方法。前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信した後に受信される、請求項1に記載の方法。第1のバージョンのメディアプログラムを有する第1のビットストリームおよび第2のバージョンの前記メディアプログラムを有する第2のビットストリームから適応的に選択する装置であって、前記第1のビットストリームは、前記第2のビットストリームと異なるビットレートを有する装置であって、前記第1のビットストリームの前記ビットレートの時間変動性を記述するデータを受信するための手段と、前記第1のビットストリームを通信チャネル上で受信するための手段と、前記通信チャネルのスループットを判定するための手段と、前記通信チャネルの前記スループットと前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記受信されたデータとの比較結果を生成するための手段と、前記生成された比較結果に少なくとも部分的に従って、さらに受信するための前記第2のビットストリームを選択するための手段と、を備える装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記第1のビットストリームの前記ビットレートを時間の関数として記述する、請求項10に記載の装置。前記第1のビットストリームの前記時間変動性ビットレートを記述する前記データは、前記メディアプログラムの継続期間未満の期間にわたる第1のビットストリームの平均ビットレートを備える、請求項10に記載の装置。前記メディアプログラムは複数の時間期間を備え、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記複数の時間期間の各々に対する前記第1のビットストリームの平均ビットレートを備える、請求項12に記載の装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、複数の級数係数を備える、請求項10に記載の装置。前記装置は、前記第2のビットストリームの前記ビットレートの前記時間変動性を記述するデータを受信するための手段をさらに備え、前記複数の通信のチャネルの前記スループットと前記受信されたデータとの前記生成された比較結果は、前記第1のビットストリームの前記ビットレートの前記時間変動性および前記第2のビットストリームの前記時間変動性ビットレートと比較される、請求項10に記載の装置。前記メディアプレーヤはバッファを備え、前記第2のビットストリームは、前記バッファの容量、および前記バッファが一杯であることに少なくとも部分的に従ってさらに選択される、請求項10に記載の装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データおよび前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信する前に受信される、請求項10に記載の装置。前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信した後に受信される、請求項10に記載の装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述するデータを受信するための前記手段は、プロセッサ、および前記第1のビットストリームの前記ビットレートの前記時間変動性を記述するデータを受信するための複数の命令を格納するメモリを備え、前記第1のビットストリームを前記通信チャネル上で受信するための前記手段は、前記プロセッサおよび前記メモリを備え、前記メモリは、前記第1のビットストリームを通信チャネル上で受信するための複数の命令をさらに格納し、前記通信チャネルの前記スループットを判定するための前記手段は、前記プロセッサおよび前記メモリを備え、前記メモリは、前記通信チャネル上のスループットを判定するための複数の命令をさらに備え、前記通信チャネルの前記スループットと前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データとの前記比較結果を生成するための前記手段は、前記プロセッサおよび前記メモリを備え、前記メモリは、前記通信チャネルの前記スループットと前記第1のビットストリームの前記時間変動性ビットレートを記述する前記受信されたデータとの比較結果を生成するための複数の命令をさらに備え、前記生成された比較結果に少なくとも部分的に従って、さらに受信するための前記第2のビットストリームを選択するための前記手段は、前記プロセッサおよび前記メモリを備え、前記メモリは、前記生成された比較結果に少なくとも部分的に従って、さらに受信するための前記第2のビットストリームを選択するための複数の命令をさらに備える、請求項10に記載の装置。第1のバージョンのメディアプログラムを有する第1のビットストリームおよび第2のバージョンの前記メディアプログラムを有する第2のビットストリームから適応的に選択するようにメディアプレーヤを構成する方法であって、前記第1のビットストリームは、前記第2のビットストリームと異なるビットレートを有する方法であって、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述するデータを生成することと、前記メディアプログラムの要求をユーザデバイスから受信することと、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データを送信することと、前記第1のビットストリームを通信チャネル上に送信することと、前記第2のビットストリームの要求を前記ユーザデバイスから受信することであって、前記要求は、前記ビットレートの前記時間変動性を記述する前記受信されたデータと前記複数の通信のチャネルのスループットとの比較結果に少なくとも部分的に基づくことと、前記第2のビットストリームを前記複数の通信のチャネル上で送信することと、の各ステップを備える方法。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記第1のビットストリームの前記ビットレートを時間の関数として記述する、請求項20に記載の方法。前記第1のビットストリームの前記時間変動性ビットレートを記述する前記データは、前記メディアプログラムの継続期間未満の期間にわたる前記第1のビットストリームの平均ビットレートを備える、請求項20に記載の方法。前記メディアプログラムは複数の期間を備え、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記複数の期間の各々に対する前記第1のビットストリームの平均ビットレートを備える、請求項22に記載の方法。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、複数の級数係数を備える、請求項20に記載の方法。前記方法は、前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する第2のデータを生成することと、前記第2のビットストリームの前記ビットレートの前記時間変動性を記述するデータを送信することと、の各ステップをさらに備え、前記複数の通信のチャネルの前記スループットと前記受信されたデータとの前記生成された比較結果は、前記第1のビットストリームの前記ビットレートの前記時間変動性および前記第2のビットストリームの前記時間変動性ビットレートと比較される、請求項20に記載の方法。前記メディアプレーヤはバッファを備え、前記第2のビットストリームは、前記バッファの容量、および前記バッファが一杯であることに少なくとも部分的に従ってさらに選択される、請求項20に記載の方法。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データおよび前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信する前に受信される、請求項20に記載の方法。前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信した後に受信される、請求項20に記載の方法。第1のバージョンのメディアプログラムを有する第1のビットストリームおよび第2のバージョンの前記メディアプログラムを有する第2のビットストリームから適応的に選択するようにメディアプレーヤを構成する装置であって、前記第1のビットストリームは、前記第2のビットストリームと異なるビットレートを有する装置であって、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述するデータを生成するための手段と、前記メディアプログラムの要求をユーザデバイスから受信するための手段と、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データを送信するための手段と、前記第1のビットストリームを通信チャネル上に送信するための手段と、前記第2のビットストリームの要求を前記ユーザデバイスから受信するための手段であって、前記要求は、前記ビットレートデータの前記時間変動性を記述する前記受信されたデータと前記複数の通信のチャネルのスループットとの比較結果に少なくとも部分的に基づく手段と、前記第2のビットストリームを前記複数の通信のチャネル上で送信する手段と、を備える装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記第1のビットストリームの前記ビットレートを時間の関数として記述する、請求項29に記載の装置。前記第1のビットストリームの前記時間変動性ビットレートを記述する前記データは、前記メディアプログラムの継続期間未満の期間にわたる前記第1のビットストリームの平均ビットレートを備える、請求項29に記載の装置。前記メディアプログラムは複数の時間期間を備え、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記複数の時間期間の各々に対する前記第1のビットストリームの平均ビットレートを備える、請求項31に記載の装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、複数の級数係数を備える、請求項29に記載の装置。前記装置は、前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する第2のデータを生成するための手段と、前記第2のビットストリームの前記ビットレートの前記時間変動性を記述するデータを送信するための手段と、をさらに備え、前記複数の通信のチャネルの前記スループットと前記受信されたデータとの前記生成された比較結果は、前記第1のビットストリームの前記ビットレートの前記時間変動性および前記第2のビットストリームの前記時間変動性ビットレートと比較される、請求項29に記載の装置。前記メディアプレーヤはバッファを備え、前記第2のビットストリームは、前記バッファの容量、および前記バッファが一杯であることに少なくとも部分的に従ってさらに選択される、請求項29に記載の装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データおよび前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信する前に受信される、請求項29に記載の装置。前記第2のビットストリームの前記ビットレートの前記時間変動性を記述する前記データは、前記通信チャネル上で前記第1のビットストリームを受信した後に受信される、請求項29に記載の装置。前記第1のビットストリームの前記ビットレートの前記時間変動性を記述するデータを生成するための前記手段は、プロセッサ、および前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データを生成するための複数の命令を格納するメモリを備え、前記メディアプログラムの前記要求を前記ユーザデバイスから受信するための前記手段、および前記第2のビットストリームの要求を前記ユーザデバイスから受信するための手段は、前記プロセッサを備え、前記メモリは、前記メディアプログラムの前記要求を前記ユーザデバイスから受信するための、および前記第2のビットストリームの要求を前記ユーザデバイスから受信するための複数の命令をさらに格納し、前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データを送信するための前記手段、前記第1のビットストリームを通信チャネル上に送信するための前記手段、および前記第2のビットストリームを前記複数の通信のチャネル上に送信するための手段は、前記プロセッサ、ならびに前記第1のビットストリームの前記ビットレートの前記時間変動性を記述する前記データを送信するため、および前記第1のビットストリームを前記通信チャネル上に送信するため、および前記第2のビットストリームを複数の通信のチャネル上に送信するための複数の命令をさらに格納するメモリを備える、請求項29に記載の装置。以下の説明では、本発明のいくつかの実施形態の一部を形成し、かつ例示によって示される複数の添付図面が参照される。本発明の範囲を逸脱することなく、他の複数の実施形態を利用してもよく、複数の構造的変更を行ってもよいことが理解される。図1は、例示的メディアプログラムシステム100を示す図である。図示される実施形態では、システム100は、インターネットなどの通信ネットワーク104に通信可能に結合され、かつ1つまたは複数のソースメディアプログラムデータベース124A、124Bに通信可能に結合された1つまたは複数のソースビデオサーバ122A、122Bをそれぞれ有する1つまたは複数のメディアプログラムソース120A、120Bを備えてもよい。メディアプログラムシステム100は、通信ネットワーク104に通信可能に結合され、かつ1つまたは複数のプロバイダビデオサーバ112および1つまたは複数のプロバイダデータベース114を有するメディアプログラムプロバイダ110をさらに備える。一実施形態では、メディアプログラムプロバイダ110は、ビデオオンデマンドおよび/またはストリーミングメディアプログラムプロバイダである。メディアプログラムシステム100は、複数のメディアプログラムをコンピュータなどの第1のユーザデバイス102A、または携帯電話などの第2のユーザデバイス102Bに送信する以下、代わりにユーザデバイス複数120と呼ぶ。この送信は、メディアプログラムプロバイダ110から直接であってもよい、またはメディアプログラムプロバイダ110はポータルとして動作して、メディアプログラム自体代わりに、メディアプログラムソース複数120により提供されるではなく、複数のメディアプログラムソース120Aおよび120Bから利用可能である複数のメディアプログラムへのインタフェースを提供してもよい。第1の事例では、メディアプログラムプロバイダ110は、複数のメディアプログラムソース120例えばwww.fox.comまたはwww.nbc.comから複数のメディアプログラムのライセンス供与を受け、このような複数のプログラムに対するメタデータも、典型的には、同様にメディアプログラムソース120からメディアプログラムプロバイダ110に提供される。このようなメタデータは、使用するためにメディアプログラムプロバイダのデータベース114により取り出すことができる。補足のメタデータが必要な場合、以下でさらに説明されるように、補足のメタデータは、メディアプログラムプロバイダ110およびメディアプログラムソース120とは無関係のメタデータソース130から得ることができる。第2の事例では、複数のメディアプログラムは、直接メディアプログラムソース120の複数のサーバからユーザデバイス102にストリーミングされる。メディアプログラムがメディアプログラムソース120から直接ストリーミングされるとき、メディアプログラムソース120により提供されるメタデータは不十分である場合がしばしばある。複数のこのような場合、補足のメタデータが無関係のメタデータソース130例えばwww.tv.comまたはwww.imdb.comまたは他のサードパーティの複数のソースから得られることがある。この状況では、メディアプログラムプロバイダ110の役割は、利用可能な複数のメディアプログラムのリスト、およびこのような複数のプログラムを見つけ出すために検索し、かつこのような複数のプログラムを視聴するインタフェースをユーザ132に提供するポータルの役割である。複数のメディアプログラムおよびメタデータは、インターネットなどの通信ネットワーク104を介して、または複数の補助および/または専用通信リンク134を通して得られてもよい。このような情報は、ウェブクローリングにより例えば、ワールドワイドウェブを順序だった、自動化された方法でブラウズするプログラムまたは自動化スクリプトを使用して得られてもよい。複数のユーザデバイス102を使用して、複数の遠隔ユーザ132が、通信ネットワーク104を使用してメディアプログラムプロバイダ110と通信して、複数のメディアプログラムビデオオンデマンドおよび/またはストリーミングビデオサービスを含むを得て、プロバイダのメディアプログラムデータベース114を検索して、関心のある複数のメディアプログラムを見つけ出すことができる。メディアプログラムシステム100はまた、メディアプログラムプロバイダ110または複数のメディアプログラムソース120により提供される複数のメディアプログラムと一緒に再生される複数の広告を供給する1つまたは複数の広告プロバイダ140を備えてもよい。図示される実施形態では、広告プロバイダ140は、関連づけられ、かつ通信可能に結合された広告プロバイダデータベース144に通信可能に結合された広告プロバイダサーバ142を含む。複数の広告は、インターネット104、専用リンク146を介して、または広告を有するメモリ記憶デバイスの物理的交換により、広告プロバイダ140からメディアプログラムプロバイダ110に供給されてもよい。このような複数の広告は、メディアプログラムプロバイダ110により提供および格納され、該当する時間に、メディアプログラムと一緒にユーザデバイス複数102にストリーミングまたはダウンロードすることができる。一実施形態では、複数の広告は、メディアプログラムプロバイダ110からストリーミングまたはダウンロードされたビデオと一体化される。別の実施形態では、複数の広告は、メディアプログラムと一体化されるのではなく、代わりに、メディアプログラムとは別個に複数のユーザデバイス102に送信され、各広告がいつ提示されるべきかを示す複数のインデックスを使用して、該当する時間に再生される。例えば、複数の広告は、インデックスをつけることができる、および複数のユーザデバイス102にストリーミングまたはダウンロードすることができメディアプログラムプロバイダ110または広告プロバイダ140から、このような複数の広告は、メディアプログラム内の対応する複数のインデックスにより示される複数の時間に、ユーザ132に対して再生することができる。図2は、複数のユーザデバイス102、複数のサーバ112、122および142、ならびにデータベース114、124および144を含む、本発明の複数の要素を実現するために使用することができる例示的コンピュータシステム202を示す。コンピュータ202は、汎用ハードウェアプロセッサ204Aおよび/または専用ハードウェアプロセッサ204B以下、代わりに集合的にプロセッサ204と呼ぶ、ならびにランダムアクセスメモリRAMなどのメモリ206を備える。コンピュータ202は、キーボード214、マウスデバイス216およびプリンタ228などの複数の入出力I/Oデバイスを含む他の複数のデバイスに結合されてもよい。一実施形態では、コンピュータ202は、オペレーティングシステム208の制御下でコンピュータプログラム210により規定される複数の命令を汎用プロセッサ204Aが実行することにより動作する。コンピュータプログラム210および/またはオペレーティングシステム208は、メモリ206に格納されてもよく、ユーザ132および/または他の複数のデバイスとインタフェースで接続して、入力および複数のコマンドを受け入れて、このような入力および複数のコマンド、ならびにコンピュータプログラム210およびオペレーティングシステム208により規定される複数の命令に基づき、出力および複数の結果を提供してもよい。出力/複数の結果は、ディスプレイ222上に示されても、提示する、またはさらに処理もしくは動作させるために、他のデバイスに提供されてもよい。典型的には、ディスプレイ222は、状態を変えて、ユーザ132に画像を集合的に提示する複数の画像要素複数の画素を備える。例えば、ディスプレイ222は、不透明な状態または半透明な状態に変化して、入力および複数のコマンドに対してコンピュータプログラム210および/またはオペレーティングシステム208の複数の命令を適用することにより、プロセッサ204により生成されたデータまたは情報に応答して、ディスプレイ上で画像の一部を形成する液晶をそれぞれ備える別個にアドレス可能な複数の画素を有する液晶ディスプレイLCDを備えてもよい。同様に、複数のプラズマディスプレイが、異なる色の蛍光体をそれぞれ備える3つの別個のサブピクセルからなるセルを有する画素を含む。複数の色が一緒に混ざり合って、画素内に提示される色を生成する。複数のセルを通って流れる複数の電流パルスが、入力および複数のコマンドに応答してコンピュータプログラムおよび/またはオペレーティングシステム208の複数の命令を適用することにより、プロセッサにより生成されたデータに従って変更され、画素により提供される光の強さが変化する。また、同様に、複数の陰極線管CRTディスプレイが複数の画素を含み、それぞれ、各画素が、典型的にはアパーチャグリルからの複数のドットまたは複数のラインで表現される複数のサブピクセルを有する。各ドットまたはラインは、電子銃からの複数の電子が衝突したときに光を放つ蛍光体コーティングを含む。コンピュータプログラムおよび/またはオペレーティングシステム208の複数の命令を適用することにより、プロセッサにより生成されたデータに応答して、ならびに入力および/または複数のコマンドに応答して、電子銃により放出された複数の電子は、複数のドットまたは複数のラインに導かれ、したがって、このドットまたはラインの蛍光体コーティングに光を放たせることにより関連する画素の状態を変更する。画像はグラフィカルユーザインタフェースGUIモジュール218Aにより提供されてもよい。GUIモジュール218Aは別個のモジュールとして描かれているが、複数のGUI機能を実行する複数の命令が、オペレーティングシステム208、コンピュータプログラム210内に常駐もしくは分散する、または専用のメモリおよび複数のプロセッサで実現することができる。コンピュータプログラム110の複数の命令に従ってコンピュータ202により実行される複数の動作の一部またはすべてが、専用プロセッサ204Bで実現されてもよい。さらに、コンピュータプログラム210の複数の命令の一部またはすべては、読出し専用メモリROM、プログラム可能読出し専用メモリPROM、もしくは専用プロセッサ204B内部またはメモリ206内のフラッシュメモリに格納された複数のファームウェア命令により実現されてもよい。専用プロセッサ204Bはまた、複数の動作の一部またはすべてを実行して本発明を実現する回路設計により、ハードウェアに組み込まれてもよい。さらに、専用プロセッサ204Bは、複数の機能のサブセットを実行するための専用回路、および複数のコンピュータプログラム命令に応答するなどのより一般的な複数の機能を実行するための他の複数の回路を含むハイブリッドプロセッサでもよい。一実施形態では、専用プロセッサは、特定用途向け集積回路ASICである。コンピュータ202はまた、COBOL、C、FORTRANまたは他の言語などのプログラミング言語で書かれたアプリケーションプログラム210をプロセッサ204の可読コードに翻訳することができるようにするコンパイラ212を実装してもよい。コンパイル後、アプリケーションまたはコンピュータプログラム210は、コンパイラ212を使用して生成された複数の関係およびロジックを使用して、複数のI/Oデバイスから受け入れられ、コンピュータ202のメモリ206に格納されたデータにアクセスし、操作する。コンピュータ202はまた、モデム、衛星リンク、イーサネット登録商標カードまたは他の複数のコンピュータから入力を受け入れ他の複数のコンピュータに出力を提供する他のデバイスなどの外部通信デバイスを任意選択で備える。一実施形態では、オペレーティングシステム208、コンピュータプログラム210およびコンパイラ212を実現する複数の命令は、コンピュータ可読媒体、例えば1つまたは複数の固定のまたは取外し可能なデータ記憶デバイス、例えばジップドライブ、フロッピー登録商標ディスクドライブ224、ハードドライブ、CD-ROMドライブ、テープドライブ、DVDなどを含むことができるデータ記憶デバイス220内に有形に具体化される。さらに、オペレーティングシステム208およびコンピュータプログラム210は、コンピュータ202によりアクセスされ、読み出され、実行されたとき、コンピュータ202に本発明を実現および/もしくは使用するのに必要な、または複数の命令からなるプログラムをメモリの中にロードするのに必要な複数のステップを実行させる複数のコンピュータプログラム命令を備え、したがって、コンピュータに本明細書で説明される複数の方法ステップを実行する専用にプログラムされたコンピュータとして動作させる専用データ構造を生成する。コンピュータプログラム210および/または動作させる複数の命令はまた、メモリ206および/または複数のデータ通信デバイス230内に有形に具体化されてもよく、それにより、本発明によるコンピュータプログラム製品または製造物を作成する。このため、用語製造物、プログラム記憶デバイスおよびコンピュータプログラム製品は、本明細書で使用されるとき、任意のコンピュータ可読デバイスまたは媒体からアクセス可能なコンピュータプログラムを包含するものとする。当然のことながら、上記の複数の構成要素の任意の組合せ、または任意の数の異なる複数の構成要素、複数の周辺装置および他の複数のデバイスが、コンピュータ202と共に使用されてもよいことを当業者であれば理解されよう。本明細書では用語ユーザコンピュータと呼ばれるが、ユーザコンピュータ102は、複数の携帯デバイス、例えば複数の携帯電話、複数の携帯型MP3プレーヤ、複数のビデオゲーム機、複数のノートブックコンピュータ、複数のポケットコンピュータ、複数の携帯情報端末複数のPDAまたは適切な処理、通信および入出力の機能を備えた任意の他のデバイスを含んでもよいことが理解される。図3は、コンテンツ配送サブシステムCDS300の一実施形態、およびHTTP、TCP、RSTPまたは類似の複数のプロトコルに従ってユーザ132に提示するための複数のメディアプログラムおよび複数の広告を配送するために使用することができるトップレベルの複数の動作を示す図である。これらの複数のプロトコルを使用して、メディアプログラム配送中に、メディアプログラムプレーヤ110からの要求に従って、またはメディアサーバ114の主導権で、メディアプログラムプレーヤ110に送信されるデータのスループットを変更することができる。例えば、RTSPは、メディアサーバが、メディアサーバの能力に適合する特定の速度でメディアプログラムプレーヤにデータを配送し、この速度でメディアを提供することを望むことを要求する速度要求ヘッダフィールドを定義する。図示される実施形態では、コンテンツ配送サブシステム300は、ユーザデバイス102、メディアプログラムプロバイダ110および広告プロバイダ140を含む。メディアプログラムプロバイダ110は、フィードサービス306、コンテンツセレクタ308およびコンテンツ管理サービス310を備える。ユーザ132が、ユーザデバイス102を使用してメディアプログラムを選択したとき、選択されたメディアプログラムのメディアプログラム識別子PIDを要求するメッセージが、ユーザデバイス102からメディアプログラムプロバイダ110に送信される。フィードサービス306は要求を受信し、コンテンツ管理サービス310を介して安全な記憶装置312から得られた情報を使用して、フィードサービス306は、選択されたメディアプログラムに対するPIDを決定し、PIDをユーザデバイス102に送信する。ユーザデバイスは、このPIDおよびユーザIDをメディアプログラムプロバイダ110のコンテンツセレクタ308に送信する。コンテンツセレクタ308は、情報をコンテンツ管理サービス310に転送し、コンテンツ管理サービス310は、広告サービス318を使用して、安全な記憶装置312に格納された情報を使用して、ユーザおよび選択されたメディアプログラムに適合した複数の広告を選択する。これは、2010年5月26日に出願された、WingChitMakによる迅速でスケーラブルな管理された広告サービスのための方法および装置METHODANDAPPARATUSFORRAPIDANDSCALEABLEDIRECTEDADVERTISINGSERVICEと題する同時係属中の特許出願第12/787,679号明細書に説明されるように実現されてもよく、この出願は参照により本明細書に組み入れられる。コンテンツ管理サービス310は、この情報をコンテンツセレクタ318に転送し、コンテンツセレクタ318は、選択されたメディアプログラムをユーザデバイス102がメディアサーバ114から得ることができる情報だけでなく、広告プロバイダ140からの複数の広告も送信する。図示される実施形態では、この情報は、メディアサーバ114から所望のメディアプログラムを得ることができるアドレス例えばURLを含む。ユーザデバイス102は、指定されたアドレスにあるメディアサーバ114にメディアプログラム要求を送信する。メディアサーバ114は、メディアプログラムを安全な記憶装置から取り出し、メディアプログラムをユーザデバイス102に送信する。ユーザデバイス102は、送信されたメディアプログラムを受信し、メディアプログラムをバッファ305に一時的に格納してもよい。バッファ305は、ハードウェアおよび/またはソフトウェアのバッファリングを含んでもよく、メディアプログラムプレーヤ305内、またはユーザデバイス102内の他のどこかに存在してもよい。ユーザデバイス102はまた、広告プロバイダ120からの複数の広告を要求し、複数の広告を同様に受信してもよい。典型的には、メディアサーバ114は、異なるスループットまたは帯域幅の複数の通信チャネルにそれぞれ適した、複数のバージョンのメディアプログラムを有する。ユーザデバイス102または他の場所から受信された情報を使用して、メディアプレーヤ114は、ユーザデバイス102に送信するメディアプログラムの最も該当するバージョンを決定する。この決定は、例えば、メディアプログラムをユーザデバイス102に送信するために使用される通信チャネルの帯域幅または利用可能なビットレート、ユーザデバイスのスループット、ならびにユーザデバイス102で実現されるバッファ305のサイズおよび速度に基づくことができる。次いで、ユーザデバイス102は、メディアプログラムを受信する。典型的には、メディアプログラムデータは、ユーザデバイス内のハードウェアまたはソフトウェアのバッファ305に格納され、先入れ先出しFIFO法で取り出される。配送されるメディアプログラムのバージョンの平均ビットレートが、複数の通信のチャネルの帯域幅性能よりも低いので、メディアプログラムが再生されている間に、バッファ305は一杯になる。バッファリングされたデータは、通信チャネルの帯域幅またはメディアプログラムのビットレートが変化したときでさえ利用可能であり、したがって、バッファリングされたデータは、途切れ途切れの再生を低減するために使用することができる。メディアプログラムが、必要とされるビットレートで配送されていないとユーザデバイス102が判断した場合メディアプログラムを再生するためにデータが消費される速度が、データが受信される速度を、バッファ305が途切れ途切れの再生を適切に防止することができない程度まで超える、ユーザデバイス102は、異なるバージョンのメディアプログラム例えば、より低いビットレートでの送信に適したバージョンを要求するメッセージをメディアサーバ114に送信してもよい。逆に、メディアプログラムが必要とされるビットレートよりも高く配送されているとユーザデバイス102が判断した場合、ユーザデバイス102は、より高いビットレートでの送信に適したバージョンのメディアプログラムを要求するメッセージをメディアサーバに送信してもよい。これにより、より高い解像度のバージョンのメディアプログラムがユーザ132に提供されることがある。広告プロバイダ140およびメディアサーバ114は、メディアプログラムプロバイダ110とは別個のアーキテクチャエンティティとして図示されているが、広告プロバイダ140は、メディアプログラムプロバイダ110と一体化されてもよいすなわち、メディアプログラムプロバイダはまた、複数の広告を提供してもよい。CDS300は、www.hulu.com、www.imdb.com、www.aol.comまたはwww.msn.comを含んでもよい複数の配送ネットワークを介して複数のメディアプログラムおよび複数の広告を提供する手段を提供する。メディアプログラムおよび広告コンテンツに関するメタデータだけでなく、ストリーミング情報も、複数のメディアプログラムおよび複数の広告をCDS300内部のどこで見つけ出すことができるかを記述するデータのように、データベース312内のコンテンツ配送システム300内に格納されてもよい。ユーザデバイス102は、インタフェースモジュール302およびメディアプログラムプレーヤ304を含んでもよい。インタフェースモジュール302は、情報および複数のメディアプログラムをユーザ132に提示するため、および複数のコマンドを含むユーザ入力を受け入れるために使用される、ユーザデバイス102により実行される複数の命令を含む。複数の例示的ユーザデバイス102が、デスクトップコンピュータ、ラップトップコンピュータまたは携帯デバイス、例えばIPOD、IPHONE、IPAD、携帯型電話機もしくはPALMデバイスである。別の実施形態では、前述のことは、ユーザデバイス102が、PIDを受信し、PIDをコンテンツセレクタに送信する必要なしに実現され、代わりに、単にメディアプログラムの要求をユーザデバイスから受け入れ、ユーザデバイス102に送信され、かつメディアサーバ114からメディアプログラムを得るために使用されるURLおよびメタデータを生成する。図4は、ライブストリーミングプロトコルに従って複数のメディアプログラムを送信するために提供されるコンテンツ配送システム400を示す図である。このプロトコルは、複数の携帯デバイスおよび複数の無線デバイスに対して特に有用である。基本的に、このプロトコルは、ユーザデバイス102がメディアプログラムを要求したときに、小さな複数のセグメントのプレイリストまたはメディアプログラムの複数のチャンクchunksを提供されることを除いて、図3に示すプロトコルに類似している。ユーザデバイス102は、プレイリストを使用して、メディアプログラムの各チャンクを順序正しく送信することを要求し、各チャンクが受信されたとき、各チャンクは処理され、ユーザ132に提示されるメディアプログラムに組み立てられる。図4に示すように、ユーザデバイス102は、メディアプログラムのPIDの要求をフィードサービス306に送信する。要求は、典型的にはユーザID、またはこのプロキシだけでなく、メディアプログラムに対する何らかの識別も備える。フィードサービス306は要求を受信し、安全な記憶装置312およびコンテンツメタデータ/ストリーミング情報データベースから得られた情報を使用して、要求されたメディアプログラムのPIDをCMS310から得る。次いで、PIDはユーザデバイス102に送信される。次いで、ユーザデバイスは、コンテンツセレクタ308にPIDと共にメディアプログラム要求を送信する。次いで、PIDを有するメディアプログラム要求が、コンテンツセレクタ308に送信され、コンテンツセレクタ308は、この情報をコンテンツ管理サービス310に転送する。コンテンツ管理システム318は、広告サービス318を使用して、安全な記憶装置312に格納された情報を使用して、ユーザおよび選択されたメディアプログラムに適合した複数の広告を選択する。この場合も、これは、上述の同時係属中の特許出願第12/787,679号明細書で説明されるように達成されてもよい。コンテンツ管理サービス310は、この情報をコンテンツセレクタ318に転送する。次いで、コンテンツセレクタ308は、マスタプレイリストを生成してもよい。図5は、マスタプレイリスト500の例示的一実施形態を示す図である。マスタプレイリストは、異なる複数のビットレートで表現されたメディアプログラムに対するセグメントプレイリストにそれぞれ関連づけられる複数のリンク502A~502Hを含む。例えば、リンク502Aは、1.5Mbpsのビットレートバージョンのメディアプログラムに対するセグメントプレイリストに関連づけられる。リンク502Bは、3.2MBPSのバージョンのメディアプログラムに対するセグメントリストに関連づけられ、一方、リンク502Hは、64kbpsのバージョンのメディアプログラムに関連づけられる。次いで、マスタプレイリストはユーザデバイス102に送信される。ユーザデバイス102は、受信および再生に最も適合するバージョンのメディアプログラムを選択する。この選択は、例えば、メディアサーバ114とユーザデバイス102の間の複数の通信のチャネルの帯域幅もしくはスループット、および/またはユーザデバイス102内の任意のバッファ複数305のサイズおよびスピードに基づくことができる。ユーザデバイス102は、選択されたバージョンのメディアプログラムのメディアプログラムバージョン要求をコンテンツセレクタ308に送信する。コンテンツセレクタ308は、メディアプログラムバージョン要求を受信し、セグメントプレイリストを生成し、セグメントプレイリストをユーザデバイス102に送信する。ユーザデバイス102は、セグメントプレイリストを受信し、メディアサーバ114または広告プロバイダ140から示された順序でプレイリスト内の複数のセグメントを要求する。図6は、セグメントレイリストの例示的一実施形態を示す図である。セグメントプレイリスト600は、メディアプログラムの各セグメントへの複数のリンク602A~602Nを含む。例えば、リンク602Aは、メディアプログラムのセグメント0へのリンクであり、メディアプログラムを取り出すために必要なトークンを含む。リンク602は、メディアプログラムの次のセグメントセグメント1へのリンクであり、同じくトークンを含む。図7は、ライブストリーミングプロトコルで使用される複数のセグメントを示す図である。メディアプログラムプロバイダ110または他のエンティティは、異なる提示スループットにそれぞれ適した複数の異なるバージョンのメディアプログラムを生成する。図示された実施形態では、3つのバージョンが、すなわち、高highpresentation提示スループットバージョン702、中提示mediumpresentationスループットバージョン704および低提示lowpresentationスループットバージョン706が生成される。さらに、メディアプログラムの各バージョンは、複数のセグメントに分離される。例えば、第1のバージョンのメディアプログラムは、N個のセグメント702-1~702-Nに分離され、第2のバージョンのメディアプログラムは、同じくN個のセグメント704-1~704-Nに分離され、第3のバージョンのメディアプログラムは、N個のセグメント706-1~706-Nに分離される。図示された実施形態では、複数のセグメントのすべてが同じ時間長であるがすなわち、それぞれ同一時間期間からなる、これに該当する必要はない。しかしながら、各特定の時間セグメントの複数のバージョンのすべてが、どれも同一時間長でなければならない。換言すれば、セグメント702-1は、702-2よりも時間的に長くても、短くてもよいが、704-1と同一時間長でなければならない。3つのバージョンのメディアプログラムだけが図示されているが、異なる複数のメディアプログラムの数は、2つのように少ない、または必要とされるだけ多くすることができる。典型的には、複数のバージョンの数は、異なる複数のバージョンの記憶領域、生成および管理、ならびに送信帯域幅の節約、ならびにメディアプログラムプレーヤの複数の処理要件の間のトレードオフである。図8Aおよび図8Bは、メディアプログラムプレーヤ304が、異なる複数のビットレートの複数のメディアプログラムをどのようにして受信することができるかを示す図である。図8Aは、RSTPまたはUDPなどの従来のストリーミングプロトコルに最も適した一実施形態を示し、一方、図8Bに示される実施形態は、ライブストリーミングプロトコルに最も適している。まず、図8Aを参照すると、メディアプログラムが、高解像度および高ビットレートバージョンだけでなく低解像度および低ビットレートバージョンの形で提供される状況が示されている。ユーザデバイス102またはメディアプログラムプロバイダ110は、ユーザデバイス102により提供される情報を使用して、複数の通信のチャネルのスループットが、第1のアドレス図示された実施形態では、http:www.mediaserver.com/highres.flvで利用可能な高解像度バージョンの受信および処理を可能にするのに十分であると判定する。この後、ユーザデバイスは、指定されたURLを介して高解像度バージョンのメディアプログラムを受信する。しかしながら、図8Aに示されるように、高解像度バージョンのメディアプログラムのビットレートは、時間と共に変化し、時間t1で、しきい値を超える。しきい値は、通信チャネルの帯域幅、ユーザデバイス102の処理能力、ならびにメディアプログラムデータが到着したきにメディアプログラムデータを格納するために使用されるバッファ305のサイズ、一杯になることおよび/または格納時間および取出時間の関数である。ユーザデバイス102が他のデータを処理しており、入力されるデータを遅れずに適切に処理することができないため、または複数の通信のチャネルの帯域幅が変化したために、同じ問題に遭遇する可能性がある。いずれの場合にも、ユーザデバイス102はこの問題を検知し例えば、バッファ305内のデータ量、および/またはバッファリングされたデータが補充されることなく使用されている速度をモニタすることによる、必要なときには、より低い解像度およびより低いビットレートのバージョンのメディアプログラム図示される実施形態では、http:www.mediaserver.com/medres.flvで利用可能を要求する。メディアプログラムプロバイダ110は、このメディアプログラムを提供し、ユーザデバイス102は、これをユーザのために再生する。時間t2で、メディアプログラムのビットレートは、このとき、メディアプログラムのビットレートがしきい値未満であるようなものである。この時点で、ユーザデバイス102は、より高いビットレートのバージョンのメディアプログラムを要求してもよい、または中解像度バージョンを受信し、提示し続けてもよい。図8Bは、メディアプログラムが、ライブストリーミングプロトコルによる提示スループットの複数の変化を考慮しながら、複数のメディアプログラムセグメントをどのようにして受信することができるかを示す。図示される例では、メディアプログラムプレーヤ304は、提示スループットが最小しきい値より大きいときに、第1の高提示スループットバージョンのメディアプログラム702-1~702-7からなる複数のセグメントを受信する。しかしながら、提示スループットが時間t1でしきい値以下に低下するとき、メディアプログラムプレーヤ304は、中解像度の複数のメディアプログラムセグメントを704-8~704-10を、同じく図4に示す受信する。典型的には、メディアプログラムプレーヤ304は、複数のセグメントをユーザに提示する前に複数のセグメントを格納している任意のバッファ305が一杯になること、処理負荷および複数の通信のチャネル帯域幅を含むさまざまな要因に基づき、異なるバージョンのストリーミングされるメディアプログラムがいつ必要であるかを判定する。上述のように、複数のデジタルメディアプログラムの配送および提示が困難になる可能性があるのは、1メディアプログラムをユーザデバイス102に配送するために使用される通信チャネルが、a典型的には帯域幅が制限されており、b時間の経過と共に、および複数の移動体用途ではユーザの位置に対してかなり変化する可能性がある、2ユーザデバイス102により受信されたメディアプログラムの処理および提示には、a時間と共に変化することがあるかなりのスループットおよび処理速度、ならびにbユーザデバイス102内で使用される、かなりの記憶容量および記憶/取出速度の任意のバッファリングを必要とするためである。図9Aおよび図9Bは、メディアプログラムを運ぶ複数のビットストリームの時間変動性を記述するデータの供給および使用により、前述の複数の問題を改善する過程を示す図である。ブロック902では、複数のメディアプログラムバージョンのビットストリームが生成され、各メディアプログラムバージョンのビットストリームは、この他の複数のメディアプログラムバージョンのビットストリームと異なるビットレートを有する。一実施形態では、より低いビットレートを有する複数のメディアプログラムバージョンのビットストリームは、より高いビットレートを有する複数のメディアプログラムバージョンのビットストリームより低い解像度または低いフレームレートを有する。これらの複数のビットの複数のストリームの各々は、図8Aに示すように、連続的であり、単一アドレスから利用できてもよい、または図8Bに示すように、異なるアドレスからそれぞれ利用可能な複数のセグメントを備えてもよい。ブロック904では、複数のメディアプログラムビットストリームバージョンの時間的分散を記述するデータが生成される。一実施形態では、データは、単純な統計的分散として表されるすなわち、ビットレートの複数の時間サンプルの分散。図10は、例示的メディアプログラムバージョンのビットレートを時間の関数として示す図である。メディアプログラムビットストリームバージョンのビットレートの時間的分散を記述するデータは、単に複数の時間t1、t2、...、tnでサンプリングされたメディアプログラムのビットレートの統計的分散という尺度、すなわちでもよい。あるいは、メディアプログラムビットストリームバージョンのビットレートの時間的分散を記述するデータは、ビットレートを時間の関数として記述してもよい。これは、単に、選択された複数の時間でのビットレート、またはメディアプログラムの継続期間よりも短い時間期間例えば、図10のΔtにわたるビットストリームの平均ビットレートを備えてもよい。このような複数の平均ビットレートは、複数の可変期間に対して同様に記述することができる例えば、Δtは一定である必要はない。例えば、データは、メディアプログラムの最初の10秒間の平均ビットレート、およびメディアプログラムの次の1分間の平均ビットレートを備えてもよい。これにより、ビットレートがより大幅に変化するメディアプログラムの複数の部分で、より多くのデータが提供されるようになる。ビットレートの時間的分散はまた、ビットレートを時間の関数として近似する複数の級数の係数に関して記述することができる。換言すれば、時間の関数としてのビットレートがBRtである場合、ビットレートを記述するテーラー級数Taylorseriesを得ることができ、ビットレートの時間的分散を記述するデータは、得られたテーラー級数の複数のパラメータを備えることができる。これらの複数のパラメータをユーザデバイス102により処理して、ビットレートを時間の関数BRtとして再現することができる。同様に、BRtは時間にわたる関数を表すので、メディアプログラムビットストリームのビットレートを記述するデータは、BRtのフーリエ級数またはフーリエ変換以下、BRωと呼ぶとして表現することができ、ビットレートの時間的分散は、フーリエ変換BRωの複数のパラメータを含むことができる。テーラー級数の例と同様に、フーリエ級数またはフーリエ変換の複数のパラメータは、BRtを再現するために、ユーザデバイス102で例えば逆フーリエ変換により処理することができる。図9Aに戻ると、ブロック906に示すように、ユーザデバイス102は、メディアプログラムの要求を送信する。これは、図3および図4を参照して上述されたように実現することができる。メディアプログラム要求は、要求されたメディアプログラムだけでなく、要求されたメディアプログラムのバージョンも示してよい。換言すれば、ユーザデバイス102は、ユーザの複数の好み、または複数の通信のチャネルのスループットおよびユーザデバイス102の処理能力の評価に応じて、高解像度バージョンのメディアプログラムまたはより低解像度バージョンのメディアプログラムを要求してもよい。または、メディアプログラム要求は、単に、要求されたメディアプログラムを含んでもよく、メディアプログラムプロバイダ110は、要求されたメディアプログラムのビットレート、メディアプログラムプレーヤに関する情報またはユーザデバイス102および/または通信チャネルの評価に基づき、送信すべき、適切なバージョンのメディアプログラムを判定してもよい。ブロック910~916では、メディアプログラムプロバイダ110は、選択されたまたは要求されたバージョンのメディアプログラムの時間変動性を記述するデータだけでなく、選択されたまたは要求されたバージョンのビットストリームを送信し、ユーザデバイス102はこれらを受信する。メディアプログラムバージョンのビットレートの時間変動性を記述するデータは、別個のメッセージで、またはビットストリーム自体と共に、例えばヘッダで送信されてもよい。さらに、データは、選択されたまたは要求されたメディアプログラムバージョンの時間変動性だけを記述してもよい、または複数のメディアプログラムバージョンのビットレートの時間変動性を記述してもよく、それによって、必要に応じて、以下にさらに説明されるように、他の複数のメディアプログラムを選択するために使用することができる情報をユーザデバイス102に提供する。メディアプログラムのビットレートの時間変動性を記述するデータはまた、メディアプログラムビットストリームが送信される前に、または送信がすでに始まった後に、送信することができる。さらに、メディアプログラムのビットレートの時間変動性を記述するデータは、別個の複数のメッセージで1回に1ビット送信することができる。例えば、メディアプログラムが小さな複数のセグメントでユーザデバイス102に送信される複数の実施形態では、各セグメントは、現在のセグメントに続くセグメント複数に対するメディアプログラムのビットレートの時間変動性に関する情報を含んでもよい。これにより、ユーザデバイス102は、どのバージョンのメディアプログラムビットストリームを要求すべきかを判定することが可能になる。ブロック918では、メディアプログラムプレーヤは、メディアプログラムビットストリームを送信するために使用される複数の通信のチャネルのスループットを判定する。これは、メディアプログラムビットストリームがユーザデバイス102により受信される速度を推定することにより、すなわち、受信されるビットストリームをバッファ305に入れるために使用される任意のメモリが一杯になる速度により、リアルタイムで実現されてもよい。あるいは、これは、メディアプログラムビットストリームの受信以前に、例えば、過去に受信された複数のメディアプログラムについて、同一メディアプログラムプロバイダ110との複数の通信のスループットを判定することにより、実現されてもよい。スループットはまた、時刻に基づき推定することができる。図9Bを参照すると、ブロック920は、複数の通信のチャネルのスループットとメディアプログラムのビットストリームの時間変動性との比較結果の生成を示す。図11は、複数の通信のチャネルのスループットとビットストリームの時間変動性との比較結果をどのようにして生成することができるかの一実施形態を示す図である。図示される実施形態では、ユーザデバイス102は、時間t1まで、より高解像度のメディアプログラムビットストリーム1104を受信し、リプレイした。ユーザデバイス102はまた、取り出されたメディアプログラムビットストリームを一時的に格納するために使用されるFIFOバッファ305を含み、以前に受信されたビットストリームデータがバッファ305から読み出されると同時に、新しく受信されたビットストリームデータがバッファ305に入れられる。このバッファ305は、時間t2までメディアプログラムビットストリームを受信し、格納した。したがって、メディアプログラムビットストリームデータがさらに受信されないとしても、ユーザデバイス102は、時間t2までメディアプログラムを再生することができる。上述のように、ユーザデバイスは、複数の通信のリンクのスループットを判定した。このスループットは、例えば、ユーザデバイスにより受信されたデータの総量、およびこのデータをダウンロードするのにどれだけ時間がかかったかを使用して判定することができる。図11を参照すると、これは、単純に、時間t0からt1現在の再生位置までの間に受信されたデータのすべてを加算し、バッファ305に格納されたデータの総量時間t1からt2までの間のデータを加算し、このデータを受信するのにかかった時間t1-t0で除算することにより判定することができる。換言すれば、ユーザデバイス102は、推定値を計算することができる。結果は、t1からt0までの間に受信されたメディアプログラムに対して測定された平均ビットレートである。これが、図11に項目1102として示されている。ユーザデバイス102は、メディアプログラムビットストリームのビットレートの時間変動性を記述するデータを受信したので、ユーザデバイスは、すでに受信されバッファに入れられたデータ、および平均スループットが現在のペースで継続した場合に受信されると期待することができるデータを考慮して、メディアプログラムビットストリームの残りが再生を中断することなく受信することができるかどうかを、間に合うように予想して判定することができる。図示される例では、複数の通信のチャネルのスループットが著しく変化せず、かつ現在バッファに入れられたデータの量が、時間t3から時間t4までに期待される不足量またはを超える限り、これが可能である。換言すれば、ユーザデバイスは、スループットが実際に一定のままであり、かつのままである限り、より低いビットレートを有するメディアプログラムバージョンを選択する必要がない。しかしながら、である場合、ユーザデバイスは、より低いビットレートを有するメディアプログラムバージョン例えば、メディアプログラムビットストリーム1106または1108を選択しなければならない。ユーザデバイスは、現在バッファに入れられているデータ量が、より低いビットレートのメディアプログラムビットストリーム1106の時間t’3から時間t’4までに期待される不足分を超えるかを超えるかどうかを判定することにより、これを行うことができる。これが該当する場合、メディアプログラムプレーヤは、より低い解像度のメディアプログラムプレーヤビットストリーム1106を選択してもよい。重要なことには、この判定は、前もって行うことができ、この結果、混乱を伴うビットストリームの複数の変化は最小にすることができ、メディアプログラムビットストリームのビットレートのかなりの変動性を考慮することができる。例えば、図12は、異なる複数のメディアプログラムバージョンについて、他の可能な複数のビットストリームのビットレートを示す図である。この場合、であること、およびより低いビットレートのバージョンのメディアプログラムに切り換える必要がないことは明らかである。しかしながら、予想性能lookaheadcapabilityがなければ、ユーザデバイス102は、時間t3で、またはこの近傍で、より低いビットレートのビットストリーム例えばビットストリーム1206に、誤って切り換える場合がある。より低いビットレートのメディアプログラムビットストリームから例えば1106からより高いビットレートのメディアプログラムビットストリーム例えば1104に切り換えるために、同じ技術を使用することができる。この場合、通信チャネルのスループットは、必要とされるよりもはるかに大きいので、メディアプログラムバッファ305はすぐに一杯になることがある。ユーザデバイス102は、バッファ305がすぐに一杯になることを検出し、通信チャネルの平均スループットを計算し、他の複数の高解像度ビットストリームに対するビットレートに注目して、より高解像度バージョンのメディアプログラムをダウンロードし、処理し、混乱なく提示することができると判断することができる。次いで、ユーザデバイス102は、より高いビットレートを有するメディアプログラムビットストリームのバージョンを要求するように判断してもよい。バッファ305において、前述の判断で、容量が考慮されてもよいことは注目に値する。例えば、バッファ305の容量が小さい場合、t1からt2までの間の時間間隔はより小さくなり、はそれに比例して小さくなる。より少ないデータがバッファに入れられるので、ユーザデバイスは、より低いビットレートのビットストリームにより早く、かつより多くの場合に切り換える必要がある可能性が高い。しかしながら、の値はまた、複数の通信のチャネルのスループット、およびバッファに入れられたデータが再生中にどれだけ速く使い切られるかにより制限されるので、バッファ305の容量を単に増加させることでは、異なる複数のビットストリームを選択する必要は改善されない。一実施形態では、ユーザデバイス102は、複数の通信のチャネルが、高ビットレートのバージョンのメディアプログラムをさらに受信するのをサポートしないと判定すると、ユーザデバイスは、より低いビットレートのバージョンのメディアプログラムを受信し再生するように即座に切り換える。別の実施形態では、ユーザデバイス102は、バッファ305に格納されたより高いビットレートのバージョンのメディアプログラムを再生し続けるが、この地点からずっと、より低いビットレートのバージョンのメディアプログラムを受信し、再生する。例えば、時間t1で、複数の通信のチャネルのスループットが、メディアプログラムの最後まで、より高いビットレートのバージョンのメディアプログラム1104の再生をサポートするのに十分ではないとユーザデバイス102が判定した場合、ユーザデバイス102は、時間t1からt2までバッファ305からデータを読み続けてもよく、一方、時間t2以降、より低いビットレートのバージョンのメディアプログラム1106を使用して、バッファ305にデータを再び補充する。ユーザデバイス102はまた、バッファに入れられたメディアプログラムデータを再生し、バッファに入れられたデータが使い尽くされると、単により低いビットレートのバージョンを受信するように切り換えてもよい。前述の複数の計算は、メディアプログラムの再生中に何回も行われてよい。例えば、スループットの推定は、ビットストリームデータが受信されたすぐ後に行われ、この後、該当するビットストリームが選択されてもよい。また、一時停止、巻き戻しまたは早送りなどの複数の特殊再生操作は、バッファ305が一杯になることに影響を及ぼす可能性が高いので、このような複数の操作の後に計算が繰り返されてもよい。または、前述の複数の計算は、単に、メディアプログラムの再生の間中、周期的に行われてもよい。図9Bに戻ると、ブロック922では、ブロック920で生成された比較結果に少なくとも部分的に従って、さらに受信するための第2のビットストリームが選択される。ブロック924および926に示すように、第2のビットストリームの要求がメディアプログラムプロバイダ110に送信され、メディアプログラムプロバイダ110でこの要求が受信される。次いで、ブロック928および930に示すように、第2のメディアプログラムビットストリームは、メディアプログラムプロバイダ110により送信され、ユーザデバイスにより受信される。結論ここでは、本発明の好ましい複数の実施形態の説明の結論が下される。本発明の好ましい実施形態の以上の説明は、例示および説明のために提示された。本発明の好ましい実施形態の以上の説明は、網羅的なものでも、開示した厳密な形態に本発明を限定するものでもない。以上の教示に照らして、多くの修正および変形が可能である。本発明の範囲は、この詳細な説明によって限定されるものではなく、むしろ本明細書に添付の特許請求の範囲によって限定されるものである。上記の説明、例およびデータは、本発明の製造、および組成物の用途の完全な説明を提供する。本発明の多くの実施形態は、本発明の精神および範囲を逸脱することなく作成することができるので、本発明は、以下に添付される特許請求の範囲にある。"