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
andurn:mpeg:dash:profile:isoff-main:2011
- SegmentTemplate with or without SegmentTimeline, using time-base (
$Time$
) or number-based ($Number$
) addressingFor 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:
- The availability start time (
MPD@availabilityStartTime
) is set to 0 (ie. Jan 1st 1970). In addition, the segment template's presentation offset (SegmentTemplate@presentationOffset
orRepresentation@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>
- The availability start time (
MPD@availabilityStartTime
) is more than 0, and the presentation offset of the segment template (SegmentTemplate@presentationOffset
orRepresentation@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
Updated about 1 month ago