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:
Element | Type | Notes |
---|---|---|
<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