Medientypaushandlung 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 Streams kennen, den er als Eingabe empfängt, und das Format des Streams, den er als Ausgabe erzeugt. Sie müssen die Eingabe- und Ausgabemedientypen und 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 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 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 Medientypkonvertierungen. Sie müssen den Eingabemedientyp auf dem Encoder festlegen, indem Sie DENTRANSFORM::SetInputTypeaufrufen.

Der Ausgabemedientyp ist das Komprimierungsformat, das im endgültigen Quellstream oder in 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 ÜBERTRANSFORM::GetOutputAvailableType in einer Schleife aufrufen, bis der Encoder MF E NO MORE _ _ _ _ TYPES zurückgibt. Erhöhen Sie den Typindex bei jeder Iteration. Wenn Sie einen geeigneten Medientyp finden, legen Sie den Ausgabemedientyp fest, indem Sie ÜBERTRANSFORM::SetOutputTypeaufrufen.

Der Entscheidungsfaktor bei der Auswahl des Ausgabemedientyps hängt vom Typ der Codierung und Ihren Codierungsanforderungen ab. Für Audiostreams, die CBR-codiert sind, möchten Sie beispielsweise einen Medientyp suchen, der mit Ihrer Eingabe übereinstimmt und eine Bitrate aufweist, die so nah wie möglich an einem Zielwert liegt.

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 beispielsweise 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 Encoder-MFT

Windows Medienencoder