MPEG-DASH

How VOD and Live streams in DASH format should be prepared to operate well with broadpeak.io

📘

Quick MPD compatibility check:

Check the following, for VOD and Live inputs

  • MPD follows ISO/IEC 23009-1 - Part 8.4 - Live or ISO/IEC 23009-1 - Part 8.5 - Main . A quick way to check it is to look at the URN in the MPD which should respectively be urn:mpeg:dash:profile:isoff-live:2011 and urn:mpeg:dash:profile:isoff-main:2011
  • SegmentTemplate with or without SegmentTimeline, using time-base ($Time$) or number-based ($Number$) addressing

For VOD input specifically:

  • MPD contains a single period

For Live inputs specifically:

  • MPD contains a single period or multiple periods
  • The availability start time is set to 0 (Jan 1st 1970), or the presentation time offset is equal to the first period start.

Base Requirements

🔸

This page assumes a working knowledge of the DASH format. For a refresher and some context, we recommend consulting our introductory guide in the DASH Format

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 or ISO/IEC 23009-1 - Part 8.5 - Main, taking into account some of the limitations described in this chapter.

The ISO Live profile is identified by the URN urn:mpeg:dash:profile:isoff-live:2011 and the ISO Main profile is identified by the URN urn:mpeg:dash:profile:isoff-main:2011.

Please contact us if your use-case requires the support of other DASH implementations.

Media Containers

DASH media containers supported by broadpeak.io are:

  • ISOBMFF (Fragmented MP4, aka fMP4)
  • Transport Stream (aka TS, but limitations apply for Ad insertion)
  • smpte-tt (subtitles)

Periods

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.

  • For VOD inputs, only single-period MPDs are supported.
  • For Live inputs, broadpeak.io supports MPD that are either structured under a single time period or with multiple periods.

👉

Examples

For examples of DASH manifests using multiple periods, check our Guide on the DASH Format

Segment Addressing Modes

There are many ways in DASH to express how a DASH client can retrieve segments, called "addressing modes". broadpeak.io supports the following:

  • Explicit addressing: Segment Template with Segment Timeline, using $Time$ or $Number$ variables in segment filename patterns.
  • Simple addressing, with $Time$ or $Number$ variables in segment filename patterns

Whenever possible, it is recommended to use $Time$, in particular for Live scenarios.

broadpeak.io does not support use cases in which SegmentTemplates in the MPD use different addressing modes. Contact us at [email protected] if you need it for your use case(s).

Live

In addition to the base requirements, the following constraints also apply to Live streams:

Availability Start Time (AST) and Presentation Time Offset (PTO)

For broadpeak.io to operate properly, two options are accepted to describe the start of the stream in the manifest:

  1. The availability start time (MPD@availabilityStartTime) is set to 0 (ie. Jan 1st 1970). In addition, the segment template's presentation offset (SegmentTemplate@presentationOffset or Representation@presentationOffset) is either absent or is set to 0.
<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>
  1. The availability start time (MPD@availabilityStartTime) is more than 0, and the presentation offset of the segment template (SegmentTemplate@presentationOffset or Representation@presentationOffset) matches the period's start (Period@start).
<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 how Period@start = SegmentTemplate@presentationOffset / SegmentTemplate@timescale