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:
|
| 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:
|
| 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:
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:
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:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
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:
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
Die folgenden Windows 8.1 ICodecAPI-Eigenschaften sind optional, werden jedoch in HCK getestet, sofern unterstützt.
- CODECAPI_AVEncVideoMinQP
- CODECAPI_AVEncVideoLTRBufferControl
- CODECAPI_AVEncVideoMarkLTRFrame
- CODECAPI_AVEncVideoUseLTRFrame
- CODECAPI_AVEncVideoEncodeFrameTypeQP
- CODECAPI_AVEncSliceControlMode
- CODECAPI_AVEncSliceControlSize
- CODECAPI_AVEncVideoMaxNumRefFrame
- CODECAPI_AVEncVideoMeanAbsoluteDifference
- CODECAPI_AVEncVideoMaxQP
- CODECAPI_AVEncVideoROIEnabled
- CODECAPI_AVEncVideoTemporalLayerCount (dynamisch)
- CODECAPI_AVEncH264CABACEnable
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 |
|