Konfigurieren der Videocodierung (Microsoft Media Foundation)

Führen Sie die folgenden Schritte aus, um den Videoencoder zu konfigurieren:

  1. Legen Sie alle Eigenschaften auf dem Encoder DMO mithilfe von IPropertyBag::Write fest. In der folgenden Liste wird der Mindestsatz von Eigenschaften zusammengefasst, die zum Codieren eines CBR-Videostreams 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 Pufferfenstereinstellung und deren Auswirkungen auf den Inhalt finden Sie unter Codierungsmethoden. Das Standardpufferfenster beträgt drei Sekunden, was für viele Szenarien geeignet ist.
    • Die Komplexität des Videos wird festgelegt, um den Kompromiss zwischen der Qualität des codierten Inhalts und der Zeit zu bestimmen, die zum Codieren erforderlich ist. Wenn Sie keinen Wert festlegen, wird der Standardwert verwendet. Sie können jedoch die empfohlenen Modi für einen bestimmten Codec ermitteln, 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 _ DER WERT GIBT die relative Wichtigkeit der Videoglättung und der 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 MFPKEY _ ASFOVERHEADPERFRAME-Eigenschaft auf 0 festgelegt werden. Dies ist nicht der Standardwert.

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

  2. Konfigurieren Sie die DMO _ MEDIA _ TYPE-Struktur für den Eingabetyp, oder verwenden Sie die MFInitMediaTypeFromVideoInfoHeader-Funktion, wenn Sie das Media Foundation SDK verwenden. Verwenden Sie eine VIDEOINFOHEADER-Struktur, die den nicht komprimierten Eingabeinhalt beschreibt. Der Codec ändert die Größe des Videos nicht und konvertiert den Farbraum nicht.

  3. Legen Sie den Eingabetyp mit IMediaObject::SetInputType oder DEMTRANSTRANSFORM::SetInputType fest.

  4. Konfigurieren Sie den Ausgabetyp für den Encoder. Nachdem der Eingabetyp festgelegt wurde, listet der Encoder Ausgabetypen auf, die mit Ausnahme des dwBitrate-Members der VIDEOINFOHEADER-Struktur oder des MF MT _ _ AVG _ BITRATE-Attributs der INTERFACESMediaType-Schnittstelle vollständig sind. Wenn Sie vor dem Festlegen eines Eingabetyps einen Ausgabetyp abrufen, ist der übermittelten DMO _ MEDIA _ TYPE-Struktur kein VIDEOINFOHEADER zugeordnet.

  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 DEN KONSTRUKTIVEMediaTypeübergeben. Weitere Informationen finden Sie unter Verwenden privater Videocodec-Daten.

  6. Legen Sie den Ausgabetyp fest, indem Sie die IMediaObject::SetOutputType- oder DIETRANSFORM::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 KONSTRUKTIVEMediaType, indem Sie MFInitMediaTypeFromVideoInfoHeaderaufrufen.

Hinweis

Das Videoencoderobjekt unterstützt zwei Ausgaben. Die zweite Ausgabe ist für den Encoder "post view" (Nachansicht) bestimmt. Es liefert die unkomprimierten Beispiele, da sie vom Decoder übermittelt werden. Dadurch können Sie die Qualität der Codierung überwachen, ohne warten zu müssen, bis der gesamte Stream verarbeitet wurde. Diese Ausgabe ist optional. Wenn Sie ihn verwenden möchten, konfigurieren Sie seinen Typ nach dem gleichen Prozess, der zum Festlegen des Encodereingabetyps verwendet wurde.

Arbeiten mit Videos