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:

  1. 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.

  1. 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 or time_signal
  • SCTE-35 markers use either urn:scte:scte35:2014:xml, urn:scte:scte35:2014:xml+bin or urn: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 EventStreamXML 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:

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 or time_signal
  • SCTE-35 markers must be EXT-X-DATERANGE:ID markers and EXT-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 or DURATION 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