Share via


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:
  • eAVEncH264VProfile_Base (impostazione predefinita)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (richiede Windows 8)
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:
  • eAVEncAdaptiveMode_None. Nessuna codifica adattiva. (impostazione predefinita).
  • eAVEncAdaptiveMode_FrameRate. Modificare in modo adattivo la frequenza dei fotogrammi.

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:
  • 0-33: bassa complessità
  • 34-66: complessità media (impostazione predefinita)
  • 67-100: complessità elevata

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:
  • 0: non usare i frame B (impostazione predefinita).
  • 1: Usare un frame B.
  • 2: Usare due fotogrammi B.
Per impostare questo parametro, impostare la proprietà prima di chiamare IMFTransform::SetOutputType.
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:

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:

Le seguenti Windows 8.1 proprietà ICodecAPI sono facoltative, ma vengono testate in HCK se supportate.

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
Mfh264enc.dll

Vedi anche

Oggetti codec

Supporto MPEG-4 in Media Foundation

Formati multimediali supportati in Media Foundation

Tipi di supporti video