Skip to content

NHNT Format

Aurelien David edited this page Feb 7, 2019 · 3 revisions

HOME » MP4Box » NHNT

The NHNT format has been developed during the MPEG-4 Systems implementation phase, as a way to easily mux unknown media formats to an MP4 file or an MPEG-4 multiplex. The goal was to have the media encoder produce a description of the media time fragmentation (access units and timestamps) that could be reused by a media-unaware MPEG-4 multiplexer.

A NHNT source is composed of 2 or 3 parts:

  • the media file: This file contains all the media data as written by the encoder. The file extension must be .media.
  • the NHNT (meta) file: This file contains all the information needed by the MPEG-4 multiplexer to use the media data. The file extension must be .nhnt.
  • the decoder initialization file: If the media format requires decoder configuration data (MPEG-4 Visual, AAC, AVC/H264, ...), the binary data is put in this third file in order for the MPEG-4 multiplexer to correctly signal decoder configuration. This is required by the fact that in MPEG-4 Systems, configuration data is never sent in-band of the media stream, but through the object descriptor stream. The file extension must be .info.

The NHNT file format

A NHNT file is made of a header, and a set of access units descriptors. All integers are written in network-byte order.

Header Syntax

char Signature[4];
bit(8) version;
bit(8) streamType;
bit(8) objectTypeIndication;
bit(16) reserved = 0;
bit(24) bufferSizeDB;
bit(32) avgBitRate;
bit(32) maxBitRate;
bit(32) timeStampResolution;

Semantics

  • Signature : identifies the file as an NHNT file. The signature must be 'NHnt' or 'NHnl' for large files (using 64 bits offsets and timestamps).
  • version : identifies the NHNT version used to produce the file. Default version is 0.
  • streamType : identifies the media streamType as specified in MPEG-4 (0x04: Visual, 0x05: audio, ...). Officially supported stream types are listed here.
  • objectTypeIndication : identifies the media type as specified in MPEG-4. For example, 0x40 for MPEG-4 AAC. Officially supported object types are listed here.
  • bufferSizeDB : indicates the size of the decoding buffer for this stream in byte.
  • avgBitRate : indicates the average bitrate in bits per second of this elementary stream. For streams with variable bitrate this value shall be set to zero.
  • maxBitRate : indicates the maximum bitrate in bits per second of this elementary stream in any time window of one second duration.
  • timeStampResolution : indicates the unit in which the media timestamps are expressed in the file (timeStampResolution ticks = 1 second).

After the header, the file is just a succession of access unit (sample) info until the end of the file.

Sample Header Syntax for 'NHnt' files

bit(24) data_size;
bit(1) random_access_point;
bit(1) au_start_flag;
bit(1) au_end_flag;
bit(3) reserved = 0;
bit(2) frame_type;
bit(32) file_offset;
bit(32) compositionTimeStamp;
bit(32) decodingTimeStamp;

Sample Header Syntax for 'NHnl' files

bit(24) data_size;
bit(1) random_access_point;
bit(1) au_start_flag;
bit(1) au_end_flag;
bit(3) reserved = 0;
bit(2) frame_type;
bit(64) file_offset;
bit(64) compositionTimeStamp;
bit(64) decodingTimeStamp;

Semantics

  • data_size : indicates the amount of data to fetch from the source file for this access unit.
  • random_access_point : indicates if the access unit is a random access point.
  • au_start_flag : indicates if this is the start of an access unit or not.
  • au_end_flag : indicates if this is the end of an access unit or not.
  • frame_type : Used for bidirectional video coding sources only, 0 otherwise.
    • frame_type=2: access unit is a B-frame
    • frame_type=1: access unit is a P-frame
    • frame_type=0: access unit is an I-frame
  • file_offset : indicates the position in the source file of the first byte to fetch for this data chunk.
  • compositionTimeStamp : indicates the composition (presentation) time stamp of this access unit.
  • decodingTimeStamp : indicates the decoding time stamp of this access unit.

Note : Samples must be described in decoding order in the nhnt file when using sample fragmentation. Otherwise, sample may be described out of order.

Clone this wiki locally
You can’t perform that action at this time.