本開示の技法は、一般に、国際標準化機構(ISO)ベースメディアファイルフォーマットと、ISOベースメディアファイルフォーマットの拡張とを向上させることを対象とする。ISOベースメディアファイルフォーマットの拡張は、たとえば、アドバンストビデオコーディング(AVC)、スケーラブルビデオコーディング(SVC:scalable video coding)、マルチビュービデオコーディング(MVC:multiview video coding)、および第3世代パートナーシッププロジェクト(3GPP:Third Generation Partnership Project)ファイルフォーマットを含む。概して、本開示の技法は、ISOベースメディアファイルフォーマットおよび/またはISOベースメディアファイルフォーマットの拡張でメディアエクストラクタトラックを生成するために使用され得る。以下でより詳細に説明するように、そのようなメディアエクストラクタトラックは、いくつかの例では、ハイパーテキストトランスポートプロトコル(HTTP)ビデオストリーミングにおける適応をサポートするために使用され得る。いくつかの例では、メディアエクストラクタは、新しいメディアエクストラクタトラックを形成するための別のトラックのサンプル全体を抽出するために、ISOベースメディアファイルフォーマットおよび/またはISOベースメディアファイルフォーマットの拡張(たとえば、AVC、SVC、MVC、および3GPP)の一部を形成する。
これらの技法は、MPEG−2(Motion Picture Experts Group)システム、すなわち、トランスポートレベル細部に関してMPEG−2に準拠するシステムによって使用され得る。MPEG−4は、たとえば、ビデオ符号化のための規格を与えるが、概して、MPEG−4規格に準拠するビデオエンコーダはMPEG−2トランスポートレベルシステムを利用すると仮定する。したがって、本開示の技法は、MPEG−2、MPEG−4、ITU−T H.263、ITU−T H.264/MPEG−4、あるいはMPEG−2トランスポートストリームおよび/またはプログラムストリームを利用する任意の他のビデオ符号化規格に準拠するビデオエンコーダに適用可能である。
ISOベースメディアファイルフォーマットは、1つまたは複数のトラックを含むファイルを規定している。ISOベースメディアファイルフォーマット規格は、関連するサンプルの時限シーケンスとしてトラックを定義している。ISOベースメディアファイルフォーマット規格は、単一のタイムスタンプに関連するデータとしてサンプルを定義し、ビデオの個々のフレーム、復号順序での一連のビデオフレーム、または復号順序でのオーディオの圧縮セクションとしてサンプルの例を与えている。ヒントトラックと呼ばれる特殊なトラックは、メディアデータを含んでいないが、代わりに1つまたは複数のトラックをストリーミングチャネルにパッケージングするための命令を含んでいる。ISOベースメディアファイルフォーマット規格は、ヒントトラックにおいて、サンプルが1つまたは複数のストリーミングパケットの形成を定義することに言及している。
本開示の技法は、メディアエクストラクタトラックの生成を可能にする。メディアエクストラクタトラックは、概して1つまたは複数のエクストラクタを含み得る。メディアエクストラクタトラック中のエクストラクタは、別のトラックのサンプルを識別し、抽出するために使用される。このようにして、メディアエクストラクタトラック中のメディアエクストラクタは、デリファレンスされたときに、別のトラックからサンプルを検索するポインタと考えられ得る。SVCのエクストラクタとは異なり、たとえば、本開示のエクストラクタは、別のトラックの1つまたは複数の潜在的な非連続ネットワークアクセスレイヤ(NAL)ユニットを参照することができる。本開示の技法によれば、代替グループを形成するために、メディアエクストラクタトラック、1つまたは複数のメディアエクストラクタを含んでいるトラック、およびメディアエクストラクタを含まない他のトラックが互いにグループ化され得る。
本開示では、同じトラック中で連続して発生する2つ以上のNALユニットを説明するために、NALユニットに関して「連続する」という用語を使用する。すなわち、2つのNALユニットが連続するとき、そのNALユニットのうちの1つにおけるデータの最後のバイトは、同じトラック中の別のNALユニットのデータの第1のバイトの直前にくる。同じアクセスユニット中の2つのNALユニットは、概して、2つのNALユニットが同じトラック内で、あるデータ量だけ分離されている場合、または一方のNALユニットが1つのトラック中に発生し、他方のNALユニットが異なるトラック中に発生する場合のいずれかにおいて、「非連続である」と考えられる。本開示の技法は、アクセスユニットの2つ以上の非連続NALユニットを識別し得るエクストラクタを提供する。
その上、本開示のエクストラクタは、SVCに限定されないが、概してISOベースメディアファイルフォーマット、または、たとえば、AVC、SVC、またはMVCなどのISOベースメディアファイルフォーマットの他の拡張中に含まれ得る。本開示のエクストラクタはまた、第3世代パートナーシッププロジェクト(3GPP)ファイルフォーマット中に含まれ得る。本開示は、さらに、トラック選択ボックスの属性としてフレームレートを明示的にシグナリングするために、3GPPファイルフォーマットを変更することを可能にする。
メディアエクストラクタトラックは、たとえば、動作点の抽出をサポートするためにMVCファイルフォーマット中で使用され得る。サーバデバイスは、MPEG−2トランスポートレイヤビットストリーム中に様々な動作点を与え得、その各々はマルチビュービデオコーディングビデオデータの特定のビューのそれぞれのサブセットに対応する。すなわち、動作点は、概して、ビットストリームのビューのサブセットに対応する。いくつかの例では、動作点の各ビューは、同じフレームレートのビデオデータを含む。本開示の技法によれば、動作点は、他のトラックのビデオデータと、他のトラック中に含まれない潜在的に追加のサンプルとを参照する1つまたは複数のエクストラクタを含むメディアエクストラクタトラックを使用して表され得る。
このようにして、各動作点は、共通のフレームレートをもつビューのサブセットを出力するために、動作点を復号するために要求される必要なNALユニットのみを含み得る。エクストラクタトラックとMVCビデオの全表現との組合せは、MVC表現のプレイリストを形成し得る。本開示のメディアエクストラクタトラックの使用は、たとえば、様々なビットレートが時間スケーラビリティから生じる動作点について、動作点選択およびスイッチングをサポートし得る。
また、本開示のメディアエクストラクタトラックは、代替グループまたはスイッチグループを形成するために使用され得る。すなわち、ISOベースメディアファイルフォーマットでは、代替グループを形成するために、トラックが互いにグループ化され得る。ISOベースメディアファイルフォーマットの例では、代替グループのトラックは、概して、いつでも代替グループのトラックのうちの1つしか再生またはストリーミングされないように、互いの存立可能な代替を形成する。代替グループのトラックは、たとえば、ビットレート、コーデック、言語、パケットサイズ、または他の特性などの属性を介して、代替グループの他のトラックとは区別可能であるべきである。本開示の技法は、代替グループを形成するために、メディアエクストラクタトラック、メディアエクストラクタを含んでいるトラック、および/または他の通常のビデオトラックをグループ化することを可能にする。MVCに準拠する例では、各トラックはそれぞれの動作点に対応し得る。すなわち、MVCにおける各動作点は、トラックのうちの特定の1つ、たとえば、メディアエクストラクタトラック、またはメディアエクストラクタを含まないトラックのいずれかによって表され得る。同じ代替グループ中の1つのトラックは、一般に、利用可能な帯域幅に適応するために、プログレッシブダウンロードのために選択される。
同様に、メディアエクストラクタトラックおよび他のトラックは、3GPPファイルフォーマットでのスイッチグループを形成するために互いにグループ化され得、HTTPストリーミングアプリケーションにおいて帯域幅とデコーダ能力とを適応するためのトラック選択のために使用され得る。3GPPファイルフォーマットは、トラックのスイッチグループの定義を与える。スイッチグループ中のトラックは同じ代替グループに属する。すなわち、3GPPファイルフォーマットによれば、同じスイッチグループ中のトラックは、セッション中に切り替えるために利用可能であるが、異なるスイッチグループ中のトラックは、切り替えるために利用可能ではない。
図1は、オーディオ/ビデオ(A/V)ソースデバイス20がオーディオおよびビデオデータをA/V宛先デバイス40にトランスポートする例示的なシステム10を示すブロック図である。A/Vソースデバイス20は「ソースビデオデバイス」と呼ばれることもある。図1のシステム10は、ビデオ通信会議システム、サーバ/クライアントシステム、放送事業者/受信機システム、またはA/Vソースデバイス20などのソースデバイスからA/V宛先デバイス40などの宛先デバイスにビデオデータが送られる任意の他のシステムに対応し得る。A/V宛先デバイス40は、「宛先ビデオデバイス」または「クライアントデバイス」と呼ばれることもある。いくつかの例では、A/Vソースデバイス20およびA/V宛先デバイス40は双方向情報交換を実行し得る。すなわち、A/Vソースデバイス20およびA/V宛先デバイス40は、オーディオおよびビデオデータの符号化と復号(および、送信と受信)の両方が可能であり得る。いくつかの例では、オーディオエンコーダ26は、ボコーダとも呼ばれるボイスエンコーダを備え得る。
A/Vソースデバイス20は、図1の例では、オーディオソース22とビデオソース24とを備える。オーディオソース22は、たとえば、オーディオエンコーダ26によって符号化されるべき、キャプチャされたオーディオデータを表す電気信号を生成するマイクロフォンを備え得る。代替的に、オーディオソース22は、前に記録されたオーディオデータを記憶する記憶媒体、コンピュータシンセサイザなどのオーディオデータジェネレータ、またはオーディオデータの任意の他のソースを備え得る。ビデオソース24は、ビデオエンコーダ28によって符号化されるべきビデオデータを生成するビデオカメラ、前に記録されたビデオデータで符号化された記憶媒体、ビデオデータ生成ユニット、またはビデオデータの任意の他のソースを備え得る。
未加工オーディオおよびビデオデータは、アナログまたはデジタルデータを備え得る。アナログデータは、オーディオエンコーダ26および/またはビデオエンコーダ28によって符号化される前にデジタル化され得る。オーディオソース22は、通話参加者が話している間、通話参加者からオーディオデータを取得し得、同時に、ビデオソース24は、通話参加者のビデオデータを取得し得る。他の例では、オーディオソース22は、記憶されたオーディオデータを備えるコンピュータ可読記憶媒体を備え得、ビデオソース24は、記憶されたビデオデータを備えるコンピュータ可読記憶媒体を備え得る。このようにして、本開示で説明する技法は、ライブ、ストリーミング、リアルタイムオーディオおよびビデオデータ、またはアーカイブされた、あらかじめ記録されたオーディオおよびビデオデータに適用され得る。
ビデオフレームに対応するオーディオフレームは、概して、ビデオフレーム内に含まれている、ビデオソース24によってキャプチャされたビデオデータと同時にオーディオソース22によってキャプチャされたオーディオデータを含んでいるオーディオフレームである。たとえば、通話参加者が概して話すことによってオーディオデータを生成する間、オーディオソース22はオーディオデータをキャプチャし、同時に、すなわちオーディオソース22がオーディオデータをキャプチャしている間、ビデオソース24は通話参加者のビデオデータをキャプチャする。したがって、オーディオフレームは、1つまたは複数の特定のビデオフレームに時間的に対応し得る。したがって、ビデオフレームに対応するオーディオフレームは、概して、オーディオデータとビデオデータとが同時にキャプチャされる状況、およびオーディオフレームとビデオフレームとが、それぞれ、同時にキャプチャされたオーディオデータとビデオデータとを備える状況に対応する。
いくつかの例では、オーディオエンコーダ26は、符号化オーディオフレームのオーディオデータが記録された時間を表す、各符号化オーディオフレームにおけるタイムスタンプを符号化し得、同様に、ビデオエンコーダ28は、符号化ビデオフレームのビデオデータが記録された時間を表す、各符号化ビデオフレームにおけるタイムスタンプを符号化し得る。そのような例では、ビデオフレームに対応するオーディオフレームは、タイムスタンプを備えるオーディオフレームと同じタイムスタンプを備えるビデオフレームとを備え得る。A/Vソースデバイス20は、オーディオエンコーダ26および/またはビデオエンコーダ28がそこからタイムスタンプを生成し得るか、あるいはオーディオソース22およびビデオソース24がオーディオおよびビデオデータをそれぞれタイムスタンプに関連付けるために使用し得る、内部クロックを含み得る。
いくつかの例では、オーディオソース22は、オーディオデータが記録された時間に対応するデータをオーディオエンコーダ26に送り得、ビデオソース24は、ビデオデータが記録された時間に対応するデータをビデオエンコーダ28に送り得る。いくつかの例では、オーディオエンコーダ26は、必ずしもオーディオデータが記録された絶対時刻を示すことなしに、符号化されたオーディオデータの相対的時間順序を示すために、符号化されたオーディオデータ中のシーケンス識別子を符号化し得、同様に、ビデオエンコーダ28も、符号化されたビデオデータの相対的時間順序を示すためにシーケンス識別子を使用し得る。同様に、いくつかの例では、シーケンス識別子は、タイムスタンプにマッピングされるか、または場合によってはタイムスタンプと相関し得る。
本開示の技法は、概して、符号化マルチメディア(たとえば、オーディオおよびビデオ)データのトランスポートと、トランスポートされたマルチメディアデータの受信ならびに後続の解釈および復号とを対象とする。本開示の技法は、たとえば、スケーラブルビデオコーディング(SVC)、アドバンストビデオコーディング(AVC)、OSIベースレイヤ、あるいはマルチビュービデオコーディング(MVC)データ、または複数のビューを備える他のビデオデータなど、様々な規格および拡張のビデオデータのトランスポートに適用され得る。図1の例に示すように、ビデオソース24はシーンの複数のビューをビデオエンコーダ28に与え得る。ビデオデータの複数のビューは、立体視または自動立体視3次元ディスプレイなど、3次元ディスプレイによって使用されるべき3次元ビデオデータを生成するために有用であり得る。
A/Vソースデバイス20は、A/V宛先デバイス40に「サービス」を提供し得る。サービスは、概して、MVCデータの利用可能なビューのサブセットに対応する。たとえば、マルチビュービデオデータは、0から7まで順序付けられた8つのビューについて利用可能であり得る。1つのサービスは2つビューを有するステレオビデオに対応し得るが、別のサービスは4つのビューに対応し得、さらに別のサービスは8つのビューすべてに対応し得る。概して、サービスは、利用可能なビューの任意の組合せ(すなわち、任意のサブセット)に対応する。サービスはまた、利用可能なビューならびにオーディオデータの組合せに対応し得る。
A/Vソースデバイス20は、本開示の技法に従って、ビューのサブセットに対応するサービスを提供することができる。概して、ビューは、「view_id」とも呼ばれるビュー識別子によって表される。ビュー識別子は、概して、ビューを識別するために使用され得るシンタックス要素を備える。ビューが符号化されるとき、MVCエンコーダはビューのview_idを与える。view_idは、MVCデコーダによってビュー間予測(inter-view prediction)のために使用されるか、または他のユニットによって他の目的、たとえばレンダリングのために使用され得る。
ビュー間予測は、フレームのMVCビデオデータを、共通の時間ロケーションにおける1つまたは複数のフレームを参照して、異なるビューの符号化フレームとして符号化するための技法である。以下でさらに詳細に説明する図7は、ビュー間予測のための例示的なコーディング方式を与えている。概して、MVCビデオデータの符号化フレームは、空間的に、時間的に、および/または共通の時間ロケーションにおける他のビューのフレームを参照して、予測符号化され得る。したがって、他のビューがそこから予測される参照ビューは、概して、参照ビューを復号するときに、復号された参照ビューが参照のために使用され得るように、参照ビューが参照として働くビューの前に復号される。復号順序は必ずしもview_idの順序に対応しない。したがって、ビューの復号順序はビュー順序インデックスを使用して記述される。ビュー順序インデックスは、アクセスユニット中の対応するビュー構成要素の復号順序を示すインデックスである。
各個のデータストリームは(オーディオかビデオかにかかわらず)エレメンタリーストリームと呼ばれる。エレメンタリーストリームは、デジタル的にコード化された(場合によっては圧縮された)プログラムの単一の構成要素である。たとえば、プログラムのコード化ビデオまたはオーディオ部分はエレメンタリーストリームであり得る。エレメンタリーストリームは、プログラムストリームまたはトランスポートストリームに多重化される前に、パケット化エレメンタリーストリーム(PES)に変換され得る。同じプログラム内では、1つのエレメンタリーストリームに属するPESパケットを他のものから区別するためにストリームIDが使用される。エレメンタリーストリームの基本データ単位はパケット化エレメンタリーストリーム(PES)パケットである。したがって、MVCビデオデータの各ビューはそれぞれのエレメンタリーストリームに対応する。同様に、オーディオデータは1つまたは複数のそれぞれのエレメンタリーストリームに対応する。
MVCコード化ビデオシーケンスは、各々がエレメンタリーストリームであるいくつかのサブビットストリームに分離され得る。各サブビットストリームは、MVC view_idサブセットを使用して識別され得る。各MVC view_idサブセットの概念に基づいて、MVCビデオサブビットストリームが定義される。MVCビデオサブビットストリームは、MVC view_idサブセットに記載されているビューのNALユニットを含んでいる。プログラムストリームは、概して、エレメンタリーストリームのものであるNALユニットのみを含んでいる。それはまた、2つのエレメンタリーストリームが同じビューを含んでいることができないように設計されている。
図1の例では、マルチプレクサ30は、ビデオエンコーダ28からビデオデータを備えるエレメンタリーストリームを受信し、オーディオエンコーダ26からオーディオデータを備えるエレメンタリーストリームを受信する。いくつかの例では、ビデオエンコーダ28およびオーディオエンコーダ26はそれぞれ、符号化データからPESパケットを形成するためのパケッタイザを含み得る。他の例では、ビデオエンコーダ28およびオーディオエンコーダ26はそれぞれ、符号化データからPESパケットを形成するためのパケッタイザとインターフェースし得る。さらに他の例では、マルチプレクサ30は、符号化オーディオデータと符号化ビデオデータとからPESパケットを形成するためのパケッタイザを含み得る。
本開示で使用する「プログラム」は、オーディオデータとビデオデータの組合せ、たとえばA/Vソースデバイス20のサービスによって配信されたオーディオエレメンタリーストリームと利用可能なビューのサブセットとを備え得る。各PESパケットは、PESパケットが属するエレメンタリーストリームを識別するstream_idを含む。マルチプレクサ30は、エレメンタリーストリームを構成プログラムストリームまたはトランスポートストリームにアセンブルし得る。プログラムストリームとトランスポートストリームとは、異なるアプリケーションをターゲットにする2つの代替多重である。
概して、プログラムストリームは1つのプログラムのデータを含み、トランスポートストリームは1つまたは複数のプログラムのデータを含み得る。マルチプレクサ30は、提供されているサービス、ストリームが渡される媒体、送られるべきプログラムの数、または他の考慮事項に基づいて、プログラムストリームまたはトランスポートストリームのいずれかあるいは両方を符号化し得る。たとえば、記憶媒体中のビデオデータが符号化されるべきであるときは、マルチプレクサ30はプログラムストリームを形成する可能性がより高くなり得、ビデオデータがネットワークを介してストリーミングされるか、ブロードキャストされるか、またはビデオテレフォニーの一部として送られるべきであるときは、マルチプレクサ30はトランスポートストリームを使用する可能性がより高くなり得る。
マルチプレクサ30は、デジタルストレージサービスからの単一のプログラムの記憶および表示のためにプログラムストリームを使用することのほうを優先してバイアスされ得る。プログラムストリームはむしろ誤りが起こりやすいので、プログラムストリームは、誤りのない環境、または誤りがより起こりにくい環境での使用を対象とする。プログラムストリームは、それに属するエレメンタリーストリームを備えるにすぎず、通常、可変長さのパケットを含んでいる。プログラムストリームでは、寄与しているエレメンタリーストリームから導出されたPESパケットが「パック」に編成される。パックは、パックヘッダと、随意のシステムヘッダと、寄与しているエレメンタリーストリームのいずれかから取られる任意の数のPESパケットとを任意の順序で備える。システムヘッダは、プログラムストリームの最大データレート、寄与しているビデオおよびオーディオエレメンタリーストリームの数、さらなるタイミング情報、または他の情報など、プログラムストリームの特性の概要を含んでいる。デコーダは、デコーダがプログラムストリームを復号することが可能か否かを判断するために、システムヘッダ中に含まれている情報を使用し得る。
マルチプレクサ30は、潜在的に誤りを起こしやすいチャネルを介した複数のプログラムの同時配信のためにトランスポートストリームを使用し得る。トランスポートストリームは、単一のトランスポートストリームが多くの独立したプログラムに適応することができるように、ブロードキャストなどのマルチプログラムアプリケーションのために考案された多重である。トランスポートストリームはトランスポートパケットの連続を備え、トランスポートパケットの各々は長さ188バイトである。短い、固定長パケットの使用は、トランスポートストリームがプログラムストリームよりも誤りが起こりにくいことを意味する。さらに、各長さ188バイトのトランスポートパケットは、リードソロモン符号化などの標準誤り防止プロセスを通してパケットを処理することによって追加の誤り保護を与えられ得る。トランスポートストリームの誤り耐性の改善は、たとえば、ブロードキャスト環境において発見されるべき、誤りを起こしやすいチャネルを克服する可能性がより高いことを意味する。
トランスポートストリームは、その誤り耐性の向上と多くの同時プログラムを搬送する能力との2つの多重のうちのより良好な多重であるように見えることがある。ただし、トランスポートストリームは、プログラムストリームよりもさらに高度な多重であり、したがって、作成および多重分離することがより困難である。トランスポートパケットの最初のバイトは、0x47の値(16進値47、2進値「01000111」、10進値71)を有する同期バイトである。単一のトランスポートストリームは多くの異なるプログラムを搬送し得、各プログラムは多くのパケット化エレメンタリーストリームを備える。マルチプレクサ30は、1つのエレメンタリーストリームのデータを含んでいるトランスポートパケットを、他のエレメンタリーストリームのデータを搬送しているものと区別するために13ビットパケット識別子(PID)フィールドを使用し得る。各エレメンタリーストリームが一意のPID値を与えられることを保証することは、マルチプレクサの責任である。トランスポートパケットの最後のバイトは連続性カウントフィールドである。マルチプレクサ30は、同じエレメンタリーストリームに属する連続するトランスポートパケット間で連続性カウントフィールドの値を増分する。これは、A/V宛先デバイス40など、宛先デバイスのデコーダまたは他のユニットがトランスポートパケットの損失または利得を検出し、他の場合はそのようなイベントから生じ得る誤りを願わくは隠匿することを可能にする。
マルチプレクサ30は、オーディオエンコーダ26とビデオエンコーダ28とからプログラムのエレメンタリーストリームのPESパケットを受信し、PESパケットから対応するネットワークアブストラクションレイヤ(NAL)ユニットを形成する。H.264/AVC(アドバンストビデオコーディング)の例では、コード化ビデオセグメントは、ビデオテレフォニー、ストレージ、ブロードキャスト、またはストリーミングなどのアプリケーションに対処する「ネットワークフレンドリーな」ビデオ表現を与えるNALユニットに編成される。NALユニットは、Video Coding Layer(VCL)NALユニットと非VCL NALユニットとにカテゴリー分類され得る。VCLユニットは、コア圧縮エンジンを含んでおり、ブロック、マクロブロック、および/またはスライスレベルを備え得る。他のNALユニットは非VCL NALユニットである。
マルチプレクサ30は、NALが属するプログラムを識別するヘッダ、ならびにペイロード、たとえば、オーディオデータ、ビデオデータ、あるいはNALユニットが対応するトランスポートまたはプログラムストリームを記述するデータを備えるNALユニットを形成し得る。たとえば、H.264/AVCでは、NALユニットは1バイトのヘッダと変動するサイズのペイロードとを含み得る。一例では、NALユニットヘッダは、priority_id要素と、temporal_id要素と、anchor_pic_flag要素と、view_id要素と、non_idr_flag要素と、inter_view_flag要素とを備える。従来のMVCでは、4バイトMVC NALユニットヘッダとNALユニットペイロードとを含む、プレフィックスNALユニットとMVCコード化スライスNALユニットとを除いて、H.264によって定義されたNALユニットが保持される。
NALヘッダのpriority_id要素は、単純なワンパス(one-path)ビットストリーム適合プロセスのために使用され得る。temporal_id要素は、異なる時間レベルが異なるフレームレートに対応する場合、対応するNALユニットの時間レベルを指定するために使用され得る。
anchor_pic_flag要素は、ピクチャがアンカーピクチャであるか非アンカーピクチャであるかを示し得る。アンカーピクチャと出力順序(すなわち、表示順序)でそれに続くすべてのピクチャとは、復号順序(すなわち、ビットストリーム順序)で前のピクチャを復号することなしに正しく復号され得、したがってランダムアクセスポイントとして使用され得る。アンカーピクチャと非アンカーピクチャとは異なる依存性を有することができ、その両方はシーケンスパラメータセット中でシグナリングされる。他のフラグについては、本章の以下のセクションで説明され、使用される。そのようなアンカーピクチャはまた、開いたGOP(Group Of Pictures)アクセスポイントと呼ばれることもあり、non_idr_flag要素が0に等しいとき、閉じたGOPアクセスポイントもサポートされる。non_idr_flag要素は、ピクチャが瞬間デコーダリフレッシュ(IDR)であるかビューIDR(V−IDR)ピクチャであるかを示す。概して、IDRピクチャと出力順序またはビットストリーム順序でそれに続くすべてのピクチャとは、復号順序または表示順序で前のピクチャを復号することなしに正しく復号され得る。
view_id要素は、MVCデコーダ内でデータ対話性のために、たとえば、ビュー間予測のために、およびデコーダ外で、たとえば、レンダリングのために使用され得る、ビューを識別するために使用され得るシンタックス情報を備える。inter_view_flag要素は、対応するNALユニットが他のビューによってビュー間予測のために使用されるかどうかを指定し得る。AVCに準拠し得る、ベースビューの4バイトNALユニットヘッダ情報を搬送するために、MVCにおいてプレフィックスNALユニットが定義される。MVCのコンテキストにおいて、ベースビューアクセスユニットは、ビューの現在の時間インスタンスのVCL NALユニット、ならびにNALユニットヘッドのみを含んでいるプレフィックスNALユニットを含む。H.264/AVCデコーダはプレフィックスNALユニットを無視し得る。
そのペイロード中にビデオデータを含むNALユニットは、様々なグラニュラリティレベルのビデオデータを備え得る。たとえば、NALユニットは、ビデオデータのブロック、マクロブロック、複数のマクロブロック、ビデオデータのスライス、またはビデオデータのフレーム全体を備え得る。
概して、アクセスユニットは、ビデオデータのフレームを表すための1つまたは複数のNALユニット、ならびにそのフレームに対応するオーディオデータが利用可能なとき、そのようなオーディオデータを備え得る。アクセスユニットは、概して、1つの出力時間インスタンスにわたるすべてのNALユニット、たとえば1つの時間インスタンスにわたるすべてのオーディオおよびビデオデータを含む。H.264/AVCに対応する例では、アクセスユニットは、1次コード化ピクチャとして提示され得る、1つの時間インスタンス中のコード化ピクチャを備え得る。したがって、アクセスユニットは、共通の時間インスタンスのすべてのビデオフレーム、たとえば、時間Xに対応するすべてのビュー構成要素を備え得る。
本開示はまた、特定のビューの符号化ピクチャを「ビュー構成要素」と呼ぶ。すなわち、ビュー構成要素は、特定の時間における特定のビューの符号化ピクチャ(またはフレーム)を備える。したがって、アクセスユニットは、いくつかの例では、共通の時間インスタンスのすべてのビュー構成要素を備え得る。アクセスユニットの復号順序は、必ずしも出力または表示順序と同じである必要はない。連続するアクセスユニットのセットは、ピクチャグループ(GOP)またはNALユニットビットストリームまたはサブビットストリームの他の単独で復号可能な単位に対応し得る符号化ビデオシーケンスを形成し得る。
多くのビデオコーディング規格の場合と同様に、H.264/AVCは、誤りのないビットストリームのシンタックスと、セマンティクスと、復号プロセスとを定義し、そのいずれかは特定のプロファイルまたはレベルに準拠する。H.264/AVCはエンコーダを指定しないが、エンコーダは、生成されたビットストリームがデコーダの規格に準拠することを保証することを課される。ビデオコーディング規格のコンテキストにおいて、「プロファイル」は、アルゴリズム、機能、またはそれらに適用するツールおよび制約のサブセットに対応する。たとえば、H.264規格によって定義される「プロファイル」は、H.264規格によって指定されたビットストリームシンタックス全体のサブセットである。「レベル」は、たとえば、ピクチャの解像度、ビットレート、およびマクロブロック(MB)処理レートに関係するデコーダメモリおよび計算など、デコーダリソース消費の制限に対応する。
H.264規格は、たとえば、与えられたプロファイルのシンタックスによって課される限界内で、復号されたピクチャの指定されたサイズなど、ビットストリーム中のシンタックス要素がとる値に応じて、エンコーダおよびデコーダのパフォーマンスの大きい変動を必要とする可能性が依然としてあることを認識している。H.264規格は、多くのアプリケーションにおいて、特定のプロファイル内でシンタックスのすべての仮定的使用を処理することが可能なデコーダを実装することが実際的でもなく、経済的でもないことをさらに認識している。したがって、H.264規格は、ビットストリーム中のシンタックス要素の値に課せられた制約の指定されたセットとして「レベル」を定義している。これらの制約は、値に関する単純な限界であり得る。代替的に、これらの制約は、値の演算の組合せ(たとえば、ピクチャの幅×ピクチャ高さ×毎秒復号されるピクチャの数)に関する制約の形態をとり得る。H.264規格は、個別の実装形態が、サポートされるプロファイルごとに異なるレベルをサポートし得ることをさらに規定している。
プロファイルに準拠するデコーダは、通常、プロファイル中で定義されたすべての機能をサポートする。たとえば、コーディング機能として、Bピクチャコーディングは、H.264/AVCのベースラインプロファイルではサポートされず、H.264/AVCの他のプロファイルではサポートされる。レベルに準拠するデコーダは、レベルにおいて定義された制限を超えてリソースを必要としない任意のビットストリームを復号することが可能である必要がある。プロファイルおよびレベルの定義は、説明可能性のために役立ち得る。たとえば、ビデオ送信中に、プロファイル定義とレベル定義のペアが全送信セッションについてネゴシエートされ、同意され得る。より詳細には、H.264/AVCでは、レベルは、たとえば、処理する必要があるマクロブロックの数に関する制限と、復号されたピクチャバッファ(DPB)サイズと、コード化ピクチャバッファ(CPB)サイズと、垂直動きベクトル範囲と、2つの連続するMBごとの動きベクトルの最大数と、Bブロックが8×8ピクセル未満のサブマクロブロックパーティションを有することができるかどうかとを定義し得る。このようにして、デコーダは、デコーダがビットストリームを適切に復号することが可能であるかどうかを判断し得る。
パラメータセットは、概して、シーケンスパラメータセット(SPS)中のシーケンスレイヤヘッダ情報とピクチャパラメータセット(PPS)中のまれに変化するピクチャレイヤヘッダ情報とを含んでいる。パラメータセットがある場合、このまれに変化する情報をシーケンスごとまたはピクチャごとに繰り返す必要はなく、したがってコーディング効率が改善され得る。さらに、パラメータセットの使用はヘッダ情報の帯域外送信を可能にし得、誤り耐性を達成するために冗長送信の必要を回避する。帯域外送信では、他のNALユニットとは異なるチャネル上でパラメータセットNALユニットが送信される。
本開示の技法は、メディアエクストラクタトラック中にエクストラクタを含むことに関与する。本開示のエクストラクタは、共通のファイル中の別のトラックの2つ以上のNALユニットを参照し得る。すなわち、ファイルは、複数のNALユニットを有する第1のトラックと、第1のトラックの複数のNALユニットの2つ以上を識別するエクストラクタを含む第2のトラックとを含み得る。概して、エクストラクタにデマルチプレクサ38が遭遇したとき、デマルチプレクサ38が第1のトラックからエクストラクタによって識別されたNALユニットを検索し、それらのNALユニットをビデオデコーダ48に送り得るように、エクストラクタはポインタとして働き得る。エクストラクタを含むトラックは、メディアエクストラクタトラックと呼ばれることがある。本開示のエクストラクタは、様々なファイルフォーマット、たとえば、ISOベースメディアファイルフォーマット、スケーラブルビデオコーディング(SVC)ファイルフォーマット、アドバンストビデオコーディング(AVC)ファイルフォーマット、第3世代パートナーシッププロジェクト(3GPP)ファイルフォーマット、および/またはマルチビュービデオコーディング(MVC)ファイルフォーマットに準拠するファイル中に含まれ得る。
概して、ビデオファイルの様々なトラックはスイッチトラックとして使用され得る。すなわち、マルチプレクサ30は、様々なフレームレート、ディスプレイ能力、および/または復号能力をサポートするために様々なトラックを含み得る。たとえば、ビデオファイルがMVCファイルフォーマットに準拠するとき、各トラックは異なるMVC動作点を表し得る。したがって、デマルチプレクサ38は、NALユニットを検索すべきトラックのうちの1つを選択し、選択されたトラックのエクストラクタによって識別されるNALユニット以外の他のトラックのデータを廃棄するように構成され得る。すなわち、選択されたトラックが、別のトラックのNALユニットを参照するエクストラクタを含むとき、デマルチプレクサ38は他のトラックの参照されないNALユニットを廃棄する一方、参照されたNALユニットを抽出し得る。デマルチプレクサ38は、抽出されたNALユニットをビデオデコーダ48に送り得る。
メディアエクストラクタトラック中のエクストラクタを使用することによって、本開示の技法は、ビデオファイルの様々なトラック間の時間スケーラビリティを達成するために使用され得る。MPEG−1およびMPEG−2では、たとえば、B符号化ピクチャは、自然時間スケーラビリティを与える。MPEG−1またはMPEG−2に準拠するビデオファイルの第1のトラックは、I符号化ピクチャとP符号化ピクチャとB符号化ピクチャとの完全セットを含み得る。ビデオファイルの第2のトラックは、第1のトラックのI符号化ピクチャおよびP符号化ピクチャのみを参照する1つまたは複数のエクストラクタを含み得、B符号化ピクチャへの参照を省略する。B符号化ピクチャを欠落させることによって、ビデオファイルは、ハーフ解像度ビデオ表現を確認することを達成し得る。また、MPEG−1およびMPEG−2は、2つの時間レイヤをコーディングするベースレイヤおよびエンハンスメントレイヤ概念を与え、エンハンスメントレイヤピクチャは、各予測方向について、ベースレイヤまたはエンハンスメントレイヤのいずれかからピクチャを参照として選定することができる。
別の例として、H.264/AVCは、時間スケーラビリティをサポートするために階層B符号化ピクチャを使用する。H.264/AVCにおけるビデオシーケンスの第1のピクチャは、瞬間デコーダリフレッシュ(IDR:Instantaneous Decoder Refresh)ピクチャと呼ばれることがあり、キーピクチャとしても知られている。キーピクチャは、一般に規則的な間隔または不規則な間隔でコーディングされ、動き補償予測のための参照として前のキーピクチャを使用してイントラコード化またはインターコード化のいずれかでコード化される。ピクチャグループ(GOP)は、概して、キーピクチャと、そのキーピクチャと前のキーピクチャとの間に時間的に位置するすべてのピクチャとを含む。GOPは2つの部分に分割され得、一方はキーピクチャであり、他方は非キーピクチャを含む。非キーピクチャは、過去および将来からより低い時間レベルの最も近いピクチャである2つの参照ピクチャによって階層的に予測される。ピクチャの階層位置を示すために、時間識別子値が各ピクチャに割り当てられ得る。したがって、Nまでの時間識別子値をもつピクチャは、N−1までの時間識別子値をもつピクチャによって形成されたビデオセグメントのフレームレートの2倍のフレームレートをもつビデオセグメントを形成し得る。したがって、本開示の技法はまた、Nまでの時間識別子値をもつすべてのNALユニットを含む第1のトラックと、N−1までの時間識別子値をもつ第1のトラックのNALユニットを参照する1つまたは複数のエクストラクタを含む第2のトラックとを有することによって、H.264/AVCにおける時間スケーラビリティを達成するために使用され得る。
上記のように、本開示の技法は、ISOベースメディアファイルフォーマット、スケーラブルビデオコーディング(SVC)ファイルフォーマット、アドバンストビデオコーディング(AVC)ファイルフォーマット、第3世代パートナーシッププロジェクト(3GPP)ファイルフォーマット、および/またはマルチビュービデオコーディング(MVC)ファイルフォーマットのいずれかに準拠するビデオファイルに適用され得る。ISOベースメディアファイルフォーマットは、メディアの交換、管理、編集、および提示を可能にする、フレキシブルな、拡張可能なフォーマットでの提示のための時限メディア情報を含んでいるように設計されている。ISOベースメディアファイルフォーマット(ISO/IEC 14496−12:2004)は、時間ベースメディアファイルのための一般的な構造を定義するMPEG−4 Part−12において規定されている。それは、H.264/MPEG−4 AVCビデオ圧縮のサポートのために定義されたAVCファイルフォーマット(ISO/IEC 14496−15)、3GPPファイルフォーマット、SVCファイルフォーマット、およびMVCファイルフォーマットなど、ファミリー中の他のファイルフォーマットのための基礎として使用されている。3GPPファイルフォーマットおよびMVCファイルフォーマットは、AVCファイルフォーマットの拡張である。ISOベースメディアファイルフォーマットは、オーディオビジュアルプレゼンテーションなど、メディアデータの時限シーケンスのためのタイミング、構造、およびメディア情報を含んでいる。ファイル構造はオブジェクト指向である。ファイルは、極めて簡単に基本オブジェクトに分解され得、オブジェクトの構造はそれらのタイプから暗示される。
ISOベースメディアファイルフォーマットに準拠するファイルは、「ボックス」と呼ばれる一連のオブジェクトとして形成される。ISOベースメディアファイルフォーマットでのデータは、ボックス中に含まれており、ファイル内に他のデータはない。これは、特定のファイルフォーマットによって必要とされる初期シグナチャを含む。「ボックス」は、一意のタイプ識別子および長さによって定義されたオブジェクト指向ビルディングブロックである。一般に、プレゼンテーションは1つのファイル中に含まれており、メディアプレゼンテーションは自蔵式である。ムービーコンテナ(ムービーボックス)は、メディアのメタデータを含んでおり、ビデオおよびオーディオフレームは、メディアデータコンテナ中に含まれており、他のファイル中にあり得る。
プレゼンテーション(モーションシーケンス)は、いくつかのファイル中に含まれ得る。すべてのタイミングおよびフレーミング(位置およびサイズ)情報は、概してISOベースメディアファイル中にあり、補助ファイルは、本質的に任意のフォーマットを使用し得る。このプレゼンテーションは、プレゼンテーションを含んでいるシステムにとって「ローカル」であり得るか、またはネットワークまたは他のストリーム配信機構を介することがある。
ファイルは、論理構造と、時間構造と、物理構造とを有し得、これらの構造は結合される必要はない。ファイルの論理構造は、順に時間並列トラックのセットを含んでいるムービーであり得る。ファイルの時間構造は、トラックがサンプルのシーケンスを時間的に含んでいるということであり得、それらのシーケンスは、随意の編集リストによって全体的なムービーのタイムラインにマッピングされる。ファイルの物理構造は、論理、時間、および構造分解のために必要なデータをメディアデータサンプル自体から分離し得る。この構造情報はムービーボックスに集中され、場合によっては、ムービーフラグメントボックスによって時間的に拡張され得る。ムービーボックスは、サンプルの論理およびタイミング関係を記録し得、また、それらが位置するところへのポインタを含み得る。それらのポインタは、たとえば、URLによって参照される同じファイルまたは別のファイルへのポインタであり得る。
各メディアストリームは、そのメディアタイプ(オーディオ、ビデオなど)のための特殊なトラック中に含まれ得、さらに、サンプルエントリによってパラメータ化され得る。サンプルエントリは、正確なメディアタイプ(ストリームを復号するのに必要なデコーダのタイプ)の「名前」と、必要とされるそのデコーダの任意のパラメータ表示を含み得る。また、その名前は、4文字コード、たとえば、「moov」または「trak」の形態をとり得る。MPEG−4メディアについてだけでなく、このファイルフォーマットファミリーを使用する他の組織によって使用されるメディアタイプについても定義されたサンプルエントリフォーマットがある。
メタデータのサポートは、概して2つの形態をとる。第1に、時限メタデータは適切なトラックに記憶され、必要に応じて、その時限メタデータが記述しているメディアデータと同期され得る。第2に、ムービーまたは個々のトラックにアタッチされた非時限メタデータのための一般的なサポートがあり得る。構造サポートは、一般的であり、メディアデータの場合のように、そのファイルまたは別のファイル中の他の場所へのメタデータリソースのストレージを可能にする。さらに、これらのリソースは命名され、保護され得る。
ISOベースメディアファイルフォーマットでは、サンプルグルーピングは、1つのサンプルグループのメンバーになるように、トラック中のサンプルの各々を割り当てることである。サンプルグループ中のサンプルは、連続である必要はない。たとえば、AVCファイルフォーマットでH.264/AVCを提示するときに、1つの時間レベルでのビデオサンプルは、1つのサンプルグループにサンプリングされ得る。サンプルグループは、2つのデータ構造、SampleToGroupボックス(sbdp)とSampleGroupDescriptionボックスとによって表され得る。SampleToGroupボックスは、サンプルグループへのサンプルの割当てを表す。対応するグループのプロパティを記述するために、サンプルグループエントリごとにSampleGroupDescriptionボックスの1つのインスタンスがあり得る。
随意のメタデータトラックは、それの値がグループの他のメンバーとは異なり得る、それが有する「興味深い特性」(たとえば、それのビットレート、スクリーンサイズ、または言語)と各トラックをタグ付けするために使用され得る。トラック内のいくつかのサンプルは、特殊な特性を有し得るか、または個々に識別され得る。特性の一例は、同期ポイント(しばしばビデオIフレーム)である。これらのポイントは、各トラック中の特殊なテーブルによって識別され得る。より一般的には、トラックサンプル間の依存性の性質も、メタデータを使用して記録され得る。メタデータは、ちょうどビデオトラックのように一連のファイルフォーマットサンプルとして構造化され得る。そのようなトラックは、メタデータトラックと呼ばれることがある。各メタデータサンプルは、メタデータステートメントとして構造化され得る。対応するファイルフォーマットサンプルまたはそれの構成サンプルに関して尋ねられ得る様々な質問に対応する、様々な種類のステートメントがある。
メディアがストリーミングプロトコルを介して配信されるとき、メディアはそれがファイル中で表される形から変換されることを必要とし得る。これの一例は、メディアがリアルタイムプロトコル(RTP)を介して送信される場合である。ファイルでは、たとえば、ビデオの各フレームが、ファイルフォーマットサンプルとして連続して記憶される。RTPでは、これらのフレームをRTPパケット中に配置するために、使用されるコーデックに固有のパケット化ルールを順守しなければならない。実行時にそのようなパケット化を計算するように、ストリーミングサーバが構成され得る。ただし、ストリーミングサーバの支援のためのサポートがある。ヒントトラックと呼ばれる特殊なトラックがファイル中に配置され得る。
ヒントトラックは、特定のプロトコルの場合に、メディアトラックからどのようにパケットストリームを形成するかに関する、ストリーミングサーバのための一般的な命令を含んでいる。これらの命令の形態がメディア独立であるので、新しいコーデックが導入されたとき、サーバを修正する必要がないことがある。さらに、符号化および編集ソフトウェアは、ストリーミングサーバに気づいていないことがある。編集がファイル上で完了されると、ファイルにヒントトラックを追加するために、ストリーミングサーバ上にファイルを配置する前にヒンタ(hinter)と呼ばれる1個のソフトウェアが使用され得る。一例として、MP4ファイルフォーマット仕様においてRTPストリームについて定義されたヒントトラックフォーマットがある。
3GP(3GPPファイルフォーマット)は、3G UMTSマルチメディアサービスのために第3世代パートナーシッププロジェクト(3GPP)によって定義されたマルチメディアコンテナフォーマットである。それは、一般に3Gモバイルフォンおよび他の3G対応デバイス上で使用されるが、いくつかの2Gおよび4Gフォンおよびデバイス上でも再生され得る。3GPPファイルフォーマットは、ISOベースメディアファイルフォーマットに基づく。最新の3GPは、3GPP TS26.244、「Transparent end-to-end packet switched streaming service (PSS); 3GPP file format (3GP)」において規定されている。3GPPファイルフォーマットは、MPEG−4 Part2またはH.263またはMPEG−4 Part10(AVC/H.264)としてビデオストリームを記憶する。3GPPが、ISOベースメディアファイルフォーマット(MPEG−4 Part12)でのサンプルエントリおよびテンプレートフィールドの使用、ならびにコーデックが参照する新しいボックスを定義することを規定しているので、3GPPは、ISOベースメディアファイルフォーマットでのAMRおよびH.263コーデックの使用を可能にする。3GPファイル中のMPEG−4メディア固有情報のストレージのために、3GP仕様はMP4およびAVCファイルフォーマットを参照し、それらのフォーマットもISOベースメディアファイルフォーマットに基づく。MP4およびAVCファイルフォーマット仕様は、ISOベースメディアファイルフォーマットでMPEG−4コンテンツの使用を記述している。
SVCファイルフォーマットは、AVCファイルフォーマットの拡張として、エクストラクタおよびティアの新しい構造を有する。エクストラクタは、別のトラック中で等しい復号時間をもつサンプル中のビデオコーディングデータの位置およびサイズに関する情報を与えるポインタである。これは、コーディング領域中にトラック階層を直接構築することを可能にする。SVCにおけるエクストラクタトラックは、そこから実行時にデータを抽出する1つまたは複数の基本トラックにリンクされる。エクストラクタは、SVC拡張の場合、NALユニットヘッダをもつデリファレンス可能なポインタである。抽出のために使用されるトラックが、異なるフレームレートのビデオコーディングデータを含んでいる場合、エクストラクタはまた、トラック間の同期性を保証するための復号時間オフセットを含んでいる。実行時に、ストリームがビデオデコーダに受け渡される前に、エクストラクタはそれがポイントするデータと交換されなければならない。
SVCにおけるエクストラクタトラックは、ビデオコーディングトラックのように構造化されるので、そのエクストラクタトラックが必要とするサブセットを異なる形で表し得る。SVCエクストラクタトラックは、別のトラックからどのようにデータを抽出するかに関する命令のみを含んでいる。SVCファイルフォーマットでは、また、1つのレイヤ中のNALユニットをアグリゲータにアグリゲートすることを含む、サンプル内のNALユニットを1つのNALユニットとして互いにアグリゲートすることができるアグリゲータがある。SVCにおけるエクストラクタは、サンプルまたはアグリゲータからある範囲のバイトを抽出するか、またはただ1つのNALユニット全体であるが複数のNALユニットではない、特にサンプル中で連続していないものを抽出するように設計される。SVCファイルフォーマットでは、多くのビデオ動作点があり得る。ティアは、動作点のための1つまたは複数のトラック中のサンプルをグループ化するように設計される。
また、MVCファイルフォーマットは、エクストラクタトラックをサポートし、エクストラクタトラックは、あるフレームレートでのビューのサブセットである動作点を形成するために、異なるビューからNALユニットを抽出する。MVCエクストラクタトラックの設計は、SVCファイルフォーマットにおけるエクストラクタと同様である。ただし、代替グループを形成するためにMVCエクストラクタトラックを使用することはサポートされない。トラック選択をサポートするために、以下のMPEG提案、P.Frojdh、A.Norkin、およびC.Priddle、「File format sub-track selection and switching」、ISO/IEC JTC1/SC29/WG11 MPEG M16665、英国、ロンドンがMPEGに提案されている。この提案は、サブトラックレベルにおいて代替/スイッチグループ概念を可能にすることを試みている。
マップサンプルグループは、サンプルグループに対する拡張である。マップサンプルグループでは、(サンプルの)各グループエントリは、場合によっては、ビュー中のNALユニットを1つのNALユニットにアグリゲートした後の、実際にview_idへのマップである「groupID」についてのそれの記述を有する。言い換えれば、各サンプルグループエントリには、それの含んでいるビューがScalableNALUMapEntry値に記載されている。このサンプルグループエントリのgrouping_typeは「scnm」である。
プログレッシブダウンロードは、一般にHTTPプロトコルを使用する、サーバからクライアントへのデジタルメディアファイルの転送を説明するために使用される用語である。コンピュータから起動されたとき、ダウンロードが完了する前に消費者はメディアの再生を開始し得る。ストリーミングメディアとプログレッシブダウンロードとの間の主な違いは、どのようにデジタルメディアデータが受信され、デジタルメディアにアクセスしているエンドユーザデバイスによって記憶されるかにある。プログレッシブダウンロード再生が可能であるメディアプレーヤは、元のままである、ファイルのヘッダ中にあるメタデータと、ウェブサーバからダウンロードされたときのデジタルメディアファイルのローカルバッファとを利用する。指定されたデータ量がローカル再生デバイスに利用可能になるポイントにおいて、メディアは再生を開始する。この指定されたバッファ量は、エンコーダ設定においてコンテンツの製作者によってファイルに埋め込まれ、メディアプレーヤによって課される追加のバッファ設定によって補強される。
3GPPでは、ダウンロードおよびプログレッシブダウンロードのために3GPファイルについてHTTP/TCP/IPトランスポートがサポートされる。さらに、ビデオストリーミングのためにHTTPを使用することにはいくつかの利点があり、HTTPに基づくビデオストリーミングサービスが普及してきている。HTTPストリーミングのいくつかの利点は、既存のインターネット構成要素およびプロトコルが使用され得、それによりネットワークを介してビデオデータをトランスポートするための新しい技法を開発する新たな努力が必要でないことを含む。他のトランスポートプロトコル、たとえば、RTPペイロードフォーマットは、メディアフォーマットとシグナリングコンテキストとに気づくように、中間ネットワークデバイス、たとえば、中間ボックスを必要とする。また、HTTPストリーミングは、多くの制御問題を回避するクライアント駆動型とすることができる。たとえば、最適パフォーマンスを得るためのすべての特徴を活用するために、サーバは、まだ確認されていないパケットのサイズおよびコンテンツを監視し得る。また、サーバはファイル構造を分析し、RD最適スイッチング/細線化(thinning)決定を行うために、クライアントバッファの状態を再構成し得る。さらに、ネゴシエートされたプロファイルに準拠したままでいるために、ビットストリーム変形体に対する制約が満たされ得る。HTTPは、HTTP1.1が実装されているウェブサーバにおける、新しいハードウェアまたはソフトウェア実装形態を必ずしも必要としない。また、HTTPストリーミングはTCP親和性とファイアウォール横断とを与える。本開示の技法は、たとえば、ビットレート適応を与えることによって、ビデオデータのHTTPストリーミングを改善して、帯域幅に関係する問題を克服し得る。
ITU−TH.261、H.262、H.263、MPEG−1、MPEG−2およびH.264/MPEG−4 part10などのビデオ圧縮規格は、時間冗長性を低減するために動き補償時間予測を利用する。エンコーダは、動きベクトルに従って現在のコード化ピクチャを予測するために、いくつかの前の(本明細書ではフレームとも呼ぶ)符号化ピクチャからの動き補償予測を使用する。典型的なビデオコーディングには3つの主要なピクチャタイプがある。それらは、イントラコード化ピクチャ(「Iピクチャ」または「Iフレーム」)と、予測ピクチャ(「Pピクチャ」または「Pフレーム」)と、双方向予測ピクチャ(「Bピクチャ」または「Bフレーム」)とである。Pピクチャのブロックは、1つの他のピクチャに関してイントラコード化または予測され得る。Bピクチャでは、ブロックは、1つまたは2つの参照ピクチャから予測され得るか、またはイントラコード化され得る。これらの参照ピクチャは、時間順序で現在のピクチャの前または後に位置し得る。
H.264コーディング規格によれば、一例として、Bピクチャは、前にコーディングされた参照ピクチャの2つのリスト、すなわち、リスト0とリスト1とを使用する。これらの2つのリストは、それぞれ、過去および/または将来のコード化ピクチャを時間順序で含むことができる。Bピクチャ中のブロックは、いくつかの方法、すなわちリスト0参照ピクチャからの動き補償予測、リスト1参照ピクチャからの動き補償予測、またはリスト0参照ピクチャとリスト1参照ピクチャの両方の組合せからの動き補償予測のうちの1つで予測され得る。リスト0参照ピクチャとリスト1参照ピクチャの両方の組合せを得るために、2つの動き補償基準エリアが、それぞれリスト0参照ピクチャおよびリスト1参照ピクチャから取得される。それらの組合せは現在のブロックを予測するために使用される。
より小さいビデオブロックは、より良好な解像度を与えることができ、高い詳細レベルを含むビデオフレームのロケーションのために使用され得る。一般に、マクロブロックおよび様々なパーティションはサブブロックと呼ばれることがあり、ビデオブロックと見なされ得る。さらに、スライスは、マクロブロックおよび/またはサブブロックなどの複数のビデオブロックであると見なされ得る。各スライスはビデオフレームの単独で復号可能なユニットであり得る。代替的に、フレーム自体が復号可能なユニットであり得るか、またはフレームの他の部分が復号可能なユニットとして定義され得る。「コード化ユニット」または「コーディングユニット」という用語は、フレーム全体、フレームのスライス、シーケンスとも呼ばれるピクチャグループ(GOP)など、ビデオフレームの単独で復号可能な任意のユニット、または適用可能なコーディング技法に従って定義される別の単独で復号可能なユニットを指し得る。
マクロブロックという用語は、16×16ピクセルを備える2次元ピクセルアレイに従ってピクチャおよび/またはビデオデータを符号化するためのデータ構造を指す。各ピクセルはクロミナンス成分と輝度成分とを備える。したがって、マクロブロックは、各々が8×8ピクセルの2次元アレイを備える4つの輝度ブロックと、各々が16×16ピクセルの2次元アレイを備える2つのクロミナンスブロックと、コード化ブロックパターン(CBP)、符号化モード(たとえば、イントラ(I)またはインター(PまたはB)符号化モード)、イントラ符号化ブロックのパーティションのパーティションサイズ(たとえば、16×16、16×8、8×16、8×8、8×4、4×8、または4×4)、あるいはインター符号化マクロブロックのための1つまたは複数の動きベクトルなど、シンタックス情報を備えるヘッダとを定義し得る。
ビデオエンコーダ28、ビデオデコーダ48、オーディオエンコーダ26、オーディオデコーダ46、マルチプレクサ30、およびデマルチプレクサ38は、それぞれ、適用可能なとき、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアなどの様々な好適なエンコーダまたはデコーダ回路のいずれか、またはそれらの任意の組合せとして実装され得る。ビデオエンコーダ28およびビデオデコーダ48の各々は1つまたは複数のエンコーダまたはデコーダ中に含められ得、そのいずれかは複合ビデオエンコーダ/デコーダ(CODEC)の一部として統合され得る。同様に、オーディオエンコーダ26およびオーディオデコーダ46の各々は1つまたは複数のエンコーダまたはデコーダ中に含められ得、そのいずれかは複合オーディオエンコーダ/デコーダ(CODEC)の一部として統合され得る。ビデオエンコーダ28、ビデオデコーダ48、オーディオエンコーダ26、オーディオデコーダ46、マルチプレクサ30、および/またはデマルチプレクサ38を含む装置は、集積回路、マイクロプロセッサ、および/またはセルラー電話などのワイヤレス通信デバイスを備え得る。
本開示の技法によれば、マルチプレクサ30は、NALユニットを、ISOベースメディアファイルフォーマットまたはその派生(たとえば、SVC、AVC、MVC、または3GPP)に準拠するビデオファイルのトラックにアセンブルし、別のトラックの1つまたは複数の潜在的な非連続NALユニットを識別するメディアエクストラクタトラックを含み、ビデオファイルを出力インターフェース32に受け渡し得る。出力インターフェース32は、たとえば、送信機、トランシーバ、たとえば、オプティカルドライブ、磁気メディアドライブ(たとえば、フロッピー(登録商標)ドライブ)など、コンピュータ可読媒体にデータを書き込むためのデバイス、ユニバーサルシリアルバス(USB)ポート、ネットワークインターフェース、または他の出力インターフェースを備え得る。出力インターフェース32は、NALユニットまたはアクセスユニットを、コンピュータ可読媒体34、たとえば、送信信号または搬送波などの一時媒体、あるいは磁気メディア、光メディア、メモリ、またはフラッシュドライブなどのコンピュータ可読記憶媒体に出力する。
入力インターフェース36はコンピュータ可読媒体34からデータを取り出す。入力インターフェース36は、たとえば、オプティカルドライブ、磁気媒体ドライブ、USBポート、受信機、トランシーバ、または他のコンピュータ可読媒体インターフェースを備え得る。入力インターフェース36は、NALユニットまたはアクセスユニットをデマルチプレクサ38に与え得る。デマルチプレクサ38は、トランスポートストリームまたはプログラムストリームを構成PESストリームに多重分離し、符号化データを取り出すためにPESストリームをパケット化解除し、たとえば、ストリームのPESパケットヘッダによって示されるように、符号化データがオーディオまたはビデオストリームの一部であるかどうかに応じて、符号化データをオーディオデコーダ46またはビデオデコーダ48に送り得る。デマルチプレクサ38は、初めに、受信したビデオファイル中に含まれるトラックのうちの1つを選択し、次いで、選択されたトラックのデータと、選択されたトラックのエクストラクタによって参照される他のトラックのデータとのみをビデオデコーダ48に受け渡し得、選択されたトラックのエクストラクタによって参照されない他のトラックのデータを廃棄する。オーディオデコーダ46は、符号化オーディオデータを復号し、復号されたオーディオデータをオーディオ出力42に送り、ビデオデコーダ48は、符号化ビデオデータを復号し、ストリームの複数のビューを含み得る復号されたビデオデータをビデオ出力44に送る。ビデオ出力44は、シーンの複数のビュー、たとえばシーンの各ビューを同時に提示する立体視または自動立体視ディスプレイを使用するディスプレイを備え得る。
図2は、マルチプレクサ30(図1)の構成要素の例示的な構成を示すブロック図である。図2の例では、マルチプレクサ30は、ストリーム管理ユニット60と、ビデオ入力インターフェース80と、オーディオ入力インターフェース82と、多重化ストリーム出力インターフェース84と、プログラム固有情報テーブル88とを含む。ストリーム管理ユニット60は、NALユニットコンストラクタ62と、ストリーム識別子(ストリームID)ルックアップユニット66と、トラック生成ユニット64と、エクストラクタ生成ユニット68とを含む。
図2の例では、ビデオ入力インターフェース80およびオーディオ入力インターフェース82は、符号化ビデオデータおよび符号化オーディオデータからPESユニットを形成するためにそれぞれのパケッタイザを含む。他の例では、ビデオおよび/またはオーディオパケッタイザは、マルチプレクサ30の外部に存在し得る。図2の例に関して、ビデオ入力インターフェース80は、ビデオエンコーダ28から受信された符号化ビデオデータからPESパケットを形成し得、オーディオ入力インターフェース82は、オーディオエンコーダ26から受信された符号化オーディオデータからPESパケットを形成し得る。
NALユニットコンストラクタ62がNALユニットを構築した後、NALユニットコンストラクタ62はNALユニットをトラック生成ユニット64に送る。トラック生成ユニット64は、NALユニットを受信し、ビデオファイルの1つまたは複数のトラック中のNALユニットを含むビデオファイルをアセンブルする。トラック生成ユニット64は、さらに、トラック生成ユニット64によって構築された1つまたは複数のメディアエクストラクタトラックのためのエクストラクタを生成するために、エクストラクタ生成ユニット68を実行し得る。1つまたは複数のNALユニットが複数のトラックに属すると判断されたとき、トラック間でNALユニットを複製するのではなく、エクストラクタ生成ユニット68は、NALユニットを参照するトラックのためのエクストラクタを構築し得る。このようにして、マルチプレクサ30はトラック間のデータの重複を回避し得、それにより、ビデオファイルを送信するときの帯域幅消費量を低減し得る。
エクストラクタのためのデータ構造および構成要素の様々な例について、以下に説明する。概して、エクストラクタは、参照されるNALユニットが含まれるトラックを参照するトラック識別子値と、エクストラクタによって参照されるNALユニットを識別する1つまたは複数のNALユニット識別子とを含み得る。いくつかの例では、NALユニット識別子は、識別されるNALユニットに対応するトラック識別子値によって参照されるトラック中のビットまたはバイト範囲を参照し得る。いくつかの例では、たとえば、非連続NALユニットを識別するために、NALユニット識別子は、エクストラクタによって識別される各NALユニットを個々に参照し得る。いくつかの例では、NALユニット識別子は、メディアエクストラクタトラック中のエクストラクタの時間または空間ロケーションからのオフセットに基づいて、NALユニットを参照し得る。
トラック生成ユニット64は、いくつかの例では、メディアエクストラクタトラック中に追加のNALユニットを含み得る。すなわち、メディアエクストラクタトラックは、NALユニットとエクストラクタとを含み得る。したがって、いくつかの例では、トラック生成ユニット64は、NALユニットのみを含む第1のトラックと、第1のトラックのNALユニットのすべてまたはそのサブセットを参照する1つまたは複数のエクストラクタを含む第2のトラックとを有するビデオファイルを構築し得る。その上、いくつかの例では、トラック生成ユニット64は、第1のトラック中に含まれない追加のNALユニットを第2のトラック中に含み得る。同様に、本開示の技法は、複数のトラックに拡張され得る。たとえば、トラック生成ユニット64は、第1のトラックのNALユニットおよび/または第2のトラックのNALユニットを参照し得る第3のトラックを構築し得、第1または第2のトラック中に含まれないNALユニットをさらに含み得る。
図3は、ビデオサンプルのセットを有する第1のトラックと、第1のトラックのビデオサンプルのサブセットを参照するエクストラクタを有する第2のトラックとを含む例示的なファイル100を示すブロック図である。図3の例では、ファイル100は、MOOVボックス102とメディアデータ(MDAT)ボックス110とを含む。MOOVボックス102は、ムービーボックスに対応し、ISOベースメディアファイルフォーマットは、そのムービーボックスを、サブボックスがプレゼンテーションのためのメタデータを定義するコンテナボックスとして定義する。MDATボックス104はメディアデータボックスに対応し、ISOベースメディアファイルフォーマットは、そのメディアデータボックスを、プレゼンテーションのための実際のデータを保持することができるボックスとして定義する。
図3の例では、MOOVボックス102は、完全なサブセットトラック104とメディアエクストラクタトラック106とを含む。ISOベースメディアファイルフォーマットは、ISOベースメディアファイル中の関連するサンプルの時限シーケンスとして「トラック」を定義している。ISOベースメディアファイルフォーマットは、さらに、メディアデータについて、トラックが一連の画像またはサンプリングされたオーディオに対応することに言及している。
MDATボックス110は、図3の例では、I符号化サンプル112と、P符号化サンプル114と、B符号化サンプル116と、B符号化サンプル118とを含む。B符号化サンプル116およびB符号化サンプル118は、異なる階層符号化レベルであると見なされる。図3の例では、B符号化サンプル116は、B符号化サンプル118のための参照として使用され得、したがって、B符号化サンプル118は、B符号化サンプル116の階層符号化レベルよりも低い階層符号化レベルであり得る。サンプルの表示順序は、(復号順序とも呼ばれる)階層順序、およびサンプルがMDATボックス110中に含まれる順序とは異なり得る。たとえば、I符号化サンプル112は表示順序値0と復号順序値0とを有し得、P符号化サンプル114は表示順序値2と復号順序値1とを有し得、B符号化サンプル116は表示順序値1と復号順序値2とを有し得、B符号化サンプル118は表示順序値4と復号順序値3とを有し得る。トラック1は、追加のサンプル、たとえば、表示順序値3と復号順序値4とをもつサンプルを含み得る。
I符号化サンプル112、P符号化サンプル114、B符号化サンプル116、およびB符号化サンプル118の各々は、様々なNALユニットまたはアクセスユニットに対応し得る。ISOベースメディアファイルフォーマットは、単一のタイムスタンプに関連するすべてのデータ、たとえば、ビデオの個々のフレーム、復号順序での一連のビデオフレーム、または復号順序でのオーディオの圧縮セクションとして「サンプル」を定義している。完全なサブセットトラック104は、図3の例では、I符号化サンプル112と、P符号化サンプル114と、B符号化サンプル116と、B符号化サンプル118とを参照するメタデータを含む。
MDATボックス110は、エクストラクタ120と、エクストラクタ122と、エクストラクタ124とをさらに含む。したがって、エクストラクタ120〜124は、概してデータのサンプルを含むであろうムービーデータボックス中に含まれる。図3の例では、エクストラクタ120は、I符号化サンプル112を参照し、エクストラクタ122は、P符号化サンプル114を参照し、エクストラクタ124は、B符号化サンプル118を参照する。I符号化サンプル112、P符号化サンプル114、および/またはB符号化サンプル118に対応する2つ以上のNALユニットがあり得、そのNALユニットは非連続であり得る。本開示の技法によれば、対応するサンプル中に2つ以上の非連続NALユニットがあり得るとしても、エクストラクタ120〜124は、それにもかかわらず、対応するサンプルのNALユニットの各々を識別し得る。メディアエクストラクタトラック106は、図3の例では、エクストラクタ120とエクストラクタ122とエクストラクタ124とを参照するメタデータを含む。
また、エクストラクタ120〜124の各々は、表示順序値と復号順序値とを含み得る。たとえば、エクストラクタ120は、表示順序値0と復号順序値0と有し得、エクストラクタ122は、表示順序値1と復号順序値1とを有し得、エクストラクタ124は、表示順序値2と復号順序値2とを有し得る。いくつかの例では、表示および/または復号値は、たとえば、識別されたサンプルの値を整合させるために、いくつかの値をスキップし得る。
完全なサブセットトラック104とメディアエクストラクタトラック106とは代替グループを形成し得、それにより、デマルチプレクサ38(図1)は、ビデオデコーダ48によって復号されるべき、完全なサブセットトラック104またはメディアエクストラクタトラック106のいずれかを選択し得る。MVCの例に関して、完全なサブセットトラック104は第1の動作点に対応し得、メディアエクストラクタトラック106は第2の動作点に対応し得る。3GPPの例に関して、完全なサブセットトラック104とメディアエクストラクタトラック106とは、スイッチグループを形成し得る。このようにして、たとえば、HTTPストリーミングアプリケーションにおける帯域幅可用性とデコーダ能力とを適応させるために、完全なサブセットトラック104とメディアエクストラクタトラック106とが使用され得る。
完全なサブセットトラック104が選択されたとき、デマルチプレクサ38は、完全なサブセットトラック104に対応するサンプル(たとえば、I符号化サンプル112、P符号化サンプル114、B符号化サンプル116、およびB符号化サンプル118)をビデオデコーダ48に送り得る。メディアエクストラクタトラック106が選択されたとき、デマルチプレクサ38は、メディアエクストラクタトラック106に対応するメディアエクストラクタによって識別されるサンプルを含む、メディアエクストラクタトラック106に対応するサンプルをビデオデコーダ48に送り得る。したがって、メディアエクストラクタトラック106が選択されたとき、デマルチプレクサ38は、エクストラクタ120とエクストラクタ122とエクストラクタ124とをデリファレンスすることによって、デマルチプレクサ38が完全なサブセットトラック104から検索し得るI符号化サンプル112とP符号化サンプル114とB符号化サンプル118とをビデオデコーダ48に送り得る。
図4は、2つの別個のエクストラクタトラック146、148を含む別の例示的なファイル140を示すブロック図である。図4の例では、2つのエクストラクタトラックが示されているが、概して、ファイルは任意の数のエクストラクタトラックを含み得る。図4の例では、ファイル140は、MOOVボックス142とMDATボックス150とを含む。MOOVボックス142は、完全なサブセットトラック144とメディアエクストラクタトラック146、148とを含む。MDATボックス150は、様々なトラックのためのデータのサンプルおよびエクストラクタ、たとえば、I符号化サンプル152、P符号化サンプル154、B符号化サンプル156、B符号化サンプル158、およびエクストラクタ160〜168を含む。
図4の例では、エクストラクタ160〜164はメディアエクストラクタトラック146に対応するが、エクストラクタ166〜168はメディアエクストラクタトラック148に対応する。この例では、メディアエクストラクタトラック146のエクストラクタ160は、I符号化サンプル152を識別し、エクストラクタ162は、P符号化サンプル154を識別し、エクストラクタ164は、B符号化サンプル156を識別する。この例では、エクストラクタ166は、I符号化サンプル152を識別するが、エクストラクタ162は、P符号化サンプル154を識別する。図4の例は、様々なメディアエクストラクタトラックの2つ以上のエクストラクタが、完全なサブセットトラックの同じサンプルを参照する例を示している。
メディアエクストラクタトラックは、復号可能であり、元の完全時間分解能ビットストリームを含んでいるトラック、たとえば、完全なサブセットトラック144の代替/スイッチトラックであるビデオストリームの時間サブセットを表すために使用され得る。完全なサブセットトラック144は、たとえば、30フレーム毎秒(FPS)ビデオストリームを表し得る。いくつかの例では、ある階層レベルのBピクチャをサブビットストリーム中に含めないことによって、サブビットストリームのフレームレートは、半分にされるか、またはある他の部分だけ低減され得る。たとえば、メディアエクストラクタトラック146は、B符号化サンプル158を含めないことによって、完全なサブセットトラック144に対して半分にされたフレームレートを有し得る。たとえば、メディアエクストラクタトラック146は、フレームレート15FPSを有し得る。同様に、メディアエクストラクタトラック148は、B符号化サンプル156とB符号化サンプル158の両方を省略することによって、メディアエクストラクタトラック146に対して半分にされたフレームレートを有し、したがって、フレームレート7.5FPSを有し得る。
図5は、サブセットトラック188と、2つのメディアエクストラクタトラック184、186とを含む別の例示的なファイル180を示すブロック図である。ファイル180のMOOVボックス182は、サブセットトラック188と、メディアエクストラクタトラック184、186とを含むが、MDATボックス190は、I符号化サンプル192と、P符号化サンプル194と、B符号化サンプル202と、B符号化サンプル208と、エクストラクタ198、200、204、206および210とを含む。
上記で説明したように、メディアエクストラクタトラックは、別のトラックのサンプルを参照するエクストラクタを含み得る。さらに、メディアエクストラクタトラックは、別のトラック中に含まれない追加のビデオサンプルをさらに含み得る。図5の例では、サブセットトラック188は、I符号化サンプル192とP符号化サンプル194とを含む。メディアエクストラクタトラック186は、エクストラクタ198、200を含み、B符号化サンプル202をさらに含む。同様に、メディアエクストラクタトラック184は、エクストラクタ204、206、210と、さらにB符号化サンプル208とを含む。
図5の例では、メディアエクストラクタトラック186は、ビデオデータの符号化サンプル(B符号化サンプル202)を含み、メディアエクストラクタトラック184は、符号化サンプルを含むメディアエクストラクタトラック186のサンプルを参照するエクストラクタ210を含む。すなわち、図5の例では、エクストラクタ210は、B符号化サンプル202を参照する。したがって、メディアエクストラクタトラック184は、ビットストリームの完全時間分解能を表し得るが、メディアエクストラクタトラック186およびサブセットトラック188は、完全時間分解能ビットストリームのサブセットを表し得る。すなわち、メディアエクストラクタトラック186およびサブセットトラック188は、メディアエクストラクタトラック184によって表される完全時間分解能よりも低い時間分解能(たとえば、より低いフレームレート)を有し得る。
本開示の技法によれば、H.264/AVCファイルフォーマットは、元の完全時間分解能ビットストリームを含んでいるトラックの任意の準拠している時間サブセットとして抽出され得るエクストラクタトラックを含めるように変更され得る。階層B(またはP)ピクチャコーディングをサポートするH.264/AVCの場合、Nの時間レベルがあると仮定すると、時間レベル0からk(k<N)までのサンプルを含む各サブビットストリームは、対応するエクストラクタトラックを定義することによって抽出され得る。したがって、同じビデオの場合、代替/スイッチグループを形成するN個のトラック(N−1個のエクストラクタトラックを含む)があり得る。エクストラクタは、エクストラクタによって識別されたサンプルの時間階層レベルに対応する時間階層レベルに関連することができる。また、たとえば、サンプルの時間レベルを指定する時間識別子値は、エクストラクタ中でシグナリングされ得る。
図6A〜図6Cは、様々なメディアエクストラクタトラックのためのメディアエクストラクタの例を含むファイルのMDATボックス220の例を示すブロック図である。図6A〜図6Cの各々は、ビュー0サンプル224A、ビュー2サンプル226A、ビュー1サンプル228A、ビュー4サンプル230A、およびビュー3サンプル232Aを含むアンカーサンプル222と、ビュー0サンプル224B、ビュー2サンプル226B、ビュー1サンプル228B、ビュー4サンプル230B、およびビュー3サンプル232Bを含む非アンカーサンプル223とを示す。非アンカーサンプル223のそばの楕円は、追加のサンプルがMDATボックス220中に含まれ得ることを示す。アンカーサンプルおよび非アンカーサンプルの各々は、ファイルの第1のトラックをまとめて形成し得る。一例では、本開示の技法によれば、図6A〜図6Cに示すファイルのエクストラクタの各セットについてのメディアエクストラクタトラックは、MVCファイルフォーマットに準拠するビデオファイルの別々の動作点に対応し得る。このようにして、本開示の技法は、MVCファイルフォーマットに準拠するビデオファイルの動作点に対応する1つまたは複数のメディアエクストラクタトラックを生成するために使用され得る。
図6A〜図6Cは、様々なメディアエクストラクタトラックのエクストラクタ240、244、250を示し、エクストラクタ240、244、250は、それぞれMDATボックス220中に含まれるが、明快のために別々の図に示される。すなわち、完全にアセンブルされたときに、MDATボックス220はエクストラクタ240、244および250の各セットを含み得る。
図6A〜図6Cは、メディアエクストラクタならびに現実のビデオサンプルを含んでいるトラックを含むファイルの例を与える。様々なサンプルは、異なる時間レベルに従って異なるトラック中に別々に含まれ得る。各時間レベルについて、特定のトラックが、すべてのビデオサンプルならびにより低い時間レベルをもつトラックへのエクストラクタを含み得る。ビデオサンプル(NALユニット)は異なるトラックに分離され得るが、より高いフレームレートをもつトラックは、他のトラックをポイントしているエクストラクタを有することができる。このようにして、1つの時間レベルのみのサンプルを含んでいるムービーフラグメントを有することが可能であり、ムービーフラグメントは、場合によっては、他のフラグメントをポイントしているエクストラクタを含み得る。この場合、異なるトラックのムービーフラグメントは、同じ時間期間がなければ、時間レベルの昇順でインターリーブされ得る。
図6Aは、メディアエクストラクタトラックに対応するエクストラクタ242A〜242Nを含むエクストラクタ240の例を与える。この例では、エクストラクタ242Aは、アンカーサンプル222のビュー0サンプル224Aを参照する。エクストラクタ242Nは、非アンカーサンプル223のビュー0サンプル224Bを参照する。概して、図6Aの例では、エクストラクタセット240のエクストラクタは、対応するビュー0サンプルを参照する。エクストラクタ242A〜242Nの各々は、スイッチグループおよび/または代替グループに属し得る共通のメディアエクストラクタトラックに対応する。メディアエクストラクタトラックは、個々の動作点、たとえば、ビュー0を含む動作点にさらに対応し得る。
いくつかの例では、MVCを使用してコーディングされたステレオビデオの場合、2つのビューを出力することをサポートする1つの動作点と、ただ1つのビュー(たとえば、ビュー0またはビュー1だけ)を出力することをサポートする第2の動作点とを含む3つの動作点があるとすることができる。第3の動作点は、ビュー1を出力する動作点とすることができる。予測関係に応じて、第3の動作点は、ビュー1中のVCL NALユニットおよび関連する非VCL NALユニットのみ、ビュー0およびビュー1のすべてのNALユニット、またはビュー1中のNALユニットならびにアンカーNALユニット(すなわち、アンカービュー構成要素のNALユニット)を含み得る。そのようなステレオの場合、開示する技法の例は、他の2つの動作点が2つのエクストラクタトラックによって表され得ることを与え得る。これらの2つのエクストラクタトラックはスイッチグループを形成し得、元のビデオトラックとともに、これらの3つのトラックは代替グループを形成し得る。
本開示は、MVCメディアエクストラクタトラックを含むようにMVCファイルフォーマットを変更するための技法を提供する。概して、出力のための同数のビューとともに、MVCメディアエクストラクタトラックを含むMVCビデオトラックは、スイッチグループとして特徴づけられ得る。ファイルのトラックによって表されるすべての動作点は、MVCビデオプレゼンテーションの1つの代替グループに属し得る。アンカーサンプル222および非アンカーサンプル223の各々のビューは、完全なサブセットトラック、たとえば、利用可能なビューのすべてを含む動作点を形成し得る。
エクストラクタは、たとえば、図6B中のエクストラクタ246A〜246Nに関して示されるようにサンプルの連続部分を参照し得る。図6Bの例では、エクストラクタ246Aは、ビュー0サンプル224Aと、ビュー2サンプル226Aとを参照する。エクストラクタ246Aを表すデータ構造は、識別されたビューのためのバイト範囲、開始ビューおよび終了ビュー、開始ビューおよび後続のビューの数、またはエクストラクタによって識別される連続の一連のビューの他の表現を指定し得る。エクストラクタ244のセットは別のメディアエクストラクタトラックに対応し得、メディアエクストラクタトラックは、順に別々のMVC動作点に対応し得る。
また、2つのエクストラクタは、たとえば、図6C中のエクストラクタ254A、256Aに関して示されるように、サンプルの2つの部分(たとえば、2つの非連続ビュー)を参照し得る。たとえば、エクストラクタサンプル252Aは、ビュー0サンプル224Aとビュー2サンプル226Aとを参照するエクストラクタ254A、ならびにビュー4サンプル230Aを参照するエクストラクタ254Bを含む。したがって、エクストラクタサンプル252Aによって表されるサンプルは、非連続ビューサンプルを参照するエクストラクタサンプルに対応し得る。同様に、エクストラクタサンプル252Nは、図6Cの例では、ビュー0サンプル224Bとビュー2サンプル226Bとを参照するエクストラクタ256A、ならびにビュー4サンプル230Bを参照するエクストラクタ256Bを含む。
また、エクストラクタは、アンカーまたは非アンカーサンプルに関して定義され得、アンカーサンプルに関して定義されるエクストラクタは、非アンカーサンプルに関して定義されるエクストラクタとは異なるビューを参照し得る。
ISOベースメディアファイルフォーマットまたはMVCファイルフォーマットでの上記のMVCメディアエクストラクタトラックは、同様の抽出機能を用いて実装され得、通常のビデオトラックの代替および/またはスイッチトラックを表すために使用され得るメタデータトラックのインスタンスとすることができる。
MVCファイルフォーマットを使用する例では、1つのトラック中に完全ビットストリームが含まれ得、すべての他の可能な動作点は、エクストラクタトラックによって表され得、その各々は、たとえば、出力のためのビューの数、出力のためのビューのビュー識別子値、送信に必要な帯域幅、およびフレームレートをシグナリングし得る。
図7は、例示的なMVC予測パターンを示す概念図である。図7の例では、(ビューID「S0」〜「S7」を有する)8つのビューが示され、各ビューについて12個の時間ロケーション(「T0」〜「T11」)が示されている。すなわち、図7中の各行はビューに対応し、各列は時間ロケーションを示す。
MVCがH.264/AVCデコーダによって復号可能である、いわゆるベースビューを有し、また、ステレオビューペアがMVCによってサポートされ得るが、MVCの利点は、MVCが、3Dビデオ入力として3つ以上のビューを使用し、複数のビューによって表されるこの3Dビデオを復号する例をサポートすることができるということである。MVCデコーダを有するクライアントのレンダラは、複数のビューを用いて3Dビデオコンテンツを予想し得る。ビュー中のアンカービュー構成要素および非アンカービュー構成要素は、異なるビュー依存性を有することができる。たとえば、ビューS2中のアンカービュー構成要素は、ビューS0中のビュー構成要素に依存する。ただし、ビューS2中の非アンカービュー構成要素は、他のビュー中のビュー構成要素に依存しない。
図7中のフレームは、文字を含む影付きブロックを使用して、図7中の各行と各列とについて示され、その指示は、対応するフレームがイントラコード化された(すなわち、Iフレーム)のか、または一方向でインターコード化された(すなわち、Pフレームとして)のか、または複数の方向でインターコード化された(すなわち、Bフレームとして)のかを指示する。概して、予測は矢印によって示され、ここで矢印の終点のフレームは、予測参照のために矢印の始点のオブジェクトを使用する。たとえば、時間ロケーションT0におけるビューS2のPフレームは、時間ロケーションT0におけるビューS0のIフレームから予測される。
単一のビュービデオ符号化の場合と同様に、マルチビュービデオコーディングビデオシーケンスのフレームは、異なる時間ロケーションにおけるフレームに関して予測符号化され得る。たとえば、時間ロケーションT1におけるビューS0のbフレームは、時間ロケーションT0におけるビューS0のIフレームからそのbフレームに向けられた矢印を有し、その矢印は、bフレームがIフレームから予測されることを示す。しかしながら、さらに、マルチビュービデオ符号化のコンテキストにおいて、フレームは、ビュー間予測され得る。すなわち、ビュー構成要素は、参照のために他のビュー中のビュー構成要素を使用することができる。MVCでは、たとえば、別のビュー中のビュー構成要素がインター予測参照であるかのように、ビュー間予測が実現される。潜在的なビュー間参照は、シーケンスパラメータセット(SPS)MVC拡張においてシグナリングされ、インター予測またはビュー間予測参照のフレキシブルな順序を可能にする参照ピクチャリスト構成プロセスによって変更され得る。以下の表1は、MVC拡張シーケンスパラメータセットの例示的な定義を与える。
図7は、ビュー間予測の様々な例を与える。図7の例では、ビューS1のフレームは、ビューS1の異なる時間ロケーションにおけるフレームから予測されるものとして、ならびに同じ時間ロケーションにおけるビューS0およびS2のフレームのうちのフレームからビュー間予測されるものとして示されている。たとえば、時間ロケーションT1におけるビューS1のbフレームは、時間ロケーションT0およびT2におけるビューS1のBフレームの各々、ならびに時間ロケーションT1におけるビューS0およびS2のbフレームから予測される。
図7の例では、大文字の「B」および小文字の「b」は、異なる符号化方法ではなく、フレーム間の異なる階層関係を示すものとする。概して、大文字の「B」フレームは、小文字の「b」フレームよりも予測階層が比較的高い。すなわち、図7の例では、「b」フレームは、「B」フレームに関して符号化される。図7の「b」フレームを参照し得る追加の双方向符号化されたフレームを有する追加の階層レベルが追加され得る。図7はまた、異なるレベルの陰影を使用して予測階層の変形体を示し、より大きい量の陰影の(すなわち、比較的より暗い)フレームは、より少ない陰影を有する(すなわち、比較的より明るい)それらのフレームよりも予測階層が高い。たとえば、図7中のすべてのIフレームは、完全陰影を用いて示されるが、Pフレームは、いくぶんより明るい陰影を有し、Bフレーム(そして、小文字のbフレーム)は、互いに様々なレベルの陰影を有するが、PフレームおよびIフレームの陰影よりも常に明るい。
概して、比較的階層がより高いそれらのフレームが、階層が比較的低いフレームの復号中に参照フレームとして使用され得るように、予測階層が比較的より高いフレームは、階層が比較的より低いフレームを復号する前に復号されるべきであるという点で、予測階層はビュー順序インデックスに関係する。ビュー順序インデックスは、アクセスユニット中のビュー構成要素の復号順序を示すインデックスである。H.264/AVC(MVC追補)の付属書類Hにおいて規定されているように、ビュー順序インデックスはSPS MVC拡張において暗示されている。SPSでは、各インデックスiについて、対応するview_idがシグナリングされる。ビュー構成要素の復号は、ビュー順序インデックスの昇順に従う。すべてのビューが提示された場合、ビュー順序インデックスは、0からnum_views_minus_1までの連続する順序である。
このようにして、参照フレームとして使用されるフレームは、その参照フレームを参照して符号化されたフレームを復号する前に復号され得る。ビュー順序インデックスは、アクセスユニット中のビュー構成要素の復号順序を示すインデックスである。各ビュー順序インデックスiについて、対応するview_idがシグナリングされる。ビュー構成要素の復号は、ビュー順序インデックスの昇順に従う。すべてのビューが提示された場合、ビュー順序インデックスのセットは、0からビューの全数よりも1少ない数までの連続的な順序付きセットを備える。
階層の等しいレベルにおけるいくつかのフレームの場合、復号順序は、互いに重要でないことがある。たとえば、時間ロケーションT0におけるビューS0のIフレームは、時間ロケーションT0におけるビューS2のPフレームのための参照フレームとして使用され、そのPフレームは今度は、時間ロケーションT0におけるビューS4のPフレームのための参照フレームとして使用される。したがって、時間ロケーションT0におけるビューS0のIフレームは、時間ロケーションT0におけるビューS2のPフレームの前に復号されるべきであり、そのPフレームは、時間ロケーションT0におけるビューS4のPフレームの前に復号されるべきである。しかしながら、ビューS1およびS3は、予測のために互いに依拠しないが、代わりに、予測階層がより高いビューからのみ予測されるので、ビューS1とS3との間で復号順序は重要でない。その上、ビューS1がビューS0およびS2の後に復号される限り、ビューS1はビューS4の前に復号され得る。
このようにして、ビューS0〜S7を記述するために階層順序が使用され得る。表記法SA>SBは、ビューSAがビューSBの前に復号されるべきであることを意味する。この表記法を使用すると、図7の例では、S0>S2>S4>S6>S7である。また、図7の例に関して、S0>S1、S2>S1、S2>S3、S4>S3、S4>S5、およびS6>S5である。これらの要件に違反しないビューのための任意の復号順序が可能である。したがって、いくつかの制限のみをもつ、多くの異なる復号順序が可能である。2つの例示的な復号順序が以下に提示されるが、多くの他の復号順序が可能であることを理解されたい。以下の表2に示す一例では、ビューができるだけ早く復号される。
表2の例は、ビューS1は、ビューS0およびS2が復号された直後に復号され得、ビューS3は、ビューS2およびS4が復号された直後に復号され得、ビューS5は、ビューS4およびS6が復号された直後に復号され得ることを認識する。
以下の表3では、別のビューのための参照として使用されるいずれのビューも、他のビューのための参照として使用されないビューの前に復号されるような復号順序である、別の例示的な復号順序を与える。
表3の例は、ビューS1、S3、S5、およびS7のフレームが、他のビューのフレームのための参照フレームとして働かず、したがって、ビューS1、S3、S5、およびS7が、図7の例におけるビュー、すなわち、ビューS0、S2、S4、およびS6の、参照フレームとして使用されるフレームの後に復号され得ることを認識する。互いに対して、ビューS1、S3、S5、およびS7は任意の順序で復号され得る。したがって、表3の例では、ビューS7は、ビューS1、S3、およびS5の各々の前に復号される。
明快のために、各ビューのフレーム間に、ならびに各ビューのフレームの時間ロケーション間に、階層関係があり得る。図7の例に関して、時間ロケーションT0におけるフレームは、時間ロケーションT0における他のビューのフレームからイントラ予測されるか、またはビュー間予測される。同様に、時間ロケーションT8におけるフレームは、時間ロケーションT8における他のビューのフレームからイントラ予測されるか、またはビュー間予測される。したがって、時間階層に関して、時間ロケーションT0およびT8は時間階層の最上位にある。
図7の例では、時間ロケーションT4のフレームが、時間ロケーションT0およびT8のフレームを参照してB符号化されるので、時間ロケーションT4におけるフレームは、時間ロケーションT0およびT8のフレームよりも時間階層が低い。時間ロケーションT2およびT6におけるフレームは、時間ロケーションT4におけるフレームよりも時間階層が低い。最後に、時間ロケーションT1、T3、T5、およびT7におけるフレームは、時間ロケーションT2およびT6のフレームよりも時間階層が低い。
MVCでは、全ビットストリームのサブセットが抽出されて、依然としてMVCに準拠するサブビットストリームが形成され得る。たとえば、サーバによって与えられるサービス、1つまたは複数のクライアントのデコーダの容量、サポート、および能力、ならびに/または1つまたは複数のクライアントの選好に基づいて、特定の適用例が必要とし得る、多くの可能なサブビットストリームがある。たとえば、あるクライアントが3つのビューのみを必要とし得、2つのシナリオがあり得る。一例では、あるクライアントは、滑らかな閲覧エクスペリエンスを必要とし、view_id値S0、S1、およびS2のビューを選好し得、別の他のクライアントは、ビュースケーラビリティを必要とし、view_id値S0、S2、およびS4のビューを選好し得る。元来view_idが表9の例に関して順序付けられている場合、これらの2つの例においてビュー順序インデックス値はそれぞれ{0、1、2}および{0、1、4}である。これらのサブビットストリームの両方が、独立したMVCビットストリームとして復号され、同時にサポートされ得ることに留意されたい。
MVCデコーダによって復号可能である多くのMVCサブビットストリームがあり得る。理論上、(1)各アクセスユニット中のビュー構成要素が、ビュー順序インデックスの昇順で順序付けられている、および(2)ビューの任意の組合せ中の各ビューについて、そのビューの依存ビューも上記組合せ中に含まれる、という2つのプロパティを満たす上記組合せは、一定のプロファイルまたはレベルに準拠するMVCデコーダによって復号され得る。
本開示の技法に関して、メディアエクストラクタトラックおよび/または純粋ビデオサンプルトラックを使用して様々なMVCサブビットストリームが表され得る。これらのトラックの各々は、MVC動作点に対応し得る。
図8〜図21は、メディアエクストラクタのためのデータ構造、および本開示の技法に従って使用され得る他のサポートするデータ構造の様々な例を示すブロック図である。図8〜図22の様々なメディアエクストラクタは、以下で詳細に説明する様々な特徴を含む。概して、図8〜図21のメディアエクストラクタのいずれかは、ファイルのコード化サンプルを識別するために、ISOベースメディアファイルフォーマットまたはISOベースメディアファイルフォーマットに対する拡張に準拠するファイルのメディアエクストラクタトラック中に含まれ得る。概して、メディアエクストラクタは、参照されたトラックから1つまたは複数の全サンプルを抽出するために使用され得る。図8〜図12は、別のトラックの1つのビデオサンプルボックスを識別することが可能であるメディアエクストラクタの例である。図13に示すように、エクストラクタを実装する別の方法は、別のトラックからのサンプルのサンプルグルーピングを可能にすることである。時間スケーラビリティのためのより具体的なサポートを与えるために、図14に示すように、時間識別子がシグナリングされ得る。図16〜図22は、MVCのためのメディアエクストラクタの例であり、各ビデオサンプルボックス(アクセスユニット)から1つまたは複数の潜在的な非連続NALユニットを抽出することが可能である。エクストラクタの様々な例は、ファイルまたはアクセスユニット中のオフセットおよびバイトの長さに基づくが、他の例は、純粋に全NALユニットのインデックスに基づくことができ、したがって、バイト範囲のシグナリングが必要でなくてよい。また、全NALユニットのインデックスをもつシグナリングエクストラクタの機構は、SVCファイルフォーマットに拡張され得る。
また、図8〜図21の例は、3GPPファイルフォーマットに対する拡張として、直接3GPPファイルフォーマットに適用され得る。また、図8〜図21のうちの1つまたは複数の要素および概念は、他のエクストラクタを形成するために、図8〜図22のうちの他の図の要素と組み合わせられ得る。図8〜図21のうちのいくつかの図は、特定のファイルフォーマットに関して説明しているが、概して、図8〜図21の例は、同様の特性をもつ任意のファイルフォーマット、たとえば、ISOベースメディアファイルフォーマットまたはISOベースメディアファイルフォーマットの拡張に関して使用され得る。3GPPにおいて提案されたエクストラクタの使用を可能にするために、3GPPトラック選択ボックスは、図21の例に示すように、時間識別子、表示されるべきビューの数、および復号されるべきビューの数など、(抽出される)代替トラックの各々についてのより多くの特性を含むように拡張され得る。
図8は、メディアエクストラクタのフォーマットを示す例示的なメディアエクストラクタ300を示すブロック図である。図8の例では、メディアエクストラクタ300は、トラック参照インデックス302とサンプルオフセット値304とを含む。本開示の技法によれば、メディアエクストラクタ300は、メディアエクストラクタトラック内でインスタンス化され得るデータ構造の定義に対応し得る。マルチプレクサ30は、ビデオファイルの異なるトラックのNALユニットを識別するために、ビデオファイルのメディアエクストラクタトラック中にメディアエクストラクタ300の例に準拠するエクストラクタを含めるように構成され得る。デマルチプレクサ38は、メディアエクストラクタ300に準拠するエクストラクタを使用して識別されたNALユニットを検索するように構成され得る。
トラック参照インデックス302は、識別されたNALユニットが存在するトラックの識別子に対応し得る。ビデオファイルのトラックを区別するために、ビデオファイルの各トラックには一意のインデックスを割り当てられ得る。トラック参照インデックス302は、データを抽出すべきトラックを発見するために使用するトラック参照のインデックスを指定し得る。そのデータが抽出されるトラック中のサンプルは、エクストラクタを含んでいるサンプルに正確に時間的に整合され得る(メディア復号タイムラインにおいて、時間サンプルテーブルを使用して、サンプルオフセット値304によって指定されたオフセットだけ調整される)。いくつかの例では、ビデオファイルの第1のトラックはインデックス値「1」を有し、したがって、マルチプレクサ30は、ビデオファイルの第1のトラックを参照するトラック参照インデックス値302に値「1」を割り当て得る。トラック参照インデックス値の値「0」は、将来の使用のために予約され得る。
サンプルオフセット値304は、メディアエクストラクタトラック中のメディアエクストラクタ300の時間ロケーションから、トラック参照インデックス302によって参照されるトラックの識別されたNALユニットまでのオフセット値を定義する。すなわち、サンプルオフセット値304は、情報源として使用されるリンクされたトラック中のサンプルの相対インデックスを与える。サンプルオフセット値304の値0は、エクストラクタを含んでいるサンプルと同じ、または最も近接して先行する復号時間をもつサンプルを参照する。サンプル1は次のサンプルであり、サンプル−1は前のサンプルであり、以下同様である。たとえば、メディアエクストラクタ300に準拠するメディアエクストラクタが、H.263またはMPEG−4 part2で使用されるとき、メディアエクストラクタは、トラック参照インデックス302によって参照されるビデオトラックの時間サブセットを抽出するために使用され得る。
以下の擬似コードは、メディアエクストラクタ300と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
例示的な擬似コードでは、クラスMediaExtractor()がバイト整合される。すなわち、エクストラクタがMediaExtractor()クラスからインスタンス化されたとき、エクストラクタは8バイト境界上で整合される。変数「track_ref_index」はトラック参照インデックス値302に対応し、この例示的な擬似コードでは、符号なしの8バイト整数値に対応する。変数「sample_offset」は、サンプルオフセット値304に対応し、この例では、符号付きの8バイト整数値に対応する。
図9は、メディアエクストラクタ310の別の例を示すブロック図である。メディアエクストラクタ310は、トラック参照インデックス314とサンプルオフセット値316とを含み、さらに、サンプルヘッダ312を含む。トラック参照インデックス314およびサンプルオフセット値316は、概してトラック参照インデックス302およびサンプルオフセット値304(図8)と同様のデータを含み得る。
サンプルヘッダ312は、H.264/AVCに対応する例では、メディアエクストラクタ310によって参照されるビデオサンプルのNALユニットヘッダに従って構築され得る。サンプルヘッダ312は、3つのシンタックス要素、forbidden_zero_bit、(3ビットを備え得る)nal_ref_idc、(5ビットを備え得る)nal_unit_typeをもつデータの1バイトを含み得る。「nal_unit_type」の値は29(または任意の他の予約済みの数)であり得、他の2つのシンタックス要素は、識別されたビデオサンプル中のそれらのシンタックス要素と同様であり得る。MPEG−4 part−2ビジュアルに準拠する例の場合、サンプルヘッダ312は、スタートコードプレフィックス「0x 00 00 01」とスタートコード「0x C5」(または任意の他の予約済み数)とを含み得る4バイトコードを備え得、「0x」は、「0x」に続く値が16進値であることを示す。H.263の場合、サンプルヘッダ312はまた、通常のビデオサンプルのスタートコードとは異なるバイト整合されたスタートコードを含み得る。エクストラクタが通常のビデオサンプルと考えられ得るように、サンプルヘッダ312は、同期の目的でデマルチプレクサ38によって使用され得る。
以下の擬似コードは、メディアエクストラクタ310と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図10は、エクストラクタ内で識別されたNALユニットのバイト範囲をシグナリングすることによって、NALユニットを識別する例示的なメディアエクストラクタ320を示すブロック図である。メディアエクストラクタ320は、サンプルヘッダ312と同様であり得るサンプルヘッダ322と、トラック参照インデックス302と同様であり得るトラック参照インデックス324とを含む。ただし、サンプルオフセット値ではなく、メディアエクストラクタ320の例はデータオフセット値326とデータ長値328とを含む。
データオフセット値326は、メディアエクストラクタ320によって識別されるデータの開始点を記述し得る。すなわち、データオフセット値326は、コピーすべき、トラックインデックス値324によって識別されるトラック内の第1のバイトへのオフセットを表す値を備え得る。データ長値328は、コピーすべきバイトの数を記述し得、したがって、参照されるサンプル(または複数のNALユニットを参照するときには複数のサンプル)の長さと等価であり得る。
以下の擬似コードは、メディアエクストラクタ320と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図11は、将来の拡張性のための予約済みビットを含んでいる例示的なメディアエクストラクタ340を示すブロック図である。メディアエクストラクタ340は、トラック参照インデックス342とサンプルオフセット値346とを含み、それらは、それぞれ、メディアエクストラクタ302およびサンプルオフセット値304と同様であり得る。さらに、メディアエクストラクタ340は、メディアエクストラクタに対する将来の拡張のために使用される予約済みビットを備え得る予約済みビット344を含む。以下の擬似コードは、メディアエクストラクタ340と同様のメディアエクストラクタクラスの例示的なクラス定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図12は、トラック参照インデックス値ではなく、トラック識別子値を使用する例示的なメディアエクストラクタ350を示すブロック図である。トラックを識別するためのトラック識別子値の使用は、ISOベースメディアファイルフォーマットでのトラック参照ボックスのプレゼンテーションを参照し得る。メディアエクストラクタ350の例は、トラック識別子352と予約済みビット354とサンプルオフセット値356とを含む。予約済みビット354は、予約済みビット354の周りの破線で示すように随意である。すなわち、いくつかの例は予約済みビット354を含み得るが、他の例は予約済みビット354を省略し得る。サンプルオフセット値356は、サンプルオフセット値304と同様であり得る。
トラック識別子352は、データを抽出すべきトラックのトラックIDを指定する。データが抽出されるトラック中のサンプルは、メディアエクストラクタ350を含んでいるサンプルに正確に時間的に整合され得る(メディア復号タイムラインにおいて、時間サンプルテーブルを使用して、サンプルオフセット356によって指定されたオフセットだけ調整される)。第1のトラック参照には、識別子値1が割り当てられ得る。値0は、将来の使用および拡張のために予約され得る。
以下の擬似コードは、メディアエクストラクタ350と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図13は、例示的なメディアエクストラクタサンプルグループ360を示すブロック図である。マルチプレクサ30は、サンプルテーブルボックスコンテナにおいて(タイプ識別子「MESG」を有する)メッセージタイプボックス中にメディアエクストラクタサンプルグループ360を含み得る。マルチプレクサ30は、メッセージボックスにおいて0または1つのメディアエクストラクタサンプルグループ360オブジェクトを含むように構成され得る。図13の例では、メディアエクストラクタサンプルグループ360は、トラック参照インデックス362と、グループタイプ364と、グループ数カウント366と、予約済みビット368と、グループ記述インデックス370とを含む。
トラック参照インデックス362は、ある基準下でサンプルグループからデータを抽出すべきトラックを発見するために使用されるトラック参照のインデックスを指定する。すなわち、トラック参照インデックス362は、トラック参照インデックス302と同様の方法で、メディアエクストラクタによって識別されるデータを抽出すべきトラックを識別する。
グループタイプ値364は、メディアエクストラクタサンプルグループ360が対応するサンプルグループのタイプを識別する。グループタイプ値364は、概してサンプリンググループのサンプルグループを形成するために使用される基準を識別し、トラック参照インデックス362によって識別されるトラック中でグループタイプの同じ値をもつサンプルグループ記述テーブルにその基準をリンクする。グループタイプ値364は整数値を備え得る。このようにして、メディアエクストラクタサンプルグループ360のグループタイプ値は、トラック参照インデックス362が参照するトラックのグループタイプと同様であり得る。代替的に、ビデオ時間サブセットの場合、グループタイプ値364は「vtst」として定義され得、メディアエクストラクタサンプルグループはそのグループタイプのためにのみ定義され得、シンタックステーブルは「grouping_type」のシンタックス要素を必要としないであろう。
グループ数カウント値366は、メディアエクストラクタサンプルグループ360を含むメディアエクストラクタトラック中のサンプルグループの数を記述し得る。グループ数カウント値366の値0は、グループタイプ値364によって参照される基準下でのすべてのサンプルグループが、メディアエクストラクタトラックを形成するために使用されることを表し得る。グループ記述インデックス368は、サンプルグループ記述テーブルにおいて、メディアエクストラクタトラックを形成するために使用されるサンプルグループエントリのインデックスを定義する。
本開示の技法によれば、メディアエクストラクタトラック中でサンプルBに続くサンプルAが、トラック参照インデックス362によって参照されるトラック中でサンプルAがサンプルBに続くことを示すように、サンプルが時間的に順序付けられるようにすべてのサンプルをサンプルグループエントリ中に配置するために、アセンブルプロセスが使用され得る。
以下の擬似コードは、メディアエクストラクタサンプルグループ360と同様のメディアエクストラクタサンプルグループクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図14は、AVCファイルフォーマットに準拠するビデオファイルのコンテキストにおいて使用され得る例示的なメディアエクストラクタ380を示すブロック図である。メディアエクストラクタ380の例は、トラック参照インデックス382と、時間識別子値384と、予約済みビット386と、サンプルオフセット値388とを含む。トラック参照インデックス382およびサンプルオフセット値388は、それぞれトラック参照インデックス302およびサンプルオフセット値304と同様の方法で使用され得る。予約済みビット386は、将来の使用のために予約され得、この時点ではセマンティック値を割り当てられない。
時間識別子値384は、メディアエクストラクタ380によって抽出されたサンプルの時間レベルを指定する。一例では、時間レベルは0以上7以下の範囲内にある。上記で説明したように、符号化されたピクチャは時間レベルに対応し得、時間レベルは、概してフレーム間の符号化階層を記述する。たとえば、(アンカーフレームとも呼ばれる)キーフレームは最高時間レベルを割り当てられ得、参照フレームとして使用されないフレームは相対的により低い時間レベルを割り当てられ得る。このようにして、メディアエクストラクタ380は、サンプル自体を明示的に識別するのではなく、サンプルの時間レベルを参照することによって、トラック参照インデックス382によって参照されたトラックから抽出されたサンプルを識別し得る。時間識別子値384によって定義される値よりも高い値までのメディアエクストラクタをもつメディアエクストラクタトラックは、より高いフレームレートをもつ動作点に対応し得る。
以下の擬似コードは、メディアエクストラクタ380と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図15は、メディアエクストラクタトラックを含むようにMVCを変更するために使用され得る例示的なMVCメディアエクストラクタ420を示すブロック図である。メディアエクストラクタ420の例は、随意のNALユニットヘッダ422と、トラック参照インデックス424と、サンプルオフセット426と、連続バイトセットカウント428と、データオフセット値430およびデータ長値432を含む値のループとを含む。MVCメディアエクストラクタ420は、特定のトラックからビュー構成要素のサブセットのいくつかのNALユニットを抽出するために使用され得る。MVCメディアエクストラクタ420の例は、参照されたトラックのサンプルからデータを抽出するときにトラック中のビュー構成要素をスキップすることができる。
存在するとき、NALユニットヘッダ422は、MVCメディアエクストラクタ420によって識別されたNALユニットのNALユニットヘッダをミラーリングし得る。すなわち、NALユニットヘッダ422のシンタックス要素は、MVCファイルフォーマットで定義されたエクストラクタまたはアグリゲータ生成プロセスにおけるNALユニットヘッダシンタックスに従って生成され得る。いくつかの例では、たとえば、関係するNALユニットヘッダを含めるために一連のエクストラクタが生成されるとき、エクストラクタはNALユニットヘッダ422を必要としないことがある。
トラック参照インデックス値424は、データを抽出すべきトラックを発見するために使用するトラック参照のインデックスを指定する。データが抽出されるトラック中のサンプルは、サンプルオフセット値426によって指定されたオフセットだけ調整された、メディア復号タイムラインにおいて、MVCメディアエクストラクタ420を含んでいるサンプルに時間的に整合され得る。第1のトラック参照は、インデックス値1を受信するように指定され得、トラック参照インデックス値の値0が予約され得る。
サンプルオフセット値426は、トラック参照インデックス値424によって参照されたトラック中にある抽出されるべきサンプルの、MVCメディアエクストラクタ420の時間ロケーションに対するオフセットを定義する。サンプルオフセット値426の値0は、抽出すべきサンプルが同じ時間ロケーションにあることを示し、−1は前のサンプルを示し、+1は次のサンプルを示し、以下同様である。
連続バイトセットカウント428は、データを抽出すべきトラックのサンプルの連続バイトセットの数を記述する。連続バイトセットカウント428が値0を有する場合、トラック中の参照されたサンプル全体が抽出されることになる。連続バイトセットはまた、サンプルの別々の部分として参照され得る。
データオフセット値430およびデータ長値432はループにおいて発生する。概して、ループの反復回数、すなわち、データオフセット値430およびデータ長値432の数は、抽出されるべきサンプルの部分の数(たとえば、連続バイトセットの数)に関係する。このようにして、MVCメディアエクストラクタ420を使用してサンプルの2つ以上の部分が抽出され得る。抽出されるべきサンプルの部分ごとに、データオフセット値430のうちの対応する1つが部分の開始(たとえば、サンプルの最初のバイトに対する、部分の最初のバイト)を示し、データ長値432のうちの対応する1つが、コピーすべき長さ、たとえば、バイトの数を示す。いくつかの例では、データ長値432のうちの1つの値0は、サンプル中のすべての残りのバイトをコピーすべきであること、すなわち、部分が、データオフセット値430のうちの対応する1つによって示されたバイトと、サンプルの終端までのすべての他の連続バイトとに対応することを示し得る。
以下の擬似コードは、MVCメディアエクストラクタ420と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図16は、メディアエクストラクタトラックを含むようにMVCを変更するために使用され得る別の例示的なMVCメディアエクストラクタ440を示すブロック図である。MVCメディアエクストラクタ440の例は、図15の例に関して説明したサンプルの固有のバイトとは反対に、抽出のための特定のNALユニットを識別する。図16の例では、MVCメディアエクストラクタ440は、随意のNALユニットヘッダ442と、トラック参照インデックス444と、サンプルオフセット446と、連続NALU(NALユニット)セットカウント448と、NALUオフセット値450および連続NALユニットの数452のループとを含む。NALユニットヘッダ442、トラック参照インデックス444、およびサンプルオフセット値446は、概して、それぞれNALユニットヘッダ422、トラック参照インデックス424、およびサンプルオフセット値426と同様に定義される。
連続NALUセットカウント448は、データを抽出すべきトラックのサンプルの連続NALユニットの数を記述する。いくつかの例では、この値が0に設定された場合、トラック中の参照されたサンプル全体が抽出される。
NALUオフセット値450および連続NALUの数452はループにおいて発生する。概して、連続NALUセットカウント448によって定義された、連続NALUのセットと同数のNALUオフセット値のインスタンスおよび連続NALUの数がある。各NALUオフセット値は、データを抽出すべきトラックのサンプルにおける対応するNALユニットのオフセットを記述する。NALユニットのうちのこのオフセットから開始するNALユニットは、このエクストラクタを使用して抽出され得る。連続NALU値の各数は、NALユニットの対応するセットのためにコピーすべき、単一の参照されたNALユニット全体の数を記述する。
以下の擬似コードは、MVCメディアエクストラクタ440と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図17は、ビュー構成要素のための2つ以上のNALユニットがあるとき、同じビュー構成要素中のNALユニットをアグリゲートする別の例示的なMVCメディアエクストラクタ460を示すブロック図である。その場合、MVCメディアエクストラクタ460は、識別されたビュー構成要素を抽出するために使用され得る。図17の例では、MVCメディアエクストラクタ460は、随意のNALユニットヘッダ462と、トラック参照インデックス464と、サンプルオフセット466と、連続ビューセットカウント468と、ビュー構成要素オフセット値470およびビュー構成要素カウント472のループとを含む。NALユニットヘッダ462、トラック参照インデックス464、およびサンプルオフセット値466は、概して、それぞれNALユニットヘッダ422、トラック参照インデックス424、およびサンプルオフセット値426と同様に定義される。
連続ビューセットカウント468は、データを抽出すべき、トラック参照インデックス464によって識別されたトラック中の識別されたサンプルの連続ビュー構成要素の数を定義する。マルチプレクサ30は、トラック中の参照されたサンプル全体が抽出されるべきであることを示すために、連続ビューセットカウント468の値を0に設定し得る。
ビュー構成要素オフセット値470およびビュー構成要素カウント472はループにおいて発生する。概して、連続ビューセットカウント468の値と同数のループの反復があり、各ループは連続ビューセットのうちの1つに対応する。ビュー構成要素オフセット値470の各々は、対応する連続ビューセットのためのデータを抽出すべきトラックのサンプルにおける最初のビュー構成要素のオフセットを示す。次いで、ビュー構成要素のうちのこのオフセットから開始するビュー構成要素は、MVCメディアエクストラクタ460を使用して抽出され得る。ビュー構成要素カウント472の各々は、対応する連続ビューセットのためのコピーすべきサンプル中の参照されたビュー構成要素全体の数を記述する。
以下の擬似コードは、MVCメディアエクストラクタ460と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図18は、様々なトラックを参照するために使用され得るMVCメディアエクストラクタ480の別の例を示すブロック図である。図18の例では、MVCメディアエクストラクタ480は、随意のNALユニットヘッダ482と、連続ビューセットカウント484と、サンプルオフセット値486、トラック参照インデックス値488、ビュー構成要素オフセット値490、およびビュー構成要素カウント492のループとを含む。NALユニットヘッダ482は、NALユニットヘッダ422と同様に定義され得、いくつかの例では省略され得る。
連続ビューセットカウント484は、track_ref_indexのトラック参照インデックスをもつ、データを抽出すべきメディアエクストラクタトラックのサンプルの連続ビュー構成要素の数を与える。track_ref_indexは、データを抽出すへきトラックを発見するために使用すべきトラック参照のインデックスを指定し得る。データが抽出されるトラック中のビュー構成要素は、(時間サンプル表を使用して、サンプルオフセット値486のうちの対応する1つによって指定されたオフセットだけ調整された、メディア復号タイムラインにおいて、)MediaExtractorMVCを含んでいるサンプルに時間的に整合され得る。第1のトラック参照はインデックス値1を有し得、値0は将来の使用のために予約され得る。
MVCメディアエクストラクタ480の例は、サンプルオフセット値486と、トラック参照インデックス値488と、ビュー構成要素オフセット値490と、ビュー構成要素カウント492との各々をループ中に含む。ループの各反復は、MVCメディアエクストラクタ480に対応するサンプルのためのデータを抽出すべき特定のトラックに対応する。
サンプルオフセット値486は、トラック参照インデックス値488のうちの対応する1つによって参照された、情報源として使用され得るトラック中のサンプルの相対インデックスを定義する。サンプル0は、MVCメディアエクストラクタ480を含んでいるサンプルと同じか、または最も近い先行する復号時間をもつトラック参照インデックス値488のうちの対応する1つによって識別されたトラック中のサンプルであり、サンプル1は次のサンプルであり、サンプル−1は前のサンプルであり、以下同様である。
トラック参照インデックス値488の各々は、ループの対応する反復のためのデータを抽出すべきトラックを発見するために使用すべきトラック参照のインデックスを指定する。複数のトラック参照インデックス値を使用することによって、MVCメディアエクストラクタ480は、複数の異なるトラックからデータを抽出し得る。
ビュー構成要素オフセット値490の各々は、ループのこの反復におけるトラック参照インデックス値488のうちの対応する1つに対応するトラック参照インデックスをもつ、データを抽出すべきトラックのサンプルにおける第1のビュー構成要素のオフセットを記述する。ビュー構成要素のうちのこのオフセットから開始するビュー構成要素は、MVCメディアエクストラクタ480を使用して抽出され得る。いくつかの例では、外側のループは、サンプルが抽出されるべきトラックにわたって反復し、内側のループは、対応するトラックから抽出されるべきサンプルにわたって反復する、ネスティングされたループ構造を有する、図15〜図17のメディアエクストラクタと同様のメディアエクストラクタが構築され得る。ビュー構成要素カウント492の各々は、ループのこの反復におけるトラック参照インデックス値488の現在の値に対応するトラック参照インデックスをもつトラックのサンプル中の参照されたビュー構成要素の数を記述する。
以下の擬似コードは、MVCメディアエクストラクタ480と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図19は、エクストラクタの持続時間をシグナリングする別の例示的なMVCメディアエクストラクタ500を示すブロック図である。メディアエクストラクタトラック中の異なるサンプルがエクストラクタの同じシンタックス要素を共有するとき、MVCメディアエクストラクタ500は1つまたは複数の利点を与え得る。図19の例では、MVCメディアエクストラクタ500は、サンプルカウント502と、連続ビューセットカウント504と、サンプルオフセット値506と、トラック参照インデックス508と、ビュー構成要素オフセット510と、ビュー構成要素カウント512とを含む。
連続ビューセットカウント504、サンプルオフセット値506、トラック参照インデックス508、ビュー構成要素オフセット510、およびビュー構成要素カウント512は、概して、連続ビューセットカウント484、サンプルオフセット値486、トラック参照インデックス488、ビュー構成要素オフセット490、およびビュー構成要素カウント492のうちの対応する1つに従って定義され得る。サンプルカウント502は、同じメディアエクストラクタを使用するメディアエクストラクタトラックを含んでいるMVCメディアエクストラクタ500中の連続サンプルの数を定義し得る。
以下の擬似コードは、MVCメディアエクストラクタ500と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
図20は、異なるエクストラクタのセットを定義する別の例示的なMVCメディアエクストラクタ520を示すブロック図である。メディアエクストラクタトラック中のサンプルごとに、サンプルは、エクストラクタのセットのうちの1つまたは複数、あるいはエクストラクタへの参照のいずれかを使用することができる。すなわち、MVCメディアエクストラクタ520と同様のメディアエクストラクタのセットが定義され得、各サンプルは、別のトラックのサンプルを識別するために、エクストラクタのセットのうちの1つまたは複数、あるいはエクストラクタへの参照のいずれかを使用し得る。
MVCメディアエクストラクタ520の例は、エクストラクタ識別子値522と、サンプルオフセット値524と、トラック参照インデックス値526と、連続ビューセットカウント528と、ビュー構成要素オフセット530およびビュー構成要素カウント532を含むループとを含む。サンプルオフセット値524、連続ビューセットカウント528、ビュー構成要素オフセット530、およびビュー構成要素カウント532は、連続ビューセットカウント484、サンプルオフセット値486、ビュー構成要素オフセット490、およびビュー構成要素カウント492のうちの対応する1つに従って定義され得る。トラック参照インデックス値526は、たとえば、トラック参照インデックス464に従って定義され得る。
エクストラクタ識別子値522は、エクストラクタ、すなわち、MVCメディアエクストラクタ520の識別子を定義する。メディアエクストラクタトラック中のサンプルが、メディアエクストラクタを使用するためにエクストラクタ識別子値を参照し得るように、同じメディアエクストラクタトラック中のエクストラクタは、異なるエクストラクタ識別子値を割り当てられる。参照エクストラクタボックスはまた、エクストラクタの数と参照エクストラクタ識別子とを含むように定義され得る。エクストラクタの数の値は、エクストラクタトラック中のサンプルのためのデータをコピーするために使用されるエクストラクタの数を与え得る。エクストラクタの数の値が0に等しいとき、所定のエクストラクタ識別子、たとえば、0に等しいエクストラクタ識別子を有するエクストラクタが使用され得る。参照エクストラクタ識別子は、エクストラクタトラック中のサンプルのためのデータをコピーするために使用されるエクストラクタのエクストラクタ識別子を与え得る。このボックスはメディアエクストラクタトラックのサンプル中に含まれ得る。
以下の擬似コードは、MVCメディアエクストラクタ520と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
以下の擬似コードは、上記で説明した参照エクストラクタボックスのための参照エクストラクタボックスクラスの例示的な定義を与える。
図21は、マップサンプルグループを使用して形成され得る例示的なMVCメディアエクストラクタ550を示すブロック図である。MVCメディアエクストラクタ550の例は、それぞれがマップサンプルグループ中の連続NALユニットを与える、一連のサンプルエントリからのNALユニットグループを指定する。図22の例では、MVCメディアエクストラクタ550は、NALUグループカウント552と、トラックインデックス554、グループ記述インデックス556、NALU開始マップサンプル558、およびNALUビューカウント560を含むループとを含む。
NALUグループカウント552は、参照トラック中のマップサンプルグループエントリからのNALユニットグループの数を指定する。トラック参照インデックス値554は、それぞれループの対応する反復のためのデータを抽出すべきトラックを発見するために使用すべきトラック参照のインデックスを指定する。グループ記述インデックス556は、それぞれループの対応する反復のためのNALユニットグループを形成するために使用されるマップサンプルグループエントリのインデックスを指定する。NALU開始マップサンプル558は、それぞれループの対応する反復におけるグループ記述インデックス556のうちの対応する1つのマップサンプルエントリインデックスをもつマップサンプルグループ中のNALユニットのオフセットを指定する。NALUビューカウント560は、ループの対応する反復におけるグループ記述インデックス556のうちの対応する1つのマップサンプルエントリインデックスをもつマップサンプルグループ中のメディアエクストラクタ中に抽出されるべき連続NALユニットの数を指定する。
以下の擬似コードは、MVCメディアエクストラクタ550と同様のメディアエクストラクタクラスの例示的な定義を与える。
マルチプレクサ30およびデマルチプレクサ38は、上記の例示的な擬似コードにおいて定義されたメディアエクストラクタを使用してメディアエクストラクタデータオブジェクトをインスタンス化し得る。したがって、デマルチプレクサ38は、たとえば、インスタンス化されたメディアエクストラクタによって参照された別のトラックから識別されたデータを取り出すために、選択されたトラックからデータを取り出すとき、インスタンス化されたメディアエクストラクタを参照し得る。
本開示の技法は、サンプルグループ中のサンプルのビュー構成要素を構成するためのアセンブルプロセスを含み得る。サンプルグループエントリのサンプル中のビュー構成要素は、サンプルAが(トラック参照インデックスのインデックスをもつ)元のトラック中のサンプルBに続く場合、サンプルA中のビュー構成要素がメディアエクストラクタトラック中のサンプルB中のビュー構成要素に続き、サンプルAがサンプルBよりも前の復号時間を有する場合、サンプルA中のビュー構成要素がメディアエクストラクタトラック中のサンプルB中のビュー構成要素に続き、トラックの同じサンプル中の2つのビュー構成要素は、メディアエクストラクタマップサンプルグループのシンタックステーブル中の提示の順序に従い、トラックの同じサンプル中の2つのビュー構成要素がNALユニットの同じグループに属する場合、すなわち、それらがメディアエクストラクタマップサンプルグループ中の同じループのシンタックス要素によって抽出された場合、それらは元の順序に従い、2つのビュー構成要素が異なるトラック中のサンプルから抽出されたが、同じタイムスタンプをもつ場合、それらはビュー識別子ボックス中に指定された順序インデックスの順序に従うように、適時に順序付ける。
図22は、トラック選択ボックスの追加の属性をシグナリングする例示的な変更された3GPPトラック選択ボックス390を示すブロック図である。この著述時点での、直近の3GPP規格は、言語と、帯域幅と、コーデックと、スクリーンサイズと、最大パケットサイズと、メディアタイプとを記述する属性を含むAttributeListを指定する。3GPPトラック選択ボックス390の属性リスト392は、言語値394と、帯域幅値396と、コーデック値398と、スクリーンサイズ値400とを含み、既存の3GPP規格に従ってこれらの属性をシグナリングする。さらに、本開示の技法は、フレームレート値406と、時間識別子値408と、場合によってはディスプレイビュー数値410と、出力ビューリスト値412とを含むように既存の3GPPトラック選択ボックスを変更し得る。
言語値394は、既存の3GPP規格の5.3.3.4章において定義されている、セッションレベルSDPにおける「altグループ」属性のグループタイプLANGの値を定義する。帯域幅値396は、メディアレベルSDPにおける「b=AS」属性の値を定義する。コーデック値398は、メディアトラックのサンプル記述ボックス中のSampleEntry値を定義する。スクリーンサイズ値400は、メディアトラック中のMP4VisualSampleEntry値およびH263SampleEntry値の幅および高さフィールドを定義する。最大パケットサイズ値402は、RTPHintSampleEntry中、たとえば、RTPヒントトラック中のMaxPacketSizeフィールドの値を定義する。メディアタイプ値404は、メディアトラックのハンドラボックス中のHandlerTypeを記述する。概して、これらの値は既存の3GPP規格に対応する。
フレームレート値406は、3GPPトラック選択ボックス390に対応するビデオトラックまたはメディアエクストラクタトラックのフレームレートを記述する。時間識別子値408は、3gPPトラック選択ボックス390に対応するビデオトラックの時間識別子に対応し、より低い時間識別子値をもつトラックに依存し得る。いくつかの例では、マルチプレクサ30は、時間識別子値408の値を事前構成された「指定なし」値、たとえば、8に設定することによって、その値が指定されていないことを示すことができる。概して、マルチプレクサ30は、非ビデオトラックのための時間識別子値408の値が指定されないことを示し得る。いくつかの例では、マルチプレクサ30はまた、対応するビデオトラックがメディアエクストラクタを含んでいないとき、および/または時間サブセットとして他のトラックによって参照されないとき、時間識別子値408の値が指定されないことを示し得る。
3GPPにおいてMVCが考慮される例では、マルチプレクサ30は、ディスプレイビュー数の値410と出力ビューリスト値412との追加の属性を含み得る。そのような例では、マルチプレクサ30は時間識別子値408を省略し得る。ディスプレイビュー数の値410は、対応するトラックのための出力されるべきビューの数を記述する。たとえば、表示されるべきビューが表示されないビューを参照して符号化されるとき、出力されるべきビューの数と復号されるべきビューの数とは必ずしも同じでない。出力ビューリスト値412は、出力されるべきN個のビューを識別するN個のビュー識別子のリストを定義し得る。
図23は、本開示の技法による、メディアエクストラクタを使用するための例示的な方法を示すフローチャートである。初めに、A/Vソースデバイス20(図1)などのソースデバイスは、本開示の技法に従って、ファイルフォーマットに準拠するファイルのためのビデオトラックを構築する。すなわち、マルチプレクサ30は、ビデオトラックが1つまたは複数のNALユニットを含む符号化されたビデオサンプルを含むように、トラック中の符号化されたビデオデータをアセンブルする(600)。マルチプレクサ30はまた、ビデオトラックの1つまたは複数のNALユニットの一部または全部を参照するエクストラクタを構築し(602)、エクストラクタを含むエクストラクタトラックを構築する(604)。さらに、マルチプレクサ30は、符号化されたビデオサンプルを、メディアエクストラクタトラック中、ならびに符号化されたビデオサンプルおよび/またはメディアエクストラクタを含む追加のトラック中に含め得る。
次いで、マルチプレクサ30はファイルを出力する(606)。ファイルは、送信機、トランシーバ、ネットワークインターフェース、モデム、または他の信号出力手段を介して信号に出力され得るか、または、ファイルは、USBインターフェース、磁気メディアレコーダ、光レコーダ、または他のハードウェアインターフェースなどのハードウェアインターフェースを介して記憶媒体に出力され得る。
A/V宛先デバイス40は、たとえば、信号を受信するかまたは記憶媒体を読み取ることによって、最終的にファイルを受信する(608)。デマルチプレクサ38は、復号されるべき2つ(以上)のトラックのうちの1つを選択する(610)。デマルチプレクサ38は、ビデオデコーダ48の復号機能、ビデオ出力44のレンダリング機能、または他の基準に基づいてトラックのうちの1つを選択し得る。エクストラクタトラックが選択されると、デマルチプレクサ38は、エクストラクタによって識別された符号化されたビデオサンプルが記憶されたトラックから、エクストラクタトラック中のエクストラクタによって参照されたNALユニットを取り出し得る。
デマルチプレクサ38は、選択されたトラック中にない、選択されたトラック中の少なくとも1つのエクストラクタによって識別されない符号化されたビデオサンプル(または他のNALユニット)を廃棄し得る。すなわち、デマルチプレクサ38は、使用されないビデオデータを復号するタスクをビデオデコーダ48に与える必要がないように、そのような符号化されたビデオサンプルをビデオデコーダ48に送ることを回避し得る。
1つまたは複数の例では、説明した機能はハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装する場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され得る。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含むデータ記憶媒体または通信媒体などのコンピュータ可読記憶媒体を含み得る。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータまたは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないことを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびブルーレイ(登録商標)ディスク(disc)を含み、この場合、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)はデータをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
コンピュータ可読媒体中に符号化された命令は、1つまたは複数のデジタル信号プロセッサ(DSP)など1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の等価な集積または個別論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび/またはソフトウェアモジュール内に提供され得、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実施され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要はない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明したように1つまたは複数のプロセッサを含んで、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
様々な例について説明した。これらおよび他の例は以下の特許請求の範囲に入る。