rfc-8331

RTP Payload for Society of Motion Picture and Television Engineers (SMPTE) ST 291-1 Ancillary Data

T. Edwards
date2018-02 streamIETF areaart wgpayload statusPROPOSED STANDARD pages20 canonicalhttps://www.rfc-editor.org/rfc/rfc8331 doi10.17487/RFC8331 errataview
This memo describes a Real-time Transport Protocol (RTP) payload format for the Society of Motion Picture and Television Engineers (SMPTE) ancillary space (ANC) data, as defined by SMPTE ST 291-1. SMPTE ANC data is generally used along with professional video formats to carry a range of ancillary data types, including time code, Closed Captioning, and the Active Format Description (AFD).

Extracted elements (30)

design-rationale §1

The Ancillary Data Flag (ADF) word is not carried in this RTP payload because ADF might be specified by the interconnecting digital video interface definition, and SMPTE ST 291-1 provides a default ADF otherwise.

rtp, realtime

design-rationale §1

The data model for this ANC data RTP payload is based on SMPTE ST 2038, which standardizes carriage of ANC data packets in an MPEG-2 Transport Stream, ensuring consistency across transport technologies.

rtp, realtime

design-rationale §2.1

The Horizontal_Offset field is kept at 12 bits to maintain easy conversion to/from SMPTE ST 2038, which also uses a 12-bit Horizontal_Offset field, even though some future formats might require larger values (handled by the 0xFFC special value).

rtp, realtime

interoperability-note §3.1

Data items in 'video/smpte291' can be very diverse; receivers might only be capable of interpreting a subset of the possible data items, and some implementations might care about the ANC data packet location in the SDI raster while others might not.

rtp, realtime

normative-requirement §2 SHOULD

ANC data packets with headers indicating a specific location within a field or frame SHOULD be sent in raster scan order, both in terms of packing within an RTP packet and transmission order of RTP packets.

rtp, realtime

normative-requirement §5.2 MUST

For declarative SDP, the configuration given by the SDP MUST be used when sending and/or receiving media in the session.

rtp, realtime

normative-requirement §2 MUST NOT

For interlaced video, RTP packets MUST NOT include ANC data packets from multiple fields, and all RTP packets belonging to the same field MUST have the same timestamp.

rtp, realtime

normative-requirement §2 MUST NOT

For progressive scan video, RTP packets MUST NOT include ANC data from multiple frames, and all RTP packets with ANC data belonging to the same frame MUST have the same timestamp.

rtp, realtime

normative-requirement §2.1 MUST

If the S bit (Data Stream Flag) is '1', the StreamNum field MUST carry identification of the source data stream number; numbered streams use stream number minus one, while unnumbered multi-stream interfaces use '0' for link A and '1' for link B.

rtp, realtime

normative-requirement §2.1 SHOULD

Receivers SHOULD ignore an ANC data packet with an F field value of 0b01, and SHOULD process any other ANC data packets with valid F field values present in the RTP payload.

rtp, realtime

normative-requirement §2 SHOULD

Senders SHOULD transmit available ANC data packets as soon as practical to reduce end-to-end latency, with one millisecond as a reasonable upper bound between packet availability and RTP payload emission.

rtp, realtime

normative-requirement §4 REQUIRED

The mapping of media type and parameters to SDP SHALL be done according to RFC 4855 Section 3; DID and SDID values SHALL be specified in hexadecimal with a '0x' prefix, and multiple DID_SDID parameters are separated by semicolons.

rtp, realtime

normative-requirement §3.1 REQUIRED

'Type 1' ANC data packets (which do not have SDIDs defined) SHALL be labeled with SDID=0x00 in the DID_SDID media type parameter.

rtp, realtime

normative-requirement §3.1 SHOULD

When an ANC data RTP stream is associated with an RTP video stream, the RTP timestamp rates SHOULD be the same; otherwise, a 90 kHz rate SHOULD be used.

rtp, realtime

protocol-element §2

The marker bit (M) set to '1' indicates the last ANC data RTP packet for a frame (progressive) or the last ANC data RTP packet for a field (interlaced).

rtp, realtime

protocol-element §3.1

The optional DID_SDID media type parameter signals that all ANC data packets of the stream are of specific type(s) identified by DID and SDID values; absence of DID_SDID means packet type can only be determined by direct inspection of the packet fields.

rtp, realtime

protocol-element §3.1

The optional VPID_Code media type parameter specifies the Video Payload ID code of the source SDI interface using the integer value derived from byte 1 of the VPID as defined in SMPTE ST 352, with bit 7 as MSB.

rtp, realtime

registry §6

IANA has registered the media type 'video/smpte291' in the IANA Media Types registry for use with this RTP payload format.

registry, rtp

security-consideration §7

Applications SHOULD use one or more appropriately strong security mechanisms as described in RFC 7201; responsibility for confidentiality, integrity, and source authenticity lies with the application, not the payload format.

security, rtp

security-consideration §7

Re-embedders inserting ANC data into SDI SHOULD validate Line_Number and Horizontal_Offset to ensure ANC data is inserted into a legal area of the output SDI video bit stream, to prevent downstream SDI systems from being confused by bad ANC data packets used for denial-of-service.

security, rtp

security-consideration §7

The Checksum_Word SHOULD be checked against each ANC data packet to ensure data has not been damaged in transit, though it is unlikely to provide integrity protection against directed attacks.

security, rtp

security-consideration §7

To avoid potential buffer overflow attacks, receivers SHOULD validate that ANC data packets in the RTP payload are of the appropriate length using the Data_Count field for the ANC data type specified by DID and SDID.

security, rtp

wire-format §2.1

ANC_Count is an 8-bit unsigned integer indicating the total number of ANC data packets in the RTP payload; a maximum of 255 per payload. ANC_Count of 0 signals no ANC data packets are present, and Length will also be 0 in that case.

rtp, realtime

wire-format §2.1

Each per-packet ANC data packet header contains: C (1 bit, color-difference vs. luma channel flag), Line_Number (11 bits, unsigned integer line number in network byte order), Horizontal_Offset (12 bits, offset from SAV in 10-bit words), S/Data Stream Flag (1 bit), and StreamNum (7 bits).

rtp, realtime

wire-format §2.1

Horizontal_Offset (12 bits) encodes offset from SAV in 10-bit words; special values: 0xFFF = no specific horizontal location, 0xFFE = HANC space, 0xFFD = between SAV and EAV markers, 0xFFC = offset too large for 12 bits.

rtp, realtime

wire-format §2.1

Line_Number has special values: 0x7FF = no specific line location, 0x7FE = any line in vertical blanking range, 0x7FD = line number too large for 11 bits. An ANC packet with Line_Number=0x7FF and Horizontal_Offset=0xFFF is carried without any specific location.

rtp, realtime

wire-format §2.1

The F field is 2 bits indicating the interlaced field: 0b00 = progressive or no field specified, 0b10 = first field, 0b11 = second field; 0b01 is not valid. A 22-bit reserved field of zeros follows F to ensure the first ANC data packet header starts 32-bit word-aligned.

rtp, realtime

wire-format §2.1

The per-packet ANC data fields are: DID (10 bits), SDID (10 bits, carries DBN for Type 1 packets), Data_Count (10 bits where lower 8 bits are user data word count, b8 is even parity, b9 is inverse of b8), User_Data_Words (variable 10-bit words), and Checksum_Word (10 bits, b8-b0 are checksum, b9 is inverse of b8).

rtp, realtime

wire-format §2.1

The RTP payload header begins with Extended Sequence Number (16 bits, high-order bits of a 32-bit sequence number in network byte order) followed by Length (16 bits, count of octets of the ANC data RTP payload starting from the first C bit, including word_align fields).

rtp, realtime

wire-format §2.1

word_align contains enough '0' bits to complete the last 32-bit word of each ANC data packet in the RTP payload; it is used even for the last ANC data packet, but SHALL NOT be used if ANC_Count is zero.

rtp, realtime