For a linear broadcast or live feed, your playlist must include "CUE-OUT" and "CUE-IN" points that represent the ad insertion splice points. For example:
#EXT-X-CUE-OUT:DURATION=<time>
#EXT-X-CUE-IN
The EXT-X-CUE-OUT
tag represents the splice start point and EXT-X-CUE-IN
represents the splice end point. EXT-X-CUE-OUT
should be terminated by EXT-X-CUE-IN
, indicating the end of the ad break. The ad server replaces the entire section between EXT-X-CUE-OUT
and EXT-X-CUE-IN
with video ad content.
The DURATION=<time>
is required, and is the approximate duration in seconds or floating point of the ad break (in other words, the difference in the time between the EXT-X-CUE-IN
and EXT-X-CUE-OUT
). Alternately, EXT-X-CUE-OUT:<time>
can be substituted for #EXT-X-CUE-OUT:DURATION=<time>
.
Splice start point and end point
#EXTINF:10,
http://media.example.com/fileSequence7796.ts
#EXTINF:6,
http://media.example.com/fileSequence7797.ts
#EXT-X-CUE-OUT:DURATION=30
#EXTINF:4,
http://media.example.com/fileSequence7798.ts
#EXTINF:10,
http://media.example.com/fileSequence7799.ts
#EXTINF:10,
http://media.example.com/fileSequence7800.ts
#EXTINF:6,
http://media.example.com/fileSequence7801.ts
#EXT-X-CUE-IN
#EXTINF:4,
http://media.example.com/fileSequence7802.ts
#EXTINF:10,
http://media.example.com/fileSequence7803.ts
#EXTINF:3,
http://media.example.com/fileSequence7804.ts
Content between OUT
and IN
is replaced by the DAI ad server with 30 seconds of ad video content
#EXTINF:10,
http://media.example.com/fileSequence7796.ts
#EXTINF:6,
http://media.example.com/fileSequence7797.ts
#EXT-X-CUE-OUT:DURATION=30
#EXTINF:10,
http://ads.example.com/fileSequence0001.ts
#EXTINF:10,
http://ads.example.com/fileSequence0002.ts
#EXTINF:10,
http://ads.example.com/fileSequence0003.ts
#EXT-X-CUE-IN
#EXTINF:4,
http://media.example.com/fileSequence7802.ts
#EXTINF:10,
http://media.example.com/fileSequence7803.ts
#EXTINF:3,
http://media.example.com/fileSequence7804.ts
Shorten an ad break
To end an ad break early, the encoder should send in a "CUE-IN" in the stream to indicate that the DAI streams should immediately end the ad break and begin showing the raw content again.
Note that, if an ad break ends early, the Stream Activity Monitor still reflects the original "Ad break duration", "Filled duration", and "Served duration" values.
Create an additional ad break
While there is no way to make an ad break longer while the ad break is playing to users, an encoder may send an additional a "CUE-OUT" in the stream immediately after the previous ad break's "CUE-IN" to create an additional ad break with freshly decisioned ads.
Fill remaining ad break space
If there are no ads to show or additional space to fill, the user sees either slate content or the underlying content, depending on the ad break settings chosen when the live stream was configured in Ad Manager.
Supported ad markers for live streams
The following markers are supported for ad insertion on live stream content:
These markup types are generated by several encoding solutions, including AWS Elemental.
The format is as follows:
CUE-OUT
#EXT-X-CUE-OUT:DURATION=10.50,K=V
#EXT-X-CUE-OUT:10.50,K=V
BREAKID
as a key-value in the CUE-OUT.
CUE-IN
#EXT-X-CUE-IN
CUE-OUT
#EXT-X-CUE:ID=31264,TYPE="SpliceOut",DURATION=30.00,TIME=77892728.264567
CUE-IN
These markups do not have an explicit CUE-IN
indicator. Instead, they mark every segment after the CUE-OUT
with the following:
#EXT-X-CUE:ID=31264,TYPE="SpliceOut",DURATION=30.00,TIME=77892728.264567,ELAPSED=5.00
This indicates the placement of a segment inside of an ad break. A CUE-IN
marker is calculated using the value of the ELAPSED
attribute along with the duration of segment to indicate the last segment of the break.
CUE-OUT
#EXT-X-DATERANGE:ID="splice-80f",PLANNED-DURATION=90.5,START-DATE="2017-03-24T13:46:04Z",SCTE35-OUT=0xFC301B00000000000000FFF00A05000001027FDF000000
The value of the PLANNED-DURATION
attribute is used as the expected ad break duration.
CUE-IN
#EXT-X-DATERANGE:ID="splice-7ef",START-DATE="2017-03-24T13:38:04Z",SCTE35-IN=0xFC301B00000000000000FFF00A05000000FF7F5F0000000000007B7BA160
SCTE35 Splice In and Out indicators can be specified via time signals in HLS tags. The SCTE information is available in binary format and needs to be decoded in order to determine the type of signal being sent.
CUE-OUT
#EXT-OATCLS-SCTE35:/DAlAAAAAAAAAP/wFAUAAA+if+/+INAJ0P4AKTLgAAAAAAAA9UTkTA==
CUE-IN
#EXT-OATCLS-SCTE35:/DAgAAAAAAAAAP/wDwUAAAPvf0//ahTGjwAAAAAAALda4HI=
SCTE-35 binary (base64 encoded) data has to be decoded and parsed in order to determine if it contains valid CUE-OUT/CUE-IN, along with any break targeting information.
For example, the following binary data contains a valid CUE-OUT signal:
CUE-OUT
/DAsAAAAAyiYAP/wBQb/PVbrDQAWAhRDVUVJB48zWH//AAEuGvsAACIAAdRJqiI=
Once decoded, the message contains the following fields:
splice_command_type
set to a value of 6 indicates this is a time signalsegmentation_type_id
indicates the type of time signal
The following segmentation_type_id
value is recognized as a valid CUE-OUT time signal:
34
: Break Start
The following segmentation_type_id
value (when splice_command_type = 6
) is recognized as a valid CUE-IN time signal:
35
: Break End
For example, the following binary data contains a valid CUE-IN signal:
CUE-IN
/DAnAAAAAyiYAP/wBQb/PX1ezQARAg9DVUVJB48zWH+/AAAjAAGwzKWt
SCTE-35 binary (base64 encoded) data has to be decoded and parsed in order to determine if it contains valid CUE-OUT/CUE-IN, along with any break targeting information.
For example, the following binary data contains a valid CUE-OUT signal:
CUE-OUT
/DAxAAAAAAAAAP/wBQb//ciI8QAbAhlDVUVJXQk9EX/fAAEuK3sBBUMxNDY0MAEBpOBiAg==
Once decoded, the message contains the following fields:
splice_command_type
set to a value of 6 indicates this is a time signalsegmentation_type_id
indicates the type of time signal
The following segmentation_type_id
value is recognized as a valid CUE-OUT time signal:
48
: Provider Advertisement Start
The following segmentation_type_id
value (when splice_command_type = 6
) is recognized as a valid CUE-IN time signal:
49
: Provider Advertisement End
For example, the following binary data contains a valid CUE-IN signal:
CUE-IN
/DAsAAAAAAAAAP/wBQb//e78sQAWAhRDVUVJXQk9EX+fAQVDMTQ2NDEBAaKNu/4=
SCTE-35 binary (base64 encoded) data has to be decoded and parsed in order to determine if it contains valid CUE-OUT/CUE-IN, along with any break targeting information.
For example, the following binary data contains a valid CUE-OUT signal:
CUE-OUT
/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==
Once decoded, the message contains the following fields:
splice_command_type
set to a value of 6 indicates this is a time signalsegmentation_type_id
indicates the type of time signal
The following segmentation_type_id
value is recognized as a valid CUE-OUT time signal:
52
: Provider Placement Opportunity Start
The following segmentation_type_id
value (when splice_command_type = 6
) is recognized as a valid CUE-IN time signal:
53
: Provider Placement Opportunity End
For example, the following binary data contains a valid CUE-IN signal:
CUE-IN
/DAvAAAAAAAA///wBQb+cuN0EAAZAhdDVUVJSAAAjn+PCAgAAAAALKChijUCALdPwUA=
Macros for SCTE-35 markup
If your feed includes EXT-OATCLS-SCTE35
, or EXT-X-DATERANGE
markup, the metadata is automatically extracted and made available through custom key-values. You need to set up the custom key-values, and insert them as macros when you generate ad tags.
When you set up the new custom key-values for the SCTE-35 fields, use a custom key (for example, "scte35") and set the value to the macro(s) that correspond to which type of field is available in your feed:
Macro | Description |
---|---|
%%SPLICE_INSERT_EVENT_ID%% |
Unsigned integers in the SCTE35 message, are converted to strings as decimal numbers. |
%%SPLICE_INSERT_UPID%% |
|
%%TIME_SIGNAL_EVENT_ID%% |
|
%%TIME_SIGNAL_UPID%% |
Rendered as lowercase hexadecimal, with no 0x prefix. |
%%TIME_SIGNAL_UPID_RAW%% |
Inserts raw bytes from the SCTE message without hexadecimal conversion (the initial string must be a valid UTF-8 encoded string). |
%%AFMM_CBC%% |
Extracts the commercial break code from the splice info (this is a requirement for the French AF2M specification). |