ID3 Tags

New in version 1.7.0.

Various metadata is available and inserted in the output streams (where applicable). For this we use the ID3 tag version 2.3.0 metadata container.

For HLS the metadata stream is added to the MPEG Transport Stream in the same way as audio and video according to Formatted Metadata as Timed Metadata in MPEG-2 Transport Streams.

The following ID3 tags may be inserted in the HTTP Live Streaming MPEG-2 Transport Streams and AAC/AC3 elementary streams.

APIC - Attached picture

When an image is listed in the manifest file it is included as an APIC in the audio-only MPEG-TS or Elementary Audio Stream segments.

Field Value
ID APIC
Text encoding UTF-8 encoded Unicode (0x03)
Picture type Movie/video screen capture (0x10)
Description ""
picture_data <binary data>

See also

The audio only with a still image m3u8.

PRIV - com.apple.streaming.transportStreamTimestamp

Each Elementary Audio Stream segment signals the timestamp of its first sample at the beginning of the segment. The payload is a 33-bit MPEG-2 Program Elementary Stream timestamp expressed as a big-endian 8-octet number, with the upper 31 bits set to zero.

Field Value
ID PRIV
Owner identifier "com.apple.streaming.transportStreamTimestamp"
Private data timestamp

PRIV - com.unified-streaming.sei_rbsp

The private data contains a supplemental enhancement information RBSP. A single sei_rbsp may contain one or more SEI messages. Note that no 'emulation prevention bytes' are present.

Field Value
ID PRIV
Owner identifier "com.unified-streaming.sei_rbsp"
Private data Supplemental Enhancement Information message

See 7.3.2.3 Supplemental enhancement information RBSP syntax in ISO/IEC 14496-10:2012 - Advanced Video Coding.

To include all the SEI messages use the option --hls.pass_sei when generating the server manifest file.

PRIV - com.unified-streaming.sps_rbsp

For each IDR access unit in a AVC stream, one or more sps_rbsp tags are inserted. The private data contains a sequence parameter set RBSP. Note that no 'emulation prevention bytes' are present.

Field Value
ID PRIV
Owner identifier "com.unified-streaming.sps_rbsp"
Private data Sequence Parameter Set

See 7.3.2.1 Sequence parameter set RBSP syntax in ISO/IEC 14496-10:2012 - Advanced Video Coding.

Adding ID3 tags to a stream (e.g., Nielsen markers)

ID3 tags may already be present in your source, or you can add them when setting up your stream. Adding them requires the following:

  • ID3 tags (v2.4) in binary format, with each tag stored in an individual file
  • A 'meta-macro-file' file that serves as a kind of playlist to associate each tag with a timestamp

Using these, 'mp4split' can create a fMP4 file that contains the ID3 tags as Timed Metadata at the specified timestamps.

The 'meta-macro-file' is a plain-text file with a '.meta' extension (the file is considered to be ASCII formatted unless a BOM header indicates otherwise). It contains an entry for each ID3 tag and each entry must specify the following:

  • A timestamp in seconds from '0' to instruct where to insert the ID3 tag
  • A reference that indicates that the metadata is of the 'id3' type
  • A file path pointing to the file that contains the ID3 tag

Each entry must be structured like this: '<time><space><type><space><file>'. The 'time' in second may be specified with a maximum of 6 digits accuracy and the decimal separator may be either a '.' (period) or a ',' (comma). The time needs to increase with every entry, while the ID3 tags should adhere to version 2.4 of the ID3 specification. The 'file' path may be relative to the meta-macro-file's location, or absolute.

All in all, a meta-macro-file (e.g., id3.meta) will look similar to this:

0 id3 file1.id3
2.5 id3 file2.id3
5 id3 file3.id3
7.5 id3 file4.id3
10 id3 file5.id3

Apple have an ID3 tag generator as part of their HTTP Live Streaming Tools available from their Apple Developer site

If you have your binary ID3 tags and meta-macro-file ready, you need to use 'mp4split' to create a fMP4 contained Timed Metadata track with the ID3 tags:

#!/bin/bash

mp4split -o id3-metadata.ismv id3.meta

You can then use this id3-metadata.ismv file as input alongside your fMP4 files that contain the media when creating the server manifest to set up your stream. Do note that to enable Timed Metadata you must include the --timed_metadata option:

#!/bin/bash

mp4split -o tears-of-steel.ism \
  tears-of-steel-aac-64k.isma \
  tears-of-steel-avc1-400k.ismv \
  tears-of-steel-avc1-750k.ismv \
  id3-metadata.ismv \
  --timed_metadata

The ID3 tracks will then be added to your stream in the DASH and HLS, as part of the media itself and signaled in the client manifests that Origin generates. For HLS TS the ID3 tags will be added to the media according to Formatted Metadata as Timed Metadata in MPEG-2 Transport Streams. For fMP4 HLS and DASH, the ID3 tags will be carried in fMP4's 'emsg' boxes.

Note

Before you can use this workflow for Nielsen markers, the markers need to be extracted from the original PCM signal and converted to ID3 tags. Nielsen provides a PCM-to-ID3 SDK that can be used to support this process.