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:
|
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:
|
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:
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:
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:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
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:
- 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 aber bei Unterstützung in HCK getestet.
- 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 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 |
|
Weitere Informationen