proposal for CEA-708 closed caption support in NDI
This page contains a technical proposal which is not currently a published or formal standard. If you have comments or feedback on the content of this proposal PLEASE contact us with your contribution.
The NDI IP Video protocol SDK does not currently offer any guidance on provision for closed caption metadata.
However, NDI has multiple real time metadata mechanisms which could easily carry closed caption data. This document is an attempt to standardise support for closed captions in order to prevent different implementations by each vendor by way of a recommended practice technical note.
The focus is based on the needs of US TV where closed captions are often mandated, and clear standards in SDI video exist in the form of CEA-708 and 608*.
*For CEA-608 captions see RP-NDI-CC608-2020
The objectives are to allow the following scenarios:
- Capture of SDI into NDI retaining CEA-708 metadata
- Outgest of NDI as SDI re-inserting CEA-708 metadata
- Delivery of NDI including CEA-708 metadata from NLE Systems which can edit Closed captions.
- Parsing of NDI CEA-708 metadata by software such as NDI Monitors which may wish to display captions
The CEA-708 Standard is pretty complex and as such, this proposal should not compromise the scope of CEA-708 or get involved in conversion of the fundamental data structures. As such the primary idea is to allow raw CEA-708 data to be carried alongside NDI video frames.
The obvious target for this is the per-frame metadata stored in every NDI video frame - since this corresponds nicely with the mechanisms used to store CEA-708 metadata in the VANC area of a traditional SDI video frame. Here we reference SMPTE 291M and SMPTE 334M-2000 which define the ADF VANC mechanism in SDI video which carries real time metadata used for CEA-708 and other ancilliary data.
According to SMPTE 334M - Each VANC data packet follows the format defined in SMPTE 291M for a type 2 ANC packet. It consists of the ancillary data flag (ADF), the data ID (DID), the secondary data ID (SDID), the data count (DC), the user data words (UDW), and the checksum (CS). The UDW consists of the data payload plus forward error correction overhead. The data payload of the closed captioning (EIA-708-B) packet is the caption distribution packet (CDP) defined in EIA-708-B.
The NDI Closed caption data consists of the type 2 ANC ADF Packet which contains the CEA 708 CDP packet. The data is base64 encoded and enclosed in an XML tag labelled <C708>. The <C708> tag also contains an XML Attribute which defines the SDI video line where the metadata came from (or should be inserted). It is important to note that the type 2 ANC ADF Packet is only available in 10-bit SDI systems, and the raw 10 bit data is in a packed format. This packed data format is preserved through the base64 encoding via NDI. The overall objective is to allow for transparent capture and restoration of CEA-708 captions regardless of the complexity or content.
Note: It is common practice for broadcasters to use the embedded C608 bytes within the C708 structure to carry legacy captions. In some cases there may be no C708 data and only the C608 content. This is different to dedicated C608 VANC data.
Whilst it might be attractive to deconstruct the CEA708 data to be carried by NDI in a more human readable format this would entail considerable technical knowledge to deconstruct, then reconstruct the CDP content, and would make this proposal difficult to implement by developers with limited experience of CEA-708 data formats. There is scope for phase II of this project which would cover parsing of the per frame CC metadata into longer form completed subtitle runs which would then be stored in an XML construct within the real time (non frame based) NDI Metadata stream. For more information see RPI-NDI-UCF-2020 which defines the universal caption format, attempting to normalise various caption standards into one human readable form.
This represents the VANC ADF CDP data from line 10 of an incoming 10-bit SDI signal which carries C708 closed captions. The data block starts with the the ADF header 0x000 0x3FF 0x3FF and includes the entire C708 block as shown in the table below. The raw data is in packed 10-bit format and this is preserved when the source data block is base64 encoded.
Note: the SDI video is v210 format. The C708 data should be padded to a 32-bit boundary before base64 encoding
If you have any questions, or you would like to engage Sienna for NDI Consultancy or Custom Development, please contact info @ sienna.tv