(57)【特許請求の範囲】
【請求項１】
オーディオコンテンツ、画像コンテンツ、およびビデオコンテンツの１つまたは複数を含む、プレゼンテーションのためのコンテナフォーマットでのメディアファイルを受け取るステップ（６１０）であって、前記コンテナフォーマットは、前記メディアファイルが、前記コンテナフォーマットに従って規定される階層的に編成された構文要素を含むように、ツリー構造である、ステップと、
前記メディアファイルにおける前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の少なくともいくつかの、構文を意識した操作を行うステップ（６２０）であって、前記構文を意識した操作を行う前記ステップは、前記メディアファイルの前記コンテナフォーマットに対する適合性を検証することを含み、前記検証は前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の少なくともいくつかに対する相互検証を含み、前記相互検証は、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの与えられた構文要素に対して、持続時間、フレームの数、サンプルサイズ、ファイルサイズ、ボックスサイズ、又はチャンクオフセットのうちの与えられた１つが、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの前記与えられた構文要素の値と１つまたは複数の他の構成要素のそれぞれの値との間で矛盾しないことをそれぞれチェックすることを含む、ステップと
を含む、コンピューティングシステムにおける方法。
【請求項２】
適合性を検証する前記ステップが、
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の前記少なくともいくつかに対して、単一要素検証を行うステップ（７１０）と、
前記プレゼンテーションにおけるオーディオサンプルとビデオサンプルの間の同期をチェックするステップ（７４０）と、
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの前記与えられた構文要素に対して、前記与えられた構文要素の値が、１つまたは複数の前記与えられた構文要素の制限を充足していることをチェックする（７３０）と
の少なくとも１つをさらに含む、請求項１に記載の方法。
【請求項３】
構文を意識した操作を行う前記ステップが、前記コンテナフォーマットでの前記メディアファイルの破損をシミュレートするステップをさらに含む、請求項１または２に記載の方法。
【請求項４】
破損をシミュレートする前記ステップが、
前記コンテナフォーマットでの前記メディアファイルに対するファイルフォーマット構造を維持しながら、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の前記少なくともいくつかの１つまたは複数に対して、有効な値を他の値に置き換えるステップと、
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の所与の構文要素に対して、前記所与の構文要素の値を改変することによってランダムビットフリップをシミュレートするステップと、
前記コンテナフォーマットでの前記メディアファイルのオーディオトラックからオーディオデータを除去することによってオーディオ記録障害をシミュレートするステップと、
前記コンテナフォーマットでの前記メディアファイルのオブジェクトに、前記コンテナフォーマットに従って規定される無関係な構文要素を追加することによって、記録の不正な終了をシミュレートするステップと
の１つまたは複数を含む、請求項３に記載の方法。
【請求項５】
構文を意識した操作を行う前記ステップが、
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の中で、１つまたは複数の破損した値を検出するステップと、
前記１つまたは複数の破損した値を訂正するステップと
をさらに含む、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素が、前記コンテナフォーマットに従って階層にネストされたオブジェクト、およびオブジェクトの属性である、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の前記少なくともいくつかに対する相互検証が、ムービーヘッダボックス内に示されるタイムスケールでのトラックの持続時間を表すトラックヘッダボックス内の持続時間構文要素を、前記トラックヘッダボックス内の前記持続時間構文要素の値が、前記トラックの編集のすべての前記持続時間の合計に等しいかどうかについて検証することを含む、請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の前記少なくともいくつかに対する相互検証が、ストリーム内のランダムアクセスポイントであるサンプルの番号を与える同期サンプルボックス内のｓａｍｐｌｅ＿ｎｕｍｂｅｒ構文要素の検証を含み、サンプルはビデオフレームまたはオーディオフレームとすることができ、前記同期サンプルボックス内のｓａｍｐｌｅ＿ｎｕｍｂｅｒ要素の値は、サンプルサイズボックス内のｓａｍｐｌｅ＿ｃｏｕｎｔ要素の値より大きくなるべきではなく、前記サンプルサイズボックス内の前記ｓａｍｐｌｅ＿ｃｏｕｎｔ要素は、トラック内のサンプルの数を与える整数である、請求項１から６のいずれか一項に記載の方法。
【請求項９】
オーディオコンテンツ、画像コンテンツ、およびビデオコンテンツの１つまたは複数を含む、プレゼンテーションのためのコンテナフォーマットでのメディアファイルを記憶するためのバッファであって、前記コンテナフォーマットは、前記メディアファイルが、前記コンテナフォーマットに従って規定される階層的に編成された構文要素を含むように、ツリー構造である、バッファと、
前記メディアファイルにおける前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の少なくともいくつかの、構文を意識した操作を行うように構成された構文操作ツール（３４０）であって、前記構文操作ツール（３４０）は、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の少なくともいくつかに対する相互検証を含む、前記メディアファイルが前記コンテナフォーマットに適合することを検証するために１つまたは複数のタイプの動作を行うように構成されたコンテナフォーマット検証器（４１０）を含み、前記相互検証は、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの与えられた構文要素に対して、持続時間、フレームの数、サンプルサイズ、ファイルサイズ、ボックスサイズ、又はチャンクオフセットのうちの与えられた１つが、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの前記与えられた構文要素の値と１つまたは複数の他の構成要素のそれぞれの値との間で矛盾しないことをそれぞれチェックすることを含む、構文操作ツールと
を備えるコンピューティングシステム。
【請求項１０】
オーディオコンテンツ、画像コンテンツ、およびビデオコンテンツの１つまたは複数を含む、プレゼンテーションのためのコンテナフォーマットでのメディアファイルを受け取るステップであって、前記コンテナフォーマットは、前記メディアファイルが、前記コンテナフォーマットに従って規定される階層的に編成された構文要素を含むように、ツリー構造である、ステップと、
前記メディアファイルにおける前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の少なくともいくつかの、構文を意識した操作を行うステップであって、前記構文を意識した操作は、前記メディアファイルの前記コンテナフォーマットに対する適合性を検証することを含み、前記検証は前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の少なくともいくつかに対する相互検証を含み、前記相互検証は、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの与えられた構文要素に対して、持続時間、フレームの数、サンプルサイズ、ファイルサイズ、ボックスサイズ、又はチャンクオフセットのうちの与えられた１つが、前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの前記与えられた構文要素の値と１つまたは複数の他の構成要素のそれぞれの値との間で矛盾しないことをそれぞれチェックすることを含む、ステップと
を含む方法を、コンピュータ実行可能命令によってプログラムされたコンピューティングシステムに行わせるように、前記コンピュータ実行可能命令を記憶した、１つまたは複数のコンピュータ可読媒体。
【請求項１１】
適合性を検証する前記ステップが、
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素の前記少なくともいくつかのそれぞれに対して、単一要素検証を行うステップと、
前記コンテナフォーマットに従って規定される前記階層的に編成された構文要素のうちの前記与えられた構文要素に対して、前記与えられた構文要素の値が、１つまたは複数の前記与えられた構文要素の制限を充足していることをチェックするステップと
をさらに含む、請求項１０に記載のコンピュータ実行可能命令を記憶した１つまたは複数のコンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  技術者は、圧縮（ソースコーディングまたはソースエンコーディングとも呼ばれる）を用いてデジタルメディアコンテンツのビットレートを低減する。圧縮は、情報をより低いビットレート形式に変換することによって、メディア情報の記憶および送信のコストを低減する。解凍（デコーディングとも呼ばれる）は、圧縮された形式からもとの情報のバージョンを再構築する。「コーデック」はエンコーダ／デコーダシステムである。過去２０年にわたって様々なビデオコーデック標準およびフォーマットが採用されてきており、様々なオーディオコーデック標準およびフォーマットが採用されてきた。コーデック標準またはフォーマットは通常、エンコードされたメディアビットストリームの構文に対する選択肢（時には基本メディアビットストリームと呼ばれる）を定義し、特定の特徴がエンコーディングおよびデコーディングに用いられる時の基本メディアビットストリームにおけるパラメータを詳述する。多くの場合、コーデック標準またはフォーマットはまた、デコーディングにおいて正しい結果を得るためにデコーダが行うべきデコーディング動作についての詳細をもたらす。
【０００２】
[0002]  メディアコンテナフォーマットは、記憶、送信などのためにどのようにエンコードされたメディアコンテンツを編成するかを規定する。メディアコンテナフォーマットは、エンコードされたメディアコンテンツ、タイミング情報、デジタル著作権管理情報、エラー訂正情報、または他の情報についてのメタデータを規定することができる。ＭＰＥＧ−２  ＴＳ／ＰＳ、Ａｄｖａｎｃｅｄ  Ｓｙｓｔｅｍｓ  Ｆｏｒｍａｔ（「ＡＳＦ」）（以前はＡｄｖａｎｃｅｄ  Ｓｔｒｅａｍｉｎｇ  Ｆｏｒｍａｔ）、ＩＳＯ／ＩＥＣ  １４４９６−１２（ＩＳＯベースメディアファイルフォーマット）において規定されるＭＰＥＧ−４（「ＭＰ４」）、１４４９６−１４（ＭＰ４ファイルフォーマット）および１４４９６−１５（ＡＶＣファイルフォーマット）、Ｃｏｍｍｏｎ  Ｆｉｌｅ  Ｆｏｒｍａｔ（「ＣＦＦ」）、およびＭａｔｒｏｓｋａ  Ｖｉｄｅｏ  Ｆｏｒｍａｔ（「ＭＫＶ」）を含むマルチメディアコンテンツのための様々なコンテナフォーマットが公表されてきた。ＭＰ４またはＣＦＦなどのコンテナフォーマットに対する仕様は、メディアファイルがコンテナフォーマットに適合するように、どのようにエンコードされたメディアコンテンツを編成し、エンコードされたメディアコンテンツのためのメタデータを追加するかを規定する。コンテナフォーマット仕様は通常、コンテナフォーマットでのメディアファイルの構文に対する選択肢を規定し、特定の機能が用いられるときのメディアファイルにおけるパラメータの意味および編成を詳述する。いくつかの場合、コンテナフォーマット仕様はまた、コンテナフォーマットシンクまたはコンテナフォーマットソースによって行われるべき動作についての詳細をもたらす。コンテナフォーマットシンクは、基本メディアビットストリームにおけるエンコードされたメディアコンテンツを（例えばオーディオエンコーダまたはビデオエンコーダなどのメディアエンコーダから）、コンテナフォーマットに従ってメディアファイルの中に入れる。コンテナフォーマットソースは、コンテナフォーマットでのメディアファイルを構文解析し、基本メディアビットストリームをデコーディングのためにメディアデコーダに供給する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]  毎日、コンテナフォーマットでの数百万個のメディアファイルが、多様なソースによって生成される。コンテナフォーマットでのさらに多くのメディアファイルが、多彩な活動を通して種々のユーザによって消費される。いくつかの場合にはコンテナフォーマットでのメディアファイルは、ストリーミングまたは会議の間にランダムビットフリップにより破損される。あるいはメディアファイルは、ストレージ故障により、スマートフォンを用いた不適切な記録により、または別の理由で破損され得る。しかし多くの最近のコンテナフォーマットに対して、既存のツールは、メディアファイルのコンテナフォーマットに対する適合性を検証する、または少なくとも破損したファイルコンテナを識別するための十分な手段をもたらさず、またはメディアファイル内のエラーに対する再生機器の回復力を試験するためにメディアファイルの要素を改変する十分な手段をもたらすこともない。
【課題を解決するための手段】
【０００４】
[0004]  要約すると、本明細書で述べられる革新は、メディアファイルにおけるコンテナフォーマットによって定義される階層的に編成された構文要素の構文を意識した操作を行う方法をもたらす。例えばコンテナフォーマット検証器は、コンテナフォーマットに対するメディアファイルの適合性をチェックし、これはメディアコンテンツの多様なソース、および再生機器の間の相互運用性を保証するのに役立つことができる。またはコンテナフォーマット「ファザー」は、メディアファイルの破損をシミュレートし、これはメディアファイル内のエラーに対する再生機器の回復力を試験するのに役立つことができる。またはコンテナフォーマットエディタは、等価なメディアファイルを生成し、これはメディアファイル内の新しいオブジェクトを試験するのに役立つことができる。
【０００５】
[0005]  本明細書で述べられる１組の革新によれば、コンテナフォーマット処理ツールは、オーディオコンテンツ、画像コンテンツ、および／またはビデオコンテンツを含む、プレゼンテーションのためのコンテナフォーマットでのメディアファイルを受け取る。コンテナフォーマットは、メディアファイルがコンテナフォーマットに従って規定される階層的に編成された構文要素を含むように、ツリー構造である。例えば、コンテナフォーマットに従って規定される階層的に編成された構文要素は、コンテナフォーマットに従って階層内にネストされたオブジェクトおよびオブジェクトの属性である。コンテナフォーマット処理ツールは、メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の少なくともいくつかの、構文を意識した操作を行う。
【０００６】
[0006]  例えば構文を意識した操作の一部として、コンテナフォーマット検証器は、メディアファイルのコンテナフォーマットに対する適合性をチェックする。検証は、コンテナフォーマット検証器が、所与の構文要素の値がコンテナフォーマットに従った所与の構文要素に対する１つまたは複数の制約条件を満たすことをチェックする、単一要素検証を含むことができる。あるいは検証は、コンテナフォーマット検証器が、所与の構文要素の値がコンテナフォーマットに従って規定される１つまたは複数の他の構文要素の値と矛盾しないことをチェックする、相互検証を含むことができる。さらに検証は、プレゼンテーションにおけるオーディオサンプルとビデオサンプルの間の同期をチェックすること、またはコンテナフォーマットに従って規定される必須の構文要素の存在に対してチェックすることを含むことができる。
【０００７】
[0007]  あるいは構文を意識した操作の一部として、コンテナフォーマットファザーは、コンテナフォーマットでのメディアファイルの破損をシミュレートする。メディアファイルの破損をシミュレートするために、コンテナフォーマットファザーは、コンテナフォーマットでのメディアファイルに対するファイルフォーマット構造を維持しながら、コンテナフォーマットに従って規定される構文要素１つまたは複数に対して、有効な値を他の値に置き換えることができる。あるいはコンテナフォーマットファザーは、所与の構文要素の値を改変することによって、ランダムビットフリップをシミュレートすることができる。さらにコンテナフォーマットファザーは、オーディオ記録障害（例えば、コンテナフォーマットでのメディアファイルのオーディオトラックからオーディオデータを除去することによって）、または記録の不正な終了（例えば、コンテナフォーマットでのメディアファイルのオブジェクトに、コンテナフォーマットに従って規定される無関係な構文要素を追加することによって）をシミュレートすることができる。
【０００８】
[0008]  あるいは構文を意識した操作の一部として、コンテナフォーマットエディタは、他のやり方でメディアファイルを編集することができる。例えばコンテナフォーマットでの別のメディアファイルに関連する問題をモデル化するために、コンテナフォーマットエディタは、コンテナフォーマットに従って規定される新しい構文要素をメディアファイルに挿入することができる。あるいはコンテナフォーマットエディタは、コンテナフォーマットに従って規定される構文要素の中で、１つまたは複数の破損した値を検出し、１つまたは複数の破損した値を訂正することができる。
【０００９】
[0009]  メディアファイルにおけるコンテナフォーマットに従って規定される構文要素の構文を意識した操作は、方法の一部として、方法を行うように構成されたコンピューティングシステムの一部として、または、コンピューティングシステムに方法を行わせるためのコンピュータ実行可能命令を記憶した有形のコンピュータ可読媒体の一部として実現することができる。
【００１０】
[0010]  本発明の上記およびその他の目的、特徴、および利点は、添付の図を参照して進められる、以下のより詳しい記述からより明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】[0011]いくつかの述べられる実施形態を実現することができる、例示のコンピューティングシステムの図である。
【図２ａ】[0012]いくつかの述べられる実施形態を実現することができる、例示のネットワーク環境の図である。
【図２ｂ】いくつかの述べられる実施形態を実現することができる、例示のネットワーク環境の図である。
【図３】[0013]いくつかの述べられる実施形態を実現することができる、例示のメディア処理システムの図である。
【図４】[0014]いくつかの述べられる実施形態をそれと併せて実現することができる、コンテナフォーマット処理ツールの図である。
【図５】[0015]メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の図である。
【図６】[0016]メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の、構文を意識した操作のための一般化された技法を示すフローチャートである。
【図７】[0017]コンテナフォーマットに対するメディアファイルの適合性を検証するための技法を示すフローチャートである。
【図８】[0018]メディアファイルにおけるコンテナフォーマットに従って規定される構文要素の相互検証を示す図である。
【図９】[0019]コンテナフォーマットでのメディアファイルの破損をシミュレートするための技法を示すフローチャートである。
【図１０】[0020]メディアファイルの破損をシミュレートするためにランダム値で置き換えられた、メディアファイルにおけるコンテナフォーマットに従って規定される選択された構文要素の値を示す、プロパティエクスプローラの画面を示すチャートである。
【発明を実施するための形態】
【００１２】
[0021]  詳細な説明は、コンテナフォーマットでのメディアファイルの構文を意識した操作のための様々な革新を示す。革新は、メディアファイルに対する適合性検証、メディアファイルの破損のシミュレーション、および他のメディアファイルの編集のための動作を含むことができる。
【００１３】
[0022]  種々のソースによって生成されたメディアファイルが、所与のコンテナフォーマットに適合することを検証することは、再生機器の相互運用性を保証するのに役立つ。本明細書で述べられる革新の一態様によれば、構文を意識したコンテナフォーマット検証器は、所与のコンテナフォーマットに対するメディアファイルの適合性をチェックする。メディアファイルは、サンプル（例えばビデオのフレーム）に対するタイムスタンプ、サンプルに対するエンコードされたコンテンツのチャンクのサイズ、エンコードされたコンテンツのチャンクのオフセットまたは位置、トラック情報または他の情報を示す、コンテナフォーマット構文要素を含むことができる。コンテナフォーマット検証器は、コンテナフォーマットに対するこのような構文要素の適合性を、コンテナフォーマット仕様に規定された制約条件に対する個々の構文要素の評価、構文要素の値がコンテナフォーマットに従って規定される他の関係する構文要素の値と矛盾しないことの相互検証、およびコンテナフォーマットに従って規定される必須の構文要素が存在することの検証を含む、いくつかの方法で検証することができる。
【００１４】
[0023]  メディアファイルの破損をシミュレートすることは、コンテナフォーマットソースの能力を試験するのに役立つことができる。本明細書で述べられる革新の他の態様によれば、構文を意識したコンテナフォーマットファザーは、メディアファイルのファイルフォーマット構造をそのままに保ちながら、メディアファイルにおけるコンテナフォーマットに従って規定される構文要素の破損のいくつかのタイプのいずれかをシミュレートする。コンテナフォーマットでのメディアファイルを構文解析し消費するコンテナフォーマットソースは、メディアファイル内のエラーを受けやすくなり得る。最下層の構文解析動作時に種々のタイプの破損したメディアファイルに直面したときの、コンテナフォーマットソースのパフォーマンスを評価することは、エラーの検出、エラーに対する保護、エラーの隠蔽、およびエラーからの回復における改善に繋がり得る。このようにしてコンテナフォーマットソースは、コンテナフォーマットソースが再生を停止すべき状況をより正確に識別しながら、コンテナフォーマットソースがそれらから回復できる（一定の種類のエラーを隠蔽し、単に再生を停止するのではなく再生を回復する）破損に対してよりロバストにされ得る。
【００１５】
[0024]  本明細書で述べられる革新の他の態様によれば、構文を意識したコンテナフォーマットエディタは、コンテナフォーマットでのメディアファイルを編集し、これは望ましい特性を有するメディアファイルの評価および共有を容易にする。例えばコンテナフォーマットエディタは、メディアファイル内の破損を検出し訂正する。あるいは別の例としてコンテナフォーマットエディタは、別のメディアファイルで見られる問題をモデル化するために、コンテナフォーマットに従って規定される新しい構文要素を挿入することによってメディアファイルを作成する。このようにしてコンテナフィーマットでの所与のメディアファイルに対して、コンテナフォーマットエディタは、著作権の問題またはデジタル著作権管理によりアクセス制限を有するエンコードされたメディアコンテンツを使用することなく、別のメディアファイルにおいて特定された問題を実証するために、コンテナフォーマットに従って規定される構文要素の異なる組み合わせを発生することができる。
【００１６】
[0025]  本明細書で述べられる動作は、所々においてコンテナフォーマットシンクまたはコンテナフォーマットソースに関連するコンテナフォーマット処理ツールによって行われるように述べられるが、多くの場合は動作は、代替として他のタイプのコンテナフォーマット処理ツールによって行われ得る。本明細書で述べられるいくつかの例はビデオコンテンツに関係する。より一般的には、本明細書で述べられる革新は、画像コンテンツ（例えば一般の静止画像コンテンツ、医療スキャンコンテンツ、マルチスペクトル画像コンテンツ）、オーディオコンテンツ、または他のタイプのメディアコンテンツに応用することができる。
【００１７】
[0026]  本明細書で述べられる革新のいくつかは、ＭＰ４またはＣＦＦコンテナフォーマットに特有な構文要素および動作に関連して示される。本明細書で述べられる革新はまた、ＡＳＦ、ＭＰＥＧ−２  ＴＳ／ＰＳ、およびＫＭＶなどの他のコンテナフォーマットに対して実施することができる。
【００１８】
[0027]  より一般的には、本明細書で述べられる例に対する様々な代替形態が可能である。例えば本明細書で述べられる方法のいくつかは、述べられる方法動作の順序付けを変えることによって、一定の方法動作を分割する、繰り返す、または省くことなどによって変更され得る。開示される技術の様々な態様は、組み合わせて、または別々に用いることができる。種々の実施形態は、述べられる革新の１つまたは複数を用いる。本明細書で述べられる革新のいくつかは、背景において注目される問題の１つまたは複数に対処する。通常は所与の技法／ツールは、すべてのこのような問題を解決しない。
【００１９】
Ｉ．例示のコンピューティングシステム
[0028]  図１は、述べられる革新のいくつかを実現することができる、適切なコンピューティングシステム（１００）の一般化された例を示す。コンピューティングシステム（１００）は、革新は多様な汎用または専用コンピューティングシステムにおいて実現され得るので、使用または機能の範囲に関して何ら限定を示唆するものではない。
【００２０】
[0029]  図１を参照するとコンピューティングシステム（１００）は、１つまたは複数の処理装置（１１０，１１５）、およびメモリ（１２０，１２５）を含む。処理装置（１１０，１１５）はコンピュータ実行可能命令を実行する。処理装置は、汎用中央処理装置（「ＣＰＵ」）、特定用途向け集積回路（「ＡＳＩＣ」）内のプロセッサ、または任意の他のタイプのプロセッサとすることができる。多重処理システムにおいては処理能力を増大するために、複数の処理装置がコンピュータ実行可能命令を実行する。例えば図１は中央処理装置（１１０）、ならびにグラフィックス処理装置またはコプロセシング装置（１１５）を示す。有形のメモリ（１２０，１２５）は、処理装置によってアクセス可能な揮発性メモリ（例えばレジスタ、キャッシュ、ＲＡＭ）、不揮発性メモリ（例えばＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリなど）、または両方の何らかの組み合わせとすることができる。メモリ（１２０，１２５）は、処理装置による実行に適したコンピュータ実行可能命令の形で、メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の構文を意識した操作のための１つまたは複数の革新を実現するソフトウェア（１８０）を記憶する。
【００２１】
[0030]  コンピューティングシステムはさらなる特徴を有し得る。例えばコンピューティングシステム（１００）は、ストレージ（１４０）、１つまたは複数の入力デバイス（１５０）、１つまたは複数の出力デバイス（１６０）、および１つまたは複数の通信接続（１７０）を有する。バス、コントローラ、またはネットワークなどの相互接続機構（図示せず）は、コンピューティングシステム（１００）の構成要素を相互接続する。典型的にはオペレーティングシステムソフトウェア（図示せず）は、コンピューティングシステム（１００）において実行する他のソフトウェアのための動作環境をもたらし、コンピューティングシステム（１００）の構成要素の活動を協調させる。
【００２２】
[0031]  有形のストレージ（１４０）（コンピュータ可読ストレージとも呼ばれる）は、リムーバブルまたは非リムーバブルとすることができ、磁気ディスク、磁気テープまたはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または情報を記憶するために用いることができ、コンピューティングシステム（１００）内でアクセスされ得る任意の他の媒体を含む。ストレージ（１４０）は、メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の構文を意識した操作のための１つまたは複数の革新を実現するソフトウェア（１８０）のための命令を記憶する。
【００２３】
[0032]  入力デバイス（１５０）は、キーボード、マウス、ペン、またはトラックボールなどのタッチ入力デバイス、音声入力デバイス、ジェスチャ入力を受け取るためのタッチスクリーン、スキャンデバイス、またはコンピューティングシステム（１００）に入力を供給する他のデバイスとすることができる。ビデオに対しては入力デバイス（１５０）は、カメラ、ビデオカード、テレビチューナカード、またはアナログもしくはデジタル形式でビデオ入力を受け入れる同様なデバイス、またはビデオサンプルをコンピューティングシステム（１００）に読み込むＣＤ−ＲＯＭもしくはＣＤ−ＲＷとすることができる。オーディオに対しては入力デバイス（１５０）は、アナログもしくはデジタル形式でオーディオ入力を受け入れるマイクまたは同様なデバイス、またはオーディオサンプルをコンピューティングシステム（１００）に読み込むＣＤ−ＲＯＭもしくはＣＤ−ＲＷとすることができる。出力デバイス（１６０）は、ディスプレイ、プリンタ、スピーカ、ＣＤ−ライタ、またはコンピューティングシステム（１００）から出力を生じる他のデバイスとすることができる。
【００２４】
[0033]  通信接続（１７０）は、他のコンピューティングエンティティへの通信媒体を通して通信を可能にする。通信媒体は、コンピュータ実行可能命令、オーディオもしくはビデオ入力または出力、または変調されたデータ信号での他のデータなどの情報を伝達する。変調されたデータ信号は、特徴のうちの１つまたは複数が信号における情報をエンコードするようなやり方で設定または変更された信号である。例としておよび非限定的に、通信媒体は、電気、光、ＲＦ、または他のキャリアを用いることができる。
【００２５】
[0034]  革新は、コンピュータ可読媒体との一般的な関連において述べることができる。コンピュータ可読媒体は、コンピューティング環境内でアクセス可能な、任意の利用可能な有形の媒体である。例としておよび非限定的に、コンピューティングシステム（１００）に関連してコンピュータ可読媒体は、メモリ（１２０，１２５）、ストレージ（１４０）、および上記のいずれかの組み合わせを含む。
【００２６】
[0035]  革新は、プログラムモジュール（コンピュータプログラム製品とも呼ばれる）に含まれターゲットの実または仮想プロセッサ上のコンピューティングシステムにおいて実行されるものなど、コンピュータ実行可能命令（マシン可読命令とも呼ばれる）との一般的な関連において述べることができる。一般にプログラムモジュールは、特定のタスクを実行するまたは特定の抽象データタイプを実装する、ルーチン、プログラム、ライブラリ、オブジェクト、クラス、コンポーネント、データ構造体などを含む。プログラムモジュールの機能は、様々な実施形態において必要に応じてプログラムモジュールの間において組み合わせるまたは分割することができる。プログラムモジュールのためのコンピュータ実行可能命令は、ローカルまたは分散型コンピューティングシステム内で実行され得る。
【００２７】
[0036]  「システム」および「デバイス」という用語は、本明細書では同義的に用いられる。文脈がそうでないことを明らかに示さない限り、いずれの用語もコンピューティングシステムまたはコンピューティングデバイスのタイプについての何らの限定も意味しない。一般にコンピューティングシステムまたはコンピューティングデバイスは、ローカルまたは分散型とすることができ、本明細書で述べられる機能を実現するソフトウェアを有する、専用ハードウェアおよび／または汎用ハードウェアの任意の組み合わせを含むことができる。
【００２８】
[0037]  開示される方法はまた、開示される方法のいずれかを行うように構成された、専門のコンピューティングハードウェアを用いて実現され得る。例えば開示される方法は、開示される方法のいずれかを実現するように特別に設計または構成された集積回路によって実現され得る（例えばＡＳＩＣデジタル信号処理装置などのＡＳＩＣ、グラフィックス処理装置、またはフィールドプログラマブルゲートアレイなどのプログラマブルロジックデバイス）。
【００２９】
[0038]  説明のために、詳細な記述は、コンピューティングシステムにおけるコンピュータ動作を述べるために「決定する」、「もたらす」、および「用いる」などの用語を用いる。これらの用語は、コンピュータによって行われる動作に対する高レベルの抽象化であり、人間によって行われる動作と混同されるべきではない。これらの用語に対応する実際のコンピュータ動作は、実装形態に応じて変わる。本明細書で用いられる「によってもたらされる」という用語は、エンティティから直接の、またはエンティティから１つまたは複数の中間物を通して間接の、任意の形の引き渡しを意味する。
【００３０】
ＩＩ．例示のネットワーク環境
[0039]  図２ａおよび２ｂは、メディアエンコーダ（２２０）およびメディアデコーダ（２７０）を含む、例示のネットワーク環境（２０１、２０２）を示す。エンコーダ（２２０）およびデコーダ（２７０）は、適切な通信プロトコルを用いてネットワーク（２５０）を通して接続される。ネットワーク（２５０）は、インターネットまたは他のコンピュータネットワークを含むことができる。
【００３１】
[0040]  図２ａに示されるネットワーク環境（２０１）では、各リアルタイム通信（「ＲＴＣ」）ツール（２１０）は、双方向通信のための１つまたは複数のエンコーダ（２２０）、および１つまたは複数のデコーダ（２７０）、ならびにコンテナフォーマットシンクおよびソースツール（図示せず）を含む。ビデオに対しては所与のエンコーダ（２２０）は、ＳＭＰＴＥ  ４２１Ｍ標準、ＩＳＯ／ＩＥＣ  １４４９６−１０標準（Ｈ．２６４またはＡＶＣとしても知られる）、ＨＥＶＣ標準、他の標準、または独自開発フォーマットに適合する出力を生成することができ、対応するデコーダ（２７０）はエンコーダ（２２０）からエンコードされたデータを受け入れる。オーディオに対しては所与のエンコーダ（２２０）は、ＨＥ  ＡＡＣ標準、ＡＡＣ標準、Ｗｉｎｄｏｗｓ（登録商標）  Ｍｅｄｉａ  Ａｕｄｉｏ（「ＷＭＡ」）フォーマット、または他の独自開発フォーマットに適合する出力を生成することができ、対応するデコーダ（２７０）はエンコーダ（２２０）からエンコードされたデータを受け入れる。コンテナフォーマットシンクはコンテナフォーマットに従って外向きのメディアコンテンツを処理し、コンテナフォーマットソースはコンテナフォーマットに従って内向きのメディアコンテンツを処理する。双方向通信は、テレビ会議、テレビ電話コール、または他の二当事者通信シナリオの一部とすることができる。図２ａのネットワーク環境（２０１）は２つのリアルタイム通信ツール（２１０）を含むが、代わりにネットワーク環境（２０１）は複数当事者通信に参加する３つ以上のリアルタイム通信ツール（２１０）を含むことができる。
【００３２】
[0041]  リアルタイム通信ツール（２１０）は、エンコーダ（２２０）によるエンコーディングを管理する。図３は（上側半分に）、リアルタイム通信ツール（２１０）に含まれ得るコンテナフォーマットシンクを含む、例示のエンコーダシステムを示す。代替としてリアルタイム通信ツール（２１０）は別のエンコーダシステムを用いる。リアルタイム通信ツール（２１０）はまた、デコーダ（２７０）によるデコーディングを管理する。図３はまた（下側半分に）、リアルタイム通信ツール（２１０）に含まれ得るコンテナフォーマットソースを含む、例示のデコーダシステムを示す。代替としてリアルタイム通信ツール（２１０）は別のデコーダシステムを用いる。
【００３３】
[0042]  図２ｂに示されるネットワーク環境（２０２）では、エンコーディングツール（２１２）は、デコーダ（２７０）を含む複数の再生ツール（２１４）への配信のためにメディアをエンコードする、１つまたは複数のエンコーダ（２２０）を含む。エンコーディングツール（２１２）ではコンテナフォーマットシンク（図示せず）は、コンテナフォーマットに従って外向きのメディアコンテンツを処理する。再生ツール（２１４）ではコンテナフォーマットソース（図示せず）は、コンテナフォーマットに従って内向きのメディアコンテンツを処理する。ビデオ監視システム、ウェブカメラモニタリングシステム、リモートデスクトップ会議プレゼンテーション、またはメディアがエンコードされ１つの位置から１つまたは複数の他の位置に送られる他のシナリオのために、一方向通信がもたらされる。図２ｂのネットワーク環境（２０２）は２つの再生ツール（２１４）を含むが、ネットワーク環境（２０２）はより多いまたは少ない再生ツール（２１４）を含むことができる。一般に再生ツール（２１４）はエンコーディングツール（２１２）と通信して、受け取るべき再生ツール（２１４）のためのメディアのストリームを決定する。再生ツール（２１４）はストリームを受け取り、受け取ったエンコードされたデータを適切な期間の間バッファし、デコーディングおよび再生を開始する。
【００３４】
[0043]  図３は（上側半分に）、エンコーディングツール（２１２）に含められ得るコンテナフォーマットシンクを含む、例示のエンコーダシステムを示す。代替としてエンコーディングツール（２１２）は別のエンコーダシステムを用いる。エンコーディングツール（２１２）はまた、１つまたは複数の再生ツール（２１４）との接続を管理するためのサーバ側制御ロジックを含むことができる。図３はまた（下側半分に）、再生ツール（２１４）に含められ得るコンテナフォーマットソースを含む、例示のデコーダシステムを示す。代替として再生ツール（２１４）は別のデコーダシステムを用いる。再生ツール（２１４）はまた、エンコーディングツール（２１２）との接続を管理するためのクライアント側管理ロジックを含むことができる。
【００３５】
[0044]  図２ａに示されるネットワーク環境（２０１）は、複数のエンコーダを有する複数のＲＴＣツールを含むことができる。図２ｂに示されるネットワーク環境（２０２）は、複数のエンコーダを有する複数のエンコーディングツールを含むことができる。このような諸エンコーダは、スプライシングツールによって単一のビットストリームにスプライスされる、複数の出力ビットストリームを生成することができる。あるいは単一のエンコーダは、スプライシングツールによって単一のビットストリームにスプライスされる、複数のビットストリームを生成することができる。
【００３６】
ＩＩＩ．例示のコンテナフォーマット処理ツールおよびコンテナフォーマット
[0045]  図３は、それと併せていくつかの述べられる実施形態を実現することができる、例示のメディア処理システム（３００）のブロック図である。エンコーダ側ではシステム（３００）は、１つまたは複数のメディアソース（３１０）、オーディオエンコーダ（３２１）、ビデオエンコーダ（３２２）、およびコンテナフォーマットシンク（３３０）を含む。デコーダ側ではシステム（３００）は、コンテナフォーマットソース（３６０）、オーディオデコーダ（３７１）、ビデオデコーダ（３７２）、およびレンダリングエンジン（３８１、３８２）を含む。
【００３７】
[0046]  メディアソース（３１０）はメディアコンテンツを供給する。ビデオに対してはメディアソース（３１０）は、カメラ、チューナカード、記憶媒体、スクリーンキャプチャモジュール、アニメーション出力、または他のビデオソースとすることができる。ビデオソースは通常、ビデオフレームのシーケンスを生成する。コンテナフォーマット処理の目的に対しては、ビデオの「サンプル」は通常は時間インスタンスに関連するビデオフレームであるが、代わりに、所与の時点でのビデオオブジェクトを表す、インターレースされたビデオフィールドまたはビデオオブジェクトプレーンとすることができる。画像コンテンツに対してはメディアソース（３１０）は、グラフィックス出力、スキャナ、医用画像ツール、または他のデジタル画像ソースとすることができ、サンプルは通常は画像である。オーディオコンテンツに対してはメディアソース（３１０）は、マイク、他の音声入力デバイス、記憶媒体、または他のオーディオソースとすることができる。コンテナフォーマット処理の目的に対しては、オーディオの「サンプル」は通常は、所与の時間または時間スパンに関連する振幅値のフレームである。
【００３８】
[0047]  エンコーダ（３２１、３２２）の前にシステム（３００）は、メディアコンテンツを記憶するためのバッファ、およびエンコーディングの前のメディアコンテンツの前処理（例えばフィルタリング）を行うプリプロセッサを含むことができる。画像またはビデオコンテンツに対しては、例えば前処理はまた、色空間変換、色範囲スケーリング、および／または他の処理を含むことができる。
【００３９】
[0048]  一般にエンコーダ（オーディオエンコーダ（３２１）、ビデオエンコーダ（３２２）であろうと、他のエンコーダであろうと）は、メディアソース（３１０）によって供給されるメディアコンテンツを受け取り、コンテナフォーマットシンク（３３０）への出力として、基本メディアビットストリームにおいてエンコードされたメディアコンテンツを生成する。エンコーダ（３２１、３２２）は、リアルタイム通信のための低待ち時間エンコーディングモード、コード変換モード、およびファイルまたはストリームからのメディア再生のための通常のエンコーディングモードなどの、複数のエンコーディングモードのいずれかにおいて動作することができる汎用エンコーディングツールとすることができ、または１つのこのようなエンコーディングモードに適合された専用エンコーディングツールとすることができる。エンコーダ（３２１、３２２）は、オペレーティングシステムモジュールとして、アプリケーションライブラリの一部として、スタンドアロンアプリケーションの一部として、または専用ハードウェアを用いて実現され得る。
【００４０】
[0049]  一般にエンコーダ（３２１、３２２）は、予測、周波数変換、量子化、およびエントロピー符号化などのエンコーディングタスクを行う複数のエンコーディングモジュールを含む。エンコーダ（３２１、３２２）によって行われる正確な動作は、コーデックフォーマットに応じて変わり得る。ビデオに対しては、出力のエンコードされたビデオコンテンツのフォーマットは、Ｗｉｎｄｏｗｓ（登録商標）  Ｍｅｄｉａ  Ｖｉｄｅｏフォーマット、ＶＣ−１フォーマット、ＭＰＥＧ−ｘフォーマット、（例えばＭＰＥＧ−１、ＭＰＥＧ−２、またはＭＰＥＧ−４）、Ｈ．２６ｘフォーマット（例えばＨ．２６１、Ｈ．２６２、Ｈ．２６３、Ｈ．２６４）、ＨＥＶＣフォーマット、ＶＰｘフォーマット、または他のフォーマットとすることができる。画像に対しては、出力のエンコードされた画像コンテンツのフォーマットは、ＪＰＥＧフォーマット、ＪＰＥＧ−ＸＲフォーマット、または他のフォーマットとすることができる。オーディオに対しては、エンコードされたオーディオコンテンツのフォーマットは、ＡＡＣフォーマット（例えばＨＥ  ＡＡＣ）、ＷＭＡフォーマット、または他のフォーマットとすることができる。
【００４１】
[0050]  基本メディアビットストリームにおけるエンコードされたメディアコンテンツは、集められ、一時的なコード化されたデータ領域にバッファされる。集められたエンコードされたメディアコンテンツは、それぞれの基本メディアビットストリームの構文の一部として、エンコードされたメディアコンテンツに関するメディアメタデータを含むことができる。
【００４２】
[0051]  コンテナフォーマットシンク（３３０）は、基本ビットストリームでのエンコードされたメディアコンテンツを受け取る。コンテナフォーマットシンク（３３０）は、メディアファイル内のエンコードされたメディアコンテンツを、ＭＰ４（ＩＳＯ／ＩＥＣ  １４４９６−１２、−１４、または−１５）、ＣＦＦ、ＡＳＦ、または他のコンテナフォーマットなどに従って編成する。例示の実装形態ではコンテナフォーマットシンク（３３０）は、ＭＰ４シンクまたはＣＦＦシンクである。実装形態に応じてコンテナフォーマットシンク（３３０）は、送信のためにメディアストリームとして、あるいはストレージのためにコンテナフォーマットに従ったファイルとして、エンコードされたメディアコンテンツをパケット化することができ、この場合はコンテナフォーマットシンク（３３０）はメディアファイルの構文の一部として要素を追加する。またはより一般的にコンテナフォーマットシンク（３３０）は、１つまたは複数のメディアシステム多重化プロトコル、またはコンテナフォーマットのためのトランスポートプロトコルを実装することができる。コンテナフォーマットシンク（３３０）は、オペレーティングシステムモジュールとして、アプリケーションライブラリの一部として、スタンドアロンアプリケーションの一部として、または専用ハードウェアを用いて実現され得る。
【００４３】
[0052]  コンテナフォーマットシンク（３３０）は、チャネル（３５０）への出力のためにコンテナフォーマットでのメディアファイルを供給することができる。チャネル（３５０）は、ストレージ、通信接続（例えばインターネットを通した）、または出力のための他のチャネルを表す。
【００４４】
[0053]  あるいはコンテナフォーマットシンク（３３０）は、コンテナフォーマット構文要素の構文を意識した操作を行うコンテナフォーマット処理ツール（３４０）に、コンテナフォーマットでのメディアファイルを供給することができる。コンテナフォーマット処理ツール（３４０）は、オペレーティングシステムモジュールとして、アプリケーションライブラリの一部として、スタンドアロンアプリケーションの一部として、または専用ハードウェアを用いて実現され得る。図３は、コンテナフォーマットシンク（３３０）からメディアファイルを受け取り、出力をチャネル（３５０）に供給するコンテナフォーマット処理ツール（３４０）を示すが、代替としてコンテナフォーマット処理ツール（３４０）は、システム（３００）内の別の場所に配置される。例えばコンテナフォーマット処理ツール（３４０）は、チャネル（３５０）からメディアファイルを受け取り、調整されたメディアファイルをチャネル（３５０）に、またはコンテナフォーマットソース（３６０）に戻すことができる。あるいはコンテナフォーマット処理ツール（３４０）の１つまたは複数のモジュールは、例えば適合性検証のために、コンテナフォーマットシンク（３３０）内に直接実装され得る。
【００４５】
[0054]  図４は、コンテナフォーマット処理ツール（３４０）のための例示のアーキテクチャを示す。コンテナフォーマット処理ツール（３４０）は、コンテナフォーマットでの入力メディアファイル（４０５）を受け入れ、コンテナフォーマットでの出力メディアファイル（４９５）を生成する。コンテナフォーマット処理ツール（３４０）は、コンテナフォーマット検証器（４１０）、コンテナフォーマットファザー（４２０）、およびコンテナフォーマットエディタ（４３０）を含む。コンテナフォーマット処理ツール（３４０）はまた、入力メディアファイル（４０５）を一時的に記憶するためのバッファ（図示せず）、および出力メディアファイル（４９５）を一時的に記憶するためのバッファ（図示せず）を含む。
【００４６】
[0055]  コンテナフォーマット検証器（４１０）は、メディアファイルがコンテナフォーマットに適合することを検証するための、１つまたは複数のタイプの動作を行うように構成される。例えばコンテナフォーマット検証器（４１０）は、セクションＩＶ．で述べられるように単一要素検証、相互検証、同期チェック、および／または必須のコンテナフォーマット構文要素があることの検証を行うように構成される。代替としてコンテナフォーマット検証器（４１０）は、他のおよび／または追加のタイプの動作を行ってコンテナフォーマットへの適合性を検証するように構成される。
【００４７】
[0056]  コンテナフォーマットファザーは、１つまたは複数のタイプの動作を行って、コンテナフォーマットでのメディアファイルの破損をシミュレートするように構成される。例えばコンテナフォーマットファザー（４２０）は、セクションＩＶで述べられるように、コンテナフォーマット構文要素の有効な値をランダム値で置き換える、オーディオ記録障害をシミュレートする、および／または記録の不正な終了をシミュレートするように構成される。代替としてコンテナフォーマットファザー（４２０）は、他のおよび／または追加のタイプの動作を行ってメディアファイルの破損をシミュレートするように構成される。
【００４８】
[0057]  コンテナフォーマットエディタ（４３０）は、１つまたは複数のタイプの動作を行って別のやり方でコンテナフォーマットでのメディアファイルを編集するように構成される。例えばコンテナフォーマットエディタ（４３０）は、セクションＩＶで述べられるように、コンテナフォーマットに従って規定される新しい構文要素をメディアファイルに挿入するように構成される。代替としてコンテナフォーマットエディタ（４３０）は、他のおよび／または追加のタイプの編集動作を行うように構成される。
【００４９】
[0058]  コンテナフォーマット処理ツール（３４０）は、コンテナフォーマット検証器（４１０）、ファザー（４２０）、およびエディタ（４３０）の１つまたは複数を省くことができる。代替としてコンテナフォーマット処理ツール（３４０）は、他のおよび／または追加のモジュールを含むことができる。
【００５０】
[0059]  図５はコンテナフォーマットでの例示のメディアファイル（５００）を示す。メディアファイル（５００）はツリー構造、または階層的に編成され、他のオブジェクトおよび／またはコンテナフォーマット属性を含んだオブジェクト（時には「ボックス」と呼ばれる）を含む。オブジェクト（ボックス）は通常、サイズ（すなわち長さ）値、およびボックスに対するタイプ値を含み、その後に他の属性および／または含まれたオブジェクトが続く。「コンテナ」は、１組の他のオブジェクトを含むおよびグループ化するオブジェクトであるが、通常はそれ自体は属性（サイズおよびタイプ値は別として）を含まない。コンテナフォーマット構文要素は、オブジェクト（ボックス）または属性とすることができる。
【００５１】
[0060]  メディアファイル（５００）は、オーディオコンテンツ、ビデオコンテンツ、画像コンテンツ、および／または他のコンテンツによるプレゼンテーションのためのメタデータを含む。プレゼンテーションは、ビデオトラックおよびオーディオトラックなどのトラックに、論理的に分割される。トラックに対して、各タイミング設定されたユニットはサンプルである（例えばビデオのフレーム、オーディオのフレーム）。トラック内のサンプルは番号が付けられる。トラックはまた、１つまたは複数のサンプル記述を有する。トラック内のサンプルは、参照によって記述に関係付けられ、サンプルに対する記述はサンプルがどのようにデコードされ得るかを示す。
【００５２】
[0061]  メディアファイル（５００）に対して、ファイル（５００）の物理構造は、メディアコンテンツの物理構造および編成に関係付けられない。すなわちサンプルについてのヘッダ情報および他のメタデータは、メディアファイル（５００）内のサンプルに対するエンコードされたメディアコンテンツに付加される必要はない。さらにメディアファイル（５００）の物理構造も、エンコードされたメディアコンテンツのレイアウトも、メディアサンプルの時間的順序付けのために関係付けられない。代わりに、コンテナフォーマットに従って規定されるファイル構造および他の構文要素は、例えばタイムスタンプによってメディアサンプルの配置およびタイミングを指定する。これは、シーク動作およびランダムアクセスを容易にする。
【００５３】
[0062]  図５でメディアファイル（５００）は、ファイルタイプ（５０２）、メタデータ用のコンテナ（５１０）、およびメディアデータ用のコンテナ（５９０）を含む。ファイルタイプ（５０２）は、それにメディアファイル（５００）が適合する、コンテナフォーマット仕様を表す。メタデータ用のコンテナ（５１０）はプレゼンテーションのためのメタデータを含み、メディアデータ用のコンテナ（５９０）は、例えばビデオのサンプルおよびオーディオのサンプルに対するエンコードされたメディアコンテンツを含む。代替として、エンコードされたメディアコンテンツは、エンコードされたメディアコンテンツのための位置を表すメディアファイル（５００）内の参照によって、メディアファイル（５００）と離れて記憶され得る。
【００５４】
[0063]  メタデータ用のコンテナ（５１０）は、ムービーヘッダ（５２０）および２つのトラック用のコンテナ（５３１、５３２）を含む。ムービーヘッダ（５２０）は、持続時間、時間スケール、好ましい再生速度、および好ましい音量などのプレゼンテーション全体に関係のある構文要素を含む。各トラックコンテナ（５３１、５３２）は、トラックヘッダ（５４１、５４２）、およびメディア情報用のコンテナ（５５１、５５２）を含む。トラックヘッダ（５４１、５４２）は、トラック識別子、持続時間、および（ビデオ用の）幅、高さ、およびレイヤなどのトラックに関係のある構文要素を含む。メディア情報用のコンテナ（５５１、５５２）は、メディアヘッダ（５６１、５６２）、サンプルのタイミング、サンプル記述、サンプルのためのエンコードされたメディアコンテンツのチャンクの場所などに対する追加情報（５７１、５７２）を含む。例示のコンテナフォーマットにおける構文要素についてのさらなる詳細は、例えばＩＳＯ／ＩＥＣ  １４４９６−１２，−１４および−１５、またはＣＦＦ仕様を参照されたい。
【００５５】
[0064]  代替としてメディアファイルは、他のおよび／または追加のコンテナフォーマット構文要素を含む。
【００５６】
[0065]  図３に戻ると、コンテナフォーマットソース（３６０）は、コンテナフォーマットでのメディアファイルを受け取り、処理する。コンテナフォーマットソース（３６０）は、ＭＰ４、ＡＳＦ、ＷｅｂＭ、または他のコンテナフォーマットなどのコンテナフォーマットに従ってメディアファイル内に編成されたエンコードされたメディアコンテンツを取り除く。例示的実装形態ではコンテナフォーマットソース（３６０）は、ＭＰ４ソースまたはＣＦＦソースである。コンテナフォーマットソース（３６０）は、セクションＩＶで説明されるようにコンテナフォーマット構文要素に関連する一定のタイプの問題を検出し訂正することができる。
【００５７】
[0066]  実装形態に応じてコンテナフォーマットソース（３６０）は、メディアストリームとして送信するため、またはコンテナフォーマットに従ってファイルとして記憶するために集められた、エンコードされたメディアコンテンツをパケット化解除することができ、この場合はコンテナフォーマットソース（３６０）は、メディアファイルの構文の一部として追加された構文要素を構文解析する。あるいはより一般的にはコンテナフォーマットソース（３６０）は、１つまたは複数のメディアシステム逆多重化プロトコル、またはコンテナフォーマットに対するトランスポートプロトコルを実装することができる。コンテナフォーマットソース（３６０）は、オペレーティングシステムモジュールとして、アプリケーションライブラリの一部として、スタンドアロンアプリケーションの一部として、または専用ハードウェアを用いて実現され得る。
【００５８】
[0067]  コンテナフォーマットソース（３６０）から出力されたエンコードされたメディアコンテンツ（１つまたは複数の基本メディアビットストリームとして）は、十分な量のこのようなデータが受け取られるまで、一時的なコード化されたデータ領域に記憶される。バッファされるエンコードされたメディアコンテンツは、基本メディアビットストリームの構文の一部として、エンコードされたメディアコンテンツに関するメディアメタデータを含むことができる。
【００５９】
[0068]  一般にデコーダ（オーディオデコーダ（３７１）、ビデオデコーダ（３７２）であろうと、他のデコーダであろうと）は、基本メディアビットストリームにおいてコンテナフォーマットソース（３６０）によって供給されるエンコードされたメディアコンテンツを受け取り、再構築されたメディアコンテンツを生成する。デコーダ（３７１，３７２）は、リアルタイム通信のための低待ち時間デコーディングモード、およびファイルまたはストリームからのメディア再生のための通常のデコーディングモードなどの、複数のデコーディングモードのいずれかにおいて動作することができる汎用デコーディングツールとすることができ、またはこのような１つのデコーディングモードに適合された専用デコーディングツールとすることができる。デコーダ（３７１，３７２）は、オペレーティングシステムモジュールとして、アプリケーションライブラリの一部として、スタンドアロンアプリケーションの一部として、または専用ハードウェアを用いて実現され得る。
【００６０】
[0069]  一般にデコーダ（３７１，３７２）は、エントロピー復号、逆量子化、逆周波数変換、および予測などのデコーディングタスクを行う複数のデコーディングモジュールを含む。デコーダ（３７１，３７２）によって行われる正確な動作は、コーデックフォーマットに応じて変わり得る。ビデオに対しては、エンコードされたビデオコンテンツのフォーマットは、Ｗｉｎｄｏｗｓ（登録商標）  Ｍｅｄｉａ  Ｖｉｄｅｏフォーマット、ＶＣ−１フォーマット、ＭＰＥＧ−ｘフォーマット、（例えばＭＰＥＧ−１、ＭＰＥＧ−２、またはＭＰＥＧ−４）、Ｈ．２６ｘフォーマット（例えばＨ．２６１、Ｈ．２６２、Ｈ．２６３、Ｈ．２６４）、ＨＥＶＣフォーマット、ＶＰｘフォーマット、または他のフォーマットとすることができる。画像に対しては、エンコードされた画像コンテンツのフォーマットは、ＪＰＥＧフォーマット、ＪＰＥＧ−ＸＲフォーマット、または他のフォーマットとすることができる。オーディオに対しては、エンコードされたオーディオコンテンツのフォーマットは、ＡＡＣフォーマット（例えばＨＥ  ＡＡＣ）、ＷＭＡフォーマット、または他のフォーマットとすることができる。
【００６１】
[0070]  デコードされたフレームの一時的メモリ記憶領域は、再構築されたメディアコンテンツのための複数フレームのバッファ記憶領域を含むことができる。レンダリングエンジン（３８１、３８２）は、再構築されたメディアコンテンツを出力のために処理する。オーディオレンダリングエンジン（３８１）は再構築されたオーディオを出力のために処理し、ビデオレンダリングエンジン（３８２）は再構築されたビデオを出力のために処理する。例示的実装形態ではビデオレンダリングエンジン（３８２）は、色変換器およびディスプレイモジュールを含む。
【００６２】
ＩＶ．コンテナフォーマット構文要素の構文を意識した操作
[0071]  本明細書で述べられる革新は、メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の構文を意識した操作を行う方法をもたらす。
【００６３】
[0072]  図６は、メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の構文を意識した操作のための一般化された技法（６００）を示す。図３を参照して述べられたものなどのコンテナフォーマット処理ツールは、技法（６００）を行う。
【００６４】
[0073]  コンテナフォーマット処理ツールは、プレゼンテーションのためのコンテナフォーマットでのメディアファイルを受け取る（６１０）。プレゼンテーションはオーディオコンテンツ、画像コンテンツ、および／またはビデオコンテンツを含む。コンテナフォーマットは、メディアファイルがコンテナフォーマットに従って規定される階層的に編成された構文要素を含むように、ツリー構造である。例えばコンテナフォーマットはＭＰ４、ＣＦＦ、または他のコンテナフォーマットである。より一般的にはコンテナフォーマットに従って規定される階層的に編成された構文要素は、コンテナフォーマットに従って階層内にネストされたオブジェクトおよびオブジェクトの属性である。
【００６５】
[0074]  コンテナフォーマット処理ツールは、メディアファイルにおけるコンテナフォーマットに従って規定される階層的に編成された構文要素の少なくともいくつかの、構文を意識した操作を行う（６２０）。例えば構文を意識した操作は、適合性検証（セクションＩＶ．Ａ）、メディアファイルの破損のシミュレーション（セクションＩＶ．Ｂ）、および／またはメディアファイルの他の編集（セクションＩＶ．Ｃ）を含むことができる。
【００６６】
Ａ．適合性検証
[0075]  適合性検証のために、コンテナフォーマット処理ツールのコンテナフォーマット検証器は、メディアファイルのコンテナフォーマット構文要素がコンテナフォーマット仕様に適合することをチェックする。これは多様なソースによって生成されるメディアファイルに対する相互運用性を保証するのに役立つことができる。
【００６７】
[0076]  図７は、コンテナフォーマットでのメディアファイルの適合性を検証するための技法（７００）を示す。図３を参照して述べられたものなどのコンテナフォーマット処理ツールは、技法（７００）を行う。
【００６８】
[0077]  図７は、適合性検証のための４つの主要な動作の段階を示す。代替としてコンテナフォーマット処理ツールは、適合性検証の一部として他のおよび／または異なる動作を行う。特に、ツールは図７に示される動作のすべてを行う必要はない。
【００６９】
[0078]  図７に示される技法（７００）によればツールは、個々に取り込まれたコンテナフォーマット構文要素を検証する（７１０）。例えばコンテナフォーマットに従って規定される階層的に編成された構文要素に対するこのような単一要素検証の一部として、所与の構文要素に対してツールは、構文要素の値が、構文要素に対する１つまたは複数の制約条件を満たすことをチェックする。通常は制約条件は、関連のあるコンテナフォーマット仕様における構文要素に対して規定される。ツールは、メディアファイル内のすべての構文要素（ボックス、属性）をチェックすることができ、または構文要素のサブセットをチェックすることができる。ツールは単一要素検証を、コンテナフォーマット仕様に従ってメディアファイルの構文要素を構文解析する間に、またはより後の段階で行うことができる。
【００７０】
[0079]  コンテナフォーマット処理ツールはまた、選択されたコンテナフォーマット構文要素の値を相互検証する（７２０）。例えばコンテナフォーマットに従って規定される１組の階層的に編成された構文要素に対するこのような相互検証の一部として、所与の構文要素に対してツールは、構文要素の値が、階層的に編成された構文要素の中での１つまたは複数の他の構文要素の値と矛盾しないことをチェックする。これは所与の構文要素とメディアファイル内の他の構文要素の間の相互の影響が有効であることを検証する。表１は、例示的実装形態でのいくつかのＭＰ４構文要素に対する相互検証のインスタンスを記述する。
【００７１】
【表１−１】
0006475228.tif 000002
【００７２】
【表１−２】
0006475228.tif 000003
【００７３】
【表１−３】
0006475228.tif 000004
【００７４】
[0080]  代替としてコンテナフォーマット処理ツールは、相互検証の他のおよび／または追加のインスタンスをチェックする。
【００７５】
[0081]  図８は、相互検証の一般化された例を示す。図８ではコンテナ（５７１）は、サンプルのタイミング、サンプル記述、およびサンプルに対するエンコードされたメディアコンテンツのチャンクの位置についての情報を有する。コンテナ（５７１）は、ビデオの使用についての属性を有するビデオヘッダ（８１０）、サンプルのチャンクの位置についての属性を有するメディアデータソース（８２０）オブジェクト、およびサンプルのタイミング、サンプル記述などについての情報を有するオブジェクト（８４０、８５０、８６０）を含むコンテナ（８３０）を含む。相互検証のためにツールは、オブジェクト１（８４０）の属性２の値が、オブジェクト２（８５０）の属性３およびオブジェクト３（８６０）の属性１の値と矛盾しないことを検証する。
【００７６】
[0082]  図７に戻るとコンテナフォーマット処理ツールは、コンテナフォーマットに従って規定される階層的に編成された構文要素の中での、必須の構文要素の存在も検証する（７３０）。例えばツールは、いずれかのメディアファイルのために必要な、いずれのコンテナフォーマット構文要素も存在することをチェックする。また、所与のメディアファイルのために用いられる機能（例えばムービーフラグメントに対するランダムアクセス）を考慮すると、ツールは機能をサポートするコンテナフォーマット構文要素の存在をチェックすることができる。（これは相互検証のケースと見なされ得る。）
【００７７】
[0083]  最後にコンテナフォーマット処理ツールは同期を検証する（７４０）。例えばプレゼンテーションにおけるオーディオサンプルとビデオサンプルの間の同期をチェックするために、ツールは、オーディオサンプルの１つに対するタイムスタンプが、ビデオサンプルの対応する１つに対するタイムスタンプと十分に近い（例えば所定の閾値に従って）ことをチェックする。このようにしてツールは、タイムスタンプが離れ過ぎていないことを検証する。タイムスタンプが離れ過ぎている場合は、ツールはタイムスタンプを調整する、同期を改善するようにフレーム（例えばビデオフレーム）を省く、または再生を失敗させることができる。
【００７８】
Ｂ．破損をシミュレートする
[0084]  コンテナフォーマット処理ツールはまた、コンテナフォーマットでのメディアファイルの破損をシミュレートすることができる。破損したメディアファイルは、構文解析時にコンテナフォーマットソースをクラッシュさせ得る、あるいはサービス拒否を引き起こし得る。メディアファイルの破損をシミュレートすることによって、ツールはコンテナフォーマットソースの能力の試験を容易にする。
【００７９】
[0085]  コンテナフォーマット処理ツールは、メディアファイルに対する様々な種類の破損をシミュレートするために、様々な方法でメディアファイルを改変することができる。いくつかの場合は、コンテナフォーマットでのメディアファイルは、ストリーミングまたは会議時のランダムビットフリップにより破損される。コンテナフォーマットツールは、図９に示される技法（９００）を用いてこのような破損をシミュレートすることができる。図３を参照して述べられたものなどのコンテナフォーマット処理ツールは、技法（９００）を行う。
【００８０】
[0086]  コンテナフォーマット処理ツールは、メディアファイルにおいて改変すべき次のコンテナフォーマット構文要素を入手する（９１０）。例えばツールは、メディアファイル内、またはメディアファイル内のオブジェクト内を前方にスキップして、改変すべき次のコンテナフォーマット構文要素を識別する。あるいはツールは、改変のためにユーザによって選択されたタイプの、次のコンテナフォーマット構文要素を識別する。
【００８１】
[0087]  ツールは、コンテナフォーマット構文要素の値を別の値と置き換える（９２０）。例えばツールは、構文要素の値を置き換えたときは、１つまたは複数のランダムビットフリップをシミュレートする。代替としてツールは、何らかの他の方法で値を置き換える。
【００８２】
[0088]  ツールは、これ以上のコンテナフォーマット構文要素を改変すべきかどうかをチェックし（９３０）、そうであれば改変すべき次のコンテナフォーマット構文要素を入手する（９１０）。このようにしてツールは、メディアファイル内の１つまたは複数のコンテナフォーマット構文要素を改変することができる。
【００８３】
[0089]  従って図９に示される技法（９００）によりコンテナフォーマット処理ツールは、コンテナフォーマットに従って規定される階層的に編成された構文要素の少なくともいくつかに対して、有効な値を他の値（例えばランダム値）に置き換える。しかし同時にツールは、コンテナフォーマットでのメディアファイルのためのファイルフォーマット構造を維持する。最下層の構文解析動作時に種々のタイプのエラーに直面したときの、コンテナフォーマットソースのパフォーマンスを評価することは、エラーの検出、エラーに対する保護、エラーの隠蔽、およびエラーからの回復における改善に繋がり得る。
【００８４】
[0090]  図１０はプロパティエクスプローラの画面（１０００）を示し、メディアファイルの破損をシミュレートするためにランダム値で置き換えられた、メディアファイル内の選択されたＭＰ４構文要素の値を示す。メディアファイルのファイルフォーマット構造はそのままに保たれるが、「（合成）時間対サンプル」ボックス内のいくつかのｓａｍｐｌｅ＿ｏｆｆｓｅｔ構文要素の値が改変されている。
【００８５】
[0091]  メディアファイルは他のやり方で破損され得る。いくつかの場合、コンテナフォーマットでのメディアファイルは、オーディオ記録障害により破損される。例えばスマートフォンまたはその他における記録システムは、オーディオとビデオの両方を記録するように初期化され得るが、何らかの理由によりオーディオデータが受け取られない。結果としてのメディアファイルは、意味のある構造がない空のオーディオトラックを有する。コンテナフォーマット処理ツールは、コンテナフォーマットでのメディアファイルのオーディオトラックからオーディオデータを除去することによって、このようなオーディオ記録障害をシミュレートすることができる。さらに他の場合には、コンテナフォーマットでのメディアファイルは、記録の不正な終了により破損される。例えばスマートフォンまたはその他における記録システムは、記録の終わりでの無効なデータをメディアファイルのボックスに伝搬させ得る。コンテナフォーマット処理ツールは、コンテナフォーマットでのメディアファイルのオブジェクトに、コンテナフォーマットに従って規定される無関係な構文要素を追加することによって、このような記録の不正な終了をシミュレートすることができる。
【００８６】
[0092]  コンテナフォーマットソースは、それがメディアファイルを構文解析し消費するときに、種々の方法でメディアファイル内のエラーに反応することができる。いくつかのタイプのエラーに対して、例えば構文解析が不合格になったときに、コンテナフォーマットソースは再生を終了する。他のタイプのエラーに対してコンテナフォーマットソースは、エラーを無視して、またはエラーを訂正もしくは隠蔽することを試みて、続行できる場合がある。
【００８７】
[0093]  一般にコンテナフォーマットソースは、メディアファイル内のエラーを検出し、破損したメディアファイルに直面したときに、より良いユーザエクスペリエンスをもたらすように、少なくともいくつかのタイプのエラーを隠蔽するまたはそれから回復する能力を有する。例えばコンテナフォーマット処理ツールは、コンテナフォーマット構文要素における一定のタイプのエラーを検出し、他の値からの推論に基づいてエラーを訂正することができる。以下はいくつかの特定の例である。
・持続時間値は、内部的に他の持続時間値と矛盾しないように訂正することができる。
・サンプルに対する再生は、そのサンプルサイズがサイズ閾値（他のサンプルに対するサンプルサイズの値に基づいて設定された、または所定の閾値に設定された）を超える場合は、スキップすることができる。
・ムービーフラグメントランダムアクセスオフセット（mfro）ボックス内のサイズフィールドが不正（例えばそれが親ムービーフラグメントランダムアクセス（mfra）ボックスに対して指定されたサイズ値と一致しないので）である場合は、シーケンシャル再生のみがイネーブルされるように、メディアファイルのランダムアクセス能力をディスエーブルすることができる。
・トラックラン内のサンプルに対するサンプルサイズの合計（トラックフラグメントラン（trun）ボックス内に示される）が、メディアデータ（mdat）ボックスのサイズより大きい場合は、それに対するオフセットがｍｄａｔボックスの外側を指し示すサンプルはスキップすることができる。
・同様に、ファイルサイズより大きなオフセットを有するチャンクはスキップすることができる。
【００８８】
[0094]  代替としてコンテナフォーマット処理ツールは、コンテナフォーマット構文要素における他のおよび／または追加のタイプのエラーを、検出し訂正することができる。
【００８９】
Ｃ．他の編集
[0095]  コンテナフォーマット処理ツールは、他のやり方でコンテナフォーマットでのメディアファイルを編集することができる。このような編集はいくつかのシナリオにおいて有用である。
【００９０】
[0096]  いくつかのビデオファイルは、例えば著作権の問題により、アクセスおよび分配に対して制限を有する。あるコンテナフォーマット構文要素、またはコンテナフォーマット構文要素の関心のある組み合わせが、著作権保護されたコンテンツを有するメディアファイル内にのみ存在す場合は、メディアファイルの配布は制限される場合があり、コンテナフォーマットソースを試験することによって達成され得る改善の妨げとなる可能性がある。この状況に対処するためにコンテナフォーマット処理ツールは、異なるエンコードされたメディアコンテンツを含んだ別のメディアファイルを作成するときに、新しいコンテナフォーマット構文要素を挿入することができる。すなわち自由に分配可能なメディアコンテンツを有する所与のメディアファイルに対して、コンテナフォーマット処理ツールは、著作権の問題により潜在的なアクセス制限を有し得る特定のビデオファイルを必要とせずに、メディアファイルに対するコンテナフォーマット構文要素の種々の組み合わせを発生することができる。発生されたコンテナフォーマット構文要素の組み合わせは、コンテナフォーマットでの別のメディアファイルに関連する問題（例えば自由に分配できないメディアファイルに関連する問題）をモデル化する、または試験目的のためのシナリオをモデル化することができる。
【００９１】
[0097]  あるいは別の例として、コンテナフォーマット処理ツールは、コンテナフォーマットソースへのメディアファイルのさらなる分配の前に問題を解決するように、メディアファイル内のエラーを検出し訂正することができる。例えばコンテナフォーマットでのメディアファイルの構文解析時に、コンテナフォーマット処理ツールは、コンテナフォーマットに従って規定される階層的に編成された構文要素の中で、１つまたは複数の破損した値を検出する。次いでコンテナフォーマット処理ツールは、例えば例示のコンテナフォーマットソースを参照して上述されたように、１つまたは複数の破損した値を訂正する。
【００９２】
[0098]  開示された本発明の原理を応用することができる多くの可能な実施形態に鑑みて、例示された実施形態は本発明の好ましい実施例のみであり、本発明の範囲を限定するものと解釈されるべきではないことが認識されるべきである。むしろ本発明の範囲は、添付の特許請求の範囲によって定義される。従って我々は、これらの特許請求の範囲および趣旨に包含されるすべてを我々の発明として請求するものである。
【図１】
0006475228.tif 000005
【図２ａ】
0006475228.tif 000006
【図２ｂ】
0006475228.tif 000007
【図３】
0006475228.tif 000008
【図４】
0006475228.tif 000009
【図５】
0006475228.tif 000010
【図６】
0006475228.tif 000011
【図７】
0006475228.tif 000012
【図８】
0006475228.tif 000013
【図９】
0006475228.tif 000014
【図１０】
0006475228.tif 000015