Verwenden der Transcodierungs-API
In diesem Thema wurde beschrieben, wie Sie die Transcodierungs-API zum Codieren einer Mediendatei verwenden.
- Übersicht
- Erstellen einer Medienquelle
- Erstellen eines Transcodierungsprofils
- Erstellen einer Transcodierungstopologie
- Ausführen der Codierungssitzung
- Zugehörige Themen
Ü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.
- Erstellen Sie eine Medienquelle, um die Quelldatei zu lesen.
- Erstellen Sie ein Transcodierungsprofil. Fügen Sie Attribute hinzu, die den Audiostream, den Videostream und den Dateicontainer beschreiben.
- Verwenden Sie das Transcodierungsprofil, um eine Codierungstopologie zu erstellen. (Weitere Informationen zu Topologien finden Sie unter Informationen zu Topologien.)
- Legen Sie die Topologie für die Mediensitzung fest.
- 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:
- Ein Zeiger auf die IMFMediaSource-Schnittstelle der Medienquelle.
- Der Name der Ausgabedatei.
- Ein Zeiger auf die IMFTranscodeProfile-Schnittstelle des Transcodierungsprofils.
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.
- Rufen Sie MFCreateMediaSession auf, um die Mediensitzung zu erstellen.
- Rufen Sie IMFMediaSession::SetTopology auf, um die Topologie für die Mediensitzung festzulegen.
- Rufen Sie IMFMediaSession::Start auf, um die Codierungssitzung zu starten.
- Warten Sie auf das MESessionEnded-Ereignis .
- Rufen Sie IMFMediaSession::Close auf, um die Mediensitzung zu schließen.
- Warten Sie auf das MESessionClosed-Ereignis .
- Rufen Sie IMFMediaSource::Shutdown auf.
- Rufen Sie IMFMediaSession::Shutdown auf.
Die meiste Zeit, die für die Codierung aufgewendet wird, erfolgt zwischen den Schritten 3 und 4.
Zugehörige Themen