H.264-Videoencoder

Der Microsoft Media Foundation H.264-Videoencoder ist eine Media Foundation-Transformation , die die folgenden H.264-Profile unterstützt:

  • Baselineprofil
  • Profil: Main
  • High profile (erfordert Windows 8)

Der H.264-Videoencoder macht die folgenden Schnittstellen verfügbar:

Eingabetypen

Der Eingabemedientyp muss über einen der folgenden Untertypen verfügen:

  • MFVideoFormat_I420
  • MFVideoFormat_IYUV
  • MFVideoFormat_NV12
  • MFVideoFormat_YUY2
  • MFVideoFormat_YV12

Weitere Informationen zu diesen Untertypen finden Sie unter Video-Untertyp-GUIDs.

Der Ausgabetyp muss vor dem Eingabetyp festgelegt werden. Bis der Ausgabetyp festgelegt ist, gibt die IMFTransform::SetInputType-Methode des Encoders MF_E_TRANSFORM_TYPE_NOT_SET zurück.

Ausgabetypen

Der Encoder unterstützt einen einzelnen Ausgabeuntertyp:

  • MFVideoFormat_H264

Legen Sie die folgenden Attribute für den Ausgabemedientyp fest.

attribute BESCHREIBUNG
MF_MT_MAJOR_TYPE Haupttyp. Muss MFMediaType_Video sein.
MF_MT_SUBTYPE Videountertyp. Muss MFVideoFormat_H264 sein.
MF_MT_AVG_BITRATE Durchschnittliche codierte Bitrate in Bits pro Sekunde. Muss größer sein als Null.
MF_MT_FRAME_RATE Bildrate.
MF_MT_FRAME_SIZE Framegröße.
MF_MT_INTERLACE_MODE Interlace-Modus.
MF_MT_MPEG2_PROFILE H.264-Codierungsprofil.
Die unterstützten Werte sind:
  • eAVEncH264VProfile_Base (Standard)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (erfordert Windows 8)
MF_MT_MPEG2_LEVEL Optional. Gibt die H.264-Codierungsebene an.
Der Standardwert ist –1, was angibt, dass der Encoder die Codierungsebene auswählt.
Es wird empfohlen, die Ebene nicht im Medientyp festzulegen und dem Encoder die Auswahl der Ebene zu gestatten. Der Encoder kann die richtige Ebene für einen bestimmten Videostream ableiten, wobei die Formateinschränkungen und die Merkmale des Videos berücksichtigt werden. Weitere Informationen zu Profil- und Leveleinschränkungen finden Sie in Anhang A des ITU-T H.264.
MF_MT_PIXEL_ASPECT_RATIO Optional. Gibt das Pixelseitenverhältnis an. Der Standardwert ist 1:1.

 

Nachdem der Ausgabetyp festgelegt wurde, aktualisiert der Videoencoder den Typ, indem er das attribut MF_MT_MPEG_SEQUENCE_HEADER hinzufügt. Dieses Attribut enthält den Sequenzheader.

Codec-Eigenschaften

Der H.264-Encoder implementiert die ICodecAPI-Schnittstelle zum Festlegen von Codierungsparametern. Es unterstützt die folgenden Eigenschaften.

Die Codecanforderungen für die HCK-Encoderzertifizierung finden Sie weiter unten im Abschnitt Zertifizierter Hardwareencoder .

Die folgenden Eigenschaften werden in Windows 7 unterstützt.

Eigenschaft BESCHREIBUNG
CODECAPI_AVEncCommonRateControlMode Legt den Ratensteuerungsmodus fest. Siehe Hinweise. Der Standardmodus ist nicht eingeschränkte variable Bitrate (VBR).
CODECAPI_AVEncCommonQuality Legt die Qualitätsebene fest. Diese Eigenschaft wird angewendet, wenn der Ratensteuerungsmodus qualitätsbasierte VBR (eAVEncCommonRateControlMode_Quality) ist. Der gültige Bereich ist 1–100. Der Standardwert ist 70.
Um diesen Parameter festzulegen, legen Sie die -Eigenschaft vor dem Aufrufen von IMFTransform::SetOutputType fest.
Um diesen Parameter in Windows 7 festzulegen, legen Sie die -Eigenschaft vor dem Aufrufen von IMFTransform::SetOutputType fest. Der Encoder ignoriert Änderungen, nachdem der Ausgabetyp festgelegt wurde.
In Windows 8 kann diese Eigenschaft während der Codierung jederzeit festgelegt werden. Änderungen werden ab dem nächsten Eingabeframe angewendet.
Intern konvertiert der Encoder diese Eigenschaft in einen AVEncVideoEncodeQP-Wert .

 

Die folgenden Eigenschaften erfordern Windows 8.

Eigenschaft BESCHREIBUNG
CODECAPI_AVEncAdaptiveMode Legt den adaptiven Codierungsmodus fest. Der H.264-Encoder unterstützt die folgenden Modi in Windows 8:
  • eAVEncAdaptiveMode_None. Keine adaptive Codierung. (Standardeinstellung)
  • eAVEncAdaptiveMode_FrameRate. Adaptives Ändern der Bildfrequenz.

CODECAPI_AVEncCommonBufferSize Legt die Puffergröße in Bytes für die CBR-Codierung (Constant Bit Rate) fest.
Der gültige Bereich ist [1 ... 2¹²–1].
Erfordert Windows 8.
CODECAPI_AVEncCommonMaxBitRate Gibt für die eingeschränkte VBR-Codierung die Rate an, mit der der "Leaky Bucket" in Bits pro Sekunde geleert wird. Diese Eigenschaft gilt, wenn der Ratensteuerungsmodus eAVEncCommonRateControlMode_PeakConstrainedVBR ist.
Der gültige Bereich ist [1 ... 2³²–1].
CODECAPI_AVEncCommonMeanBitRate Legt die durchschnittliche Bitrate für den codierten Bitdatenstrom in Bits pro Sekunde fest. Diese Eigenschaft wird ignoriert, wenn der Tarifsteuerungsmodus eAVEncCommonRateControlMode_Quality ist.
Der gültige Bereich ist [1 ... 2³²–1].
Im CBR- und nicht eingeschränkten VBR-Modus bestimmt die durchschnittliche Bitrate die endgültige Größe der Datei. Im CBR-Modus ist die durchschnittliche Bitrate auch die Rate, mit der komprimierte Bits aus dem "undichten Bucket" entleert werden. (Weitere Informationen finden Sie unter The Leaky Bucket Buffer Model.)
In Windows 7 wird die durchschnittliche Bitrate durch das Attribut MF_MT_AVG_BITRATE für den Medientyp angegeben.
In Windows 8 können Sie die durchschnittliche Bitrate entweder mithilfe des attributs MF_MT_AVG_BITRATE oder der CODECAPI_AVEncCommonMeanBitRate-Eigenschaft festlegen. Wenn beide festgelegt sind, CODECAPI_AVEncCommonMeanBitRate Außerkraftsetzungen. In Windows 8 können Sie die durchschnittliche Bitrate während der Codierung festlegen. Wenn sich die Bitrate ändert, verwendet der Encoder die adaptive Codierung.
CODECAPI_AVEncCommonQualityVsSpeed Legt den Kompromiss zwischen Qualität und Geschwindigkeit fest. Gültiger Bereich:
  • 0–33: Geringe Komplexität
  • 34–66: Mittlere Komplexität (Standard)
  • 67–100: Hohe Komplexität

Dieser Wert wirkt sich darauf aus, wie der Encoder verschiedene Codierungsvorgänge ausführt, z. B. Bewegungskompensation. Bei höheren Komplexitätsgraden wird der Encoder langsamer ausgeführt, erzeugt aber eine bessere Qualität bei der gleichen Bitrate.
CODECAPI_AVEncH264CABACEnable Aktiviert oder deaktiviert CABAC (kontextadaptive binäre arithmetische Codierung) für die H.264-Entropiecodierung. Der Standardwert ist VARIANT_FALSE.
CABAC wird nicht für das Baselineprofil verwendet.
CODECAPI_AVEncH264SPSID Legt den Wert von seq_parameter_set_id in der SPS NAL-Einheit des H.264-Bitstroms fest.
CODECAPI_AVEncMPVDefaultBPictureCount Legt die maximale Anzahl aufeinanderfolgender B-Frames im Ausgabebitstream fest. Gültige Werte sind:
  • 0: Verwenden Sie keine B-Frames (Standard).
  • 1: Verwenden Sie einen B-Frame.
  • 2: Verwenden Sie zwei B-Frames.
Um diesen Parameter festzulegen, legen Sie die -Eigenschaft vor dem Aufrufen von IMFTransform::SetOutputType fest.
Für Baselineprofil ist die Anzahl der B-Frames immer 0. Der Encoder überschreibt nichtzero-Werte.
Wenn diese Eigenschaft bei anderen H.264-Profilen nichtzero ist, lautet das Codierungsmuster IBBPBBP, wobei die maximale Anzahl aufeinanderfolgender B-Frames gleich CODECAPI_AVEncMPVDefaultBPictureCount ist.
CODECAPI_AVEncMPVGOPSize Legt die Anzahl der Bilder von einem GOP-Header zum nächsten fest, einschließlich des führenden Ankers, aber nicht des folgenden.
Der gültige Bereich ist [0 ... 2³²–1]. Bei Null wählt der Encoder die GOP-Größe aus. Der Standardwert ist 0 (null).
CODECAPI_AVEncNumWorkerThreads Legt die Anzahl von Workerthreads fest, die von einem Encoder verwendet werden.
Der gültige Bereich ist 0–16. Bei Null wählt der Encoder die Anzahl der Threads aus.
CODECAPI_AVEncVideoContentType Gibt den Typ des Videoinhalts an.
CODECAPI_AVEncVideoEncodeQP Gültiger Bereich: 16–51. Der Standardwert ist 24.
Diese Eigenschaft gilt, wenn der Tarifsteuerungsmodus eAVEncCommonRateControlMode_Quality ist.
Diese Eigenschaft konfiguriert dieselbe Codierungseinstellung wie AVEncCommonQuality. AvEncVideoEncodeQP ermöglicht es der Anwendung jedoch, den Wert von QP direkt anzugeben. Wenn beide Eigenschaften festgelegt sind, überschreibt AVEncVideoEncodeQP.
Der Standardwert 24 entspricht dem Standardwert 70 für die AVEncCommonQuality-Einstellung .
CODECAPI_AVEncVideoForceKeyFrame Erzwingt, dass der Encoder den nächsten Frame als Keyframe codieren muss.
CODECAPI_AVEncVideoMinQP Gültiger Bereich: 0–51. Der Standardwert ist 0.
Diese Eigenschaft gilt für alle Tarifsteuerungsmodi. Der Encoder sollte keinen QP-Wert erzeugen, der niedriger ist als der von der CODECAPI_AVEncVideoMinQP-Eigenschaft angegebene Wert.
CODECAPI_AVLowLatencyMode Aktiviert oder deaktiviert den Modus mit geringer Latenz. Weitere Informationen finden Sie unter "Multithreading" im Abschnitt Hinweise.

 

Bemerkungen

Der Encoder unterstützt die folgenden Ratensteuerungsmodi.

Mode Konstante BESCHREIBUNG
Konstante Bitrate (CBR) eAVEncCommonRateControlMode_CBR Der Encoder versucht, eine konstante Bitrate zu erzielen, indem er ein "Leaky Bucket"-Modell verwendet. Die Zielbitrate wird durch die eigenschaft CODECAPI_AVEncCommonMeanBitRate angegeben.
Erfordert Windows 8.
Eingeschränkte variable Bitrate (VBR) eAVEncCommonRateControlMode_PeakConstrainedVBR Der Encoder verwendet ein "Leaky Bucket"-Modell mit einer Spitzenbitrate. Die Entwässerungsrate für den undichten Bucket wird durch die Eigenschaft CODECAPI_AVEncCommonMaxBitRate angegeben.
Erfordert Windows 8.
Qualitätsbasierte variable Bitrate (VBR) eAVEncCommonRateControlMode_Quality Der Encoder versucht, eine konstante Qualitätsstufe zu erreichen, die von der AVEncCommonQuality-Eigenschaft angegeben wird.
Nicht eingeschränkter VBR eAVEncCommonRateControlMode_UnconstrainedVBR Der Encoder versucht, die Zielbitrate zu erreichen, die vom MF_MT_AVG_BITRATE-Attribut im Ausgabemedientyp angegeben wird. Dies ist der Standardmodus.

 

CBR- und eingeschränkte VBR-Modi erfordern Windows 8.

In Windows 8 legt der Encoder die folgenden Attribute für die Ausgabebeispiele fest:

Hinweis

In einer früheren Version der Dokumentation wurde fälschlicherweise angegeben, dass der Encoder unter Windows Server 2008 R2 unterstützt wird.

 

Multithreading

In Windows 8 unterstützt der Encoder zwei Codierungsmodi:

  • Slicecodierung. In diesem Modus werden Slices parallel codiert. Jeder Slice wird in einem anderen Thread codiert. Dieser Modus hat eine geringe Latenz, da ein einzelnes Bild parallel codiert wird. Dieser Ansatz wird jedoch nicht skaliert, wenn die Anzahl der Kerne zunimmt, da die Anzahl der Slices durch die Anzahl der Makroblockzeilen im Eingabebild begrenzt wird.
  • Multiframecodierung. In diesem Modus akzeptiert der Encoder mehrere Eingabeframes und codiert diese parallel. Dieser Modus kann in einer Multicore-Umgebung besser skaliert werden, führt jedoch zu mehr Latenz.

Der Encoder verwendet standardmäßig slice-Codierung, um die Latenz zu minimieren. Legen Sie zum Aktivieren der Multiframecodierung die eigenschaft CODECAPI_AVLowLatencyMode auf VARIANT_FALSE fest.

Um die Anzahl der vom Encoder verwendeten Workerthreads festzulegen, legen Sie die eigenschaft CODECAPI_AVEncNumWorkerThreads fest.

In Windows 7 verwendet der Encoder immer die Slicecodierung.

Zertifizierter Hardware-Encoder

Wenn ein zertifizierter Hardwareencoder vorhanden ist, wird dieser in der Regel anstelle des Posteingangssystemencoders für Media Foundation-bezogene Szenarien verwendet. Zertifizierte Encoder müssen einen bestimmten Satz von ICodecAPI-Eigenschaften unterstützen und können optional einen anderen Satz von Eigenschaften unterstützen. Der Zertifizierungsprozess sollte sicherstellen, dass die erforderlichen Eigenschaften ordnungsgemäß unterstützt werden und, wenn eine optionale Eigenschaft unterstützt wird, auch ordnungsgemäß unterstützt wird.

Im Folgenden sind die erforderlichen und optionalen ICodecAPI-Eigenschaften für Encoder aufgeführt, um die HCK-Encoderzertifizierung zu bestehen.

Die folgenden Windows 8- und Windows 8.1 ICodecAPI-Eigenschaften sind erforderlich:

Die folgenden Windows 8.1 ICodecAPI-Eigenschaften sind optional, werden aber bei Unterstützung in HCK getestet.

Die folgenden Windows 8- und Windows 8.1 ICodecAPI-Eigenschaften sind optional, werden jedoch in HCK getestet, sofern sie unterstützt werden.

Die folgenden ICodecAPI-Eigenschaften sind optional. Sie werden nicht in HCK getestet.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Nicht unterstützt
DLL
Mfh264enc.dll

Weitere Informationen

Codec-Objekte

MPEG-4-Unterstützung in Media Foundation

Unterstützte Medienformate in Media Foundation

Videomedientypen