Konfigurieren der Videocodierung (Microsoft Media Foundation)

Führen Sie zum Konfigurieren des Videoencoders die folgenden Schritte aus:

  1. Legen Sie alle Eigenschaften für den Encoder-DMO mithilfe von IPropertyBag::Write fest. In der folgenden Liste sind die Mindesteigenschaften zusammengefasst, die zum Codieren eines CBR-Videodatenstroms erforderlich sind (alle diese Werte verfügen über Standardwerte, die verwendet werden können):

    • DieMFPKEY_VIDEOWINDOW-Eigenschaft gibt das Pufferfenster an, das für den Stream verwendet werden soll. Weitere Informationen zur Einstellung für Pufferfenster und wie sie sich auf Inhalte auswirkt, finden Sie unter Codierungsmethoden. Das Standardpufferfenster beträgt drei Sekunden, was für viele Szenarien geeignet ist.
    • Die Videokomplexität wird festgelegt, um den Kompromiss zwischen der Qualität des codierten Inhalts und der Zeit zu bestimmen, die für die Codierung erforderlich ist. Wenn Sie keinen Wert festlegen, wird der Standardwert verwendet. Sie können jedoch die empfohlenen Modi für einen bestimmten Codec finden, indem Sie IWMCodecProps::GetCodecProp aufrufen, um g_wszWMVCComplexityExLive, g_wszWMVCComplexityExOffline und g_wszWMVCComplexityExMax abzurufen. Anschließend können Sie MFPKEY_COMPLEXITYEX auf einen Wert zwischen 0 und der gemeldeten maximalen Komplexität festlegen.
    • MFPKEY_CRISP gibt die relative Wichtigkeit der Videoglättung und die Bildqualität von codierten Frames an. In den meisten Fällen funktioniert der Standardwert einwandfrei.
    • Für Videoinhalte, die in einem anderen Container als ASF gespeichert sind, muss die eigenschaft MFPKEY_ASFOVERHEADPERFRAME auf 0 festgelegt werden. Dies ist nicht der Standardwert.

    Informationen zum Konfigurieren von VBR-Streams finden Sie unter Verwenden der VBR-Codierung.

  2. Konfigurieren Sie die DMO_MEDIA_TYPE-Struktur für den Eingabetyp, oder verwenden Sie bei Verwendung des Media Foundation SDK die MFInitMediaTypeFromVideoInfoHeader-Funktion . Verwenden Sie eine VIDEOINFOHEADER-Struktur , die den unkomprimierten Eingabeinhalt beschreibt. Der Codec ändert weder die Größe des Videos noch konvertiert den Farbraum.

  3. Legen Sie den Eingabetyp mithilfe von IMediaObject::SetInputType oder IMFTransform::SetInputType fest.

  4. Konfigurieren Sie den Ausgabetyp für den Encoder. Nachdem der Eingabetyp festgelegt wurde, listet der Encoder vollständige Ausgabetypen auf, mit Ausnahme des dwBitrate-Elements der VIDEOINFOHEADER-Struktur oder des MF_MT_AVG_BITRATE-Attributs der IMFMediaType-Schnittstelle . Wenn Sie einen Ausgabetyp abrufen, bevor Sie einen Eingabetyp festlegen, verfügt die bereitgestellte DMO_MEDIA_TYPE-Struktur nicht über einen zugeordneten VIDEOINFOHEADER.

  5. Rufen Sie die privaten Codecdaten ab, und fügen Sie sie an die VIDEOINFOHEADER-Struktur an, die Sie an die DMO_MEDIA_TYPE-Struktur oder an IMFMediaType übergeben. Weitere Informationen finden Sie unter Verwenden privater Videocodecsdaten.

  6. Legen Sie den Ausgabetyp fest, indem Sie die IMediaObject::SetOutputType - oder IMFTransform::SetOutputType-Methode aufrufen. Übergeben Sie entweder die DMO_MEDIA_TYPE-Struktur mit der abgeschlossenen VIDEOINFOHEADER-Struktur (einschließlich angefügter privater Daten), auf die im pbFormat-Member verwiesen wird, oder erstellen Sie einen IMFMediaType , indem Sie MFInitMediaTypeFromVideoInfoHeader aufrufen.

Hinweis

Das Videoencoderobjekt unterstützt zwei Ausgaben. Die zweite Ausgabe ist für den Encoder "Post View". Es liefert die unkomprimierten Beispiele, da sie vom Decoder geliefert werden. Dadurch können Sie die Qualität der Codierung überwachen, ohne warten zu müssen, bis der gesamte Datenstrom verarbeitet ist. Diese Ausgabe ist optional. Wenn Sie es verwenden möchten, konfigurieren Sie den Typ nach demselben Prozess, der zum Festlegen des Encodereingabetyps verwendet wurde.

 

Arbeiten mit Videos