次の方法で共有


メディア ファンデーション: 基本概念

デジタル メディアを初めて使用する場合、このトピックでは、Media Foundation アプリケーションを作成する前に理解しておく必要があるいくつかの概念について説明します。

ストリーム

ストリームは、均一な種類のメディア データのシーケンスです。 最も一般的な種類はオーディオとビデオですが、ストリームにはテキスト、スクリプト コマンド、静止画像など、ほぼすべての種類のデータを含めることができます。 このドキュメントの ストリーム という用語は、ネットワーク経由での配信を意味するものではありません。 ローカル再生を目的としたメディア ファイルにもストリームが含まれています。

通常、メディア ファイルには 1 つのオーディオ ストリーム、または 1 つのビデオ ストリームと 1 つのオーディオ ストリームが含まれます。 ただし、メディア ファイルには、同じ種類の複数のストリームが含まれている場合があります。 たとえば、ビデオ ファイルには、複数の異なる言語のオーディオ ストリームが含まれている場合があります。 実行時に、アプリケーションは使用するストリームを選択します。

圧縮

圧縮 とは、冗長な情報を削除することによってデータ ストリームのサイズを小さくするプロセスを指します。 圧縮アルゴリズムは、次の 2 つの大きなカテゴリに分類されます。

  • 無損失 圧縮。 ロスレス アルゴリズムを使用すると、再構築されたデータは元のデータと同じです。
  • 損失の 圧縮。 損失アルゴリズムを使用すると、再構築されたデータは元のデータの近似値ですが、完全一致ではありません。

他のほとんどのドメインでは、損失の圧縮は受け入れられません。 (スプレッドシートの "近似" を取り戻す場合を想像してください。しかし、損失の圧縮スキームは、いくつかの理由から、オーディオとビデオに適しています。

最初の理由は、人間の知覚の物理学に関係しています。 音楽録音のような複雑な音を聞くと、その音に含まれる情報の一部は耳に聞こえない。 信号処理理論の助けを借りて、認識できない周波数を分析して分離することができます。 これらの周波数は知覚効果なしで取除くことができる。 再構築されたオーディオは元のオーディオと正確には一致しませんが、リスナーには同じように 聞こえます 。 同様の原則がビデオに適用されます。

第二に、目的に応じて、音または画質の低下が許容され得る。 たとえば、テレフォニーでは、オーディオは多くの場合、高度に圧縮されます。 結果は電話での会話には十分ですが、電話で交響曲を聴くのは望ましくありません。

圧縮はエンコードとも呼ばれ、 エンコードするデバイスは エンコーダーと呼ばれます。 逆プロセスは デコードであり、デバイスは自然に デコーダーと呼ばれます。 エンコーダーとデコーダーの両方の一般的な用語は コーデックです。 コーデックは、ハードウェアまたはソフトウェアに実装できます。

デジタルメディアの登場以来、圧縮技術は急速に変化しており、今日では多数の圧縮方式が使用されています。 この事実は、デジタル メディア プログラミングのメイン課題の 1 つです。

メディア コンテナー

生のオーディオまたはビデオ ストリームをコンピューター ファイルとして保存したり、ネットワーク経由で直接送信したりすることはまれです。 一つには、使用するコーデックを事前に知らなくても、そのようなストリームをデコードすることは不可能です。 そのため、メディア ファイルには通常、次の要素の少なくとも一部が含まれています。

  • ストリームの数、各ストリームの形式などを記述するファイル ヘッダー。
  • コンテンツへのランダム アクセスを有効にするインデックス。
  • コンテンツを記述するメタデータ (アーティストやタイトルなど)。
  • ネットワーク転送またはランダム アクセスを有効にするパケット ヘッダー。

このドキュメントでは、 コンテナー という用語を使用して、ストリーム、ヘッダー、インデックス、メタデータなどのパッケージ全体について説明します。 ファイルではなくコンテナーという用語を使用する理由は、一部のコンテナー形式がライブ ブロードキャスト用に設計されているためです。 アプリケーションはコンテナーをリアルタイムで生成し、ファイルに格納することはありません。

メディア コンテナーの初期の例として、AVI ファイル形式があります。 その他の例としては、MP4 と Advanced Systems Format (ASF) があります。 コンテナーは、ファイル名拡張子 (.mp4など) または MIME の種類で識別できます。

次の図は、メディア コンテナーの一般的な構造を示しています。 この図は、特定の形式を表していません。各形式の詳細は大きく異なります。

一般的なメディア コンテナーを示す図

図に示されている構造は階層構造であり、コンテナーの先頭にヘッダー情報が表示されます。 この構造は、多くの (すべてではない) コンテナー形式に典型的です。 また、データ セクションにはインターリーブオーディオパケットとビデオパケットが含まれていることに注意してください。 この種類のインターリーブは、メディア コンテナーで一般的です。

多重化という用語は、オーディオストリームとビデオストリームをパケット化し、パケットをコンテナにインターリーブするプロセスを指します。 パケット化されたデータからのストリームを再構築する逆プロセスは、 デマルチプレクシングと呼ばれます。

形式

デジタル メディアでは、用語 の形式 があいまいです。 形式は、H.264 ビデオなどの エンコードの種類、または MP4 などのコンテナーを参照できます。 この違いは、多くの場合、通常のユーザーにとって混乱を招きます。 メディア形式に指定された名前は、必ずしも役立つとは限りません。 たとえば、 MP3 はエンコード形式 (MPEG-1 オーディオ レイヤー 3) とファイル形式の両方を参照します。

ただし、メディア ファイルの読み取りには実際には次の 2 つの段階が含まれるため、この違いは重要です。

  1. まず、コンテナーを解析する必要があります。 ほとんどの場合、ストリームの数と各ストリームの形式は、この手順が完了するまで認識できません。
  2. 次に、ストリームが圧縮されている場合は、適切なデコーダーを使用してデコードする必要があります。

この事実は、コンテナーの解析とストリームのデコードに個別のコンポーネントが使用されるソフトウェア設計に非常に自然に結び付きます。 さらに、このアプローチは、サードパーティが独自のパーサーとコーデックを提供できるように、プラグイン モデルに役立ちます。 Windows では、コンポーネント オブジェクト モデル (COM) は、API を実装から分離する標準的な方法を提供します。これは、プラグイン モデルの要件です。 このため (特に) Media Foundation では COM インターフェイスが使用されます。

次の図は、メディア ファイルの読み取りに使用されるコンポーネントを示しています。

メディア ファイルを読み取るコンポーネントを示す図

メディア ファイルを書き込むには、次の 2 つの手順も必要です。

  1. 圧縮されていないオーディオ/ビデオ データのエンコード。
  2. 圧縮データを特定のコンテナー形式に配置する。

次の図は、メディア ファイルの書き込みに使用されるコンポーネントを示しています。

メディア ファイルを書き込むコンポーネントを示す図。

Media Foundation プログラミング ガイド