Wednesday, September 17, 2008

H.264 Network Abstract Layer Header

RTP Packetization for H.264 NAL Units
How to Broadcast Multimedia Contents?

H.264 encoder is composed of two layers, video coding layer (VCL) and network abstraction layer (NAL). VCL translates the video information into bits streams. Since the underlying transportation layers are diversified, NAL maps VCL bitstreams into byte-oriented transportation-layer-friendly and HDLC-like NAL units prior to delivery.

During the mapping of VCL bitstreams to NAL units, at least three operations are done, which are byte alignment, emulation prevention, framing with an additional one-byte NAL unit header. The first byte after a NAL unit start code prefix is the NAL unit header. A NAL unit header consists of  three fields.
  1. forbidden_bit (1 bit): may be used to indicate a NAL unit is corrupted or not.
  2. nal_storage_idc (2 bit): signals relative importance, and if the picture is stored in the reference picture buffer. 
  3. nal_unit_type (5 bit): signals 1 of 10 different NAL unit types. H.264 defines two additional ranges of NAL unit type values as “Reserved” for future definition of compatible extensions and  “Unspecified” for application specific decoders
The field after NAL unit header is NAL unit payload or RBSP payload, which contains either coded slice or additional header or control information, such as sequence or picture parameter set, supplemental enhancement information (SEI), coded data partition, picture delimiter, filter data, etc.