次の方法で共有


DES での Windows メディア ファイルの書き込み

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

[この API はサポートされていないため、今後変更または使用できない可能性があります。]

このセクションでは、 DirectShow Editing Services (DES) を使用して Windows メディア ファイルを作成する方法について説明します。

重要

Windows メディア ファイルの書き込みにスマート レンダリング エンジンを使用しないでください。 基本レンダリング エンジン (CLSID_RenderEngine) を常に使用します。

 

Windows Media ファイルを書き込むには、次の操作を行います。

  1. キー プロバイダーへのポインターを使用して、レンダリング エンジンで SetSite を呼び出します。

  2. グラフのフロントエンドを作成します。 (「 プロジェクトのレンダリング」を参照)。

  3. WM ASF ライター フィルターを作成し、グラフに追加します。

  4. ファイル名を設定するには、WM ASF ライター フィルターの IFileSinkFilter インターフェイスを使用します。

  5. Windows Media プロファイルを使用するように WM ASF ライターを構成します。 各プロファイルには、定義済みのストリーム数があります。 プロジェクト内のグループと一致するプロファイルを選択する必要があります。

    IConfigAsfWriter インターフェイスには、プロファイルを設定するためのいくつかの異なる方法が含まれています。 たとえば、 ConfigureFilterUsingProfileGuid メソッドは、システム プロファイルを GUID として指定します。 または、Windows Media Format メソッドを使用して IWMProfile ポインターを取得し、 IConfigAsfWriter::ConfigureFilterUsingProfile を呼び出すことができます。 詳細については、「 ASF ライターの構成」を参照してください。

  6. フロントエンドを ASF ライターに接続します。 グラフのフロントエンドには、グループごとに 1 つの出力ピンが含まれています。 互換性のあるプロファイルを指定した場合、ASF ライターには一致する入力ピンのセットが必要です。 各出力ピンを対応する入力ピンに接続します。 これを行う最も簡単な方法は、 ICaptureGraphBuilder2::RenderStream メソッドを使用することです。 まず、 Capture Graph Builder の新しいインスタンスを作成し、フィルター グラフ マネージャーへのポインターを使用して初期化します。

    ICaptureGraphBuilder2 *pBuild = 0;
    hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER,
        IID_ICaptureGraphBuilder2, (void**)&pBuild);
    pBuild->SetFiltergraph(pGraph); 
    

    次に、 IRenderEngine::GetGroupOutputPin メソッドを呼び出して、各グループの出力ピンを取得します。 RenderStream を呼び出して、ピンを ASF ライターに接続します。

    long cGroups = 0;
    hr = pTimeline->GetGroupCount(&cGroups);
    for (long i = 0; i < cGroups; i++)
    {
        IPin *pPin;
        hr = pRenderEngine->GetGroupOutputPin(i, &pPin);
        if (SUCCEEDED(hr))
        {
            hr = pBuild->RenderStream(0, 0, pPin, 0, pASF);
        }
        pPin->Release();
    }
    pBuild->Release
    

DirectShow Editing Services での Windows メディアの使用