Verwenden der Transcodierungs-API

In diesem Thema wurde beschrieben, wie Sie die Transcodierungs-API zum Codieren einer Mediendatei verwenden.

Übersicht

Vor der Verwendung der Transcodierungs-API muss die Anwendung über die folgenden Informationen verfügen:

  • Der Pfad oder die URL zu einer vorhandenen Mediendatei, die neu codiert wird.
  • Der Name der Ausgabedatei.
  • Der Containertyp für die Ausgabedatei, z. B. MP4 oder Advanced Streaming Format (ASF).
  • Das Codierungsformat. Diese Informationen umfassen die Medientypen, die die codierten Audio- und Videostreams beschreiben.

Um die Transcodierungs-API zu verwenden, führt eine Anwendung die folgenden Schritte aus.

  1. Erstellen Sie eine Medienquelle, um die Quelldatei zu lesen.
  2. Erstellen Sie ein Transcodierungsprofil. Fügen Sie Attribute hinzu, die den Audiostream, den Videostream und den Dateicontainer beschreiben.
  3. Verwenden Sie das Transcodierungsprofil, um eine Codierungstopologie zu erstellen. (Weitere Informationen zu Topologien finden Sie unter Informationen zu Topologien.)
  4. Legen Sie die Topologie für die Mediensitzung fest.
  5. Starten Sie die Mediensitzung, und warten Sie auf das MESessionEnded-Ereignis .

Im weiteren Verlauf dieses Themas werden diese Schritte ausführlicher beschrieben.

Erstellen einer Medienquelle

Eine Medienquelle ist ein Objekt, das die Quelldatei liest und analysiert. Verwenden Sie zum Erstellen einer Medienquelle den Quelllöser. Beispielcode finden Sie im Thema Verwenden des Quelllösers.

Erstellen eines Transcodierungsprofils

Ein Transcodierungsprofil beschreibt das Format und die Einstellungen, die zum Codieren der Ausgabedatei verwendet werden. Das Transcodierungsprofil enthält drei Sätze von Attributen:

  • Audioattribute: Beschreiben des Zielaudioformats und der Audioencodereinstellungen.
  • Videoattribute: Beschreiben des Zielvideoformats und der Videoencodereinstellungen.
  • Containerattribute: Definieren Sie den Typ des Dateicontainers sowie einige globale Codierungseinstellungen.

Um ein Transcodierungsprofil zu erstellen, rufen Sie die MFCreateTranscodeProfile-Funktion auf. Diese Funktion gibt einen Zeiger auf die IMFTranscodeProfile-Schnittstelle zurück. Das anfängliche Profilobjekt ist leer. Sie enthält keine Attribute. Der nächste Schritt besteht darin, die Attribute hinzuzufügen, die das Profil definieren.

Audioattribute

Um Attribute für den Audiostream hinzuzufügen, rufen Sie IMFTranscodeProfile::SetAudioAttributes auf. Diese Attribute geben an, wie der Audiostream codiert wird. Wenn die Ausgabedatei keinen Audiodatenstrom enthält, lassen Sie diese Attribute aus.

Audioattribute lassen sich in zwei Kategorien einteilen:

  • Attribute, die das Format des codierten Datenstroms angeben
  • Attribute, die andere Codierungsparameter angeben.

Formatattribute sind einfach Medientypattribute, wie im Abschnitt Audiomedientypen beschrieben. Der genaue Satz von Formatattributen hängt vom Encoder ab. (Siehe Unterstützte Medienformate in Media Foundation.) Hier finden Sie eine Liste der typischen Audioformatattribute:

Format-Attribut Beschreibung
MF_MT_SUBTYPE Der Untertyp. Weitere Informationen finden Sie unter Audiountertyp-GUIDs.
MF_MT_AUDIO_NUM_CHANNELS Die Anzahl der Audiokanäle.
MF_MT_AUDIO_SAMPLES_PER_SECOND Die Anzahl der Audiobeispiele pro Sekunde.
MF_MT_AUDIO_BLOCK_ALIGNMENT Die Blockausrichtung.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Die durchschnittliche Anzahl von Bytes pro Sekunde (die codierte Bitrate).

 

Die folgenden Codierungsparameter werden definiert.

Codierungsparameter Beschreibung
MF_TRANSCODE_DONOT_INSERT_ENCODER Verhindert, dass die Transcodierungs-API einen Encoder für den Audiostream einfügt.
MF_TRANSCODE_ENCODINGPROFILE Gibt die Gerätekonformitätsvorlage an. (Gilt nur für ASF-Dateien.)
MF_TRANSCODE_QUALITYVSSPEED Gibt den Kompromiss zwischen Codierungsqualität und -geschwindigkeit an.

 

Sie müssen die Formatattribute festlegen. Die Codierungsparameter sind optional.

Eine Möglichkeit, ein mit dem Encoder kompatibles Format zu finden, besteht darin, die MFTranscodeGetAudioOutputAvailableTypes-Funktion aufzurufen. Der gewünschte Encoder wird durch den Untertyp angegeben. Die Funktion gibt eine Auflistung von Medientypen für diesen Encoder zurück. Sie können einen Typ aus der Liste auswählen und die Attribute in das Profil kopieren. Beispielcode, der diesen Ansatz verwendet, finden Sie unter Tutorial: Codieren einer WMA-Datei.

Videoattribute

Um Attribute für den Videostream hinzuzufügen, rufen Sie IMFTranscodeProfile::SetVideoAttributes auf. Diese Attribute geben an, wie der Videostream codiert wird. Wenn die Ausgabedatei keinen Videostream enthält, lassen Sie diese Attribute aus.

Wie bei Audioattributen fallen die Videoattribute in zwei Kategorien:

  • Attribute, die das Format des codierten Datenstroms angeben
  • Attribute, die andere Codierungsparameter angeben.

Formatattribute sind Medientypattribute, wie im Abschnitt Videomedientypen beschrieben. Hier finden Sie eine Liste der typischen Videoformatattribute:

Format-Attribut Beschreibung
MF_MT_SUBTYPE Der Untertyp. Weitere Informationen finden Sie unter GuiDs des Videountertyps.
MF_MT_FRAME_RATE Die Bildfrequenz.
MF_MT_FRAME_SIZE Die Framegröße.
MF_MT_AVG_BITRATE Die durchschnittliche Bitrate.
MF_MT_PIXEL_ASPECT_RATIO Das Pixelseitenverhältnis.

 

Die folgenden Codierungsparameter werden definiert.

Codierungsparameter Beschreibung
MF_TRANSCODE_DONOT_INSERT_ENCODER Verhindert, dass die Transcodierungs-API einen Encoder für den Videostream einfügt.
MF_TRANSCODE_ENCODINGPROFILE Gibt die Gerätekonformitätsvorlage an. (Gilt nur für ASF-Dateien.)
MF_TRANSCODE_QUALITYVSSPEED Gibt den Kompromiss zwischen Codierungsqualität und -geschwindigkeit an.

 

Sie müssen die Formatattribute festlegen. Die Codierungsparameter sind optional.

Containerattribute

Containerattribute definieren Eigenschaften der Ausgabedatei auf Dateiebene. Um Containerattribute festzulegen, rufen Sie IMFTranscodeProfile::SetContainerAttributes auf. Die folgenden Attribute werden definiert.

attribute Beschreibung
MF_TRANSCODE_ADJUST_PROFILE Definiert die Streameinstellungen, die für die Transcodierungstopologie verwendet werden sollen. Sie können die Flags festlegen, um die Eingabequelleneinstellungen zu verwenden, oder benutzerdefinierte Streamattribute verwenden.
MF_TRANSCODE_CONTAINERTYPE Gibt das Dateiformat der Ausgabedatei an, z. B. MP4 oder ASF. Basierend auf diesem Wert wird der Topologie die entsprechende Mediensenke hinzugefügt.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Gibt an, ob Metadaten aus der Quelle in die Ausgabedatei kopiert werden.
MF_TRANSCODE_TOPOLOGYMODE Gibt an, ob hardwarebasierte Codecs während der Transcodierung verwendet werden dürfen.
MFT_FIELDOFUSE_UNLOCK_Attribute Entsperrt einen Codec mit Einschränkungen für den Einsatzbereich. Weitere Informationen finden Sie unter Feldeinschränkungen.

 

Das attribut MF_TRANSCODE_CONTAINERTYPE ist erforderlich. Die anderen Containerattribute sind optional.

Erstellen einer Transcodierungstopologie

Die Transcodierungstopologie ist eine partielle Topologie, die die Medienquelle, die entsprechenden Codecs und die Mediensenke enthält. Um die Transcodierungstopologie zu erstellen, rufen Sie die MFCreateTranscodeTopology-Funktion auf. Diese Funktion verwendet die folgenden Parameter als Eingabe:

Die Funktion gibt einen Zeiger auf die IMFTopology-Schnittstelle zurück.

Ausführen der Codierungssitzung

Nachdem Sie die Topologie erstellt haben, können Sie die Datei codieren. Sie können das Profil an dieser Stelle verwerfen.

  1. Rufen Sie MFCreateMediaSession auf, um die Mediensitzung zu erstellen.
  2. Rufen Sie IMFMediaSession::SetTopology auf, um die Topologie für die Mediensitzung festzulegen.
  3. Rufen Sie IMFMediaSession::Start auf, um die Codierungssitzung zu starten.
  4. Warten Sie auf das MESessionEnded-Ereignis .
  5. Rufen Sie IMFMediaSession::Close auf, um die Mediensitzung zu schließen.
  6. Warten Sie auf das MESessionClosed-Ereignis .
  7. Rufen Sie IMFMediaSource::Shutdown auf.
  8. Rufen Sie IMFMediaSession::Shutdown auf.

Die meiste Zeit, die für die Codierung aufgewendet wird, erfolgt zwischen den Schritten 3 und 4.

Transcodierungs-API

Informationen zur Mediensitzung