Program and System Information Protocol
The Program and System Information Protocol (PSIP) is a metadata standard defined by the Advanced Television Systems Committee (ATSC) for embedding system information (SI) and program guide (PG) data within MPEG-2 transport streams used in digital television broadcasting.[1] Developed to enable efficient navigation, channel selection, and program scheduling in ATSC systems, PSIP supports high-definition television (HDTV), standard-definition television (SDTV), data broadcasting, and advanced features such as directed channel changes and time-shifted viewing.[1] PSIP operates as a companion to the ATSC A/53 Digital Television Standard, providing essential signaling and descriptors that enhance video and audio delivery without altering the core modulation or compression frameworks.[1] It structures data into a collection of tables transmitted via private sections in the transport stream, using a base packet identifier (PID) of 0x1FFB and adhering to ISO/IEC 13818-1 (MPEG-2 Systems) specifications for compatibility.[1] The protocol's design allows broadcasters to independently manage service information for their own channels while supporting multi-channel multiplexing within a typical 19 Mbps throughput per 6 MHz terrestrial channel, enabling 3–4 simultaneous digital services.[1] At its core, PSIP includes mandatory tables such as the System Time Table (STT) for UTC-synchronized time and daylight saving adjustments, the Master Guide Table (MGT) for indexing all other tables, and virtual channel tables—either the Terrestrial Virtual Channel Table (TVCT) for over-the-air broadcasts or the Cable Virtual Channel Table (CVCT) for cable systems—which define channel numbers, names, and service types.[1] The Event Information Table (EIT) series, with the first four instances required for terrestrial use, schedules program events in 3-hour intervals up to 16 days ahead, including titles, ratings via the optional Rating Region Table (RRT), and extended descriptions through the Extended Text Table (ETT).[1] Optional tables like the Directed Channel Change Table (DCCT) and DCC Selection Code Table (DCCSCT) facilitate automated channel switching based on user preferences or genres.[1] Transmission requirements ensure reliable delivery: core tables cycle frequently (e.g., MGT every 150 ms, STT every second) at data rates capped at 250 kbps per stream, with buffering models to prevent overflow in receivers.[1] Mandated by the U.S. Federal Communications Commission (FCC) under 47 CFR §73.682 for broadcasters and §76.640 for cable operators since 2006, PSIP has been integral to digital TV transitions, with its current revision (A/65:2013) approved on August 7, 2013, incorporating amendments for enhanced text compression and cable-specific applications.[1]Overview
Definition and Purpose
The Program and System Information Protocol (PSIP) is a standard protocol consisting of a set of data tables defined in the ATSC A/65 specification, designed for transmitting system and programming information within MPEG-2 transport streams used in digital television broadcasts, including 8-VSB modulated terrestrial and QAM modulated cable systems.[1] It serves as a digital framework for delivering metadata that describes virtual channels, program schedules, and system parameters to enable proper receiver operation in ATSC systems.[1] The primary purpose of PSIP is to allow digital television receivers to identify and tune to broadcast channels, decode associated signals, and generate on-screen program guides that include essential details such as program titles, descriptions, content ratings, and audio/video attributes.[1] By providing this structured information, PSIP facilitates seamless navigation and content selection for viewers, ensuring that devices can map physical transport streams to logical virtual channels and synchronize with broadcast timing.[1] PSIP enhances the overall user experience in digital broadcasting through support for electronic program guides (EPGs), which offer intuitive access to scheduling and metadata, while also accommodating multiple services within a single 6 MHz channel, such as high-definition video, standard-definition streams, and ancillary data feeds.[1] It further promotes backward compatibility during the transition from analog to digital television by integrating identifiers from legacy NTSC signals, thereby bridging older and newer broadcast environments.[1] In particular, PSIP replaces analog vertical blanking interval (VBI) data services, including Extended Data Services (XDS) for program identification and closed captions for accessibility, with equivalent digital mechanisms that improve reliability and functionality.[1]Key Features
The Program and System Information Protocol (PSIP) enables advanced functionality in digital television broadcasting by providing structured metadata that supports multiple program streams within a single physical transmission channel, allowing each stream to carry independent descriptors for tailored content delivery.[1] This capability facilitates the organization of diverse services, such as high-definition and standard-definition channels, under one physical channel while maintaining unique identifiers like source_id and event_id for each.[1] PSIP incorporates specialized descriptors to enhance viewer experience and accessibility, including content advisory ratings modeled after MPAA guidelines through the content_advisory_descriptor and Rating Region Table, which specify rating values for parental controls.[1] It also supports audio formats such as AC-3 via the AC-3_audio_stream_descriptor and service_location_descriptor, ensuring compatibility with multichannel audio standards.[1] Additionally, closed captioning is addressed through the caption_service_descriptor for CEA-708 services and related descriptors that detail decoding parameters, promoting inclusivity for hearing-impaired audiences.[1] Designed for longevity, PSIP includes mechanisms for future extensibility, such as reserved descriptor tags (0x00–0x3F) and conditional access flags, which allow integration of new features without disrupting existing implementations.[1] A notable aspect is its handling of event names, supporting both short names (limited to 7 characters or 7×16 bits in UTF-16) in the Virtual Channel Table and longer descriptions via Extended Text Tables encoded in UTF-8, enabling international character support for global program guides.[1]History and Development
Origins in ATSC
The Program and System Information Protocol (PSIP) was developed in the late 1990s as a core element of the Advanced Television Systems Committee's (ATSC) efforts to facilitate the transition from the analog National Television System Committee (NTSC) standards to digital television broadcasting in North America.[1] This work aligned with broader ATSC initiatives to establish a comprehensive digital framework, including the adoption of the ATSC A/53 standard in 1995, which laid the groundwork for PSIP's integration into digital transport streams.[1] A primary motivation for PSIP's creation was the need to efficiently carry program metadata and service information within digital streams, enabling features such as virtual channels that allowed multiple services to share a single 6 MHz channel without disrupting viewer familiarity.[1] Unlike analog NTSC broadcasts, which relied on the limited capacity of the vertical blanking interval (VBI) for ancillary data like closed captions, PSIP addressed these constraints by embedding richer, more reliable information directly into the MPEG-2 transport stream, supporting enhanced navigation and program guides.[2] This shift was essential for the digital transition, as it provided broadcasters with tools to deliver consistent service descriptions across terrestrial and cable environments.[1] PSIP was approved by the ATSC on December 23, 1997, with use on cable systems balloted and approved by the Society of Cable Telecommunications Engineers (SCTE) Digital Video Subcommittee in 1998.[1] These early efforts emphasized the protocol's role in standardizing data structures for event and system information, ensuring interoperability amid the evolving digital ecosystem.[3] Ultimately, PSIP emerged directly from ATSC's collaborative efforts to maintain seamless channel numbering after the digital TV rollout, preserving the major channel numbers (2–69) associated with legacy NTSC signals while introducing minor channels for additional digital services.[1] This design choice facilitated a smooth viewer experience during the simulcast period, where analog and digital signals coexisted, and supported the long-term goal of a fully digital broadcast infrastructure.[4]Standardization Process
The Program and System Information Protocol (PSIP) was initially adopted as part of the ATSC A/65 standard, with the initial version approved on December 23, 1997, and Revision A published on May 31, 2000, establishing the foundational framework for PSIP in digital television broadcasting.[1] Subsequent revisions included B on April 1, 2002; C on January 2, 2006; an update on April 14, 2009; and the current edition, A/65:2013, approved on August 7, 2013. This adoption aligned PSIP with the broader ATSC digital TV standards, enabling consistent signaling of program and system data across terrestrial and cable environments. In 2004, following the 2003 Second Periodic Review of the digital television transition, the Federal Communications Commission (FCC) mandated PSIP implementation for ATSC tuners and broadcasters by amending 47 CFR §73.682(d), requiring compliance with ATSC A/65 to ensure reliable receiver navigation and virtual channel mapping.[5][6][7] Subsequent revisions refined PSIP to address evolving broadcast needs, with the A/65:2013 edition removing the E-VSB feature and incorporating updates from A/53, including enhanced descriptors for caption service details to support accessibility features.[1] These enhancements built on earlier amendments, like the 2002 addition of the Redistribution Control Descriptor, to better accommodate diverse programming metadata without disrupting core table structures. ATSC 3.0 (NextGen TV) introduces new signaling mechanisms separate from PSIP, with backward compatibility achieved through simulcasting rather than PSIP extensions. The ATSC and FCC play central roles in PSIP maintenance, with the ATSC developing and revising the A/65 standard through its Technology Group, while the FCC enforces mandatory carriage under 47 CFR § 73.682(d), requiring broadcasters to transmit PSIP in all digital signals to avoid enforcement actions such as fines up to $44,000 per violation for noncompliance.[7] Compliance testing follows ATSC Recommended Practice A/69, which provides guidelines for broadcasters to verify PSIP table integrity, version consistency, and bit rate allocation (e.g., 250,000 bps for base_PID), helping prevent issues like tuning failures during FCC audits.[8] PSIP incorporates version numbering to signal updates dynamically, using 5-bit version_number fields (modulo 32) in tables like the Master Guide Table (MGT) and Event Information Tables (EIT), which increment upon content changes to notify receivers of refreshes; the initial protocol_version field, set to 0 in the 1997 standard, reserves higher values for future enhancements while major and minor channel number fields in the Virtual Channel Table (VCT) enable precise virtual channel identification.[1] This mechanism, introduced with the 1997 adoption, supports seamless updates without full table retransmissions, with cycle times capped at 400 ms for VCT to maintain real-time responsiveness.[1]Technical Components
System Information Tables
The System Information Tables within the Program and System Information Protocol (PSIP) deliver essential static metadata for digital television systems, enabling receivers to identify channels, synchronize time, and locate other PSIP components within the MPEG-2 transport stream.[1] The Master Guide Table (MGT) serves as a directory for all PSIP tables except the System Time Table, listing their types, packet identifiers (PIDs), version numbers, and sizes to facilitate receiver parsing of the transport stream.[1] It is transmitted on PID 0x1FFB using a single section with table_id 0xC7, at a maximum cycle time of 150 ms to ensure rapid acquisition by receivers.[1] The MGT includes descriptors for additional table details and is rebuilt during transport stream remultiplexing to reflect the current PSIP configuration, with a typical size of approximately 39 bytes plus 22 bytes per Event Information Table.[1] The Terrestrial Virtual Channel Table (TVCT) defines the attributes of virtual channels in terrestrial broadcast environments, including major and minor channel numbers, short channel names, program numbers, service types such as audio, video, or data, source IDs, and transport stream IDs.[1] It supports up to 256 sections transmitted on PID 0x1FFB with table_id 0xC8, at a maximum cycle time of 400 ms, and mandates a service location descriptor for 8-VSB modulation signals to specify program association and map tables.[1] Additional descriptors in the TVCT convey modulation parameters and other channel-specific information, with a typical size of about 16 bytes plus 52 bytes per channel and 23 bytes per digital channel descriptor.[1] The Cable Virtual Channel Table (CVCT) defines the attributes of virtual channels in cable distribution environments, including major and minor channel numbers, short channel names, program numbers, service types such as audio, video, or data, source IDs, and access control bits.[1] It supports up to 256 sections transmitted on PID 0x1FFB with table_id 0xC9, at a maximum cycle time of 400 ms, and mandates a service location descriptor to specify program association and map tables.[1] Unlike the TVCT, the CVCT omits modulation parameters but includes cable-specific access control; its typical size is about 16 bytes plus 52 bytes per channel.[1] The System Time Table (STT) provides precise timing data for clock synchronization, including the current system time in GPS seconds since 00:00:00 UTC on January 6, 1980, the GPS-UTC offset, and daylight saving time status with transition details.[1] Transmitted as a single section on PID 0x1FFB with table_id 0xCD, it has a fixed version number of 0 and a maximum cycle time of 1 second, though it is typically repeated once per second to maintain accuracy, fitting within one transport stream packet at a data rate of about 160 bps.[1] All System Information Tables adhere to the MPEG-2 private section syntax, with the section_syntax_indicator set to '1', and incorporate a CRC-32 checksum at the end of each section for error detection and data integrity verification.[1]Event Information Tables
The Event Information Tables in the Program and System Information Protocol (PSIP) provide dynamic metadata for television events, enabling electronic program guides (EPGs) to display schedules, titles, and related details for virtual channels defined in the system information tables.[1] These tables focus on time-sensitive content, such as program start times and durations, distinct from static channel configurations.[1] The Event Information Table (EIT) carries core scheduling data for events on each virtual channel, including the event_id, start_time (in GPS seconds since January 6, 1980 UTC), length_in_seconds, title_text (encoded in Unicode UTF-16), and various descriptors like content advisory and closed captioning.[1] Each EIT instance covers a 3-hour period and can describe up to 128 events, ordered chronologically by start time, with events segmented across up to 256 sections per table (table_id 0xCB).[1] There are up to 128 EITs (EIT-0 through EIT-127), providing coverage extending to 16 days ahead, though only the first four (EIT-0 to EIT-3, spanning 12 hours) are mandatory for terrestrial broadcasts.[1] EIT-0, which details the current and next event, must be transmitted continuously with a recommended maximum cycle time of 500 ms to ensure rapid receiver acquisition during tuning.[9] In contrast, EIT-1 to EIT-3 have longer cycle times (up to 15 seconds for EIT-1 and 5 minutes for EIT-2/EIT-3), while optional future EITs (EIT-4 to EIT-127) support extended scheduling up to approximately two weeks.[9] The Extended Text Table (ETT) supplements the EIT by delivering longer textual descriptions for events or channels, linked via the event_id or source_id from the EIT or Virtual Channel Table (VCT).[1] With table_id 0xCC, each ETT consists of a single section (up to 4093 bytes) containing multiple compressed text strings, typically supporting up to 256 characters per message using Huffman compression for efficiency.[1] An ETT is optional and may be associated with zero or one EIT or VCT instance, transmitted on a PID specified in the Master Guide Table (MGT) at rates not exceeding 250,000 bps, allowing for detailed summaries, synopses, or credits beyond the EIT's concise title (up to 128 characters).[1] The Rating Region Table (RRT) specifies content rating systems tailored to geographical regions, referenced by the content_advisory_descriptor in the EIT to enable parental controls and viewer warnings.[1] Identified by table_id 0xCA and rating_region (as table_id_extension), it defines up to eight regions per event, each with a rating_region_name (≤32 characters) and multiple dimensions (e.g., dialogue, violence, language, up to nine dimensions with five graduated values each).[1] Rating descriptions are limited to 16 characters per dimension name and up to 150 characters per value, with sections capped at 1024 bytes; transmission occurs on PID 0x1FFB with a maximum cycle time of 60 seconds.[1] The RRT is mandatory when custom ratings are used in EIT descriptors, supporting diverse systems beyond predefined ones like the U.S. TV Parental Guidelines.[1]| Table | Table ID | Key Contents | Coverage/ Limits | Mandatory? | Transmission Notes |
|---|---|---|---|---|---|
| EIT | 0xCB | Event ID, start time, duration, title, descriptors | Up to 128 events per 3-hour instance; 16 days total | EIT-0 to EIT-3 required | EIT-0: ≤500 ms cycle; PID from MGT |
| ETT | 0xCC | Extended text messages (compressed) | Up to 256 characters per message; single section ≤4093 bytes | Optional | PID from MGT; ≤250 kbps |
| RRT | 0xCA | Region name, rating dimensions (e.g., violence, language), values | Up to 9 dimensions, 5 values each; ≤1024 bytes/section | If ratings used | PID 0x1FFB; ≤60 s cycle |
Encoding and Transmission
Data Structure and Formatting
The Program and System Information Protocol (PSIP) employs the MPEG-2 systems standard's private section syntax to organize its data into discrete tables, ensuring compatibility with digital television transport streams. Each PSIP table is formatted as a "long" private section, beginning with a header that includes fields such as the 8-bittable_id to identify the specific table type (e.g., 0xC7 for the Master Guide Table or 0xCE for Event Information Tables), a 12-bit section_length indicating the byte count from that field to the end of the section (with a maximum of 4093 bytes), an 8-bit section_number for segmentation, and an 8-bit last_section_number denoting the final section in a multi-section table.[1] The header also incorporates a 5-bit version_number for updates and an 8-bit protocol_version for extensibility, followed by the section body and concluding with a 32-bit CRC_32 polynomial for error detection, computed per ISO/IEC 13818-1 to verify data integrity.[1]
The body of each section consists of a loop of descriptors or table-specific entries, providing the core informational content such as channel mappings or event schedules. Descriptors follow a tag-length-value (TLV) structure, where an 8-bit descriptor_tag specifies the type (e.g., 0xA0 for the extended_channel_name_descriptor or 0x88 for the content_advisory_descriptor), an 8-bit descriptor_length defines the subsequent value field's size, and the value carries the payload, such as text strings or attribute codes.[1] This modular TLV format allows flexible extension of PSIP functionality without altering the core syntax, with examples including the service_location_descriptor that details stream types, packet identifiers, and language codes for associated services.[1]
For tables exceeding the maximum section size, such as the Virtual Channel Table (VCT) or Event Information Table (EIT), PSIP supports segmentation into up to 256 sections, indexed sequentially via the section_number field starting from 0, with the last_section_number signaling completion to receivers.[1] Within each section, loops iterate over entries like channels in the VCT (governed by an 8-bit num_channels_in_section field) or events in the EIT (via an 8-bit num_events_in_section), ensuring complete data reconstruction by compliant decoders. This approach maintains efficiency in bandwidth-constrained environments while accommodating variable data volumes, as seen in tables like the Master Guide Table (MGT) and EIT that reference other PSIP elements.[1]
PSIP text data adheres to ISO/IEC 6937 character encoding by default for fields like program titles and descriptions, providing a compact representation of Latin-based scripts suitable for broadcast constraints.[1] For Enhanced Text Tables (ETT), UTF-8 encoding is optionally supported within multiple_string_structure loops, allowing broader international character sets via 8-bit segments, each preceded by fields for language code (ISO 639-2, 24 bits), segment count (8 bits), and optional compression type (e.g., Huffman coding per Annex F of the standard).[1] This dual-encoding strategy balances legacy compatibility with modern multilingual needs, with UTF-16 also permitted in specific short_name fields of the VCT for 16-bit Unicode values padded to fixed lengths.[1]
To illustrate the MPEG-2 private section syntax used in PSIP, the following pseudocode represents a generic table structure:
This syntax ensures robust parsing, with bit-level precision (uimsbf for unsigned integers, bslbf for bit strings) as defined in the ATSC standard.[1]private_section_header { table_id 8 uimsbf // e.g., 0xC7 for MGT section_syntax_indicator 1 bslbf // Set to '1' private_indicator 1 bslbf // Set to '1' reserved 3 bslbf section_length 12 uimsbf // Bytes to CRC_32 inclusive table_id_extension 16 uimsbf reserved 2 bslbf version_number 5 uimsbf current_next_indicator 1 bslbf section_number 8 uimsbf last_section_number 8 uimsbf protocol_version 8 uimsbf } for (i = 0; i < N; i++) { // Loop for table body entries or descriptors // Table-specific fields (e.g., descriptors in TLV format) descriptor_tag 8 uimsbf // e.g., 0xA0 descriptor_length 8 uimsbf for (j = 0; j < descriptor_length; j++) { descriptor_bytes[j] 8 bslbf } } CRC_32 32 rpchofprivate_section_header { table_id 8 uimsbf // e.g., 0xC7 for MGT section_syntax_indicator 1 bslbf // Set to '1' private_indicator 1 bslbf // Set to '1' reserved 3 bslbf section_length 12 uimsbf // Bytes to CRC_32 inclusive table_id_extension 16 uimsbf reserved 2 bslbf version_number 5 uimsbf current_next_indicator 1 bslbf section_number 8 uimsbf last_section_number 8 uimsbf protocol_version 8 uimsbf } for (i = 0; i < N; i++) { // Loop for table body entries or descriptors // Table-specific fields (e.g., descriptors in TLV format) descriptor_tag 8 uimsbf // e.g., 0xA0 descriptor_length 8 uimsbf for (j = 0; j < descriptor_length; j++) { descriptor_bytes[j] 8 bslbf } } CRC_32 32 rpchof