Freigeben über


Konfigurieren der Videocodierung (Microsoft Media Foundation)

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

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

    • Die MFPKEY_VIDEOWINDOW-Eigenschaft gibt das Pufferfenster an, das für den Datenstrom verwendet werden soll. Weitere Informationen zur Einstellung von Pufferfenstern und deren Auswirkungen auf Inhalte finden Sie unter Codierungsmethoden. Das Standardpufferfenster beträgt drei Sekunden, was für viele Szenarien angemessen ist.
    • Die Videokomplexität wird festgelegt, um den Kompromiss zwischen der Qualität des codierten Inhalts und der zum Codieren erforderlichen Zeit zu bestimmen. Wenn Sie keinen Wert festlegen, wird der Standardwert verwendet. Sie finden jedoch die empfohlenen Modi für einen bestimmten Codec, 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 Bedeutung der Videoglättung und die Bildqualität codierter 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-Datenströmen finden Sie unter Verwenden der VBR-Codierung.

  2. Konfigurieren Sie die DMO_MEDIA_TYPE-Struktur für den Eingabetyp, oder wenn Sie das Media Foundation SDK verwenden, nutzen Sie die MFInitMediaTypeFromVideoInfoHeader-Funktion. Verwenden Sie eine VIDEOINFOHEADER-Struktur, die den nicht komprimierten Eingabeinhalt beschreibt. Der Codec ändert weder die Videogröße noch konvertiert er 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 Ausgabetypen auf, die vollständig sind, mit Ausnahme des dwBitrate-Mitglieds der VIDEOINFOHEADER-Struktur, oder das MF_MT_AVG_BITRATE-Attribut der IMFMediaType-Schnittstelle. Wenn Sie einen Ausgabetyp abrufen, bevor Sie einen Eingabetyp festlegen, verfügt die übermittelte 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 Daten von Videocodecs.

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

Hinweis

Das Video-Encoderobjekt unterstützt zwei Ausgaben. Die zweite Ausgabe ist für den Encoder „post view“ vorgesehen. Er stellt die nicht komprimierten Beispiele bereit, da sie vom Decoder bereitgestellt werden. Auf diese Weise können Sie die Qualität der Codierung überwachen, ohne warten zu müssen, bis der gesamte Datenstrom verarbeitet wird. Diese Ausgabe ist optional. Wenn Sie sie verwenden möchten, konfigurieren Sie den Typ nach demselben Prozess, der zum Festlegen des Encodereingabetyps verwendet wird.

Arbeiten mit Videos