Freigeben über


Medientypverhandlung auf dem Encoder

In Microsoft Media Foundation werden Encoder als Media Foundation transformiert (MFTs) mit einer Eingabe und einer Ausgabe implementiert. Vor einer Codierungssitzung muss ein Encoder die Merkmale des Datenstroms kennen, der als Eingabe empfangen wird, und das Format des Datenstroms, der als Ausgabe erzeugt wird. Sie müssen die Eingabe- und Ausgabemedientypen und damit verbundenen 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 Ausgabedatenstroms festlegen, indem Sie die relevanten Medientypattribute für den Ausgabemedientyp festlegen. Ein neu instanziierter Encoder verfügt nicht über festgelegte Medientypen.

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

Der Ausgabemedientyp ist das Komprimierungsformat, das im endgültigen Quelldatenstrom oder in der endgültigen Quelldatei verwendet wird. Sie können den verfügbaren Ausgabemedientyp erst nach dem Festlegen des Eingabemedientyps festlegen. Sie können die unterstützten Ausgabetypen abrufen, indem Sie IMFTransform::GetOutputAvailableType in einer Schleife aufrufen, bis der Encoder MF_E_NO_MORE_TYPESzurückgibt. Erhöhen Sie den Typindex mit jeder Iteration. Wenn Sie einen geeigneten Medientyp finden, legen Sie den Ausgabemedientyp fest, indem Sie IMFTransform::SetOutputTypeaufrufen.

Der Entscheidungsfaktor bei der Auswahl des Ausgabemedientyps hängt vom Typ der Codierung und ihren Codierungsanforderungen ab. For example, for audio streams that are CBR-encoded, you want to find a media type that matches your input and has a bit rate that is as close as possible to a target value.

Wenn Sie einen anderen Codierungsmodus als CBR verwenden möchten, müssen Sie den Modus festlegen und dann die Ausgabetypen für diesen Modus aufzählen, 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 z. B. Ausgabetypen für die VBR-Qualitätscodierung aufzählen, hängt der Medientyp vom Qualitätswert ab, den Sie verwenden möchten. Informationen zum Festlegen dieser Eigenschaften finden Sie unter Codierungseigenschaften.

Instanziieren eines MFT-

Windows Media Encoders