Medientypverhandlung auf dem Encoder

In Microsoft Media Foundation werden Encoder als Media Foundation-Transformationen (MFTs ) mit einer Eingabe und einer Ausgabe implementiert. Vor einer Codierungssitzung muss ein Encoder die Merkmale des Datenstroms kennen, den er als Eingabe empfängt, und das Format des Datenstroms, den er als Ausgabe erzeugt. Sie müssen die Eingabe- und Ausgabemedientypen und die zugehörigen Merkmale festlegen, bevor Sie Daten über den Encoder übergeben. Sie müssen die Eingabe- und Ausgabeformate angeben, indem Sie die entsprechenden Medientyp-GUIDs angeben und die Merkmale des Ausgabestreams festlegen, indem Sie die relevanten Medientypattribute für den Ausgabemedientyp festlegen. Ein neu instanziierter Encoder verfügt über keine festgelegten Medientypen.

Der Eingabemedientyp ist ein nicht komprimiertes Format, z. B. PCM-Audio oder RGB-Video. Die vom Encoder verwendeten Formattypen sind auf die von den STRUKTUREN VIDEOINFOHEADER und WAVEFORMATEX beschriebenen beschränkt. Weitere Informationen zu diesen Strukturen finden Sie in der Dokumentation zum Windows SDK. Media Foundation bietet Hilfsfunktionen zum Erstellen von Medientypen aus Formatstrukturen. Beispielsweise initialisiert die MFInitMediaTypeFromVideoInfoHeader-Funktion einen Videotyp aus einer VIDEOINFOHEADER-Struktur , und die MFInitMediaTypeFromWaveFormatEx-Funktion initialisiert einen Videotyp aus einer WAVEFORMATEX - oder WAVEFORMATEXTENSIBLE-Struktur . Weitere Informationen finden Sie unter Konvertierungen von Medientypen. Sie müssen den Eingabemedientyp für den Encoder festlegen, indem Sie IMFTransform::SetInputType aufrufen.

Der Ausgabemedientyp ist das Komprimierungsformat, das im endgültigen Quellstream oder der endgültigen Quelldatei verwendet wird. Sie können den verfügbaren Ausgabemedientyp erst festlegen, nachdem Sie den Eingabemedientyp festgelegt haben. Sie können die unterstützten Ausgabetypen abrufen, indem Sie IMFTransform::GetOutputAvailableType in einer Schleife aufrufen, bis der Encoder MF_E_NO_MORE_TYPES zurückgibt. Erhöhen Sie den Typindex mit jeder Iteration. Wenn Sie einen geeigneten Medientyp finden, legen Sie den Ausgabemedientyp fest, indem Sie IMFTransform::SetOutputType aufrufen.

Der entscheidende Faktor bei der Auswahl des Ausgabemedientyps hängt von der Art der Codierung und Ihren Codierungsanforderungen ab. Für Audiostreams, die z. B. CBR-codiert sind, möchten Sie einen Medientyp finden, der Ihrer Eingabe entspricht und eine Bitrate aufweist, die einem Zielwert so nahe wie möglich ist.

Wenn Sie einen anderen Codierungsmodus als CBR verwenden möchten, müssen Sie den Modus festlegen und dann die Ausgabetypen für diesen Modus auflisten, da der Encoder die unterstützten Ausgabetypen je nach Modussatz ändert. Die Eigenschaften, die den Codierungsmodus steuern, sind MFPKEY_VBRENABLED und MFPKEY_PASSESUSED. Wenn Sie beispielsweise Ausgabetypen für die VBR-Qualitätscodierung aufzählen, hängt der Medientyp von dem Qualitätswert ab, den Sie verwenden möchten. Informationen zum Festlegen dieser Eigenschaften finden Sie unter Codierungseigenschaften.

Instanziieren eines Encoder-MFT

Windows Media Encoder