proposal for CEA-608 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.


Basic Premise:

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-608 and 708*.

*For CEA-708 captions see RP-NDI-CC708-2018


The objectives are to allow the following scenarios:

- Capture of SDI into NDI retaining CEA-608 metadata

- Outgest of NDI as SDI re-inserting CEA-608 metadata

- Delivery of NDI including CEA-608 metadata from NLE Systems which can edit Closed captions.

- Parsing of NDI CEA-608 metadata by software such as NDI Monitors which may wish to display captions


The CEA-608 Standard is non-trivial and as such, this proposal should not compromise the scope of CEA-608 or get involved in conversion of the fundamental data structures. As such the primary idea is to allow raw CEA-608 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-608 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-608 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 NDI Closed caption data consists of the type 2 ANC ADF Packet which contains the CEA 608 CDP packet. The data is base64 encoded and enclosed in an XML tag labelled <C608>.  The <C608> 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-608 captions regardless of the complexity or content.


Whilst it might be attractive to deconstruct the CEA608 data to be carried by NDI in a more human readable format this would entail considerable technical knowledge to deconstruct, then reconstruct the content, and would make this proposal difficult to implement by developers with limited experience of CEA-608 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.


Note: it is common practice for C608 data to be carried within the newer C708 VANC structure. For that situation- the C708 protocol should be used.

This proposal is specifically for situations where the discrete C608 data is contained in a dedicated VANC line.



Example :

ndi_video_frame.p_metadata =

<C608 line="21">




This represents the VANC ADF  data from line 21 of an incoming 10-bit SDI signal which carries discrete C608 closed captions.  The data block starts with the the ADF header 0x000 0x3FF 0x3FF and includes the C608 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.


If you have any questions, or you would like to engage Sienna for NDI Consultancy or Custom Development, please contact info @ sienna.tv