H.264 Video Encoder

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

  • Baselineprofil
  • Profil: Main
  • Hochprofil (erfordert Windows 8)

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

Eingabetypen

Der Eingabemedientyp muss einen der folgenden Untertypen haben:

  • MFVideoFormat_I420
  • MFVideoFormat_IYUV
  • MFVideoFormat_NV12
  • MFVideoFormat_YUY2
  • MFVideoFormat_YV12

Weitere Informationen zu diesen Untertypen finden Sie unter Video Subtype GUIDs.

Der Ausgabetyp muss vor dem Eingabetyp festgelegt werden. Bis der Ausgabetyp festgelegt ist, gibt die METHODE VERFORMTransform::SetInputType des Encoders MF_E_TRANSFORM_TYPE_NOT_SET.

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.
MF_MT_SUBTYPE Videountertyp. Muss MFVideoFormat_H264.
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 zu setzen und dem Encoder die Auswahl der Ebene zu erlauben. Der Encoder kann die richtige Ebene für einen bestimmten Videostream ableiten und dabei die Formateinschränkungen und die Merkmale des Videos berücksichtigen. Weitere Informationen zu Profil- und Leveleinschränkungen finden Sie im Anhang A von ITU-T H.264.
MF_MT_PIXEL_ASPECT_RATIO Optional. Gibt das Pixel-Seitenverhältnis an. Der Standardwert ist 1:1.

Nachdem der Ausgabetyp festgelegt wurde, aktualisiert der Videoencoder den Typ durch Hinzufügen des MF_MT_MPEG_SEQUENCE_HEADER Attributs. Dieses Attribut enthält den Sequenzheader.

Codec-Eigenschaften

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

Informationen zu den 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 Geschwindigkeitssteuerungsmodus fest. Siehe Hinweise. Der Standardmodus ist die constrained variable bit rate (VBR).
CODECAPI_AVEncCommonQuality Legt die Qualitätsstufe fest. Diese Eigenschaft gilt, wenn der Modus für die Ratesteuerung eine qualitätsbasierte VBR ist (eAVEncCommonRateControlMode_Quality). Der gültige Bereich liegt zwischen 1 und 100. Der Standardwert ist 70.
Legen Sie zum Festlegen dieses Parameters die -Eigenschaft fest, bevor Sie DIETRANSFORM::SetOutputType aufrufen.
Legen Sie zum Festlegen dieses Parameters in Windows 7 die -Eigenschaft fest, bevor Sie DEN WERTTRANSFORM::SetOutputType aufrufen. Der Encoder ignoriert Änderungen, nachdem der Ausgabetyp festgelegt wurde.
In Windows 8 kann diese Eigenschaft jederzeit während der Codierung festgelegt werden. Änderungen werden ab dem nächsten Eingaberahmen 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 für die CBR-Codierung (Constant Bit Rate) in Bytes fest.
Der gültige Bereich ist [1 ... 2, bis 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 Geschwindigkeitssteuerungsmodus auf eAVEncCommonRateControlMode_PeakConstrainedVBR.
Der gültige Bereich ist [1 ... 2 quadratisch–1].
CODECAPI_AVEncCommonMeanBitRate Legt die durchschnittliche Bitrate für den codierten Bitstream in Bits pro Sekunde fest. Diese Eigenschaft wird ignoriert, wenn der Ratensteuerungsmodus eAVEncCommonRateControlMode_Qualityist.
Der gültige Bereich ist [1 ... 2 quadratisch–1].
In CBR- und uneingeschränkten VBR-Modi 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 "leaky bucket" entladen werden. (Weitere Informationen finden Sie unter The Leaky Bucket Buffer Model.)
In Windows 7 wird die durchschnittliche Bitrate vom MF_MT_AVG_BITRATE-Attribut für den Medientyp angegeben.
In Windows 8 können Sie die durchschnittliche Bitrate entweder mit dem MF_MT_AVG_BITRATE-Attribut oder der CODECAPI_AVEncCommonMeanBitRate-Eigenschaft festlegen. Wenn beide festgelegt sind, CODECAPI_AVEncCommonMeanBitRate außer Kraft gesetzt. In Windows 8 können Sie die durchschnittliche Bitrate während der Codierung festlegen. Wenn sich die Bitrate ändert, verwendet der Encoder adaptive Codierung.
CODECAPI_AVEncCommonQualityVsSpeed Legt den Qualitäts-/Geschwindigkeits-Kompromiss 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. die Bewegungskompensierung. Bei höheren Komplexitätsgraden wird der Encoder langsamer ausgeführt, erzeugt aber eine bessere Qualität mit der gleichen Bitrate.
CODECAPI_AVEncH264CABACEnable Aktiviert oder deaktiviert CABAC (kontext adaptive binäre arithmetische Codierung) für die H.264-Entropiecodierung. Der Standardwert ist VARIANT_FALSE.
CABAC wird nicht für Baselineprofile verwendet.
CODECAPI_AVEncH264SPSID Legt den Wert von seq_parameter_set_id in der SPS-NAL-Einheit des H.264-Bitstreams 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 fest, bevor Sie ÜBERTRANSFORM::SetOutputTypeaufrufen.
Für Baselineprofil ist die Anzahl von B-Frames immer 0 (null). Der Encoder überschreibt Werte ungleich 0 (null).
Wenn diese Eigenschaft für andere H.264-Profile ungleich 0 (null) ist, lautet das Codierungsmuster IBBPBBP, wobei die maximale Anzahl aufeinanderfolgender B-Frames gleich CODECAPI_AVEncMPVDefaultBPictureCountist.
CODECAPI_AVEncMPVGOPSize Legt die Anzahl der Bilder von einem GOP-Header auf den nächsten fest, einschließlich des führenden Ankers, aber nicht des folgenden.
Der gültige Bereich ist [0 ... 2präsent–1]. Bei 0 (null) wählt der Encoder die GOP-Größe aus. Der Standardwert ist 0 (null).
CODECAPI_AVEncNumWorkerThreads Legt die Anzahl von Arbeitsthreads fest, die von einem Encoder verwendet werden.
Der gültige Bereich ist 0 bis 16. Bei 0 (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 Ratensteuerungsmodus eAVEncCommonRateControlMode_Qualityist.
Diese Eigenschaft konfiguriert die gleiche Codierungseinstellung wie AVEncCommonQuality. AvEncVideoEncodeQP ermöglicht 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 EINSTELLUNG AVEncCommonQuality.
CODECAPI_AVEncVideoForceKeyFrame Erzwingt, dass der Encoder den nächsten Frame als Keyframe codt.
CODECAPI_AVEncVideoMinQP Gültiger Bereich: 0 bis 51. Der Standardwert ist 0.
Diese Eigenschaft gilt für alle Ratensteuerungsmodi. 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 niedriger Latenz. Siehe "Multithreading" im Abschnitt "Hinweise".

Bemerkungen

Der Encoder unterstützt die folgenden Ratensteuerungsmodi.

Modus Konstante BESCHREIBUNG
Konstante Bitrate (CBR) eAVEncCommonRateControlMode_CBR Der Encoder versucht, eine konstante Bitrate zu erreichen, indem er ein "leaky bucket"-Modell verwendet. Die Zielbitrate wird von der CODECAPI_AVEncCommonMeanBitRate -Eigenschaft angegeben.
Erfordert Windows 8.
Eingeschränkte variable Bitrate (VBR) eAVEncCommonRateControlMode_PeakConstrainedVBR Der Encoder verwendet ein "leaky bucket"-Modell mit einer Spitzenbitrate. Die Entleerungsrate für den Bucket "Leaky" wird durch die CODECAPI_AVEncCommonMaxBitRate -Eigenschaft 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änkte VBR eAVEncCommonRateControlMode_UnconstrainedVBR Der Encoder versucht, die vom MF_MT_AVG_BITRATE-Attribut im Ausgabemedientyp angegebene Zielbitrate zu erreichen. 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 auf 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 weist eine geringe Latenz auf, 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 sie parallel. Dieser Modus wird in einer Umgebung mit mehreren Kernen besser skaliert, führt jedoch zu einer größeren Latenz.

Der Encoder verwendet standardmäßig Slicecodierung, um die Latenz zu minimieren. Legen Sie die eigenschaft CODECAPI_AVLowLatencyMode auf VARIANT_FALSE fest, um die Multiframecodierung zu aktivieren.

Um die Anzahl der vom Encoder verwendeten Arbeitsthreads festzulegen, legen Sie die CODECAPI_AVEncNumWorkerThreads -Eigenschaft fest.

In Windows 7 verwendet der Encoder immer Slicecodierung.

Zertifizierter Hardwareencoder

Wenn ein zertifizierter Hardwareencoder vorhanden ist, wird er in der Regel anstelle des Inboxsystemencoders für Media Foundation zugehörigen Szenarien verwendet. Zertifizierte Encoder sind erforderlich, um einen bestimmten Satz von ICodecAPI-Eigenschaften zu 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. Wenn eine optionale Eigenschaft unterstützt wird, sollten sie auch ordnungsgemäß unterstützt werden.

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 jedoch in HCK getestet, sofern unterstützt.

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

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

Requirements (Anforderungen)

Anforderung Wert
Unterstützte Mindestversion (Client)
nur Windows 7 [ 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