Documentation

Fallback streaming and content steering

Fallback streaming

Introduction

Radiant Media Player supports multiple sources for content. This enables you to provide more sources for your content in your MPEG-DASH manifest or HLS playlist, so the player has a fallback URL, in case your main content source becomes unavailable. This works with MPEG-DASH and HLS out of the box, no specific player configuration is required.

MPEG-DASH: Multiple Base URLs

With MPEG-DASH you can define multiple <BaseURL></BaseURL> elements in your manifest. Each of these element points to a specific source for your content. Our player will start using the first BaseURL element when manifest loads. In case the first BaseURL element becomes unavailable, the player will automatically try the second one and so on. It is recommended to provide <BaseURL></BaseURL> elements data at the <MPD> or <Period> level.

Example of MPEG-DASH manifest with Multiple Base URLs

<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="dynamic" minimumUpdatePeriod="PT2S" timeShiftBufferDepth="PT30M" availabilityStartTime="2011-12-25T12:30:00" minBufferTime="PT4S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <BaseURL>https://cdn1.example.com/</BaseURL>
  <BaseURL>https://cdn2.example.com/</BaseURL>
  <Period id="1">
    <AdaptationSet mimeType="video/mp4" codecs="avc1.4D401F" frameRate="30000/1001" segmentAlignment="true" startWithSAP="1">
    ...
    </AdaptationSet>
  </Period>
</MPD>

HLS: Redundant variant streams

This error resilience feature is specific to HLS. More information on the subject can be found here.

In a nutshell: "If your playlist contains alternate streams, they can not only operate as bandwidth or device alternates, but as failure fallbacks. If the client is unable to reload the index file for a stream (due to a 404 error, for example), the client attempts to switch to an alternate stream".

A variant stream is considered to be redundant, if it has the exact same EXT-X-STREAM-INF tag as the original one. In case the first occurrence of the variant becomes unavailable, the redundant variant will be used automatically by the player.

Example of HLS manifest with redundant variant streams

#EXTM3U

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English audio",LANGUAGE="en",AUTOSELECT=YES,URI="https://cdn1.example.com/source/en_128000.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-b",NAME="English audio",LANGUAGE="en",AUTOSELECT=YES,URI="https://cdn2.example.com/source/en_128000.m3u8"
            
#EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.42c00d,mp4a.40.2",RESOLUTION=640x360,AUDIO="audio"
https://cdn1.example.com/source/720_2400000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.42c00d,mp4a.40.2",RESOLUTION=640x360,AUDIO="audio-b"
https://cdn2.example.com/source/720_2400000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=10000000,CODECS="avc1.42c00d,mp4a.40.2",RESOLUTION=1920x1080,AUDIO="audio"
https://cdn1.example.com/source/1080_4800000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=10000000,CODECS="avc1.42c00d,mp4a.40.2",RESOLUTION=1920x1080,AUDIO="audio-b"
https://cdn2.example.com/source/1080_4800000.m3u8

Content steering

Introduction

Content steering is a new feature of both HLS and MPEG-DASH standards, simplifying the design of multi-CDN systems, redundancy/failover functions, load balancing, and various other traffic optimization applications. With Radiant Media Player we support content steering in HLS and MPEG-DASH according to HLS Content Steering Specification and DASH-IF CTS Version 0.9.0

Content Steering with MPEG-DASH

Content distributors often use multiple Content Delivery Networks (CDNs) to distribute their content to the end-users. They may upload a copy of their catalogue to each CDN, or more commonly have all CDNs pull the content from a common origin. Alternate URLs are generated, one for each CDN, that point at identical content. DASH players may access alternate URLs in the event of delivery problems. Content steering describes a deterministic capability for a content distributor to switch the content source that a player uses either at start-up or midstream, by means of a remote steering service.

Example of MPEG-DASH Content Steering manifest

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:mas="urn:marlin:mas:1-0:services:schemas:mpd" xmlns:mspr="urn:microsoft:playready" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediaPresentationDuration="PT10M34.600S" minBufferTime="PT1.980S">
  <BaseURL serviceLocation="cdn-a">https://cdn-a.content-steering.com/bbb/</BaseURL>
  <BaseURL serviceLocation="cdn-c">https://cdn-c.content-steering.com/bbb/</BaseURL>
  <BaseURL serviceLocation="cdn-b">https://cdn-b.content-steering.com/bbb/</BaseURL>
  <ContentSteering defaultServiceLocation="cdn-a" queryBeforeStart="true">https://cdn-b-server.content-steering.com/dash.dcsm?steering_params=eyJjZG5PcmRlciI6WyJjZG4tYSIsImNkbi1jIiwiY2RuLWIiXSwibWluQml0cmF0ZSI6OTE0ODc4LCJwYXRod2F5cyI6W3siaWQiOiJjZG4tYSIsInRocm91Z2hwdXQiOjIwMDAwMDAwfSx7ImlkIjoiY2RuLWMiLCJ0aHJvdWdocHV0IjoyMDAwMDAwMH0seyJpZCI6ImNkbi1iIiwidGhyb3VnaHB1dCI6MjAwMDAwMDB9XX0=</ContentSteering>
  <Period>
    <AdaptationSet mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1" lang="und" group="0">
      <SegmentTemplate duration="1984" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="1" timescale="1000"/>
      <Representation audioSamplingRate="48000" bandwidth="131556" codecs="mp4a.40.2" id="audio_128kbps">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
    </AdaptationSet>
    <AdaptationSet mimeType="video/mp4" scanType="progressive" segmentAlignment="true" startWithSAP="1" group="0">
      <SegmentTemplate duration="2000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="1" timescale="1000"/>
      <Representation bandwidth="4530860" codecs="avc1.640028" frameRate="30" height="1080" id="video_1920x1080_4531kbps" scanType="progressive" width="1920"/>
      <Representation bandwidth="2445034" codecs="avc1.4D401F" frameRate="30" height="720" id="video_1280x720_2445kbps" scanType="progressive" width="1280"/>
      <Representation bandwidth="1419255" codecs="avc1.4D401F" frameRate="30" height="576" id="video_1024x576_1419kbps" scanType="progressive" width="1024"/>
      <Representation bandwidth="783322" codecs="avc1.4D401E" frameRate="30" height="360" id="video_640x360_783kbps" scanType="progressive" width="640"/>
    </AdaptationSet>
  </Period>
</MPD>

Content Steering with HLS

Content Steering allows content producers to group redundant Variant Streams into "Pathways" and to dynamically prioritize access to different Pathways. Provision of Pathways by servers is OPTIONAL. Client support for Content Steering is OPTIONAL. Clients that support Content Steering MUST follow the rules in this section. Enabling Content Steering of downloadable (offline) content requires that each downloadable Rendition have a STABLE-VARIANT-ID or STABLE- RENDITION-ID, that each Pathway offer Renditions with the same stable IDs, and that Renditions with the same stable ID have bit-for-bit identical Media Segments.

Example of HLS Content Steering manifest

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-CONTENT-STEERING:SERVER-URI="https://cdn-a-server.content-steering.com/hls.hcsm?steering_params=eyJjZG5PcmRlciI6WyJjZG4tYSIsImNkbi1iIiwiY2RuLWMiXSwibWluQml0cmF0ZSI6OTE0ODc4LCJwYXRod2F5cyI6W3siaWQiOiJjZG4tYSIsInRocm91Z2hwdXQiOjIwMDAwMDAwfSx7ImlkIjoiY2RuLWIiLCJ0aHJvdWdocHV0IjoyMDAwMDAwMH0seyJpZCI6ImNkbi1jIiwidGhyb3VnaHB1dCI6MjAwMDAwMDB9XX0=",PATHWAY-ID="cdn-a"

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="cdn-a",NAME="English",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="en",URI="https://cdn-a.content-steering.com/bbb_hls/audio_128kbps/playlist.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="cdn-b",NAME="English",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="en",URI="https://cdn-b.content-steering.com/bbb_hls/audio_128kbps/playlist.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="cdn-c",NAME="English",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="en",URI="https://cdn-c.content-steering.com/bbb_hls/audio_128kbps/playlist.m3u8"

#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=7153972,AVERAGE-BANDWIDTH=3397112,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,PATHWAY-ID="cdn-a",AUDIO="cdn-a"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=7153972,AVERAGE-BANDWIDTH=3397112,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,PATHWAY-ID="cdn-b",AUDIO="cdn-b"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=7153972,AVERAGE-BANDWIDTH=3397112,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,PATHWAY-ID="cdn-c",AUDIO="cdn-c"

#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2832376,AVERAGE-BANDWIDTH=784916,CODECS="avc1.640028",RESOLUTION=1920x1080,PATHWAY-ID="cdn-a",URI="//cdn-a.content-steering.com/bbb_hls/video_1920x1080_3400kbps/playlist-iframe-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2832376,AVERAGE-BANDWIDTH=784916,CODECS="avc1.640028",RESOLUTION=1920x1080,PATHWAY-ID="cdn-b",URI="//cdn-b.content-steering.com/bbb_hls/video_1920x1080_3400kbps/playlist-iframe-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2832376,AVERAGE-BANDWIDTH=784916,CODECS="avc1.640028",RESOLUTION=1920x1080,PATHWAY-ID="cdn-c",URI="//cdn-c.content-steering.com/bbb_hls/video_1920x1080_3400kbps/playlist-iframe-index.m3u8"

#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=3916252,AVERAGE-BANDWIDTH=1855703,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=1280x720,PATHWAY-ID="cdn-a",AUDIO="cdn-a"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=3916252,AVERAGE-BANDWIDTH=1855703,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=1280x720,PATHWAY-ID="cdn-b",AUDIO="cdn-b"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=3916252,AVERAGE-BANDWIDTH=1855703,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=1280x720,PATHWAY-ID="cdn-c",AUDIO="cdn-c"

#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1286624,AVERAGE-BANDWIDTH=446726,CODECS="avc1.4d001f",RESOLUTION=1280x720,PATHWAY-ID="cdn-a",URI="//cdn-a.content-steering.com/bbb_hls/video_1280x720_1855kbps/playlist-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1286624,AVERAGE-BANDWIDTH=446726,CODECS="avc1.4d001f",RESOLUTION=1280x720,PATHWAY-ID="cdn-b",URI="//cdn-b.content-steering.com/bbb_hls/video_1280x720_1855kbps/playlist-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1286624,AVERAGE-BANDWIDTH=446726,CODECS="avc1.4d001f",RESOLUTION=1280x720,PATHWAY-ID="cdn-c",URI="//cdn-c.content-steering.com/bbb_hls/video_1280x720_1855kbps/playlist-index.m3u8"

#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2467772,AVERAGE-BANDWIDTH=1146892,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=1024x576,PATHWAY-ID="cdn-a",AUDIO="cdn-a"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2467772,AVERAGE-BANDWIDTH=1146892,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=1024x576,PATHWAY-ID="cdn-b",AUDIO="cdn-b"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2467772,AVERAGE-BANDWIDTH=1146892,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=1024x576,PATHWAY-ID="cdn-c",AUDIO="cdn-c"

#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=736516,AVERAGE-BANDWIDTH=272629,CODECS="avc1.4d001f",RESOLUTION=1024x576,PATHWAY-ID="cdn-a",URI="//cdn-a.content-steering.com/bbb_hls/video_1024x576_1147kbps/playlist-iframe-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=736516,AVERAGE-BANDWIDTH=272629,CODECS="avc1.4d001f",RESOLUTION=1024x576,PATHWAY-ID="cdn-b",URI="//cdn-b.content-steering.com/bbb_hls/video_1024x576_1147kbps/playlist-iframe-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=736516,AVERAGE-BANDWIDTH=272629,CODECS="avc1.4d001f",RESOLUTION=1024x576,PATHWAY-ID="cdn-c",URI="//cdn-c.content-steering.com/bbb_hls/video_1024x576_1147kbps/playlist-iframe-index.m3u8"

#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1420692,AVERAGE-BANDWIDTH=682193,CODECS="avc1.4d001e,mp4a.40.2",RESOLUTION=640x360,PATHWAY-ID="cdn-a",AUDIO="cdn-a"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1420692,AVERAGE-BANDWIDTH=682193,CODECS="avc1.4d001e,mp4a.40.2",RESOLUTION=640x360,PATHWAY-ID="cdn-b",AUDIO="cdn-b"
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1420692,AVERAGE-BANDWIDTH=682193,CODECS="avc1.4d001e,mp4a.40.2",RESOLUTION=640x360,PATHWAY-ID="cdn-c",AUDIO="cdn-c"

#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=339828,AVERAGE-BANDWIDTH=154923,CODECS="avc1.4d001e",RESOLUTION=640x360,PATHWAY-ID="cdn-a",URI="//cdn-a.content-steering.com/bbb_hls/video_640x360_682kbps/playlist-iframe-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=339828,AVERAGE-BANDWIDTH=154923,CODECS="avc1.4d001e",RESOLUTION=640x360,PATHWAY-ID="cdn-b",URI="//cdn-b.content-steering.com/bbb_hls/video_640x360_682kbps/playlist-iframe-index.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=339828,AVERAGE-BANDWIDTH=154923,CODECS="avc1.4d001e",RESOLUTION=640x360,PATHWAY-ID="cdn-c",URI="//cdn-c.content-steering.com/bbb_hls/video_640x360_682kbps/playlist-iframe-index.m3u8"
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License.

©2015-2024 Radiant Media Player. All Rights Reserved.