Live Inputs
MPEG-DASH
Quick MPD compatibility check:
Check the following:
- MPD follows ISO/IEC 23009-1 - Part 8.4 - Live. A quick way to check it is to look at the URN in the MPD which should be "urn:mpeg:dash:profile:isoff-live:2011"
- MPD describes segment templates which use timestamps or number.
- MPD describes a single period or multiple periods
- Either a MPD Availability start time (AST) is set to 0 (Jan 1st 1970), or a Presentation Time Offset (PTO) equal to the Period start-time.
Versions
You can use your DASH input source on broadpeak.io for linear content if they respect the DASH Guidelines specified in ISO/IEC 23009-1 - Part 8.4 - Live, taking into account some of the limitations described in the chapter below.
Please contact us if your use-case requires the support of other DASH implementations.
The ISO Live profile is identified by the URN "urn:mpeg:dash:profile:isoff-live:2011".
Availability start-time and Presentation Time Offset
For broadpeak.io to operate properly, two options are accepted to describe the start of the stream in the manifest:
- Availability start-time is set to 0 and so is the presentation offset.
Example:
<MPD type="dynamic" availabilityStartTime="1970-01-01T00:00:00Z" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period id="1" start="PT0S">
.....
<SegmentTemplate timescale="48000" initialization="output-$RepresentationID$.dash" media="output-$RepresentationID$-$Time$.dash">
<SegmentTimeline>
Note
The manifest above is not a fully functional MPD. Parts of the MPD structure that are not relevant for the example have been omitted.
- Availability start-time is different from 0 and the presentation offset of the period matches the period start.
Example:
<MPD type="dynamic" availabilityStartTime="2022-06-17T12:53:06.856000+00:00" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period start="PT3444374.133S" id="1" duration="PT30.000S">
.....
<SegmentTemplate timescale="30000" media="output-$RepresentationID$-$Time$.dash" initialization="output-$RepresentationID$.dash" presentationTimeOffset="103331224000">
<SegmentTimeline>
Note
The manifest above is not a fully functional MPD. Parts of the MPD structure that are not relevant for the example have been omitted.
Media Containers
Supported media containers in DASH are:
- MP4 (Fragmented MP4)
- Transport stream (limitations apply for Ad insertion)
- smpte-tt (subtitles)
Segment template with timeline
broadpeak.io expects an MPEG-DASH Manifest (MPD) which describes a template that uses timestamps (as opposed to number), as shown below:
<SegmentTemplate timescale="48000" initialization="audio/en/init.mp4a" media="audio/en/$Time$.mp4a">
<SegmentTimeline>
<S t="0" d="96000" r="432"/>
</SegmentTimeline>
</SegmentTemplate>
Segment template with numbering
Segment numbering is supported by broadpeak.io
Example:
<SegmentTemplate timescale="12288" presentationTimeOffset="1024" duration="24576" media="BBB_720_1M_video_$Number$.mp4" startNumber="1" initialization="BBB_720_1M_video_init.mp4"/>
Segment template with timeline and numbering
The combined segment numbering and timeline mode is not yet supported by broadpeak.io.
Contact us at [email protected] if you need it for your use case(s).
Example:
<SegmentTemplate media="./$RepresentationID$/$Number$.m4s" initialization="$RepresentationID$-init.mp4"/>
MPD period management
Depending on the media content, the origin server used for your media application, and the nature of the stream, the MPD manifest can contain one or more consecutive non-overlapping periods.
You can find a good explanation on how to describe the MPEG-DASH period timing in an MPD in the document below:
broadpeak.io supports MPD inputs that are structured under a single time period as input source as well as manifest structured under multiple periods.
Example of an input manifest with single period
A manifest describing a single period of time will have a single โperiodโ tag with a start attribute and potentially a duration or end attribute, within a same representation of the MPD.
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="dynamic">
<Period start="PT0.00S" duration="PT2000.00S">
</Period>
</MPD>
SCTE-35 Markers
Supported Markers
- Cue-out markers are either
splice_insert
ortime_signal
- SCTE-35 markers use either
urn:scte:scte35:2014:xml
,urn:scte:scte35:2014:xml+bin
orurn:scte:scte35:2013:xml
For Live Ad replacement, broadpeak.io relies on in-band markers to detect the beginning of an Ad in the stream. splice_insert
and time_signal
cue-out types are supported.
Presentation of the Manifest
In single period mode, the marker is signalled inside an EventStream
XML node parent, as Event
element. Event
elements must carry an XML and/or a binary representation of the SCTE-35 cue message.
SCTE-35 Marker's type
Supported SCTE-35 markers are the following:
- urn:scte:scte35:2014:xml
- urn:scte:scte35:2014:xml+bin
- urn:scte:scte35:2013:xml
XML SCTE-35 Event
Example:
<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
<Event duration="2699769">
<scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="8586003992" tier="4095">
<scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
<scte35:Program>
<scte35:SpliceTime ptsTime="2346545680"/>
</scte35:Program>
<scte35:BreakDuration autoReturn="true" duration="2699769"/>
</scte35:SpliceInsert>
</scte35:SpliceInfoSection>
</Event>
</EventStream>
Base-64 encoded SCTE-35 Event
Example:
<EventStream
schemeIdUri="urn:scte:scte35:2014:xml+bin"
timescale="10000000">
<Event
presentationTime="15516962501159406"
id="3999785549">
<Signal xmlns="http://www.scte.org/schemas/35/2016">
<Binary>/DAnAAAAAAAAAP/wBQb/Y/SedwARAg9DVUVJAAAAPH+/AAAjAQEGLc/Q
</Binary>
</Signal>
</Event>
</EventStream>
DASH SCTE-35 Requirements
For both urn:scte:scte35:2013:xml
and urn:scte:scte35:schemes:2014:xml+bin
:
- The [email protected] attribute must not be used.
- The sum of [email protected] (=epochTime x timescale) and [email protected] (seconds x timescale) must never exceed the period duration, if known at the time of creation. An event whose [email protected] is later than the end of the period due to an MPD update must be ignored.
- There should not be more than one SCTE-35 MPD event with an identical value of the [email protected] attribute.
Apple HLS
You can use M3U8 manifests as input source on broadpeak.io for linear and non-linear content.
Quick m3u8 compatibility check :
- Version is 4 or lower
- Contains a single audio or subtitle group
- Media container are Transport Stream or Fragmented MP4
- Media & Segment are referenced using relative path URI
- EXT-X-STREAM-INF tags have the "Bandwidth" and "Codecs" attributes
- EXT-X-PROGRAM-DATE-TIME tag must be present in media manifests for linear content
- EXT-X-PROGRAM-DATE-TIME tag must be absent or set to 1970-01-01T00:00:00.000Z for non-linear content
- Initialization Vector (IV) is present if your content uses AES-128 Encryption
Versions
- versions 1 to 4
- versions 5 to 8 can be supported if they do not contain attributes that are not supported in version 4.
Media containers
broadpeak.io supports both Transport Stream (.ts) and Fragmented MP4 (.fmp4) inside an m3u8 manifest.
Please contact us if your use-case requires a specific container such as CMAF.
Separated and multiplexed audios
HLS specification allows to have media segments in Transport Stream carrying audio only, video only, or audio and video multiplexed inside the same segment. With broadpeak.io, both scenarios are supported; whether your M3U8 TS has separated audio tracks or multiplexed audio and video tracks, your application should run on the platform.
Mandatory attributes
To better understand how broadpeak.io works, we invite you to take a look at the Understanding broadpeak.io behavior section.
In HLS, broadpeak.io needs specific attributes to be present for some HLS tags, as described below:
Video variants:
- Tag: EXT-X-STREAM-INF
- Attribute: CODECS
- Attribute: BANDWITDH
Example of #EXT-X-STREAM-INF tag:
#EXT-X-STREAM-INF:BANDWIDTH=2299000,CODECS="mp4a.40.2,avc1.64401F",RESOLUTION=1024x576,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
Audio variants:
Audio rendition groups
HLS provides the ability to link sets of audio tracks with a specific video track using audio groups, also known as audio rendition group. An audio group is a combination of one or more audio tracks with a video track, to indicate to the player that these are supposed to be played together. For your application to successfully operate with broadpeak.io, the M3U8 provided must contain a single audio group.
.
Referencing with relative path
broadpeak.io supports relative URI referencing in the master and media manifest, such as the examples below:
Master Playlist
#EXTM3U
#EXT-X-VERSION:4
# AUDIO groups
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-129",NAME="audio",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2"
# variants
#EXT-X-STREAM-INF:BANDWIDTH=809000,CODECS="mp4a.40.2,avc1.644015",RESOLUTION=512x288,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
3a3de381a16384ba350c2ffcc53003f8-audio=129117-video=633990.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1317000,CODECS="mp4a.40.2,avc1.64401E",RESOLUTION=768x432,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
3a3de381a16384ba350c2ffcc53003f8-audio=129117-video=1112667.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2299000,CODECS="mp4a.40.2,avc1.64401F",RESOLUTION=1024x576,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
3a3de381a16384ba350c2ffcc53003f8-audio=129117-video=2039492.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3303000,CODECS="mp4a.40.2,avc1.64401F",RESOLUTION=1280x720,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
3a3de381a16384ba350c2ffcc53003f8-audio=129117-video=2986216.m3u8
# variants
#EXT-X-STREAM-INF:BANDWIDTH=137000,CODECS="mp4a.40.2",AUDIO="audio-aacl-129"
3a3de381a16384ba350c2ffcc53003f8-audio=129117.m3u8
Media playlist
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:6
#EXTINF:6,
audio=129117-video=633990-01.ts
#EXTINF:6,
audio=129117-video=633990-02.ts
......
Referencing with absolute path
Avoid absolute path referencing in your M3U8!
Absolute path referencing is not supported in master playlists, use relative path instead.
Master playlist
#EXTM3U
#EXT-X-VERSION:4
# AUDIO groups
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-aacl-129",NAME="audio",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2"
# variants
#EXT-X-STREAM-INF:BANDWIDTH=809000,CODECS="mp4a.40.2,avc1.644015",RESOLUTION=512x288,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
https://myorigin.mydomain.video/3a3de381a16384ba350c2ffcc53003f8/output/audio=129117-video=633990.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1317000,CODECS="mp4a.40.2,avc1.64401E",RESOLUTION=768x432,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
https://myorigin.mydomain.video/3a3de381a16384ba350c2ffcc53003f8/output/audio=129117-video=1112667.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2299000,CODECS="mp4a.40.2,avc1.64401F",RESOLUTION=1024x576,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
https://myorigin.mydomain.video/3a3de381a16384ba350c2ffcc53003f8/output/audio=129117-video=2039492.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3303000,CODECS="mp4a.40.2,avc1.64401F",RESOLUTION=1280x720,AUDIO="audio-aacl-129",CLOSED-CAPTIONS=NONE
https://myorigin.mydomain.video/3a3de381a16384ba350c2ffcc53003f8/output/audio=129117-video=2986216.m3u8
# variants
#EXT-X-STREAM-INF:BANDWIDTH=137000,CODECS="mp4a.40.2",AUDIO="audio-aacl-129"
https://myorigin.mydomain.video/3a3de381a16384ba350c2ffcc53003f8/output/audio=129117.m3u8
Media playlist
Avoid absolute path referencing in your M3U8!
Absolute path referencing is not supported in media playlists, use relative path instead.
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:6
#EXTINF:6,
https://myorigin.mydomain.video/3a3de381a16384ba350c2ffcc53003f8/output/audio=129117-video=633990-01.ts
#EXTINF:6,
https://myorigin.mydomain.video/3a3de381a16384ba350c2ffcc53003f8/output/audio=129117-video=633990-02.ts
......
Encrypted manifests (DRM)
broadpeak.io supports encrypted manifest for original and replacement sources, whether they are encrypted through AES-128 or SAMPLE-AES. The only specific requirement around that area is that the IV must be present in the #EXT-X-KEY tag.
#EXT-X-KEY:METHOD=AES-128,URI="https://keygenerator.com/sourcecontent/dummydrm/HLS/aes128.key",IV=0x73fbe3277bdf0bfc5217125bde4ca589
SCTE-35 Markers
Supported Markers
- Cue-out markers are either
splice_insert
ortime_signal
- SCTE-35 markers must be
EXT-X-DATERANGE:ID
markers andEXT-OATCLS-SCTE35
markers.
For Live Ad replacement, broadpeak.io relies on in-band markers to detect the beginning of an Ad in the stream. splice_insert
and time_signal
cue-out types are supported.
DATERANGE markers - Example:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:217514
#EXT-X-DISCONTINUITY-SEQUENCE:21
#EXT-X-PROGRAM-DATE-TIME:2022-09-20T08:43:59.640Z
#EXTINF:6.000,
index_4_217514.ts?m=1660741368
#EXTINF:3.760,
index_4_217515.ts?m=1660741368
#EXT-X-DATERANGE:ID="18",START-DATE="2022-09-20T08:44:09.400Z",PLANNED-DURATION=45.000,SCTE35-OUT=0xFC302F00015CE9AA1800FFF01405000000127FEFFEE51CEE007E003DCC50000112FF000A00084355454900000012C2A52C21
#EXTINF:6.240,
index_4_217516.ts?m=1660741368
#EXTINF:6.000,
index_4_217517.ts?m=1660741368
#EXTINF:6.000,
index_4_217518.ts?m=1660741368
#EXTINF:6.000,
index_4_217519.ts?m=1660741368
#EXTINF:6.000,
index_4_217520.ts?m=1660741368
#EXTINF:6.000,
index_4_217521.ts?m=1660741368
#EXTINF:6.000,
index_4_217522.ts?m=1660741368
#EXTINF:2.760,
index_4_217523.ts?m=1660741368
#EXTINF:5.240,
index_4_217524.ts?m=1660741368
Some mandatory requirements when using DATERANGE markers
- each marker
ID
must be unique - the
START-DATE
must be specified in clear or inside the payload - the duration of the break should be specified under
PLANNED-DURATION
orDURATION
in clear or inside the payload - there must be a SCTE35-OUT or SCTE35-CMD attribute
OATCLS markers - Example:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:51098
#EXT-X-PROGRAM-DATE-TIME:2022-12-27T09:37:00.000Z
#EXTINF:6.000,
video_1080p_1000010996/725449020000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449026000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449032000.ts
#EXTINF:3.240,
video_1080p_1000010996/725449038000.ts
#EXT-OATCLS-SCTE35:/DAqAAAAAAAAAP/wDwUAADTHf//+AKTLgAAAAAAACgAIQ1VFSQAAAAAD+kMv
#EXTINF:2.760,
video_1080p_1000010996/725449041240.ts
#EXTINF:6.000,
video_1080p_1000010996/725449044000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449050000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449056000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449062000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449068000.ts
Some information when using OATCLS markers
- The start-time of the markers is not taken from the payload, but computed from the media manifest, based on
EXT-X-PROGRAM-DATETIME
value. The placement of the marker in the playlist is important. - the duration of the break must be specified inside the payload
Updated 13 days ago