Table of Contents



The structure of Ad Marker in the video stream



There are two different types of Ad Markers : CUE/CUE-OUT/CUE-IN and SCTE35


The values provided within your HLS markers can be defined as follows:

ElementTypeNotes
<duration>(float)(required)the length of the ad break in seconds
<elapsed>(float)(required)the amount of time in seconds since the start of the ad break
<id>(string)(optional)the id for the ad break


CUE/CUE-OUT/CUE-IN


#EXT-X-CUE

#EXT-X-CUE:Duration=60,ID=<id>
...
...
...
#EXT-X-CUE-SPAN:TIMEFROMSIGNAL=30,ID=<id>
...
...
...
#EXT-X-CUE-IN:ID=<id>


#EXT-X-CUE-OUT

#EXT-X-CUE-OUT:Duration=60,ID=<id>
...
...
...
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=60,ID=<id>
...
...
...
#EXT-X-CUE-IN:ID=<id>

Note: Decimal is optional.


#EXT-X-CUE-OUT with no ID

#EXT-X-CUE-OUT:Duration=60
...
...
...
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=60
...
...
...
#EXT-X-CUE-IN

Note: Decimal is optional.


SCTE35


#EXT-SCTE35

#EXT-SCTE35:TIME=<duration>,ID=<id>,CUE=<cue>
...
...
...
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=30,SCTE35=<cue>
...
...
...
#EXT-X-CUE-IN:ID=<id>




#EXT-SCTE35 with no ID

#EXT-SCTE35:TIME=<duration>,CUE=<cue>
...
...
...
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=30,SCTE35=<cue>
...
...
...
#EXT-X-CUE-IN

#EXT-OCTCLS-SCTE35

#EXT-OATCLS-SCTE35:<cue>
#EXT-X-CUE-OUT:<duration>
...
...
...
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=30,SCTE35=<cue>
...
...
...
#EXT-X-CUE-IN:ID=<cue>


Example)

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:219173
#EXTINF:2.00000,
test_1080p_219173.ts
#EXTINF:2.00000,
test_1080p_219174.ts
#EXTINF:3.23333,
test_1080p_219175.ts
#EXT-OATCLS-SCTE35:/DAlAAAAAAAAAP/wFAXwAAB1f+//MgKHtv4AG3dAAAEBAQAANATZmw==
#EXT-X-CUE-OUT:20.004
#EXTINF:2.76667,
test_1080p_219176.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.767,Duration=21,SCTE35=/DAlAAAAAAAAAP/wFAXwAAB1f+//MgKHtv4AG3dAAAEBAQAANATZmw==
#EXTINF:2.00000,
test_1080p_219177.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=4.767,Duration=21,SCTE35=/DAlAAAAAAAAAP/wFAXwAAB1f+//MgKHtv4AG3dAAAEBAQAANATZmw==
#EXTINF:2.00000,
test_1080p_219178.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=6.767,Duration=21,SCTE35=/DAlAAAAAAAAAP/wFAXwAAB1f+//MgKHtv4AG3dAAAEBAQAANATZmw==
#EXTINF:2.00000,
test_1080p_219179.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=8.767,Duration=21,SCTE35=/DAlAAAAAAAAAP/wFAXwAAB1f+//MgKHtv4AG3dAAAEBAQAANATZmw==
#EXTINF:2.00000,
test_1080p_219180.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=10.767,Duration=21,SCTE35=/DAlAAAAAAAAAP/wFAXwAAB1f+//MgKHtv4AG3dAAAEBAQAANATZmw==
#EXTINF:2.00000,
test_1080p_219181.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=12.767,Duration=21,SCTE35=/DAlAAAAAAAAAP/wFAXwAAB1f+//MgKHtv4AG3dAAAEBAQAANATZmw==
#EXTINF:2.00000,
test_1080p_219182.ts


#EXT-X-SCTE35

#EXT-X-SCTE35:DURATION=<duration>,ID=<id>,CUE=<cue>
...
...
...
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=30,SCTE35=<cue>
...
...
...
#EXT-X-CUE-IN:SCTE35=<cue>

#EXT-X-SCTE35 with no ID

#EXT-X-SCTE35:DURATION=<duration>,ID=<id>,CUE=<cue>
...
...
...
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=30,SCTE35=<cue>
...
...
...
#EXT-X-CUE-IN

EXAMPLES

To implement CUE-OUT and CUE-IN in m3u8 that commonly used in HLS or DASH, you can simple identify #EXT-X-CUE-OUT: <duration> to insert Ad, and you can close its period by adding #EXT-X-CUE-IN like below:

#EXTINF:12,
1080p_72020201006T075438_00073.ts
#EXTINF:12,
1080p_72020201006T075442_00074.ts
#EXTINF:12,
1080p_72020201006T075446_00075.ts
#EXTINF:1,
1080p_72020201006T075449_00076.ts
#EXT-X-CUE-OUT:10.00
#EXT-X-CUE-IN
#EXTINF:11,
1080p_72020201006T075450_00077.ts
#EXTINF:12,
1080p_72020201006T075453_00078.ts
#EXTINF:12,
1080p_72020201006T075457_00079.ts
#EXTINF:12,
1080p_72020201006T075501_00080.ts


Below example is another example of SCTE-35 Ad Marker that containing ad slates for 30 seconds.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:12
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.000,
file_60p_1_00001.ts
#EXT-OATCLS-SCTE35:/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXT-X-CUE-OUT:30.000
#EXTINF:2.000,
file_60p_1_00002.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXTINF:12.000,
file_60p_1_00003.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=14.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXTINF:12.000,
file_60p_1_00004.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=26.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXTINF:4.000,
file_60p_1_00005.ts
#EXT-OATCLS-SCTE35:/DAnAAAAAAAAAP/wBQb+ADbugAARAg9DVUVJAAAAAX+HCQA1AAA3v5+Q
#EXT-X-CUE-IN
#EXTINF:8.000,
file_60p_1_00006.ts
#EXTINF:12.000,
file_60p_1_00007.ts
#EXTINF:12.000,
file_60p_1_00008.ts
#EXTINF:3.000,
file_60p_1_00009.ts
#EXT-OATCLS-SCTE35:/DAnAAAAAAAAAP/wBQb+AGb/MAARAg9DVUVJAAAAAn+HCQA0AALMua1L
#EXT-X-CUE-OUT:30.000
#EXTINF:9.000,
file_60p_1_00010.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=9.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AGb/MAARAg9DVUVJAAAAAn+HCQA0AALMua1L
#EXTINF:12.000,
file_60p_1_00011.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=21.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AGb/MAARAg9DVUVJAAAAAn+HCQA0AALMua1L
#EXTINF:9.000,
file_60p_1_00012.ts
#EXT-OATCLS-SCTE35:/DAnAAAAAAAAAP/wBQb+AJAyEAARAg9DVUVJAAAAAn+HCQA1AABStd4A
#EXT-X-CUE-IN
#EXTINF:3.000,
file_60p_1_00013.ts
#EXTINF:12.000,
file_60p_1_00014.ts
#EXTINF:12.000,
file_60p_1_00015.ts
#EXTINF:3.000,
file_60p_1_00016.ts
#EXTINF:9.000,
file_60p_1_00017.ts
#EXTINF:12.000,
file_60p_1_00018.ts
#EXTINF:12.000,
file_60p_1_00019.ts
#EXTINF:12.000,
file_60p_1_00020.ts
#EXTINF:12.000,
file_60p_1_00021.ts
#EXTINF:12.000,
file_60p_1_00022.ts
#EXTINF:12.000,
file_60p_1_00023.ts
#EXTINF:10.067,
file_60p_1_00024.ts
#EXT-X-ENDLIST


#EXT-OATCLS-SCTE35

#EXT-OATCLS-SCTE35:/DAgAAAAAAAAAAAADwVAAADgf0+2E2yFgAAAAAAAJgnEsxH
#EXT-X-ASSET:CAID=0x0000000020FA6877
#EXT-X-CUE-OUT:101.115
...
...
... #EXT-X-CUE-OUT-CONT:ElapsedTime=10.1,Duration=101.115,SCTE35=/DAgAAAAAAA AAAAADwVAAADgf0+2E2yFgAAAAAAAJgnEsxH
...
...
...
#EXT-X-CUE-IN