Index objects come after the Data Object and help a player seek. They are optional, and each is a top-level object with the common 24-byte header (see every object). Offsets below start after that header, and numbers are little-endian. The index parameters in the header extension list what each index covers. Only the Simple Index layout was confirmed against a public parser; the other three are given from the ASF specification’s published structure and are unconfirmed here.
Simple Index Object
| Offset | Size | Field | Meaning |
|---|---|---|---|
| 0 | 16 | file ID | as in File Properties |
| 16 | 8 | index entry time interval | 100-nanosecond units between entries |
| 24 | 4 | maximum packet count | the most packets any entry refers to |
| 28 | 4 | index entries count | |
| 32 | 6 each | entries | a 4-byte packet number and a 2-byte packet count |
Index Object
| Offset | Size | Field | Meaning |
|---|---|---|---|
| 0 | 4 | index entry time interval | milliseconds |
| 4 | 2 | index specifiers count | |
| 6 | 4 | index blocks count | |
| 10 | 4 each | index specifiers | a 2-byte stream number and a 2-byte index type |
| … | varies | index blocks | as below |
Each index block:
| Size | Field | Meaning |
|---|---|---|
| 4 | index entry count | |
| 8 each | block positions | one per specifier: the byte offset of this block’s start |
| 4 each | index entries | one offset per specifier for each entry |
Media Object Index Object
The same layout as the Index Object, except that the first field is an index entry count interval (4 bytes), measured in media objects rather than time.
Timecode Index Object
| Offset | Size | Field | Meaning |
|---|---|---|---|
| 0 | 4 | reserved | |
| 4 | 2 | index specifiers count | |
| 6 | 4 | index blocks count | |
| 10 | 4 each | index specifiers | a 2-byte stream number and a 2-byte index type |
| … | varies | index blocks | as below |
Each index block:
| Size | Field | Meaning |
|---|---|---|
| 4 | index entry count | |
| 2 | timecode range | |
| 8 each | block positions | one per specifier |
| varies | index entries | for each entry, a 4-byte timecode and one 4-byte offset per specifier |