Codificatore video H.264
Il codificatore video di Microsoft Media Foundation H.264 è una trasformazione di Media Foundation che supporta i profili H.264 seguenti:
- Profilo di base
- Main Profile
- Alto profilo (richiede Windows 8)
Il codificatore video H.264 espone le interfacce seguenti:
Tipi di input
Il tipo di supporto di input deve avere uno dei seguenti sottotipi:
- MFVideoFormat_I420
- MFVideoFormat_IYUV
- MFVideoFormat_NV12
- MFVideoFormat_YUY2
- MFVideoFormat_YV12
Per altre informazioni su questi sottotipi, vedere GUID del sottotipo video.
Il tipo di output deve essere impostato prima del tipo di input. Fino a quando non viene impostato il tipo di output, il metodo FMTransform::SetInputType restituisce MF_E_TRANSFORM_TYPE_NOT_SET.
Tipi di output
Il codificatore supporta un singolo sottotipo di output:
- MFVideoFormat_H264
Impostare gli attributi seguenti sul tipo di supporto di output.
Attributo | Descrizione |
---|---|
MF_MT_MAJOR_TYPE | Tipo principale. Deve essere MFMediaType_Video. |
MF_MT_SUBTYPE | Sottotipo video. Deve essere MFVideoFormat_H264. |
MF_MT_AVG_BITRATE | Velocità media di bit codificata, in bit al secondo. Deve essere maggiore di zero. |
MF_MT_FRAME_RATE | Frequenza dei fotogrammi. |
MF_MT_FRAME_SIZE | Dimensioni cornice. |
MF_MT_INTERLACE_MODE | Modalità interlace. |
MF_MT_MPEG2_PROFILE | Profilo di codifica H.264. I valori supportati sono:
|
MF_MT_MPEG2_LEVEL | Facoltativa. Specifica il livello di codifica H.264. Il valore predefinito è –1, che indica che il codificatore selezionerà il livello di codifica. È consigliabile non impostare il livello nel tipo di supporto e consentire al codificatore di selezionare il livello. Il codificatore può derivare il livello appropriato per un determinato flusso video, tenendo conto dei vincoli di formato e delle caratteristiche del video. Per altre informazioni sui vincoli di profilo e livello, vedere Allegato A di ITU-T H.264. |
MF_MT_PIXEL_ASPECT_RATIO | Facoltativa. Specifica il rapporto di aspetto del pixel. Il valore predefinito è 1:1. |
Dopo aver impostato il tipo di output, il codificatore video aggiorna il tipo aggiungendo l'attributo MF_MT_MPEG_SEQUENCE_HEADER . Questo attributo contiene l'intestazione della sequenza.
Proprietà codec
Il codificatore H.264 implementa l'interfaccia ICodecAPI per impostare i parametri di codifica. Supporta le proprietà seguenti.
Per i requisiti di codec per la certificazione del codificatore HCK, vedere la sezione Codificatore hardware certificato di seguito.
Le proprietà seguenti sono supportate in Windows 7.
Proprietà | Descrizione |
---|---|
CODECAPI_AVEncCommonRateControlMode | Imposta la modalità di controllo della frequenza. Vedere la sezione Osservazioni. La modalità predefinita è velocità a bit di variabile non vincolata (VBR). |
CODECAPI_AVEncCommonQuality | Imposta il livello di qualità. Questa proprietà si applica quando la modalità di controllo della frequenza è basata sulla qualità VBR (eAVEncCommonRateControlMode_Quality). L'intervallo valido è 1-100. Il valore predefinito è 70. Per impostare questo parametro, impostare la proprietà prima di chiamare FMTransform::SetOutputType. Per impostare questo parametro in Windows 7, impostare la proprietà prima di chiamare FMTransform::SetOutputType. Il codificatore ignora le modifiche dopo l'impostazione del tipo di output. In Windows 8, questa proprietà può essere impostata in qualsiasi momento durante la codifica. Le modifiche vengono applicate a partire dal frame di input successivo. Internamente, il codificatore converte questa proprietà in un valore AVEncVideoEncodeQP . |
Le proprietà seguenti richiedono Windows 8.
Proprietà | Descrizione |
---|---|
CODECAPI_AVEncAdaptiveMode | Imposta la modalità di codifica adattiva. Il codificatore H.264 supporta le modalità seguenti in Windows 8:
|
CODECAPI_AVEncCommonBufferSize | Imposta le dimensioni del buffer, in byte, per la codifica CBR (Constant Bit Rate). L'intervallo valido è [1 ... 2³²–1]. Richiede Windows 8. |
CODECAPI_AVEncCommonMaxBitRate | Per la codifica VBR vincolata, specifica la frequenza in cui il "bucket in perdita" viene svuotato, in bit al secondo. Questa proprietà si applica quando la modalità di controllo della frequenza è eAVEncCommonRateControlMode_PeakConstrainedVBR. L'intervallo valido è [1 ... 2²–1]. |
CODECAPI_AVEncCommonMeanBitRate | Imposta la velocità media di bit per il flusso di bit codificato, espressa in bit al secondo. Questa proprietà viene ignorata se la modalità di controllo della frequenza è eAVEncCommonRateControlMode_Quality. L'intervallo valido è [1 ... 2²–1]. Nelle modalità CBR e VBR senza vincoli, la velocità media dei bit determina le dimensioni finali del file. In modalità CBR, la velocità media dei bit è anche la velocità con cui i bit compressi vengono svuotati dal "bucket persa". Per altre informazioni, vedere Modello di buffer bucket persi. In Windows 7, la velocità media dei bit viene specificata dall'attributo MF_MT_AVG_BITRATE sul tipo di supporto. In Windows 8 è possibile impostare la velocità media dei bit usando l'attributo MF_MT_AVG_BITRATE o la proprietà CODECAPI_AVEncCommonMeanBitRate. Se entrambi sono impostati, CODECAPI_AVEncCommonMeanBitRate sostituzioni. In Windows 8 è possibile impostare la velocità media dei bit durante la codifica. Se la velocità di bit cambia, il codificatore usa la codifica adattiva. |
CODECAPI_AVEncCommonQualityVsSpeed | Imposta il compromesso di qualità/velocità. Intervallo valido:
Questo valore influisce sul modo in cui il codificatore esegue varie operazioni di codifica, ad esempio la compensazione del movimento. A livelli di complessità più elevati, il codificatore viene eseguito più lentamente, ma produce una migliore qualità alla stessa velocità di bit. |
CODECAPI_AVEncH264CABACEnable | Abilita o disabilita LAC (codifica aritmetica binaria adattiva del contesto) per la codifica entropia H.264. Il valore predefinito è VARIANT_FALSE. L'oggetto CABAC non viene usato per il profilo baseline. |
CODECAPI_AVEncH264SPSID | Imposta il valore di seq_parameter_set_id nell'unità SPS NAL del flusso di bit H.264. |
CODECAPI_AVEncMPVDefaultBPictureCount | Imposta il numero massimo di fotogrammi B consecutivi nel bitstream di output. I valori validi sono:
Per Profilo di base, il numero di fotogrammi B è sempre zero. Il codificatore eseguirà l'override dei valori diversi da zero. Per altri profili H.264, se questa proprietà è diversa da zero, il modello di codifica è IBBPBBP, dove il numero massimo di fotogrammi B consecutivi è uguale a CODECAPI_AVEncMPVDefaultBPictureCount. |
CODECAPI_AVEncMPVGOPSize | Imposta il numero di immagini da un'intestazione GOP alla successiva, incluso l'ancoraggio iniziale, ma non quello seguente. L'intervallo valido è [0 ... 2²–1]. Se zero, il codificatore seleziona le dimensioni GOP. Il valore predefinito è zero. |
CODECAPI_AVEncNumWorkerThreads | Imposta il numero di thread di lavoro utilizzati da un codificatore. L'intervallo valido è 0-16. Se zero, il codificatore seleziona il numero di thread. |
CODECAPI_AVEncVideoContentType | Indica il tipo di contenuto video. |
CODECAPI_AVEncVideoEncodeQP | Intervallo valido: 16-51. Il valore predefinito è 24. Questa proprietà si applica quando la modalità di controllo della frequenza è eAVEncCommonRateControlMode_Quality. Questa proprietà configura la stessa impostazione di codifica di AVEncCommonQuality. TUTTAVIA, AVEncVideoEncodeQP consente all'applicazione di specificare direttamente il valore di QP. Se vengono impostate entrambe le proprietà, avEncVideoEncodeQP esegue l'override. Il valore predefinito 24 corrisponde al valore predefinito 70 per l'impostazione AVEncCommonQuality . |
CODECAPI_AVEncVideoForceKeyFrame | Forza il codificatore a codificare il fotogramma successivo come fotogramma chiave. |
CODECAPI_AVEncVideoMinQP | Intervallo valido: 0-51. Il valore predefinito è 0. Questa proprietà si applica a tutte le modalità di controllo della frequenza. Il codificatore non deve produrre un valore QP inferiore a quello specificato dalla proprietà CODECAPI_AVEncVideoMinQP . |
CODECAPI_AVLowLatencyMode | Abilita o disabilita la modalità a bassa latenza. Vedere "Multithreading" nella sezione Osservazioni. |
Commenti
Il codificatore supporta le modalità di controllo della frequenza seguenti.
Mode | Costante | Descrizione |
---|---|---|
Velocità in bit costante (CBR) | eAVEncCommonRateControlMode_CBR | Il codificatore tenta di ottenere una velocità di bit costante, usando un modello di "bucket persa". La velocità in bit di destinazione viene assegnata dalla proprietà CODECAPI_AVEncCommonMeanBitRate . Richiede Windows 8. |
Velocità in bit variabile vincolata (VBR) | eAVEncCommonRateControlMode_PeakConstrainedVBR | Il codificatore usa un modello "bucket persi" con una frequenza di bit massima. La frequenza di scarico per il bucket persa viene data dalla proprietà CODECAPI_AVEncCommonMaxBitRate . Richiede Windows 8. |
Velocità in bit variabile basata sulla qualità (VBR) | eAVEncCommonRateControlMode_Quality | Il codificatore tenta di ottenere un livello di qualità costante, dato dalla proprietà AVEncCommonQuality . |
VBR non vincolato | eAVEncCommonRateControlMode_UnconstrainedVBR | Il codificatore tenta di ottenere la velocità in bit di destinazione specificata dall'attributo MF_MT_AVG_BITRATE nel tipo di supporto di output. Si tratta della modalità predefinita. |
Le modalità CBR e VBR vincolate richiedono Windows 8.
In Windows 8 il codificatore imposta gli attributi seguenti negli esempi di output:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
Nota
Una versione precedente della documentazione indica erroneamente che il codificatore è supportato in Windows Server 2008 R2.
Multithreading
In Windows 8 il codificatore supporta due modalità di codifica:
- Codifica slice. In questa modalità, le sezioni vengono codificate in parallelo. Ogni sezione viene codificata in un thread diverso. Questa modalità ha una bassa latenza, perché una singola immagine è codificata in parallelo. Tuttavia, questo approccio non viene ridimensionato quando il numero di core aumenta, perché il numero di sezioni viene associato al numero di righe di macroblock nell'immagine di input.
- Codifica multi-frame. In questa modalità il codificatore accetta più fotogrammi di input e li codifica in parallelo. Questa modalità aumenta meglio in un ambiente multicore, ma introduce una maggiore latenza.
Per ridurre al minimo la latenza, il codificatore è predefinito per la codifica. Per abilitare la codifica a più frame, impostare la proprietà CODECAPI_AVLowLatencyMode su VARIANT_FALSE.
Per impostare il numero di thread di lavoro usati dal codificatore, impostare la proprietà CODECAPI_AVEncNumWorkerThreads .
In Windows 7 il codificatore usa sempre la codifica della sezione.
Codificatore hardware certificato
Se è presente un codificatore hardware certificato, verrà in genere usato anziché il codificatore del sistema in arrivo per scenari correlati a Media Foundation. I codificatori certificati sono necessari per supportare un determinato set di proprietà ICodecAPI e possono supportare facoltativamente un altro set di proprietà. Il processo di certificazione deve garantire che le proprietà necessarie siano supportate correttamente e, se è supportata una proprietà facoltativa, che sia supportata correttamente.
Di seguito è riportato il set di proprietà ICodecAPI necessarie e facoltative per i codificatori per passare la certificazione del codificatore HCK.
Sono necessari i seguenti Windows 8 e Windows 8.1 proprietà ICodecAPI:
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
Le seguenti Windows 8.1 proprietà ICodecAPI sono facoltative, ma vengono testate in HCK se supportate.
- CODECAPI_AVEncVideoMinQP
- CODECAPI_AVEncVideoLTRBufferControl
- CODECAPI_AVEncVideoMarkLTRFrame
- CODECAPI_AVEncVideoUseLTRFrame
- CODECAPI_AVEncVideoEncodeFrameTypeQP
- CODECAPI_AVEncSliceControlMode
- CODECAPI_AVEncSliceControlSize
- CODECAPI_AVEncVideoMaxNumRefFrame
- CODECAPI_AVEncVideoMeanAbsoluteDifference
- CODECAPI_AVEncVideoMaxQP
- CODECAPI_AVEncVideoROIEnabled
- CODECAPI_AVEncVideoTemporalLayerCount (dinamica)
- CODECAPI_AVEncH264CABACEnable
I seguenti Windows 8 e Windows 8.1 proprietà ICodecAPI sono facoltative, ma vengono testati in HCK se supportato.
Le proprietà ICodecAPI seguenti sono facoltative. Non vengono testati in HCK.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows 7 [solo app desktop] |
Server minimo supportato |
Nessuno supportato |
DLL |
|
Vedi anche