Erstellen eines Encoders mithilfe von CoCreateInstance

Zum Konvertieren von Mediendateien in das ASF-Format können Sie Windows Media-Encoder verwenden. Um diese Encoder verwenden zu können, müssen sie beim System registriert sein. Encoder werden als Media Foundation-Transformationen (MFTs ) implementiert und müssen die IMFTransform-Schnittstelle verfügbar machen. In diesem Thema wird beschrieben, wie eine Anwendung einen Zeiger auf die erforderliche IMFTransform-Schnittstelle des erforderlichen MFT-Encoders abrufen und zur Verwendung instanziieren kann.

Informationen zur Encoderregistrierung finden Sie unter Instanziieren eines Encoder-MFT.

Verwenden der IMFTransform-Schnittstelle eines Encoders

Nach erfolgreicher Registrierung von Windows Media-Encodern beim System kann eine Anwendung die Encoder auflisten, indem sie MFTEnum aufruft. Um nach dem richtigen Encoder zu suchen, müssen Sie Folgendes angeben:

  • Die GUID, die die Kategorie darstellt, die entweder MFT_CATEGORY_AUDIO_ENCODER oder MFT_CATEGORY_VIDEO_ENCODER ist.

  • Das zu übereinstimmende Format. Dies wird in der MFT_REGISTER_TYPE_INFO-Struktur festgelegt, die den Haupttyp und Untertyp des Medientyps angibt, in dem der Encoder Beispiele generiert. Diese Struktur wird im pOutputType-Parameter übergeben. Informationen zu den unterstützten Typen finden Sie unter Medientyp-GUIDs.

    Hinweis

    Die Eingabetypinformationen im pInputType-Parameter sind nicht erforderlich. Dies liegt daran, dass der Eingabetyp der Anwendung bekannt ist und der Encoder erwartet, dass sich der Eingabedatenstrom in einem nicht komprimierten Format befindet.

     

MFTEnum gibt ein Array von IMFTransform-Zeigern für die Encoder-MFTs zurück, die den Suchkriterien entsprechen. Sie können einen Encoder instanziieren, indem Sie die COM-Funktion CoCreateInstance aufrufen und die CLSID des Encoders übergeben, den Sie verwenden möchten. Diese Funktion gibt einen Zeiger auf die IMFTransform-Schnittstelle zurück, die den Encoder darstellt. Weitere Informationen zu diesem Funktionsaufruf finden Sie in der Windows SDK-Dokumentation für das Component Object Model (COM).

Beispiel für die Encodererstellung

Das folgende Codebeispiel zeigt, wie Sie einen Audio- oder Videoencoder erstellen.

HRESULT FindEncoder(
    const GUID& subtype, 
    BOOL bAudio, 
    IMFTransform **ppEncoder
    )
{
    HRESULT hr = S_OK;
    UINT32 count = 0;

    CLSID *ppCLSIDs = NULL;

    MFT_REGISTER_TYPE_INFO info = { 0 };

    info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
    info.guidSubtype = subtype;

    hr = MFTEnum(   
        bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
        0,          // Reserved
        NULL,       // Input type
        &info,      // Output type
        NULL,       // Reserved
        &ppCLSIDs,
        &count
        );

    if (SUCCEEDED(hr) && count == 0)
    {
        hr = MF_E_TOPO_CODEC_NOT_FOUND;
    }

    // Create the first encoder in the list.

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(ppCLSIDs[0], NULL,
            CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
    }

    CoTaskMemFree(ppCLSIDs);
    return hr;
}

Instanziieren eines Encoder-MFT

Windows Media Encoder