CEA-608 Closed Captions in MPEG-2 VOB User Data
Closed captions adhering to the CEA-608 standard are embedded into DVD VOB files directly within the MPEG-2 video elementary stream rather than existing as separate subtitle streams. By utilizing the MPEG-2 "User Data" start codes found immediately after picture headers, broadcast and DVD authoring systems carry these legacy Line 21 byte pairs frame-by-frame. This article details the specific structural layers, identifiers, and syntax required to encapsulate, synchronize, and extract CEA-608 caption data inside MPEG-2 VOB containers.
MPEG-2 Hierarchy and Placement
A VOB (Video Object) file is an MPEG-2 Program Stream containing
multiplexed audio, video, and private streams. Unlike DVD subpictures,
which exist in Private Stream 1 (0xBD), CEA-608 captions
are embedded inside the MPEG-2 Video Elementary Stream
(0xE0).
Within the video stream, MPEG-2 permits arbitrary metadata via the User Data packet, marked by the 32-bit start code:
0x00 0x00 0x01 0xB2
While User Data can theoretically appear after Sequence, Group of Pictures (GOP), or Picture headers, CEA-608 captions are almost exclusively placed immediately after a Picture Coding Extension header. This frame-level placement ensures that the caption data remains strictly synchronized with the specific video field or frame being rendered.
Container Signatures: ATSC A/53 vs. DVD-Video Format
Once the 0x000001B2 start code is declared, a
proprietary or standardized identifier follows to signal what type of
data the packet contains. In VOB files, two primary encapsulation
conventions exist:
- ATSC A/53 Specification: Originally designed for
North American digital television broadcast, this format is also widely
found in authored VOBs. It is identified by the 4-byte ASCII string
"GA94"(0x47 0x41 0x39 0x34). - DVD-Video Specification: Standardized specifically
for commercial DVDs, this format uses an authoring header commonly
prefixed by the 2-byte ASCII marker
"CC"(0x43 0x43) or a custom 4-byte registered format identifier.
ATSC A/53 Payload Structure
When the "GA94" identifier is used, the data structure
inside the user data payload proceeds as follows:
- Identifier:
0x47413934(GA94) - User Data Type Code: 1 byte, set to
0x03to signify closed caption data. - Caption Flags and Count: 1 byte containing:
- 1-bit reserved flag.
- 1-bit
process_cc_data_flag. - 1-bit zero bit.
- 5-bit
cc_countvalue, indicating the number of 3-byte caption constructs that follow.
- Reserved Byte: Usually
0xFF. - Caption Constructs (3 bytes per construct):
- Byte 1 (Marker / Field Indicator): 5 bits of fixed
marker bits (
11111), 1 bit forcc_valid(validity flag), and 2 bits representing the field (00for Field 1,01for Field 2). - Byte 2 (cc_data_1): First CEA-608 data byte, including the odd parity bit.
- Byte 3 (cc_data_2): Second CEA-608 data byte, including the odd parity bit.
- Byte 1 (Marker / Field Indicator): 5 bits of fixed
marker bits (
DVD-Video Native CC Structure
When using the native DVD format (0x4343), the layout is
more compact:
- Identifier:
0x43 0x43 - Header Structure: 1 byte indicating field presence
flags, often
0x01or0x02designating whether Field 1, Field 2, or both are carried. - Payload Length: A byte indicating the number of caption pairs present.
- Line 21 Bytes: The raw 2-byte pairs containing the parity bit and 7-bit character/control data for the designated field.
Processing and Display
Each CEA-608 construct conveys two bytes per field, matching the original 29.97 fps analog NTSC Line 21 transmission rate. Field 1 carries CC1 (primary dialogue) and CC2, while Field 2 carries CC3 (secondary language), CC4, and extended data services (XDS).
To extract and display the captions, a decoder demultiplexes the VOB
into its elementary video stream, scans the bitstream for
0x000001B2 directly following picture headers, verifies the
caption identifier (GA94 or CC), strips the
parity bit from the 2-byte payloads, and sends the characters to the
on-screen display (OSD) buffer.