MPEG-DASH contextualized manifests

Whether you define your Blackout service on broadpeak.io via the web app or API, a streaming end-point is generated and provided to you. You can use this end-point to configure your Content Delivery Network and deliver contextualized streams to your end-users.

When requesting manifests from the streaming end-point, the manifest returned by broadpeak.io might be contextualized or not depending whether a Blackout slot is currently active for the audience or category which is requesting the manifest.

If there is no active Blackout slot for the defined audience, the original manifest is returned. We invite you to continue reading this section for more details.

If there is an active Blackout slot for the defined audience, a contextualized manifest is returned by the platform.

Original manifests

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="dynamic"> 
  <Period id="1" start="PT0.00S"> <!-- Period 1 -->
    <BaseURL>../../../dash/sourcecontent/</BaseURL> <!-- path points to source content -->
    ......
  </Period> 
</MPD>

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.

broadpeak.io only contextualizes the manifest on demand when there is an active slot for the specified audience in the manifest DVR window. After contextualization, a multi-period manifest is generated, reflecting both the period when the original content applies and the period when the replacement content takes over. A specific period is also represented in the manifest to indicate the period during which the player should switch back to the original content.

Multi-period manifests

The MPD generated by broadpeak.io contains multiple periods when contextualization applies.

  • We retrieve three periods with unique Ids and a start time. Note: live manifests do not always have a duration attribute, it is an optional parameter that can be deducted from the following period.
  • Each period points to a specific BaseURL which represents the base path where the media segment of each source, original or replacement source, can be accessed.
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="dynamic"> 
  <Period id="1" start="PT0.00S"> <!-- Period 1 -->
    <BaseURL>../../../dash/sourcecontent/</BaseURL> <!-- path points to source content -->
    ......
  </Period> 
  <Period id="2" start="PT20.00S">  <!-- Period 2 -->
    <BaseURL>../../../dash/replacementcontent</BaseURL> <!-- path points to replacement content -->
    ......
  </Period> 
  <Period id="3" start="PT60.00S">  <!-- Period 3 -->
    <BaseURL>../../../dash/sourcecontent/</BaseURL> <!-- path points to source content -->
    ......
  </Period> 
</MPD>

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.

Dealing with encryption

As per MPEG-DASH specification, each AdaptationSet within the period must contain encryption information in the case of encrypted content. In the case where the original source is encrypted, and the replacement source is not, the manifest should look like the following:

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="dynamic"> 
  <Period id="1" start="PT0.00S"> <!-- Period 1 -->
    <BaseURL>../../../dash/sourcecontent/</BaseURL> <!-- path points to source content -->
    <AdaptationSet ... > 
      .....
      <ContentProtection ...> <!-- Encryption information related to content source -->
         .....
      </ContentProtection>
      .....
    </AdaptationSet>
  </Period> 
  <Period id="2" start="PT20.00S">  <!-- Period 2 -->
    <BaseURL>../../../dash/replacementcontent</BaseURL> <!-- path points to replacement content -->
    ......
  </Period> 
  <Period id="3" start="PT60.00S">  <!-- Period 3 -->
    <BaseURL>../../../dash/sourcecontent/</BaseURL> <!-- path points to source content -->
     <AdaptationSet ... >
      .....
      <ContentProtection ...> <!-- Encryption information related to content source -->
         .....
      </ContentProtection>
      .....
    </AdaptationSet>
  </Period> 
</MPD>

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.

In the case the original and replacement sources are encrypted, the AdaptationSet of the period that reflects when the replacement source should be played, also contains encryption information related to the replacement source.

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="dynamic"> 
  <Period id="1" start="PT0.00S"> <!-- Period 1 -->
    <BaseURL>../../../dash/sourcecontent/</BaseURL> <!-- path points to source content -->
    <AdaptationSet ... > 
      .....
      <ContentProtection ...> <!-- Encryption information related to content source -->
         .....
      </ContentProtection>
      .....
    </AdaptationSet>
  </Period> 
  <Period id="2" start="PT20.00S">  <!-- Period 2 -->
    <BaseURL>../../../dash/replacementcontent</BaseURL> <!-- path points to replacement content -->
      .....
      <ContentProtection ...> <!-- Encryption information related to replacement source -->
         .....
      </ContentProtection>
      .....
    </AdaptationSet>
  </Period> 
  <Period id="3" start="PT60.00S">  <!-- Period 3 -->
    <BaseURL>../../../dash/sourcecontent/</BaseURL> <!-- path points to source content -->
     <AdaptationSet ... >
      .....
      <ContentProtection ...> <!-- Encryption information related to content source -->
         .....
      </ContentProtection>
      .....
    </AdaptationSet>
  </Period> 
</MPD>

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.