Input Formats

broadpeak.io's streaming input requirement

We have your back!

This section will help you make sure that you have set everything up and that your existing media systems and components are correctly configured for your application(s) to successfully operate with broadpeak.io.

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 (as opposed to number)
  • MPD describes a single period
  • 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 and non-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, 2 options are accepted to describe the start of the stream in the manifest:

  1. Availability start-time is set to 0 and presentation offset also.
    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 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 not yet supported by broadpeak.io.
Contact us at [email protected] if you need it for your use case(s).

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. If you have a use case which requires multiple period MPD input management, please email us at [email protected].

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 are either urn:scte:scte35:2014:xml, urn:scte:scte35:2014: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 et time signal cue-out types are supported.

Presentation the Manifest

In single period mode, the marker is signalled inside an EventStreamXML node parent, as Event element. Event elements must carries an XML and/or a binary representation of the SCTE-35 cue message.

SCTE-35 Marker's type

Supported scte-35 marker 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 Live stream
  • 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 in HLS are officials EXT-X-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

  • 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

Integration with Ad servers

VAST

broadpeak.io supports VAST version 3.0

VMAP

broadpeak.io supports VMAP version 1.01

Supported Mediafiles

The following MediaFiles type are supported:

  • type="video/mp4" with .mp4 extension
  • type="video/mezz" with .mp4 extension
  • type="application/x-mpegURL" with .m3u8 extension
  • ype="application/dash+xml" with .mpd extension

Did this page help you?