(57)【要約】  時間的に不連続および／または異なるビットレートで符号化されたストリーミングメディアファイルの一部を記憶でき、検索できる形でのストリーミングメディアファイル５１６をキャッシングすることを可能にするシステム、方法、およびデータ構造を説明する。
2007529121.tif 000002
【特許請求の範囲】
【請求項１】
ストリーミングメディアファイルの複数の時間的に不連続な部分を受け取ることであって、少なくとも第１および第２の前記不連続な部分は、異なるビットレートで符号化されること、および
前記複数の時間的に不連続な部分を単一のキャッシュファイルに記憶すること
を含むことを特徴とする方法。
【請求項２】
前記第１および第２の不連続な部分は、ビデオデータを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記第１および第２の不連続な部分は、ビデオデータを含み、第３の不連続な部分は、オーディオデータを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記キャッシュファイルは、不揮発性メモリに記憶されることを特徴とする請求項１に記載の方法。
【請求項５】
前記記憶する動作は、
各メディアキャッシュストリームが一意のビットレートに関連する複数のメディアキャッシュストリームを作成すること、
前記第１の不連続な部分を、前記第１の不連続な部分のビットレートに関連するメディアキャッシュストリームに記憶すること、
前記第２の不連続な部分を、前記第２の不連続な部分のビットレートに関連するメディアキャッシュストリームに記憶すること、および
前記メディアキャッシュストリームを前記キャッシュファイルに記憶すること
を含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記記憶する動作は、
前記第１の不連続な部分のビットレートに関連する第１メディアキャッシュストリームを作成すること、
前記第１メディアキャッシュストリームのメディアキャッシュセグメントに前記第１の不連続な部分を記憶すること、
前記第２の不連続な部分のビットレートに関連する第２メディアキャッシュストリームを作成すること、
前記第２メディアキャッシュストリームのメディアキャッシュセグメントに前記第２の不連続な部分を記憶すること、
メディアキャッシュセグメントごとにバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントを作成すること、および
前記バイトキャッシュインデックスセグメントおよび前記バイトキャッシュデータセグメントを前記キャッシュファイルに記憶すること
を含むことを特徴とする請求項１に記載の方法。
【請求項７】
各メディアキャッシュストリームが一意のビットレートに関連する複数のメディアキャッシュストリームを作成すること、
ストリーミングメディアファイルの複数の部分を受け取ることであって、各前記部分は、前記ストリーミングメディアファイルの一意の時間的セクションに関連すること、
各前記部分を、前記部分が符号化されたビットレートに関連するメディアキャッシュストリームのメディアキャッシュセグメントに記憶することであって、前記部分の少なくとも２つは、異なるメディアキャッシュストリーム内のメディアキャッシュセグメントに記憶されること、および
前記メディアキャッシュストリームのそれぞれを単一のキャッシュファイルに記憶すること
を含むことを特徴とする方法。
【請求項８】
前記記憶する動作は、
メディアキャッシュセグメントごとにバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントを作成すること、および
前記バイトキャッシュインデックスセグメントおよび前記バイトキャッシュデータセグメントを前記キャッシュファイルに記憶すること
を含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記記憶する動作は、
セグメントごとにバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントを作成すること、および
前記キャッシュファイル内の前記バイトキャッシュインデックスセグメントおよび前記バイトキャッシュデータセグメントをシリアライズすること
を含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記キャッシュファイルは、不揮発性の形で記憶されることを特徴とする請求項７に記載の方法。
【請求項１１】
データストレージモジュールと、
ストリーミングメディアファイルの複数の時間的に不連続な部分を受け取り、前記データストレージモジュール内のキャッシュファイルに記憶するように動作可能なキャッシングモジュールであって、前記複数の時間的に不連続な部分のうちの２つまたはそれ以上は、異なるビットレートで符号化されるキャッシングモジュールと
を含むことを特徴とするシステム。
【請求項１２】
前記データストレージモジュールは、不揮発性データストレージデバイスを含むことを特徴とする請求項１１に記載のシステム。
【請求項１３】
プロセッサをさらに含み、前記キャッシングモジュールは、プロセッサ実行可能コードを含むことを特徴とする請求項１１に記載のシステム。
【請求項１４】
前記キャッシングモジュールは、
前記複数の時間的に不連続な部分のそれぞれを、メディアキャッシュセグメントとして、複数のメディアキャッシュストリームの１つに記憶し、
各メディアキャッシュセグメントをバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントに解析する
ように動作可能なメディアキャッシュモジュールを含むことを特徴とする請求項１１に記載のシステム。
【請求項１５】
前記キャッシングモジュールは、
前記複数の時間的に不連続な部分のそれぞれを、メディアキャッシュセグメントとして複数のメディアキャッシュストリームの１つに記憶することであって、各メディアキャッシュストリームは、異なるビットレートに関連すること、および
各メディアキャッシュセグメントをバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントに解析すること
を行うように動作可能なメディアキャッシュモジュールと、
前記バイトキャッシュインデックスセグメントおよび前記バイトキャッシュデータセグメントを前記キャッシュファイルに記憶するように動作可能なバイトキャッシュモジュールと
を含むことを特徴とする請求項１１に記載のシステム。
【請求項１６】
前記キャッシングモジュールは、
各メディアキャッシュストリームが一意のビットレートに関連する複数のメディアキャッシュストリームを作成すること、
各前記時間的に不連続な部分を、メディアキャッシュセグメントとして、前記時間的に不連続な部分が符号化されたビットレートに関連するメディアキャッシュストリームに記憶すること、および
各メディアキャッシュセグメントをバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントに解析すること
を行うように動作可能なメディアキャッシュモジュールと、
前記バイトキャッシュインデックスセグメントおよび前記バイトキャッシュデータセグメントを前記キャッシュファイルに記憶する
ように動作可能なバイトキャッシュモジュールと
を含むことを特徴とする請求項１１に記載のシステム。
【請求項１７】
前記複数の時間的に不連続な部分のうちの２つまたはそれ以上は、第１ビットレートで符号化された第１ビデオ部分、第２ビットレートで符号化された第２ビデオ部分、およびオーディオ部分を含み、前記第１ビデオ部分、前記第２ビデオ部分、および前記オーディオ部分は、異なるメディアキャッシュストリームに記憶されることを特徴とする請求項１１に記載のシステム。
【請求項１８】
前記ストリーミングメディアファイルは、異なるデータタイプを含み、
前記キャッシングモジュールは、
各メディアキャッシュストリームが、ストリーミングされたメディアのデータタイプおよびストリーミングされたメディアの符号化されたビットレートに関連する複数のメディアキャッシュストリームを作成すること、
受け取られたストリーミングされたメディアデータの時間的に不連続な部分のそれぞれを、前記時間的に不連続な部分のストリーミングされたメディアのデータタイプおよびストリーミングされたメディアの符号化されたビットレートに関連するメディアキャッシュストリームに記憶すること、および
前記メディアキャッシュストリームを前記キャッシュファイルに記憶すること
を行うように動作可能であることを特徴とする請求項１１に記載のシステム。
【請求項１９】
前記ストリーミングメディアファイルは、異なるデータタイプを含み、
前記キャッシングモジュールは、
各メディアキャッシュストリームが、ストリーミングされたメディアのデータタイプおよびストリーミングされたメディアの符号化されたビットレートに関連する複数のメディアキャッシュストリームを作成すること、
受け取られたストリーミングされたメディアデータの時間的に不連続な部分のそれぞれを、メディアキャッシュセグメントとして、前記時間的に不連続な部分の前記ストリーミングされたメディアのデータタイプおよびストリーミングされたメディアの符号化されたビットレートに関連するメディアキャッシュストリームに記憶すること、
各メディアキャッシュセグメントをバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントに解析すること、および
前記バイトキャッシュインデックスセグメントおよび前記バイトキャッシュデータセグメントを前記キャッシュファイルに記憶すること
を行うように動作可能であることを特徴とする請求項１１に記載のシステム。
【請求項２０】
前記キャッシングモジュールは、
前記複数の時間的に不連続な部分のそれぞれを、メディアキャッシュセグメントとして、複数のメディアキャッシュストリームの１つに記憶し、
各時間的に不連続な部分が記憶された前記メディアキャッシュセグメントおよびストリームを指定するセグメント／ストリームマップを作成し、
各メディアキャッシュセグメントをバイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントに解析する
ように動作可能であることを特徴とする請求項１１に記載のシステム。
【請求項２１】
コンピュータ可読媒体であって、
クライアントで、ストリーミングメディアソースから受け取られたストリーミングメディアファイルの複数の時間的に不連続な部分をキャッシュファイルに記憶する動作であって、前記複数の時間的に不連続な部分のそれぞれは、異なるビットレートで符号化される動作
を実行するコンピュータ可読命令を有することを特徴とするコンピュータ可読媒体。
【請求項２２】
前記記憶する動作は、
第１ビットレートで符号化された前記ストリーミングメディアファイルの第１ビデオ部分を受け取ること、
前記第１ビデオ部分を前記第１ビットレートに関連するメディアキャッシュビデオストリームに記憶すること、
第２ビットレートで符号化された前記ストリーミングメディアファイルの第２ビデオ部分を受け取ること、
前記第２ビデオ部分を前記第２ビットレートに関連するメディアキャッシュビデオストリームに記憶すること、
前記ストリーミングメディアファイルの第１オーディオ部分を受け取ることと、
前記第１オーディオ部分をメディアキャッシュオーディオストリームに記憶すること、および
前記オーディオおよびビデオメディアキャッシュストリームをキャッシュファイルに記憶すること
を含むことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２３】
前記記憶する動作は、
第１ビットレートで符号化された前記ストリーミングメディアファイルの第１ビデオ部分を受け取ること、
前記第１ビデオ部分を前記第１ビットレートに関連するメディアキャッシュビデオストリームに記憶すること、
第２ビットレートで符号化された前記ストリーミングメディアファイルの第２ビデオ部分を受け取ること、
前記第２ビデオ部分を前記第２ビットレートに関連するメディアキャッシュビデオストリームに記憶すること、
前記第１ビットレートで符号化された前記ストリーミングメディアファイルの第３ビデオ部分を受け取ることであって、前記第３ビデオ部分は、前記第１ビデオ部分から時間的に不連続であること、
前記第３ビデオ部分を前記第１ビットレートに関連するメディアキャッシュビデオストリームに記憶すること、
前記ストリーミングメディアファイルの第１オーディオ部分を受け取ること、
前記第１オーディオ部分をメディアキャッシュオーディオストリームに記憶すること、および
前記オーディオおよびビデオメディアキャッシュストリームをキャッシュファイルに記憶すること
を含むことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２４】
前記記憶する動作は、
前記時間的に不連続な部分のそれぞれを一意のメディアキャッシュセグメントに記憶すること、
メディアキャッシュセグメントごとに少なくとも２つのバイトキャッシュセグメントを形成すること、および
前記バイトキャッシュセグメントを前記キャッシュファイルに記憶すること
を含むことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２５】
前記記憶する動作は、
前記時間的に不連続な部分のそれぞれを、少なくとも２つのバイトキャッシュセグメントに記憶すること、および
前記バイトキャッシュセグメントを前記キャッシュファイルに記憶すること
を含むことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２６】
データ構造が記憶されたコンピュータ可読媒体であって、
ストリーミングメディアソースから受け取られたストリーミングメディアファイルの複数の時間的に不連続な部分を表すデータを含む複数のデータページであって、前記時間的に不連続な部分の少なくとも２つは、異なるビットレートで符号化されるデータページ
を含むことを特徴とするコンピュータ可読媒体。
【請求項２７】
データ構造が記憶されたコンピュータ可読媒体であって、
１つまたは複数のバイトキャッシュセグメントを記憶する複数のデータページであって、各バイトキャッシュセグメントは、ストリーミングメディアファイルの時間的に不連続な部分から導出され、前記時間的に不連続な部分の少なくとも２つは、異なるビットレートで符号化されるデータページと、
前記データページの１つまたは複数の特性を記述する情報を含むヘッダページと
を含むことを特徴とするコンピュータ可読媒体。
【請求項２８】
前記ヘッダページは、複数のキャッシュファイル制御レコードを含み、各前記キャッシュファイル制御レコードは、前記データページ内の単一のバイトキャッシュセグメントの位置を記述する情報を含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項２９】
前記ヘッダページは、複数のキャッシュファイル制御レコードを含み、各前記キャッシュファイル制御レコードは、前記データページ内の単一のバイトキャッシュセグメントの位置を記述する情報および前記単一のバイトキャッシュレコードを含む複数のページを示す情報を含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項３０】
前記ヘッダページは、複数のキャッシュファイル制御レコードを含み、各前記キャッシュファイル制御レコードは、前記データページ内の単一のバイトキャッシュセグメントの開始点および終了点を記述する情報を含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項３１】
前記ヘッダページは、複数のキャッシュファイル制御レコードを含み、
少なくとも１つのキャッシュファイル制御レコードは、前記キャッシュファイル内の各ページの位置を含むアレイを含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項３２】
前記ヘッダページは、複数のキャッシュファイル制御レコードを含み、
少なくとも１つのキャッシュファイル制御レコードは、単一のバイトキャッシュセグメントの冒頭を含むページおよび前記ページ内の前記単一のバイトキャッシュセグメントの冒頭を指定するインデックスを示す情報を含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項３３】
前記ヘッダページは、複数のキャッシュファイル制御レコードを含み、
少なくとも１つのキャッシュファイル制御レコードは、前記データページ内の単一のバイトキャッシュセグメントの開始位置および終了位置を定義する情報を含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項３４】
前記ヘッダページは、複数のキャッシュファイル制御レコードを含み、各キャッシュファイル制御レコードは、単一のバイトキャッシュセグメントに関連し、各キャッシュファイル制御レコードは、前記キャッシュファイル制御レコードに関連するバイトキャッシュセグメントの少なくとも一部を含む所定の数のページを識別し、各キャッシュファイル制御レコードは、前記キャッシュファイルに関連するバイトキャッシュセグメントの少なくとも一部を含む前記所定の数のぺージ以外の所定の数のページを識別する情報を含むページへのポインタを含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項３５】
前記ヘッダページは、
各キャッシュファイル制御レコードが、前記データページ内の単一のバイトキャッシュセグメントの位置を記述する情報を含む所定の数のキャッシュファイル制御レコードと、
前記所定の数のキャッシュファイル制御レコード以外のキャッシュファイル制御レコードを含むキャッシュファイル制御レコード拡張ページへのポインタと
を含むことを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項３６】
ストリーミングメディアファイルの複数の時間的に不連続な部分を受け取る手段であって、前記複数の時間的に不連続な部分の少なくとも２つは、異なるビットレートで符号化される手段と、
前記複数の不連続な部分を関連付け、データ構造に記憶する手段と
を含むことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステムに関し、より詳細には、ストリーミングメディアファイルをキャッシングすることに関する。
【背景技術】
【０００２】
メディアストリーミング（ｍｅｄｉａ  ｓｔｒｅａｍｉｎｇ）は、ある位置のストリーミングメディアファイルまたはライブストリーミングソースから別の位置へ、インターネットまたはイントラネットなどのネットワークを介してオーディオ／ビデオプレゼンテーションおよび他のデータを送る処理である。通常、メディアストリーミングには、サーバからクライアントへストリーミングメディアファイルを送ることが含まれ、このストリーミングメディアファイルは、メディアプレイヤを使用して提示される（閲覧され、かつ／または聴取される）ことができる。メディアストリーミングは、ピアツーピアで実行することもできる。提示の前にメディアファイル全体を転送することを必要とする非ストリーミングメディア転送技法と異なって、メディアストリーミングでは、ストリーミングメディアファイルがクライアントに転送されている、またはストリーミングされている間に、ストリーミングメディアファイルの諸部分を提示することができる。
【０００３】
メディアストリーミングは、ストリーミングメディアファイルがサーバから単一のクライアントにストリーミングされるユニキャスト、またはストリーミングメディアファイルがサーバから複数のクライアントにストリーミングされるマルチキャストのいずれかとすることができる。さらに、メディアストリーミングは、生イベントを表すデータを含むストリーミングメディアファイルがそのイベントの発生時にストリーミングされるライブ、またはストリーミングメディアファイルがストリーミングメディアファイルに記憶され、要求時にストリーミングされるオンデマンドのいずれかとすることができる。オンデマンドメディアストリーミングは、通常はユニキャストであり、別個のストリーミングイベントが、サーバと各クライアントの間で発生する。
【０００４】
基本的なストリーミングメディアファイルに、通常は、少なくとも２つのストリームすなわち、ビデオストリームおよびオーディオストリームが含まれる。より複雑なストリーミングメディアファイルに、複数のビデオストリームおよび／またはオーディオストリームが含まれ、各ストリームが、異なるビットレートで符号化される（すなわち、マルチビットレート符号化）。たとえば、ビデオの所与の部分またはストリームを、各ストリームが異なるビットレートで符号化される６つの異なるビデオストリームで、複数のビットレートで符号化されたストリーミングメディアファイルに記憶することができる。クライアントが、サーバにストリーミングメディアファイルを要求する時に、サーバとクライアントの間のリンクの帯域幅に関する判定が行われる。６つのビデオストリームのうちの１つおよびオーディオストリームが、所定の帯域幅判断基準に基づいて、クライアントへの送信に関して選択される。たとえば、ビデオストリームおよびオーディオストリームを、組み合わされたビットレートが、使用可能なリンク帯域幅の所定の比率未満になるように選択することができる。ストリーミング処理のある点で、サーバとクライアントの間のリンク帯域幅が増えるか減る場合に、オーディオストリームおよびビデオストリームの異なる組合せを選択して、所定の帯域幅判断基準に合わせることができる。このタイプの、使用可能な帯域幅に基づく複数のビットレートで符号化されたストリーミングメディアファイルからの「ストリーム選択」を、一般に、「インテリジェントストリーミング（ｉｎｔｅｌｌｉｇｅｎｔ  ｓｔｒｅａｍｉｎｇ）」と称する。
【０００５】
一部のクライアントシステムで、ストリームを再生する前に、受信されたストリーミングメディアファイルの一部またはすべてをクライアント側でキャッシングすることによって、ストリーミング体験の質を高めることができる。再生の前のストリームのキャッシングによって、ネットワーク接続の問題によってクライアントでのストリーミングメディアファイルの再生が中断される可能性が減る。さらに、一部のシステムで、ストリーミングナビゲーション（巻き戻し、リプレイ）の最小限の使用を、キャッシュを使用して実行することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
複数ビットレート符号化および／またはメディアストリームキャッシングに関して現在存在する問題の１つは、可変ビットレートのストリームまたは時間的に隣接しないストリームを記憶し、シームレスな形でアクセスする方法が全くないことである。通常、帯域幅の変化に起因してストリーミングメディアファイル内でメディアストリームの間の切り替えが行われる時に、ストリーミングメディアファイルの、前にキャッシングされた部分が破棄され、新しいストリームキャッシュが確立される。同様に、シーク動作など、ストリーミングメディアファイル内の時間的に隣接しない位置の間でジャンプが行われる時に、ストリーミングメディアファイルの、前にキャッシングされた部分が破棄され、新しいストリームキャッシュが確立される。
【０００７】
以下で説明するさまざまなシステム、方法、およびデータ構造によって、上記および他の問題に対処する。
【課題を解決するための手段】
【０００８】
時間的に連続しない、および／または異なるビットレートで符号化されたストリーミングメディアファイルの部分の記憶および検索を可能にする形でのストリーミングメディアファイルのキャッシングに関連するさまざまなシステム、方法、およびデータ構造を、本明細書で説明する。
【０００９】
一実施形態によれば、ストリーミングメディアファイルのそのような時間的に連続しないおよび／またはさまざまに符号化された部分を、キャッシュファイルに記憶でき、キャッシュファイルからアクセスできるようにする独自の中間ストレージ機構を使用するキャッシング機構が使用される。他の実施形態によれば、ストリーミングメディアファイルのそのような時間的に連続しないおよび／またはさまざまに符号化された部分を、共通ファイルに記憶でき、共通ファイルからアクセスできるようにする独自のキャッシュファイル構造が使用される。
【発明を実施するための最良の形態】
【００１０】
一般に、本明細書で説明するさまざまなシステム、方法、およびデータ構造は、ストリーミングメディアのうちで時間的に連続しないおよび／または異なるビットレートで符号化された部分の記憶および検索を可能にする形でストリーミングメディアファイルをキャッシングすることに関する。以下で説明するように、クライアント側キャッシング機構によって、ストリーミングメディアファイルのそのような「異なる（ｄｉｓｓｉｍｉｌａｒ）」部分をキャッシュファイルに記憶でき、キャッシュファイルからアクセスできるようにする独自の中間ストレージ機構および独自のキャッシュファイル構造が使用される。
【００１１】
例示的な環境
図１に、例示的なネットワーク環境１００を示す。環境１００では、複数（ｘ台）のクライアントデバイス１０２（１）、１０２（２）、…、１０２（ｘ）が、ネットワーク１０６を介して複数（ｙ台）のサーバデバイス１０４（１）、１０４（２）、…、１０４（ｙ）に結合される。ネットワーク１０６は、さまざまな普通のネットワークトポロジおよびネットワークタイプ（有線ネットワークおよび／または無線ネットワークを含む）のいずれをも表すことが意図されている。ネットワーク１０６には、たとえば、インターネット、イントラネット、広域ネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、および／あるいはこれらまたは他のネットワークのいずれかのさまざまな組合せを含めることができる。
【００１２】
本明細書で使用される際に、サーバデバイスは、ストリーミングメディアファイルのソースになる任意のデバイスまたはプロセスとすることができ、クライアントデバイスは、ストリーミングメディアファイルを受け取る（たとえば、クライアントデバイスのユーザへの提示のために）任意のデバイスまたはプロセスとすることができることを理解されたい。たとえば、ピアツーピアネットワークでは、ストリーミングメディアファイルのソースであるデバイスまたはプロセスを、サーバデバイスと称し、ストリーミングメディアファイルを受け取るデバイスまたはプロセスを、クライアントデバイスと称する。
【００１３】
本明細書で説明するさまざまな実施形態によれば、クライアントデバイス１０２とサーバデバイス１０４の間の通信は、さまざまな普通の通信プロトコル（公共プロトコルおよび／または独占プロトコルを含む）のいずれかを使用して行うことができる。一実施形態では、デバイス１０２と１０４の間の通信が、ハイパーテキスト転送プロトコル（ＨＴＰＰ）の１バージョンを使用して行われる。他の実施形態では、デバイス１０２と１０４の間の通信が、ＲＴＳＰ（Ｒｅａｌ  Ｔｉｍｅ  Ｓｔｒｅａｍｉｎｇ  Ｐｒｏｔｏｃｏｌ）を使用して行われる。あるいは、ＳＩＰ（Ｓｅｓｓｉｏｎ  Ｉｎｉｔｉａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）、ＳＯＡＰ（Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ）などの他のプロトコルを使用することができる。
【００１４】
デバイス１０２と１０４は、それぞれ、デスクトップＰＣ、ワークステーション、メインフレームコンピュータ、インターネット家電、ゲーム機、ハンドヘルドＰＣ、セル電話、携帯情報端末（ＰＤＡ）、セットトップボックスなどを含むさまざまな普通のコンピューティングデバイスのいずれかとすることができる。デバイス１０２と１０４の１つまたは複数を、同一のタイプのデバイスとすることができ、あるいはまた異なるタイプのデバイスとすることができる。
【００１５】
図示されていないが、１つまたは複数の追加デバイス（たとえば、ファイヤウォール、ルータ、ゲートウェイ、ブリッジ、複数のプロキシサーバなど）を、クライアントデバイス１０２とサーバデバイス１０４の間に配置することができる。複数のクライアントデバイス１０２によって、単一のサーバデバイス１０４にアクセスできることと、単一のクライアントデバイス１０２によって、複数のサーバデバイス１０４にアクセスできることに留意されたい。
【００１６】
図２に、例示的なサーバデバイス１０４を示す。図からわかるように、サーバデバイス１０４には、ストリーミングモジュール２１６および１つまたは複数のストリーミングメディアファイル２２２が含まれる。サーバデバイス１０４は、たとえば、図１の起点サーバデバイス１０４、またはその代わりに別のデバイス（たとえば、プロキシデバイス）とすることができる。一般に、ストリーミングモジュール２２０は、ストリーミングメディアファイルまたはストリーミングメディアファイルの部分に関する要求を、クライアントデバイス１０２などから受け取り、ストリーミングメディアファイル２２２またはそのファイルの一部をリクエスタにストリーミングするように機能する。
【００１７】
「メディアファイル」には、メディアプレイヤによってレンダリングできる情報の１つまたは複数のディジタルストリームが含まれる。通常、メディアファイルには、時間的に同期した２つまたはそれ以上のストリームが含まれる。メディアファイルには、独立の他のストリームも含めることができる。メディアファイルのコンテンツは、圧縮してもしなくてもよい。用語「ストリーミングメディアファイル」は、本明細書では、メディアファイルがネットワークを介してクライアントデバイスに供給されることと、その全体を配信される前にメディアファイルの再生を開始できること（たとえば、再生の前にデータの全体を配信するのではなく、必要に応じてメディアファイルデータを供給することによって）を示すのに使用される。ストリーミングメディアファイルは、公衆が使用可能とするか、あるいはまた制限することができる（たとえば、一部のユーザだけに制限する、適当な料金が支払われる場合に限って使用可能にするなど）。ストリーミングメディアファイルは、さまざまな１つまたは複数のタイプの時間ベースメディアファイルのいずれかとすることができ、ここで、ストリーミングメディアファイル内の情報によって、オーディオ、ビデオ、時間的テキスト表現、アニメーションなど、再生中のファイルの一部またはすべての時間的表現が指定される。さらに、ストリーミングメディアファイルは、事前に記録するか、その代わりに「ライブ」（たとえば、コンサートが実行されている時に取り込まれ、取込の直後にストリーミングに使用可能にされるコンサートのディジタル表現）とすることができる。
【００１８】
ストリーミングメディアファイル２２２は、さまざまな異なるストリーミングメディアファイルフォーマットのいずれかに従って、記憶し、かつ／またはストリーミングすることができる。たとえば、ストリーミングメディアファイルを、静的ストリーミングメディアファイルとして記憶することができる。あるいは、ストリーミングメディアファイル２２２を、１つまたは複数のストリーミングメディアソースまたはプロデューサから「ライブ」でストリーミングすることができる。例示的実施形態の１つでは、メディアファイルが、ＡＳＦフォーマット（Ａｄｖａｎｃｅｄ  Ｓｙｓｔｅｍｓ  ＦｏｒｍａｔまたはＡｄｖａｎｃｅｄ  Ｓｔｒｅａｍｉｎｇ  Ｆｏｒｍａｔ）に従って記憶され、かつ／またはストリーミングされる。ＡＳＦに関する追加情報は、米国ワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎ社から入手可能である。同一の技法を、ＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅｓ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）−１、ＭＰＥＧ−２、ＭＰＥＧ−４、Ｑｕｉｃｋｔｉｍｅなどの他のフォーマットにも適用することができる。
【００１９】
図からわかるように、クライアントデバイス１０２には、ストリーミングメディアプレイヤ２０６、ネットワーキングモジュール２０８、キャッシングモジュール２１０、および１つまたは複数のキャッシュファイル２１６が含まれる。キャッシングモジュール２１０に、メディアキャッシュモジュール２１２およびバイトキャッシュモジュール２１４が含まれる。図からわかるように、１つまたは複数のキャッシュファイルが、クライアントデバイス１０２のデータストレージモジュール２１８に記憶される。
【００２０】
一般に、ストリーミングメディアプレイヤ２０６によって、クライアントデバイス１０２での提示のためにユーザによってストリーミングメディアファイル２２２を選択できるようにする手段が提供される。一実施形態によれば、ストリーミングメディアプレイヤ２０６は、クライアントデバイス１０２のプロセッサによって実行されるアプリケーションまたはアプレットである。ストリーミングメディアプレイヤ２０６は、ストリーミングメディアファイルを受信し、デコードし、ストリーミングメディアファイルのコンテンツをクライアントデバイス１０２の適当なビデオ出力デバイスおよびオーディオ出力デバイスに供給するように動作可能である。
【００２１】
一般に、ネットワーキングモジュール２０８は、ストリーミングメディアプレイヤ２０６とストリーミングメディアファイルのさまざまなソースの間のあるタイプの「ゲートウェイ」として機能する。この能力において、ネットワーキングモジュール２０８によって、ストリーミングメディアプレイヤ２０６とさまざまなストリーミングメディアソースとの間の接続の確立に関連する複数の機能が実行される。たとえば、一実施形態によれば、ネットワーキングモジュール２０８によって、ストリーミングメディアプレイヤ２０６とサーバデバイス１０４との間のネットワーク接続が確立される。ネットワーキングモジュール２０８によって、ストリーミングメディアプレイヤ２０６とキャッシングモジュール２１０との間のネットワーク接続も確立される。
【００２２】
さらに、ネットワーキングモジュール２０８によって、複数の使用可能なストリーミングメディアソースのどれからストリーミングメディアプレイヤ２０６がデータを受け取るかの決定に関する複数の機能が実行される。たとえば、一実施形態によれば、特定のストリーミングメディア表現のすべてまたは一部に関する要求をストリーミングメディアプレイヤ２０６から受け取ることに応答して、ネットワーキングモジュール２０８によって、要求されたデータを前に記憶されたキャッシュファイル２１６から取り出すことによってその要求を満足できるか、または要求されたデータをサーバデバイスから検索する必要があるかが判定される。
【００２３】
一実施形態によれば、ネットワーキングモジュール２０８によって、さまざまな異なる要因に基づいて、ストリーミングモジュール２２０とネットワーキングモジュール２０８との間のストリーミングメディアファイルのストリーミングレートが決定される。これは、デバイス１０２と１０４の間でテストメッセージを送ること、デバイス１０２と１０４の間の接続の現在および過去の挙動を監視すること、ストリーミングモジュール２２０から使用可能な帯域幅の表示を受け取ることなど、さまざまな通常の方法のいずれかで決定することができる。現在使用可能な帯域幅を与えられると、ネットワーキングモジュール２０８によって、まず、現在使用可能な帯域幅より小さい特定の量であるストリーミングレートが要求される。この特定の量は、固定（たとえば、必ず５０ｋｂｐｓ）または動的（たとえば、現在使用可能な帯域幅の１５％、または現在使用可能な帯域幅の５％と２５％の間）とすることができる。
【００２４】
一実施形態によれば、ネットワーキングモジュール２０８によって、以下で説明するメディアキャッシュモジュール２１２が作成されるかインスタンス化される。この実施形態によれば、ネットワーキングモジュールによって、単一のネットワーキングモジュールまたは複数のネットワーキングモジュールを作成またはインスタンス化することができる。ネットワーキングモジュール２０８によって実行することができる他の機能に、制限ではないが、特定のストリーミングメディアプレゼンテーションに関連するキャッシュファイルをデータストレージモジュールに記憶するかどうかの判定、およびデータストレージモジュール内でのキャッシュファイルの作成が含まれる。クライアントデバイス１０２の一部である普通のコンポーネントを任意選択として使用して、ネットワーキングモジュール２０８を援助することができる。たとえば、例示的な実施形態の１つで、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒブラウザプログラムに、キャッシュ内のアイテムの満了（ｅｘｐｉｒａｔｉｏｎ）の監視および／またはガーベジコレクションなどのキャッシュ管理機能が含まれ、ネットワーキングモジュール２０８によって、上で概要を示したネットワーキングモジュールのさまざまな動作を実行する際にこの機能を使用することができる。
【００２５】
一実施形態によれば、データストレージモジュール２１８は、不揮発性メモリからなる。たとえば、制限ではないが、データストレージモジュール２１８を、磁気ストレージデバイスまたは光ストレージデバイス、光磁気ストレージデバイス、不揮発性ＲＡＭ、または他のタイプの不揮発性ストレージデバイスなどの１つまたは複数の不揮発性メモリデバイスからなるものとすることができる。他の実施形態によれば、データストレージモジュール２１８は、１つまたは複数のタイプの揮発性メモリデバイスからなる。
【００２６】
キャッシングモジュール２１０によって、ストリーミングメディアファイルをデータストレージモジュール２１８内のキャッシュファイル２１６に書き込み、これから読み取ることができる機構が提供される。図からわかるように、キャッシングモジュール２１０には、メディアキャッシュモジュール２１２およびバイトキャッシュモジュール２１４が含まれる。以下で詳細に説明するように、メディアキャッシュモジュール２１２およびバイトキャッシュモジュール２１４のそれぞれによって、受信されたストリーミングメディアデータのさまざまな部分および配置が記憶される１つまたは複数の中間データ構造が作成され、かつ／または管理される。
【００２７】
メディアキャッシュモジュール２１２によって、受信したストリーミングメディアファイルの中間データ構造が提供される。具体的に言うと、メディアキャッシュモジュール２１２によって、１つまたは複数のコンピュータ可読メディア内に、５タイプのデータ構造すなわち、メディアキャッシュストリーム、メディアキャッシュセグメント、メディアキャッシュヘッダセグメント、バイトキャッシュインデックスセグメント、およびバイトキャッシュデータセグメントが作成される。動作時に、メディアキャッシュモジュール２１２によって、受信されたメディアファイルごとに、単一のメディアキャッシュヘッダセグメントと、複数のメディアキャッシュストリームおよびメディアキャッシュセグメントが作成される。メディアキャッシュモジュール２１２によって、クライアントデバイス１０２によってストリーミングメディアファイル内で受信されたストリームの異なるタイプおよび符号化されたビットレートごとにメディアキャッシュストリームが作成され、管理される。本明細書で使用されるストリームの「タイプ」は、ストリームのフォーマットまたは機能（たとえば、オーディオまたはビデオ）を指す。理解されるように、ストリームの符号化されたビットレートは、ストリームが最初にストリーミングメディアファイルに記憶された時のビットレートである。したがって、メディアキャッシュモジュール２１２によって、それぞれが異なるビットレートを有する３つのビデオストリームと、それぞれが異なるビットレートを有する２つのオーディオストリームがストリーミングメディアファイルから受け取られる場合に、メディアキャッシュモジュール２１２によって、５つの異なるメディアキャッシュストリームが作られる。動作時に、新しいタイプまたはビットレートのメディアストリームがメディアキャッシュモジュール２１２によって受け取られるたびに、メディアキャッシュモジュール２１２によって、新しいメディアキャッシュストリームが作成される。
【００２８】
ストリームが、メディアキャッシュモジュール２１２によって受け取られる時に、受け取られるストリーム内のデータが、受け取られるストリームと同一のタイプおよびビットレートレートのメディアキャッシュストリーム内の（すなわち、これに論理的に関連する）メディアキャッシュセグメントに記憶される。たとえば、Ｘのビットレートで符号化されたビデオストリームが、メディアキャッシュモジュール２１２によって受け取られる場合に、受け取られたストリームからのデータは、Ｘの関連するビットレートを有する、タイプ「ビデオ」のメディアキャッシュストリームに記憶される。ビットレートＸで符号化されたタイプ「ビデオ」のメディアキャッシュストリームがまだ作成されていない場合には、メディアキャッシュモジュール２１２によって、そのようなメディアキャッシュストリームが作成される。メディアキャッシュモジュール２１２によって、受け取られたストリームの所与のタイプおよびビットレートのメディアキャッシュストリームが作成されたならば、メディアキャッシュモジュール２１２によって、受け取られたストリームの時間的に不連続な部分ごとに別個のメディアキャッシュセグメントが作成される。本明細書で使用する用語「時間的に不連続」は、受け取られたストリームまたはストリーミングメディアのうちで、再生中のコンテンツの時間的表現に関して互いに連続しない部分を指す。したがって、メディアキャッシュモジュール２１２によって、所与のメディアキャッシュストリーム内の別のメディアキャッシュストリームに、受け取られたストリームの時間構造に関して時間的に直接に隣接しない、受け取られたストリームの部分ごとに、所与のメディアキャッシュストリーム内に別個のメディアキャッシュセグメントが作成される。
【００２９】
図３に、仮定のストリーミングメディアファイルに関してメディアキャッシュモジュール２１２によって作成されるメディアキャッシュストリームおよびメディアキャッシュセグメントの配置のグラフィカル表現３００を示す。メディアキャッシュストリームおよびメディアキャッシュセグメントは、時間軸３４０に関して垂直に位置合せされて図示され、時間軸によって、ストリーミングメディアファイルの再生時間が示される。
【００３０】
図からわかるように、メディアキャッシュモジュール２１２によって、３つの別個のメディアキャッシュビデオストリームすなわち、メディアキャッシュビデオストリーム（１）３１０、メディアキャッシュビデオストリーム（２）３１２、およびメディアキャッシュビデオストリーム（３）３１４が作成され、これらのそれぞれが、異なるビットレートに関連する。さらに、メディアキャッシュモジュール２１２によって、２つの別個のオーディオストリームすなわち、メディアキャッシュオーディオストリーム（１）３１６およびメディアキャッシュオーディオストリーム（２）３１８が作成され、これらのそれぞれが、異なるビットストリームに関連する。
【００３１】
図からわかるように、メディアキャッシュモジュール２１２によって、メディアキャッシュビデオストリーム（１）３１０内の２つの時間的に不連続なメディアキャッシュビデオセグメント３２０および３２６と、メディアキャッシュビデオストリーム（２）３１２内の１つのメディアキャッシュビデオセグメント３２２と、メディアキャッシュビデオストリーム（３）内の１つのメディアキャッシュビデオセグメント３２４が作成されている。さらに、メディアキャッシュモジュール２１２によって、メディアキャッシュオーディオストリーム（１）３１６内の１つのメディアキャッシュオーディオセグメント３２８と、メディアキャッシュオーディオストリーム（２）内の１つのメディアキャッシュオーディオセグメント３３０が作成されている。
【００３２】
注記したように、メディアキャッシュモジュール２１２によって、受け取られたストリーミングメディアファイルごとに、メディアキャッシュヘッダセグメントデータ構造も作成される。メディアキャッシュヘッダセグメントに、ファイル識別子フィールド、メディアキャッシュセグメントカウントフィールド、１つまたは複数のメディアキャッシュセグメント情報フィールド、および／またはストリーミングメディアファイル記述が含まれる。
【００３３】
一実施形態によれば、ファイル識別子フィールドに、所与のストリーミングメディアファイルのメディアキャッシュストリームおよびセグメントのそれぞれのデータが記憶されるキャッシュファイルを識別するグローバル一意識別子（ＧＵＩＤ）が含まれる。メディアキャッシュセグメントカウントフィールドには、データをキャッシュファイルに記憶されたメディアキャッシュセグメントの総数を示す数が記憶される。各メディアキャッシュセグメント情報フィールドに、データをキャッシュファイルに記憶されたメディアキャッシュセグメントごとのメディアキャッシュセグメント情報データ構造が記憶される。
【００３４】
メディアキャッシュセグメント情報データ構造には、キャッシュファイル内のデータを有する単一のメディアキャッシュセグメントに関する下記の情報の一部またはすべてが含まれる。すなわち、それら情報は、メディアキャッシュセグメントの識別子、メディアキャッシュセグメントを含むメディアキャッシュストリームを指定するストリーム識別子、メディアキャッシュセグメントを含むメディアキャッシュストリーム内のメディアキャッシュセグメントの先頭を示すセグメント開始位置インジケータ、メディアキャッシュセグメントを含むメディアキャッシュストリーム内のメディアキャッシュセグメントの末尾を示すセグメント終了位置インジケータ、メディアキャッシュセグメントを含むメディアキャッシュストリームのサイズを指定するストリームサイズインジケータ、メディアキャッシュストリーム内にメディアキャッシュセグメントの直前のメディアキャッシュセグメントがある場合にそれを指定する前（ｐｒｅｖｉｏｕｓ）セグメント識別子、メディアキャッシュストリーム内にメディアキャッシュセグメントの直後のメディアキャッシュセグメントがある場合にそれを指定する次セグメント識別子、およびメディアキャッシュセグメントに含まれるデータのタイプ（たとえば、オーディオ、ビデオなど）を指定するセグメントデータタイプ識別子である。
【００３５】
ストリーミングメディアファイル記述に含まれる情報は、ストリーミングメディアファイルのフォーマットに依存する。しかし、一般に、ストリーミングメディアファイル記述には、メディアファイルのさまざまなストリームの記述、メディアファイルのコンテンツを生成するのに使用されるコーデックの記述、および／またはコンテンツに関連する他のメタデータなどの情報を含めることができる。
【００３６】
動作時に、メディアキャッシュモジュール２１２によって、メディアキャッシュモジュールによって作成されるメディアキャッシュセグメントごとに、バイトキャッシュインデックスセグメントおよび関連するバイトキャッシュデータセグメントが作成される。一実施形態によれば、各バイトキャッシュデータセグメントに、制限ではないが、それが作成されたメディアキャッシュセグメントの提示可能データ（たとえば、オーディオデータまたはビデオデータなど）が含まれる。一実施形態によれば、各バイトキャッシュインデックスに、制限ではないが、関連するバイトキャッシュデータセグメント内のデータに関連する下記の情報が含まれる。すなわち、それら情報は、開始時刻、持続時間、バイトキャッシュデータセグメント内のデータへのオフセット、および／またはデータのサイズである。
【００３７】
一実施形態によれば、メディアキャッシュモジュール２１２によって、以下で説明するバイトキャッシュモジュール２１４が作成またはインスタンス化される。この実施形態によれば、メディアキャッシュモジュール２１２によって、単一のバイトキャッシュモジュール２１４または複数のバイトキャッシュモジュールを作成またはインスタンス化することができる。
【００３８】
バイトキャッシュモジュール２１４は、とりわけ、所定のキャッシュファイルデータ構造フォーマットに従って、バイトキャッシュインデックスセグメントおよびバイトキャッシュデータセグメントからのデータをシリアライズし、キャッシュファイル２１６に記憶するように働く。図４に、キャッシュファイル２１６の例示的なキャッシュファイルデータ構造フォーマットの１つを示す。図からわかるように、キャッシュファイル２１６は、複数のページ４１０からなる。これらのページには、ヘッダページ４１２および複数のデータページ４１４〜４２０が含まれる。一般に、データページ４１４〜４２０には、メディアキャッシュモジュール２１２によって作成されたバイトキャッシュインデックスおよびデータセグメントが含まれ、ヘッダページ４１２には、データページの１つまたは複数の特性を記述する情報が含まれる。
【００３９】
図４からわかるように、ヘッダページ４１２に、複数のヘッダページデータフィールド４２２が含まれる。ヘッダページデータフィールド４２２には、キャッシュファイルヘッダデータフィールド４２４および複数のキャッシュファイル制御レコードデータフィールド４２６〜４３２が含まれる。キャッシュファイルヘッダデータフィールド４２４には、さらに、複数のキャッシュヘッダフィールド４３６が含まれる。キャッシュヘッダフィールド４３６には、キャッシュヘッダＧＵＩＤフィールド４３８、フラグフィールド４４０、空きページレコード４４２、ＣＦＣＲ数データフィールド４４４、および外部ブロックＩＤフィールド４４６が含まれる。キャッシュヘッダＧＵＩＤフィールド４３８には、キャッシュファイル２１６を一意に識別するグローバル一意識別子が含まれる。フラグフィールド４４０には、キャッシュファイルが有効なデータを含むかどうかを指定するインジケータフラグが含まれる。
【００４０】
ＣＦＣＲ数データフィールド４４４には、ヘッダページデータフィールド４２２に含まれるキャッシュファイル制御レコードの数を指定する識別子が含まれる。外部ブロックＩＤフィールド４４６には、追加のキャッシュファイル制御レコードを含むキャッシュファイル内のページへのポインタが含まれる。外部ブロックＩＤフィールド４４６は、キャッシュファイル内に必要なキャッシュファイルレコードの数が、ヘッダページ４１２に含めることができるキャッシュファイル制御レコードの数より多い場合に使用される。
【００４１】
空きページレコード４４２には、空きページ数データフィールド４４３、第１外部ブロックＩＤフィールド４４５、および空きページレコードフィールド４４７を含むテーブルレコード数データフィールド４４１が含まれる。空きページ数データフィールド４４３には、キャッシュファイル内の空きページの数を示す識別子が含まれる。空きページレコードフィールド４４７には、キャッシュファイル内のさまざまな空きデータページの数を特に識別するテーブルが含まれる。空きデータページの数が、空きページレコードフィールド４４７で指定できる空きデータページ数を超える場合には、第１外部ブロックＩＤに、追加の空きデータページを識別するデータ構造を含むページへのポインタが含まれる。
【００４２】
キャッシュファイル制御レコード４２６〜４３２のそれぞれに、単一のバイトキャッシュセグメントが関連する。一般に、キャッシュファイル制御レコード４２６〜４３２のそれぞれに、キャッシュファイル２１６内の関連するバイトキャッシュの位置を定義する情報が含まれる。図４からわかるように、各キャッシュファイル制御レコードに、複数のＣＦＣＲデータフィールド４４８が含まれる。ＣＦＣＲデータフィールド４４８には、ＣＦＣＲ  ＧＵＩＤフィールド４５０、第１ページインデックスフィールド４５２、第１ページオフセットフィールド４５４、最終ページオフセットフィールド４５６、およびキャッシュページテーブルレコード４５８が含まれる。ＣＦＣＲデータフィールド４４８のそれぞれおよびこれに含まれる情報を、それらが属するキャッシュファイル制御レコードに関連する単一のバイトキャッシュセグメントに関連すると言うことができる。
【００４３】
ＧＵＩＤフィールド４５０には、それが含まれるキャッシュファイル制御レコードを一意に識別するグローバル一意識別子が含まれる。一般に、第１ページインデックスフィールド４５２、第１ページオフセットフィールド４５４、および最終ページオフセットフィールド４５６には、バイトキャッシュセグメントからのデータが記憶されるアドレスのウィンドウまたは範囲を定義するアドレスが含まれる。
【００４４】
一実施形態によれば、第１ページインデックスフィールド４５２に、関連するバイトキャッシュセグメントを含むデータページの最初のページのアドレスが含まれる。第１ページオフセットフィールド４５４には、関連するバイトキャッシュセグメントのデータの先頭の、第１ページインデックスフィールド４５２によって示されるページの先頭に関する、ページ内の位置へのポインタが含まれる。最終ページオフセットフィールド４５６には、関連するバイトキャッシュセグメントのデータの末尾の、第１ページインデックスフィールド４５２によって示されるページの先頭に関する、ページ内の位置へのポインタが含まれる。
【００４５】
キャッシュページテーブルレコード４５８には、ページ数データフィールド４６２、第１外部ブロックＩＤ４６４、およびキャッシュページレコード４６６を含むテーブルレコード数データフィールド４６０が含まれる。ページ数データフィールド４６２に、関連するバイトキャッシュセグメントからのデータを含むデータページ数を示す識別子が含まれる。キャッシュページレコードフィールド４６６に、関連するバイトキャッシュセグメントからのデータを含むさまざまなデータページを識別するテーブルが含まれる。関連するバイトキャッシュセグメントからのデータを含むデータページの数が、キャッシュページレコード４６６で指定できるデータページ数を超える場合には、第１外部ブロックＩＤフィールド４６４に、関連するバイトキャッシュセグメントからのデータを含む追加データページを識別するデータ構造を含むページへのポインタが含まれる。
【００４６】
図５に、ストリーミングメディアファイルの受信および記憶のさまざまな動作を含む例示的な動作フロー５００を示す。一実施形態によれば、この動作フローは、図２の符号１０２などのクライアントデバイスによって実施され、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せで実施することができる。
【００４７】
図５からわかるように、動作フロー５００の冒頭に、指定されたストリーミングメディアファイルのすべてまたは一部に関する要求５１０が行われる。たとえば、一実施形態によれば、特定のストリーミングメディアファイルに関する要求が、図２のサーバデバイス１０４などのサーバデバイスに対して行われる。要求５１０に続いて、判定動作５１２によって、要求されたストリーミングメディアファイルが使用可能であるかどうかが判定される。要求されたストリーミングメディアファイルが使用可能でないと判定される場合には、動作フロー５００は終了する。しかし、要求されたストリーミングメディアファイルが使用可能と判定される場合には、キャッシュファイル作成動作５１４によって、要求されたストリーミングメディアファイルの記憶用のキャッシュファイルが作成される。一実施形態によれば、キャッシュファイル作成動作５１４によって、図２のデータストレージモジュール２１８などのデータストレージモジュール内でキャッシュファイルが作成される。
【００４８】
キャッシュファイルの作成に続いて、記述要求動作５１６によって、サーバデバイスに、ストリーミングメディアファイルの記述を要求する。記述記憶動作５１８によって、ストリーミングメディアファイル記述を受け取り、作成されたキャッシュファイルに記憶する。次に、ストリーミングメディアファイルストリーム選択動作５２０によって、クライアントデバイスに転送されるサーバデバイスからのメディアストリームを選択する。一実施形態によれば、ストリーミングメディアファイルストリーム選択動作５２０によって、クライアントデバイスとサーバデバイスの間の現在使用可能な帯域幅に少なくとも部分的に基づいて、転送されるストリームが選択される。ストリーム判定動作５２２によって、対応するメディアキャッシュストリームが、選択されたストリームに関するキャッシュファイルに存在するかどうかを判定する。すなわち、ストリーム判定動作５２２によって、選択されたストリームと同一のタイプおよびビットレートを有するメディアキャッシュストリームがキャッシュファイルに存在するかどうかが判定される。
【００４９】
対応するメディアキャッシュストリームが、選択されたストリームのキャッシュファイルに存在しないと判定される場合には、メディアキャッシュストリーム作成動作５２４によって、キャッシュファイル内に対応するメディアキャッシュストリームを作成する。対応するメディアキャッシュストリームの作成に続いて、メディアキャッシュセグメント作成動作５２６によって、選択されたストリームに対応するメディアキャッシュセグメントを、動作５２４で作成されたメディアキャッシュストリーム内に作成する。判定動作５２２に戻って、対応するキャッシュが選択されたストリームのキャッシュファイルに既に存在すると判定される場合には、この動作フローでは、メディアキャッシュストリーム作成動作５２４をバイパスし、メディアキャッシュセグメント作成動作５２６に進み、対応するメディアキャッシュストリーム内にメディアキャッシュセグメントを作成する。メディアセグメント作成動作に続いて、ストリーミング動作５２８によって、選択されたストリームからのデータを、作成されたメディアキャッシュセグメントにストリーミングする。
【００５０】
選択されたストリームからのデータが、作成されたメディアセグメントキャッシュにストリーミングされている時に、シーク検出動作５３０によって、シーク動作が要求されているかどうかが判定される。シーク動作が要求されていると判定される場合には、この動作フローは、ストリーミングメディアファイルストリーム選択動作５２０に戻る。シーク動作が要求されていないと判定される場合には、この動作フローは、帯域幅変化検出動作５３２に進み、クライアントデバイスとサーバデバイスの間の帯域幅が、ストリーミングメディアファイルストリーム選択動作５２０が実行された後に変化したかどうかを判定する。帯域幅の変化が発生したと判定される場合には、この動作フローは、ストリーム判定動作５２２に戻る。帯域幅の変化が発生していないと判定される場合には、この動作フローは、ストリームの終り（ＥＯＳ）判定動作５３４に進み、ストリーミングメディアファイルストリーム選択動作５２０で選択されたストリームの終りに達したかどうかを判定する。選択されたストリームの終りに達していないと判定される場合には、動作フロー５００は、シーク検出動作５３０に戻る。選択されたストリームの終りに達していると判定される場合には、動作フロー５００は、要求されたメディアファイル完了判定動作５３６に進み、動作５１０で要求されたメディアファイルが、完全にキャッシュファイルに記憶されたかどうかを判定する。一実施形態によれば、所望のストリームのすべてが許容可能なビットレートで完全にダウンロード済みである場合に、要求されたメディアファイルが完了したと判定される。要求されたメディアファイルが完全にはキャッシュファイルに記憶されていないと判定される場合には、動作フロー５００は、ストリーミングメディアファイルストリーム選択動作５２０に戻る。しかし、要求されたメディアファイルが完全にキャッシュファイルに記憶されていると判定される場合には、動作フロー５００は終了する。
【００５１】
図６に、ストリーミングメディアを検索し、提示するさまざまな動作６００を含む例示的な動作フロー６００を示す。動作フロー６００には、単一のビデオストリームまたはオーディオストリームなどの単一のストリームを、キャッシュファイル２１６などのキャッシュファイルから選択的に検索する動作が含まれる。ストリーミングメディアファイルおよび／またはキャッシュファイルからの複数のストリームを、動作フロー６００に従って検索できることを理解されたい。一実施形態によれば、動作フロー６００は、図２のクライアントデバイス１０２などのクライアントデバイスによって実施することができ、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せで実施することができる。
【００５２】
図６からわかるように、動作フロー６００の冒頭に、データリクエスタ（たとえばメディアプレイヤ）から、特定のタイプのストリームの所望の点からデータを再生する要求６１０を受け取る。たとえば、サーバに記憶された特定のストリーミングメディアに関する特定の時点からビデオストリームの再生を開始する要求を受け取ることができる。しかし、要求をサービスするために直接にサーバに行く前に、好ましいビットレート動作６１２によって、要求されたデータが、キャッシュファイル内で好ましいビットレートで使用可能であるかどうかを判定する。好ましいビットレートは、複数の形で設定または判定することができる。たとえば、制限なしに、一実施形態によれば、パケット対技法（ｐａｃｌｅｔ−ｐａｉｒ  ｔｅｃｈｎｉｑｕｅ）を使用して、好ましいビットレートを判定する。他の実施形態によれば、ユーザが、好ましいビットレートを明示的に指定することができる。
【００５３】
要求されたデータが、好ましいビットレートでキャッシュファイル内で使用可能でない場合には、サーバ要求動作６１４によって、要求されたデータをサーバに要求し、要求されたデータをキャッシュファイルに記憶する。サーバ要求動作６１４に続いて、この動作フローは、好ましいビットレート動作６１２に戻る。一実施形態によれば、要求されたデータをサーバから得るための複数の不成功の試みが行われた後に、要求されたデータが、好ましいビットレート未満のビットレートでキャッシュファイル内で使用可能であるかどうかの判定が行われる。そうである場合には、より低いビットレートの要求されたデータに、キャッシュファイルからアクセスすることができる。
【００５４】
次に、開始点判定動作６１６によって、要求されたデータの開始点が、キャッシュファイル内のどのメディアキャッシュストリームに含まれるかを判定する。データ使用可能動作６１８によって、要求されたデータが、開始点からストリームの終りまで使用可能であるかどうかを判定する。言い換えると、データ使用可能動作６１８によって、開始点からストリームの終りまでのストリームのデータに、時間的な不連続性があるかどうかが判定される。データが、開始点からストリームの終りまで使用可能であると判定される場合には、この動作フローは、キャッシュセグメント判定動作６２２に進み、判定されたメディアキャッシュストリーム内で、開始点を含むメディアキャッシュセグメントを判定する。しかし、データが、ストリームの開始点から終りまで使用可能ではないと判定される場合には、この動作フローは、サーバデータ要求動作６２０に進み、ストリームの開始点から終りまで時間的不連続性がなくなるように、ストリームを完全にするのに必要なデータをサーバに要求する。動作フロー６００は、キャッシュセグメント判定動作６２２に進む。この動作フローは、サーバデータ要求動作６２０によってサーバに対して要求が行われた後に継続されることを理解されたい。すなわち、この動作フローが、動作６２０で要求されたデータがサーバから受信され、記憶されるまで停止することはない。
【００５５】
キャッシュセグメント判定動作６２２に続いて、再生動作６２４によって、判定されたメディアキャッシュセグメントからデータリクエスタに、再生のためにデータを配信する。判定されたメディアキャッシュセグメントがデータリクエスタに配信されている間に、シーク判定動作６２６によって、判定されたメディアキャッシュストリーム内の新しい開始点へのシークが要求されたかどうかを判定する。これは、たとえば、判定されたメディアキャッシュストリームの時間的に別の位置へのシーク動作がデータリクエスタによって実行される時に発生する可能性がある。シーク判定動作６２６によって、シークが要求されたと判定される場合には、動作フロー６００は、データ使用可能動作６１８に戻る。しかし、シーク判定動作６２６によって、シークが要求されていないと判定される場合に、判定されたメディアキャッシュセグメントからのデータがデータリクエスタに完全に配信された後に、キャッシュストリーム終了判定動作６２８によって、判定されたメディアキャッシュストリームの終りに達したかどうかが判定される。判定されたメディアキャッシュストリームの終りに達していないと判定される場合には、次キャッシュセグメント動作６３０によって、次にアクセスされる、判定されたメディアキャッシュストリーム内のメディアキャッシュセグメントを判定する。しかし、判定されたメディアキャッシュストリームの終りに達したと判定される場合には、動作フロー６００は、ファイルの終り（ＥＯＦ）判定動作６３２に進み、キャッシュファイルの終りに達したかどうかを判定する。キャッシュファイルの終りに達していないと判定される場合には、動作フロー６００は、キャッシュストリーム終了判定動作６２８に戻る。しかし、キャッシュファイルの終りに達したと判定される場合には、動作フロー６００は終了する。
【００５６】
図５および６に、さまざまな動作フローを示した。図に示された動作を、図示の順番であるいはまた異なる順番で実行できることに留意されたい。
【００５７】
図７に、本明細書で説明した技法を実施するのに使用することができる一般的なコンピュータ環境７００を示す。コンピュータ環境７００は、コンピューティング環境の１例にすぎず、コンピュータおよびネットワークアーキテクチャの使用または機能の範囲に関する制限を暗示することを意図されたものではない。コンピュータ環境７００を、例示的なコンピュータ環境７００に示された構成要素のいずれかまたはその組合せに関する依存性または要件を有するものと解釈してもならない。
【００５８】
コンピュータ環境７００には、コンピュータ７０２の形の汎用コンピューティングデバイスが含まれる。コンピュータ７０２は、たとえば、図１または２のクライアントデバイス１０２またはサーバデバイス１０４とすることができる。コンピュータ７０２の構成要素に、１つまたは複数のプロセッサまたは処理ユニット７０４、システムメモリ７０６、およびプロセッサ７０４を含むさまざまなシステム構成要素をシステムメモリ７０６に結合するシステムバス７０８を含めることができるが、これに制限はされない。
【００５９】
システムバス７０８は、メモリバスまたはメモリコントローラ、周辺機器バス、ＡＧＰ（ａｃｃｅｌｅｒａｔｅｄ  ｇｒａｐｈｉｃｓ  ｐｏｒｔ）、およびさまざまなバスアーキテクチャのいずれかを使用するプロセッサバスまたはローカルバスを含む複数のタイプのバス構造のいずれかの１つまたは複数を表す。たとえば、そのようなアーキテクチャに、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニンバスとも称するＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ）バスを含めることができる。
【００６０】
コンピュータ７０２に、通常は、さまざまなコンピュータ可読媒体が含まれる。そのような媒体は、コンピュータ７０２によってアクセス可能な任意の使用可能な媒体とすることができ、そのような媒体に、揮発性および不揮発性の媒体、取外し可能および取外し不能の媒体の両方が含まれる。
【００６１】
システムメモリ７０６には、ランダムアクセスメモリ（ＲＡＭ）７１０などの揮発性メモリおよび／または読取専用メモリ（ＲＯＭ）７１２などの揮発性メモリの形のコンピュータ可読媒体が含まれる。起動中などにコンピュータ７０２内の要素の間で情報を転送するのを助ける基本ルーチンを含むＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）７１４が、ＲＯＭ７１２に記憶される。ＲＡＭ７１０には、通常は、処理ユニット７０４から即座にアクセス可能および／または処理ユニット７０４によって現在操作されているデータおよび／またはプログラムモジュールが含まれる。
【００６２】
コンピュータ７０２には、他の取外し可能／取外し不能、揮発性／不揮発性のコンピュータ記憶媒体も含まれる。たとえば、図７に、取外し不能不揮発性磁気媒体（図示せず）から読み取り、これに書き込むハードディスクドライブ７１６、取外し可能不揮発性磁気ディスク７２０（たとえば、「フロッピディスク」）から読み取り、これに書き込む磁気ディスクドライブ７１８、および、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体などの取外し可能不揮発性光ディスク７２４から読み取り、かつ／またはこれに書き込む光ディスクドライブ７２２が示されている。ハードディスクドライブ７１６、磁気ディスクドライブ７１８、および光ディスクドライブ７２２は、それぞれ、１つまたは複数のデータ媒体インターフェース７６０によってシステムバス７０８に接続される。あるいは、ハードディスクドライブ７１６、磁気ディスクドライブ７１８、および光ディスクドライブ７２２を、１つまたは複数のインターフェース（図示せず）によってシステムバス７０８に接続することができる。
【００６３】
ディスクドライブおよびそれに関連するコンピュータ可読媒体によって、コンピュータ７０２のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージが提供される。この例ではハードディスク７１６、取外し可能磁気ディスク７２０、および取外し可能光ディスク７２４が示されているが、磁気カセットまたは他の磁気ストレージデバイス、フラッシュメモリカード、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）または他の光学ストレージ、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、電気消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯ）などの、コンピュータによってアクセス可能なデータを記憶できる他のタイプのコンピュータ可読媒体も、例示的なコンピューティングシステムおよび環境を実施するのに使用できることを理解されたい。
【００６４】
たとえばオペレーティングシステム７２６、１つまたは複数のアプリケーションプログラム７２８、他のプログラムモジュール７３０、およびプログラムデータ７３２を含む複数のプログラムモジュールを、ハードディスク７１６、磁気ディスク７２０、光ディスク７２４、ＲＯＭ７１２、および／またはＲＡＭ７１０に記憶することができる。
【００６５】
ユーザは、キーボード７３４およびポインティングデバイス７３６（たとえば「マウス」）などの入力デバイスを介してコンピュータ７０２にコマンドおよび情報を入力することができる。他の入力デバイス７３８（具体的には図示せず）に、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナ、および／または類似物を含めることができる。これらおよび他の入力デバイスは、システムバス７０８に結合された入出力インターフェース７４０を介して処理ユニット７０４に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続することができる。
【００６６】
モニタ７４２または他のタイプのディスプレイデバイスも、ビデオアダプタ７４４などのインターフェースを介してシステムバス７０８に接続することができる。モニタ７４２の他に、他の出力周辺デバイスに、スピーカ（図示せず）およびプリンタ７４６など、入出力インターフェース７４０を介してコンピュータ７０２に接続できる構成要素を含めることができる。
【００６７】
コンピュータ７０２は、リモートコンピューティングデバイス７４８などの１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。たとえば、リモートコンピューティングデバイス７４８を、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイスまたは他の一般的なネットワークノードなどとすることができる。リモートコンピューティングデバイス７４８は、ポータブルコンピュータとして図示され、リモートコンピューティングデバイス７４８には、コンピュータ７０２に関して本明細書で説明した要素および特徴の多くまたはすべてを含めることができる。
【００６８】
コンピュータ７０２とリモートコンピュータ７４８の間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）７５０および一般的な広域ネットワーク（ＷＡＮ）７５２として図示されている。そのようなネットワーキング環境は、オフィス、会社全体のコンピュータネットワーク、イントラネット、およびインターネットで普通のものである。
【００６９】
ＬＡＮネットワーキング環境で実施される時に、コンピュータ７０２を、ネットワークインターフェースまたはネットワークアダプタ７５４を介してローカルエリアネットワーク７５０に接続することができる。ＷＡＮネットワーキング環境で実施される時に、コンピュータ７０２に、広域エリアネットワーク７５２を介する通信を確立する、モデム７５６または他の手段を含めることができる。モデム７５６は、コンピュータ７０２の内蔵または外付けとすることができるが、入出力インターフェース７４０または他の適当な機構を介してシステムバス７０８に接続することができる。図示のネットワーク接続が、例示的であり、コンピュータ７０２および７４８の間の通信リンクを確立する他の手段を使用できることを理解されたい。
【００７０】
コンピュータ環境７００と共に示されたものなどのネットワーク化された環境で、コンピュータ７０２に関して図示されたプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに記憶することができる。たとえば、リモートアプリケーションプログラム７５８は、リモートコンピュータ７４８のメモリデバイスに常駐する。例示のために、アプリケーションプログラムおよびオペレーティングシステムなどの他の実行可能プログラムは、本明細書で別個のブロックとして示されているが、そのようなプログラムおよびコンポーネントが、コンピューティングデバイス７０２の異なるストレージ構成要素にさまざまな時に常駐でき、コンピュータのデータプロセッサによって実行されることを理解されたい。
【００７１】
本明細書で、１つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の全般的な文脈で、さまざまなモジュールおよび技法を説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか、特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。通常、プログラムモジュールの機能は、さまざまな実施形態で望み通りに組み合わせるか分散することができる。
【００７２】
これらのモジュールおよび技法の実施形態を、ある形のコンピュータ可読媒体に記憶するか、これを介して伝送することができる。コンピュータ可読媒体は、コンピュータによってアクセスできるすべての使用可能媒体とすることができる。制限ではなく例として、コンピュータ可読媒体に、「コンピュータ記憶媒体」および「通信媒体」を含めることができる。
【００７３】
「コンピュータ記憶媒体」には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報のストレージの方法またはテクノロジで実施される、揮発性および不揮発性、取外し可能および取外し不能の媒体が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリテクノロジ、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは、所望の情報を記憶するのに使用でき、コンピュータによってアクセスできる他の媒体が含まれるが、これに制限はされない。
【００７４】
「通信媒体」によって、通常は、搬送波または他のトランスポート機構などの変調されたデータ信号でコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータが実施される。通信媒体に、すべての情報配信媒体も含まれる。用語「変調されたデータ信号」は、信号内で情報を符号化する形で１つまたは複数の特性が設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線ネットワークまたは直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。上記の組合せも、コンピュータ可読媒体の範囲に含まれる。
【００７５】
上の説明では、構造的特徴および／または方法論的動作に固有の言葉を使用したが、特許請求の範囲で定義されるシステムおよび方法が、説明された特定の特徴または動作に制限されないことを理解されたい。そうではなく、特定の特徴および動作は、本発明を実施する例示的形として開示されたものである。
【図面の簡単な説明】
【００７６】
【図１】本明細書で説明するさまざまなシステム、方法、およびデータ構造を使用することができる例示的なネットワーキング環境を示す図である。
【図２】例示的なクライアントデバイスおよびサーバデバイスを示す図である。
【図３】メディアストリーミングデータの例示的な配置およびフォーマットを示す図である。
【図４】キャッシュファイルの例示的なデータ構造を示す図である。
【図５】ストリーミングメディアを記録するさまざまな動作を含む例示的な動作フローを示す図である。
【図６】ストリーミングメディアを再生するさまざまな動作を含む例示的な動作フローを示す図である。
【図７】本明細書で説明するシステム、方法、およびデータ構造を実施するのに使用することができる例示的な一般的なコンピュータ環境を示す図である。
【図１】
2007529121.tif 000003
【図２】
2007529121.tif 000004
【図３】
2007529121.tif 000005
【図４】
2007529121.tif 000006
【図５】
2007529121.tif 000007
【図６】
2007529121.tif 000008
【図７】
2007529121.tif 000009
【国際調査報告】
2007529121.tif 000010