シンク ライターの使用

概要

ファイル コンテナーの種類

シンク ライターには、いくつかのファイル コンテナーの種類に対するサポートが組み込まれています。 完全な一覧については、「 MF_TRANSCODE_CONTAINERTYPE」を参照してください。 カスタム メディア シンクを記述することで、追加のコンテナーの種類をサポートできます。 ファイル コンテナーは、シンク ライターの新しいインスタンスを作成するときに指定されます。

ストリーム形式

ストリームごとに、アプリケーションで次を指定する必要があります。

  • 入力形式は、アプリケーションがシンク ライターに送信する形式です。
  • 出力形式は、ファイルに書き込まれる形式です。

入力形式と出力形式は、圧縮形式と非圧縮形式のどちらでもかまいません。 シンク ライターでは、次の組み合わせがサポートされています。

  • 圧縮された出力を含む圧縮されていない入力。 これは一般的なケースであり、エンコードまたはコード変換のシナリオに使用されます。 入力の種類を受け入れ、出力の種類にエンコードする Microsoft Media Foundation エンコーダーを使用できる必要があります。
  • 同じ出力を持つ圧縮された入力。 この組み合わせを使用して、コード変換を行わずにファイルを再多重化します。
  • 出力が同じ非圧縮入力。 この組み合わせを使用して、圧縮されていないオーディオまたはビデオをファイル コンテナーに書き込みます。

シンク ライターでは、エンコーダーによってこれらの関数が提供されていない限り、ビデオのサイズ変更、フレーム レート変換、またはオーディオのリサンプリングはサポートされていません。 それ以外の場合、アプリケーションは、データを に送信する前に、 デジタル信号プロセッサ を使用して入力データを変換できます。

シンク ライターの作成

シンク ライターを作成する関数は 2 つあります。

  • MFCreateSinkWriterFromURL は、出力ファイルの URL またはバイト ストリームへのポインターを受け取ります。 この関数は、メディア シンクを内部的に作成します。
  • MFCreateSinkWriterFromMediaSink は、アプリケーションによって既に作成されているメディア シンクへのポインターを受け取ります。

組み込みのメディア シンクのいずれかを使用している場合は、呼び出し元がメディア シンクを構成する必要がないため、 MFCreateSinkWriterFromURL 関数を使用することをお勧めします。

MFCreateSinkWriterFromURL メソッドには、ファイル コンテナーの種類を指定するためのオプションがいくつか用意されています。 最も単純なケースでは、関数は URL のファイル名拡張子を使用してファイル コンテナーを選択します。 詳細については、関数のリファレンス ページを参照してください。

たとえば、次のコードでは、URL のファイル名 "output.wmv" を指定します。 ファイル名拡張子に基づいて、シンク ライターは ASF メディア シンク を読み込み、Advanced Systems Format (ASF) ファイルを作成します。

    HRESULT hr = MFCreateSinkWriterFromURL(L"output.wmv", NULL, NULL, &pSinkWriter);

MFCreateSinkWriterFromMediaSink の場合、ファイルの種類はメディア シンクによって決定されます。

シンク ライター