Every object starts with the 24-byte object header; the tables below leave those two fields out and give offsets from the start of the object. All numbers are little-endian. Fields named Reserved hold fixed values.
Header Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 4 | Number of Header Objects | Count of the objects inside. |
| 28 | 1 | Reserved1 | 01. |
| 29 | 1 | Reserved2 | 02. |
File Properties Object
Mandatory, one per file; 104 bytes.
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | File ID | GUID, matching the Data Object’s File ID. |
| 40 | 8 | File Size | Invalid if the Broadcast flag is set. |
| 48 | 8 | Creation Date | May be invalid if broadcast. |
| 56 | 8 | Data Packets Count | Invalid if broadcast. |
| 64 | 8 | Play Duration | 100 ns units. Invalid if broadcast. |
| 72 | 8 | Send Duration | 100 ns units. Players may ignore it. |
| 80 | 8 | Preroll | Milliseconds. If not zero, Play Duration and presentation times are offset by this. |
| 88 | 4 | Flags | Bit 0 (01) Broadcast: file is being written. Bit 1 (02) Seekable. The rest are zero. |
| 92 | 4 | Minimum Data Packet Size | Bytes; should equal the maximum. |
| 96 | 4 | Maximum Data Packet Size | Bytes; should equal the minimum. |
| 100 | 4 | Maximum Bitrate | Bits per second over the whole file. |
Stream Properties Object
Mandatory, one per stream.
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | Stream Type | A media type GUID. |
| 40 | 16 | Error Correction Type | Audio Spread for audio-only streams; otherwise No Error Correction. |
| 56 | 8 | Time Offset | 100 ns units. Usually zero; added to timestamps. |
| 64 | 4 | Type-Specific Data Length | Bytes. |
| 68 | 4 | Error Correction Data Length | Bytes. |
| 72 | 2 | Flags | Bits 0 to 6 (007F): stream number, 1 to 127. Bits 7 to 14 reserved. Bit 15 (8000): encrypted content. |
| 74 | 4 | Reserved | Zero. |
| 78 | varies | Type-Specific Data | Format data, by stream type: a WAVEFORMATEX for audio, and a size-prefixed bitmap header for video. |
| … | varies | Error Correction Data | By error correction type. |
Header Extension Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | Reserved Field 1 | ABD3D211-A9BA-11CF-8EE6-00C00C205365. |
| 40 | 2 | Reserved Field 2 | 6. |
| 42 | 4 | Header Extension Data Size | Zero, or more than 24; equals the object size minus 46. |
| 46 | varies | Header Extension Data | Zero or more objects, listed on the GUIDs page. Their fields are not given here, except that the Extended Stream Properties flags are 01 reliable, 02 seekable, 04 no cleanpoints and 08 resend live cleanpoints. |
Codec List Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | Reserved | 86D15241-311D-11D0-A3A4-00A0C90348F6. |
| 40 | 4 | Codec Entries Count | Number of entries. |
| Each entry: | |||
| 2 | Type | 0001 video, 0002 audio, FFFF unknown. | |
| 2 | Codec Name Length | Unicode characters. | |
| varies | Codec Name | WCHAR. | |
| 2 | Codec Description Length | Unicode characters. | |
| varies | Codec Description | WCHAR. | |
| 2 | Codec Information Length | Bytes. | |
| varies | Codec Information | Opaque bytes. | |
Script Command Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | Reserved | 4B1ACBE3-100B-11D0-A39B-00A0C90348F6. |
| 40 | 2 | Commands Count | |
| 42 | 2 | Command Types Count | |
| Each command type: a 2-byte name length in characters, then a WCHAR name. Each command: Presentation Time (4 bytes, ms), Type Index (2, zero-based), Command Name Length (2), then the name. | |||
Marker Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | Reserved | 4CFEDB20-75F6-11CF-9C0F-00A0C90349CB. |
| 40 | 4 | Markers Count | |
| 44 | 2 | Reserved | Zero. |
| 46 | 2 | Name Length | Bytes. |
| 48 | varies | Name | WCHAR. |
| Each marker: Offset (8 bytes, into the Data Object), Presentation Time (8, 100 ns), Entry Length (2), Send Time (4, ms), Flags (4, zero), Description Length (4, bytes), Description (WCHAR), then padding. | |||
Bitrate Mutual Exclusion Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | Exclusion Type | Bitrate or unknown; see GUIDs. |
| 40 | 2 | Stream Numbers Count | |
| 42 | 2 × n | Stream Numbers | Valid 1 to 127. |
Error Correction Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 16 | Error Correction Type | No Error Correction or Audio Spread. |
| 40 | 4 | Error Correction Data Length | Bytes. |
| 44 | varies | Error Correction Data | For Audio Spread: Span (1), Virtual Packet Length (2), Virtual Chunk Length (2), Silence Data Length (2), Silence Data. |
Content Description Object
Five 2-byte lengths at offsets 24, 26, 28, 30 and 32, for Title, Author, Copyright, Description and Rating, in bytes, followed by the five strings, WCHAR.
Extended Content Description Object
| Offset | Size | Name | Meaning |
|---|---|---|---|
| 24 | 2 | Content Descriptors Count | |
| Each descriptor: Name Length (2 bytes), Name (WCHAR), Value Data Type (2), Value Length (2), Value. | |||
| Type | Value |
|---|---|
0000 | Unicode string |
0001 | Byte array |
0002 | BOOL (DWORD) |
0003 | DWORD |
0004 | QWORD |
0005 | WORD |
Stream Bitrate Properties Object
At offset 24, a 2-byte Bitrate Records Count, then for each record a 2-byte Flags (bits 0 to 6 the stream number, the rest reserved and zero) and a 4-byte Average Bitrate in bits per second.
Padding Object
The header followed by bytes to ignore.
Objects not detailed here
Content Branding, Content Encryption, Extended Content Encryption and Digital Signature have GUIDs but no public field tables that could be read for this reference. The same is true of the objects inside the Header Extension.