Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

shaka-player

Package Overview
Dependencies
Maintainers
3
Versions
348
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

shaka-player - npm Package Compare versions

Comparing version 2.4.5 to 2.4.6

210

demo/common/assets.js

@@ -78,2 +78,4 @@ // vim: foldmethod=marker:foldmarker={{{,}}}

SEGMENT_TEMPLATE_TIMELINE: 'SegmentTemplate w/ SegmentTimeline',
SEGMENT_TEMPLATE_TIMELINE_TIME: 'SegmentTemplate w/ SegmentTimeline $Time$',
SEGMENT_TEMPLATE_TIMELINE_NUMBER: 'SegmentTemplate w/ SegTimeline $Number$',

@@ -94,2 +96,3 @@ PSSH: 'embedded PSSH',

MULTIPLE_LANGUAGES: 'multiple languages',
OFFLINE: 'offline',

@@ -270,4 +273,5 @@ LIVE: 'live',

shakaAssets.Feature.WEBM,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -287,3 +291,4 @@ {

shakaAssets.Feature.WEBM,
shakaAssets.Feature.WEBVTT
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],

@@ -308,3 +313,4 @@

shakaAssets.Feature.WEBM,
shakaAssets.Feature.WEBVTT
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],

@@ -326,4 +332,5 @@

shakaAssets.Feature.MP4,
shakaAssets.Feature.MULTIPLE_LANGUAGES
]
shakaAssets.Feature.MULTIPLE_LANGUAGES,
shakaAssets.Feature.OFFLINE,
],
},

@@ -340,3 +347,4 @@ {

shakaAssets.Feature.MP4,
shakaAssets.Feature.MULTIPLE_LANGUAGES
shakaAssets.Feature.MULTIPLE_LANGUAGES,
shakaAssets.Feature.OFFLINE,
],

@@ -362,4 +370,5 @@

shakaAssets.Feature.WEBM,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -379,4 +388,5 @@ {

shakaAssets.Feature.TRICK_MODE,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -398,4 +408,5 @@ {

shakaAssets.Feature.WEBM,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -415,4 +426,5 @@ {

shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -434,3 +446,4 @@ {

shakaAssets.Feature.WEBM,
shakaAssets.Feature.WEBVTT
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],

@@ -457,4 +470,5 @@

shakaAssets.Feature.WEBM,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -472,4 +486,5 @@ {

shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.WEBM
]
shakaAssets.Feature.WEBM,
shakaAssets.Feature.OFFLINE,
],
},

@@ -488,4 +503,5 @@ {

shakaAssets.Feature.WEBM,
shakaAssets.Feature.XLINK
]
shakaAssets.Feature.XLINK,
shakaAssets.Feature.OFFLINE,
],
},

@@ -506,4 +522,5 @@ {

shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.WEBM
]
shakaAssets.Feature.WEBM,
shakaAssets.Feature.OFFLINE,
],
},

@@ -524,3 +541,4 @@ {

shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.WEBM
shakaAssets.Feature.WEBM,
shakaAssets.Feature.OFFLINE,
],

@@ -544,4 +562,5 @@

shakaAssets.Feature.TTML,
shakaAssets.Feature.WEBM
]
shakaAssets.Feature.WEBM,
shakaAssets.Feature.OFFLINE,
],
},

@@ -558,4 +577,5 @@ {

shakaAssets.Feature.SURROUND,
shakaAssets.Feature.WEBM
]
shakaAssets.Feature.WEBM,
shakaAssets.Feature.OFFLINE,
],
},

@@ -694,4 +714,5 @@ {

shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -713,4 +734,5 @@ {

shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -761,4 +783,5 @@ {

shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,
shakaAssets.Feature.ULTRA_HIGH_DEFINITION
]
shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.OFFLINE,
],
},

@@ -826,4 +849,5 @@ {

shakaAssets.Feature.TTML,
shakaAssets.Feature.ULTRA_HIGH_DEFINITION
]
shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.OFFLINE,
],
},

@@ -843,8 +867,9 @@ // }}}

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
]
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,
shakaAssets.Feature.OFFLINE,
],
},
{
name: 'Live sim (2s segments)',
manifestUri: 'https://vm2.dashif.org/livesim/utc_head/testpic_2s/Manifest.mpd',
manifestUri: 'https://livesim.dashif.org/livesim/utc_head/testpic_2s/Manifest.mpd',

@@ -857,8 +882,8 @@ encoder: shakaAssets.Encoder.UNKNOWN,

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
]
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,
],
},
{
name: 'Live sim (6s segments)',
manifestUri: 'https://vm2.dashif.org/livesim/utc_head/testpic_6s/Manifest.mpd',
name: 'Live sim SegmentTimeline w $Time$ (6s segments)',
manifestUri: 'https://livesim.dashif.org/livesim/segtimeline_1/utc_head/testpic_6s/Manifest.mpd',

@@ -871,8 +896,8 @@ encoder: shakaAssets.Encoder.UNKNOWN,

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
]
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_TIME,
],
},
{
name: 'Live sim (multi-period)',
manifestUri: 'https://vm2.dashif.org/livesim/utc_head/periods_20/testpic_2s/Manifest.mpd',
name: 'Live sim SegmentTimeline w $Number$ (6s segments)',
manifestUri: 'https://livesim.dashif.org/livesim/segtimelinenr_1/utc_head/testpic_6s/Manifest.mpd',

@@ -885,5 +910,44 @@ encoder: shakaAssets.Encoder.UNKNOWN,

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_NUMBER,
],
},
{
name: 'Live sim SegmentTimeline StartOver [-20s, +20s] (2s segments)',
manifestUri: 'https://livesim.dashif.org/livesim/segtimeline_1/startrel_-20/stoprel_20/timeoffset_0/testpic_2s/Manifest.mpd',
encoder: shakaAssets.Encoder.UNKNOWN,
source: shakaAssets.Source.DASH_IF,
drm: [],
features: [
shakaAssets.Feature.LIVE,
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_TIME,
],
},
{
name: 'Live sim StartOver SegTmpl Duration [-20s, +20s] (2s segments)',
manifestUri: 'https://livesim.dashif.org/livesim/startrel_-20/stoprel_20/timeoffset_0/testpic_2s/Manifest.mpd',
encoder: shakaAssets.Encoder.UNKNOWN,
source: shakaAssets.Source.DASH_IF,
drm: [],
features: [
shakaAssets.Feature.LIVE,
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,
],
},
{
name: 'Live sim SegTmpl Duration (multi-period 60s)',
manifestUri: 'https://livesim.dashif.org/livesim/utc_head/periods_60/testpic_2s/Manifest.mpd',
encoder: shakaAssets.Encoder.UNKNOWN,
source: shakaAssets.Source.DASH_IF,
drm: [],
features: [
shakaAssets.Feature.LIVE,
shakaAssets.Feature.MP4,
shakaAssets.Feature.MULTIPERIOD,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
]
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,
],
},

@@ -922,4 +986,5 @@ // }}}

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION
]
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,
shakaAssets.Feature.OFFLINE,
],
},

@@ -936,4 +1001,5 @@ {

shakaAssets.Feature.HLS,
shakaAssets.Feature.MP2TS
]
shakaAssets.Feature.MP2TS,
shakaAssets.Feature.OFFLINE,
],
},

@@ -951,4 +1017,5 @@ {

shakaAssets.Feature.MP2TS,
shakaAssets.Feature.ULTRA_HIGH_DEFINITION
]
shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.OFFLINE,
],
},

@@ -987,4 +1054,5 @@ // }}}

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
]
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,
shakaAssets.Feature.OFFLINE,
],
},

@@ -994,5 +1062,2 @@ {

manifestUri: 'https://amssamples.streaming.mediaservices.windows.net/622b189f-ec39-43f2-93a2-201ac4e31ce1/BigBuckBunny.ism/manifest(format=mpd-time-csf)',
// NOTE: License servers are timing out as of 2016-03-23.
// NOTE: Still timing out as of 2016-08-02.
disabled: true,

@@ -1007,3 +1072,4 @@ encoder: shakaAssets.Encoder.AZURE_MEDIA_SERVICES,

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,
shakaAssets.Feature.OFFLINE,
],

@@ -1047,4 +1113,5 @@

shakaAssets.Feature.SUBTITLES,
shakaAssets.Feature.WEBVTT
]
shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE,
],
},

@@ -1084,4 +1151,5 @@ // }}}

shakaAssets.Feature.MULTIPERIOD,
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION
]
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,
shakaAssets.Feature.OFFLINE,
],
},

@@ -1097,4 +1165,5 @@ {

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_LIST_DURATION
]
shakaAssets.Feature.SEGMENT_LIST_DURATION,
shakaAssets.Feature.OFFLINE,
],
},

@@ -1127,4 +1196,5 @@ {

shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_BASE
]
shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.OFFLINE,
],
},

@@ -1131,0 +1201,0 @@ {

@@ -54,2 +54,3 @@ /**

let supportsPersistentState = true;
let supportsOfflineStorage = true;
// Persistent state support only matters if the asset has DRM.

@@ -67,2 +68,8 @@ if (option.asset && option.asset.drm && option.asset.drm.length) {

}
if (option.asset && option.asset.features) {
if (!option.asset.features.includes(shakaAssets.Feature.OFFLINE)) {
// For whatever reason, this asset can't handle offline storage.
supportsOfflineStorage = false;
}
}

@@ -91,2 +98,5 @@ // Only show when the custom asset option is selected.

'Checkout the "Offline" section in the "Asset" list';
} else if (!supportsOfflineStorage) {
button.disabled = true;
helpText.textContent = 'The asset does not support offline storage.';
} else {

@@ -93,0 +103,0 @@ helpText.textContent = '';

@@ -22,3 +22,3 @@ // This file was autogenerated by third_party/closure/deps/depswriter.py.

goog.addDependency('../../../lib/hls/manifest_text_parser.js', ['shaka.hls.ManifestTextParser'], ['shaka.hls.Attribute', 'shaka.hls.Playlist', 'shaka.hls.PlaylistType', 'shaka.hls.Segment', 'shaka.hls.Tag', 'shaka.hls.Utils', 'shaka.util.Error', 'shaka.util.StringUtils', 'shaka.util.TextParser']);
goog.addDependency('../../../lib/media/drm_engine.js', ['shaka.media.DrmEngine'], ['goog.asserts', 'shaka.log', 'shaka.net.NetworkingEngine', 'shaka.util.ArrayUtils', 'shaka.util.Error', 'shaka.util.EventManager', 'shaka.util.FakeEvent', 'shaka.util.Functional', 'shaka.util.IDestroyable', 'shaka.util.ManifestParserUtils', 'shaka.util.MapUtils', 'shaka.util.MimeUtils', 'shaka.util.PublicPromise', 'shaka.util.StringUtils', 'shaka.util.Timer', 'shaka.util.Uint8ArrayUtils']);
goog.addDependency('../../../lib/media/drm_engine.js', ['shaka.media.DrmEngine'], ['goog.asserts', 'shaka.log', 'shaka.net.NetworkingEngine', 'shaka.util.ArrayUtils', 'shaka.util.Error', 'shaka.util.EventManager', 'shaka.util.FakeEvent', 'shaka.util.IDestroyable', 'shaka.util.ManifestParserUtils', 'shaka.util.MapUtils', 'shaka.util.MimeUtils', 'shaka.util.PublicPromise', 'shaka.util.StringUtils', 'shaka.util.Timer', 'shaka.util.Uint8ArrayUtils']);
goog.addDependency('../../../lib/media/gap_jumping_controller.js', ['shaka.media.GapJumpingController'], ['shaka.log', 'shaka.media.TimeRangesUtils', 'shaka.util.EventManager', 'shaka.util.FakeEvent', 'shaka.util.IDestroyable', 'shaka.util.Timer']);

@@ -76,3 +76,3 @@ goog.addDependency('../../../lib/media/manifest_parser.js', ['shaka.media.ManifestParser'], ['goog.Uri', 'goog.asserts', 'shaka.log', 'shaka.net.NetworkingEngine', 'shaka.util.Error']);

goog.addDependency('../../../lib/text/text_engine.js', ['shaka.text.TextEngine'], ['goog.asserts', 'shaka.util.Error', 'shaka.util.IDestroyable']);
goog.addDependency('../../../lib/text/ttml_text_parser.js', ['shaka.text.TtmlTextParser'], ['goog.asserts', 'shaka.log', 'shaka.text.Cue', 'shaka.text.CueRegion', 'shaka.text.TextEngine', 'shaka.util.ArrayUtils', 'shaka.util.Error', 'shaka.util.StringUtils']);
goog.addDependency('../../../lib/text/ttml_text_parser.js', ['shaka.text.TtmlTextParser'], ['goog.asserts', 'shaka.log', 'shaka.text.Cue', 'shaka.text.CueRegion', 'shaka.text.TextEngine', 'shaka.util.ArrayUtils', 'shaka.util.Error', 'shaka.util.StringUtils', 'shaka.util.XmlUtils']);
goog.addDependency('../../../lib/text/vtt_text_parser.js', ['shaka.text.VttTextParser'], ['goog.asserts', 'shaka.log', 'shaka.text.Cue', 'shaka.text.CueRegion', 'shaka.text.TextEngine', 'shaka.util.Error', 'shaka.util.StringUtils', 'shaka.util.TextParser']);

@@ -79,0 +79,0 @@ goog.addDependency('../../../lib/util/abortable_operation.js', ['shaka.util.AbortableOperation'], ['shaka.util.Error', 'shaka.util.PublicPromise']);

@@ -24,23 +24,24 @@ /*

function receiverAppInit(){window.receiver=new ShakaReceiver;window.receiver.init()}"loading"==document.readyState||"interactive"==document.readyState?window.addEventListener("load",receiverAppInit):receiverAppInit();var shakaAssets={Encoder:{UNKNOWN:"Unknown",SHAKA_PACKAGER:"Shaka packager",AXINOM:"Axinom",UNIFIED_STREAMING:"Unified Streaming",WOWZA:"Wowza",BITCODIN:"Bitcodin",NIMBLE_STREAMER:"Nimble Streamer",AZURE_MEDIA_SERVICES:"Azure Media Services",MP4BOX:"MP4Box",APPLE:"Apple",UPLYNK:"Verizon Digital Media Services"},Source:{SHAKA:"Shaka",AXINOM:"Axinom",UNIFIED_STREAMING:"Unified Streaming",DASH_IF:"DASH-IF",WOWZA:"Wowza",BITCODIN:"Bitcodin",NIMBLE_STREAMER:"Nimble Streamer",AZURE_MEDIA_SERVICES:"Azure Media Services",
GPAC:"GPAC",UPLYNK:"Verizon Digital Media Services"},KeySystem:{CLEAR_KEY:"org.w3.clearkey",PLAYREADY:"com.microsoft.playready",WIDEVINE:"com.widevine.alpha"},Feature:{SEGMENT_BASE:"SegmentBase",SEGMENT_LIST_DURATION:"SegmentList w/ @duration",SEGMENT_LIST_TIMELINE:"SegmentList w/ SegmentTimeline",SEGMENT_TEMPLATE_DURATION:"SegmentTemplate w/ @duration",SEGMENT_TEMPLATE_TIMELINE:"SegmentTemplate w/ SegmentTimeline",PSSH:"embedded PSSH",MULTIKEY:"multiple keys",MULTIPERIOD:"multiple Periods",ENCRYPTED_WITH_CLEAR:"mixing encrypted and unencrypted periods",
AESCTR_16_BYTE_IV:"encrypted with AES CTR Mode using a 16 byte IV",AESCTR_8_BYTE_IV:"encrypted with AES CTR Mode using a 8 byte IV",TRICK_MODE:"special trick mode track",XLINK:"xlink",SUBTITLES:"subtitles",CAPTIONS:"captions",SEGMENTED_TEXT:"segmented text",EMBEDDED_TEXT:"embedded text",MULTIPLE_LANGUAGES:"multiple languages",LIVE:"live",WEBM:"WebM",MP4:"mp4",MP2TS:"MPEG-2 TS",TTML:"TTML",WEBVTT:"WebVTT",HIGH_DEFINITION:"high definition",ULTRA_HIGH_DEFINITION:"ultra-high definition",SURROUND:"surround sound",
HLS:"HLS"},UplynkResponseFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.MANIFEST&&(shakaAssets.uplynk_prefix=b.headers["x-uplynk-prefix"]?b.headers["x-uplynk-prefix"]:"")},UplynkRequestFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.LICENSE&&(-1!==b.uris[0].indexOf("wv")&&shakaAssets.uplynk_prefix?b.uris[0]=shakaAssets.uplynk_prefix.concat("/wv"):-1!==b.uris[0].indexOf("ck")&&shakaAssets.uplynk_prefix?b.uris[0]=shakaAssets.uplynk_prefix.concat("/ck"):-1!==b.uris[0].indexOf("pr")&&
shakaAssets.uplynk_prefix&&(b.uris[0]=shakaAssets.uplynk_prefix.concat("/pr")))}};
shakaAssets.testAssets=[{name:"Angel One (multicodec, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},{name:"Angel One (multicodec, multilingual, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Angel One (multicodec, multilingual, ClearKey server)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-clearkey/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.CLEAR_KEY],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT],licenseServers:{"org.w3.clearkey":"https://cwip-shaka-proxy.appspot.com/clearkey?_u3wDe7erb7v8Lqt8A3QDQ=ABEiM0RVZneImaq7zN3u_w"}},{name:"Angel One (HLS, MP4, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-hls/hls.m3u8",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES]},{name:"Angel One (HLS, MP4, multilingual, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine-hls/hls.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES],
licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Sintel 4k (multicodec)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},
{name:"Sintel w/ trick mode (MP4 only, 720p)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-trickplay/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TRICK_MODE,shakaAssets.Feature.WEBVTT]},{name:"Sintel 4k (WebM only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-webm-only/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},{name:"Sintel 4k (MP4 only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT]},{name:"Sintel 4k (multicodec, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-widevine/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.PSSH,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Sintel 4k (multicodec, VTT in MP4)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-wvtt/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},{name:"Heliocentrism (multicodec, multiperiod)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism/heliocentrism.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.WEBM]},{name:"Heliocentrism (multicodec, multiperiod, xlink)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism-xlink/heliocentrism.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.XLINK]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke-clear/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec, Widevine)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.WEBM],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Tears of Steel (multicodec, TTML)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-ttml/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.WEBM]},
{name:"Tears of Steel (multicodec, surround + stereo)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-surround/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SURROUND,shakaAssets.Feature.WEBM]},{name:"Shaka Player History (multicodec, live, DASH)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,
source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.WEBM]},{name:"Shaka Player History (live, HLS)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,
shakaAssets.Feature.MP4]},{name:"Multi-DRM",manifestUri:"https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT],
licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.4lWwW46k-oWcah8oN18LPj5OLS5ZU-_AQv7fe0JhNjA"}},
GPAC:"GPAC",UPLYNK:"Verizon Digital Media Services"},KeySystem:{CLEAR_KEY:"org.w3.clearkey",PLAYREADY:"com.microsoft.playready",WIDEVINE:"com.widevine.alpha"},Feature:{SEGMENT_BASE:"SegmentBase",SEGMENT_LIST_DURATION:"SegmentList w/ @duration",SEGMENT_LIST_TIMELINE:"SegmentList w/ SegmentTimeline",SEGMENT_TEMPLATE_DURATION:"SegmentTemplate w/ @duration",SEGMENT_TEMPLATE_TIMELINE:"SegmentTemplate w/ SegmentTimeline",SEGMENT_TEMPLATE_TIMELINE_TIME:"SegmentTemplate w/ SegmentTimeline $Time$",SEGMENT_TEMPLATE_TIMELINE_NUMBER:"SegmentTemplate w/ SegTimeline $Number$",
PSSH:"embedded PSSH",MULTIKEY:"multiple keys",MULTIPERIOD:"multiple Periods",ENCRYPTED_WITH_CLEAR:"mixing encrypted and unencrypted periods",AESCTR_16_BYTE_IV:"encrypted with AES CTR Mode using a 16 byte IV",AESCTR_8_BYTE_IV:"encrypted with AES CTR Mode using a 8 byte IV",TRICK_MODE:"special trick mode track",XLINK:"xlink",SUBTITLES:"subtitles",CAPTIONS:"captions",SEGMENTED_TEXT:"segmented text",EMBEDDED_TEXT:"embedded text",MULTIPLE_LANGUAGES:"multiple languages",OFFLINE:"offline",LIVE:"live",WEBM:"WebM",
MP4:"mp4",MP2TS:"MPEG-2 TS",TTML:"TTML",WEBVTT:"WebVTT",HIGH_DEFINITION:"high definition",ULTRA_HIGH_DEFINITION:"ultra-high definition",SURROUND:"surround sound",HLS:"HLS"},UplynkResponseFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.MANIFEST&&(shakaAssets.uplynk_prefix=b.headers["x-uplynk-prefix"]?b.headers["x-uplynk-prefix"]:"")},UplynkRequestFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.LICENSE&&(-1!==b.uris[0].indexOf("wv")&&shakaAssets.uplynk_prefix?b.uris[0]=
shakaAssets.uplynk_prefix.concat("/wv"):-1!==b.uris[0].indexOf("ck")&&shakaAssets.uplynk_prefix?b.uris[0]=shakaAssets.uplynk_prefix.concat("/ck"):-1!==b.uris[0].indexOf("pr")&&shakaAssets.uplynk_prefix&&(b.uris[0]=shakaAssets.uplynk_prefix.concat("/pr")))}};
shakaAssets.testAssets=[{name:"Angel One (multicodec, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Angel One (multicodec, multilingual, Widevine)",
manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},
{name:"Angel One (multicodec, multilingual, ClearKey server)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-clearkey/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.CLEAR_KEY],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE],licenseServers:{"org.w3.clearkey":"https://cwip-shaka-proxy.appspot.com/clearkey?_u3wDe7erb7v8Lqt8A3QDQ=ABEiM0RVZneImaq7zN3u_w"}},
{name:"Angel One (HLS, MP4, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-hls/hls.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.OFFLINE]},{name:"Angel One (HLS, MP4, multilingual, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine-hls/hls.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,
source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Sintel 4k (multicodec)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Sintel w/ trick mode (MP4 only, 720p)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-trickplay/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TRICK_MODE,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Sintel 4k (WebM only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-webm-only/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE]},{name:"Sintel 4k (MP4 only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Sintel 4k (multicodec, Widevine)",
manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-widevine/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.PSSH,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},
{name:"Sintel 4k (multicodec, VTT in MP4)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-wvtt/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},
{name:"Heliocentrism (multicodec, multiperiod)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism/heliocentrism.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},{name:"Heliocentrism (multicodec, multiperiod, xlink)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism-xlink/heliocentrism.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.XLINK,shakaAssets.Feature.OFFLINE]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke-clear/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],
features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec, Widevine)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE],
licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Tears of Steel (multicodec, TTML)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-ttml/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},
{name:"Tears of Steel (multicodec, surround + stereo)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-surround/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SURROUND,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},{name:"Shaka Player History (multicodec, live, DASH)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.WEBM]},{name:"Shaka Player History (live, HLS)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4]},{name:"Multi-DRM",manifestUri:"https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.4lWwW46k-oWcah8oN18LPj5OLS5ZU-_AQv7fe0JhNjA"}},
{name:"Multi-DRM, multi-key",manifestUri:"https://media.axprod.net/TestVectors/v7-MultiDRM-MultiKey/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIKEY,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT],

@@ -50,22 +51,25 @@ licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiODAzOTliZjUtOGEyMS00MDE0LTgwNTMtZTI3ZTc0OGU5OGMwIiwiZW5jcnlwdGVkX2tleSI6ImxpTkpxVmFZa05oK01LY3hKRms3SWc9PSJ9LHsiaWQiOiI5MDk1M2UwOS02Y2IyLTQ5YTMtYTI2MC03YTVmZWZlYWQ0OTkiLCJlbmNyeXB0ZWRfa2V5Ijoia1l0SEh2cnJmQ01lVmRKNkxrYmtuZz09In0seyJpZCI6IjBlNGRhOTJiLWQwZTgtNGE2Ni04YzNmLWMyNWE5N2ViNjUzMiIsImVuY3J5cHRlZF9rZXkiOiI3dzdOWkhITE1nSjRtUUtFSzVMVE1RPT0ifSx7ImlkIjoiNTg1ZjIzM2YtMzA3Mi00NmYxLTlmYTQtNmRjMjJjNjZhMDE0IiwiZW5jcnlwdGVkX2tleSI6IkFjNFVVbVl0Qko1blBROU4xNXJjM2c9PSJ9LHsiaWQiOiI0MjIyYmQ3OC1iYzQ1LTQxYmYtYjYzZS02ZjgxNGRjMzkxZGYiLCJlbmNyeXB0ZWRfa2V5IjoiTzZGTzBmcVNXb3BwN2JqYy9ENGxNQT09In1dfX0.uF6YlKAREOmbniAeYiH070HSJhV0YS7zSKjlCtiDR5Y"}},

shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiMDg3Mjc4NmUtZjllNy00NjVmLWEzYTItNGU1YjBlZjhmYTQ1IiwiZW5jcnlwdGVkX2tleSI6IlB3NitlRVlOY3ZqWWJmc2gzWDNmbWc9PSJ9LHsiaWQiOiJjMTRmMDcwOS1mMmI5LTQ0MjctOTE2Yi02MWI1MjU4NjUwNmEiLCJlbmNyeXB0ZWRfa2V5IjoiLzErZk5paDM4bXFSdjR5Y1l6bnQvdz09In0seyJpZCI6IjhiMDI5ZTUxLWQ1NmEtNDRiZC05MTBmLWQ0YjVmZDkwZmJhMiIsImVuY3J5cHRlZF9rZXkiOiJrcTBKdVpFanBGTjhzYVRtdDU2ME9nPT0ifSx7ImlkIjoiMmQ2ZTkzODctNjBjYS00MTQ1LWFlYzItYzQwODM3YjRiMDI2IiwiZW5jcnlwdGVkX2tleSI6IlRjUlFlQld4RW9IT0tIcmFkNFNlVlE9PSJ9LHsiaWQiOiJkZTAyZjA3Zi1hMDk4LTRlZTAtYjU1Ni05MDdjMGQxN2ZiYmMiLCJlbmNyeXB0ZWRfa2V5IjoicG9lbmNTN0dnbWVHRmVvSjZQRUFUUT09In0seyJpZCI6IjkxNGU2OWY0LTBhYjMtNDUzNC05ZTlmLTk4NTM2MTVlMjZmNiIsImVuY3J5cHRlZF9rZXkiOiJlaUkvTXNsbHJRNHdDbFJUL0xObUNBPT0ifSx7ImlkIjoiZGE0NDQ1YzItZGI1ZS00OGVmLWIwOTYtM2VmMzQ3YjE2YzdmIiwiZW5jcnlwdGVkX2tleSI6IjJ3K3pkdnFycERWM3hSMGJKeTR1Z3c9PSJ9LHsiaWQiOiIyOWYwNWU4Zi1hMWFlLTQ2ZTQtODBlOS0yMmRjZDQ0Y2Q3YTEiLCJlbmNyeXB0ZWRfa2V5IjoiL3hsU0hweHdxdTNnby9nbHBtU2dhUT09In0seyJpZCI6IjY5ZmU3MDc3LWRhZGQtNGI1NS05NmNkLWMzZWRiMzk5MTg1MyIsImVuY3J5cHRlZF9rZXkiOiJ6dTZpdXpOMnBzaTBaU3hRaUFUa1JRPT0ifV19fQ.BXr93Et1krYMVs-CUnf7F3ywJWFRtxYdkR7Qn4w3-to"}},
{name:"Clear, single-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT]},{name:"Clear, multi-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest_MultiPeriod.mpd",
encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT]},{name:"Clear, Live DASH",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,
source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.WEBVTT]},{name:"Clear, Live HLS",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.m3u8",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.WEBVTT]},
{name:"Tears of Steel",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.ULTRA_HIGH_DEFINITION]},{name:"Tears of Steel (Widevine)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-widevine.ism/.mpd",
{name:"Clear, single-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Clear, multi-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest_MultiPeriod.mpd",
encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Clear, Live DASH",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.mpd",
encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.WEBVTT]},{name:"Clear, Live HLS",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.m3u8",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,
shakaAssets.Feature.WEBVTT]},{name:"Tears of Steel",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.OFFLINE]},{name:"Tears of Steel (Widevine)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-widevine.ism/.mpd",
encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Tears of Steel (PlayReady)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-playready.ism/.mpd",
encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[shakaAssets.KeySystem.PLAYREADY],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION],licenseServers:{"com.microsoft.playready":"https://test.playready.microsoft.com/service/rightsmanager.asmx?PlayRight=1&UseSimpleNonPersistentLicense=1"}},
{name:"Tears of Steel (subtitles)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-en.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SEGMENTED_TEXT,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION]},
{name:"Big Buck Bunny",manifestUri:"https://dash.akamaized.net/dash264/TestCases/1c/qualcomm/2/MultiRate.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Live sim (2s segments)",manifestUri:"https://vm2.dashif.org/livesim/utc_head/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Live sim (6s segments)",manifestUri:"https://vm2.dashif.org/livesim/utc_head/testpic_6s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Live sim (multi-period)",manifestUri:"https://vm2.dashif.org/livesim/utc_head/periods_20/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,
drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Big Buck Bunny (Live)",manifestUri:"https://wowzaec2demo.streamlock.net/live/bigbuckbunny/manifest_mpm4sav_mvtime.mpd",encoder:shakaAssets.Encoder.WOWZA,source:shakaAssets.Encoder.WOWZA,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Art of Motion (DASH)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd",
encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"Art of Motion (HLS, TS)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS]},
{name:"Sintel (HLS, TS, 4k)",manifestUri:"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS,shakaAssets.Feature.ULTRA_HIGH_DEFINITION]},{name:"Big Buck Bunny",manifestUri:"https://video.wmspanel.com/local/raw/BigBuckBunny_320x180.mp4/manifest.mpd",disabled:!0,encoder:shakaAssets.Encoder.NIMBLE_STREAMER,source:shakaAssets.Source.NIMBLE_STREAMER,
drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Azure Trailer",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest(format=mpd-time-csf)",encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Big Buck Bunny",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/622b189f-ec39-43f2-93a2-201ac4e31ce1/BigBuckBunny.ism/manifest(format=mpd-time-csf)",
disabled:!0,encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE],licenseServers:{"com.widevine.alpha":"https://amssamples.keydelivery.mediaservices.windows.net/Widevine/?KID=1ab45440-532c-4399-94dc-5c5ad9584bac","com.microsoft.playready":"https://amssamples.keydelivery.mediaservices.windows.net/PlayReady/"}},
{name:"Tears Of Steel (external text)",manifestUri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TearsOfSteel_WAMEH264SmoothStreaming720p.ism/manifest(format=mpd-time-csf)",extraText:[{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-en.vtt",language:"en",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-es.vtt",
language:"es",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-fr.vtt",language:"fr",kind:"subtitle",mime:"text/vtt"}],encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBVTT]},{name:"live profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live/mp4-live-mpd-AV-BS.mpd",
disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"live profile with five periods",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live-periods/mp4-live-periods-mpd.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"main profile, single file",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-single/mp4-main-single-mpd-AV-NBS.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION]},{name:"main profile, mutiple files",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-multi/mp4-main-multi-mpd-AV-BS.mpd",
disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION]},{name:"onDemand profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-onDemand/mp4-onDemand-mpd-AV.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE]},{name:"main profile, open GOP",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-ogop/mp4-main-ogop-mpd-AV-BS.mpd",
disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"full profile, gradual decoding refresh",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-full-gdr/mp4-full-gdr-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"Tears of Steel (subtitles)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-en.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SEGMENTED_TEXT,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.OFFLINE]},{name:"Big Buck Bunny",manifestUri:"https://dash.akamaized.net/dash264/TestCases/1c/qualcomm/2/MultiRate.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.OFFLINE]},{name:"Live sim (2s segments)",manifestUri:"https://livesim.dashif.org/livesim/utc_head/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,
drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"Live sim SegmentTimeline w $Time$ (6s segments)",manifestUri:"https://livesim.dashif.org/livesim/segtimeline_1/utc_head/testpic_6s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_TIME]},{name:"Live sim SegmentTimeline w $Number$ (6s segments)",
manifestUri:"https://livesim.dashif.org/livesim/segtimelinenr_1/utc_head/testpic_6s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_NUMBER]},{name:"Live sim SegmentTimeline StartOver [-20s, +20s] (2s segments)",manifestUri:"https://livesim.dashif.org/livesim/segtimeline_1/startrel_-20/stoprel_20/timeoffset_0/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,
source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_TIME]},{name:"Live sim StartOver SegTmpl Duration [-20s, +20s] (2s segments)",manifestUri:"https://livesim.dashif.org/livesim/startrel_-20/stoprel_20/timeoffset_0/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"Live sim SegTmpl Duration (multi-period 60s)",manifestUri:"https://livesim.dashif.org/livesim/utc_head/periods_60/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"Big Buck Bunny (Live)",manifestUri:"https://wowzaec2demo.streamlock.net/live/bigbuckbunny/manifest_mpm4sav_mvtime.mpd",encoder:shakaAssets.Encoder.WOWZA,
source:shakaAssets.Encoder.WOWZA,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Art of Motion (DASH)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.OFFLINE]},
{name:"Art of Motion (HLS, TS)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS,shakaAssets.Feature.OFFLINE]},{name:"Sintel (HLS, TS, 4k)",manifestUri:"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,
drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.OFFLINE]},{name:"Big Buck Bunny",manifestUri:"https://video.wmspanel.com/local/raw/BigBuckBunny_320x180.mp4/manifest.mpd",disabled:!0,encoder:shakaAssets.Encoder.NIMBLE_STREAMER,source:shakaAssets.Source.NIMBLE_STREAMER,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Azure Trailer",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest(format=mpd-time-csf)",
encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.OFFLINE]},{name:"Big Buck Bunny",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/622b189f-ec39-43f2-93a2-201ac4e31ce1/BigBuckBunny.ism/manifest(format=mpd-time-csf)",encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[shakaAssets.KeySystem.PLAYREADY,
shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://amssamples.keydelivery.mediaservices.windows.net/Widevine/?KID=1ab45440-532c-4399-94dc-5c5ad9584bac","com.microsoft.playready":"https://amssamples.keydelivery.mediaservices.windows.net/PlayReady/"}},{name:"Tears Of Steel (external text)",manifestUri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TearsOfSteel_WAMEH264SmoothStreaming720p.ism/manifest(format=mpd-time-csf)",
extraText:[{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-en.vtt",language:"en",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-es.vtt",language:"es",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-fr.vtt",language:"fr",kind:"subtitle",mime:"text/vtt"}],encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,
source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"live profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live/mp4-live-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"live profile with five periods",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live-periods/mp4-live-periods-mpd.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.OFFLINE]},{name:"main profile, single file",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-single/mp4-main-single-mpd-AV-NBS.mpd",
encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION,shakaAssets.Feature.OFFLINE]},{name:"main profile, mutiple files",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-multi/mp4-main-multi-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION]},
{name:"onDemand profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-onDemand/mp4-onDemand-mpd-AV.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.OFFLINE]},{name:"main profile, open GOP",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-ogop/mp4-main-ogop-mpd-AV-BS.mpd",disabled:!0,
encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"full profile, gradual decoding refresh",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-full-gdr/mp4-full-gdr-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"Multi DRM - 8 Byte IV",manifestUri:"https://content.uplynk.com/847859273a4b4a81959d8fea181672a4.mpd?pr.version=2&pr.playenabler=B621D91F-EDCC-4035-8D4B-DC71760D43E9&pr.securitylevel=150",encoder:shakaAssets.Encoder.UPLYNK,source:shakaAssets.Source.UPLYNK,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.PSSH,shakaAssets.Feature.MULTIKEY,shakaAssets.Feature.AESCTR_8_BYTE_IV,shakaAssets.Feature.SEGMENT_LIST_DURATION,shakaAssets.Feature.HIGH_DEFINITION],

@@ -72,0 +76,0 @@ licenseServers:{"com.microsoft.playready":"https://content.uplynk.com/pr","com.widevine.alpha":"https://content.uplynk.com/wv"},requestFilter:shakaAssets.UplynkRequestFilter,responseFilter:shakaAssets.UplynkResponseFilter},{name:"Multi DRM - MultiPeriod - 8 Byte IV",manifestUri:"https://content.uplynk.com/054225d59be2454fabdca3e96912d847.mpd?ad=cleardash&pr.version=2&pr.playenabler=B621D91F-EDCC-4035-8D4B-DC71760D43E9&pr.securitylevel=150",encoder:shakaAssets.Encoder.UPLYNK,source:shakaAssets.Source.UPLYNK,

@@ -24,23 +24,24 @@ /*

function receiverAppInit(){window.receiver=new ShakaReceiver;window.receiver.init()}"loading"==document.readyState||"interactive"==document.readyState?window.addEventListener("load",receiverAppInit):receiverAppInit();var shakaAssets={Encoder:{UNKNOWN:"Unknown",SHAKA_PACKAGER:"Shaka packager",AXINOM:"Axinom",UNIFIED_STREAMING:"Unified Streaming",WOWZA:"Wowza",BITCODIN:"Bitcodin",NIMBLE_STREAMER:"Nimble Streamer",AZURE_MEDIA_SERVICES:"Azure Media Services",MP4BOX:"MP4Box",APPLE:"Apple",UPLYNK:"Verizon Digital Media Services"},Source:{SHAKA:"Shaka",AXINOM:"Axinom",UNIFIED_STREAMING:"Unified Streaming",DASH_IF:"DASH-IF",WOWZA:"Wowza",BITCODIN:"Bitcodin",NIMBLE_STREAMER:"Nimble Streamer",AZURE_MEDIA_SERVICES:"Azure Media Services",
GPAC:"GPAC",UPLYNK:"Verizon Digital Media Services"},KeySystem:{CLEAR_KEY:"org.w3.clearkey",PLAYREADY:"com.microsoft.playready",WIDEVINE:"com.widevine.alpha"},Feature:{SEGMENT_BASE:"SegmentBase",SEGMENT_LIST_DURATION:"SegmentList w/ @duration",SEGMENT_LIST_TIMELINE:"SegmentList w/ SegmentTimeline",SEGMENT_TEMPLATE_DURATION:"SegmentTemplate w/ @duration",SEGMENT_TEMPLATE_TIMELINE:"SegmentTemplate w/ SegmentTimeline",PSSH:"embedded PSSH",MULTIKEY:"multiple keys",MULTIPERIOD:"multiple Periods",ENCRYPTED_WITH_CLEAR:"mixing encrypted and unencrypted periods",
AESCTR_16_BYTE_IV:"encrypted with AES CTR Mode using a 16 byte IV",AESCTR_8_BYTE_IV:"encrypted with AES CTR Mode using a 8 byte IV",TRICK_MODE:"special trick mode track",XLINK:"xlink",SUBTITLES:"subtitles",CAPTIONS:"captions",SEGMENTED_TEXT:"segmented text",EMBEDDED_TEXT:"embedded text",MULTIPLE_LANGUAGES:"multiple languages",LIVE:"live",WEBM:"WebM",MP4:"mp4",MP2TS:"MPEG-2 TS",TTML:"TTML",WEBVTT:"WebVTT",HIGH_DEFINITION:"high definition",ULTRA_HIGH_DEFINITION:"ultra-high definition",SURROUND:"surround sound",
HLS:"HLS"},UplynkResponseFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.MANIFEST&&(shakaAssets.uplynk_prefix=b.headers["x-uplynk-prefix"]?b.headers["x-uplynk-prefix"]:"")},UplynkRequestFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.LICENSE&&(-1!==b.uris[0].indexOf("wv")&&shakaAssets.uplynk_prefix?b.uris[0]=shakaAssets.uplynk_prefix.concat("/wv"):-1!==b.uris[0].indexOf("ck")&&shakaAssets.uplynk_prefix?b.uris[0]=shakaAssets.uplynk_prefix.concat("/ck"):-1!==b.uris[0].indexOf("pr")&&
shakaAssets.uplynk_prefix&&(b.uris[0]=shakaAssets.uplynk_prefix.concat("/pr")))}};
shakaAssets.testAssets=[{name:"Angel One (multicodec, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},{name:"Angel One (multicodec, multilingual, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Angel One (multicodec, multilingual, ClearKey server)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-clearkey/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.CLEAR_KEY],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT],licenseServers:{"org.w3.clearkey":"https://cwip-shaka-proxy.appspot.com/clearkey?_u3wDe7erb7v8Lqt8A3QDQ=ABEiM0RVZneImaq7zN3u_w"}},{name:"Angel One (HLS, MP4, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-hls/hls.m3u8",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES]},{name:"Angel One (HLS, MP4, multilingual, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine-hls/hls.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES],
licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Sintel 4k (multicodec)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},
{name:"Sintel w/ trick mode (MP4 only, 720p)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-trickplay/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TRICK_MODE,shakaAssets.Feature.WEBVTT]},{name:"Sintel 4k (WebM only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-webm-only/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},{name:"Sintel 4k (MP4 only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT]},{name:"Sintel 4k (multicodec, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-widevine/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.PSSH,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Sintel 4k (multicodec, VTT in MP4)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-wvtt/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT]},{name:"Heliocentrism (multicodec, multiperiod)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism/heliocentrism.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.WEBM]},{name:"Heliocentrism (multicodec, multiperiod, xlink)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism-xlink/heliocentrism.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.XLINK]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke-clear/dash.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec, Widevine)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.WEBM],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Tears of Steel (multicodec, TTML)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-ttml/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.WEBM]},
{name:"Tears of Steel (multicodec, surround + stereo)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-surround/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SURROUND,shakaAssets.Feature.WEBM]},{name:"Shaka Player History (multicodec, live, DASH)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,
source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.WEBM]},{name:"Shaka Player History (live, HLS)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,
shakaAssets.Feature.MP4]},{name:"Multi-DRM",manifestUri:"https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT],
licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.4lWwW46k-oWcah8oN18LPj5OLS5ZU-_AQv7fe0JhNjA"}},
GPAC:"GPAC",UPLYNK:"Verizon Digital Media Services"},KeySystem:{CLEAR_KEY:"org.w3.clearkey",PLAYREADY:"com.microsoft.playready",WIDEVINE:"com.widevine.alpha"},Feature:{SEGMENT_BASE:"SegmentBase",SEGMENT_LIST_DURATION:"SegmentList w/ @duration",SEGMENT_LIST_TIMELINE:"SegmentList w/ SegmentTimeline",SEGMENT_TEMPLATE_DURATION:"SegmentTemplate w/ @duration",SEGMENT_TEMPLATE_TIMELINE:"SegmentTemplate w/ SegmentTimeline",SEGMENT_TEMPLATE_TIMELINE_TIME:"SegmentTemplate w/ SegmentTimeline $Time$",SEGMENT_TEMPLATE_TIMELINE_NUMBER:"SegmentTemplate w/ SegTimeline $Number$",
PSSH:"embedded PSSH",MULTIKEY:"multiple keys",MULTIPERIOD:"multiple Periods",ENCRYPTED_WITH_CLEAR:"mixing encrypted and unencrypted periods",AESCTR_16_BYTE_IV:"encrypted with AES CTR Mode using a 16 byte IV",AESCTR_8_BYTE_IV:"encrypted with AES CTR Mode using a 8 byte IV",TRICK_MODE:"special trick mode track",XLINK:"xlink",SUBTITLES:"subtitles",CAPTIONS:"captions",SEGMENTED_TEXT:"segmented text",EMBEDDED_TEXT:"embedded text",MULTIPLE_LANGUAGES:"multiple languages",OFFLINE:"offline",LIVE:"live",WEBM:"WebM",
MP4:"mp4",MP2TS:"MPEG-2 TS",TTML:"TTML",WEBVTT:"WebVTT",HIGH_DEFINITION:"high definition",ULTRA_HIGH_DEFINITION:"ultra-high definition",SURROUND:"surround sound",HLS:"HLS"},UplynkResponseFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.MANIFEST&&(shakaAssets.uplynk_prefix=b.headers["x-uplynk-prefix"]?b.headers["x-uplynk-prefix"]:"")},UplynkRequestFilter:function(a,b){a==shaka.net.NetworkingEngine.RequestType.LICENSE&&(-1!==b.uris[0].indexOf("wv")&&shakaAssets.uplynk_prefix?b.uris[0]=
shakaAssets.uplynk_prefix.concat("/wv"):-1!==b.uris[0].indexOf("ck")&&shakaAssets.uplynk_prefix?b.uris[0]=shakaAssets.uplynk_prefix.concat("/ck"):-1!==b.uris[0].indexOf("pr")&&shakaAssets.uplynk_prefix&&(b.uris[0]=shakaAssets.uplynk_prefix.concat("/pr")))}};
shakaAssets.testAssets=[{name:"Angel One (multicodec, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Angel One (multicodec, multilingual, Widevine)",
manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},
{name:"Angel One (multicodec, multilingual, ClearKey server)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-clearkey/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.CLEAR_KEY],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE],licenseServers:{"org.w3.clearkey":"https://cwip-shaka-proxy.appspot.com/clearkey?_u3wDe7erb7v8Lqt8A3QDQ=ABEiM0RVZneImaq7zN3u_w"}},
{name:"Angel One (HLS, MP4, multilingual)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-hls/hls.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.OFFLINE]},{name:"Angel One (HLS, MP4, multilingual, Widevine)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine-hls/hls.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,
source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPLE_LANGUAGES,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Sintel 4k (multicodec)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Sintel w/ trick mode (MP4 only, 720p)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-trickplay/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,
shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TRICK_MODE,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Sintel 4k (WebM only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-webm-only/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,
shakaAssets.Feature.OFFLINE]},{name:"Sintel 4k (MP4 only)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Sintel 4k (multicodec, Widevine)",
manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-widevine/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.PSSH,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},
{name:"Sintel 4k (multicodec, VTT in MP4)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-wvtt/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBM,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},
{name:"Heliocentrism (multicodec, multiperiod)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism/heliocentrism.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},{name:"Heliocentrism (multicodec, multiperiod, xlink)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/heliocentrism-xlink/heliocentrism.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.XLINK,shakaAssets.Feature.OFFLINE]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke-clear/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],
features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},{name:'"Dig the Uke" by Stefan Kartenberg (audio only, multicodec, Widevine)',manifestUri:"https://storage.googleapis.com/shaka-demo-assets/dig-the-uke/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE],
licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Tears of Steel (multicodec, TTML)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-ttml/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},
{name:"Tears of Steel (multicodec, surround + stereo)",manifestUri:"https://storage.googleapis.com/shaka-demo-assets/tos-surround/dash.mpd",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.SURROUND,shakaAssets.Feature.WEBM,shakaAssets.Feature.OFFLINE]},{name:"Shaka Player History (multicodec, live, DASH)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.mpd",
encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.WEBM]},{name:"Shaka Player History (live, HLS)",manifestUri:"https://storage.googleapis.com/shaka-live-assets/player-source.m3u8",encoder:shakaAssets.Encoder.SHAKA_PACKAGER,source:shakaAssets.Source.SHAKA,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4]},{name:"Multi-DRM",manifestUri:"https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.4lWwW46k-oWcah8oN18LPj5OLS5ZU-_AQv7fe0JhNjA"}},
{name:"Multi-DRM, multi-key",manifestUri:"https://media.axprod.net/TestVectors/v7-MultiDRM-MultiKey/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIKEY,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT],

@@ -50,22 +51,25 @@ licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiODAzOTliZjUtOGEyMS00MDE0LTgwNTMtZTI3ZTc0OGU5OGMwIiwiZW5jcnlwdGVkX2tleSI6ImxpTkpxVmFZa05oK01LY3hKRms3SWc9PSJ9LHsiaWQiOiI5MDk1M2UwOS02Y2IyLTQ5YTMtYTI2MC03YTVmZWZlYWQ0OTkiLCJlbmNyeXB0ZWRfa2V5Ijoia1l0SEh2cnJmQ01lVmRKNkxrYmtuZz09In0seyJpZCI6IjBlNGRhOTJiLWQwZTgtNGE2Ni04YzNmLWMyNWE5N2ViNjUzMiIsImVuY3J5cHRlZF9rZXkiOiI3dzdOWkhITE1nSjRtUUtFSzVMVE1RPT0ifSx7ImlkIjoiNTg1ZjIzM2YtMzA3Mi00NmYxLTlmYTQtNmRjMjJjNjZhMDE0IiwiZW5jcnlwdGVkX2tleSI6IkFjNFVVbVl0Qko1blBROU4xNXJjM2c9PSJ9LHsiaWQiOiI0MjIyYmQ3OC1iYzQ1LTQxYmYtYjYzZS02ZjgxNGRjMzkxZGYiLCJlbmNyeXB0ZWRfa2V5IjoiTzZGTzBmcVNXb3BwN2JqYy9ENGxNQT09In1dfX0.uF6YlKAREOmbniAeYiH070HSJhV0YS7zSKjlCtiDR5Y"}},

shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT],licenseServers:{"com.widevine.alpha":"https://drm-widevine-licensing.axtest.net/AcquireLicense","com.microsoft.playready":"https://drm-playready-licensing.axtest.net/AcquireLicense"},licenseRequestHeaders:{"X-AxDRM-Message":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiMDg3Mjc4NmUtZjllNy00NjVmLWEzYTItNGU1YjBlZjhmYTQ1IiwiZW5jcnlwdGVkX2tleSI6IlB3NitlRVlOY3ZqWWJmc2gzWDNmbWc9PSJ9LHsiaWQiOiJjMTRmMDcwOS1mMmI5LTQ0MjctOTE2Yi02MWI1MjU4NjUwNmEiLCJlbmNyeXB0ZWRfa2V5IjoiLzErZk5paDM4bXFSdjR5Y1l6bnQvdz09In0seyJpZCI6IjhiMDI5ZTUxLWQ1NmEtNDRiZC05MTBmLWQ0YjVmZDkwZmJhMiIsImVuY3J5cHRlZF9rZXkiOiJrcTBKdVpFanBGTjhzYVRtdDU2ME9nPT0ifSx7ImlkIjoiMmQ2ZTkzODctNjBjYS00MTQ1LWFlYzItYzQwODM3YjRiMDI2IiwiZW5jcnlwdGVkX2tleSI6IlRjUlFlQld4RW9IT0tIcmFkNFNlVlE9PSJ9LHsiaWQiOiJkZTAyZjA3Zi1hMDk4LTRlZTAtYjU1Ni05MDdjMGQxN2ZiYmMiLCJlbmNyeXB0ZWRfa2V5IjoicG9lbmNTN0dnbWVHRmVvSjZQRUFUUT09In0seyJpZCI6IjkxNGU2OWY0LTBhYjMtNDUzNC05ZTlmLTk4NTM2MTVlMjZmNiIsImVuY3J5cHRlZF9rZXkiOiJlaUkvTXNsbHJRNHdDbFJUL0xObUNBPT0ifSx7ImlkIjoiZGE0NDQ1YzItZGI1ZS00OGVmLWIwOTYtM2VmMzQ3YjE2YzdmIiwiZW5jcnlwdGVkX2tleSI6IjJ3K3pkdnFycERWM3hSMGJKeTR1Z3c9PSJ9LHsiaWQiOiIyOWYwNWU4Zi1hMWFlLTQ2ZTQtODBlOS0yMmRjZDQ0Y2Q3YTEiLCJlbmNyeXB0ZWRfa2V5IjoiL3hsU0hweHdxdTNnby9nbHBtU2dhUT09In0seyJpZCI6IjY5ZmU3MDc3LWRhZGQtNGI1NS05NmNkLWMzZWRiMzk5MTg1MyIsImVuY3J5cHRlZF9rZXkiOiJ6dTZpdXpOMnBzaTBaU3hRaUFUa1JRPT0ifV19fQ.BXr93Et1krYMVs-CUnf7F3ywJWFRtxYdkR7Qn4w3-to"}},
{name:"Clear, single-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT]},{name:"Clear, multi-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest_MultiPeriod.mpd",
encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT]},{name:"Clear, Live DASH",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,
source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.WEBVTT]},{name:"Clear, Live HLS",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.m3u8",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.WEBVTT]},
{name:"Tears of Steel",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.ULTRA_HIGH_DEFINITION]},{name:"Tears of Steel (Widevine)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-widevine.ism/.mpd",
{name:"Clear, single-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest.mpd",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Clear, multi-Period",manifestUri:"https://media.axprod.net/TestVectors/v7-Clear/Manifest_MultiPeriod.mpd",
encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"Clear, Live DASH",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.mpd",
encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.WEBVTT]},{name:"Clear, Live HLS",manifestUri:"https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.m3u8",encoder:shakaAssets.Encoder.AXINOM,source:shakaAssets.Source.AXINOM,drm:[],features:[shakaAssets.Feature.HLS,shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,
shakaAssets.Feature.WEBVTT]},{name:"Tears of Steel",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.OFFLINE]},{name:"Tears of Steel (Widevine)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-widevine.ism/.mpd",
encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION],licenseServers:{"com.widevine.alpha":"https://cwip-shaka-proxy.appspot.com/no_auth"}},{name:"Tears of Steel (PlayReady)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-playready.ism/.mpd",
encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[shakaAssets.KeySystem.PLAYREADY],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION],licenseServers:{"com.microsoft.playready":"https://test.playready.microsoft.com/service/rightsmanager.asmx?PlayRight=1&UseSimpleNonPersistentLicense=1"}},
{name:"Tears of Steel (subtitles)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-en.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SEGMENTED_TEXT,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION]},
{name:"Big Buck Bunny",manifestUri:"https://dash.akamaized.net/dash264/TestCases/1c/qualcomm/2/MultiRate.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Live sim (2s segments)",manifestUri:"https://vm2.dashif.org/livesim/utc_head/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Live sim (6s segments)",manifestUri:"https://vm2.dashif.org/livesim/utc_head/testpic_6s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Live sim (multi-period)",manifestUri:"https://vm2.dashif.org/livesim/utc_head/periods_20/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,
drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Big Buck Bunny (Live)",manifestUri:"https://wowzaec2demo.streamlock.net/live/bigbuckbunny/manifest_mpm4sav_mvtime.mpd",encoder:shakaAssets.Encoder.WOWZA,source:shakaAssets.Encoder.WOWZA,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Art of Motion (DASH)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd",
encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"Art of Motion (HLS, TS)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS]},
{name:"Sintel (HLS, TS, 4k)",manifestUri:"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS,shakaAssets.Feature.ULTRA_HIGH_DEFINITION]},{name:"Big Buck Bunny",manifestUri:"https://video.wmspanel.com/local/raw/BigBuckBunny_320x180.mp4/manifest.mpd",disabled:!0,encoder:shakaAssets.Encoder.NIMBLE_STREAMER,source:shakaAssets.Source.NIMBLE_STREAMER,
drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Azure Trailer",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest(format=mpd-time-csf)",encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Big Buck Bunny",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/622b189f-ec39-43f2-93a2-201ac4e31ce1/BigBuckBunny.ism/manifest(format=mpd-time-csf)",
disabled:!0,encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE],licenseServers:{"com.widevine.alpha":"https://amssamples.keydelivery.mediaservices.windows.net/Widevine/?KID=1ab45440-532c-4399-94dc-5c5ad9584bac","com.microsoft.playready":"https://amssamples.keydelivery.mediaservices.windows.net/PlayReady/"}},
{name:"Tears Of Steel (external text)",manifestUri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TearsOfSteel_WAMEH264SmoothStreaming720p.ism/manifest(format=mpd-time-csf)",extraText:[{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-en.vtt",language:"en",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-es.vtt",
language:"es",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-fr.vtt",language:"fr",kind:"subtitle",mime:"text/vtt"}],encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBVTT]},{name:"live profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live/mp4-live-mpd-AV-BS.mpd",
disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"live profile with five periods",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live-periods/mp4-live-periods-mpd.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"main profile, single file",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-single/mp4-main-single-mpd-AV-NBS.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION]},{name:"main profile, mutiple files",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-multi/mp4-main-multi-mpd-AV-BS.mpd",
disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION]},{name:"onDemand profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-onDemand/mp4-onDemand-mpd-AV.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE]},{name:"main profile, open GOP",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-ogop/mp4-main-ogop-mpd-AV-BS.mpd",
disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"full profile, gradual decoding refresh",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-full-gdr/mp4-full-gdr-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"Tears of Steel (subtitles)",manifestUri:"https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-en.ism/.mpd",encoder:shakaAssets.Encoder.UNIFIED_STREAMING,source:shakaAssets.Source.UNIFIED_STREAMING,drm:[],features:[shakaAssets.Feature.EMBEDDED_TEXT,shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SEGMENTED_TEXT,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.TTML,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.OFFLINE]},{name:"Big Buck Bunny",manifestUri:"https://dash.akamaized.net/dash264/TestCases/1c/qualcomm/2/MultiRate.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.OFFLINE]},{name:"Live sim (2s segments)",manifestUri:"https://livesim.dashif.org/livesim/utc_head/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,
drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"Live sim SegmentTimeline w $Time$ (6s segments)",manifestUri:"https://livesim.dashif.org/livesim/segtimeline_1/utc_head/testpic_6s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_TIME]},{name:"Live sim SegmentTimeline w $Number$ (6s segments)",
manifestUri:"https://livesim.dashif.org/livesim/segtimelinenr_1/utc_head/testpic_6s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_NUMBER]},{name:"Live sim SegmentTimeline StartOver [-20s, +20s] (2s segments)",manifestUri:"https://livesim.dashif.org/livesim/segtimeline_1/startrel_-20/stoprel_20/timeoffset_0/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,
source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE_TIME]},{name:"Live sim StartOver SegTmpl Duration [-20s, +20s] (2s segments)",manifestUri:"https://livesim.dashif.org/livesim/startrel_-20/stoprel_20/timeoffset_0/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"Live sim SegTmpl Duration (multi-period 60s)",manifestUri:"https://livesim.dashif.org/livesim/utc_head/periods_60/testpic_2s/Manifest.mpd",encoder:shakaAssets.Encoder.UNKNOWN,source:shakaAssets.Source.DASH_IF,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"Big Buck Bunny (Live)",manifestUri:"https://wowzaec2demo.streamlock.net/live/bigbuckbunny/manifest_mpm4sav_mvtime.mpd",encoder:shakaAssets.Encoder.WOWZA,
source:shakaAssets.Encoder.WOWZA,drm:[],features:[shakaAssets.Feature.LIVE,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Art of Motion (DASH)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.OFFLINE]},
{name:"Art of Motion (HLS, TS)",manifestUri:"https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS,shakaAssets.Feature.OFFLINE]},{name:"Sintel (HLS, TS, 4k)",manifestUri:"https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8",encoder:shakaAssets.Encoder.BITCODIN,source:shakaAssets.Source.BITCODIN,
drm:[],features:[shakaAssets.Feature.HIGH_DEFINITION,shakaAssets.Feature.HLS,shakaAssets.Feature.MP2TS,shakaAssets.Feature.ULTRA_HIGH_DEFINITION,shakaAssets.Feature.OFFLINE]},{name:"Big Buck Bunny",manifestUri:"https://video.wmspanel.com/local/raw/BigBuckBunny_320x180.mp4/manifest.mpd",disabled:!0,encoder:shakaAssets.Encoder.NIMBLE_STREAMER,source:shakaAssets.Source.NIMBLE_STREAMER,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE]},{name:"Azure Trailer",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest(format=mpd-time-csf)",
encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.OFFLINE]},{name:"Big Buck Bunny",manifestUri:"https://amssamples.streaming.mediaservices.windows.net/622b189f-ec39-43f2-93a2-201ac4e31ce1/BigBuckBunny.ism/manifest(format=mpd-time-csf)",encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[shakaAssets.KeySystem.PLAYREADY,
shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.OFFLINE],licenseServers:{"com.widevine.alpha":"https://amssamples.keydelivery.mediaservices.windows.net/Widevine/?KID=1ab45440-532c-4399-94dc-5c5ad9584bac","com.microsoft.playready":"https://amssamples.keydelivery.mediaservices.windows.net/PlayReady/"}},{name:"Tears Of Steel (external text)",manifestUri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TearsOfSteel_WAMEH264SmoothStreaming720p.ism/manifest(format=mpd-time-csf)",
extraText:[{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-en.vtt",language:"en",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-es.vtt",language:"es",kind:"subtitle",mime:"text/vtt"},{uri:"https://ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-fr.vtt",language:"fr",kind:"subtitle",mime:"text/vtt"}],encoder:shakaAssets.Encoder.AZURE_MEDIA_SERVICES,
source:shakaAssets.Source.AZURE_MEDIA_SERVICES,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE,shakaAssets.Feature.SUBTITLES,shakaAssets.Feature.WEBVTT,shakaAssets.Feature.OFFLINE]},{name:"live profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live/mp4-live-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"live profile with five periods",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live-periods/mp4-live-periods-mpd.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.MULTIPERIOD,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,shakaAssets.Feature.OFFLINE]},{name:"main profile, single file",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-single/mp4-main-single-mpd-AV-NBS.mpd",
encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION,shakaAssets.Feature.OFFLINE]},{name:"main profile, mutiple files",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-multi/mp4-main-multi-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_LIST_DURATION]},
{name:"onDemand profile",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-onDemand/mp4-onDemand-mpd-AV.mpd",encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_BASE,shakaAssets.Feature.OFFLINE]},{name:"main profile, open GOP",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-ogop/mp4-main-ogop-mpd-AV-BS.mpd",disabled:!0,
encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},{name:"full profile, gradual decoding refresh",manifestUri:"https://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-full-gdr/mp4-full-gdr-mpd-AV-BS.mpd",disabled:!0,encoder:shakaAssets.Encoder.MP4BOX,source:shakaAssets.Source.GPAC,drm:[],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION]},
{name:"Multi DRM - 8 Byte IV",manifestUri:"https://content.uplynk.com/847859273a4b4a81959d8fea181672a4.mpd?pr.version=2&pr.playenabler=B621D91F-EDCC-4035-8D4B-DC71760D43E9&pr.securitylevel=150",encoder:shakaAssets.Encoder.UPLYNK,source:shakaAssets.Source.UPLYNK,drm:[shakaAssets.KeySystem.PLAYREADY,shakaAssets.KeySystem.WIDEVINE],features:[shakaAssets.Feature.MP4,shakaAssets.Feature.PSSH,shakaAssets.Feature.MULTIKEY,shakaAssets.Feature.AESCTR_8_BYTE_IV,shakaAssets.Feature.SEGMENT_LIST_DURATION,shakaAssets.Feature.HIGH_DEFINITION],

@@ -72,0 +76,0 @@ licenseServers:{"com.microsoft.playready":"https://content.uplynk.com/pr","com.widevine.alpha":"https://content.uplynk.com/wv"},requestFilter:shakaAssets.UplynkRequestFilter,responseFilter:shakaAssets.UplynkResponseFilter},{name:"Multi DRM - MultiPeriod - 8 Byte IV",manifestUri:"https://content.uplynk.com/054225d59be2454fabdca3e96912d847.mpd?ad=cleardash&pr.version=2&pr.playenabler=B621D91F-EDCC-4035-8D4B-DC71760D43E9&pr.securitylevel=150",encoder:shakaAssets.Encoder.UPLYNK,source:shakaAssets.Source.UPLYNK,

@@ -690,2 +690,4 @@ /**

* ABR configuration and settings.
* @property {shaka.extern.OfflineConfiguration} offline
* Offline configuration and settings.
* @property {string} preferredAudioLanguage

@@ -692,0 +694,0 @@ * The preferred language to use for audio tracks. If not given it will use

@@ -284,2 +284,8 @@ /**

if (value instanceof Uint8Array) {
// Some of our code cares about Uint8Arrays actually being Uint8Arrays,
// so this gives them special treatment.
return shaka.cast.CastUtils.unpackUint8Array_(value);
}
if (typeof value == 'number') {

@@ -316,2 +322,5 @@ // NaN and infinity cannot be represented directly in JSON.

return shaka.cast.CastUtils.simulateTimeRanges_(value);
} else if (value && typeof value == 'object' &&
value['__type__'] == 'Uint8Array') {
return shaka.cast.CastUtils.makeUint8Array_(value);
}

@@ -365,1 +374,25 @@ return value;

};
/**
* @param {!Uint8Array} array
* @return {Object}
* @private
*/
shaka.cast.CastUtils.unpackUint8Array_ = function(array) {
return {
'__type__': 'Uint8Array', // a signal to deserialize
'entries': Array.from(array),
};
};
/**
* Creates a Uint8Array object from data sent by the cast receiver.
* @param {?} obj
* @return {Uint8Array}
* @private
*/
shaka.cast.CastUtils.makeUint8Array_ = function(obj) {
return new Uint8Array(obj['entries']);
};

@@ -485,4 +485,6 @@ /**

if (locations.length > 0) {
this.manifestUris_ = locations;
manifestBaseUris = locations;
const absoluteLocations = shaka.util.ManifestParserUtils.resolveUris(
manifestBaseUris, locations);
this.manifestUris_ = absoluteLocations;
manifestBaseUris = absoluteLocations;
}

@@ -489,0 +491,0 @@

@@ -58,2 +58,11 @@ /**

*/
shaka.log.alwaysError = function() {};
/**
* This always logs to the console, even in Release mode. This should only be
* used for deprecation messages and things the app should never ignore.
*
* @type {function(*, ...*)}
*/
shaka.log.alwaysWarn = function() {};

@@ -126,2 +135,3 @@

shaka.log.alwaysWarn = console.warn.bind(console);
shaka.log.alwaysError = console.error.bind(console);

@@ -128,0 +138,0 @@ if (goog.DEBUG) {

@@ -31,3 +31,3 @@ /**

*
* @param {string} uri
* @param {string} absoluteUri An absolute, final URI after redirects.
* @param {!shaka.hls.PlaylistType} type

@@ -40,5 +40,9 @@ * @param {!Array.<shaka.hls.Tag>} tags

*/
shaka.hls.Playlist = function(uri, type, tags, opt_segments) {
/** @const {string} */
this.uri = uri;
shaka.hls.Playlist = function(absoluteUri, type, tags, opt_segments) {
/**
* An absolute, final URI after redirects.
*
* @const {string}
*/
this.absoluteUri = absoluteUri;

@@ -212,3 +216,3 @@ /** @const {shaka.hls.PlaylistType} */

*
* @param {string} uri
* @param {string} absoluteUri An absolute URI.
* @param {!Array.<shaka.hls.Tag>} tags

@@ -219,8 +223,12 @@ *

*/
shaka.hls.Segment = function(uri, tags) {
shaka.hls.Segment = function(absoluteUri, tags) {
/** @const {!Array.<shaka.hls.Tag>} */
this.tags = tags;
/** @const {string} */
this.uri = uri;
/**
* An absolute URI.
*
* @const {string}
*/
this.absoluteUri = absoluteUri;
};

@@ -45,8 +45,9 @@ /**

/**
* @param {!ArrayBuffer} data
* @param {string} uri
* @param {ArrayBuffer} data
* @param {string} absolutePlaylistUri An absolute, final URI after redirects.
* @return {!shaka.hls.Playlist}
* @throws {shaka.util.Error}
*/
shaka.hls.ManifestTextParser.prototype.parsePlaylist = function(data, uri) {
shaka.hls.ManifestTextParser.prototype.parsePlaylist =
function(data, absolutePlaylistUri) {
const MEDIA_PLAYLIST_TAGS = shaka.hls.ManifestTextParser.MEDIA_PLAYLIST_TAGS;

@@ -59,3 +60,3 @@ const SEGMENT_TAGS = shaka.hls.ManifestTextParser.SEGMENT_TAGS;

let lines = str.split(/\n+/m);
const lines = str.split(/\n+/m);

@@ -77,3 +78,3 @@ if (!/^#EXTM3U($|[ \t\n])/m.test(lines[0])) {

if (!shaka.hls.Utils.isComment(lines[i])) {
let tag = this.parseTag_(lines[i]);
const tag = this.parseTag_(lines[i]);
// These tags won't actually be used, so don't increment the global id.

@@ -92,3 +93,3 @@ this.globalId_ -= 1;

/** {Array.<shaka.hls.Tag>} */
let tags = [];
const tags = [];
for (let i = 1; i < lines.length;) {

@@ -101,4 +102,4 @@ // Skip comments

let tag = this.parseTag_(lines[i]);
if (SEGMENT_TAGS.indexOf(tag.name) >= 0) {
const tag = this.parseTag_(lines[i]);
if (SEGMENT_TAGS.includes(tag.name)) {
if (playlistType != shaka.hls.PlaylistType.MEDIA) {

@@ -112,5 +113,7 @@ // Only media playlists should contain segment tags

let segmentsData = lines.splice(i, lines.length - i);
let segments = this.parseSegments_(segmentsData, tags);
return new shaka.hls.Playlist(uri, playlistType, tags, segments);
const segmentsData = lines.splice(i, lines.length - i);
const segments = this.parseSegments_(
absolutePlaylistUri, segmentsData, tags);
return new shaka.hls.Playlist(
absolutePlaylistUri, playlistType, tags, segments);
}

@@ -121,6 +124,6 @@

// An EXT-X-STREAM-INF tag is followed by a uri of a media playlist.
// Add the uri to the tag object.
// An EXT-X-STREAM-INF tag is followed by a URI of a media playlist.
// Add the URI to the tag object.
if (tag.name == 'EXT-X-STREAM-INF') {
let tagUri = new shaka.hls.Attribute('URI', lines[i]);
const tagUri = new shaka.hls.Attribute('URI', lines[i]);
tag.addAttribute(tagUri);

@@ -131,3 +134,3 @@ i += 1;

return new shaka.hls.Playlist(uri, playlistType, tags);
return new shaka.hls.Playlist(absolutePlaylistUri, playlistType, tags);
};

@@ -139,2 +142,3 @@

*
* @param {string} absoluteMediaPlaylistUri
* @param {!Array.<string>} lines

@@ -147,3 +151,3 @@ * @param {!Array.<!shaka.hls.Tag>} playlistTags

shaka.hls.ManifestTextParser.prototype.parseSegments_ =
function(lines, playlistTags) {
function(absoluteMediaPlaylistUri, lines, playlistTags) {
/** @type {!Array.<shaka.hls.Segment>} */

@@ -166,5 +170,8 @@ let segments = [];

} else {
let uri = line.trim();
// The uri appears after all of the tags describing the segment.
let segment = new shaka.hls.Segment(uri, segmentTags);
const verbatimSegmentUri = line.trim();
const absoluteSegmentUri = shaka.hls.Utils.constructAbsoluteUri(
absoluteMediaPlaylistUri, verbatimSegmentUri);
// The URI appears after all of the tags describing the segment.
const segment = new shaka.hls.Segment(absoluteSegmentUri, segmentTags);
segments.push(segment);

@@ -171,0 +178,0 @@ segmentTags = [];

@@ -27,3 +27,2 @@ /**

goog.require('shaka.util.FakeEvent');
goog.require('shaka.util.Functional');
goog.require('shaka.util.IDestroyable');

@@ -107,5 +106,21 @@ goog.require('shaka.util.ManifestParserUtils');

/** @private {boolean} */
this.destroyed_ = false;
/**
* A flag to signal when have started destroying ourselves. This will:
* 1. Stop later calls to |destroy| from trying to destroy the already
* destroyed (or currently destroying) DrmEngine.
* 2. Stop in-progress async operations from continuing.
*
* @private {boolean}
*/
this.isDestroying_ = false;
/**
* A promise that will only resolve once we have finished destroying
* ourselves, this is used to ensure that subsequent calls to |destroy| don't
* resolve before the first call to |destroy|.
*
* @private {!shaka.util.PublicPromise}
*/
this.finishedDestroyingPromise_ = new shaka.util.PublicPromise();
/** @private {boolean} */

@@ -184,48 +199,74 @@ this.isOffline_ = false;

/** @override */
shaka.media.DrmEngine.prototype.destroy = function() {
const Functional = shaka.util.Functional;
this.destroyed_ = true;
shaka.media.DrmEngine.prototype.destroy = async function() {
// If we have started destroying ourselves, wait for the common "I am finished
// being destroyed" promise to be resolved.
if (this.isDestroying_) {
await this.finishedDestroyingPromise_;
} else {
this.isDestroying_ = true;
await this.destroyNow_();
this.finishedDestroyingPromise_.resolve();
}
};
let async = [];
// Wait for sessions to close when destroying.
this.activeSessions_.forEach(function(activeSession) {
// Ignore any errors when closing the sessions. One such error would be
// an invalid state error triggered by closing a session which has not
// generated any key requests.
let close = activeSession.session.close().catch(Functional.noop);
// Due to a bug in Chrome, sometimes the Promise returned by close()
// never resolves. See issue #1093 and https://crbug.com/690583.
let closeTimeout = new Promise(function(resolve) {
setTimeout(resolve, shaka.media.DrmEngine.CLOSE_TIMEOUT_ * 1000);
});
async.push(Promise.race([close, closeTimeout]));
});
/**
* Destroy this instance of DrmEngine. This assumes that all other checks about
* "if it should" have passed.
*
* @private
*/
shaka.media.DrmEngine.prototype.destroyNow_ = async function() {
// |eventManager_| should only be |null| after we call |destroy|. Destroy it
// first so that we will stop responding to events.
await this.eventManager_.destroy();
this.eventManager_ = null;
// Since we are destroying ourselves, we don't want to react to the "all
// sessions loaded" event.
this.allSessionsLoaded_.reject();
if (this.eventManager_) {
async.push(this.eventManager_.destroy());
}
// Stop all timers. This will ensure that they do not start any new work while
// we are destroying ourselves.
this.expirationTimer_.cancel();
this.expirationTimer_ = null;
this.keyStatusTimer_.cancel();
this.keyStatusTimer_ = null;
// Close all open sessions.
const openSessions = this.activeSessions_;
this.activeSessions_ = [];
// Close all sessions before we remove media keys from the video element.
await Promise.all(openSessions.map((session) => {
return Promise.resolve().then(async () => {
shaka.log.v1('Closing session', session.sessionId);
try {
await shaka.media.DrmEngine.closeSession_(session.session);
} catch (error) {
// Ignore errors when closing the sessions. Closing a session that
// generated no key requests will throw an error.
}
});
}));
// |video_| will be |null| if we never attached to a video element.
if (this.video_) {
goog.asserts.assert(!this.video_.src, 'video src must be removed first!');
async.push(this.video_.setMediaKeys(null).catch(Functional.noop));
}
if (this.expirationTimer_) {
this.expirationTimer_.cancel();
this.expirationTimer_ = null;
}
try {
await this.video_.setMediaKeys(null);
} catch (error) {
// Ignore any failures while removing media keys from the video element.
}
if (this.keyStatusTimer_) {
this.keyStatusTimer_.cancel();
this.keyStatusTimer_ = null;
this.video_ = null;
}
// Break references to everything else we hold internally.
this.currentDrmInfo_ = null;
this.supportedTypes_ = null;
this.mediaKeys_ = null;
this.video_ = null;
this.eventManager_ = null;
this.activeSessions_ = [];
this.offlineSessionIds_ = [];

@@ -235,4 +276,2 @@ this.config_ = null;

this.playerInterface_ = null;
return Promise.all(async);
};

@@ -349,4 +388,4 @@

return Promise.all([setMediaKeys, setServerCertificate]).then(function() {
if (this.destroyed_) return Promise.reject();
return Promise.all([setMediaKeys, setServerCertificate]).then(() => {
if (this.isDestroying_) { return Promise.reject(); }

@@ -362,6 +401,6 @@ this.createOrLoad();

}
}.bind(this)).catch(function(error) {
if (this.destroyed_) return Promise.resolve(); // Ignore destruction errors
}).catch((error) => {
if (this.isDestroying_) { return; }
return Promise.reject(error);
}.bind(this));
});
};

@@ -670,3 +709,3 @@

p = p.catch(function() {
if (this.destroyed_) return Promise.reject();
if (this.isDestroying_) { return; }
return navigator.requestMediaKeySystemAccess(keySystem, [config]);

@@ -685,3 +724,3 @@ }.bind(this));

p = p.then(function(mediaKeySystemAccess) {
if (this.destroyed_) return Promise.reject();
if (this.isDestroying_) { return Promise.reject(); }

@@ -722,3 +761,5 @@ // TODO: Remove once Edge has released a fix for https://goo.gl/qMeV7v

}.bind(this)).then(function(mediaKeys) {
if (this.destroyed_) return Promise.reject();
if (this.isDestroying_) { return Promise.reject(); }
shaka.log.info('Created MediaKeys object for key system',
this.currentDrmInfo_.keySystem);

@@ -728,3 +769,3 @@ this.mediaKeys_ = mediaKeys;

}.bind(this)).catch(function(exception) {
if (this.destroyed_) return Promise.resolve(); // Ignore destruction errors
if (this.isDestroying_) { return; }

@@ -1062,3 +1103,4 @@ // Don't rewrap a shaka.util.Error from earlier in the chain:

return session.load(sessionId).then(function(present) {
if (this.destroyed_) return;
if (this.isDestroying_) { return Promise.reject(); }
shaka.log.v2('Loaded offline session', sessionId, present);

@@ -1086,3 +1128,3 @@ if (!present) {

}.bind(this), function(error) {
if (this.destroyed_) return;
if (this.isDestroying_) { return; }

@@ -1138,4 +1180,4 @@ let i = this.activeSessions_.indexOf(activeSession);

session.generateRequest(initDataType, initData.buffer).catch(function(error) {
if (this.destroyed_) return;
session.generateRequest(initDataType, initData.buffer).catch((error) => {
if (this.isDestroying_) { return; }

@@ -1148,2 +1190,12 @@ for (let i = 0; i < this.activeSessions_.length; ++i) {

}
let extended;
if (error.errorCode && error.errorCode.systemCode) {
extended = error.errorCode.systemCode;
if (extended < 0) {
extended += Math.pow(2, 32);
}
extended = '0x' + extended.toString(16);
}
this.onError_(new shaka.util.Error(

@@ -1153,4 +1205,4 @@ shaka.util.Error.Severity.CRITICAL,

shaka.util.Error.Code.FAILED_TO_GENERATE_LICENSE_REQUEST,
error.message));
}.bind(this));
error.message, error, extended));
});
};

@@ -1213,3 +1265,3 @@

.then(function(response) {
if (this.destroyed_) return Promise.reject();
if (this.isDestroying_) { return Promise.reject(); }

@@ -1238,3 +1290,3 @@ // Request succeeded, now pass the response to the CDM.

// Ignore destruction errors
if (this.destroyed_) return Promise.resolve();
if (this.isDestroying_) { return; }

@@ -1255,3 +1307,3 @@ // Request failed!

// Ignore destruction errors
if (this.destroyed_) return Promise.resolve();
if (this.isDestroying_) { return; }

@@ -1348,5 +1400,3 @@ // Session update failed!

}
goog.asserts.assert(i < this.activeSessions_.length,
'Key status change for inactive session!');
if (i == this.activeSessions_.length) return;
const found = i < this.activeSessions_.length;

@@ -1375,4 +1425,5 @@ let keyStatusMap = session.keyStatuses;

// and Edge 12 EME polyfill, which uses single-byte dummy key IDs.
// However, unlike Edge and Chromecast, Tizen doesn't have this problem.
if (this.currentDrmInfo_.keySystem == 'com.microsoft.playready' &&
keyId.byteLength == 16) {
keyId.byteLength == 16 && !/Tizen/.exec(navigator.userAgent)) {
// Read out some fields in little-endian:

@@ -1403,2 +1454,10 @@ let dataView = new DataView(keyId);

if (!found) {
// We can get a key status changed for a closed session after it has been
// removed from |activeSessions_|. If it is closed, none of its keys
// should be usable.
goog.asserts.assert(
status != 'usable', 'Usable keys found in closed session');
}
if (status == 'expired') {

@@ -1420,3 +1479,3 @@ hasExpiredKeys = true;

// the update is complete. Otherwise, we will orphan the session.
if (!this.activeSessions_[i].updatePromise) {
if (found && !this.activeSessions_[i].updatePromise) {
shaka.log.debug('Session has expired', session);

@@ -1686,2 +1745,31 @@ this.activeSessions_.splice(i, 1);

/**
* Close a drm session while accounting for a bug in Chrome. Sometimes the
* Promise returned by close() never resolves.
*
* See issue #1093 and https://crbug.com/690583.
*
* @param {!MediaKeySession} session
* @return {!Promise}
* @private
*/
shaka.media.DrmEngine.closeSession_ = async function(session) {
/** @type {!Promise.<boolean>} */
const close = session.close().then(() => true);
/** @type {!Promise.<boolean>} */
const timeout = new Promise((resolve) => {
setTimeout(() => { resolve(false); },
shaka.media.DrmEngine.CLOSE_TIMEOUT_ * 1000);
});
/** @type {boolean} */
const wasSessionClosed = await Promise.race([close, timeout]);
if (!wasSessionClosed) {
shaka.log.warning('Timeout waiting for session close');
}
};
/**
* The amount of time, in seconds, we wait to consider a session closed.

@@ -1688,0 +1776,0 @@ * This allows us to work around Chrome bug https://crbug.com/690583.

@@ -231,3 +231,3 @@ /**

} else {
shaka.log.info('Ignoring large gap at', currentTime);
shaka.log.info('Ignoring large gap at', currentTime, 'size', jumpSize);
}

@@ -234,0 +234,0 @@ }

@@ -133,3 +133,3 @@ /**

let threshold = 0.1;
if (/(Edge\/|Trident\/|Tizen)/.test(navigator.userAgent)) {
if (/(Edge\/|Trident\/|Tizen|CrKey)/.test(navigator.userAgent)) {
threshold = 0.5;

@@ -136,0 +136,0 @@ }

@@ -81,4 +81,5 @@ /**

shaka.polyfill.MediaSource.patchEndOfStreamEvents_();
} else if (version.indexOf('Version/11') >= 0) {
shaka.log.info('Patching Safari 11 MSE bugs.');
} else if (version.includes('Version/11') ||
version.includes('Version/12')) {
shaka.log.info('Patching Safari 11/12 MSE bugs.');
// Safari 11 does not correctly implement abort() on SourceBuffer.

@@ -85,0 +86,0 @@ // Calling abort() before appending a segment causes that segment to be

@@ -526,2 +526,5 @@ /**

shaka.log.debug('PatchedMediaKeysMs.onMsNeedKey_', event);
if (!event.initData) {
return;
}

@@ -628,4 +631,4 @@ // Alias

let event2 = new shaka.util.FakeEvent('message', {
messageType: isNew ? 'licenserequest' : 'licenserenewal',
message: event.message.buffer
messageType: isNew ? 'license-request' : 'license-renewal',
message: event.message.buffer,
});

@@ -632,0 +635,0 @@

@@ -28,2 +28,3 @@ /**

goog.require('shaka.util.StringUtils');
goog.require('shaka.util.XmlUtils');

@@ -30,0 +31,0 @@

@@ -667,2 +667,4 @@ /**

* <br> error.data[0] is an error message string from the browser.
* <br> error.data[1] is the error object from the browser.
* <br> error.data[2] is a string with the extended error code, if available.
*/

@@ -669,0 +671,0 @@ 'FAILED_TO_GENERATE_LICENSE_REQUEST': 6006,

@@ -53,3 +53,3 @@ /**

* These are the listener types defined in the closure extern for EventTarget.
* @typedef {EventListener|function(!Event):(boolean|undefined)}
* @typedef {EventListener|function(!Event):*}
* @exportInterface

@@ -56,0 +56,0 @@ */

{
"name": "shaka-player",
"description": "DASH/EME video player library",
"version": "2.4.5",
"version": "2.4.6",
"homepage": "https://github.com/google/shaka-player",

@@ -6,0 +6,0 @@ "author": "Google",

@@ -610,2 +610,3 @@ /**

' <Location>http://foobar2</Location>',
' <Location>foobar3</Location>',
' <Period id="1" duration="PT10S">',

@@ -630,5 +631,8 @@ ' <AdaptationSet mimeType="video/mp4">',

// Create a mock so we can verify it gives two URIs.
// The third location is a relative url, and should be resolved as an
// absolute url.
fakeNetEngine.request.and.callFake(function(type, request) {
expect(type).toBe(manifestRequest);
expect(request.uris).toEqual(['http://foobar', 'http://foobar2']);
expect(request.uris).toEqual(
['http://foobar', 'http://foobar2', 'dummy://foo/foobar3']);
let data = shaka.util.StringUtils.toUTF8(manifestText);

@@ -635,0 +639,0 @@ return shaka.util.AbortableOperation.completed(

@@ -28,3 +28,3 @@ /**

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video\n'
'video\n',
].join('');

@@ -40,11 +40,11 @@

let config;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let initSegmentData;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let segmentData;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let selfInitializingSegmentData;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let tsSegmentData;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let pastRolloverSegmentData;

@@ -163,11 +163,12 @@ /** @type {number} */

updatedMedia, updatedReferences) {
fakeNetEngine.setResponseMap({
'test:/master': toUTF8(master),
'test:/video': toUTF8(initialMedia),
'test:/video2': toUTF8(initialMedia),
'test:/audio': toUTF8(initialMedia),
'test:/init.mp4': initSegmentData,
'test:/main.mp4': segmentData,
'test:/selfInit.mp4': selfInitializingSegmentData,
});
fakeNetEngine
.setResponseText('test:/master', master)
.setResponseText('test:/video', initialMedia)
.setResponseText('test:/redirected/video', initialMedia)
.setResponseText('test:/video2', initialMedia)
.setResponseText('test:/audio', initialMedia)
.setResponseValue('test:/init.mp4', initSegmentData)
.setResponseValue('test:/main.mp4', segmentData)
.setResponseValue('test:/selfInit.mp4', selfInitializingSegmentData);
parser.start('test:/master', playerInterface)

@@ -211,5 +212,5 @@ .then(function(manifest) {

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:2,\n',
'test:/main.mp4\n'
'main.mp4\n',
].join('');

@@ -221,7 +222,7 @@

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:2,\n',
'test:/main.mp4\n',
'main.mp4\n',
'#EXTINF:2,\n',
'test:/main2.mp4\n'
'main2.mp4\n',
].join('');

@@ -272,3 +273,3 @@

'RESOLUTION=1200x940,FRAME-RATE=60\n',
'test:/video2'
'video2',
].join('');

@@ -289,3 +290,3 @@

'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'URI="test:/audio"\n'
'URI="audio"\n',
].join('');

@@ -306,3 +307,3 @@

'#EXTINF:2,\n',
'test:/main2.mp4\n'
'main2.mp4\n',
].join('');

@@ -312,3 +313,3 @@

'#EXTINF:2,\n',
'test:/main3.mp4\n'
'main3.mp4\n',
].join('');

@@ -396,6 +397,6 @@

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MEDIA-SEQUENCE:0\n',
'#EXTINF:2,\n',
'test:/main.mp4\n'
'main.mp4\n',
].join('');

@@ -406,5 +407,5 @@

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:2,\n',
'test:/main.mp4\n'
'main.mp4\n',
].join('');

@@ -415,7 +416,7 @@

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MEDIA-SEQUENCE:0\n',
'#EXT-X-BYTERANGE:121090@616\n',
'#EXTINF:2,\n',
'test:/main.mp4\n'
'main.mp4\n',
].join('');

@@ -429,8 +430,8 @@

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MEDIA-SEQUENCE:0\n',
'#EXTINF:2,\n',
'test:/main.mp4\n',
'main.mp4\n',
'#EXTINF:2,\n',
'test:/main2.mp4\n'
'main2.mp4\n',
].join('');

@@ -441,6 +442,6 @@

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MEDIA-SEQUENCE:1\n',
'#EXTINF:2,\n',
'test:/main2.mp4\n'
'main2.mp4\n',
].join('');

@@ -451,3 +452,3 @@

'#EXT-X-TARGETDURATION:5\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MEDIA-SEQUENCE:0\n',

@@ -457,3 +458,3 @@ ].join('');

mediaWithManySegments += '#EXTINF:2,\n';
mediaWithManySegments += 'test:/main.mp4\n';
mediaWithManySegments += 'main.mp4\n';
}

@@ -530,6 +531,6 @@

'#EXTM3U\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,LANGUAGE="fra",URI="test:/text"\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,LANGUAGE="fra",URI="text"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1",',
'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video\n',
'video\n',
].join('');

@@ -542,3 +543,3 @@

'#EXTINF:2,\n',
'test:/main.vtt\n',
'main.vtt\n',
].join('');

@@ -608,15 +609,25 @@

it('handles updates with redirects', function(done) {
let ref1 = ManifestParser.makeReference('test:/main.mp4',
0, 2, 4);
let ref2 = ManifestParser.makeReference('test:/main2.mp4',
1, 4, 6);
let oldRef1 = ManifestParser.makeReference('test:/main.mp4',
0, 2, 4);
let newRef1 = ManifestParser.makeReference('test:/redirected/main.mp4',
0, 2, 4);
let newRef2 = ManifestParser.makeReference('test:/redirected/main2.mp4',
1, 4, 6);
let playlistFetchCount = 0;
fakeNetEngine.setResponseFilter(function(type, response) {
// Simulate a redirect by changing the response URI
if (response.uri.indexOf('test:/redirected/') == 0) return;
response.uri = response.uri.replace('test:/', 'test:/redirected/');
// Simulate a redirect on the updated playlist by changing the
// response URI on the second playlist fetch.
if (response.uri == 'test:/video') {
playlistFetchCount++;
if (playlistFetchCount == 2) {
response.uri = 'test:/redirected/video';
}
}
});
testUpdate(done, master, media, [ref1],
mediaWithAdditionalSegment, [ref1, ref2]);
testUpdate(done, master, media, [oldRef1],
mediaWithAdditionalSegment, [newRef1, newRef2]);
});

@@ -751,6 +762,6 @@

'#EXTM3U\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,LANGUAGE="fra",URI="test:/text"\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,LANGUAGE="fra",URI="text"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1",',
'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video\n',
'video\n',
].join('');

@@ -763,3 +774,3 @@

'#EXTINF:2,\n',
'test:/main1.vtt\n',
'main1.vtt\n',
].join('');

@@ -772,5 +783,5 @@

'#EXTINF:2,\n',
'test:/main1.vtt\n',
'main1.vtt\n',
'#EXTINF:2,\n',
'test:/main2.vtt\n',
'main2.vtt\n',
].join('');

@@ -777,0 +788,0 @@

@@ -39,7 +39,7 @@ /**

let config;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let initSegmentData;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let segmentData;
/** @type {ArrayBuffer} */
/** @type {!ArrayBuffer} */
let selfInitializingSegmentData;

@@ -144,3 +144,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -151,9 +151,9 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');
let manifest = new shaka.test.ManifestGenerator()
const manifest = new shaka.test.ManifestGenerator()
.anyTimeline()

@@ -176,7 +176,7 @@ .addPeriod(jasmine.any(Number))

it('guesses video-only variant by codecs', function(done) {
it('guesses video-only variant by codecs', (done) => {
const master = [
'#EXTM3U\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1"\n',
'test:/video'
'video',
].join('');

@@ -187,6 +187,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -214,3 +214,3 @@

'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="mp4a"\n',
'test:/audio'
'audio',
].join('');

@@ -221,6 +221,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -249,5 +249,5 @@

'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1"\n',
'test:/video\n',
'video\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'CHANNELS="2",URI="test:/audio"\n'
'CHANNELS="2",URI="audio"\n',
].join('');

@@ -258,6 +258,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -294,5 +294,5 @@

'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="mp4a",AUDIO="aud1"\n',
'test:/audio\n',
'audio\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'URI="test:/audio"\n'
'URI="audio"\n',
].join('');

@@ -303,6 +303,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -332,3 +332,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video',
'video',
].join('');

@@ -340,6 +340,6 @@

'#EXT-X-MEDIA-SEQUENCE:131\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4',
'main.mp4',
].join('');

@@ -379,3 +379,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -386,6 +386,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -416,3 +416,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -423,6 +423,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -453,5 +453,5 @@

'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1"\n',
'test:/video\n',
'video\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'URI="test:/audio"\n'
'URI="audio"\n',
].join('');

@@ -462,6 +462,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -493,2 +493,69 @@

it('parses audio variant without URI', function(done) {
const master = [
'#EXTM3U\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,',
'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1"\n',
'video\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",NAME="audio"\n',
].join('');
const media = [
'#EXTM3U\n',
'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'main.mp4',
].join('');
let manifest = new shaka.test.ManifestGenerator()
.anyTimeline()
.addPeriod(0)
.addVariant(jasmine.any(Number))
.bandwidth(200)
.addVideo(jasmine.any(Number))
.anySegmentFunctions()
.anyInitSegment()
.presentationTimeOffset(0)
.mime('video/mp4', jasmine.any(String))
.frameRate(60)
.size(960, 540)
.build();
testHlsParser(master, media, manifest, done);
});
it('parses video variant without URI', function(done) {
const master = [
'#EXTM3U\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="mp4a",VIDEO="vid1"\n',
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid1",NAME="video"\n',
].join('');
const media = [
'#EXTM3U\n',
'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'main.mp4',
].join('');
let manifest = new shaka.test.ManifestGenerator()
.anyTimeline()
.addPeriod(0)
.addVariant(jasmine.any(Number))
.bandwidth(200)
.addAudio(jasmine.any(Number))
.anySegmentFunctions()
.anyInitSegment()
.presentationTimeOffset(0)
.mime('audio/mp4', jasmine.any(String))
.build();
testHlsParser(master, media, manifest, done);
});
it('parses multiple variants', function(done) {

@@ -499,10 +566,10 @@ const master = [

'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1"\n',
'test:/video\n',
'video\n',
'#EXT-X-STREAM-INF:BANDWIDTH=300,CODECS="avc1,mp4a",',
'RESOLUTION=960x540,FRAME-RATE=120,AUDIO="aud2"\n',
'test:/video2\n',
'video2\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'URI="test:/audio"\n',
'URI="audio"\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud2",LANGUAGE="fr",',
'URI="test:/audio2"\n'
'URI="audio2"\n',
].join('');

@@ -513,6 +580,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -565,7 +632,7 @@

'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1"\n',
'test:/video\n',
'video\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="en",',
'URI="test:/audio"\n',
'URI="audio"\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="fr",',
'URI="test:/audio2"\n'
'URI="audio2"\n',
].join('');

@@ -576,6 +643,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -628,3 +695,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -635,6 +702,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -664,3 +731,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -671,6 +738,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.test'
'main.test',
].join('');

@@ -706,13 +773,13 @@

'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'URI="test:/audio"\n',
'URI="audio"\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="eng",',
'URI="test:/text"\n',
'URI="text"\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub2",LANGUAGE="es",',
'URI="test:/text2"\n',
'URI="text2"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,mp4a",',
'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1",SUBTITLES="sub1"\n',
'test:/video\n',
'video\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,mp4a",',
'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1",SUBTITLES="sub2"\n',
'test:/video\n'
'video\n',
].join('');

@@ -723,6 +790,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -735,3 +802,3 @@

'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.vtt'
'main.vtt',
].join('');

@@ -794,10 +861,10 @@

'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'URI="test:/audio"\n',
'URI="audio"\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="eng",',
'URI="test:/text"\n',
'URI="text"\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub2",LANGUAGE="es",',
'URI="test:/text2"\n',
'URI="text2"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,mp4a",',
'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1"\n',
'test:/video\n'
'video\n',
].join('');

@@ -808,6 +875,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -820,3 +887,3 @@

'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.vtt'
'main.vtt',
].join('');

@@ -879,8 +946,8 @@

'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="eng",',
'URI="test:/text"\n',
'URI="text"\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
'CHANNELS="2",URI="test:/audio"\n',
'CHANNELS="2",URI="audio"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,mp4a",',
'RESOLUTION=960x540,FRAME-RATE=60,AUDIO="aud1",SUBTITLES="sub1"\n',
'test:/video\n'
'video\n',
].join('');

@@ -891,9 +958,9 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'test:/main.mp4\n',
'main.mp4\n',
'#EXTINF:5,\n',
'test:/main.mp4\n',
'main.mp4\n',
'#EXTINF:5,\n',
'test:/main.mp4\n'
'main.mp4\n',
].join('');

@@ -904,7 +971,7 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'test:/main.mp4\n',
'main.mp4\n',
'#EXTINF:5,\n',
'test:/main.mp4\n'
'main.mp4\n',
].join('');

@@ -917,3 +984,3 @@

'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.vtt'
'main.vtt',
].join('');

@@ -951,6 +1018,6 @@

'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="eng",',
'URI="test:/text"\n',
'URI="text"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,stpp.TTML.im1t",',
'RESOLUTION=960x540,FRAME-RATE=60,SUBTITLES="sub1"\n',
'test:/video\n'
'video\n',
].join('');

@@ -961,6 +1028,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1007,6 +1074,6 @@

'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="eng",',
'URI="test:/text"\n',
'URI="text"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,vtt",',
'RESOLUTION=960x540,FRAME-RATE=60,SUBTITLES="sub1"\n',
'test:/video\n'
'video\n',
].join('');

@@ -1017,6 +1084,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1029,3 +1096,3 @@

'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.foo'
'main.foo',
].join('');

@@ -1073,6 +1140,6 @@

'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="eng",',
'URI="test:/text"\n',
'URI="text"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,wvtt",',
'RESOLUTION=960x540,FRAME-RATE=60,SUBTITLES="sub1"\n',
'test:/video\n'
'video\n',
].join('');

@@ -1083,6 +1150,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1130,4 +1197,4 @@

'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="test:/video"'
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="video"',
].join('');

@@ -1138,6 +1205,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1246,4 +1313,4 @@

'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="test:/video"'
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="video"',
].join('');

@@ -1257,3 +1324,3 @@

'#EXT-X-BYTERANGE:121090@616\n',
'test:/selfInit.mp4'
'selfInit.mp4',
].join('');

@@ -1288,3 +1355,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video\n'
'video\n',
].join('');

@@ -1306,3 +1373,3 @@

'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1362,4 +1429,4 @@

'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="test:/video"'
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="video"',
].join('');

@@ -1369,8 +1436,8 @@

'#EXTM3U\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1391,4 +1458,4 @@

'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="test:/video"'
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="video"',
].join('');

@@ -1398,7 +1465,7 @@

'#EXTM3U\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.exe'
'main.exe',
].join('');

@@ -1419,5 +1486,5 @@

'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",',
'URI="test:/video"'
'URI="video"',
].join('');

@@ -1427,7 +1494,7 @@

'#EXTM3U\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1466,4 +1533,4 @@

'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="test:/video"'
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="video"',
].join('');

@@ -1474,6 +1541,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.exe'
'main.exe',
].join('');

@@ -1488,5 +1555,5 @@

'#EXT-X-STREAM-INF:CODECS="avc1,mp4a",BANDWIDTH=200,',
'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid"'
'RESOLUTION=960x540,FRAME-RATE=60,SUBTITLES="sub1"\n',
'audio\n',
'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1"',
].join('');

@@ -1497,6 +1564,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4"\n',
'#EXT-X-MAP:URI="init.mp4"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.exe'
'main.exe',
].join('');

@@ -1530,4 +1597,4 @@

'RESOLUTION=960x540,FRAME-RATE=60,VIDEO="vid"\n',
'test:/audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="test:/video"'
'audio\n',
'#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="vid",URI="video"',
].join('');

@@ -1538,5 +1605,5 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1559,3 +1626,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -1569,3 +1636,3 @@

'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1708,3 +1775,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -1718,3 +1785,3 @@

'#EXTINF:5,\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1739,3 +1806,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -1748,4 +1815,4 @@

'#EXTINF:5,\n',
'test:/main.mp4\n',
'#EXT-X-ENDLIST'
'main.mp4\n',
'#EXT-X-ENDLIST',
].join('');

@@ -1770,3 +1837,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -1779,4 +1846,4 @@

'#EXTINF:5,\n',
'test:/main.mp4\n',
'#EXT-X-ENDLIST'
'main.mp4\n',
'#EXT-X-ENDLIST',
].join('');

@@ -1802,3 +1869,3 @@

'RESOLUTION=960x540,FRAME-RATE=60\n',
'test:/video'
'video',
].join('');

@@ -1811,4 +1878,4 @@

'#EXTINF:5,\n',
'test:/main.mp4?foo=bar\n',
'#EXT-X-ENDLIST'
'main.mp4?foo=bar\n',
'#EXT-X-ENDLIST',
].join('');

@@ -1833,9 +1900,9 @@

'#EXTM3U\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",URI="test:/audio"\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",URI="audio"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=400,CODECS="avc1,mp4a",',
'RESOLUTION=1280x720,AUDIO="audio"\n',
'test:/video0\n',
'video0\n',
'#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1,mp4a",',
'RESOLUTION=768x432,AUDIO="audio"\n',
'test:/video1\n'
'video1\n',
].join('');

@@ -1846,6 +1913,6 @@

'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="test:/init.mp4",BYTERANGE="616@0"\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'test:/main.mp4'
'main.mp4',
].join('');

@@ -1872,2 +1939,45 @@

});
// https://github.com/google/shaka-player/issues/1664
it('correctly resolves relative playlist URIs', async () => {
const master = [
'#EXTM3U\n',
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",URI="audio"\n',
'#EXT-X-STREAM-INF:BANDWIDTH=400,CODECS="avc1,mp4a",',
'RESOLUTION=1280x720,AUDIO="audio"\n',
'video\n',
].join('');
const media = [
'#EXTM3U\n',
'#EXT-X-PLAYLIST-TYPE:VOD\n',
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
'#EXTINF:5,\n',
'#EXT-X-BYTERANGE:121090@616\n',
'main.mp4',
].join('');
fakeNetEngine
.setResponseText('media/master', master) // Relative master URI
.setResponseText('http://foo/media/audio', media)
.setResponseText('http://foo/media/video', media)
.setResponseValue('http://foo/media/init.mp4', initSegmentData)
.setResponseValue('http://foo/media/main.mp4', segmentData);
fakeNetEngine.setResponseFilter(function(type, response) {
// Simulate support for relative URIs in the browser by setting the
// absolute URI in response.uri.
if (response.uri == 'media/master') {
response.uri = 'http://foo/media/master';
}
});
// When this test fails, parser.start() fails. The relative playlist URI was
// being resolved to a bogus location ('media/media/audio'), which resulted
// in a failed request. Even if that bogus location were made absolute, it
// would still be wrong.
const manifest =
await parser.start('media/master', playerInterface);
expect(manifest.periods[0].variants.length).toBe(1);
});
});

@@ -48,4 +48,9 @@ /**

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-TARGETDURATION:6\n');
'#EXT-X-TARGETDURATION:6\n',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -66,6 +71,11 @@

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-TARGETDURATION:6\n' +
'#EXT-X-STREAM-INF:BANDWIDTH=2165224\n' +
'prog_index.m3u8');
'prog_index.m3u8',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -81,5 +91,10 @@

},
// playlist text:
'#EXTM3U\n' +
'#Comment\n' +
'#EXT-X-TARGETDURATION:6');
'#EXT-X-TARGETDURATION:6',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -115,5 +130,10 @@

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-INDEPENDENT-SEGMENTS');
'#EXT-X-INDEPENDENT-SEGMENTS',
// manifest URI:
'https://test/manifest.m3u8');
verifyPlaylist(

@@ -126,5 +146,10 @@ {

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-PLAYLIST-TYPE:VOD');
'#EXT-X-PLAYLIST-TYPE:VOD',
// manifest URI:
'https://test/manifest.m3u8');
verifyPlaylist(

@@ -137,4 +162,9 @@ {

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-MEDIA-SEQUENCE:1');
'#EXT-X-MEDIA-SEQUENCE:1',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -151,5 +181,10 @@

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS');
'#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS',
// manifest URI:
'https://test/manifest.m3u8');
verifyPlaylist(

@@ -166,4 +201,9 @@ {

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-MEDIA:URI="main.mp4",BYTERANGE="720@0"');
'#EXT-X-MEDIA:URI="main.mp4",BYTERANGE="720@0"',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -182,5 +222,10 @@

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2"');
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2"',
// manifest URI:
'https://test/manifest.m3u8');
verifyPlaylist(

@@ -197,5 +242,10 @@ {

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2,avc2.64000"');
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2,avc2.64000"',
// manifest URI:
'https://test/manifest.m3u8');
verifyPlaylist(

@@ -213,4 +263,9 @@ {

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2",AUDIO="a1,a2"');
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2",AUDIO="a1,a2"',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -269,6 +324,11 @@

},
// playlist text:
'#EXTM3U\n' +
'#EXT-X-MEDIA-SEQUENCE:1\n' +
'#EXTINF:5.99467\n' +
'https://test/test.mp4\n');
'https://test/test.mp4\n',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -296,2 +356,4 @@

},
// playlist text:
'#EXTM3U\n' +

@@ -301,3 +363,6 @@ '#EXT-X-KEY:METHOD="AES-128",URI="http://key.com",IV="123"\n' +

'#EXTINF:5.99467\n' +
'https://test/test.mp4\n');
'https://test/test.mp4\n',
// manifest URI:
'https://test/manifest.m3u8');
});

@@ -308,3 +373,3 @@

{
uri: 'https://test/manifest.m3u8',
absoluteUri: 'https://test/manifest.m3u8',
type: shaka.hls.PlaylistType.MEDIA,

@@ -315,3 +380,3 @@ tags: [

segments: [
new shaka.hls.Segment('test.mp4',
new shaka.hls.Segment('https://test/test.mp4',
[

@@ -322,2 +387,3 @@ new shaka.hls.Tag(/* id */ 2, 'EXTINF', [], '5.99467')

},
// playlist text:

@@ -328,2 +394,3 @@ '#EXTM3U\n' +

'test.mp4\n',
// manifest URI:

@@ -350,10 +417,15 @@ 'https://test/manifest.m3u8');

segments: [
new shaka.hls.Segment('uri',
new shaka.hls.Segment('https://test/uri',
[new shaka.hls.Tag(2, 'EXTINF', [], '5')]),
new shaka.hls.Segment('uri2',
[new shaka.hls.Tag(3, 'EXTINF', [], '4')])
]
new shaka.hls.Segment('https://test/uri2',
[new shaka.hls.Tag(3, 'EXTINF', [], '4')]),
],
},
manifestText);
manifestText,
// manifest URI:
'https://test/manifest.m3u8');
});
it('identifies playlist tags', function() {

@@ -368,24 +440,28 @@ verifyPlaylist(

segments: [
new shaka.hls.Segment('uri',
new shaka.hls.Segment('https://test/uri',
[new shaka.hls.Tag(2, 'EXTINF', [], '5')]),
new shaka.hls.Segment('uri2',
[new shaka.hls.Tag(3, 'EXTINF', [], '4')])
]
new shaka.hls.Segment('https://test/uri2',
[new shaka.hls.Tag(3, 'EXTINF', [], '4')]),
],
},
// Append a playlist tag to the manifest text so it appears after
// segment-related tags.
manifestText + '#EXT-X-ENDLIST');
manifestText + '#EXT-X-ENDLIST',
// manifest URI:
'https://test/manifest.m3u8');
});
});
// TODO(#1672): Get a better type than "Object" here.
/**
* @param {Object} expectedPlaylist
* @param {string} playlistText
* @param {string=} opt_manifestUri
* @param {string} absoluteManifestUri
*/
function verifyPlaylist(expectedPlaylist, playlistText, opt_manifestUri) {
let manifestUri = opt_manifestUri || '';
let playlistBuffer = shaka.util.StringUtils.toUTF8(playlistText);
let actualPlaylist = parser.parsePlaylist(playlistBuffer, manifestUri);
function verifyPlaylist(expectedPlaylist, playlistText, absoluteManifestUri) {
const playlistBuffer = shaka.util.StringUtils.toUTF8(playlistText);
const actualPlaylist =
parser.parsePlaylist(playlistBuffer, absoluteManifestUri);

@@ -400,6 +476,6 @@ expect(actualPlaylist).toBeTruthy();

if (expectedPlaylist.uri) {
expect(actualPlaylist.uri).toEqual(expectedPlaylist.uri);
if (expectedPlaylist.absoluteUri) {
expect(actualPlaylist.absoluteUri).toEqual(expectedPlaylist.absoluteUri);
}
}
});

@@ -88,4 +88,9 @@ /**

// TODO: Add a PlayReady version once Edge supports offline.
drm_it(
// TODO: Still failing in Chrome canary 73 on 2018-12-12.
// Some combination of these bugs is preventing this test from working:
// http://crbug.com/690583
// http://crbug.com/887535
// http://crbug.com/887635
// http://crbug.com/883895
quarantined_it(
'stores, plays, and deletes protected content with a persistent license',

@@ -92,0 +97,0 @@ async function() {

@@ -122,3 +122,10 @@ /**

drm_it('removes persistent license', drmCheckAndRun(async function() {
// TODO: Still failing in Chrome canary 73 on 2018-12-12.
// Some combination of these bugs is preventing this test from working:
// http://crbug.com/690583
// http://crbug.com/887535
// http://crbug.com/887635
// http://crbug.com/883895
quarantined_it('removes persistent license',
drmCheckAndRun(async function() {
const TestManifestParser = shaka.test.TestScheme.ManifestParser;

@@ -125,0 +132,0 @@

@@ -18,3 +18,3 @@ /**

describe('Player', function() {
describe('Player', () => {
const Util = shaka.test.Util;

@@ -63,3 +63,3 @@ const Feature = shakaAssets.Feature;

beforeEach(function() {
beforeEach(() => {
player = new compiledShaka.Player(video);

@@ -71,3 +71,3 @@

onErrorSpy = jasmine.createSpy('onError');
onErrorSpy.and.callFake(function(event) { fail(event.detail); });
onErrorSpy.and.callFake((event) => fail(event.detail));
eventManager.listen(player, 'error', Util.spyFunc(onErrorSpy));

@@ -88,7 +88,7 @@ });

afterAll(function() {
afterAll(() => {
document.body.removeChild(video);
});
describe('plays', function() {
describe('plays', () => {
function createAssetTest(asset) {

@@ -102,4 +102,4 @@ if (asset.disabled) return;

wit(testName, async () => {
if (asset.drm.length && !asset.drm.some(
function(keySystem) { return support.drm[keySystem]; })) {
if (asset.drm.length &&
!asset.drm.some((keySystem) => support.drm[keySystem])) {
pending('None of the required key systems are supported.');

@@ -116,4 +116,3 @@ }

}
if (!mimeTypes.some(
function(type) { return support.media[type]; })) {
if (!mimeTypes.some((type) => support.media[type])) {
pending('None of the required MIME types are supported.');

@@ -123,23 +122,42 @@ }

let config = {abr: {}, drm: {}, manifest: {dash: {}}};
config.abr.enabled = false;
config.manifest.dash.clockSyncUri =
'https://shaka-player-demo.appspot.com/time.txt';
// Make sure we are playing the lowest res available to avoid test flake
// based on network issues. Note that disabling ABR and setting a low
// abr.defaultBandwidthEstimate would not be sufficient, because it
// would only affect the choice of track on the first period. When we
// cross a period boundary, the default bandwidth estimate will no
// longer be in effect, and AbrManager may choose higher res tracks for
// the new period. Using abr.restrictions.maxHeight will let us force
// AbrManager to the lowest resolution, which is its fallback when these
// soft restrictions cannot be met.
player.configure('abr.restrictions.maxHeight', 1);
// Make sure that live streams are synced against a good clock.
player.configure('manifest.dash.clockSyncUri',
'https://shaka-player-demo.appspot.com/time.txt');
// Make sure we don't get stuck on gaps that only appear in some
// browsers (Safari, Firefox).
// TODO(https://github.com/google/shaka-player/issues/1702):
// Is this necessary because of a bug in Shaka Player?
player.configure('streaming.jumpLargeGaps', true);
// Configure DRM for this asset.
if (asset.licenseServers) {
config.drm.servers = asset.licenseServers;
player.configure('drm.servers', asset.licenseServers);
}
if (asset.drmCallback) {
config.manifest.dash.customScheme = asset.drmCallback;
player.configure('manifest.dash.customScheme', asset.drmCallback);
}
if (asset.clearKeys) {
config.drm.clearKeys = asset.clearKeys;
player.configure('drm.clearKeys', asset.clearKeys);
}
player.configure(config);
// Configure networking for this asset.
const networkingEngine = player.getNetworkingEngine();
if (asset.licenseRequestHeaders) {
player.getNetworkingEngine().registerRequestFilter(
addLicenseRequestHeaders.bind(null, asset.licenseRequestHeaders));
const headers = asset.licenseRequestHeaders;
networkingEngine.registerRequestFilter((requestType, request) => {
addLicenseRequestHeaders(headers, requestType, request);
});
}
let networkingEngine = player.getNetworkingEngine();
if (asset.requestFilter) {

@@ -151,2 +169,4 @@ networkingEngine.registerRequestFilter(asset.requestFilter);

}
// Add any extra configuration for this asset.
if (asset.extraConfig) {

@@ -163,24 +183,39 @@ player.configure(asset.extraConfig);

// 30 seconds or video ended, whichever comes first.
await waitForTimeOrEnd(video, 40);
// Wait for the video to start playback. If it takes longer than 20
// seconds, fail the test.
await waitForMovementOrFailOnTimeout(video, 20);
// Play for 30 seconds, but stop early if the video ends.
await waitForEndOrTimeout(video, 30);
if (video.ended) {
expect(video.currentTime).toBeCloseTo(video.duration, 1);
checkEndedTime();
} else {
// Expect that in 30 seconds of playback, we go through at least 20
// seconds of content. This allows for some buffering or network
// flake.
expect(video.currentTime).toBeGreaterThan(20);
// If it were very close to duration, why !video.ended?
expect(video.currentTime).not.toBeCloseTo(video.duration);
// Since video.ended is false, we expect the current time to be before
// the video duration.
expect(video.currentTime).toBeLessThan(video.duration);
if (!player.isLive()) {
// Seek and play out the end.
// Seek close to the end and play the rest of the content.
video.currentTime = video.duration - 15;
// 30 seconds or video ended, whichever comes first.
await waitForTimeOrEnd(video, 40);
// Wait for the video to start playback again after seeking. If it
// takes longer than 20 seconds, fail the test.
await waitForMovementOrFailOnTimeout(video, 20);
// Play for 30 seconds, but stop early if the video ends.
await waitForEndOrTimeout(video, 30);
// By now, ended should be true.
expect(video.ended).toBe(true);
expect(video.currentTime).toBeCloseTo(video.duration, 1);
checkEndedTime();
}
}
});
}
}); // actual test
} // createAssetTest

@@ -211,13 +246,69 @@ // The user can run tests on a specific manifest URI that is not in the

/**
* @param {!EventTarget} target
* Wait for the video playhead to move forward by some meaningful delta.
* If this happens before |timeout| seconds pass, the Promise is resolved.
* Otherwise, the Promise is rejected.
*
* @param {!HTMLMediaElement} target
* @param {number} timeout in seconds, after which the Promise fails
* @return {!Promise}
*/
function waitForMovementOrFailOnTimeout(target, timeout) {
const curEventManager = eventManager;
const timeGoal = target.currentTime + 1;
let goalMet = false;
const startTime = Date.now();
shaka.log.info('Waiting for movement from', target.currentTime,
'to', timeGoal);
return new Promise((resolve, reject) => {
curEventManager.listen(target, 'timeupdate', () => {
if (target.currentTime >= timeGoal) {
goalMet = true;
const endTime = Date.now();
const seconds = ((endTime - startTime) / 1000).toFixed(2);
shaka.log.info('Movement goal met after ' + seconds + ' seconds');
curEventManager.unlisten(target, 'timeupdate');
resolve();
}
});
Util.delay(timeout).then(() => {
// This check is only necessary to supress the error log. It's fine to
// unlisten twice or to reject after resolve. Neither of those actions
// matter. But the error log can be confusing during debugging if we
// have already met the movement goal.
if (!goalMet) {
shaka.log.error('Timeout waiting for playback.',
'current time', target.currentTime,
'ready state', target.readyState,
'playback rate', target.playbackRate,
'paused', target.paused,
'buffered', JSON.stringify(player.getBufferedInfo()));
curEventManager.unlisten(target, 'timeupdate');
reject(new Error('Timeout while waiting for playback!'));
}
});
});
}
/**
* Wait for the video to end or for |timeout| seconds to pass, whichever
* occurs first. The Promise is resolved when either of these happens.
*
* @param {!HTMLMediaElement} target
* @param {number} timeout in seconds, after which the Promise succeeds
* @return {!Promise}
*/
function waitForTimeOrEnd(target, timeout) {
let curEventManager = eventManager;
return new Promise(function(resolve, reject) {
let callback = function() {
function waitForEndOrTimeout(target, timeout) {
const curEventManager = eventManager;
return new Promise((resolve, reject) => {
const callback = () => {
curEventManager.unlisten(target, 'ended');
resolve();
};
// Whichever happens first resolves the Promise.
curEventManager.listen(target, 'ended', callback);

@@ -229,2 +320,18 @@ Util.delay(timeout).then(callback);

/**
* Check the video time for videos that we expect to have ended.
*/
function checkEndedTime() {
if (video.currentTime >= video.duration) {
// On some platforms, currentTime surpasses duration by more than 0.1s.
// For the purposes of this test, this is fine, so don't set any precise
// expectations on currentTime if it's larger.
} else {
// On some platforms, currentTime is less than duration, but it should be
// close.
expect(video.currentTime).toBeCloseTo(
video.duration, 1 /* decimal place */);
}
}
/**
* @param {!Object.<string, string>} headers

@@ -231,0 +338,0 @@ * @param {shaka.net.NetworkingEngine.RequestType} requestType

@@ -284,2 +284,31 @@ /**

/**
* Set a single value in the response map.
*
* @param {string} uri
* @param {!ArrayBuffer} value
* @return {!shaka.test.FakeNetworkingEngine}
*/
shaka.test.FakeNetworkingEngine.prototype.setResponseValue =
function(uri, value) {
this.responseMap_[uri] = value;
return this;
};
/**
* Set a single value as text in the response map.
*
* @param {string} uri
* @param {string} value
* @return {!shaka.test.FakeNetworkingEngine}
*/
shaka.test.FakeNetworkingEngine.prototype.setResponseText =
function(uri, value) {
const utf8 = shaka.util.StringUtils.toUTF8(value);
this.responseMap_[uri] = utf8;
return this;
};
/**
* Sets the default return value.

@@ -286,0 +315,0 @@ *

@@ -49,2 +49,4 @@ /**

stream.getSegmentReference(/** @type {number} */ (position));
// NOTE: A custom matcher for SegmentReferences is installed, so this checks
// the URIs as well.
expect(actualRef).toEqual(expectedRef);

@@ -51,0 +53,0 @@ }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc