Tipi di video H.264
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare un nuovo codice MediaPlayer, IMFMediaEngine e Acquisizione audio/video in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
I sottotipi multimediali seguenti sono definiti per il video H.264.
Sottotipo | FOURCC | Descrizione |
---|---|---|
MEDIASUBTYPE_AVC1 | 'AVC1' | H.264 bitstream senza codici di inizio. |
MEDIASUBTYPE_H264 | 'H264' | H.264 bitstream con codici iniziali. |
MEDIASUBTYPE_h264 | 'h264' | Equivalente a MEDIASUBTYPE_H264, con un fourcc diverso. |
MEDIASUBTYPE_X264 | 'X264' | Equivalente a MEDIASUBTYPE_H264, con un fourcc diverso. |
MEDIASUBTYPE_x264 | 'x264' | Equivalente a MEDIASUBTYPE_H264, con un fourcc diverso. |
Questi GUID del sottotipo vengono dichiarati in wmcodecdsp.h.
La differenza principale tra questi tipi di supporti è la presenza di codici iniziali nel flusso di bit. Se il sottotipo è MEDIASUBTYPE_AVC1, il flusso di bit non contiene codici iniziali.
H.264 Bitstream con codici iniziali
I flussi di bit H.264 trasmessi via aria, contenuti in flussi di trasporto o di programma MPEG-2 o registrati su HD-DVD, sono formattati come descritto nell'allegato B di ITU-T Rec. H.264. In base a questa specifica, il flusso di bit è costituito da una sequenza di unità del livello di astrazione di rete (NALU), ognuna delle quali è preceduta da un codice iniziale uguale a 0x000001 o 0x00000001.
Quando i codici di avvio sono presenti nel flusso di bit, viene usato il tipo di supporto seguente:
Etichetta | Valore |
---|---|
Tipo principale | MEDIATYPE_Video |
Sottotipi | MEDIASUBTYPE_H264, MEDIASUBTYPE_h264, MEDIASUBTYPE_X264o MEDIASUBTYPE_x264 |
Tipo di formato | FORMAT_VideoInfo, FORMAT_VideoInfo2, FORMAT_MPEG2Videoo GUID_NULL |
Se il tipo di formato è GUID_NULL, non è presente alcuna struttura di formato.
Quando il flusso di bit contiene codici iniziali, uno dei tipi di formato elencati qui è sufficiente, perché il decodificatore non richiede informazioni aggiuntive per analizzare il flusso. Il bitstream contiene già tutte le informazioni necessarie per il decodificatore e i codici iniziali consentono al decodificatore di individuare l'inizio di ogni NALU.
I sottotipi seguenti sono equivalenti:
H.264 Bitstream senza codici start
Il formato del contenitore MP4 archivia i dati H.264 senza codici di avvio. Al contrario, ogni NALU è preceduto da un campo di lunghezza, che dà la lunghezza del VALORE NALU in byte. Le dimensioni del campo di lunghezza possono variare, ma in genere sono 1, 2 o 4 byte.
Quando i codici di avvio non sono presenti nel flusso di bit, viene usato il tipo di supporto seguente.
Etichetta | Valore |
---|---|
Tipo principale | MEDIATYPE_Video |
Sottotipo | MEDIASUBTYPE_AVC1 |
Tipo di formato | FORMAT_MPEG2Video |
Il blocco di formato è una struttura MPEG2VIDEOINFO. Questa struttura deve essere compilata nel modo seguente:
- hdr: struttura VIDEOINFOHEADER2 che descrive il flusso di bit. Non è presente alcuna tabella colori dopo la partebitmapINFOHEADERdella struttura e biClrUsed deve essere zero.
- dwStartTimeCode: non usato. Impostare su zero.
- cbSequenceHeader: lunghezza della matrice dwSequenceHeader in byte.
- dwProfile: specifica il profilo H.264.
- dwLevel: specifica il livello H.264.
- dwFlags: numero di byte utilizzati per il campo di lunghezza visualizzato prima di ogni NALU. Il campo lunghezza indica le dimensioni del valore NALU seguente in byte. Ad esempio, se dwFlags è 4, ogni NALU è preceduto da un campo di lunghezza a 4 byte. I valori validi sono 1, 2 e 4.
- dwSequenceHeader: matrice di byte che può contenere set di parametri di sequenza (SPS) e set di parametri immagine (PPS).
Il contenitore MP4 può contenere set di parametri di sequenza (SPS) o set di parametri immagine (PPS) come unità NAL speciali nelle intestazioni di file o in un flusso separato (distinto dal flusso video). Quando viene stabilito il formato, il tipo di supporto può specificare le unità SPS e PPS NAL nella matrice dwSequenceHeader. Se cbSequenceHeader è maggiore di zero, dwSequenceHeader è l'inizio di una matrice di byte contenente SPS e PPS NALU, delimitata da campi di lunghezza a 2 byte, tutti in ordine di byte di rete (big-endian). È possibile avere sia SPS che PPS, solo uno di questi tipi o nessuno. Il tipo effettivo di ogni NALU può essere determinato esaminando il campo nal_unit_type della NALU stessa.
Quando viene usato questo tipo di supporto, ogni campione multimediale inizia all'inizio di un'unità NALU e le unità NAL non si estendono su campioni. In questo modo il decodificatore può eseguire il ripristino dal danneggiamento dei dati o dagli esempi eliminati.