入力、ストリーム、および出力

[このページに関連付けられている機能である Windows Media Format 11 SDK は、レガシ機能です。 これは、ソース リーダーシンク ライターによって置き換えられます。 ソース リーダーシンク ライターは、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、Windows Media Format 11 SDK ではなくソース リーダーシンク ライターを使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

このドキュメントの "入力" とは、アプリケーションが適切な API を使用してソースからライター オブジェクトに配信するデジタル メディア データ ストリーム (オーディオやビデオなど) です。 入力は、サポートされている形式で配信する必要があります。 入力としてサポートされている標準の RGB 形式と YUV 形式がいくつかあり、オーディオ コーデックでは PCM がサポートされています。 指定された入力形式がコーデックでネイティブにサポートされていない場合、ライター オブジェクトは、さまざまな形式をコーデックで受け入れられる形式に変換できるオーディオまたはビデオ ヘルパー オブジェクトをインスタンス化します。 オーディオ入力の場合、ヘルパー オブジェクトは、必要に応じてビット深度、サンプル レート、チャネル数を調整します。 ビデオ入力の場合、ビデオ ヘルパー オブジェクトは色空間変換と四角形サイズの調整を実行します。 場合によっては、圧縮されたオーディオデータとビデオデータを入力ストリームに渡すことができます。 入力には、テキスト、スクリプト コマンド、静止画像、任意のファイル データなど、オーディオとビデオ以外のメディアの種類があります。

このドキュメントの "出力" は、リーダー オブジェクトがレンダリングのためにアプリケーションに渡すデータを指します。 出力は、再生時の 1 つのストリームに相当します。 相互排他を使用している場合、相互に排他的なストリームはすべて 1 つの出力を共有します。 通常、出力データは圧縮されていないオーディオまたはビデオ データの形式ですが、任意の種類のデータを含めることができます。 サポートされているビデオ出力形式については、このドキュメントの他の場所に記載されています。

このドキュメントの "stream" という用語は、(1) ライター オブジェクトによって処理される前の入力ソース データと、(2) リーダー オブジェクトによって圧縮解除された後の出力データとは対照的に、ASF ファイル内のデータを指します。 ASF ストリームには、ライター オブジェクトの 1 つの入力から取得されたデータが含まれますが、同じ入力から複数のストリームを作成できます。 ストリームの形式と圧縮設定は、最初から最後まで同じです。 単純な ASF ファイルには、オーディオ用とビデオ用の 2 つのストリームがあります。 より複雑なファイルには、2 つのオーディオ ストリームと複数のビデオ ストリームが含まれます。 オーディオ ストリームの圧縮設定は同じでも、異なる言語のナレーションなど、コンテンツが異なる場合があります。 ビデオ ストリームには同じコンテンツが含まれている場合がありますが、圧縮設定は異なります。 ライター オブジェクトが各ストリームに適用するメディア形式と圧縮設定は、プロファイルで指定されます。

入力、ストリーム、出力の関係は、3 つの基本的な型にすることができます。 次の 3 つの図は、リレーションシップを示しています。

相互排他のないプロファイルである最も基本的なリレーションシップでは、各入力はライターによって処理され、ASF ファイルに 1 つのストリームとして挿入されます。 再生時に、次の図に示すように、リーダーはストリームを読み取り、圧縮されていないサンプルを 1 つの出力として配信します。

入力、ストリーム、出力間の通常の関係を示す図。

複数のビット レートの相互除外が使用されると、より複雑な関係が発生します。 この場合、1 つの入力がライターによって処理され、いくつかのビット レートでエンコードされます。 データの各エンコードは、個別のストリームとして ASF ファイルに挿入されます。 再生時に、使用可能な帯域幅に基づいて、どのストリームを圧縮解除するかをリーダーが決定します。 次に、次の図に示すように、リーダーは選択したストリームを読み取り、圧縮されていないサンプルを 1 つの出力として配信します。

複数のビット レートの相互除外を使用する場合の入力、ストリーム、出力間の関係を示す図。

3 番目の種類のリレーションシップは、言語ベースまたはカスタムの相互排他が使用されている場合に発生する可能性があります。 このリレーションシップでは、リーダーによって複数の入力が処理され、それぞれが個別のストリームとして ASF ファイルに挿入されます。 再生時に、指定したロジックに基づいて、展開するストリームがアプリケーションによって手動で選択されます。 次に、リーダーは選択したストリームを読み取り、圧縮されていないサンプルを 1 つの出力として配信します。 このプロセスは、複数の言語でサウンドトラックを含める場合に使用できます。 このプロセスを説明する図を次に示します。

カスタム相互除外を使用する場合の入力、ストリーム、出力間の関係を示す図。

前に説明したリレーションシップには、いくつかのバリエーションがあります。 たとえば、1 つのファイルに 3 つのリレーションシップすべて、または 1 つまたは 2 つのリレーションシップを含めることができます。 また、一部の入力を圧縮することもできます。その場合、ライターは追加の圧縮を実行しません。 リーダーは、圧縮されたサンプルを提供することもできます。 ただし、アクセスする場合は、出力番号ではなくストリーム番号でアクセスする必要があります。

Note

入力、蒸気、出力はすべて、Windows Media Format SDK のオブジェクトによって割り当てられます。 ストリームには、プロファイルで定義した 1 から始まるストリーム番号があります。 各ストリームには、プロファイル内のストリームの列挙に使用するストリーム インデックスも割り当てられます。 これらの数値のいずれも、相互に一貫性を持つ保証はありません。 つまり、入力番号 1 はストリーム番号 1 と対応していない場合があり、ストリーム番号 1 はストリーム インデックス 1 と対応していない可能性があります。などです。

 

概念

相互除外