How IFO Files Track Offsets Across Split VOB Files
This article explains how DVD Information (IFO) files manage navigation and sector addressing across multi-gigabyte video streams that are broken into 1 GB VOB files. Because the DVD-Video standard enforces a strict file size limit for filesystem compatibility, the system relies on a continuous logical sector addressing model. Rather than tracking each physical file separately, the IFO file treats the entire collection of VOB files in a Title Set as a single contiguous stream, allowing DVD players to seamlessly resolve offsets across file boundaries.
The 1 GB Split Constraint
The DVD-Video specification mandates that no single Video Object (VOB) file can exceed 1 GiB (1,073,741,824 bytes, or roughly 524,288 DVD sectors at 2,048 bytes per sector). This limitation ensures compatibility with older file systems, such as UDF 1.02 and ISO 9660, which struggle with files larger than 1 GB or 2 GB.
When a Video Title Set (VTS) requires more storage than 1 GB, it is
divided into a sequence of sequentially numbered files:
VTS_xx_1.VOB, VTS_xx_2.VOB, up to
VTS_xx_9.VOB.
Virtual Contiguous Addressing
IFO files do not contain references to individual filenames or file boundaries. Instead, the IFO file abstracts all split VOB files associated with a given Title Set into a single continuous logical address space.
- Logical Block Numbering (LBN): All offsets in the IFO are expressed as 2,048-byte logical sectors.
- Zero-Based Offsets: Sector
0begins at byte0of the first file in the set (VTS_xx_1.VOB). Sector1is byte2048, and so on. - Seamless Continuation: The first sector of
VTS_xx_2.VOBis treated simply as sectorN + 1, whereNis the final sector ofVTS_xx_1.VOB.
Because the address space is treated as one unbroken block, an IFO
entry never needs to indicate which specific .VOB file
contains a given frame.
Key IFO Tables Managing Offsets
The IFO file uses several lookup tables to point to specific locations within this contiguous space:
- VOBU Address Map (
VTS_VOBU_ADMAP): A list of starting sector addresses for every Video Object Unit (VOBU) in the title set. Each VOBU begins with a Navigation Pack (NV_PCK) and typically contains 0.4 to 1.0 seconds of video. - Cell Address Table (
VTS_C_ADT): Defines the exact start and end sectors for every cell (the basic playback unit) across the virtual VOB stream. - Program Chain Information (
VTS_PGCI): Directs the playback sequence by chaining cells together using the sector positions established in the cell and VOBU tables.
How the Player Calculates Physical File Locations
When a playback engine reads an offset from an IFO table, it converts that logical address into a target file and a byte offset within that file.
- Sector Accumulation: At disc mount, the player
queries the file system to determine the exact sector count of each file
in the sequence (
VTS_xx_1.VOB,VTS_xx_2.VOB, etc.). - Threshold Comparison: If an IFO instruction
requests sector
600,000, andVTS_xx_1.VOBcontains512,000sectors, the player detects that the target exceeds the bounds of the first file. - Local Offset Calculation: The player subtracts the cumulative total of previous files from the target sector: \[\text{Local Sector} = 600,000 - 512,000 = 88,000\]
- Physical Read: The player opens
VTS_xx_2.VOB, navigates to local sector88,000(byte offset \(88,000 \times 2,048\)), and begins reading data.
Synchronizing with Internal VOB Navigation
In addition to the top-level IFO tables, the VOB files contain embedded navigation metadata that complements the IFO's global map:
- Data Search Information (DSI): Located inside each
VOBU's
NV_PCK, the DSI contains relative sector pointers (forward and backward) to adjacent VOBUs, allowing smooth fast-forward and rewind functions. - Relative vs. Absolute Offsets: While the IFO
provides the absolute entry points into the title, internal DSI offsets
are typically signed integers relative to the current
NV_PCK. If a trick-play jump crosses a split-file boundary, the player applies the same cumulative file size math to maintain unbroken playback.