以下の説明では、多数の特定の詳細が示されている。しかし、本発明の実施形態は、これらの特定の詳細なしに実施することができる。他の例では、公知の回路、構造、及び技術は、この説明の理解を曖昧にしないために詳しく示していない。
本説明は、グラフィカルユーザインタフェース画像の図のような権利によって保護された内容を含む。本発明の出願人を含む権利の所有者は、ここにこれらの内容における権利を含む権利を留保する。権利の権利所有者は、合衆国特許登録商標庁のファイル又は記録内に表される通りに第三者が特許文書又は特許開示を複製することに異議を唱えないが、それ以外は全ての権利を留保する。著作権アップル・インコーポレーテッド2009−2010。
一実施形態において、本明細書に説明する技術及び構成要素は、非ストリーミングプロトコル(HTTPなど)及び他の技術(モーションピクチャエキスパートグループ(MPEG)ストリームなど)を使用してストリーミング体験を配信するための機構を含むことができる。例えば、リアルタイムに近いストリーミング体験をHTTPを使用して提供し、「ライブ」音楽又はスポーツイベント、ライブニュース、ウェブカメラフィードなどをブロードキャストすることができる。一実施形態において、プロトコルは、着信媒体データを複数の媒体ファイルにセグメント化し、サーバにこれらのセグメント化媒体ファイルを格納することができる。プロトコルはまた、クライアントをサーバに格納されたセグメント化媒体ファイルに向けるユニフォームリソース識別子(URI)を含むプレイリストファイルを作ることができる。セグメント化媒体ファイルがプレイリストファイルに従って再生された時に、クライアントは、ユーザに「ライブ」イベントのリアルタイムに近いブロードキャストを提供することができる。事前に記録されたコンテンツも類似の方法で提供することができる。
一実施形態において、サーバは、補足又は代替の媒体コンテンツ(広告、スポーツイベンツに関する統計値、主提示への付加的な媒体コンテンツなど)をブロードキャストイベントに動的に導入することができる。例えば、媒体イベントのクライアント再生中に、サーバは、付加的なURIをプレイリストファイルに追加することができ、URIは、クライアントが補足媒体ファイルをダウンロードすることができるロケーションを識別することができる。クライアントは、サーバが導入したいずれかの補足又は付加的な(又は両方の)媒体コンテンツにアクセスするために、1つ又はそれよりも多くの更新されたプレイリストファイルをサーバから定期的に検索するように示されている。
一実施形態において、サーバは、累積モード又はローリングモードのいずれかで作動させることができる。累積モードでは、サーバは、プレイリストファイルを作成し、媒体ファイル識別子をプレイリストファイルの最後に添付することができる。次に、クライアントは、ダウンロードされた時に単一のプレイリストファイルからストリームの全ての部分へのアクセスを有する(例えば、ユーザは、番組の途中で開始することができる)。ローリングモードでは、サーバは、ローリングに基づいてプレイリストファイルの始めから媒体ファイル識別子を取り除くことによって媒体ファイルの利用可能度を制限することができ、それによってクライアントデバイスにアクセス可能な媒体コンテンツのスライディングウインドウを提供する。サーバはまた、媒体ファイル識別子をプレイリストに追加することができ、ローリングモードでは、サーバは、媒体ファイルの利用可能度をプレイリストに最近追加されたものに制限することができる。次に、クライアントは、見続けるために、プレイリストファイルの更新された複写を繰返しダウンロードする。プレイリストダウンローディングのためのローリング原理は、コンテンツが潜在的に時間的に無制限にされた時に有用になる(例えば、継続して作動されるウェブカムからのコンテンツ)。クライアントは、プレイリストにエンドタグを見つけるまでローリングモードで繰返しプレイリストを要求し続けることができる。
一実施形態において、この機構は、同じ提示の変形ストリームを提供することによってビットレート切り換えをサポートする。例えば、サービスを受ける提示のいくつかのバージョンをサーバに格納することができる。各バージョンは、実質的に同じコンテンツを有することができるが、異なるビットレートで符号化することができる。それによってクライアントデバイスは、例えば、再生の連続性を犠牲にすることなく、利用可能な帯域幅の検出に応答してビットレートを切り換えることができる。
一実施形態において、許可されていない使用に対してコンテンツを保護するための保護機能を提供することができる。例えば、予想を防ぐために、連続していない媒体ファイルの付番を使用することができる。媒体ファイルの暗号化を使用することができる。部分的な媒体ファイルリストを使用することができる。付加的な及び/又は異なる保護機能も提供することができる。
図1は、リアルタイム又はリアルタイムに近いコンテンツを送信及び受信することができるサーバ及びクライアントの一実施形態のブロック図である。図1の例は、ネットワークを通じてサーバに結合された2つのクライアントとの単純なサーバ−クライアント接続を提供する。クライアントのいずれの数も、本明細書に説明する技術及び機構を利用してサポートすることができる。更に、複数のサーバがコンテンツを提供することができ、及び/又は本明細書に説明する技術及び機構に従ってコンテンツを提供するために共に作動させることができる。例えば、1つのサーバがコンテンツを作成し、プレイリストを作成し複数の媒体(ファイルなど)を作成することができ、他のサーバは、作成されたコンテンツを格納して送信する。
ネットワーク110は、有線、無線(IEEE 802.11、802.16など)又はこれらのいずれかの組合せのネットワークのいずれかのタイプとすることができる。例えば、ネットワーク100は、インターネット又はイントラネットとすることができる。別の一例として、ネットワーク110は、セルラーネットワーク(3G、CDMAなど)とすることができる。一実施形態において、クライアントデバイス150及び180が、複数のネットワークのタイプを通じて通信することができる(例えば、各デバイスはWiFi無線LANを通じて及び無線セルラー電話ネットワークを通じて通信することができる)。例えば、クライアントデバイス150及び180は、セルラー無線電話ネットワーク、並びにデータネットワークを通じて通信することができるスマートフォン又はセルラー対応携帯情報端末とすることができる。これらのデバイスは、必要に応じてネットワークのいずれかのタイプ又はネットワーク間の切り換えを通じて本明細書に説明するストリーミング機構を利用することができる。
サーバ120は、当業技術で公知のいずれかの方法でHTTPサーバとして作動させることができる。すなわち、サーバ120は、HTTPプロトコルを使用してコンテンツを提供するHTTPサーバエージェント145を含む。図1の例は、HTTPの観点から説明されているが、他のプロトコルを類似の方式で利用することができる。セグメンタ130及びインデクサ135は、本明細書で説明するようにプレイリストファイルを有する媒体ファイルでコンテンツを提供するためにサーバ120(又は複数のサーバ)に存在するエージェントである。これらの媒体ファイル及びプレイリストファイルは、HTTPプロトコルを使用してHTTPサーバエージェント145を通じて(又は他のサーバを通じて)ネットワーク110を通じて提供することができる。本明細書で説明したエージェントは、ハードウエア、ソフトウエア、ファームウエア、又はその組合せとして実施することができる。
セグメンタ130は、HTTPプロトコルを通じて送信することができる複数の媒体ファイルに媒体データのストリームを分割するように働くことができる。インデクサ135は、セグメント化された媒体ファイルに対応するプレイリストファイルを作成するように働くことができ、それによってクライアントデバイスは、サーバ120によって提供されたコンテンツのリアルタイム又はリアルタイムに近い送信を提供するために媒体ファイルをリアセンブルすることができる。クライアントデバイスからの1つ又はそれよりも多くの要求に応答して、HTTPサーバエージェント145(又は他のサーバ)は、インデクサ135によって生成された1つ又はそれよりも多くのプレイリストファイル及びセグメンタ130によって生成されたコンテンツの媒体ファイルを送信することができる。サーバ120は、本明細書に説明するセキュリティ機能(暗号化など)の1つ又はそれよりも多くを提供する任意的なセキュリティエージェント140を更に含むことができる。サーバ120は、図1に示されていない付加的な構成要素を含むことができる。
クライアントデバイス150及び180は、サーバ120からネットワーク110を通じてプレイリストファイル及び媒体ファイルを受信することができる。クライアントデバイスは、ネットワークを通じて送信されたデータを受信することができ、ネットワーク、例えば、無線移動デバイス、PDA、娯楽デバイス、消費者電子デバイスなどを通じて受信したデータを利用して出力を発生させることができるいずれかのタイプの電子デバイスとすることができる。出力は、例えば、オーディオ、ビデオ、又はこれらのいずれかの組合せを含む媒体タイプの組合せのいずれかの媒体タイプとすることができる。
クライアントデバイス150は、アセンブラエージェント160及び出力発生エージェント165を含むことができる。同様に、クライアントデバイス180は、アセンブラエージェント190及び出力発生エージェント195を含むことができる。アセンブラエージェント160及び180は、サーバ120からプレイリストファイルを受信し、プレイリストファイルを使用してサーバ120からの媒体ファイルにアクセスしダウンロードする。出力発生エージェント165及び195は、ダウンロードされた媒体ファイルを使用して、クライアントデバイス150及び160それぞれからの出力を発生させる。出力は、1つ又はそれよりも多くのスピーカ、1つ又はそれよりも多くの表示画面、スピーカ及び表示画面の組合せ、又はいずれかの他の入力又は出力デバイスによって提供することができる。クライアントデバイスは、受信した媒体ファイル(圧縮媒体ファイル又は非圧縮媒体ファイルなど)を格納するためのバッファとして機能するメモリ(フラッシュメモリ又はDRAMなど)を含むことができ、バッファは、現在提示されているコンテンツの時間を超える提示可能なコンテンツに値する多くの秒数を提供することができ、それによって新しいコンテンツがダウンロードされている間バッファに入れられたコンテンツを後で表示することができる。このバッファは、クライアントデバイスが間欠的に遅いネットワーク接続を通じてコンテンツを検索しようとする間に提示可能なコンテンツを提供することができ、従って、バッファはネットワーク待ち時間又は接続問題を隠すことができる。
クライアントデバイス150及び180は、それぞれに本明細書に説明するセキュリティ機能の1つ又はそれよりも多くを提供する任意的なセキュリティエージェント170及び185を更に含むことができる。クライアントデバイス150及び180は、図1に示されていない付加的な構成要素を含むことができる。
一実施形態において、本出願に説明する技術を非ストリーミングプロトコル(HTTPなど)を通じてマルチメディアデータの無制限ストリームを送信するために使用することができる。実施形態は、媒体データの暗号化及び/又はストリームの代替のバージョンの供給(例えば、代替のビットレートを提供するため)を含むことができる。媒体データが作成後直ちに送信することができるので、データは、実質的にリアルタイムで受信することができる。ファイルに対する例示的なデータフォーマット、並びにマルチメディアデータのストリームのサーバ(送信者)及びクライアント(受信者)によって行われる作動が提供されるが、他のフォーマットもサポートすることができる。
模擬のリアルタイムストリーム(又はリアルタイムに近いストリーム)として送信することができる媒体提示は、プレイリストファイルを示すユニバーサルリソースインジケータ(URI)によって指定される。一実施形態において、プレイリストファイルは、付加的なURIの順序付けられたリストである。プレイリストファイルにおける各URIは、特定のプログラムのための媒体データの単一の連続ストリームとすることができるストリームのセグメントである媒体ファイルを示している。
媒体データのストリームを再生するために、クライアントデバイスは、サーバからプレイリストファイルを取得する。クライアントは、プレイリストファイルによって示された各媒体データファイルを取得及び再生する。一実施形態において、クライアントは、付加的な及び/又は異なる媒体セグメントを見出すためにプレイリストファイルを動的に又は繰返しリロードすることができる。
プレイリストファイルは、例えば、拡張M3Uプレイリストファイルとすることができる。一実施形態において、M3Uフォーマットを実質的に拡張する付加的なタグが使用される。M3Uは、ムービング・ピクチャ・エキスパート・グループ・オーディオ・レーヤ3・ユニフォーム・リソース・ロケータ(MP3URL)を示し、マルチメディアプレイリストを格納するのに使用されるフォーマットである。M3Uファイルは、媒体プレーヤが再生する1つ又はそれよりも多くの媒体ファイルのロケーションを含むテキストファイルである。
プレイリストファイルは、一実施形態において、個々の行から構成される拡張M3Uフォーマットテキストファイルである。行は、単一のLF文字又はLF文字が後に続くCR文字のいずれかによって終わらせることができる。各行は、URI、空白行、又はコメント文字(「#」など)による開始とすることができる。URIは、再生される媒体ファイルを識別する。空白行は無視することができる。
コメント文字で始まる行は、コメント又はタグのいずれかとすることができる。タグは、#EXTで開始することができ、コメント行は、#で開始することができる。コメント行は、通常、サーバ及びクライアントによって無視される。一実施形態において、プレイリストファイルは、UTF−8フォーマットで符号化される。UTF−8(8ビット−ユニコード・トランスフォーメーション・フォーマット)は、可変長文字符号化フォーマットである。代替の実施形態において、他の文字符号化フォーマットを使用することができる。
以下の例では、2つのタグ:EXTM3U及びEXTINFを含む拡張M3Uフォーマットが利用される。拡張M3Uファイルは、「#EXTM3U」を含む第1の行によって基本M3Uファイルとは区別することができる。
EXTINFは、タグに続くURIによって識別された媒体ファイルを説明する記録マーカである。一実施形態において、各媒体ファイルURIは、EXTINFタグによって先行され、例えば、#EXTINF:<持続時間>、<タイトル>である。従って、「持続時間」は、媒体ファイルの持続時間を指定し、「タイトル」はターゲット媒体ファイルのタイトルである。
一実施形態において、媒体ファイルの転送及び再生を管理するために以下のタグを使用することができる:
EXT−X−TARGETDURATION
EXT−X−MEDIA−SEQUENCE
EXT−X−KEY
EXT−X−PROGRAM−DATE−TIME
EXT−X−ALLOW−CACHE
EXT−X−STREAM−INF
EXT−X−ENDLIST
EXT−X−DISCONTINUITY
EXT−X−VERSION。
これらのタグの各々は、以下に更に詳しく説明する。特定のフォーマット及び属性が各新しいタグに関して説明するが、代替の実施形態は、異なる属性、名称、フォーマット等によってサポートすることができる。
EXT−X−TARGETDURATIONタグは、一実施形態において、提示に追加される次の媒体ファイルの大体の持続時間を示すことができる。再生ファイル及びフォーマットに含むことができるのは、#EXT−X−TARGETDURATION:<秒>である。従って、「秒」は、媒体ファイルの持続時間を示す。一実施形態において、実際の持続時間は、タグによって示されたターゲット持続時間とは僅かに異なる場合がある。一実施形態において、セグメントを示す全てのURIをセグメントの大体の持続時間に関連付けることになり、例えば、セグメントに対するURIは、そのセグメントの大体の持続時間を示すタグを前に付けることができる。別の実施形態において、EXT−X−TARGETDURATIONタグは、最大媒体ファイル持続時間を指定することができ、プレイリストファイルの各媒体ファイルのEXTINF持続時間は、ターゲット持続時間未満か又はこれに等しくすべきであり、このタグ(最大媒体ファイル持続時間を指定する)は、プレイリストファイルにおいて一度だけ指定することができ、これは、プレイリストファイルの全ての媒体ファイルに適用され、そのフォーマットは、#EXT−X−TARGETDURATION:<s>とすることができ、ここで「s」は、ターゲット持続時間を秒で示す整数である。
プレイリストファイルの各媒体ファイルURIは、固有のシーケンス番号を有することができる。あるとすれば、URIのシーケンス番号は、それに先行したURIのシーケンス番号に等しく、一実施形態では1を加えた番号である。EXT−X−MEDIA−SEQUENCEタグは、プレイリストファイルに現れる最初のURIのシーケンス番号を示すことができ、フォーマットは、#EXT−X−MEDIA−SEQUENCE:<番号>とすることができ、従って、「番号」は、URIのシーケンス番号である。プレイリストファイルが#EXT−X−MEDIA−SEQUENCEタグを含まない場合、プレイリストにおける第1のURIのシーケンス番号は1と考えることができる。媒体ファイルのシーケンス番号は、一実施形態ではそのURIに現れる必要はなく、一実施形態において、プレイリストは、単に1つのEXT−X−MEDIA−SEQUENCEタグを含むことができる。一実施形態において、シーケンス付番は、不連続にすることができ、例えば、1、5、7、17のような不連続シーケンス付番は、シーケンスにおける次の番号を予想することを困難にすることができ、これは、コンテンツの違法コピーを防ぐのを助けることができる。コンテンツの保護を助けるための別の選択肢は、いずれかの所定の時間にプレイリストの一部分だけを明かすことである。
一部の媒体ファイルを暗号化することができる。EXT−X−KEYタグは、これに続く媒体ファイルを解読するために使用することができる情報を提供し、フォーマットは、#EXT−X−KEY:METHOD≦method>[,URI=“<URI>”][,IV≦IV>]とすることができる。METHODパラメータは、暗号化方法を指定し、URIパラメータは、あるとすれば、キーを取得する方法を指定し、IV(初期化ベクトル)は、あるとすれば、暗号化方法(キーなどによる)で使用された初期化ベクトルを指定する。
NONEの暗号化方法は、暗号化を指示せず、NONEが次に示された場合、一実施形態において、URI及びIVパラメータを存在させるべきではない。様々な暗号化方法を使用することができ、例えば、AES−128は、128ビットキー及びPKCS7パディングによる高度暗号化規格暗号化を使用する暗号化を示す[RFC3852を参照されたい]。新しいEXT−X−KEYタグは、いずれの前のEXT−X−KEYタグにも取って替わる。
URIパラメータを有するEXT−X−KEYタグはキーファイルを識別する。キーファイルは、プレイリストファイルに列挙された次の媒体ファイルを解読するのに使用される暗号キーを含むことができる。例えば、AES−128暗号化方法は16オクテットキーを使用する。キーファイルのフォーマットは、バイナリフォーマットの16オクテットのパケット化アレイとすることができる。
AES−128の使用は、暗号化及び解読する時に同じ16オクテット初期化ベクトル(IV)が供給されることを通常は必要とする。IVの変更は、暗号の強度を高めるために使用することができる。AES−128暗号化を使用する時に、媒体ファイルのシーケンス番号は、媒体ファイルを暗号化又は解読する時にIVとして使用することができる。
EXT−X−PROGRAM−DATE−TIMEタグは、次の媒体ファイルの開始を絶対及び/又は時間に関連付けることができ、時間帯を含む又は示すことができる。一実施形態において、日付/時間表示は、ISO/IEC8601:2004である。このタグにおける日付及び時間の値は、適切な壁時計時間への媒体の時系列の情報マッピングを提供することができ、表示又は他の目的のために日付及び時間に基づく再生のためのコンテンツを求める基礎として使用することができる。一実施形態において、サーバがこのマッピングを提供する場合、サーバは、EXT−X−PROGRAM−DATE−TIMEタグをプレイリストファイルの全てのEXT−X−DISCONTINUITYタグの後に置くべきである。タグフォーマットは、EXT−X−PROGRAM−DATE−TIME:<YYYY−MM−DDThh:mm:ssZ>とすることができる。
クライアントが後の再生のためにダウンロードされた媒体ファイルをキャッシュに入れることができるか否かを示すためにEXT−X−ALLOW−CACHEタグを使用することができる。このタグは、一実施形態ではプレイリストファイルのあらゆる場所に出現することができるが、一実施形態において、プレイリストファイルに一度だけ出現すべきである。タグフォーマットは、EXT−X−ALLOW−CACHE:<YES|NO>とすることができる。
EXT−X−ENDLISTタグは、一実施形態において、媒体ファイルがこれ以上プレイリストファイルに追加されないことを示す。タグフォーマットは、EXT−X−ENDLISTとすることができる。一実施形態において、プレイリストが最終セグメント又は媒体ファイルを含む場合、プレイリストはEXT−X−ENDLISTタグを有することになる。このタグは、一実施形態ではプレイリストファイルのあらゆる場所に出現することができ、一実施形態において、プレイリストファイルに一度だけ発生させることができる。
プレイリストファイルの次のURLが別のプレイリストファイルを識別することを示すためにEXT−X−STREAM−INFタグを使用することができる。タグフォーマットは、一実施形態では、EXT−X−STREAM −INF:[属性=値][,属性=値]*<URL>とすることができ、ここで、以下の属性を使用することができる。同じタイプの属性は、このタグの一実施形態において、同じタグに一度より多く出現すべきではない。属性BANDWIDTH≦n>は、ビット/秒の数として表されるストリームビットレートの大体の上限境界である。一実施形態において、属性BANDWIDTHは、プレイリストに出現又は出現するであろうコンテナオーバヘッドを含むように計算された各媒体ファイルの全体的なビットレートの上限境界とすることができる。属性PROGRAM−ID≦i>は、プレイリストファイルの範囲の特定の提示を固有に識別する数字である。プレイリストファイルは、同じPROGRAM−IDを有する複数のEXT−STREAM−INF URIを含むことができ、同じ提示の変形ストリームを説明し、これらの変形プレイリストは、付加的なEXT−X−STREAM−INFタグを含むことができる。変形ストリーム及び変形プレイリストを本発明の開示で更に説明する(例えば、図9A−9Dを参照されたい)。属性CODECS=“[フォーマット][,フォーマット]*”は、プレイリストファイルの媒体ファイルに存在する媒体サンプルタイプを指定するために使用することができ、ここで各フォーマットは、媒体サンプルタイプを指定し、一実施形態において、有効フォーマット識別子をRFC4281によって定義されたISOファイルフォーマットネームスペースにおける識別子とすることができる。属性RESOLUTION≦N>x<M>は、ストリーム内のビデオの解像度を指定することができ、ここでNは、ストリーム内のビデオの大体の符号化水平解像度であり、ピクセルの数として表現することができ、Mは、大体の符号化垂直解像度である。
EXT−X−DISCONTINUITYタグは、それに続く媒体ファイルとそれに先行する媒体ファイルの間の符号化不連続性を示す。変更することができる特性のセットは、
・ファイルフォーマット
・トラックの数及びタイプ
・符号化パラメータ
・符号化シーケンス
・タイムスタンプシーケンス
である。そのフォーマットは、#EXT−X−DISCONTINUITYである。
EXT−X−VERSIONタグは、プレイリストファイルの互換性バージョンを示す。プレイリストファイル、その関連媒体、及びそのサーバは、一実施形態において、タグ値によって示されるプロトコルバージョンを説明するこの文書の最新バージョンの全ての条項を遵守すべきである。そのフォーマットは、#EXT−X−VERSION:<n>であり、従って、「n」はプロトコルバージョンを示す整数である。
プレイリストファイルは、一実施形態において、1つよりも多いEXT−X−VERSIONタグを含むことはできない。EXT−X−VERSIONタグを含まないプレイリストファイルは、一実施形態において、このプロトコルのバージョン1を遵守すべきである。プレイリストファイルがこのタグを有する場合、その値は、一実施形態において、サーバ、プレイリストファイル及び関連の媒体ファイルが全て遵守する最低プロトコルバージョンとすべきである。
上述のタグ及び属性は、オリジナル媒体コンテンツを表す媒体ファイルを編成、送信、及び処理するためにサーバデバイスによって使用することができる。クライアントデバイスは、この情報を使用して、リアルタイム又はリアルタイムに近いストリーミング体験(例えば、音楽又はスポーツイベントのようなライブブロードキャストの視聴)をクライアントデバイスのユーザに提供するために、ある方式で媒体ファイルをリアセンブル及び提示する。
プレイリストファイルの各媒体ファイルURIは、オリジナル提示のセグメント(すなわち、オリジナル媒体コンテンツ)である媒体ファイルを識別する。一実施形態において、各媒体ファイルは、MPEG2トランスポートストリーム、MPEG2プログラムストリーム、又はMPEG2オーディオエレメンタリストリームとしてフォーマット設定される。フォーマットは、CODECを指定することによって指定することができ、プレイリストは、CODECを指定することによってフォーマットを指定することができる。一実施形態において、提示における全ての媒体ファイルは、同じフォーマットを有するが、しかし、他の実施形態では複数のフォーマットをサポートすることができる。トランスポートストリームファイルは、一実施形態において、単一のMPEG2プログラムを含むべきであり、各ファイルの最初にプログラムアソシエーションテーブル及びプログラムマップテーブルを存在させるべきである。ビデオを含むファイルは、ビデオ復号器を完全に初期化するために少なくとも1つのキーフレーム及び十分な情報を有するべきである。プレイリストの媒体ファイルは、プレイリストファイルに現れる最初の媒体ファイルでない限り又はEXT−X−DISCONTINUITYタグによって先行される場合、前のシーケンス番号を有する媒体ファイルの最後での符号化ストリームの連続でなくてはならない。クライアントは、妥当な部分集合を選択することによって特定のタイプの複数のトラック(例えば、オーディオ又はビデオ)を処理する準備をすべきである。クライアントは、一実施形態において、認識していないトランスポートストリームの内側のプライベートストリームを無視すべきである。媒体ファイルの内側のストリーム内及び複数の媒体ファイルにわたる対応するストリーム間のサンプルに対する符号化パラメータは一貫したままにすべきである。しかし、クライアントは、例えば、解像度変更に対処するためにビデオコンテンツをスケーリングすることにより、遭遇する符号化変更を処理すべきである。
図2Aは、1つ又はそれよりも多くのサーバデバイスが非ストリーミングプロトコルを使用して媒体コンテンツをサポートするための技術の一実施形態の流れ図である。図2Aの例は、HTTPの観点から提供されるが、他の非ストリーミングプロトコルも類似の方式で利用することができる。図2Aの例は、特定のタスクを実行する単一のサーバの観点から提供される。しかし、サーバのいずれの数も利用することができる。例えば、媒体ファイルをクライアントデバイスに提供するサーバは、コンテンツを複数の媒体ファイルにセグメント化するサーバとは異なるデバイスとすることができる。
サーバデバイスは、作動200で提供されるコンテンツを受信する。コンテンツは、ライブオーディオ及び/又はビデオ(例えば、スポーツイベント、ライブニュース、ウェブカメラフィード)を表すことができる。コンテンツはまた、事前に記録されたコンテンツ(例えば、記録されたコンサート、トレーニングセミナーなど)を表すことができる。コンテンツは、当業技術で公知のいずれかのフォーマット及びプロトコルに従ってストリーミングか否かに関わらずサーバによって受信することができる。一実施形態において、コンテンツは、MPEG2ストリームの形式でサーバによって受信されるが、しかし、他のフォーマットもサポートすることができる。
次に、サーバは、作動210でコンテンツの少なくとも一部分を一時的に格納することができる。コンテンツ又はコンテンツの少なくとも一部分は、例えば、格納デバイス(格納エリアネットワークにおけるハードディスクなど)に又はメモリに一時的に格納することができる。代替的に、格納デバイス又はメモリにそこからコンテンツを転送することができるストレージ媒体(例えば、コンパクトディスク、フラッシュドライブ)を通じてコンテンツを受信することができる。一実施形態において、サーバは、必要に応じてコンテンツを1つ又はそれよりも多くのストリーム(MPEG2など)に変換する符号化器を有する。この変換は、受信したコンテンツを永久に格納することなく実行することができ、一部の実施形態において、格納作動210を省くことができ、又は他の実施形態では長期格納(アーカイブ格納デバイスなど)とすることができる。
提供されるコンテンツは、作動220で複数の媒体ファイルにセグメント化される。一実施形態において、サーバが、ストリームを標準的なウェブサーバを使用して配信することができる個別の異なる媒体ファイル(すなわち、セグメント)に変換する。一実施形態において、サーバは、個々の媒体ファイルの効率的な復号をサポートするポイントで(例えば、PESパケット境界及びiフレーム境界のようなパケット及びキーフレーム境界で)媒体ストリームをセグメント化する。媒体ファイルは、実質的に等しい持続時間を有するオリジナルストリームの一部分とすることができる。サーバはまた、各媒体ファイルに対するURIを作成する。これらのURIにより、クライアントデバイスは媒体ファイルにアクセス可能である。
セグメントが、全体のファイルを固有に配信するHTTPサーバを使用してサービスを受けるので、サーバは、クライアントにサービスを受ける前に利用可能な完全セグメント化媒体ファイルを有するべきである。従って、クライアントは、少なくとも1つの媒体ファイル長毎にブロードキャストを(時間的に)遅らせることができる。一実施形態において、媒体ファイルサイズは、ラグ時間と多くのファイルを有するこの間の均衡に基づいている。
一実施形態において、2つのセッションタイプ(ライブセッション及びイベントセッション)がサポートされる。ライブセッションでは、ストリームの固定サイズ部分だけが保存される。一実施形態において、古くなったコンテンツ媒体ファイルが、プログラムプレイリストファイルから取り除かれ、サーバから取り除くことができる。セッションの第2のタイプは、イベントセッションであり、クライアントは、ブロードキャストのいずれのポイントにも合わせることができる(例えば、最初から開始し、中間ポイントから開始する)。セッションのこのタイプは、例えば、再ブロードキャストのために使用することができる。
媒体ファイルは、作動230でサーバメモリに格納される。媒体ファイルは、作動230におけるファイルの格納の前に、暗号化のようなセキュリティ機能によって保護することができる。媒体ファイルは、サーバデバイスのウェブサーバアプリケーションによってサポートされる(又は送信を実行する別のデバイスによってサポートされる)ネットワークプロトコル(例えば、HTTP又はHTTPS)を使用していつでも送信することができるファイルとして格納される。
オリジナルコンテンツを再生するために媒体ファイルをアセンブルすべきである順序を示すように作動240で1つ又はそれよりも多くのプレイリストファイルが作成される。プレイリストファイルは、クライアントデバイスでのストリーミング体験を提供するために媒体ファイルにアクセス及びリアセンブルするためのクライアントデバイスに対する情報を提供するために、拡張M3Uタグ及び本明細書に説明するタグを利用することができる。各媒体ファイルに対するURIは、媒体ファイルが再生される順序でプレイリストファイルに含まれる。サーバは、クライアントデバイスがプレイリストファイルへのアクセスを提供するために、プレイリストファイルに対する1つ又はそれよりも多くのURIを作成することができる。
プレイリストファイルを作動250でサーバに格納することができる。媒体ファイル及びプレイリストファイルの作成及び格納は、図2Aの特定の順序で提示され、異なる順序を使用することもできる。例えば、媒体ファイルが作成又は格納される前にプレイリストファイルを作成することができる。別の一例として、プレイリストファイル及び媒体ファイルをいずれかが格納される前に作成することができる。
媒体ファイルが暗号化される場合、プレイリストファイルは、許可されたクライアントデバイスが媒体ファイルを解読するための暗号化キーを含むキーファイルを取得することを可能にするURIを定義することができる。暗号化キーは、セキュア接続(HTTPSなど)を使用して送信することができる。別の一例として、HTTPSを使用してプレイリストファイルを送信することができる。更に別の一例として、媒体ファイルを予想できない順序で構成することができ、それによってクライアントは、プレイリストファイルなしにはストリームを再生することができない。
暗号化方法がAES−128である場合、AES−128CBC暗号化は、例えば、個々の媒体ファイルに適用することができる。一実施形態において、全ファイルが暗号化される。暗号ブロック連鎖は、通常、一実施形態では媒体ファイルにわたって適用されない。媒体ファイルのシーケンス番号はIVとして使用することができ、又はIVを上述したようにEXT−X−KEYタグのIV属性の値とすることができる。一実施形態において、サーバが、キーURIを備えたEXT−X−KEYタグをプレイリストファイルの最後に追加する。次に、サーバは、暗号化構成における変更が行われるまで、そのキーによって全ての次の媒体ファイルを暗号化する。
新しい暗号化キーに切り換えるために、サーバは、提示で使用された全ての前のキーURIとは個別の新しいURIを通じて利用可能な新しいキーを作ることができる。サーバはまた、新しいキーURIを備えたEXT−X−KEYタグをプレイリストファイルの最後に追加し、新しいキーで全ての次の媒体ファイルを暗号化する。
暗号化を終了するために、サーバは、プレイリストファイルの最後に暗号化方法NONEを備えたEXT−X−KEYタグを追加することができる。タグ(方法としての「NONE」を備えた)は、一実施形態ではURIパラメータを含まない。全ての次の媒体ファイルは、暗号化構成における変更が上述したように行われるまで暗号化されない。サーバは、プレイリストファイルがそのキーによって暗号化された媒体ファイルへのURIを含む場合、プレイリストファイルからEXT−X−KEYタグを取り除かない。サーバは、図3Aに関して詳しく説明するように、作動270でクライアント要求に応答してプレイリストファイル及び媒体ファイルをネットワークを通じて送信することができる。
一実施形態において、サーバは、プレイリストファイルに対するクライアントデバイスからの要求の受信に応答してクライアントデバイスにプレイリストファイルを送信する。クライアントデバイスは、クライアントデバイスに提供されたURIを使用してプレイリストファイルにアクセス/要求することができる。URIは、サーバ上のプレイリストファイルのロケーションを示す。それに応じて、サーバは、プレイリストファイルをクライアントデバイスに提供することができる。クライアントデバイスは、複数の媒体ファイルにアクセスするために、プレイリストファイルのタグ及びURI(又は他の識別子)を利用することができる。
一実施形態において、サーバは、プレイリストファイルに最も新しく追加された媒体ファイルに媒体ファイルの利用可能度を制限することができる。これを実行するために、各プレイリストファイルは、単に1つのEXT−X−MEDIA−SEQUENCEタグを含むことができ、その値は、プレイリストファイルから取り除かれた全ての媒体ファイルURIに対して1ずつ増分することができる。媒体ファイルURIは、これらが追加された順序でプレイリストファイルから取り除くことができる。一実施形態において、サーバがプレイリストファイルから媒体ファイルURIを取り除いた時に、媒体ファイルは、媒体ファイルの持続時間に媒体ファイルが出現した最長プレイリストファイルの持続時間を加えたものに等しい時間、クライアントに利用可能のままになる。
プレイリストファイルの持続時間は、そのプレイリストファイル内の媒体ファイルの持続時間の和である。他の持続時間を使用することもできる。一実施形態において、サーバは、EXT−X−ENDLISTタグが存在しない限り、全ての時間にプレイリストに少なくとも3つの主提示媒体ファイルを維持することができる。
図2Bは、1つ又はそれよりも多くのサーバデバイスが動的に更新されたプレイリストを1つ又はそれよりも多くのクライアントデバイスに提供するための技術の一実施形態の流れ図である。プレイリストは、累積モード又は本明細書に説明するローリングモードのいずれかを使用して更新することができる。図2Bの例は、HTTPの観点から提供されるが、しかし、他の非ストリーミングプロトコル(HTTPSなど)を類似の方式で利用することもできる。図2Bの例は、特定のタスクを実行するサーバの観点から提供される。しかし、サーバのいずれの数も利用することができる。例えば、媒体ファイルをクライアントデバイスに提供するサーバは、コンテンツを複数の媒体ファイルにセグメント化するサーバとは異なるデバイスとすることができる。
サーバデバイスは、作動205で提供されるコンテンツを受信する。次に、サーバは、作動215でコンテンツの少なくとも一部分を一時的に格納することができる。作動215は、図2Aの作動210に類似とすることができる。提供されるコンテンツは、作動225で複数の媒体ファイルにセグメント化される。媒体ファイルは、作動235でサーバメモリに格納することができる。媒体ファイルは、作動235でファイルを格納する前に暗号化のようなセキュリティ機能によって保護することができる。
媒体ファイルを作動245でオリジナルコンテンツを再生するためにアセンブルすべきである順序を示すために、1つ又はそれよりも多くのプレイリストファイルが生成される。プレイリストファイルは、作動255でサーバに格納することができる。媒体ファイル及びプレイリストファイルの作成及び格納は図2Bで特定の順序で提示されているが、異なる順序を使用することもできる。
サーバ(又は別のサーバ)は、図3A−3Bに関して更に詳しく説明するように、作動275でクライアント要求に応答してプレイリストファイル及び媒体ファイルをネットワークを通じて送信することができる。
プレイリストファイルは、様々な理由のためにサーバによって更新することができる。サーバは、作動285でクライアントデバイスに提供される付加的なデータを受信することができる。付加的なデータは、作動255でプレイリストファイルが格納された後に受信することができる。付加的なデータは、例えば、ライブ提示の付加的な部分、又は既存の提示のための付加的な情報とすることができる。付加的なデータは、広告又は統計値(例えば、スポーツイベントに関するスコア又はデータ)を含むことができる。付加的なデータは、提示の上に(半透明にして)重ねることができ、又はサイドバーユーザインタフェースで提示することができる。付加的なデータは、オリジナルの受信データと同じ方式でセグメント化することができる。付加的なデータが広告を構成する場合、又は他のコンテンツが、プレイリストによって表されたプログラムに挿入される場合、付加的なデータを作動215で(少なくとも一時的に)格納し、作動225でセグメント化して作動235で格納することができ、セグメント化された付加的なデータの格納の前に、付加的なデータのセグメントを暗号化することができる。次に、作動245で、プログラム及び付加的なデータを含む更新されたプレイリストが生成される。プレイリストは、付加的なデータに基づいて更新され作動255で再度格納される。プレイリストファイルの変更は、クライアントデバイスの観点からごく小さく実行するべきである。更新されたプレイリストは、一実施形態において、前のプレイリストに置き換わる。以下に更に詳しく説明するように、クライアントデバイスはプレイリストを複数回要求することができる。これらの要求により、クライアントデバイスは、最新のプレイリストを利用することができるようなる。一実施形態において、付加的なデータをメタデータとすることができ、この場合、プレイリストは更新する必要はないが、セグメントは、メタデータを含むように更新することができる。例えば、メタデータは、セグメントのタイムスタンプに適合することができるタイムスタンプを含むことができ、メタデータは、適合するタイムスタンプを有するセグメントに追加することができる。
更新されたプレイリストは、媒体ファイルの除去をもたらすことができる。一実施形態において、サーバは、媒体ファイルに対するURIをこれらがプレイリストに追加された順序でプレイリストから取り除くべきである。一実施形態において、サーバが全提示を取り除く場合、サーバは、プレイリストファイルをクライアントデバイスに利用できないようにする。一実施形態において、サーバは、現在のクライアントデバイスが提示へのアクセスを終了することができるように、取り除かれる媒体ファイルを含む最長プレイリストファイルの持続時間にわたって媒体ファイル及びプレイリストファイルを維持する。従って、プレイリストファイルのあらゆる媒体ファイルURIは、プレイリストファイルによって示された媒体ファイルの大体の累積持続時間を示すために、EXT−X−STREAM−INFタグを前に付けることができる。代替の実施形態において、媒体ファイル及びプレイリストファイルを即座に取り除くことができる。
クライアントデバイスからのプレイリストに対する次の要求は、作動275で更新されたプレイリストをサーバに提供させる。一実施形態において、プレイリストは、定期的に、例えば、ターゲット持続時間に関連付けられた期間で更新される。プレイリストファイルの定期的な更新により、サーバは、動的に変更された提示のためにサーバへのアクセスを提供することができるようなる。
図2Cは、代替ストリームの使用の1つの形式である1つ又はそれよりも多くのサーバデバイスが複数ビットレートを使用してクライアントデバイスに媒体コンテンツを提供するための技術の一実施形態の流れ図である。図2Cの例は、HTTPの観点から提供されるが、しかし、他の非ストリーミングプロトコルを類似の方式で利用することもできる。図2Cの例は、特定のタスクを実行するサーバの観点から提供される。しかし、サーバのいずれの数も利用することができる。例えば、媒体ファイルをクライアントデバイスに提供するサーバは、コンテンツを複数の媒体ファイルにセグメント化するサーバとは異なるデバイスとすることができる。
一実施形態において、サーバは、同じ提示の異なる符号化を提供するために、複数のプレイリストファイル、又は単一のプレイリストファイルにおける複数の媒体ファイルリストを備えた単一のプレイリストファイルを供給することができる。異なる符号化が提供される場合、プレイリストファイルは、クライアントデバイスが動的に符号化を切り換えられるようにするために異なるビットレートを提供する各変形ストリームを含むことができる(これは、図9A−9Dに関して更に説明する)。変形ストリームを有するプレイリストファイルは、各変形ストリームに対するEXT−X−STREAM−INFタグを含むことができる。同じ提示のための各EXT−X−STREAM−INFタグは、同じPROGRAM−ID属性値を有することができる。各提示のためのPROGRAM−ID値は、変形ストリーム内で固有である。
一実施形態において、サーバが、変形ストリームを作成する時に以下の制約を満足させる。各変形ストリームは、主提示の一部ではない任意的なコンテンツを含む同じコンテンツを含むことができる。サーバは、ストリームの最小ターゲット持続時間の精度内で全ての変形ストリームに対してコンテンツの同じ時間を利用可能にすることができる。変形ストリームの媒体ファイルは、一実施形態において、全ての変形ストリームにおける対応するコンテンツに対して適合するサンプルタイムスタンプを有するMPEG2トランスポートストリーム又はMPEG2プログラムストリームのいずれかである。全ての変形ストリームは、一実施形態において同じオーディオ符号化を含むべきである。それによってクライアントデバイスは、コンテンツを失うことなく変形ストリーム間で切り換えることができる。
図2Cを参照すると、サーバデバイスは、作動202で提供されるコンテンツを受信する。次に、サーバは。作動212で少なくとも一時的にコンテンツを格納することができる。提供されるコンテンツは、作動222で複数の媒体ファイルにセグメント化される。各媒体ファイルは、選択されたビットレート(又は他の符号化パラメータの選択された値)に対して符号化され、作動232でサーバに格納される。例えば、媒体ファイルは、高−、中−、及び低−帯域幅接続を望ましいものとすることができる。媒体ファイルは、格納の前に暗号化することができる。接続の様々なタイプをターゲットとした媒体ファイルの符号化は、ターゲット帯域幅レベルでストリーミング体験を提供するように選択することができる。
一実施形態において、変形プレイリストは、様々な符号化レベルを示す本明細書に説明するタグによって作動242で生成される。タグは、例えば、対応する媒体プレイリストファイルへのURIを備えた各符号化レベルに対するEXT−X−STREAM−INFタグを含むことができる。
この変形プレイリストは、様々な符号化レベルのための媒体プレイリストファイルへのURIを含むことができる。従って、クライアントデバイスは、符号化レベルを示す変形プレイリストで提供される代替からターゲットビットレートを選択し、対応するプレイリストファイルを検索することができる。一実施形態において、クライアントデバイスは、再生中にビットレートを変更することができる(例えば、図9A−9Dに関して説明するように)。様々な符号化レベルを示す変形プレイリストは、作動252でサーバに格納される。作動242で変形プレイリストで参照されたプレイリストの各々を生成し、次に、作動252で格納することができる。
クライアントデバイスからの要求に応答して、サーバは、作動272で様々な符号化レベルを示す変形プレイリストを送信することができる。サーバは、作動282で選択されたビットレートに対応する変形プレイリストで指定された媒体プレイリストの1つに対する要求を受信することができる。要求に応答して、サーバは、作動292でクライアントデバイスからの要求に対応する媒体プレイリストファイルを送信する。次に、クライアントデバイスは、サーバから媒体ファイルを要求するために媒体プレイリストを使用することができる。サーバは、作動297で要求に応答して媒体ファイルをクライアントデバイスに提供する。
図3Aは、クライアントデバイスが非ストリーミングプロトコルを使用してコンテンツのストリーミングをサポートするための技術の一実施形態の流れ図である。図3Aの例は、HTTPの観点から提供されるが、しかし、他の非ストリーミングプロトコルも類似の方式で利用することができる。図3A−3Bに示す方法は、1つのクライアントデバイスによって又はいくつかの個別のクライアントデバイスによって実行することができる。例えば、これらの方法のいずれか1つの場合、単一のクライアントデバイスが、作動の全て(例えば、プレイリストファイルの要求、プレイリストファイルのURIを使用した媒体ファイルの要求、提示/出力を生成及び提供するための媒体ファイルのアセンブル)を実行することができ、又はいくつかの個別のクライアントデバイスが、作動の全部ではないが一部を実行することができる(例えば、第1のクライアントデバイスは、プレイリストファイルを要求し、プレイリストファイルのURIを使用して媒体ファイルを要求することができ、提示/出力を生成及び提供するために媒体ファイルを処理することができる第2のクライアントデバイスによって使用するためにこれらの媒体ファイルを格納することができる)。
クライアントデバイスは、作動300でサーバからプレイリストファイルを要求することができる。一実施形態において、要求は、HTTP準拠プロトコルに従って行われる。要求は、サーバに格納された初期プレイリストファイルへのURIを利用する。代替の実施形態において、他の非ストリーミングプロトコルもサポートすることができる。要求に応答して、サーバは、対応するプレイリストファイルをクライアントにネットワークを通じて送信する。上述したように、ネットワークは有線又は無線とすることができ、有線又は無線ネットワークのいずれの組合せにができる。更に、ネットワークは、データネットワーク(IEEE 802.11、IEEE 802.16など)、又はセルラー電話ネットワーク(3Gなど)とすることができる。
クライアントデバイスは、作動310でプレイリストファイルを受信することができる。プレイリストファイルは、作動320でクライアントデバイスのメモリに格納することができる。メモリは、例えば、ハードディスク、フラッシュメモリ、ランダムアクセスメモリとすることができる。一実施形態において、プレイリストファイルがプレイリストURIからロード又はリロードされる度に、クライアントは、プレイリストファイルが#EXTM3Uタグで開始していると判断するために検査し、タグがない場合は継続しない。上述したように、プレイリストファイルは、1つ又はそれよりも多くのタグ、並びに媒体ファイルへの1つ又はそれよりも多くのURIを含む。
クライアントデバイスは、作動330でプレイリストファイルのURIによって示された媒体ファイルを要求することによってオリジナルコンテンツをリアセンブルするためにプレイリストファイルを使用するアセンブラエージェントを含むことができる。一実施形態において、アセンブラエージェントは、標準的なウェブブラウザアプリケーションの一部である接続モジュールである。別の実施形態において、アセンブラエージェントは、媒体ファイルを受信しプレイリストファイルを使用して媒体ファイルをアセンブルするためにウェブブラウザと対話する独立型アプリケーションとすることができる。更に別の例として、アセンブラエージェントは、クライアントデバイスに実施される専用ハードウエア又はファームウエア構成要素とすることができる。
アセンブラは、プレイリストファイルからの媒体ファイルをURIによって示されたサーバからダウンロードさせる。プレイリストファイルがEXT−X−ENDLISTタグを含む場合、プレイリストファイルによって示されたいずれの媒体ファイルも最初に再生することができる。EXT−X−ENDLISTタグが存在しない場合、最後及び最後から2番目の媒体ファイルを除くいずれの媒体ファイルも最初に再生することができる。再生する最初の媒体ファイルが選択された状態で、プレイリストファイルにおける次の媒体ファイルが、一実施形態ではこれらがプレイリストファイルに現れる順序でロードされる(そうでなければコンテンツがばらばらに提示されている)。一実施形態において、クライアントデバイスは、媒体ファイルが要求される前に媒体ファイルをロードしようとし(更にこれらをバッファに格納し)、中断されない再生を提供しネットワーク待ち時間及び処理量における一時的な変動を補償する。
ダウンロードされた媒体ファイルは、作動340でクライアントデバイスのメモリに格納することができる。コンテンツを格納することができるメモリは、クライアントデバイスのいずれかのタイプのメモリ、例えば、ランダムアクセスメモリ、ハードディスク、又はビデオバッファとすることができる。格納デバイスは、再生を可能にするために一時的とすることができ、又は永久とすることができる。プレイリストファイルがEXT−X−ALLOW−CACHEタグを含み、その値がNOである場合、クライアントは、ダウンロードされた媒体ファイルが再生された後にダウンロードされた媒体ファイルを格納しない。プレイリストがEXT−X−ALLOW−CACHEタグを含み、その値がYESである場合、クライアントデバイスは、後の再生のために媒体ファイルを永久に格納することができる。クライアントデバイスは、プログラム開始時間をユーザに表示するためにEXT−X−PROGRAM−DATE−TIMEタグの値を使用することができる。一実施形態において、クライアントは、より良いユーザ体験を提供するために、ネットワークジッタの影響を受けないように複数の媒体ファイルをバッファに入れることができる。
一実施形態において、解読方法がAES−128である場合、AES−128CBC解読が個々の媒体ファイルに適用される。全ファイルが解読される。一実施形態において、暗号ブロック連鎖方式は媒体ファイルにわたって適用されない。上述したように、媒体ファイルのシーケンス番号を初期化ベクトルとして使用することができる。
メモリから、作動350でクライアントデバイスからのコンテンツを出力することができる。出力又は提示は、例えば、組み込み型スピーカ又はヘッドフォンを通じたオーディオ出力とすることができる。出力は、スクリーンを通じて出力される又はクライアントデバイスから投影されるビデオを含むことができる。当業技術で公知の出力のいずれのタイプも利用することができる。作動351で、クライアントデバイスは、再生又はそうでなければ提示されていなかった格納された現在のプレイリストにまだ媒体ファイルが存在するか否かを判断する。このような媒体ファイルが存在する場合(及びこれらが要求されていなかった場合)、次に、処理は作動330に戻り、1つ又はそれよりも多くの媒体ファイルが要求され処理が繰り返される。このような媒体ファイルが存在しない場合(すなわち、現在のプレイリストの全ての媒体ファイルが再生されている)、次に、処理は作動352に進み、プレイリストファイルが終了タグを含むか否かを判断する。
プレイリストが作動352で終了タグ(EXT−X−ENDLISTなど)を含む場合、プレイリストファイルによって示された媒体ファイルが再生された時に再生が終わる。終了タグがプレイリストにない場合、クライアントデバイスは、サーバから再度プレイリストを要求し、作動300に戻り、プログラムに対する更に別の又は更新されたプレイリストを取得する。
図2Bに関して更に詳しく説明するように、サーバは、補足のコンテンツ(例えば、ライブブロードキャストにおける付加的な媒体コンテンツに対応する付加的な媒体ファイル識別子)又は付加的なコンテンツ(例えば、ストリームの更に下流のコンテンツ)を導入するためにプレイリストファイルを更新することができる。補足コンテンツ又は付加的なコンテンツにアクセスするために、クライアントは、サーバから更新されたプレイリストをリロードすることができる。これは、プレイリストファイルに関連付けられる媒体コンテンツの再生中でも、それによってプレイリストファイルを動的に更新することができる機構を提供することができる。クライアントは、トリガの数に基づいてプレイリストファイルのリロードを要求することができる。終了タグの欠如は、1つのこのようなトリガである。
一実施形態において、プレイリストファイルがEXT−X−ENDLISTタグを含まない限り、クライアントデバイスは定期的にプレイリストファイルをリロードする。クライアントデバイスが初めてプレイリストファイルをロードした又は最後にロードされてからプレイリストファイルが変更されたことを見出した時に、クライアントは、プレイリストファイルを再度リロードしようとする前にある時間待つことができる。この期間は、初期最小リロード遅延と呼ぶ。これは、クライアントがプレイリストファイルのロードを開始した時間から測定される。
一実施形態において、初期最小リロード遅延は、プレイリストファイルの最後の媒体ファイルの持続時間又はターゲット持続時間の3倍のうちのいずれか小さい方である。媒体ファイル持続時間は、EXTINFタグによって指定される。クライアントがプレイリストファイルをリロードし、これが変化していないことを見出した場合、クライアントは、リトライの前にある時間待つことができる。一実施形態における最小遅延は、ターゲット持続時間の3倍又は初期最小リロード遅延の倍数のうちのいずれか小さい方である。一実施形態において、この倍数は、最初の試みに対して0.5、第2の試みに対して1.5、更に次の試みに対して3.0であるが、しかし、他の倍数を使用することもできる。
プレイリストファイルがロード又はリロードされる度に、クライアントデバイスは、ロードする次の媒体ファイルを判断するためにプレイリストファイルを調べる。ロードする最初のファイルは、上述したように最初に再生するように選択された媒体ファイルである。再生される第1の媒体ファイルがロードされプレイリストファイルがEXT−X−MEDIA−SEQUENCEタグを含まない場合、クライアントは、現在のプレイリストファイルが、本質的に見出されていたオフセットで最後にロードされた媒体ファイルのURIを含むことを検証することができ、ファイルが見出されなかった場合に再生を停止する。ロードする次の媒体ファイルは、プレイリストファイルにおける最後にロードされたURIに続く第1の媒体ファイルURIとすることができる。
再生される第1のファイルがロードされ、プレイリストファイルがEXT−X−MEDIA−SEQUENCEタグを含む場合、ロードする次の媒体ファイルは、ロードされた最後の媒体ファイルのシーケンス番号よりも大きい最低シーケンス番号を有する媒体ファイルとすることができる。プレイリストファイルが、キーファイルURIを指定するEXT−X−KEYを含む場合、クライアントデバイスは、キーファイルを取得し、キーファイルの内側のキーを使用して、別のEXT−X−KEYタグに遭遇するまでEXT−X−KEYタグに続く媒体ファイルを解読する。
一実施形態において、クライアントデバイスは、プレイリストファイルをダウンロードするために以前使用されたのと同じURIを利用する。従って、プレイリストファイルに変更が行われた場合、クライアントデバイスは、媒体ファイルを検索して媒体ファイルに基づいて出力を提供するために、更新されたプレイリストファイルを使用することができる。
プレイリストファイルの変更は、例えば、媒体ファイルへのURIの削除、新しい媒体ファイルへのURIの追加、置換媒体ファイルへのURIの置換を含むことができる。プレイリストファイルに変更が行われた時に、変更を反映するために1つ又はそれよりも多くのタグを更新することができる。例えば、媒体ファイルの変更が、プレイリストファイルによって示された媒体ファイルの再生の持続時間の変更をもたらす場合、持続時間タグを更新することができる。
図3Bは、代替ストリームの1つの形式であるクライアントデバイスがマルチビットレートを使用してコンテンツのストリーミングをサポートするための技術の一実施形態の流れ図である。図3Bの例は、HTTPの観点から提供されるが、しかし、他の非ストリーミングプロトコルも類似の方式で利用することができる。
クライアントデバイスは、作動370でプレイリストファイルを要求することができる。上述したように、プレイリストファイルは、クライアントデバイスに提供されたURIを利用して検索することができる。一実施形態において、プレイリストファイルは、異なるビットレートで同じコンテンツを提供するために媒体ファイルの変形ストリームのリストを含み、換言すると、単一のプレイリストファイルが、変形ストリームの各々の媒体ファイルに対するURIを含む。図3Bに示す例は、この実施形態を使用する。別の実施形態において、変形ストリームは、各々が異なるビットレートで同じコンテンツを提供し、クライアントに別々に提供された複数の個別のプレイリストファイルによって表すことができ、変形プレイリストは、個別のプレイリストファイルの各々に対するURIを提供することができる。それによってクライアントデバイスは、クライアント条件に基づいてビットレートを選択することができる。
プレイリストファイルは、作動375でクライアントデバイスによって検索することができる。プレイリストファイルは、作動380でクライアントデバイスメモリに格納することができる。クライアントデバイスは、現在のネットワーク接続速度に基づいて作動385で使用されるビットレートを選択することができる。媒体ファイルは、作動390で選択されたビットレートに対応するプレイリストファイルに含まれたURIを利用してサーバから要求される。検索された媒体ファイルは、クライアントデバイスメモリに格納することができる。出力が作動394で媒体ファイルを利用するクライアントデバイスによって提供され、クライアントデバイスがビットレートを変更するか否かを判断する。
一実施形態において、クライアントデバイスが、最初に最低利用可能ビットレートを選択する。媒体を再生している間、クライアントデバイスは、利用可能な帯域幅が再生のための高ビットレートの使用をサポートすることができるか否かを判断するために、利用可能な帯域幅(現在のネットワーク接続ビットレートなど)をモニタすることができる。サポートすることができる場合、クライアントデバイスは、高ビットレートを選択し、高ビットレート媒体プレイリストファイルによって示される媒体ファイルにアクセス可能である。逆もサポートすることができる。再生がより多くの帯域幅を消費する場合、クライアントデバイスは、低ビットレートを選択して低ビットレート媒体プレイリストファイルによって示される媒体ファイルにアクセス可能である。
クライアントデバイスが作動394でビットレートを変更した場合、例えば、利用可能な帯域幅における変更に応答して又はユーザ入力に応答して、クライアントデバイスは、作動385で異なるビットレートを選択することができる。一実施形態において、異なるビットレートを選択するために、クライアントデバイスは、新しく選択されたビットレートに対応するプレイリストファイルに含まれるURIの異なるリストを利用することができる。一実施形態において、クライアントデバイスは、プレイリスト内の媒体ファイルのアクセス中にビットレートを変更することができる。
ビットレートが作動394で変化しなかった場合、クライアントデバイスは、検索及び提示されなかった現在のプレイリストにまだ再生されていない媒体ファイルがあるか否かを判断する。このような媒体ファイルが存在する場合、処理は作動390に戻り、1つ又はそれよりも多くの媒体ファイルが、プレイリストのファイルに対するURIを使用して検索される。このような媒体ファイルがない(すなわち、現在のプレイリストの全ての媒体ファイルが再生されている)場合、処理は作動396に進み、ここでプレイリストが終了タグを含むか否かを判断する。含む場合、プログラムの再生が終了し処理は完了し、含まない場合、処理は作動370に戻り、クライアントデバイスは、プログラムに対するプレイリストのリロードを要求し、図3Bに提示されている方法を通じて処理が繰り返される。
図4は、サーバストリームエージェントの一実施形態のブロック図である。サーバストリームエージェント400の要素をいくつかのサーバデバイスにわたって分散させることができることが認められるであろう。例えば、第1のサーバデバイスは、セグメンタ430、インデクサ440、及びセキュリティ450を含むことができるが、ファイルサーバ460を含むことができず、第2のサーバデバイスは、ファイルサーバ450を含むことができるが、セグメンタ430、インデクサ440、及びセキュリティ450を含むことができない。この例では、第1のサーバデバイスは、プレイリスト及び媒体ファイルを準備するが、これらをクライアントデバイスに送信することはなく、1つ又はそれよりも多くの第2のサーバデバイスは、プレイリスト及び媒体ファイルを受信し、任意的に格納し、プレイリスト及び媒体ファイルをクライアントデバイスに送信することになる。サーバストリームエージェント400は、制御論理410を含み、サーバストリームエージェント400の作動を示すための論理機能制御、及びサーバストリームエージェント400の作動の指示に関連付けられるハードウエアを実施する。論理は、ハードウエア論理回路又はソフトウエアルーチン又はファームウエアとすることができる。一実施形態において、サーバストリームエージェント400は、制御論理410に命令を提供するコードシーケンス及び/又はプログラムを表す1つ又はそれよりも多くのアプリケーション412を含む。
サーバストリームエージェント400は、メモリデバイス又はデータ又は命令を格納するためのメモリリソースへのアクセスを表すメモリ414を含む。メモリ414は、サーバストリームエージェント400にローカルのメモリを含むことができ、同様に又は代替的に、サーバストリームエージェント400が存在するホストシステムのメモリを含む。サーバストリームエージェント400はまた、サーバストリームエージェント400の外部のエンティティ(電子又は人間)に関する(入力/出力インタフェース)サーバストリームエージェント400への/からのアクセスインタフェースを表す1つ又はそれよりも多くのインタフェース416を含む。
サーバストリームエージェント400は、本明細書で説明するようにリアルタイム又はリアルタイムに近いストリーミングを提供するためにサーバストリームエージェント400を有効にする1つ又はそれよりも多くの機能を表すサーバストリームエンジン420を含むことができる。図4の例は、サーバストリームエンジン420に含むことができるいくつかの構成要素を提供するが、しかし、異なる又は付加的な構成要素を含むこともできる。ストリーミング環境を提供する場合に含むことができる例の構成要素は、セグメンタ430、インデクサ440、セキュリティ450、及びファイルサーバ460を含む。これらの構成要素の各々は、他の機能を提供するための他の構成要素を更に含むことができる。本明細書で使用される構成要素は、ハードウエア、ソフトウエア、ファームウエア、又はこれらのある組合せで実施されるか否かに関わらず、ルーチン、サブシステムなどを示している。
セグメンタ430は、ウェブサーバプロトコル(HTTPなど)を使用してファイルとして送信することができる媒体ファイルに、提供されるコンテンツを分割する。例えば、セグメンタ430は、コンテンツを所定のファイルフォーマットでデータの所定の固定サイズブロックに分割することができる。
インデクサ440は、セグメンタ430によって作成された媒体ファイルのアドレス又はURIを提供する1つ又はそれよりも多くのプレイリストファイルを提供することができる。インデクサ440は、例えば、セグメンタ430によって作成された各ファイルに対応する識別子のための順序のリストによって1つ又はそれよりも多くのファイルを作成することができる。識別子は、セグメンタ430又はインデクサ440のいずれかによって作成又は割り当てることができる。インデクサ440は、媒体ファイルのアクセス及び/又は利用をサポートするためのプレイリストファイルの1つ又はそれよりも多くのタグを含むことができる。
セキュリティ450は、上述したようなセキュリティ機能(暗号化など)を提供することができる。ウェブサーバ460は、ホストシステムに格納されたファイルをリモートクライアントデバイスに提供することに関するウェブサーバ機能を提供することができる。ウェブサーバ460は、例えば、HTTP準拠プロトコルをサポートすることができる。
図5は、クライアントストリームエージェントの一実施形態のブロック図である。クライアントストリームエージェントの要素をいくつかのクライアントデバイスにわたって分散させることができることが認められるであろう。例えば、第1のクライアントデバイスは、アセンブラ530及びセキュリティ550を含むことができ、媒体ファイルの解読されたストリームを出力発生器540を含む(しかし、アセンブラ530及びセキュリティ550を含まない)第2のクライアントデバイスに提供することができる。別の例では、1次クライアントデバイスが、プレイリストを検索し、これらをプレイリストに指定された媒体ファイルを検索しこれらの媒体ファイルを提示するために出力を発生させる2次クライアントデバイスに提供することができる。クライアントストリームエージェント500は、制御論理510を含み、クライアントストリームエージェント500の作動を示すための論理的機能制御、及びクライアントストリームエージェント500の作動の指示に関連付けられたハードウエアを実施する。論理は、ハードウエア論理回路又はソフトウエアルーチン又はファームウエアとすることができる。一実施形態において、クライアントストリームエージェント500は、命令を制御論理510に提供するコードシーケンス又はプログラムを表す1つ又はそれよりも多くのアプリケーション512を含む。
クライアントストリームエージェント500は、メモリデバイス又はデータ及び/又は命令を格納するためのメモリリソースへのアクセスを表すメモリ514を含む。メモリ514は、クライアントストリームエージェント500にローカルのメモリ、並びに又は代替的に、クライアントストリームエージェント500が存在するホストシステムのメモリを含むことができる。クライアントストリームエージェント500は、クライアントストリームエージェント500の外部のエンティティ(電子又は人間)に関する(入力/出力インタフェース)クライアントストリームエージェント500間のアクセスインタフェースを表す1つ又はそれよりも多くのインタフェース516を含む。
クライアントストリームエージェント500は、本明細書で説明するようにリアルタイム又はリアルタイムに近いストリーミングを提供するためにクライアントストリームエージェント500を有効にする1つ又はそれよりも多くの機能を表すクライアントストリームエンジン520を含むことができる。図5の例は、クライアントストリームエンジン520に含むことができるいくつかの構成要素を提供するが、しかし、異なる又は付加的な構成要素を含むことができる。ストリーミング環境を提供する場合に含むことができる例示的な構成要素は、アセンブラ530、出力発生器540、及びセキュリティ550を含む。これらの構成要素の各々は、他の機能を提供するための他の構成要素を更に含むことができる。本明細書で使用される構成要素は、ハードウエア、ソフトウエア、ファームウエア、又はこれらのある組合せで実施されるか否かに関わらず、ルーチン、サブシステムなどを示している。
アセンブラ530は、サーバからウェブサーバプロトコル(HTTPなど)を通じて媒体ファイルにアクセスするためにサーバから受信したプレイリストファイルを利用することができる。一実施形態において、アセンブラ530は、プレイリストファイルのURIによって示される媒体ファイルをダウンロードさせることができる。アセンブラ530は、プレイリストファイルに含まれたタグに応答することができる。
出力発生器540は、ホストシステムにおいてオーディオ又は視覚出力(又はオーディオと視覚の両方)として受信した媒体ファイルを提供することができる。出力発生器540は、例えば、1つ又はそれよりも多くのスピーカにオーディオを出力させ、表示デバイスにビデオを出力させることができる。セキュリティ550は、上述したようなセキュリティ機能を提供することができる。
図6は、複数のタグを備えたプレイリストファイルの一実施形態を示している。図6の例示的なプレイリストは、タグの特定の数及び順序付けを含む。これは、説明の目的のためだけに提供される。一部のプレイリストファイルは、タグのより多い、少ない、又は異なる組合せを含むことができ、タグを図6に示すものとは異なる順序で構成することができる。
開始タグ610は、プレイリストファイルの開始を示すことができる。一実施形態において、開始タグ610は、#EXTM3Uタグである。持続時間タグ620は、再生リストの持続時間を示すことができる。すなわち、媒体ファイルの再生の持続時間は、再生リスト600によって示されている。一実施形態において、持続時間タグ620は、EXT−X−TARGETDURATIONタグであるが、しかし、他のタグを使用することもできる。
日付/時間タグ625は、再生リスト600によって示された媒体ファイルによって提供されるコンテンツの日付及び時間に関する情報を提供することができる。一実施形態において、日付/時間タグ625は、EXT−X−PROGRAM−DATE−TIMEタグであるが、しかし、他のタグを使用することもできる。シーケンスタグ630は、プレイリストのシーケンスにおけるプレイリストファイル600のシーケンスを示すことができる。一実施形態において、シーケンスタグ630は、EXT−X−MEDIA−SEQUENCEタグであるが、しかし、他のタグを使用することもできる。
セキュリティタグ640は、プレイリストファイル600によって示された媒体ファイルに適用されるセキュリティ及び/又は暗号化に関する情報を提供することができる。例えば、セキュリティタグ640は、媒体ファイルインジケータによって指定されたファイルを解読するための解読キーを指定することができる。一実施形態において、セキュリティタグ640は、EXT−X−KEYタグであるが、しかし、他のタグを使用することもできる。変形リストタグ645は、変形ストリームがプレイリスト600、並びに変形ストリームに関する情報(回数、ビットレートなど)によって提供されるか否かを示すことができる。一実施形態において、変形リストタグ645はEXT−X−STREAM−INFタグである。
媒体ファイルインジケータ650は、再生される媒体ファイルに関する情報を提供することができる。一実施形態において、媒体ファイルインジケータ650は、再生される複数の媒体ファイルへのURIを含む。一実施形態において、プレイリスト600のURIの順序は、媒体ファイルにアクセス及び/又は再生すべきである順序に対応する。次のプレイリストインジケータ660は、再生ファイル600の後に使用される1つ又はそれよりも多くの再生ファイルに関する情報を提供することができる。一実施形態において、次のプレイリストインジケータ660は、プレイリスト600の媒体ファイルが再生された後に使用される1つ又はそれよりも多くのプレイリストファイルへのURIを含むことができる。
メモリタグ670は、クライアントデバイスが媒体ファイルコンテンツの再生後に媒体ファイルを格納することができるか否かを及び/又はその期間を示すことができる。一実施形態において、メモリタグ670は、EXT−X−ALLOW−CACHEタグである。終了タグ680は、プレイリストファイル600が提示のための最後のプレイリストファイルであるか否かを示す。一実施形態において、終了タグ680はEXT−X−ENDLISTタグである。
以下の段落は、一実施形態によるいくつかの例示的なプレイリストファイルを含む。
単純なプレイリストファイル
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:5220,
http://media.example.com/entire.ts
#EXT-X-ENDLIST
_______________________________________________
HTTPSを使用したスライディングウィンドウプレイリスト
#EXTM3U
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:2680
#EXTINF:8,
https://priv.example.com/fileSequence2680.ts
#EXTINF:8,
https://priv.example.com/fileSequence2681.ts
#EXTINF:8,
https://priv.example.com/fileSequence2682.ts
________________________________________________
暗号化媒体ファイルを備えたプレイリストファイル
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:7794
#EXT-X-TARGETDURATION:15
#EXT-X-KEY:METHOD=AES-128,URI="
https://priv.example.com/key.php−r=52"
#EXTINF:15,
http://media.example.com/fileSequence7794.ts
#EXTINF:15,
http://media.example.com/fileSequence7795.ts
#EXTINF:15,
http://media.example.com/fileSequence7796.ts
#EXT-X-KEY:METHOD=AES-128,URI="
https://priv.example.com/key.php−r=53"
#EXTINF:15,
http://media.example.com/fileSequence7797.ts
________________________________________________
変形プレイリストファイル
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
http://example.com/hi.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"
http://example.com/audio-only.m3u8
________________________________________________
図7は、本明細書に説明するアセンブルストリームのための再生技術の一実施形態の流れ図である。一実施形態において、受信した媒体ファイルの再生は、開始、中止、繰り出しなどのためにユーザによって制御することができる。プレイリストファイルは、作動700でクライアントデバイスによって受信される。プレイリストファイルによって示された媒体ファイルは、作動710で検索される。出力が、作動720で受信した媒体ファイルに基づいて生成される。媒体ファイルに基づく出力の受信及び生成は、上述したように達成することができる。
制御入力が作動730で検出された場合、クライアントデバイスは、入力が中止を示しているか否かを作動740で判断することができる。入力が中止である場合、処理は完了し再生は中止する。入力が作動750において繰り出し又は先送り要求を示す場合、クライアントデバイスは、作動760でメモリに格納されていた以前に再生された媒体ファイルに基づいて出力を発生させることができる。これらのファイルがそれ以上キャッシュにない場合、処理は媒体ファイルを検索するように作動710に戻り処理を繰り返す。代替の実施形態において、再生は、中止入力と同様に再生を完了させることなく再生を停止する休止機能をサポートすることができる。
1つのストリームから別のストリームに遷移する方法を図9A−9Dに関して更に説明する。1つのクライアントデバイスが、これらの方法の各々を実行することができ、又はこれらの方法の各々の作動を本明細書で説明するように複数のクライアントデバイスにわたって分散させることができ、例えば、分散される場合、1つのクライアントデバイスは、変形プレイリスト及び2つの媒体プレイリストを検索し、これらを2つの媒体プレイリストによって指定された媒体ファイルを検索して検索された媒体ファイルによって提供される2つのストリーム間を切り換える別のクライアントデバイスに提供することができる。代替の実施形態において、図示の作動の順序を変更することができ、又はこれらの図に示すものよりも多いか又は少ない作動を存在させることができることが認められるであろう。本方法は、様々なストリームを選択するために変形プレイリストを使用することができる。変形プレイリストは、プログラム(スポーツイベントなど)に対する利用可能なストリームを判断するために、作動901で検索及び処理することができる。作動901は、クライアントデバイスによって実行することができる。第1のストリームは、作動903で変形プレイリストから選択することができ、次に、クライアントデバイスは、第1のストリームに対する媒体プレイリストを検索することができる。クライアントデバイスは、作動905で第1のストリームに対する媒体プレイリストを処理することができ、作動907で第1のストリームに対するネットワーク接続のビットレートを測定又はそうでなければ判断することができる。作動のシーケンスを図9Aに示すものとは異なる順序で実行することができることが理解されると考えられ、例えば、作動907は、作動903中に実行することができる等々である。作動911でクライアントデバイスは、作動907からの測定されたビットレートに基づいて変形プレイリストから代替の媒体プレイリストを選択し、この代替の媒体プレイリストは、第1のストリームの既存のビットレートより高い第2のビットレートとすることができる。これは、典型的には、代替ストリームが第1のストリームより高い解像度を有することを意味する。代替の媒体プレイリストは、現在の条件に基づいて第1のストリームに対する現在のプレイリストより良い適合(例えば、作動907で測定されたビットレート)の場合に選択することができる。作動913で、代替ストリームに対する代替の媒体プレイリストが検索及び処理される。これは、典型的には、クライアントデバイスが、提示に両方が利用可能な第1のストリーム及び代替ストリームの両方を受信及び処理することができることを意味し、一方は提示され、他方は提示の準備がされる。次に、クライアントデバイスは、作動915でストリームのバージョンを切り換えるために遷移ポイントを選択し、第1のストリームの提示を中止して代替ストリームの提示を開始する。この切り換えがどのように達成されるかの例を図9B−9Dに関して提供する。一部の実施形態において、クライアントデバイスは、切り換えを実行する前に第1のストリームの受信を中止することができる。
図9Bは、クライアントデバイスが作動921及び923で第1の媒体プレイリスト(第1のストリームなど)によって指定されたコンテンツを検索、格納、及び提示することを示し、第1のプレイリストによって指定されたコンテンツが提示され、クライアントデバイスは作動925で第2の媒体プレイリストによって指定されたコンテンツ(第2のストリームなど)を検索及び格納する。第1の媒体プレイリストから得られたコンテンツを提示している間の第2の媒体プレイリストによって指定されたコンテンツの検索及び格納(一時バッファなど)は、クライアントデバイスがプログラムの大幅な中断なしにプログラムのバージョンを切り換えられるようにするプログラムのコンテンツの時間のオーバーラップ955(図9Dに図示)を作成する。従って、プログラムのバージョン間の切り換えは、切り換えが発生したことをユーザに通知することなく(ユーザは場合によっては切り換えの後に高解像度画像を通知することができるが)又はプログラムの提示における大幅な中断なしに多くの場合に達成することができる。作動927で、クライアントデバイスは、第1の媒体プレイリストによって指定されたコンテンツから第2の媒体プレイリストによって指定されたコンテンツに切り換える遷移ポイントを判断し、遷移ポイントの例(遷移ポイント959)は、図9Dに示されている。第2の媒体プレイリストによって指定されたコンテンツは、次に、切り換えの後に作動931で示される。
図9C及び9Dに示す方法は、遷移ポイントを判断するための一実施形態を表し、この実施形態は、遷移ポイントを判断するために2つのストリーム951及び953からのオーディオサンプルにおけるパターン照合に頼る。代替の実施形態は、ビデオサンプルにおけるパターン照合を使用することができる又は遷移ポイントを判断するために2つのストリームにおけるタイムスタンプなどを使用することができることが認められるであろう。本方法は、作動941でバッファの第1の媒体プレイリストによって指定されたコンテンツ(ストリーム951など)を格納する段階を含むことができ、バッファは、コンテンツの提示のため及びパターン照合作動のために使用することもできる。ストリーム951は、オーディオサンプル951A及びビデオサンプル951Bの両方を含む。ビデオサンプルは、単一のビデオフレームを表示するために全ての必要なコンテンツを有するiフレーム又はキーフレームに頼る圧縮技術を使用することができる。ストリーム951におけるコンテンツは、時間(例えば、プログラムの開始から経過した時間)を指定するタイムスタンプを含むことができ、これらのタイムスタンプは、サンプルの各々の開始(例えば、オーディオサンプル951Aの各々の開始及びビデオサンプル951Bの各々の開始)にマーク付けすることができる。場合によっては、2つのストリーム間のタイプスタンプの比較は、これらが十分に正確でないために又は2つのストリームにおけるサンプルの境界の差のために遷移ポイントを判断する場合に有用でない場合があるが、しかし、タイムスタンプ範囲の比較は、2つのストリーム間の時間におけるオーバーラップ955が存在することを検証するために使用することができる。作動943で、クライアントデバイスは、第2の媒体プレイリストによって指定されたコンテンツをバッファに格納し、このコンテンツは、第1の媒体プレイリストから得られたコンテンツと同じプログラムのためのものであり、これもタイプスタンプを含むことができる。一実施形態において、タイプスタンプは、ストリームに存在しない場合、ストリームに対するプレイリストに追加することができ、例えば、一実施形態において、1つ又はそれよりも多くのタイプスタンプを含むID3タグを変形プレイリスト又は媒体プレイリストのようなプレイリストでエントリに追加することができる。エントリは、例えば、オーディオストリームの第1のサンプルに対するURIとすることができる。図9Dは、第2の媒体プレイリストから得られたコンテンツ953の例を示し、これは、オーディオサンプル953A及びビデオサンプル953Bを含む。作動945で、クライアントデバイスは、一実施形態では適合したオーディオセグメント(セグメント957など)の後の次の自己包含ビデオフレーム(iフレーム961など)とすることができる遷移ポイント959をオーバーラップ955から選択するために、2つのストリーム951及び953におけるオーディオサンプルにおけるパターン照合を実行することができる。iフレーム961(及びその関連のオーディオサンプル)から開始して、プログラムの提示は、第2の媒体プレイリストから得られた第2のストリームを使用する。上述の方法は、遅いから速いビットレートへの変更及び速いから遅いビットレートへの変更の両方に対して一実施形態において使用することができるが、別の実施形態において、本方法は、遅いから速いビットレートへの変更だけに使用することができ、別の方法(例えば、遷移ポイントを配置しようとはしないが可能な限り早く遅いビットレートストリームからのコンテンツを格納して提示しようとする)は、速いから遅いビットへの変更に対して使用することができる。
図10は、代替ストリームを使用してプレイリスト又は媒体コンテンツ又は両方をクライアントデバイスに提供する複数の冗長ロケーションを提供するための技術の一実施形態の流れ図である。プレイリストが上述したように代替ストリームを含む場合、代替ストリームは、帯域幅又はデバイスの代替的にだけでなく失敗フォールバックとして作動させることができる。例えば、クライアントがストリームに対するプレイリストファイルをリロードできない(例えば、404エラー又はネットワーク接続エラーのために)場合、クライアントは、代替ストリームへの切り換えを試みることができる。図10を参照すると、フェイルオーバー保護を実施するために、第1のサーバデバイス又は第1のコンテンツ配信サービスは、図2Cの説明に関して上述したように、作動1002で1つのストリーム又は複数の代替の帯域幅ストリームを作成するように構成される。作動1004で、第1のサーバデバイス又は第1のコンテンツ配信サービスは、作動1002で生成されたストリームからプレイリストファイルを生成する。第2のサーバデバイス又は第2のコンテンツ配信サービスは、作動1006で並行ストリーム又はストリームのセットを作成することができ、プレイリストも作成することができる。これらの並行ストリームは、バックアップストリームと考えることができる。次に、バックアップストリームのリストが作動1008でプレイリストファイルに追加され、それによって各帯域幅でのバックアップストリームが1次ストリームの後に列挙される。例えば、1次ストリームがサーバALPHAから来て、バックアップストリームがサーバBETAにある場合、プレイリストファイルは以下の様にすることができる。
#EXTM3U
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=20000
http://ALPA.mycompany.com/low/prog_index.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=20000
http://BETA.mycompany.com/low/prog_index.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=50000
http://ALPHA.mycompany.com/mid/prog_index.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=50000
http://BETA.mycompany.com/mid/prog_index.m3u8
バックアップストリームが、各帯域幅がその帯域幅に対する1次の後に列挙されるバックアップによってプレイリストの1次ストリームに混ぜられることに注意されたい。クライアントは、単一のバックストリームセットに制限されない。上述の例では、ALPHA及びBETAの後に、例えば、GAMMAを続けることができる。同様に、ストリームの完全な並行セットを提供する必要はない。単一の狭帯域幅ストリームを例えばバックアップサーバで提供することができる。
作動1010で、クライアントは、第1のサーバデバイス又は第1のコンテンツ配信サービスに関連付けられる第1のストリームを使用して第1のURLからプレイリストファイルをダウンロードしようとする。図11は、クライアント1102が、一実施形態に従って1つ又はそれよりも多くのURL、サーバデバイス又はコンテンツ配信サービスと双方向に通信するネットワークを示している。プレイリストファイルを作動1012において、第1のURL、サーバデバイス、又はコンテンツ配信サービスからクライアント1102に送信することができる。クライアントが、第1のURL、サーバデバイス、又はコンテンツ配信サービスからプレイリストをダウンロードできない場合(例えば、ストリームに対する索引ファイルのリロードにおけるエラーのために)、クライアントは、代替ストリームに切り換えようにとする。1つのストリームにおける失敗(索引ロード失敗など)の場合(作動1010など)、クライアントは、作動1014でネットワーク接続がサポートする最高帯域幅代替ストリームを選択する。同じ帯域幅に複数の代替が存在する場合、クライアントはプレイリストに列挙された順序でこれらの中から選択する。例えば、クライアント1102がURL1から確実にダウンロードできない場合、クライアント1102はURL2又は別のURLからダウンロードすることができ、この場合、プレイリストファイルは、代替のURLからクライアントに送信される。この機能は、サーバクラッシュ又はコンテンツディストリビュータノードゴーダウンのようないくつかのローカルの失敗の場合にも媒体がクライアントに到達することができるようなる冗長ストリームを提供する。
フェイルオーバー保護は、クライアントがプレイリスト及び媒体ファイルを検索することができる複数の冗長ロケーションを提供する機能を提供する。従って、クライアントが第1のロケーションからストリームを検索できない場合、クライアントは、2次、3次のようなロケーションからのストリームへのアクセスを試みることができる。
一実施形態において、クライアントがプレイリストを検索することができる付加的なロケーションを示すために、同じ変形プレイリストタグが同じ帯域幅によって提供されるが、冗長ロケーションの新しいURIである。クライアントは、最初に、望ましい帯域幅に関連付けられる第1のURLへのアクセスを試みることができる。第1のURLからプレイリストをダウンロードできない場合、帯域幅に対して提示された次のURLへのアクセスを試みることができ、更に可能性の全てが尽きるまで等々である。
以下の例は、2560000帯域幅に対する1冗長ロケーション及び7680000帯域幅に対する2冗長ロケーションを含む。
#EXTM3U
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=2560000
http://example.com/mid−redundant2.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=7680000
http://example.com/hi.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=7680000
http://example2.com/hi−redundant2.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=7680000
http://example3.com/hi−redundant3.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1,BANDWIDTH=65000,CODECS,=“mp4a.40.5”
http://example.com/audio−only.m3u8
この例では、ファイル名(例えば、mid−redundant2.m3u8)及び実際のURL(http://example2.com<http://example2.com/>、http://example3.com<http://example3.com/>)の両方が変化することに注意されたい。しかし、一実施形態において、冗長ロケーションは、ファイル名だけ又はウェブサイトだけの変更とすることができる。
一実施形態において、プレイリストは、サーバデバイスによって圧縮することができ、圧縮形式でクライアントデバイスに送信することができる。圧縮されたプレイリストは、通常、圧縮されていないプレイリストよりプレイリストを表す少ないビットを要求し、従って、圧縮されたプレイリストは、送信又は受信される時に、無線セルラー電話ネットワークのようなネットワークの利用可能な帯域幅を使用しない。一実施形態において、HTTP1.1規格プロトコルのような転送プロトコルに準拠するか又はこれに適合するウェブサーバによって使用される内臓圧縮技術又は機能に従ってプレイリストをウェブサーバによって圧縮することができ、このような圧縮技術又は機能の例は、デフレート又はHTTP1.1のgzip圧縮機能である。規格に基づく転送プロトコルの一部である他の規格に基づく圧縮機能を他の実施形態で使用することができる。圧縮されたプレイリストの使用は、一実施形態において、サーバデバイス及びクライアントデバイスの任意的な機能とすることができる。一実施形態において、プレイリストは、テキストコンテンツ(テキストファイルなど)とすることができ、規格に基づくウェブサーバによってデフレート又はgzipによって実質的に圧縮し次に、クライアントデバイスによって自動的に解凍することができる。gzip圧縮機能のバージョンの説明は、www.ietf.org/rfc/rfc1952.txtに見つけることができ、デフレート圧縮機能のバージョンは、www.ietf.org/rfc/rfc1951.txtに見つけることができる。クライアントデバイス上の多くのウェブサーバ及び多くのウェブブラウザが、デフレート又はgzip機能を自動的にサポートすることができる。
一実施形態において、クライアントデバイスは、更新されたプレイリストを定期的に要求することができ、例えば、クライアントデバイスは、サーバから数秒毎に(例えば、10、20、又は30秒又はある他の時間毎に)更新されたプレイリストを要求することができる。ライブゲーム中のいずれの時間にもライブゲームの開始からクライアントが視聴を開始することを可能にするライブ・オン−ゴーイング・ベースボールゲームのためのプレイリストのようなグローイングプレイリストは、グローイングプレイリストがネットワークを通じて繰返し送信される場合に圧縮の使用がネットワークの帯域幅の消費を制限することができるように十分成長することができる。
一実施形態において、クライアントデバイスは、プレイリスト(更新されたプレイリストなど)を要求する時間、サポートすることができる圧縮技術(デフレート又はgzipなど)を任意的に指定することができ、これらの技術に対するサポートは、クライアントデバイスが圧縮又は符号化コンテンツを解凍又は復号することができることを意味する。プレイリストに対するクライアントデバイスの要求は、圧縮技術の任意的な仕様と共に、ウェブサーバによって受信され、一実施形態において、プレイリストに対する圧縮技術をサポートすることを要求されないが圧縮されていないプレイリストを送信することができる。ウェブサーバは、圧縮されていないプレイリスト又はプレイリストに対するクライアントデバイスの要求に指定された圧縮技術の1つを使用して圧縮されたプレイリストをクライアントデバイスに送信することにより、クライアントデバイスの要求に応答することができる。クライアントデバイスは、本明細書で説明するようにプレイリストを受信してこれを使用し、プレイリストが圧縮されている場合、プレイリストは、クライアントデバイス上のウェブブラウザの復号器のようなクライアントデバイス上の復号器を使用して復号される。
図12A及び12Bは、付加的な媒体ファイルが追加される時(例えば、送信されている現在のプレイリストがEXT−X−ENDLISTタグを含まない時)続いて起こるプレイリストの送信用サーバタイミングモデルの一実施形態を示している。現在のプレイリストが提示の最終媒体ファイルを含まない場合、データ処理システム又はサーバは、少なくとも1つの新しい媒体ファイルURIを含むプレイリストの新しいバージョンを作ることができる。図12A及び12Bは、新しい媒体ファイルURIを備えた新しいプレイリストがプレイリストの前のバージョンに連続した方式でのクライアントデバイスへの送信に利用可能になることを保証するためのサーバタイミングモデルの一実施形態を示している。このモデルは、例えば、プレイリストに指定された媒体ファイルの持続時間を短くすることができる(例えば、数秒の長さだけ)時に使用することができる。一実施形態において、各媒体ファイルに対する最大媒体ファイル持続時間を設定することによって及び最大媒体ファイル持続時間に基づくプレイリスト持続時間の最小量を設定することにより、サーバ又は他のデータ処理システムは、各媒体ファイルが数秒の持続時間しかない時でもクライアントデバイスへのコンテンツの連続配信又は送信を保証することができる。
ここで図12Aを参照すると、エンドリストタグが作動1200で判断されるように次のプレイリストファイルに存在しない場合にプレイリストにおける各媒体ファイルの最大媒体ファイル持続時間としてターゲット持続時間を設定するように作動1201を使用することができる。作動1201は、データのストリームを複数の媒体ファイルに分割して個々のファイルとしてこれらの複数の媒体ファイルを格納するデータ処理システムによって実行することができる。ストリームを分割する処理は、プレイリストファイルに指定された各媒体ファイルがターゲット持続時間よりも短い(又はターゲット持続時間に短い時間を加えた又は除いた時間よりも短い)ことを保証するために、ターゲット持続時間(例えば、現在のプレイリストファイルのターゲット持続時間)を利用することができる。プレイリストを生成するデータ処理システムは、プレイリストファイルの持続時間が作動1203に示すように少なくともターゲット持続時間の倍数にすることができることを保証することができる。一実施形態において、倍数は、3ターゲット持続時間(又はターゲット持続時間のある他の倍数)とすることができ、プレイリスト持続時間の最小値として使用され、プレイリストの持続時間は、プレイリスト内に指定された媒体ファイルの累積持続時間によって定義される。プレイリストを生成するシステム(サーバなど)は、最小持続時間を満足させるために少なくとも十分な媒体ファイルの数を各プレイリストが指定することを保証することにより、プレイリストの最小持続時間を遵守することができ、例えば、最小持続時間が3ターゲット持続時間である場合、各プレイリストは、少なくとも3ターゲット持続時間を含むべきである。
作動1205は、適合した及び連続したストリームが、媒体ファイルを送信しているサーバのようなデータ処理システムから利用可能であることを保証するための更に別の機構として使用することができる。この更に別の機構は、プレイリストへの変更があるか否かを判断するために、クライアントデバイスによるポーリング又はプリングの量を低減することができる。作動1205で、サーバが次のプレイリストファイルを送信するための最も早い時間と最も遅れた時間が存在するようにサーバを設定することができる。最も早い時間及び最も遅れた時間を前のプレイリストファイル(新しいプレイリストファイルのすぐ前にある)が利用可能になった時間に基づく又はこれに対する時間ウィンドウとして使用することができる。最も早い時間は、例えば、すぐ前のプレイリストがサーバからの送信に最初に利用可能になった(が必ずしも送信されていない)時間に基づくことができる。最も遅れた時間は、例えば、そのすぐ前のプレイリストがサーバからの送信に最初に利用可能になった(が必ずしも送信されていない)時間に基づくことができる。例えば、一実施形態において、最も早い時間は、前のプレイリストファイルが最初に送信に利用可能になった時からターゲット持続時間(例えば、作動1201で設定されたターゲット時間)の最初の所定の百分率(例えば、1/2)より早くない時間として指定することができ、最も遅れた時間は、すぐ前のプレイリストファイルがサーバからの送信に最初に利用可能になった時からターゲット持続時間の第2の所定の百分率(例えば、1.5倍)よりも遅くならないように設定することができる。プレイリストファイルが最初に送信に利用可能になった時間は、一実施形態において、プレイリストファイルの作成の時間(サーバ上にファイルシステムによって記録された時間)とすることができる。この例は、時系列1211を含む図12Bに示されている。ターゲット持続時間1213は、前のプレイリストファイルが最初に送信に利用可能になった時間である時間1209で1つ又はそれよりも多くのサーバによって最初に利用可能になったすぐ前のプレイリストの持続時間を表すプレイリスト持続時間1215の一部分である。そのプレイリストに指定された媒体ファイルは、時間1209の近くでその送信を開始することができる。図12Bに示すサーバタイミングモデルに従ってサーバは、時間1209の後のターゲット時間の1/2である最も早い時間1217まで次のプレイリストファイルを送信すべきではなく、サーバは、図12Bに示す例では時間1209の後の1及び1.5倍ターゲット持続時間に指定されていた時間1219よりもいくらか遅く次のプレイリストファイルを利用可能にすべきではない。このサーバタイミングモデルは、プレイリストに指定された媒体ファイルを検索するのに十分な時間をクライアントデバイスに提供し、次に、再生中のコンテンツの提示を中断することなく一貫して及び連続してこれらの媒体ファイルを提示するために、プレイリストファイルがクライアントデバイスに利用可能であることを保証するように使用することができる。一実施形態において、これらのサーバタイミングモデルは、コンテンツがライブイベントの送信である時に使用することができ、ライブイベントからのデータのストリームは、複数の媒体ファイルに分割され、次に、これらの複数の媒体ファイルは、ライブイベントに対してリアルタイムに近い時間でベースボールゲームのようなライブイベントのデータのストリームからこれらが分割された後直ちに複数の媒体ファイルを受信するクライアントデバイスに送信される。
図13は、特にクライアントデバイスが実質的にリアルタイムでライブイベントを提示している時に、及びクライアントデバイスがライブイベントの現在の終わりに近い(時間的に最も新しい)コンテンツを提示している時に、クライアントデバイスでの再生における停止を防ぐために使用することができる方法の実施形態を示している。例えば、ライブイベントがベースボールゲームである場合、クライアントデバイスのユーザは、ゲームの最初からゲームを見始めるのではなくゲームの最新のイベントだけを見ることを好む場合がある。ユーザが進行中のゲームの最新イベントだけを見たい場合、ユーザは、利用可能な媒体ストリームの終わりから最後の10又は15秒で開始するポイントから始まるように再生の設定を求めることができる。ネットワークにおける問題又は遅延は、突然データを利用できなくすることがあり、新しいデータが利用できなくなることがあり、従って、非常に短い時間で、クライアントデバイスは、ユーザがこのモードで作動するようにクライアントデバイスを設定した時に提示するコンテンツを使い果たすことがある。図13の方法は、現在のプレイリストファイルの終わりの前の少なくともある時間(例えば、30秒)である開始ポイントで開始するように再生が望ましい規則をクライアントデバイスで実施することによってこのハプニングの機会を軽減するために利用することができる。例えば、プレイリストファイルがその中に指定された5媒体ファイルを有する場合(各媒体ファイルは10秒の長さである)、この規則の1つの実施は、プレイリストに指定された5媒体ファイルのシーケンスにおける第3の媒体ファイルよりも遅くない開始ポイントを強制することとすることができる。ここで図13を参照すると、作動1301は、エンドリストタグ又はマーカがプレイリストに存在するか否かを判断するために使用することができる。このようなエンドリストタグが存在する場合、図13の方法は、新しいコンテンツがプレイリストに追加されないように中止することができ、それによって一実施形態において作動1303で規則を実施する必要はない。他方、プレイリストにエンドリストタグが存在しない場合、プレイリストファイルが終わる前の少なくともある時間に開始ポイントを設定するように要求する規則をクライアントデバイスで実施することができる。ある時間は、媒体ファイルのターゲット持続時間に基づいて指定することができる。例えば、一実施形態において、クライアントデバイスは、プレイリストファイルの終わりから3より多いターゲット持続時間である媒体ファイルから開始するように要求することができる。
本発明の別の態様は、2つのプレイリストからのストリーム(例えば、2つの変形ストリーム)間を切り換える時又は媒体ファイルの2つのセット間の他の切り換えの時に使用することができる方法に関する。2つの異なるプレイリストからのストリーム間を切り換える方法の例は、図9A、9B、9C、及び9Dに関して提供される。本方法では、ストリーム間の切り換え又は遷移がシームレスになるように一貫した及び連続した再生を保証するために、2つのストリーム間の時間のオーバーラップを使用することができる。図9Dに示すように、オーバーラップ955は、両方のストリームからの媒体コンテンツがクライアントデバイスに格納され更にクライアントデバイスで再生することができる時間を表し、それによって2つのストリーム間のシームレスな切り換えを可能にする。一実施形態において、オーバーラップは、決して変化せず、クライアントデバイス内で設定された最小数とすることができる。この実施形態は、確実に機能することができるが、オーバーラップが不要に長すぎる時がある場合がある。換言すると、デバイスが遷移の準備をしているとしてもオーバーラップが切り換え又は遷移が起こるのを阻止することがある。例えば、低解像度から高解像度に切り換える時に、不要に長いオーバーラップは、高解像度提示が既に利用可能であり、提示の準備ができている時間にユーザに低解像度提示を見ることを強いる場合がある。高速接続は、例えば、低速接続又は接続のタイプに必要なオーバーラップよりも短くすることができるオーバーラップを迅速に開発する機能を提供することができる。図14Aによる実施形態において、クライアントデバイスが、接続速度又は接続タイプに適応することができ、接続速度又は接続タイプに基づいて望ましい最小オーバーラップを修正することができる。例えば、接続速度又はタイプが速い場合、低接続速度又は接続タイプに対して望ましい最小オーバーラップに対して最小オーバーラップを低減することができる。条件が変化した(例えば、クライアントデバイスが3G接続を失い2G又は遅い接続に頼らなければならない)時に、次に、最小オーバーラップを変更することができる。従って、クライアントデバイスは、接続速度又はタイプに基づいて最小オーバーラップに適応することができる。ここで図14Aを参照すると、作動1401で、クライアントデバイスは、接続の速度又はタイプを判断することができる。図9Dを参照すると、クライアントデバイスが第1のプレイリストからのストリームを受信中に、第2のプレイリストからのデータの第2のストリームは、受信されているデータの新しいソースであることを見ることができる。この時に、クライアントデバイスは、作動1403で現在の接続速度又は接続タイプに基づいて望ましいオーバーラップの最小量を判断するために、接続の速度又は接続のタイプを判断することができる。条件が変化した時に、この最小オーバーラップは、セルラー電話タワー、WiFi基地局などへの無線接続のような変化する条件に基づいて適応させることができる。クライアントデバイスが無線セルラー電話ネットワーク又は他のデータネットワーク上で移動している時にこれは特に有利とすることができる。現在の条件に対する最小オーバーラップが存在すると設定した後、次に、クライアントデバイスは、作動1405で、第1のプレイリスト又は古いソースからのストリームから第2のプレイリストからのストリームとすることができる新しいソースへ切り換える又は遷移することができる。この遷移の例は、図9A−9Dに関連付けられる説明を用いて提供される。
図14B、14C、及び14Dは、2つのストリーム間のオーバーラップ(図9A−9Dと共に説明及び提示されたオーバーラップ又は図14Aと共に説明したオーバーラップ)の別の態様を示している。図14B、14C、及び14Dに示す方法は、適応的に得られるオーバーラップによって実施することができ(図14Aに関して説明する)、又は本方法は、変化しない固定オーバーラップと共に使用することができる。図14B−14Dに提示されている方法は、「古いストリーム」1410からの媒体ファイルのダウンロードによって開始することができる(例えば、「古いストリーム」1410は新しいストリーム1414に対する将来のダウンロードの第2の速度より遅いビットレートである第1の速度でダウンロードされた低解像度ビデオとすることができる)。古いストリーム1410は、ハッシュマーカ1411によって示される通りにダウンロードされ、現在、クライアントデバイス上で再生ポイント(再生ヘッド位置など)1412でユーザに提示されており、現在の再生ポイント1412を超えた古いストリーム1410における既にダウンロードされたコンテンツは、接続が失敗した場合に利用可能であるバッファに入れられたコンテンツである。次に、クライアントデバイスは、新しいストリーム1414に対するプレイリストファイルを読取り、これらのブロックのコンテンツをダウンロードする前でも、ブロック1416及び1415のようなコンテンツ「ブロック」をプレイリストファイルから判断することができ、例えば、新しいストリームに対するプレイリストファイルは、少なくとも実質的に古いストリーム1410に対するコンテンツブロック1416及び1415の時間のロケーションを示すことができる。この判断により、クライアントデバイスは、ブロック1415に対する1つ又はそれよりも多くの媒体ファイルを要求及び検索することによって新しいストリーム1414に対する第1のブロック1415のダウンロードを保守的に判断することができ、図14Cは、そのダウンロードの結果を示している(ブロック1415Aは、このブロックがダウンロードされたことを示すためのハッシュマークを有する)。再生位置は、時間的に新しいロケーション(古いストリーム1410の最も左のブロック内にまだある)に進行している。この場合、ブロック1415のダウンロードは、再生位置が古いストリーム1410のその最も左のブロックに残らない程十分速かったものである。ブロック1415は、再生がブロック1415A近くで少なくとも切り換えることができるようにダウンロードが長くかかった場合に保守的に選択される。図14Cに示すポイントで、クライアントデバイスは、ブロック1415Aによって提供されたオーバーラップと再生の現在のポイント(図14Cの1412に示す)間にどのくらいの時間が残っているかを検査することができる。接続速度が与えられて十分な時間が存在する場合、クライアントデバイスは、現在のオーバーラップの前のブロックであるブロック又はセグメント1416をダウンロードすることができ、次に、クライアントデバイスは、ダウンロードされたブロック1416A(ハッシュマークによって示された通りにダウンロードされた後の図14Dに示されている)によって提供されたオーバーラップと再生の現在のポイント(図14Dの1412に示す)との間にどのくらいの時間が残っているかを判断するために検査を繰り返すことができる。図14Dに示す例の場合のように、1416Aのダウンロードが即座に起こった場合、クライアントデバイスは、オーバーラップのポイントを時間的に後方に移動することができ、ストリーム間の切り換えに必要とされる時間を低減し(及び従ってブロック1416A内の切り換えを可能にする)、他方、切り換えがブロック1416A内で発生できないようなダウンロード1416Aにおける遅延が存在する場合、クライアントデバイスは、ブロック1415A内で切り換えを起こすために使用することができるオーバーラップとしてブロック1415Aを使用することができる。
一実施形態において、2つのストリーム間を切り換える時(図9A−9D及び14A−14Dに示す例など)、クライアントデバイスは、新しいストリーム(ストリーム1414など)への切り換えが完了するか又は切り換えが最小時間に新しいストリームに安定して作動するまで、古いストリーム(ストリーム1410など)の格納(廃棄ではなく)を続けることができる。
本発明の別の態様は、画像の解像度を定義する属性を利用することができる。この属性により、クライアントデバイスは、解像度を切り換えるべきかでないか又はそうでなければ属性に基づいてストリーム間で切り換えるべきかを判断することができる。例えば、クライアントデバイスは、表示することができる最大解像度を既に再生していること、及びデータネットワークを通じてデバイスに利用可能にすることができる高解像度をダウンロードする場合にポイントがないことを判断することができる。
図15は、このような属性を利用するための一実施形態における方法の例を示している。作動1501で、クライアントデバイスによってプレイリストファイルを受信することができ、クライアントデバイスは、作動1503で、クライアントデバイスに利用可能な画像の解像度を定義する属性がプレイリストファイルに存在することをプレイリストファイルから判断することができる。その属性に基づいて、クライアントデバイスは、作動1505で、別のプレイリストファイルを検索するか又はその属性に関連付けられる媒体ファイルを検索するか否かを判断することができる。解像度属性を提供することにより、クライアントデバイスは、プレイリストのデータを処理する方法を知的に判断することができる。更に、クライアントデバイスは、不要なダウンロードを阻止することができるデータの検索に関する判断を実行することができ、これは、ネットワークにおけるデータトラフィックの量を最小にすることができる。
本発明の実施形態により、システムは、日付及び時間に基づいてコンテンツを検索することができる。例えば、ユーザは、2009年4月9日午後5時頃のホームランヒットを見ることを要求することができ、又は日付及び大体の時間に別のイベントを見ることを要求することができる。本発明の実施形態は、タイムスタンピングにより、対応する媒体ファイルの開始に関連付けられるEXT−X−PROGRAM−DATE−TIMEタグの使用を通じてこの機能を提供することができ、タグは、プレイリストファイルのその媒体ファイルの前に現れるタグを有することによってその対応する媒体ファイルに関連付けることができる。サーバのようなシステムは、望ましい媒体ファイルを見出すためにクライアントデバイスによって検索(例えば、ダウンロード)することができ日付及び時間を探すために使用することができる1つ又はそれよりも多くのプレイリストを格納することができ、代替的に、クライアントデバイスは、日付及び時間検索要求に適合する1つ又はそれよりも多くの媒体ファイルを識別するために、1つ又はそれよりも多くのプレイリストを検索するように(例えば、日付及び時間検索要求を通じて)サーバに要求することができ、更に、サーバは、1つ又はそれよりも多くの媒体ファイルを識別することによって応答することができる。一実施形態において、タグは、媒体ファイルの実質的に正確な開始を示し、媒体ファイル内のタイムスタンプを時間的により細かい細粒度を有する再生ポイントを見つけるために使用することができる。例えば、タグのタイプスタンプは、2009年4月9日の午後5時3分に媒体ファイルが始まったことを示すことができ、媒体ファイル内のタイムスタンプ(又は時間の他のインジケータ)は、午後5時3分後の分又は秒のような区分で時間を指定することができ、それによってデバイスは、例えば、午後5時6分又は午後5時5分30秒で(再生開始ポイントの選択を通じて)再生を開始することができる。
図16Aは、タイムスタンプタグを使用してプレイリストファイルを作成するための一実施形態による方法を示す流れ図を示している。本方法は、ソフトウエア、ハードウエア、ファームウエア、又は上述のいずれかの組合せを含む処理論理によって実施されるサーバによって実行することができる。一部の例では、サーバは、MLBのような媒体プロバイダによって提供される。
ボックス1610で、処理論理は、タイムスタンプタグを作成し、タイムスタンプタグの各々を1つの媒体ファイルに関連付ける。タイムスタンプタグのタイムスタンプは、関連付けられた媒体ファイルの開始日付及び時間を示す。タイムスタンプタグの一部の実施形態の詳細は上記に説明している。
ボックス1620で、処理論理は、1つ又はそれよりも多くのタイムスタンプタグ(例えば、EXT−X−PROGRAM−DATE−TIMEタグ)を備えたプレイリストファイルを作成し、タグの各々は、特定の媒体ファイルに関連付けられる。媒体ファイル自体が同様に内部タイムスタンプを有することに注意されたい。ボックス1630で、処理論理は、プレイリストを配信することができ、それによってタイムスタンプタグの日付及び時間を使用した日付及び時間毎の検索にプレイリストファイルを利用することができる。一部の実施形態において、プレイリストは、リポジトリに格納され、リポジトリからクライアントデバイスはプレイリストをダウンロードすることができる。
図16Bは、タイムスタンプタグを備えた作成されたプレイリストファイルを使用するための一実施形態による方法を示す流れ図を示している。本方法は、ソフトウエア、ハードウエア、ファームウエア、又は上述のいずれかの組合せを含む処理論理によって実施されるクライアントデバイスによって実行することができる。クライアントデバイスは、媒体にアクセス及び再生するために、プレイリストファイルに関連付けられた媒体の個々の消費者、加入者、又は視聴者によって使用することができる。
ブロック1650で、処理論理は、特定の日付及び時間に開始するプログラムのセグメントに対するユーザ要求を受信する。例えば、ユーザは、野球ゲーム全体の代わりに、2010年4月6日の午後8時15分に始まる野球ゲームの第4のイニングを要求することができる。ユーザ要求に応答して、処理論理は、ブロック1652でプログラムに関連付けられる1つ又はそれよりも多くのプレイリストファイルを媒体サーバからダウンロードする。ブロック1654で、処理論理は、要求されたセグメントの日付及び時間に最も近い日付及び時間に対するプレイリストファイル内部のタイムスタンプタグの時間及び日付を使用してダウンロードされたプレイリストファイルを検索する。次に、処理論理は、ブロック1656で要求されたセグメントの日付及び時間からその日付及び時間を差し引く。これは、持続時間を生成する。次に、処理論理は、処理論理がブロック1657で日付スタンプされた媒体ファイルの後のその持続時間に近いターゲット媒体ファイルを配置するまで、プレイリストファイルの次の媒体ファイル持続時間を前方に進む。次に、処理論理は、要求されたセグメントを含むファイルに関して確実に推測された場合、ブロック1658でこのターゲット媒体ファイルをダウンロードする。
一部の実施形態において、日付スタンプされた媒体ファイル及びターゲット媒体ファイル間の全ての媒体ファイルは、単一の符号化の一部であり、すなわち、これらの間に不連続のタグはない。これらがある場合、処理論理は、正確な持続時間を得るためにターゲットファイルにおける媒体ファイルタイムスタンプから日付スタンプされたファイルにおける媒体ファイルタイムスタンプを差し引くことができ、これは、要求された日付及び時間の正確な配置ししを可能にする。
プレイリストファイルにおけるタイムスタンプタグの日付及び時間を使用して、処理論理は、要求されたセグメントを見出すために媒体ファイルを検索するために、全プログラムの全ての媒体ファイルをダウンロードする必要はない。ユーザが全プログラムを要求しない時にクライアントデバイスは全プログラムの全ての媒体ファイルをダウンロードする必要がないので、帯域幅における大幅な節約を達成することができる。更に、多くの典型的な媒体ファイルは任意のタイムスタンプだけを含み、これは、ゼロで始まることが多い。従って、上述のタイムスタンプタグの日付及び時間は、媒体ファイルの任意のタイムスタンプを現実の日付及び/又は時間に関連付けることができる。タイプスタンプタグを使用して、クライアントデバイスは、各媒体ファイルを走査するより実質的に特定の日付及び/又は時間を含むプレイリスト要素を配置することができる。
本発明の一実施形態は、ID3フォーマットの媒体ストリームへのタイムメタデータの挿入を可能にする。媒体ストリームは、所定のフォーマットで符号化されたビデオ及び/又はオーディオデータを含むことができる。例えば、媒体ストリームは、国際規格ISO/IEC13818であるムービング・ピクチャ・エキスパート・グループ(MPEG)によって開発されたMPEG−2で符号化されたビデオ及びオーディオデータを含むことができる。大まかに、メタデータは、媒体ストリームにおけるデータの情報、及び特定の時間(例えば、ターゲットが得点された時間)に関連付けられるメタデータを示す時間付きメタデータを含む。時間付きメタデータは時間の経過時に変化する場合があることに注意されたい。時間付きメタデータは、ID3フォーマットのようなメタデータを格納するための所定のフォーマットで媒体ストリームに挿入することができる。一部の実施形態において、ビデオデータをフレームのシーケンスに分割することができる。ビデオデータの時間メタデータは、フレームのシーケンスに関連付けられるコンテナに分割することができる。各コンテナは、対応するフレームの時間メタデータ及び対応するフレームに関連付けられる時間の両方を格納することができる。代替的に、各コンテナは、対応するフレームの時間メタデータ及び対応するフレームのフレーム数の両方を格納することができる。一部の実施形態において、フレームの時間メタデータは、フレームの所定の情報のセットを含むことができる。例えば、時間メタデータは、ビデオデータの対応するフレームが記録されたロケーションのロケーション情報(全地球測位システム(GPS)データなど)を含むことができる。
図16C、16D、及び16Eは、ストリーミングコンテンツを指定するURLを送信することによってストリーミングコンテンツを要求するクライアントデバイスのような受信機にバッファに入れられたストリーミングコンテンツの再生を制御するために時間メタデータ又は他の機構を使用することができる実施形態の例を示している。これらのURLは、本明細書に説明する1つ又はそれよりも多くのプレイリストファイルに含むことができる。
図16Cは、表示デバイス1660(又はその表示デバイスの一部分)に提示することができるユーザインタフェース(UI)を示している。時間に基づくライブスポーツイベント又は番組又は他のビデオコンテンツのようなコンテンツ1661は、一実施形態では2つの時系列1662及び1664と共に提示されている。時系列1664は、コンテンツの時間の全ての長さ(90分番組のような固定された時間、又は野球の試合のようなはっきり決まっていない時間のいずれかとすることができる)を示している。インジケータ1667は、全コンテンツ内の現在の再生位置を示すために提示することができ、時系列の長さに対する時系列1666上のインジケータ1667の位置は、その現在の再生位置を示す。例えば、インジケータ1667が左の終点と右の終点の中間にある場合、現在の再生位置は、既存のコンテンツの約半分である。時系列1666は、後退制御1668、中断制御1669、及び早送り制御1670のような他のUI制御に関連付けることができる。後退制御1668は、選択された時に、現在の再生時間位置に戻ることができる(例えば、30秒戻ることができる)。中断制御1669は、選択された時に、受信機での再生を停止することができ、早送り制御1670は、選択された時に、現在の再生位置を最も新しい現在の(ライブ又はライブに近い)コンテンツに移動することができる。一実施形態において、両方の時系列1666及び1662は、パネルの下に提示されているストリーミングコンテンツの上に重なる半透明又は半透過性のパネルに同時に存在させることができる。
時系列1662は、一実施形態において、受信機でのバッファに入れられたコンテンツの量の時間での長さを表している。受信機は、本明細書で説明するようにストリーミングコンテンツをバッファに入れることができ、データ通信速度が遅くなる又はストリーミングコンテンツのデータ通信が中断された場合でも、常にストリーミングコンテンツが再生されるようにする。図16Cに示す例では、ストリーミングコンテンツの総合的に4分30秒が受信機で受信及びバッファに入れられ、この合計時間が、マーカ1663(3分51秒)及びマーカ1665(39秒)から得られ、これらのマーカは、現在の再生位置が最も新しく受信したコンテンツ(本明細書で説明するようにライブ又はリアルタイムに近いライブとすることができる)から39秒であることを示している。一実施形態において、バッファに入れられたコンテンツ内の現在の再生位置は、例えば、時系列1662に沿ってインジケータ1664を選択及び移動することによって変更することができる。これは、例えば、指でインジケータ1662に触れることによって又はマウスを通じてカーソルを制御することにより、又は他の公知のユーザインタフェース技術を通じて実行することができる。図16Dは、インジケータ1662を移動した結果の例を示しており(バッファに入れられたコンテンツの中間ポイント)、それによってコンテンツの提示は、最も新しく受信した及びバッファに入れられたコンテンツの前の2分15秒(時系列の右の終点によって表される)である再生ポイントに現在設定される。
図16Eは、図16C及び16Dに示すユーザインタフェースを使用するための一実施形態の方法の例を示している。受信機のようなデータ処理システムは、作動1672で時系列1666のような時系列を表示又はそうでなければ提示することができ、これは、ストリーミングプログラムの現在の長さを表し、制御1668、1669、及び1670のようなUI制御を表示することができる。更に、このシステムは、作動1673で、バッファに入れられたコンテンツ内の現在の再生位置を示す時系列1662のような別の時系列を同時に表示することができる。一実施形態において、時系列は、現在バッファに入れられているコンテンツの合計の時間の長さを表すことができる時系列上のバッファコンテンツにおける現在の再生位置のインジケータを示すことができる。受信機は、ストリーミングコンテンツの提示を変更するために、1つ又はそれよりも多くのUI制御上のユーザ入力に作動1674で応答することができる。例えば、ユーザが時系列1662に沿ってインジケータ1664を移動した場合、ユーザは、バッファに入れられたコンテンツ内の現在の再生位置を変更することができ、図16C及び16Dに示す例は、現在の再生位置が最も新しく受信したコンテンツ(リアルタイムに近い「ライブ」ストリームとすることができる)の前の数秒から最も新しいコンテンツの前の数分に変更することができることを示している。図16C及び16Dの例では、ユーザは、実際には、バッファに入れられたコンテンツ内の早いポイントに再生を繰り出しており、バッファに入れられたコンテンツを再生することができ、この繰り出しは、コンテンツの時系列1666のような全ての現在の時系列とは別の時系列で制御することができる。
本発明の一実施形態において、媒体ファイルの処理(例えば、プレイリストの検索及びプレイリストに指定された媒体ファイルの検索及び媒体ファイルにおけるコンテンツの復号)は、媒体を提示し提示される媒体を制御するユーザインタフェースとは別に行うことができる。例えば、ライブイベント(例えば、野球の試合を見るためのメジャーリーグベースボール(MLB)アプリケーションなど)又は他のストリームを見るためのアプリケーションのようなユーザアプリケーションは、提示を表示及び制御する(媒体ファイルの選択を受信する)ためのユーザインタフェースを提供することができ、同時に別のソフトウエア処理(例えば、「メディアサーブド」と呼ぶことができる媒体をサービス提供するためのデーモンのような媒体をサービス提供するソフトウエア処理)は、プレイリストを検索して媒体ファイルを検索及び復号することができる。場合によっては、媒体ファイルを暗号化することができ、暗号化は、ユーザアプリケーション(MLBアプリケーションなど)によって制御することができ、例えば、ユーザアプリケーションは、クライアント証明書(例えば、認証及びトラストの連鎖、及び取消可能性を提供するためのX.509証明書)を媒体のコンテンツを解読するために使用することができるキーをダウンロードするためにHTTPセキュアソケット層(SSL)接続が行われた時のサーバ問題に回答するために使用することができるこれらのキーチェーンに(永続的又はメモリのみのいずれかで)インストールすることができる。他の場合、プレイリストは、ユーザアプリケーション又はユーザアプリケーションと対話するサーバによって使用されるカスタムURL方式を使用する1つ又はそれよりも多くのキーのためのURLを含むことができ、この場合、ユーザアプリケーションは、キー(新しいキーなど)を取得するために起動することができるこれらのカスタムURL方式のためのURLプロトコルハンドラを登録することができ、それによってユーザアプリケーションは、帯域外(例えば、これらのアプリケーションバイナリで隠された)キーをトランスポートし、又はプライベートプロトコルを使用するサーバからキーを取得することができる。
図17は、媒体サービスデーモンがユーザアプリケーションと対話することを可能にするためのソフトウエアアーキテクチャの一実施形態を示している。アーキテクチャは、媒体サービスデーモン(「メディアサーブド」)1710及び例示的なユーザアプリケーション、イベント媒体プロバイダ(EMP)アプリケーション1720を含み、これらは、例えば、スマートフォン、携帯情報端末、デスクトップコンピュータ、ラップトップコンピュータ、タブレットデバイスのようなクライアントデバイスで実施される処理において実行可能である。クライアントデバイスの一実施形態は、図8に示す電子システム800を使用して実施することができる。一部の実施形態において、メディアサーブド1710及びEMPアプリケーション1720は両方とも、メモリ制御、メモリスペース、メモリ割り当て、ファイルシステム制御、及びネットワーク制御に関して同じ特権を共有する。従って、メディアサーブド1710は、EMPアプリケーション1720がアクセス可能なデータにアクセスすることができる。同様に、メディアサーブド1710は、EMPアプリケーション1720がアクセス不能であるデータにはアクセスすることができない。
一部の実施形態において、EMPアプリケーション1720は、ネットワーキングスタック1723にアクセスするためのカスタマイズ化ソフトウエアスタックであるコア媒体スタック1721を更に含み、コア媒体スタック1721は、URLプロトコルハンドラ、EMPハンドラ1725にアクセスする。EMPアプリケーション1720は、1つ又はそれよりも多くのキーを取得するために起動することができるカスタムURL方式のためのEMPハンドラ1725を登録することができる。従って、EMPアプリケーション1720は、帯域外(例えば、アプリケーションバイナリに隠されている)キーをトランスポートすることができる。
一般的に、メディアサーブド1710及びEMPアプリケーション1720は、本例ではEMPであるコンテンツプロバイダからライブストリーミングコンテンツのための媒体ファイルをダウンロード及び再生するために互いに対話することができる。再生は、クライアントデバイス上のメディアサーブド1710で実行することができる。一部の実施形態において、メディアサーブド1710は、媒体ファイルの解読のためのキーをダウンロードすることができ、これが失敗した場合、メディアサーブド1710は、本例ではEMPサーバ1730であるコンテンツプロバイダサーバからキーをダウンロードするようにEMPアプリケーション1720に要求することができる。クライアントデバイスで実施されるEMPアプリケーション1720は、1つ又はそれよりも多くのキーを取得するために署名することができる。通常、EMPアプリケーション1720は、媒体ファイルをダウンロードする前に署名及びキーを取得しておくことができる。メディアサーブド1710とEMPアプリケーション1720の間の対話の一部の実施形態の詳細は、本概念を更に示すために以下に説明する。
図17を参照すると、EMPアプリケーション1720は、少なくともURL及びキーを備えたプレイリストをメディアサーブド1710に送信する(1)。キーを使用して、メディアサーブド1710は、URLでEMPによって提供される媒体ソースへのアクセス及び媒体ソースからプレイリストに指定された媒体ファイルのダウンロードを試みる。媒体ファイルは、媒体ファイルのコンテンツの許可されない視聴を防ぐために符号化又は暗号化することができる。メディアサーブド1710が媒体ファイルのダウンロードに失敗した場合、又はダウンロードされた媒体ファイルの復号又は解読に失敗した場合(2)、メディアサーブド1710は、失敗をEMPアプリケーション1720に報告する(3)。
メディアサーブド1710からの失敗報告に応答して、EMPアプリケーション1720は、新しいキーを要求するためネットワーキングスタック1723にアクセスするためにそのコア媒体スタック1721を使用し(4)、コア媒体スタック1721が、新しいキーのためのEMPハンドラ1725にアクセスする(5)。EMPハンドラ1725は、EMPサーバ1730から新しいキーを要求するために、ネットワーク(インターネットなど)を通じてEMPサーバ1730に接続する(6)。要求に応答して、EMPサーバ1730は新しいキーをEMPハンドラに送信する(7)。次に、EMPハンドラ1725は、新しいキーをコア媒体スタック1721に通し(8)、コア媒体スタック1721が、次に、新しいキーをメディアサーブド1710に通す(9)。
メディアサーブド1710がコア媒体スタック1721から新しいキーを受信した時に、メディアサーブド1710は、新しいキーを使用して再度媒体ファイルをダウンロードし新しいキーを使用してダウンロードされた媒体ファイルの復号を試みることができる(10)。代替的に、媒体ファイルが以前にダウンロードに成功しているが、メディアサーブド1710が媒体ファイルの解読に失敗した場合、メディアサーブド1710は、新しいキーを使用して以前にダウンロードされた媒体ファイルの解読を試みることができる。メディアサーブド1710が新しいキーを使用して媒体ファイルのダウンロード及び復号明細書に成功した場合、EMPアプリケーション1720は、クライアントデバイスに復号された媒体ファイルを提示することができる。
本明細書に説明する一実施形態において、プレイリストファイルは、プレイリストファイルによって提供されるコンテンツのタイプを示すことができる。コンテンツのタイプは、プレイリストファイルのタイプを定義することができ、プレイリストファイルのタイプは、プレイリストファイルにおけるタグのパラメータで指定することができる。一実施形態において、タグは、#EXT−X−PLAYLIST−TYPE:[VOD|LIVE|EVENT]の形式を取ることができる。このタグは、VOD、又はLIVE、又はEVENTの1つ又は1つだけを指定することができる。「VOD」は、プレイリストファイルがビデオ・オン・デマンド(VOD)コンテンツのためのものであることを示すことができ、「LIVE」は、プレイリストファイルがライブコンテンツのためのものであることを示すことができ、はっきりしない終了時間及びはっきりしない開始時間を有することができ、媒体ファイルがクライアントデバイスでのビデオのディスプレイを通じた再生のような提示のために媒体ファイルを受信したのと実質的に同時に発生させることができる。「EVENT」は、プレイリストファイルが、バスケットボールの試合又は野球の試合のようなはっきりしない終了時間を有するが明確に固定された開始時間を有することができるイベントのためのものであることを示し、媒体ファイルがクライアントデバイスでの提示のために受信したのと実質的に同時に発生させることができる。このようなタイプタグを備えたプレイリストファイルは、本明細書に説明する他のプレイリストファイルと同じとすることができ、プレイリストファイルによって示された順序で、プレイリストを受信した後のクライアントデバイスによって検索することができる複数の媒体ファイルを示すユニバーサルリソースインジケータ(URI)を含むことができる。プレイリストファイルは、プレイリストファイルの複数の媒体ファイルの再生に関連するパラメータ(VOD又はLIVEなど)を有する#EXT−X−PLAYLIST−TYPEタグのような複数のタグを含むことができる。プレイリストのタイプを指定するこのタイプタグを有するプレイリストファイルは、本発明の開示に説明する他のプレイリストファイルと同じとすることができる。
プレイリストファイルにおける#EXT−X−PLAYLIST−TYPEのようなタイプタグの存在は、プレイリストが、コンテンツのタイプに矛盾しない作動の方式によることを実質的に知らせ、それによってクライアントデバイスは、プレイリスト又はコンテンツのタイプに対して最適化することができる方式でプレイリストを処理することができる。クライアントデバイスは、VOD又はLIVE又はEVENTのようなプレイリストタイプインジケータの存在を検査することができ、プレイリストタイプインジケータによる最適方式でプレイリストを処理することができる。
例えば、プレイリストタイプインジケータが「VOD」である時に、ビデオ・オン・デマンド提示のためのプレイリストが変化せず、従って、プレイリストファイルの更新を要求する必要がないと仮定することができるので、プレイリストは、プレイリストファイルを更新しないようにクライアントデバイスを構成させることができる。従って、この状況では、クライアントデバイスは、プレイリストファイルの更新を要求しないように構成されることになる。更にプレイリストファイルがプレイリストタイプインジケータによって指定されるように「VOD」タイプである時に、同じビデオ・オン・デマンドコンテンツの高品質の提示のためのプレイリストのような第2の変形プレイリストを受信及びこの使用に切り換えた後に、ビデオ・オン・デマンドの低品質提示のためのプレイリストのような第1の変形プレイリストを保存するようにクライアントデバイスを構成させることができ、この理由は、第1の変形プレイリストが、切り換えの後にも有効であり、ネットワーク帯域幅が低くなり、もうそれ以上第2の変形プレイリストの使用をサポートできない時のように第2の変形プレイリストファイルの使用が問題になった時に使用することができるからである。更に、プレイリストタイプインジケータが「VOD」である時に、クライアントデバイスは、プレイリストが完全であることを示すENDLISTタグ又は他のタグに対してプレイリストファイルを調べるようにクライアントデバイスを構成することができ、このようなタグがプレイリストファイルからなくなっている場合、クライアントデバイスは、エラーを有するとしてプレイリストにマーク付けすることができる。
プレイリストタイプインジケータが「LIVE」である時に、クライアントデバイスは、更新されたプレイリストファイルを繰返し要求するように構成することができる。プレイリストタイプインジケータが「EVENT」である時に、クライアントデバイスは、(a)更新されたプレイリストの最新の部分だけをロードする(それによって更新されたプレイリストの古い部分の受信を防ぐ)又は(b)更新されたプレイリストの最新の部分だけを構文解析する(それによって更新されたプレイリストの古い部分の再構文解析を防ぐ)のいずれかを実行するように構成することができる。
図20は、タイプインジケータを含む機能を有するプレイリストを処理することができる一実施形態による方法の例を示している。作動2001で、プレイリストをクライアントデバイスによって受信することができ、作動2003で、クライアントデバイスは、プレイリストファイルが「VOD」又は「LIVE」又は「EVENT」のようなタイプインジケータを含むか否かを判断することができる。これらの例示的なタイプの部分集合を一実施形態において使用することができること及び本明細書に説明されていない他のタイプも一部の実施形態で使用することができることが認められるであろう。プレイリストがタイプインジケータを含むとクライアントデバイスが判断した場合、作動2007で、クライアントデバイスは、本明細書に説明する又は以下に更に説明する図21に提示されている方法のように必要に応じてタイプインジケータを使用してプレイリストを処理する。プレイリストファイルがタイプインジケータを含まないことをクライアントデバイスが作動2003で判断した場合、作動2005で、クライアントデバイスは、プレイリストタイプインジケータを使用することなくプレイリストを処理する(例えば、図21に示す最適化は実施されない)。
図21は、本発明の一実施形態によるプレイリストタイプインジケータの様々なタイプの1つ又はそれよりも多くの使用例を示している。図21に示す方法は、3つの異なるタイプインジケータの可能な存在を仮定し、プレイリストファイルに対するプレイリストタイプを指定するために、より少ないタイプインジケータを利用することができ、又はより多くのタイプインジケータを利用することができることが認められるであろう。代替の実施形態は、より少ない作動又はより多い作動又は図21に示すものとは異なる順序の作動を有することができることは認められるであろう。作動2101で、クライアントデバイスは、プレイリストファイルがプレイリストタイプインジケータを含むか否かを判断する。何もない場合、クライアントデバイスは、作動2103で、タイプインジケータの使用なしに作動し、本発明の開示の残りの部分に説明するようにプレイリストファイルを処理する。他方、プレイリストタイプインジケータが存在する場合、作動2105で、クライアントデバイスは、タイプインジケータが「LIVE」インジケータであるか否かを判断し、この場合、クライアントデバイスは、作動2107で、プレイリストファイルを繰返し更新するように設定される。クライアントデバイスが作動2105でタイプインジケータが「LIVE」インジケータではないと判断した場合、タイプインジケータが「VOD」タイプであるか否かを作動2109で判断する。タイプインジケータが「VOD」である場合、クライアントデバイスは、作動2111で、プレイリストファイルを更新しないように設定され、クライアントデバイスは、作動2113及び2115を実行することができる。作動2113で、クライアントデバイスは、以前に使用されたプレイリストに戻さなければならない場合に、別の変形プレイリストを使用しながら以前に使用された変形プレイリストを保存することができる。例えば、クライアントは、第1の変形プレイリストを保存することができ、これは、同じビデオ・オン・デマンドコンテンツに対する第2の変形プレイリストを受信及びこの使用に切り換えた後に、ビデオ・オン・デマンドの低品質又は低ビットレート提示のプレイリストとすることができる第1の変形プレイリストを保存することができ、この理由は、第1の変形プレイリストが、切り換え後に有効であり、第2の変形プレイリストの使用がネットワーク帯域幅が低くなった時のように問題になった場合に使用することができるからである。作動2115で、クライアントデバイスは「ENDLIST」タグ又は類似のタグを検査することができ、プレイリストファイル内に何も見つからなかった場合、クライアントデバイスは、作動2117で、一実施形態においてエラーを有するとしてプレイリストファイルにマーク付けすることができる。
作動2109でプレイリストファイルが「VOD」タイプインジケータを含まないことが判断された場合、クライアントデバイスは、プレイリストファイルが「EVENT」タイプインジケータを含むか否かを作動2119で判断し、含む場合、作動2123を実行し、そうでなければ、プレイリストファイルがタイプインジケータの使用なしに処理される又は本明細書に説明されていない異なるタイプインジケータの使用によって処理される作動2121を実行する。作動2123で、クライアントデバイスは、更新されたプレイリストを要求した時に、現在の再生位置を超えた更新されたプレイリストの最新部分だけをリロードするか又は全ての更新されたプレイリストをロードするが現在の再生位置を超えた更新されたプレイリストの最新部分だけを構文解析するかのいずれかを実行することができる。従って、クライアントデバイスは、クライアントデバイスで既に提示されているプレイリストの部分の処理を防ぐことによって又はネットワークを通じて更新されたプレイリストの古い部分の受信を防ぐことにより、更新されたプレイリストを知的に処理することができる。
一実施形態において、プレイリストファイルに指定された媒体ファイルのデータアクセスに関する統計値又は媒体ファイルを受信した時に発生するネットワークエラーに関する統計値を格納するようにクライアントデバイスを構成することができる。これらの統計値は、API(アプリケーションプログラムインタフェース)を通じてクライアントアプリケーションに利用することができるようなり、ネットワークエラーに関する情報又は媒体ファイルへのアクセスに関する情報の提示を可能にする。この情報は、例えば、ディスプレイがVOD又はライブ番組のような変形ストリーム間で切り換わった回数とすることができる。図22は、APIを通じて媒体サーバアプリケーションからクライアントアプリケーションに統計値を提供することができるアーキテクチャの例を示している。このアーキテクチャの場合、媒体サーバ2201は、プレイリストファイルを要求及び受信しプレイリストファイルを処理しコンテンツをクライアントアプリケーション2203に提供することができる。媒体サーバアプリケーション2201は、1つ又はそれよりも多くのログに統計値2205を格納する1つ又はそれよりも多くのログを作成することができる。クライアントアプリケーションは、これが要求する時又はユーザによって要求される時に、APIインタフェース2207を通じた呼出しを実行することによって統計値に関する情報を提示することができ、それに応じて、媒体サーバ2201は、要求された統計値を検索し、これらの統計値をAPIインタフェース2207を通じてクライアントアプリケーション2203に提供することができる。媒体サーバ2201は、ストリーミングコンテンツを再生又は提供している間に統計値を収集することができ、統計値をオンデマンドでクライアントアプリケーション2203からAPIインタフェース2207を通じてクライアントアプリケーション2203に提供することができる。クライアントアプリケーション2203は、統計値ログを集約サービスに提供する働きをすることができ、ログからの情報の報告のタイミング及び頻度を制御することができる。システムは、統計値を格納するための1つ又はそれよりも多くのログを有することができ、一実施形態において、ログは、W3C拡張ログファイルフォーマットによることができる。一実施形態において、ログの2つのタイプ、すなわち、アクセスログとエラーログを提供することができる。
アクセスログでは、クライアントが変形を切り換え、探索し、又はサーバIPアドレスが変わる度に新しいログエントリ(行)を生成することができる。最後の行は、現在の変形に対する統計値を含むことができる。以下のフィールドは、アクセスログで提供することができる。
初期再生待ち時間に関心のあるクライアントは、再生が開始された日の時間を独自に報告することができる。これは、起動持続時間を計算するために第1の変形の日付/時間と組み合わせて使用することができる。ログサーバリディレクトも実施形態に含むことができる。エラーログでは、ネットワークエラーに遭遇する度に新しいログエントリ(行)を生成することができる。以下のフィールドは、エラーログで提供することができる。
図8は、電子システムの一実施形態のブロック図である。図8に示す電子システムは、例えば、デスクトップコンピュータシステム、ラップトップコンピュータシステム、セルラー電話、セルラー対応PDAを含む携帯情報端末(PDA)、セットトップボックス、娯楽システム又は他の消費者電子デバイスを含む電子システムの範囲(有線又は無線のいずれか)を表すものとする。代替の電子システムは、より多い、より少ない、及び/又は異なる構成要素を含むことができる。図8の電子システムは、クライアントデバイス及び/又はサーバデバイスを提供するために使用することができる。
電子システム800は、情報を伝送するためのバス805又は他の通信デバイス、及び情報を処理することができるバス805に結合されたプロセッサ810を含む。電子システム800が単一のプロセッサによって示されているが、電子システム800は、複数のプロセッサ及び/又はコプロセッサを含むことができる。電子システム800は、バス805に結合されたランダムアクセスメモリ(RAM)又は他の動的格納デバイス820(主メモリとも呼ぶ)を更に含むことができ、プロセッサ810によって実行することができる情報及び命令を格納することができる。主メモリ820はまた、プロセッサ810による命令の実行中に一時的変数又は他の中間情報を格納するために使用することができる。
電子システム800は、プロセッサ810のための静的情報及び命令を格納することができるバス805に結合された読取専用メモリ(ROM)及び/又は他の静的格納デバイス830を含むことができる。データ格納デバイス840は、情報及び命令を格納するためにバス805に結合することができる。フラッシュメモリ又は磁気ディスク又は光学ディスク及び対応するドライブのようなデータ格納デバイス840は、電子システム800に結合することができる。
電子システム800は、ユーザに情報を表示するために、ブラウン管(CRT)又は液晶ディスプレイ(LCD)のような表示デバイス850にバス805を通じて結合することができる。電子システム800は、プロセッサ810に情報及び指令選択を伝送するためにバス805に結合することができる英数字及び他のキーを含む英数字入力デバイス860を含むことができる。ユーザ入力デバイスの別のタイプは、方向情報及び指令選択をプロセッサ810に伝送してディスプレイ850上のカーソルの動きを制御するためのタッチパッド、マウス、トラックボール、又はカーソル方向キーのようなカーソル制御870である。
電子システム800は、ローカルエリアネットワークのようなネットワークへのアクセスを提供するための1つ又はそれよりも多くのネットワークインタフェース880を更に含むことができる。ネットワークインタフェース880は、例えば、1つ又はそれよりも多くのアンテナを表すことができるアンテナ885を有する無線ネットワークインタフェースを含むことができる。電子システム800は、WiFi、Bluetooth、及びセルラー電話インタフェースの組合せのような複数の無線ネットワークインタフェースを含むことができる。ネットワークインタフェース880は、例えば、イーサネットケーブル、同軸ケーブル、光ファイバケーブル、シリアルケーブル、又はパラレルケーブルとすることができるネットワークケーブル887を通じて遠隔デバイスと通信するための有線ネットワークインタフェースを含むことができる。
一実施形態において、ネットワークインタフェース880は、例えば、IEEE 802.11b及び/又はIEEE 802.11g規格によることにより、ローカルエリアネットワークへのアクセスを提供することができ、及び/又は無線ネットワークインタフェースが、例えば、Bluetooth規格によることにより、パーソナルエリアネットワークへのアクセスを提供することができる。他の無線ネットワークインタフェース及び/又はプロトコルもサポートすることができる。
無線LAN規格を通じた通信に加えて又は代替的に、ネットワークインタフェース880は、例えば、時分割多元接続(TDMA)プロトコル、グローバル・システム・フォー・モバイル・コミュニケーションズ(GSM)プロトコル、符号分割多元接続(CDMA)プロトコル、及び/又は無線通信プロトコルのいずれかの他のタイプを使用して無線通信を提供することができる。
1つ又はそれよりも多くのアプリケーションプログラミングインタフェース(API)を一部の実施形態で使用することができる。APIは、プログラムコード構成要素又はハードウエア構成要素によって実施されるインタフェース(以下「API実施構成要素」)であり、それによって異なるプログラムコード構成要素又はハードウエア構成要素(以下「API呼出し構成要素」)が、API実施構成要素によって提供される1つ又はそれよりも多くの機能、方法、手順、データ構造、クラス、及び/又は他のサービスにアクセスしてそれを使用することができる。APIは、API呼出し構成要素とAPI実施構成要素の間で送られる1つ又はそれよりも多くのパラメータを定義することができる。
APIにより、API呼出し構成要素の開発者(第三者開発者とすることができる)は、API実施構成要素によって提供される指定された機能を利用することができる。1つのAPI呼出し構成要素を存在させることができ、又は1つよりも多いこのような構成要素を存在させることができる。APIは、コンピュータシステム又はプログラムライブラリがアプリケーションからのサービスに対する要求をサポートするために提供するソースコードインタフェースとすることができる。オペレーティングシステム(OS)は、これらのAPIの1つ又はそれよりも多くをOSで実施されるアプリケーションが呼び出せるようにする複数のAPIを有することができ、サービス(プログラムライブラリなど)は、サービスを使用するアプリケーションがこれらのAPIの1つ又はそれよりも多くを呼び出せるようにする複数のAPIを有することができる。APIは、アプリケーションが作られた時に翻訳又はコンパイルすることができるプログラミング言語に関して指定することができる。
一部の実施形態において、API実施構成要素は、1つよりも多いAPIを提供することができ、各々は、API実施構成要素によって実施される機能の様々な態様にアクセスする様々な態様又はその異なるビューを提供する。例えば、API実施構成要素の1つのAPIは、機能の第1のセットを提供することができ、第三者開発者に露出することができ、API実施構成要素の別のAPIは、隠す(露出させない)ことができ、機能の第1のセットの部分集合を提供し、更に機能の第1のセットにはない試験又はデバッグ機能のような機能の別のセットを提供することができる。他の実施形態において、API実施構成要素は、それ自体が、元にあるAPIを通じて1つ又はそれよりも多くの他の構成要素を呼び出すことができ、従って、API呼出し構成要素及びAPI実施構成要素の両方とすることができる。
APIは、API実施構成要素の指定された機能にアクセスしてそれを使用する時にAPI呼出し構成要素が使用する言語及びパラメータを定義する。例えば、API呼出し構成要素は、APIによって露出された1つ又それよりも多くのAPI呼出し又は起動(例えば、機能又は方法呼出しによって実施される)を通じてAPI実施構成要素の指定された機能にアクセスし、API呼出し又は起動を通じてパラメータを使用するデータ及び制御情報を転送する。API実施構成要素は、API呼出し構成要素からのAPI呼出しに応答してAPIを通じて値を戻すことができる。APIはAPI呼出しの構文及び結果を定義する(例えば、API呼出しを起動する方法及びAPI呼出しが実行すること)が、APIは、API呼出しによって指定された機能をAPI呼出しがどのように達成するかを明らかにしなくてもよい。様々なAPI呼出しが、呼出し(API呼出し構成要素)とAPI実施構成要素の間で1つ又はそれよりも多くのアプリケーションプログラミングインタフェースを通じて転送される。API呼出しの転送は、機能呼出し又はメッセージの発行、初期化、起動、呼出し、受信、返答、又は応答を含むことができ、換言すると、転送は、API呼出し構成要素又はAPI実施構成要素のいずれかによる作動を表すことができる。APIの機能呼出し又は他の起動は、パラメータリスト又は他の構造を通じて1つ又はそれよりも多くのパラメータを送信又は受信することができる。パラメータは、定数、キー、データ構造、オブジェクト、オブジェクトクラス、変数、データタイプ、ポインタ、アレイ、リスト又は機能へのポインタ、又はAPIを通じて送られるデータ又は他の項目を参照する方法又は別の方式とすることができる。
更に、データタイプ又はクラスをAPIによって提供及びAPI実施構成要素によって実施することができる。従って、API呼出し構成要素は、APIで提供された定義を使用することによってこのようなタイプ又はクラスの定数値を使用又は例示化するために、変数を宣言してポインタを使用することができる。
一般的に、APIは、API実施構成要素によって提供されたサービス又はデータにアクセスするか又はAPI実施構成要素によって提供される作動又はコンピュータ計算の成果を初期化するために使用することができる。一例として、API実施構成要素及びAPI呼出し構成要素の各々は、オペレーティングシステム、ライブラリ、デバイスドライバ、API、アプリケーションプログラム、又は他のモジュールのいずれか1つとすることができる(API実施構成要素及びAPI呼出し構成要素は、同じか又は互いに異なるモジュールのタイプとすることができることを理解されたい)。API実施構成要素は、場合によっては、ファームウエア、マイクロコード、又は他のハードウエア論理で少なくとも一部実施することができる。一部の実施形態において、APIにより、クライアントプログラムは、ソフトウエア開発者Kit(SDK)ライブラリによって提供されるサービスを使用することができる。他の実施形態において、アプリケーション又は他のクライアントプログラムは、アプリケーションフレームワークによって提供されるAPIを使用することができる。これらの実施形態において、アプリケーション又はクライアントプログラムは、SDKによって提供される及びAPIによって提供される機能又は方法の呼出しを組み込むことができ、又はSDKに定義されAPIによって提供されるデータタイプ又はオブジェクトを使用することができる。アプリケーションフレームワークは、これらの実施形態でフレームワークによって定義された様々なイベントに応答するプログラムのための主イベントループを提供することができる。APIにより、アプリケーションは、アプリケーションフレームワークを使用してイベント及びイベントへの応答を指定することができる。一部の実施では、API呼出しは、入力機能及び状態、出力機能及び状態、処理容量、電力状態、格納容量及び状態、通信容量のような態様に関するものを含むハードウエアデバイスの機能又は状態をアプリケーションに報告することができ、APIは、ハードウエア構成要素で一部実施されるファームウエア、マイクロコード、又は他の低レベル論理によって一部実施することができる。
API呼出し構成要素は、ローカル構成要素(すなわち、API実施構成要素と同じデータ処理システム上の)又はリモート構成要素(すなわち、API実施構成要素とは異なるデータ処理システム上の)とすることができ、ネットワーク上でAPIを通じてAPI実施構成要素と通信する。API実施構成要素は、API呼出し構成要素として作動させることができ(すなわち、API実施構成要素は、異なるAPI実施構成要素によって露出されたAPIにAPI呼出しを実行することができる)、更にAPI呼出し構成要素は、異なるAPI呼出し構成要素に露出されたAPIを実施することによってAPI実施構成要素として作動させることができる。
APIにより、異なるプログラミング言語で書かれた複数のAPI呼出し構成要素は、API実施構成要素と通信することができるが(従って、APIはAPI実施構成要素とAPI呼出し構成要素の間で呼出し及び返答を変換するための機能を含むことができる)、しかし、APIは、特定のプログラミング言語に関して実施することもできる。API呼出し構成要素は、一実施形態において、OSプロバイダからAPIのセット及び接続プロバイダからのAPIの別のセット及び別のプロバイダ(例えば、ソフトウエアライブラリのプロバイダ)又はAPIの別のセットのクリエータからのAPIの別のセットのような異なるプロバイダからのAPIを呼び出すことができる。
図18は、本発明の一部の実施形態で使用することができる例示的なAPIアーキテクチャを示すブロック図である。図18に示すように、APIアーキテクチャ1800は、API1820を実施するAPI実施構成要素1810(オペレーティングシステム、ライブラリ、デバイスドライバ、API、アプリケーションプログラム、ソフトウエア又は他のモジュールなど)を含む。API1820は、API呼出し構成要素1830によって使用することができるAPI実施構成要素の1つ又はそれよりも多くの機能、方法、クラス、オブジェクト、プロトコル、データ構造、フォーマット、及び/又は他の機能を指定する。API1820は、API実施構成要素における機能がAPI呼出し構成要素からパラメータを受信する方法及び機能がAPI呼出し構成要素に結果を戻す方法を指定する少なくとも1つの呼出し規約を指定することができる。API呼出し構成要素1830(例えば、オペレーティングシステム、ライブラリ、デバイスドライバ、API、アプリケーションプログラム、ソフトウエア、又は他のモジュールなど)は、API1820によって指定されたAPI実施構成要素1810の機能にアクセスしてそれを使用するために、API1820を通じてAPI呼出しを実行する。API実施構成要素1810は、API呼出しに応答してAPI1820を通じてAPI呼出し構成要素1830に値を戻すことができる。
API実施構成要素1810は、API1820を通じて指定されず、かつAPI呼出し構成要素1830に利用可能ではない付加的な機能、方法、クラス、データ構造、及び/又は他の機能を含むことができることは認められるであろう。API呼出し構成要素1830は、API実施構成要素1810と同じシステム上にあるものとすることができ、又は遠隔に配置することができてネットワークを通じてAPI1820を使用してAPI実施構成要素1810にアクセスすることを理解すべきである。図18は、API1820と対話する単一のAPI呼出し構成要素1830を示しているが、API呼出し構成要素1830とは異なる言語(又は同じ言語)で書くことができる他のAPI呼出し構成要素がAPI1820を使用することができることを理解すべきである。
API実施構成要素1810、API1820、及びAPI呼出し構成要素1830は、機械(例えば、コンピュータ又は他のデータ処理システム)によって可読の形式で情報を格納するためのいずれかの機構を含む機械可読非一時的ストレージ媒体に格納することができる。例えば、機械可読媒体は、磁気ディスク、光学ディスク、ランダムアクセスメモリ;読取専用メモリ、フラッシュメモリデバイスなどを含む。
図19(「ソフトウエアスタック」)の例示的な実施形態において、アプリケーションは、いくつかのサービスAPIを使用してサービス1又は2に、かついくつかのOS APIを使用してオペレーティングシステム(OS)に呼出しを実行することができる。サービス1及び2は、いくつかのOS APIを使用してOSに呼出しを実行することができる。
サービス2は、2つのAPIを有し、そのうちの1つ(サービス2API1)は、アプリケーション1から呼出しを受信してアプリケーション1に値を戻し、他(サービス2API2)は、アプリケーション2から呼出しを受信してアプリケーション2に値を戻すことに注意されたい。サービス1(例えば、ソフトウエアライブラリとすることができる)は、OS API1に呼出しを実行して、OS API1から戻された値を受信し、サービス2(例えば、ソフトウエアライブラリとすることができる)は、OS API1及びOS API2の両方に呼出しを実行して、OS API1及びOS API2の両方から戻された値を受信する。アプリケーション2は、OS API2に呼出しを実行して、OS API2から戻された値を受信する。
本明細書における「一実施形態」又は「実施形態」への参照は、実施形態に関して説明する特定の機能、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。本明細書の様々な箇所における「一実施形態では」という句の出現は、必ずしも全て同じ実施形態を示すものではない。
以上の明細書では、本発明をその特定の実施形態に関して説明した。しかし、本発明の広範な精神及び範囲から逸脱することなく様々な修正及び変形を本明細書に行うことができることは明らかであろう。従って、本明細書及び図面は、制限の意味ではなく例示的な意味に捉えるべきである。
2001 クライアントデバイスでプレイリストファイルを受信する作動
2003 プレイリストファイルがプレイリストタイプインジケータを含むか否かを判断する作動
2005 タイプインジケータの使用なしにプレイリストファイルを処理する作動
2007 必要に応じてタイプインジケータを使用してプレイリストを処理する作動
付録
以下の付録は、本発明の特定の実施形態によるプロトコルの草案の明細書である。本付録における特定のキーワードの使用(例えば、MUST(ねばならない)、MUST NOT(してはならない)、SHALL(すべきだ)、SHALL NOT(すべきではない)など)の使用は、この特定の実施形態に適用され、本発明の開示に説明する他の実施形態には適用されない。
HTTPライブストリーミング
draft−pantos−http−live−streaming−06
要約
本文書は、マルチメディアデータの無制限ストリームを転送するためのプロトコルを説明する。本文書は、ファイルのデータフォーマット及びストリームのサーバ(送信者)及びクライアント(受信者)によって行われるアクションを指定する。本文書は、このプロトコルのバージョン3を説明する。
コンテンツの表
1.序文
2.要約
3.プレイリストファイル
3.1.序文
3.2.属性リスト
3.3.新しいタグ
3.3.1.EXT−X−TARGETDURATION
3.3.2.EXT−X−MEDIA−SEQUENCE
3.3.3.EXT−X−KEY
3.3.4.EXT−X−PROGRAM−DATE−TIME
3.3.5.EXT−X−ALLOW−CACHE
3.3.6.EXT−X−PLAYLIST−TYPE
3.3.7.EXT−X−ENDLIST
3.3.8.EXT−X−STREAM−INF
3.3.9.EXT−X−DISCONTINUITY
3.3.10.EXT−X−VERSION
4.媒体ファイル
5.キーファイル
5.1.序文
5.2.AES−128のためのIV
6.クライアント/サーバアクション
6.1.序文
6.2.サーバ処理
6.2.1.序文
6.2.2.スライディングウィンドウプレイリスト
6.2.3.媒体ファイルの暗号化
6.2.4.変形ストリームの提供
6.3.クライアント処理
6.3.1.序文
6.3.2.プレイリストファイルのローディング
6.3.3.プレイリストファイルの再生
6.3.4.プレイリストファイルのリローディング
6.3.5.ロードする次のファイルの判断
6.3.6.暗号化媒体ファイルの解読
7.プロトコルバージョンの互換性
8.実施例
8.1.序文
8.2.単純なプレイリストファイル
8.3.HTTPSを使用したスライディングウィンドウプレイリスト
8.4.暗号化媒体ファイルを備えたプレイリストファイル
8.5.変形プレイリストファイル
9.セキュリティ配慮
10.参考文献
10.1.基準参考文献
10.2.情報参考文献
1.序文
本文書は、マルチメディアデータの無制限ストリームを転送するためのプロトコルを説明する。プロトコルは、媒体データの暗号化及びストリームの代替のバージョン(ビットレートなど)の供給をサポートする。媒体データは、作成された後に直ちに転送することができ、実質的にリアルタイムで再生することができる。データは、通常、HTTPを通じて運ばれる[RFC2616]。
HTTPのような関連の規格を説明する外部参考文献は段落11に示している。
2.要約
マルチメディア提示は、プレイリストファイルへのURI[RFC3986]によって指定され、これは、媒体URI及び情報タグの順序付けられたリストである。各媒体URIは、単一の連続ストリームのセグメントである媒体ファイルを示している。
ストリームを再生するために、クライアントは、最初にプレイリストファイルを取得し、次に、プレイリストの各媒体ファイルを取得及び再生する。クライアントは、付加的なセグメントを見出すためにこの文書に説明するようにプレイリストファイルをリロードする。
本文書におけるキーワード「MUST(ねばならない)」、「MUST NOT(してはならない)」、「REQUIRED(要求される)」、「SHALL(すべきだ)」、「SHALL NOT(すべきでない)」、「SHOULD(すべきだ)」、「SHOULD NOT(すべきでない)」、「RECOMMENDED(推薦される)」、「MAY(することができる)」、及び「OPTIONAL(任意的)」は、RFC2119[RFC2119]で説明するように解釈すべきである。
3.プレイリストファイル
3.1.序文
プレイリストは、拡張M3Uプレイリストファイル[M3U]でなくてはならない。この文書は、付加的なタグを定義することによってM3Uファイルフォーマットを拡張する。
M3Uプレイリストは、個々の行から構成されるテキストファイルである。行は、単一のLF文字又はLF文字の後に続くCR文字のいずれかによって終わる。各行は、URI、空白であり、又はコメント文字「#」から始まる。空白行は無視される。空白は、これが明示的に指定される要素を除いて存在してはならない。
URI行は、媒体ファイル又は変形プレイリストファイルを識別する(段落3.3.8を参照されたい)。
URIは、相対的とすることができる。相対的なURIは、これを含むプレイリストファイルのURIに対して解決すべきである。
コメント文字「#」で始まる行は、コメント又はタグのいずれかである。タグは、#EXTから始まる。「#」で始まる全ての他の行はコメントであり、無視すべきである。
プレイリストファイルの持続時間は、その中の媒体ファイルの持続時間の和である。
名称が.m3u8で終わる及び/又はHTTPコンテンツタイプ「application/vnd.apple.mpegurl」を有するM3Uプレイリストファイルは、UTF−8[RFC3629]で符号化される。名称が.m3uで終わる及び/又はHTTPコンテンツタイプ[RFC2616]「audio/mpegurl」を有するファイルは、US−ASCII[US_ASCII]で符号化される。
プレイリストファイルは、m3u8で終わる及び/又はコンテンツタイプ「application/vnd.apple.mpegurl」(HTTPを通じて転送される場合)を有する名称を持たなくてはならず、又は.m3uで終わる及び/又はHTTPコンテンツタイプ「audio/mpegurl」(互換性のため)を有する名称を持たなくてはならない。
拡張M3Uファイルフォーマットは、EXTM3U及びEXTINFの2つのタグを定義する。拡張M3Uファイルは、#EXTM3Uでなくてはならないその第1の行によって基本M3Uフォーマットとは区別される。
EXTINFは、それに続くURIによって識別される媒体ファイルを説明する記録マーカである。各媒体ファイルURIは、EXTINFタグが先行すべきである。そのフォーマットは以下の通りである。
#EXTINF:<持続時間>、<タイトル>
「持続時間」は、媒体ファイルの持続時間を秒で指定する整数又は浮動小数点数である。整数の持続時間は、最も近い整数に丸めるべきである。持続時間は、プレイリストファイルのプロトコルバージョンが3未満である場合は整数でなくてはならない。コンマの後に続く行の残りは、媒体ファイルのタイトルであり、媒体セグメントの任意的な人間が読める情報タイトルである。
この文書は、以下の新しいタグを定義する:EXT−X−TARGETDURATION、EXT−X−MEDIA−SEQUENCE、EXT−X−KEY、EXT−X−PROGRAM−DATE−TIME、EXT−X−ALLOW−CACHE、EXT−X−PLAYLIST−TYPE、EXT−X−STREAM−INF、EXT−X−ENDLIST、EXT−X−DISCONTINUITY、及びEXT−X−VERSION。
3.2.属性のリスト
特定の拡張M3Uタグは、属性リストである値を有する。属性リストは、空白を持たない属性/値の対のコンマで区切られたリストである。
属性/値対は、以下の構文を有する。
AttributeName=AttributeValue
AttributeNameは、セット[A−Z]からの文字を含む引用符のない文字列である。
AttributeValueは、以下のうちの1つである。
・十進数−整数:十進法演算で整数を表すセット[0−9]からの文字の引用符のない文字列。
・16進数−整数:0x又は0Xが前に付いた16進数演算で整数を表すセット[0−9]及び[A−F]からの文字の引用符のない文字列。
・十進数−浮動小数点:十進数演算で浮動小数点数を表すセット[0−9]及び「.」からの文字の引用符のない文字列。
・引用符付き文字列:二重引用符(“)の対内の文字の文字列。文字列で許可される文字のセット及び特別な文字を逃がすためのいずれの規則も属性定義によって指定されるが、いずれの二重引用符(”)文字及びいずれの復帰改行又は改行も、常にエスケープシーケンスによって置換される。
・列挙−文字列:属性によって明示的に定義されたセットからの引用符のない文字の文字列。列挙−文字列は、二重引用符(“)、コンマ(,)、又は空白を決して含まない。
・十進数−解像度:水平及び垂直ピクセル寸法を示す「x」文字によって分離された2つの十進数−整数。
所定のAttributeNameに対するAttributeValueのタイプは、属性定義によって指定される。
所定のAttributeNameは、所定の属性リストで1回よりも多く現れてはならない。
認識されなかったAttributeNameを有する属性/値の対は、クライアントによって無視すべきである。
認識されなかった値を含むタイプ列挙文字列の属性/値対は、クライアントによって無視すべきである。
3.3.新しいタグ
3.3.1.EXT−X−TARGETDURATION
EXT−X−TARGETDURATIONタグは、最大媒体ファイル持続時間を指定する。プレイリストファイルの各媒体ファイルのEXTINF持続時間は、ターゲット持続時間未満か又はこれに等しくなくてはならない。このタグは、プレイリストファイルに一度出現すべきである。そのフォーマットは以下の通りである。
#EXT−X−TARGETDURATION:<s>
ここで、sは、ターゲット持続時間を秒で示す整数である。
3.3.2.EXT−X−MEDIA−SEQUENCE
プレイリストの各媒体ファイルURIは、固有の整数シーケンス番号を有する。URIのシーケンス番号は、それに先行するURIのシーケンス番号に1を加えたものに等しい。EXT−X−MEDIA−SEQUENCEタグは、プレイリストファイルに現れる最初のURIのシーケンス番号を示す。そのフォーマットは以下の通りである。
#EXT−X−MEDIA−SEQUENCE:<番号>
プレイリストファイルは、1つよりも多いEXT−X−MEDIA−SEQUENCEタグを含んではならない。プレイリストファイルがEXT−X−MEDIA−SEQUENCEタグを含まない場合、プレイリストの第1のURIのシーケンス番号は、0と考えるべきである。
媒体ファイルのシーケンス番号は、そのURIに出現する必要はない。
EXT−X−MEDIA−SEQUENCEタグを処理する場合の情報については、段落6.3.2及び段落6.3.5.を参照されたい。
3.3.3.EXT−X−KEY
媒体ファイルは、暗号化することができる。EXT−X−KEYタグは、それに続く媒体ファイルを解読するのに必要な情報を提供する。そのフォーマットは以下の通りである。
#EXT−X−KEY:<attribute−list>
以下の属性が定義される。
方法属性は、暗号化方法を指定する。これは、タイプ列挙文字列である。2つの方法、NONE及びAES−128が定義される。
NONEの暗号化方法は、媒体ファイルが暗号化されないことを意味する。暗号化方法がNONEである場合、URI及びIV属性は存在してはならない。
AES−128の暗号化方法は、媒体ファイルが、128ビットキー及びPKCS7パディング[RFC5652]を備えた高度暗号化規格[AES_128]を使用して暗号化されることを意味する。暗号化方法がAES−128である場合、URI属性が存在すべきである。IV属性が存在することができ、段落5.2を参照されたい。
URI属性は、キーを取得する方法を指定する。その値は、キーに対するURI[RFC3986]を含む引用符付き文字列である。
IV属性は、存在するとすれば、キーと共に使用される初期化ベクトルを指定する。その値は、16進数の整数である。IV属性は、プロトコルバージョン2で出現する。
新しいEXT−X−KEYは、いずれの前のEXT−X−KEYにも優先する。
プレイリストファイルがEXT−X−KEYタグを含まない場合、媒体ファイルは暗号化されない。
キーファイルのフォーマットに関しては段落5、及び媒体ファイル暗号化における付加的な情報に関しては段落5.2、段落6.2.3、及び段落6.3.6.を参照されたい。
3.3.4.EXT−X−PROGRAM−DATE−TIME
EXT−X−PROGRAM−DATE−TIMEタグは、次の媒体ファイルの開始を絶対日付及び/又は時間に関連付ける。日付/時間表示は、ISO/IEC8601:2004[ISO_8601]であり、時間帯を指示すべきである。例えば、
#EXT−X−PROGRAM−DATE−TIME:<YYYY−MM−DDThh:mm:ssZ>
EXT−X−PROGRAM−DATE−TIMEタグに対する更なる情報に関しては、段落6.2.1及び段落6.3.3を参照されたい。
3.3.5.EXT−X−ALLOW−CACHE
EXT−X−ALLOW−CACHEタグは、クライアントが後の再生のためにダウンロードされた媒体ファイルをキャッシュに入れることができるか又はキャッシュに入れてはならないかを示す。EXT−X−ALLOW−CACHEタグは、プレイリストファイルのあらゆる場所に発生させることができ、1回より多くは発生してはならない。EXT−X−ALLOW−CACHEタグは、プレイリストの全てのセグメントに適用される。そのフォーマットは以下の通りである。
#EXT−X−ALLOW−CACHE:<YES|NO>
EXT−X−ALLOW−CACHEタグに対する更なる情報に関しては、段落6.3.3を参照されたい。
3.3.6.EXT−X−PLAYLIST−TYPE
EXT−X−PLAYLIST−TYPEタグは、プレイリストファイルに関する変更可能性情報を提供する。これは任意的である。そのフォーマットは以下の通りである。
#EXT−X−PLAYLIST−TYPE:<イベント|VOD>
段落6.2.1は、EXT−X−PLAYLIST−TYPEタグの意味を定義する。
3.3.7.EXT−X−ENDLIST
EXT−X−ENDLISTタグは、媒体ファイルが、もはやそれ以上プレイリストファイルに追加されないことを示す。これは、プレイリストファイルのあらゆる場所に発生させることができ、これは、1回より多く発生してはならない。そのフォーマットは以下の通りである。
#EXT−X−ENDLIST
3.3.8.EXT−X−STREAM−INF
EXT−X−STREAM−INFタグは、プレイリストファイルの次のURIが別のプレイリストファイルを識別することを示す。そのフォーマットは以下の通りである。
#EXT−X−STREAM−INF:<attribute−list><URI>
以下の属性が定義される。
BANDWIDTH
この値は、1秒当たりのビットの十進数−整数である。これは、コンテナオーバヘッドを含むために計算される各媒体ファイルの全体的なビットレートの上限限度でなくてはならず、プレイリストに出現するか又は出現することになる。
あらゆるEXT−X−STREAM−INFタグが、BANDWIDTH属性を含まなくてはならない。
PROGRAM−ID
この値は、プレイリストファイルの範囲内の特定の提示を固有に識別する十進数−整数である。
プレイリストファイルは、同じ提示の異なる符号化を識別するために、同じPROGRAM−IDを有する複数のEXT−X−STREAM−INFタグを含むことができる。これらの変形プレイリストは、付加的なEXT−X−STREAM−INFタグを含むことができる。
CODECS
この値は、フォーマットのコンマで区切られたリストを含む引用符付き文字列であり、ここで、各フォーマットは、プレイリストファイルの媒体ファイルに存在する媒体サンプルタイプを指定する。有効フォーマット識別子は、RFC4281[RFC4281]によって定義されるISOファイルフォーマットネームスペースの識別子である。
あらゆるEXT−X−STREAM−INFタグがCODECS属性を含むべきである。
RESOLUTION
この値は、ストリーム内のビデオの大体の符号化された水平及び垂直解像度を説明する十進数−解像度である。
3.3.9.EXT−X−DISCONTINUITY
EXT−X−DISCONTINUITYタグは、それに続く媒体ファイルとそれに先行する媒体ファイルの間の符号化不連続性を示す。変更することができる特性のセットは以下の通りである。
ファイルフォーマット
トラックの数及びタイプ
符号化パラメータ
符号化シーケンス
タイムスタンプシーケンス
そのフォーマットは以下の通りである。
#EXT−X−DISCONTINUITY
EXT−X−DISCONTINUITYタグに対する更なる情報は、段落4、段落6.2.1、及び段落6.3.3を参照されたい。
3.3.10.EXT−X−VERSION
EXT−X−VERSIONタグは、プレイリストファイルの互換性バージョンを示す。プレイリストファイル、その関連の媒体及びそのサーバは、タグ値によって示されたプロトコルバージョンを説明する本文書の最新バージョンの全ての供給に従わなくてはならない。
そのフォーマットは以下の通りである。
#EXT−X−VERSION:<n>
ここで、nは、プロトコルバージョンを示す整数である。
プレイリストファイルは、1つよりも多いEXT−X−VERSIONタグを含んではならない。EXT−X−VERSIONタグを含まないプレイリストファイルは、このプロトコルのバージョン1に従わなくてはならない。
4.媒体ファイル
プレイリストファイルの各媒体ファイルURIは、全体の提示のセグメントである媒体ファイルを識別すべきである。各媒体ファイルは、MPEG−2トランスポートストリーム又はMPEG−2オーディオエレメンタリストリーム[ISO_13818]としてフォーマット設定すべきである。
トランスポートストリームファイルは、単一のMPEG−2プログラムを含まなくてはならない。各ファイルの始まりにはプログラム関連性テーブル及びプログラムマップテーブルを存在させるべきである。ビデオを含むファイルは、ビデオ復号器を完全に初期化するために少なくとも1つのキーフレーム及び十分な情報を有するべきである。
プレイリストの媒体ファイルは、第1の媒体ファイルがプレイリストファイルに現れない限り、又はEXT−X−DISCONTINUITYタグが前に付かない限り、前のシーケンス番号を有する媒体ファイルの最後での符号化ストリームの連続でなくてはならない。
クライアントは、特定のタイプ(例えば、オーディオ又はビデオ)の複数のトラックを処理する準備をすべきである。他のプリファレンスを持たないクライアントは、再生することができる最低数字PIDを備えたものを選択すべきである。
クライアントは、認識していないトランスポートストリーム内部のプライベートストリームを無視すべきである。
媒体ファイル内部のストリーム内及び複数の媒体ファイルにわたる対応するストリーム間のサンプルの符号化パラメータは、一貫したものにすべきである。しかし、クライアントは、例えば、解像度変化に対応するためにビデオコンテンツをスケーリングすることにより、クライアントが遭遇する符号化変化に対処すべきである。
5.キーファイル
5.1.序文
URI属性を備えたEXT−X−KEYタグは、キーファイルを識別する。キーファイルは、プレイリストの次の媒体ファイルを解読するために使用すべきである暗号キーを含む。
AES−128暗号化方法は、16オクテットキーを使用する。キーファイルのフォーマットは、単純にバイナリフォーマットでのこれらの16オクテットのパックアレイである。
5.2.AES−128のためのIV
128−ビットAESは、暗号化及び解読される時に供給される同じ16オクテット初期化ベクトルを要求する。変化するこのIVは、暗号の強度を増す。
EXT−X−KEYタグがIV属性を有する場合、実施は、そのキーで暗号化又は解読する時にIVとして属性値を使用すべきである。値は、128−ビット16進数として解釈すべきであり、0x又は0Xを前に付けなくてはならない。
EXT−X−KEYタグがIV属性を持たない場合、実施は、その媒体ファイルを暗号化又は解読する時にIVとして媒体ファイルのシーケンス番号を使用すべきである。シーケンス番号のbig−endianバイナリ表示は、16オクテットバッファに入れられ、ゼロでパッド(左に)すべきである。
6.クライアント/サーバアクション
6.1.序文
この段落は、サーバがどのようにプレイリスト及び媒体ファイルを生成するか及びクライアントがこれらをどのようにダウンロード及び再生すべきかを説明する。
6.2.サーバ処理
6.2.1.序文
MPEG−2ストリームの生成は、本文書の範囲外であり、提示を含む連続ストリームのソースを単純に前提とする。
サーバは、持続時間が、一定のターゲット持続時間よりも少ないか又は等しい個々の媒体ファイルにストリームを分割すべきである。サーバは、個々の媒体ファイルの効率的な復号をサポートするポイント、例えば、パケット及びキーフレーム境界でストリームの分割を試みるべきである。
サーバは、クライアントがファイルを取得することを可能にする各媒体ファイルに対するURIを作成すべきである。
サーバは、プレイリストファイルを作成すべきである。プレイリストファイルは、段落3に説明したフォーマットに従わなくてはならない。サーバが利用可能にしたいと思う各媒体ファイルに対するURIは、再生される順序でプレイリストに出現すべきである。そのURIがプレイリストファイルにある場合に全媒体ファイルをクライアントに利用することを可能にすべきである。
プレイリストファイルは、EXT−X−TARGETDURATIONタグを含まなくてはならない。その値は、プレイリストファイルに出現するか又は出現することになるいずれかの媒体ファイルのEXTINF値に等しいか又はそれよりも大きくなくてはならない。その値は、変化してはならない。典型的なターゲット持続時間は10秒である。
プレイリストファイルは、ストリームの互換性バージョンを示す1つのEXT−X−VERSIONタグを含むべきである。その値は、サーバ、プレイリストファイル、及び関連の媒体ファイル全てが従う最低プロトコルバージョンでなくてはならない。
サーバは、そのクライアントがファイルを取得することを可能にするプレイリストファイルに対するURIを作成すべきである。
プレイリストファイルがHTTPによって配信される場合、サーバは、「gzip」コンテンツ符号化を使用するためのクライアント要求をサポートすべきである。
プレイリストファイルの変更は、クライアントの観点から細かく行わなくてはならない。
サーバは、以下を除いてプレイリストファイルを変更してはならない。
それに行を添付する(段落6.2.1)。
これらの媒体ファイルだけに適用されるいずれのタグも一緒に、出現する順序でプレイリストから媒体ファイルURIを取り除く(段落6.2.2)。
EXT−X−MEDIA−SEQUENCEタグの値を変更する(段落6.2.2)。
EXT−X−STREAM−INFタグを追加又は取り除く(段落6.2.4)。クライアントは、これらを変更することが即座の影響を持たない場合があるので、変形プレイリストファイルをリロードすることを要求されないことに注意されたい。
EXT−X−ENDLISTタグをプレイリストに追加する(段落6.2.1)。
更に、プレイリストファイルは、EVENT又はVODのいずれかの値を有するEXT−X−PLALIST−TYPEタグを含むことができる。タグが存在しEVENTの値を有する場合、サーバは、プレイリストファイルのいずれの部分も変更又は削除してはならない(しかし、行をそれに添付することができる)。タグが存在しVODの値を有する場合、プレイリストファイルは変更してはならない。
プレイリストのいずれの媒体ファイルURIの前にも、媒体ファイルの持続時間を示すEXTINFタグを付けることができる。
サーバは、そのURIの前にEXT−X−PROGRAM−DATE−TIMEタグを付けることにより、絶対日付及び時間を媒体ファイルに関連付けることができる。日付及び時間の値は、媒体の時系列と適切な壁時計時間の情報マッピングを提供し、シーキング、ディスプレイのために、又は他の目的のための基礎として使用することができる。サーバがこのマッピングを提供する場合、サーバは、プレイリストファイルの全てのEXT−X−DISCONTINUITYタグの後にEXT−X−PROGRAM−DATE−TIMEタグを置くべきである。
プレイリストが提示の最終媒体ファイルを含む場合、プレイリストファイルは、EXT−X−ENDLISTを含まなくてはならない。
プレイリストがEXT−X−ENDLISTタグを含まない場合、サーバは、少なくとも1つの新しい媒体ファイルURIを含むプレイリストファイルの新しいバージョンを利用することを可能にすべきである。それは、プレイリストファイルの前のバージョンが利用可能になった時間に対して利用可能にされるべきであり、すなわち、その時間の後のターゲット持続時間の1/2より早くなく、その時間の後のターゲット持続時間の1.5倍より遅くない時間である。
サーバが全提示を取り除きたいと思う場合、サーバは、プレイリストファイルをクライアントに利用できないようにすべきである。サーバは、プレイリストファイルの全ての媒体ファイルが取り除く時に少なくともプレイリストファイルの持続時間にクライアントに利用することを可能にしておくべきである。
6.2.2.スライディングウィンドウプレイリスト
サーバは、プレイリストに最も新しく追加されたものに媒体ファイルの利用可能度を制限することができる。これを実行するために、プレイリストファイルは、1つのEXT−X−MEDIA−SEQUENCEタグを常に正確に含まなくてはならない。その値は、プレイリストファイルから取り除かれる媒体ファイルURI毎に1ずつ増加させなければならない。
媒体ファイルURIは、これらが追加された順序でプレイリストファイルから取り除かなくてはならない。
サーバは、プレイリストファイルの持続時間から媒体ファイルの持続時間を引いた時間がターゲット持続時間の3倍よりも少ない場合には、プレイリストファイルから媒体ファイルURIを取り除いてはならない。
サーバがプレイリストから媒体ファイルURIを取り除いた時に、媒体ファイルは、媒体ファイルの持続時間に媒体ファイルが現れる最長プレイリストファイルの持続時間を加えたものに等しい時間にわたってクライアントに利用可能にすべきである。
サーバがHTTPを通じてクライアントに配信された後に媒体ファイルを取り除くことを計画した場合、サーバは、HTTP応答が計画されたライブまでの時間を反映する満了ヘッダを含むことを保証すべきである。
6.2.3.媒体ファイルの暗号化
媒体ファイルが暗号化される場合、サーバは、解読キーを含むキーファイルを許可されたクライアントが取得することを可能にするURIを定義すべきである。キーファイルは、段落5に説明したフォーマットに従わなくてはならない。
サーバは、キーをキャッシュに入れることができることを示すために、キー応答にHTTP満了ヘッダを設定することができる。
暗号化方法がAES−128である場合、AES−128CBC暗号化は、個々の媒体ファイルに適用すべきである。ファイル全体が暗号化されなければならない。暗号ブロック連鎖は、媒体ファイルにわたって適用してはならない。暗号化に対して使用されるIVは、媒体ファイルのシーケンス番号又は段落5.2に説明されているようにEXT−X−KEYタグのIV属性の値のいずれかでなくてはならない。
サーバは、本方法及びプレイリストファイルにおいてそのURIのすぐ前のEXT−X−KEYタグによって指定された他の属性を使用して、プレイリストにおける全媒体ファイルを暗号化すべきである。そのMETHODがNONEであるEXT−X−KEYタグによって先行されるか、又はEXT−X−KEYタグによって先行されない媒体ファイルは、暗号化してはならない。
プレイリストファイルがそのキーによって暗号化された媒体ファイルへのURIを含む場合、サーバは、プレイリストファイルからEXT−X−KEYタグを取り除いてはならない。
6.2.4.変形ストリームの提供
サーバは、同じ提示の異なる符号化を提供するために複数のプレイリストファイルを供給することができる。サーバがこれを実行する場合、サーバは、クライアントが符号化を動的に切り換えられるようにするために、各変形ストリームを列挙する変形プレイリストファイルを提供すべきである。
変形プレイリストは、各変形ストリームに対するEXT−X−STREAM−INFタグを含まなくてはならない。同じ提示のための各EXT−X−STREAM−INFタグは、同じPROGRAM−ID属性値を持たなくてはならない。各提示に対するPROGRAM−ID値は、変形プレイリスト内で固有のものでなくてはならない。
EXT−X−STREAM−INFタグがCODECS属性を含む場合、属性値は、プレイリストファイルに現れる又は現れることになるいずれの媒体ファイルにも存在する[RFC4281]によって定義されたいずれかのフォーマットを含まなくてはならない。
サーバは、変形ストリームを生成する時に以下の制約を満足させなくてはならない。
各変形ストリームは、ストリーム不連続性を含む同じコンテンツを提示する。
各変形プレイリストファイルは、同じターゲット持続時間を持たなくてはならない。
1つの変形プレイリストファイルに現れるが別の変形プレイリストファイルには現れないコンテンツは、プレイリストファイルの始め又は最後のいずれかに現れなくてはならず、ターゲット持続時間よりも長くてはならない。
変形ストリームにおける適合コンテンツは、適合タイムスタンプを持たなくてはならない。それによってクライアントはストリームを同期することができる。
エレメンタリオーディオストリームファイルは、「com.apple.streaming.transportStreamTimestamp」の所有者識別子を有するID3PRIVタグ[ID3]を先頭に追加することによってファイルの第1のサンプルのタイムスタンプを信号送信すべきである。バイナリデータは、ゼロに設定された上限31ビットを有するビッグエンディアン8オクテット数として表現される33ビットMPEG−2プログラム基本ストリームタイムスタンプでなくてはならない。
更に、全ての変形ストリームは、同じ符号化オーディオビットストリームを含むべきである。それによってクライアントは可聴グリッチングなしにストリーム間で切り換えることができる。
6.3.クライアント処理
6.3.1.序文
クライアントがどのようにプレイリストファイルへのURIを取得するかは、本文書の範囲外であり、これは、行われたと仮定する。
クライアントは、URIからプレイリストファイルを取得すべきである。このように得られたプレイリストファイルが変形プレイリストである場合、クライアントは変形プレイリストからプレイリストファイルを取得すべきである。
本文書は、クライアントによる変形ストリームの処理を指定しない。
6.3.2.プレイリストファイルのローディング
プレイリストファイルがプレイリストURIからロード又はリロードされる度に:
クライアントは、プレイリストファイルがEXTM3Uタグから始まること、及びEXT−X−VERSIONタグが存在するとすれば、クライアントによってサポートされるプロトコルバージョンを指定することを保証しなくてならない;存在しない場合には、クライアントは、プレイリストを使用しようとしてはならない。
クライアントは、認識していないいずれのタグ及び属性も無視すべきである。
クライアントは、段落6.3.5に説明するようにロードする次の媒体ファイルを判断すべきである。
プレイリストがEXT−X−MEDIA−SEQUENCEタグを含む場合、クライアントは、ロードされたプレイリストファイルにプレイリストファイルの持続時間を加えた時間に各媒体ファイルが利用できなくなることを仮定すべきである。プレイリストファイルの持続時間は、その中の媒体ファイルの持続時間の和である。
6.3.3.プレイリストファイルの再生
クライアントは、再生が開始された時にプレイリストから最初に再生する媒体ファイルを選択すべきである。EXT−X−ENDLISTタグが存在せず、クライアントが定期的に(すなわち、公称再生速度のプレイリスト順序で)再生することが想定されている場合、クライアントは、プレイリストファイルの最後から3ターゲット持続時間未満に始まるファイルを選択すべきではない。これを行うことで、再生停止を起こすことがある。
定期的再生を達成するために、媒体ファイルは、プレイリストファイルに出現する順序で再生すべきである。クライアントは、定期的再生、ランダムアクセス、及び(trick modes)を含むクライアントが望むいずれの方法でも利用可能な媒体を提示することができる。
クライアントは、EXT−X−DISCONTINUITYタグが前に付いている媒体ファイルを再生する前にそのパーサー及び復号器のリセットを準備しておかなくてはならない。
クライアントは、待ち時間及び処理量における一時的変動を補償するために、中断されない再生に対して媒体ファイルが要求される時に予め媒体ファイルをロードすることを試みるべきである。
プレイリストファイルがEXT−X−ALLOW−CACHEタグを含み、その値がNOである場合、クライアントは、再生された後にダウンロードされた媒体ファイルをキャッシュに入れてはならない。それ以外は、クライアントは後のリプレイのためにダウンロードされた媒体ファイルを無期限にキャッシュに入れることができる。
クライアントは、プログラム開始時間をユーザに表示するためにEXT−X−PROGRAM−DATE−TIMEタグの値を使用することができる。値が時間帯情報を含む場合、クライアントは、考慮に入れるべきであろうが、含まない場合、クライアントは、開始時間帯を推測してはならない。
クライアントは、EXT−X−PROGRAM−DATE−TIMEタグの値の精度又は一貫性に依存してはならない。
6.3.4.プレイリストファイルのリローディング
クライアントは、プレイリストファイルがEXT−X−ENDLISTタグを含まない限りプレイリストファイルを定期的にリロードすべきである。
しかし、クライアントは、この段落によって指定されるよりも頻繁にプレイリストファイルをリロードしようとしてはならない。
クライアントが初めてプレイリストファイルをロードするか又はプレイリストファイルをリロードし最後にロードされてから変化したことを見つけた時に、クライアントは、プレイリストファイルを再度リロードしようとする前にある時間待たなくてはならない。この期間は、初期最小リロード遅延と呼ぶ。これは、クライアントがプレイリストファイルのローディングを開始した時間から測定される。
初期最小リロード遅延は、プレイリストにおける最後の媒体ファイルの持続時間である。媒体ファイル持続時間は、EXTINFタグによって指定される。
クライアントがプレイリストファイルをリロードして変化しなかったことを見つけた場合、リトライの前にある時間にわたって待たなくてはならない。最小遅延は、ターゲット持続時間の倍数である。この倍数は、第1の試みに対して0.5、第2に対して1.5、及びその後は3.0である。
サーバロードを低減するために、クライアントは、現在再生されていない変形ストリームのプレイリストファイルをリロードすべきではない。異なる変形に再生を切り換えると判断した場合、古い変形のプレイリストのリロードを中止して新しい変形のプレイリストのロードを開始すべきである。クライアントは、対応する媒体の大体のロケーションを判断するために、EXTINF持続時間及び段落6.2.4の制約を使用することができる。新しい変形からの媒体がロードされた状態で、古い時系列と新しい時系列を正確に同期させるために媒体ファイルのタイムスタンプを使用することができる。
6.3.5.ロードする次のファイルの判断
クライアントは、ロードする次の媒体ファイルを判断するために、ロード又はリロードされる度にプレイリストファイルを調べなければならない。
ロードする第1のファイルは、段落6.3.3で説明するように、クライアントが最初に再生することを選択したファイルでなくてはならない。
再生される第1のファイルがロードされており、プレイリストファイルがEXT−X−MEDIA−SEQUENCEタグを含まない場合、クライアントは、現在のプレイリストファイルが、それが本質的に見出されたオフセットでの最後のロードされた媒体ファイルのURIを含むことを検証しなければならず、含まない場合は再生を停止する。ロードされる次の媒体ファイルは、プレイリストにおける最後にロードされたURIに続く第1の媒体ファイルURIでなければならない。
再生される第1のファイルがロードされており、プレイリストファイルがEXT−X−MEDIA−SEQUENCEタグを含む場合、ロードされる次の媒体ファイルは、ロードされた最後の媒体ファイルのシーケンス番号よりも大きい最低シーケンス番号を有する媒体ファイルにすべきである。
6.3.6.暗号化された媒体ファイルの解読
プレイリストファイルが、キーファイルURLを指定するEXT−X−KEYタグを含む場合、別のEXT−X−KEYタグに遭遇するまで、クライアントは、EXT−X−KEYタグに続く全ての媒体ファイルを解読するために、そのキーファイルを取得してその内側のキーを使用すべきである。
暗号化方法がAES−128である場合、AES−128CBC解読が個々の媒体ファイルに適用されるべきである。ファイル全体が、解読されなければならない。暗号ブロック連鎖は、媒体ファイルにわたって適用してはならない。解読のために使用されるIVは、段落5.2に説明するように、媒体ファイルのシーケンス番号又はEXT−X−KEYタグのIV属性の値のいずれかにすべきである。
暗号化方法がNONEである場合、クライアントは、別のEXT−X−KEYタグに遭遇するまでクリアテキスト(暗号化されていない)としてEXT−X−KEYタグに続く全ての媒体ファイルを扱わなければならない。
7.プロトコルバージョン互換性
クライアント及びサーバは、使用すべきプロトコルバージョン2又はそれよりも高いバージョンを実施すべきである。
・EXT−X−KEYタグのIV属性。
クライアント及びサーバは、使用すべきプロトコルバーション3又はそれよりも高いバージョンを実施すべきである。
・浮動小数点EXTINF持続時間値。
8.実施例
8.1.序文
この段落は、いくつかの例示的なプレイリストファイルを含む。
8.2.単純なプレイリストファイル
#EXTM3U
#EXT−X−TARGETDURATION:5220
#EXTINF:5220、
http://media.example.com/entire.ts
#EXT−X−ENDLIST
8.3.HTTPSを使用したスライディングウィンドウプレイリスト
#EXTM3U
#EXT−X−TARGETDURATION:8
#EXT−X−MEDIA−SEQUENCE:2680
#EXTINF:8、
https://priv.example.com/fileSequence2680.ts
#EXTINF:8、
https://priv.example.com/fileSequence2681.ts
#EXTINF:8、
https://priv.example.com/fileSequence2682.ts
8.4.暗号化媒体ファイルを備えたプレイリストファイル
#EXTM3U
#EXT−X−MEDIA−SEQUENCE:7794
#EXT−X−TARGETDURATION:15
#EXT−X−KEY:METHOD=AES−
128、URI=「https://priv.example.com/key.php?r=52」
#EXTINF:15、
http://media.example.com/fileSequence52−1.ts
#EXTINF:15、
http://media.example.com/fileSequence52−2.ts
#EXTINF:15、
http://media.example.com/fileSequence52−3.ts
#EXT−X−KEY:METHOD=AES−
128、URI=「https://priv.example.com/key.php?r=53」
#EXTINF:15、
http://media.example.com/fileSequence53−1.ts
8.5.変形プレイリストファイル
#EXTM3U
#EXT−X−STREAM−INF:PROGRAM−ID=1、BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1、BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1、BANDWIDTH=7680000
http://example.com/hi.m3u8
#EXT−X−STREAM−INF:PROGRAM−ID=1、BANDWIDTH=650000、CODECS=「mp4a.40.5」
http://example.com/audio−only.m3u8
9.セキュリティ配慮
プロトコルは、一般的にデータを転送するためにHTTPを使用するので、同じセキュリティ配慮の多くが適用される。RFC2616[RFC2616]の段落15を参照されたい。
媒体ファイルパーサーは、典型的に「曖昧」攻撃を受けやすい。クライアントは、準拠しないファイルが拒否されるように、サーバから受信したファイルを構文解析する時に注意すべきである。
プレイリストファイルは、クライアントが任意のエンティティのネットワーク要求を実行するために使用するURIを含む。クライアントは、バッファオーバフローを防ぐために、応答をレンジチェックすべきである。RFC3986[RFC3986]のセキュリティ配慮の段落を参照されたい。
クライアントは、サービス拒絶攻撃に寄与しないようにURIによって識別されたリソースをレイジーにロードすべきである。
HTTP要求は、プライベートユーザデータを含む場合があるセッション状態「クッキー」を含むことが多い。実施は、RFC2965[RFC2965]によって指定されたクッキー制約及び満了規則に従わなければならない。RFC2965のセキュリティ配慮の段落、及びRFC2964[RFC2964]を参照されたい。
暗号化キーは、URIによって指定される。これらのキーの配信は、セキュアアドレス体系又はセッションクッキーと共にTLS[RFC5246](公式にはSSL)を通じたHTTPのような機構によって守られるべきである。
10.参考文献
10.1.標準参考文献
[AES_128] 米国商務省標準技術局、「最新暗号化基準(AES)、FIPS PUB197」、2001年11月、
<http://csrc.nist.gov/publications/fips/fips197/fips−197.pdf
<http://csrc.nist.gov/publications/fips/fips197/fips−197.pdf≫。
[ISO_13818] 国際標準化機構、「ISO/IEC国際規格13818;ビデオ及び関連オーディオ情報の一般的な符号化」、2007年10月、
<http://www.iso.org/iso/catalogue detail?csnumber=44169>。
[ISO_8601] 国際標準化機構、「ISO/IEC国際規格8601:2004;データ要素及び交換フォーマット−情報交換−日付及び時間の表示」、2004年12月、
<http://www.iso.org/iso/catalogue detail?csnumber=40874>。
[RFC2046] Freed、N.及びN.Borenstein、「多目的インターネットメール拡張(MIME)パートII:媒体タイプ」、RFC2046、1996年11月。
[RFC2119] Bradner、S.、「要件レベルを示すためにRFCで使用されるキーワード」、BCP14、RFC2119、1997年3月。
[RFC2616] Fielding、R.、Gettys、J.、Mogul、J.、Frystyk、H.、Masinter、L.、Leach、P.、及びT.Berners−Lee、「ハイパーテキスト転送プロトコル−HTTP/1.1」、RFC2616、1999年6月。
[RFC2964] Moore、K.及びN.Freed、「HTTP状態管理の使用」、BCP44、RFC2964、2000年10月。
[RFC2965] Kristol、D.及びL.Montulli、「HTTP状態管理機構」、RFC2965、2000年10月。
[RFC3629] Yergeau、F.、「UTF−8、ISO10646の変換フォーマット」、STD63、RFC3629、2003年11月。
[RFC3986] Berners−Lee、T.、Fielding、R.、及びL.Masinter、「ユニフォームリソース識別子(URI):一般的な構文」、STD66、RFC3986、2005年1月。
[RFC4281] Gellens、R.、Singer、D.、及びP.Frojdh、「“バケット”媒体タイプのためのコーデックパラメータ」、RFC4281、2005年11月。
[RFC5246] Dierks、T.及びE.Rescorla、「トランスポート層セキュリティ(TLS)プロトコルバージョン1.2」RFC5246、2008年8月。
[RFC5652] Housley、R.、「暗号化メッセージ構文(CMS)」、STD70、RFC5652、2009年9月。
[US_ASCII] 米国規格協会、「ANSI X3.4−1986、情報システム−情報交換のための符号化文字セット7ビット米国規格コード(7ビットASCII)」、1986年12月。
10.2.情報参考文献
[ID3] ID3.org<HTTP://ID3.org/>、「ID3オーディオファイルデータタグ付けフォーマット」、
<http://www.id3.org/Developer Information>。
[M3U] Nullsoft、Inc.、「Winap媒体プレーヤのために最初に発明されたM3Uプレイリストフォーマット」、
<http://wikipedia.org/wiki/M3U>。