Condividi tramite


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.