shaka-player
Version:
DASH/EME video player library
1,154 lines (1,065 loc) • 41.5 kB
JavaScript
/**
* @license
* Copyright 2016 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Types and enums {{{
/**
* A container for demo assets.
* @class
*/
var shakaAssets = {};
/** @enum {string} */
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'
};
/** @enum {string} */
shakaAssets.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'
};
/** @enum {string} */
shakaAssets.KeySystem = {
CLEAR_KEY: 'org.w3.clearkey',
PLAYREADY: 'com.microsoft.playready',
WIDEVINE: 'com.widevine.alpha'
};
/** @enum {string} */
shakaAssets.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',
HLS: 'HLS'
};
/**
* @typedef {{
* uri: string,
* language: string,
* kind: string,
* mime: string,
* codecs: (string|undefined)
* }}
*
* @property {string} uri
* The URI of the text.
* @property {string} language
* The language of the text (e.g. 'en').
* @property {string} kind
* The kind of text (e.g. 'subtitles').
* @property {string} mime
* The MIME type of the text (e.g. 'text/vtt')
* @property {(string|undefined)} codecs
* (optional) The codecs string, if needed to refine the MIME type.
*/
shakaAssets.ExtraText;
/**
* @typedef {{
* name: string,
* manifestUri: string,
* certificateUri: (string|undefined),
* focus: (boolean|undefined),
* disabled: (boolean|undefined),
* extraText: (!Array.<shakaAssets.ExtraText>|undefined),
*
* encoder: shakaAssets.Encoder,
* source: shakaAssets.Source,
* drm: !Array.<shakaAssets.KeySystem>,
* features: !Array.<shakaAssets.Feature>,
*
* licenseServers: (!Object.<string, string>|undefined),
* licenseRequestHeaders: (!Object.<string, string>|undefined),
* requestFilter: (shakaExtern.RequestFilter|undefined),
* responseFilter: (shakaExtern.ResponseFilter|undefined),
* drmCallback: (shakaExtern.DashContentProtectionCallback|undefined),
* clearKeys: (!Object.<string, string>|undefined),
*
* extraConfig: (Object|undefined)
* }}
*
* @property {string} name
* The name of the asset. This does not have to be unique and can be the
* same if the asset is encoded different ways (or by different encoders).
* @property {string} manifestUri
* The URI of the manifest.
* @property {(string|undefined)} certificateUri
* The URI of the DRM server certificate, if required to play this asset.
* @property {(boolean|undefined)} focus
* (optional) If true, focuses the integration test for this asset and selects
* this asset in the demo app.
* @property {(boolean|undefined)} disabled
* (optional) If true, disables tests for this asset and hides it in the demo
* app.
* @property {(!Array.<shakaAssets.ExtraText>|undefined)} extraText
* (optional) An array of extra text sources (e.g. external captions).
*
* @property {shakaAssets.Encoder} encoder
* The encoder that created the asset.
* @property {shakaAssets.Source} source
* The source of the asset.
* @property {!Array.<shakaAssets.KeySystem>} drm
* An array of key-systems that the asset uses.
* @property {!Array.<shakaAssets.Feature>} features
* An array of features that this asset has.
*
* @property {(!Object.<string, string>|undefined)} licenseServers
* (optional) A map of key-system to license server.
* @property {(!Object.<string, string>|undefined)} licenseRequestHeaders
* (optional) A map of headers to add to license requests.
* @property {(shakaExtern.RequestFilter|undefined)}
* requestFilter
* A filter on license requests before they are passed to the server.
* @property {(shakaExtern.ResponseFilter|undefined)}
* responseFilter
* A filter on license responses before they are passed to the CDM.
* @property {(shakaExtern.DashContentProtectionCallback|undefined)} drmCallback
* A callback to use to interpret ContentProtection elements.
* @property {(!Object.<string, string>|undefined)} clearKeys
* A map of key-id to key to use with clear-key encryption.
*
* @property {(Object|undefined)} extraConfig
* Arbitrary player config to be applied after all other settings.
*/
shakaAssets.AssetInfo;
// }}}
// Custom callbacks {{{
/**
* A response filter for VDMS Uplynk manifest responses,
* this allows us to get the license prefix that is necessary
* to later generate a proper license response.
* @param {shaka.net.NetworkingEngine.RequestType} type
* @param {shakaExtern.Response} response
* The uplynk_prefix attribute is set on the shakaAssets object
* and is later referenced in the UplynkRequestFilter.
*/
shakaAssets.UplynkResponseFilter = function(type, response) {
if (type == shaka.net.NetworkingEngine.RequestType.MANIFEST) {
// Parse a custom header that contains a value needed to build a proper
// license server URL
if (response.headers['x-uplynk-prefix']) {
shakaAssets.uplynk_prefix = response.headers['x-uplynk-prefix'];
} else {
shakaAssets.uplynk_prefix = '';
}
}
};
/**
* A license request filter for VDMS Uplynk license requests.
* @param {shaka.net.NetworkingEngine.RequestType} type
* @param {shakaExtern.Request} request
* The uplynk_prefix variable is retrieved from the shakaAssets
* object, and requires that the uplynk manifest response filter
* also be set.
*/
shakaAssets.UplynkRequestFilter = function(type, request) {
if (type == shaka.net.NetworkingEngine.RequestType.LICENSE ||
type == shaka.net.NetworkingEngine.RequestType.MANIFEST) {
// It appears UTCTiming requests are considered MANIFEST type requests
if (request.uris[0].indexOf('servertime') == -1) {
request.allowCrossSiteCredentials = true;
} else {
request.allowCrossSiteCredentials = false;
}
}
if (type == shaka.net.NetworkingEngine.RequestType.LICENSE) {
// Modify the license request URL based on our cookie
if (request.uris[0].indexOf('wv') !== -1 &&
shakaAssets.uplynk_prefix) {
request.uris[0] = shakaAssets.uplynk_prefix.concat('/wv');
} else if (request.uris[0].indexOf('ck') !== -1 &&
shakaAssets.uplynk_prefix) {
request.uris[0] = shakaAssets.uplynk_prefix.concat('/ck');
} else if (request.uris[0].indexOf('pr') !== -1 &&
shakaAssets.uplynk_prefix) {
request.uris[0] = shakaAssets.uplynk_prefix.concat('/pr');
}
}
};
// }}}
/** @const {!Array.<shakaAssets.AssetInfo>} */
shakaAssets.testAssets = [
// Shaka assets {{{
{
name: 'Angel One (multicodec, multilingual)',
manifestUri: '//storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd', // gjslint: disable=110
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: '//storage.googleapis.com/shaka-demo-assets/angel-one-widevine/dash.mpd', // gjslint: disable=110
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': '//cwip-shaka-proxy.appspot.com/no_auth'
}
},
{
name: 'Angel One (multicodec, multilingual, ClearKey server)',
manifestUri: '//storage.googleapis.com/shaka-demo-assets/angel-one-clearkey/dash.mpd', // gjslint: disable=110
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': '//cwip-shaka-proxy.appspot.com/clearkey?_u3wDe7erb7v8Lqt8A3QDQ=ABEiM0RVZneImaq7zN3u_w' // gjslint: disable=110
}
},
{
name: 'Angel One (HLS, MP4, multilingual)',
manifestUri: '//storage.googleapis.com/shaka-demo-assets/angel-one-hls/hls.m3u8', // gjslint: disable=110
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: '//storage.googleapis.com/shaka-demo-assets/angel-one-widevine-hls/hls.m3u8', // gjslint: disable=110
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': '//cwip-shaka-proxy.appspot.com/no_auth'
}
},
{
name: 'Sintel 4k (multicodec)',
manifestUri: '//storage.googleapis.com/shaka-demo-assets/sintel/dash.mpd', // gjslint: disable=110
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: '//storage.googleapis.com/shaka-demo-assets/sintel-trickplay/dash.mpd', // gjslint: disable=110
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: '//storage.googleapis.com/shaka-demo-assets/sintel-webm-only/dash.mpd', // gjslint: disable=110
// NOTE: hanging in Firefox
// https://bugzilla.mozilla.org/show_bug.cgi?id=1291451
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: '//storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd', // gjslint: disable=110
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: '//storage.googleapis.com/shaka-demo-assets/sintel-widevine/dash.mpd', // gjslint: disable=110
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': '//cwip-shaka-proxy.appspot.com/no_auth'
}
},
{
name: 'Sintel 4k (multicodec, VTT in MP4)',
manifestUri: '//storage.googleapis.com/shaka-demo-assets/sintel-mp4-wvtt/dash.mpd', // gjslint: disable=110
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: '//storage.googleapis.com/shaka-demo-assets/heliocentrism/heliocentrism.mpd', // gjslint: disable=110
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: '//storage.googleapis.com/shaka-demo-assets/heliocentrism-xlink/heliocentrism.mpd', // gjslint: disable=110
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)', // gjslint: disable=110
// From: http://dig.ccmixter.org/files/JeffSpeed68/53327
// Licensed under Creative Commons BY-NC 3.0.
// Free for non-commercial use with attribution.
// http://creativecommons.org/licenses/by-nc/3.0/
manifestUri: '//storage.googleapis.com/shaka-demo-assets/dig-the-uke-clear/dash.mpd', // gjslint: disable=110
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)', // gjslint: disable=110
// From: http://dig.ccmixter.org/files/JeffSpeed68/53327
// Licensed under Creative Commons BY-NC 3.0.
// Free for non-commercial use with attribution.
// http://creativecommons.org/licenses/by-nc/3.0/
manifestUri: '//storage.googleapis.com/shaka-demo-assets/dig-the-uke/dash.mpd', // gjslint: disable=110
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': '//cwip-shaka-proxy.appspot.com/no_auth'
}
},
{
name: 'Tears of Steel (multicodec, TTML)',
manifestUri: '//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: 'Shaka Player History (multicodec, live)',
manifestUri: '//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
]
},
// }}}
// Axinom assets {{{
// Src: https://github.com/Axinom/dash-test-vectors
{
name: 'Multi-DRM',
manifestUri: '//media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest.mpd', // gjslint: disable=110
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': '//drm-widevine-licensing.axtest.net/AcquireLicense', // gjslint: disable=110
'com.microsoft.playready': '//drm-playready-licensing.axtest.net/AcquireLicense' // gjslint: disable=110
},
licenseRequestHeaders: {
'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.4lWwW46k-oWcah8oN18LPj5OLS5ZU-_AQv7fe0JhNjA' // gjslint: disable=110
}
},
{
name: 'Multi-DRM, multi-key',
manifestUri: '//media.axprod.net/TestVectors/v7-MultiDRM-MultiKey/Manifest.mpd', // gjslint: disable=110
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
],
licenseServers: {
'com.widevine.alpha': '//drm-widevine-licensing.axtest.net/AcquireLicense', // gjslint: disable=110
'com.microsoft.playready': '//drm-playready-licensing.axtest.net/AcquireLicense' // gjslint: disable=110
},
licenseRequestHeaders: {
'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiODAzOTliZjUtOGEyMS00MDE0LTgwNTMtZTI3ZTc0OGU5OGMwIiwiZW5jcnlwdGVkX2tleSI6ImxpTkpxVmFZa05oK01LY3hKRms3SWc9PSJ9LHsiaWQiOiI5MDk1M2UwOS02Y2IyLTQ5YTMtYTI2MC03YTVmZWZlYWQ0OTkiLCJlbmNyeXB0ZWRfa2V5Ijoia1l0SEh2cnJmQ01lVmRKNkxrYmtuZz09In0seyJpZCI6IjBlNGRhOTJiLWQwZTgtNGE2Ni04YzNmLWMyNWE5N2ViNjUzMiIsImVuY3J5cHRlZF9rZXkiOiI3dzdOWkhITE1nSjRtUUtFSzVMVE1RPT0ifSx7ImlkIjoiNTg1ZjIzM2YtMzA3Mi00NmYxLTlmYTQtNmRjMjJjNjZhMDE0IiwiZW5jcnlwdGVkX2tleSI6IkFjNFVVbVl0Qko1blBROU4xNXJjM2c9PSJ9LHsiaWQiOiI0MjIyYmQ3OC1iYzQ1LTQxYmYtYjYzZS02ZjgxNGRjMzkxZGYiLCJlbmNyeXB0ZWRfa2V5IjoiTzZGTzBmcVNXb3BwN2JqYy9ENGxNQT09In1dfX0.uF6YlKAREOmbniAeYiH070HSJhV0YS7zSKjlCtiDR5Y' // gjslint: disable=110
}
},
{
name: 'Multi-DRM, multi-key, multi-Period',
manifestUri: '//media.axprod.net/TestVectors/v7-MultiDRM-MultiKey-MultiPeriod/Manifest.mpd', // gjslint: disable=110
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.MULTIPERIOD,
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION,
shakaAssets.Feature.TTML,
shakaAssets.Feature.ULTRA_HIGH_DEFINITION,
shakaAssets.Feature.WEBVTT
],
licenseServers: {
'com.widevine.alpha': '//drm-widevine-licensing.axtest.net/AcquireLicense', // gjslint: disable=110
'com.microsoft.playready': '//drm-playready-licensing.axtest.net/AcquireLicense' // gjslint: disable=110
},
licenseRequestHeaders: {
'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImtleXMiOlt7ImlkIjoiMDg3Mjc4NmUtZjllNy00NjVmLWEzYTItNGU1YjBlZjhmYTQ1IiwiZW5jcnlwdGVkX2tleSI6IlB3NitlRVlOY3ZqWWJmc2gzWDNmbWc9PSJ9LHsiaWQiOiJjMTRmMDcwOS1mMmI5LTQ0MjctOTE2Yi02MWI1MjU4NjUwNmEiLCJlbmNyeXB0ZWRfa2V5IjoiLzErZk5paDM4bXFSdjR5Y1l6bnQvdz09In0seyJpZCI6IjhiMDI5ZTUxLWQ1NmEtNDRiZC05MTBmLWQ0YjVmZDkwZmJhMiIsImVuY3J5cHRlZF9rZXkiOiJrcTBKdVpFanBGTjhzYVRtdDU2ME9nPT0ifSx7ImlkIjoiMmQ2ZTkzODctNjBjYS00MTQ1LWFlYzItYzQwODM3YjRiMDI2IiwiZW5jcnlwdGVkX2tleSI6IlRjUlFlQld4RW9IT0tIcmFkNFNlVlE9PSJ9LHsiaWQiOiJkZTAyZjA3Zi1hMDk4LTRlZTAtYjU1Ni05MDdjMGQxN2ZiYmMiLCJlbmNyeXB0ZWRfa2V5IjoicG9lbmNTN0dnbWVHRmVvSjZQRUFUUT09In0seyJpZCI6IjkxNGU2OWY0LTBhYjMtNDUzNC05ZTlmLTk4NTM2MTVlMjZmNiIsImVuY3J5cHRlZF9rZXkiOiJlaUkvTXNsbHJRNHdDbFJUL0xObUNBPT0ifSx7ImlkIjoiZGE0NDQ1YzItZGI1ZS00OGVmLWIwOTYtM2VmMzQ3YjE2YzdmIiwiZW5jcnlwdGVkX2tleSI6IjJ3K3pkdnFycERWM3hSMGJKeTR1Z3c9PSJ9LHsiaWQiOiIyOWYwNWU4Zi1hMWFlLTQ2ZTQtODBlOS0yMmRjZDQ0Y2Q3YTEiLCJlbmNyeXB0ZWRfa2V5IjoiL3hsU0hweHdxdTNnby9nbHBtU2dhUT09In0seyJpZCI6IjY5ZmU3MDc3LWRhZGQtNGI1NS05NmNkLWMzZWRiMzk5MTg1MyIsImVuY3J5cHRlZF9rZXkiOiJ6dTZpdXpOMnBzaTBaU3hRaUFUa1JRPT0ifV19fQ.BXr93Et1krYMVs-CUnf7F3ywJWFRtxYdkR7Qn4w3-to' // gjslint: disable=110
}
},
{
name: 'Clear, single-Period',
manifestUri: '//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: '//media.axprod.net/TestVectors/v7-Clear/Manifest_MultiPeriod.mpd', // gjslint: disable=110
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
]
},
// }}}
// Unified Streaming {{{
// Src: http://demo.unified-streaming.com/features.html
{
name: 'Tears of Steel',
manifestUri: '//demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/.mpd', // gjslint: disable=110
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: '//demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-widevine.ism/.mpd', // gjslint: disable=110
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': '//cwip-shaka-proxy.appspot.com/no_auth'
}
},
{
name: 'Tears of Steel (PlayReady)',
manifestUri: '//demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-playready.ism/.mpd', // gjslint: disable=110
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': '//test.playready.microsoft.com/service/rightsmanager.asmx?PlayRight=1&UseSimpleNonPersistentLicense=1' // gjslint: disable=110
}
},
{
name: 'Tears of Steel (subtitles)',
manifestUri: '//demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-ru.ism/.mpd', // gjslint: disable=110
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
]
},
// }}}
// DASH-IF assets {{{
// Src: http://dashif.org/test-vectors/
{
name: 'Big Buck Bunny',
manifestUri: '//dash.edgesuite.net/dash264/TestCases/1c/qualcomm/2/MultiRate.mpd', // gjslint: disable=110
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: '//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: '//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: '//vm2.dashif.org/livesim/utc_head/periods_20/testpic_2s/Manifest.mpd', // gjslint: disable=110
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
]
},
// }}}
// Wowza assets {{{
// Src: http://www.dash-player.com/demo/streaming-server-and-encoder-support/
{
name: 'Big Buck Bunny (Live)',
manifestUri: '//wowzaec2demo.streamlock.net/live/bigbuckbunny/manifest_mpm4sav_mvtime.mpd', // gjslint: disable=110
encoder: shakaAssets.Encoder.WOWZA,
source: shakaAssets.Encoder.WOWZA,
drm: [],
features: [
shakaAssets.Feature.LIVE,
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
]
},
// }}}
// bitcodin assets {{{
// Src: http://www.dash-player.com/demo/streaming-server-and-encoder-support/
{
name: 'Art of Motion',
manifestUri: '//bitdash-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd', // gjslint: disable=110
encoder: shakaAssets.Encoder.BITCODIN,
source: shakaAssets.Source.BITCODIN,
drm: [],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION
]
},
// }}}
// Nimble Streamer assets {{{
// Src: http://www.dash-player.com/demo/streaming-server-and-encoder-support/
{
name: 'Big Buck Bunny',
manifestUri: '//video.wmspanel.com/local/raw/BigBuckBunny_320x180.mp4/manifest.mpd', // gjslint: disable=110
// As of 2017-08-04, there is a common name mismatch error with this site's
// SSL certificate. See https://github.com/google/shaka-player/issues/955
disabled: true,
encoder: shakaAssets.Encoder.NIMBLE_STREAMER,
source: shakaAssets.Source.NIMBLE_STREAMER,
drm: [],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_TIMELINE
]
},
// }}}
// Azure Media Services assets {{{
// Src: http://amp.azure.net/libs/amp/latest/docs/samples.html
{
name: 'Azure Trailer',
manifestUri: '//amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest(format=mpd-time-csf)', // gjslint: disable=110
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: '//amssamples.streaming.mediaservices.windows.net/622b189f-ec39-43f2-93a2-201ac4e31ce1/BigBuckBunny.ism/manifest(format=mpd-time-csf)', // gjslint: disable=110
// NOTE: License servers are timing out as of 2016-03-23.
// NOTE: Still timing out as of 2016-08-02.
disabled: true,
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': '//amssamples.keydelivery.mediaservices.windows.net/Widevine/?KID=1ab45440-532c-4399-94dc-5c5ad9584bac', // gjslint: disable=110
'com.microsoft.playready': '//amssamples.keydelivery.mediaservices.windows.net/PlayReady/' // gjslint: disable=110
}
},
{
name: 'Tears Of Steel (external text)',
manifestUri: '//ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TearsOfSteel_WAMEH264SmoothStreaming720p.ism/manifest(format=mpd-time-csf)', // gjslint: disable=110
extraText: [
{
uri: '//ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-en.vtt', // gjslint: disable=110
language: 'en',
kind: 'subtitle',
mime: 'text/vtt'
},
{
uri: '//ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-es.vtt', // gjslint: disable=110
language: 'es',
kind: 'subtitle',
mime: 'text/vtt'
},
{
uri: '//ams-samplescdn.streaming.mediaservices.windows.net/11196e3d-2f40-4835-9a4d-fc52751b0323/TOS-fr.vtt', // gjslint: disable=110
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
]
},
// }}}
// GPAC assets {{{
// Src: https://gpac.wp.mines-telecom.fr/2012/02/23/dash-sequences/
// NOTE: The assets here using the "live profile" are not actually
// "live streams". The content is still static, as is the timeline.
{
name: 'live profile',
manifestUri: '//download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live/mp4-live-mpd-AV-BS.mpd', // gjslint: disable=110
// NOTE: Multiple SPS/PPS in init segment, no sample duration
// NOTE: Decoder errors on Mac
// https://github.com/gpac/gpac/issues/600
// https://bugs.webkit.org/show_bug.cgi?id=160459
disabled: true,
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: '//download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-live-periods/mp4-live-periods-mpd.mpd', // gjslint: disable=110
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: '//download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-single/mp4-main-single-mpd-AV-NBS.mpd', // gjslint: disable=110
encoder: shakaAssets.Encoder.MP4BOX,
source: shakaAssets.Source.GPAC,
drm: [],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_LIST_DURATION
]
},
{
name: 'main profile, mutiple files',
manifestUri: '//download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-multi/mp4-main-multi-mpd-AV-BS.mpd', // gjslint: disable=110
// NOTE: Multiple SPS/PPS in init segment, no sample duration
// NOTE: Decoder errors on Mac
// https://github.com/gpac/gpac/issues/600
// https://bugs.webkit.org/show_bug.cgi?id=160459
disabled: true,
encoder: shakaAssets.Encoder.MP4BOX,
source: shakaAssets.Source.GPAC,
drm: [],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_LIST_DURATION
]
},
{
name: 'onDemand profile',
manifestUri: '//download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-onDemand/mp4-onDemand-mpd-AV.mpd', // gjslint: disable=110
encoder: shakaAssets.Encoder.MP4BOX,
source: shakaAssets.Source.GPAC,
drm: [],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_BASE
]
},
{
name: 'main profile, open GOP',
manifestUri: '//download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-main-ogop/mp4-main-ogop-mpd-AV-BS.mpd', // gjslint: disable=110
// NOTE: Segments do not start with keyframes
// NOTE: Decoder errors on Safari
// https://bugs.webkit.org/show_bug.cgi?id=160460
disabled: true,
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: '//download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-full-gdr/mp4-full-gdr-mpd-AV-BS.mpd', // gjslint: disable=110
// NOTE: segments do not start with keyframes
// NOTE: Decoder errors on Safari
// https://bugs.webkit.org/show_bug.cgi?id=160460
disabled: true,
encoder: shakaAssets.Encoder.MP4BOX,
source: shakaAssets.Source.GPAC,
drm: [],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.SEGMENT_TEMPLATE_DURATION
]
},
// }}}
// Verizon Digital Media Services (VDMS) assets {{{
{
name: 'Multi DRM - 8 Byte IV',
// Reliable Playready playback requires Edge 16+
// The playenabler and sl url parameters allow for playback in VMs
manifestUri: 'https://content.uplynk.com/847859273a4b4a81959d8fea181672a4.mpd?pr.version=2&pr.playenabler=B621D91F-EDCC-4035-8D4B-DC71760D43E9&pr.securitylevel=150', // gjslint: disable=110
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
],
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',
// Reliable Playready playback requires Edge 16+
// The playenabler and sl url parameters allow for playback in VMs
manifestUri: 'https://content.uplynk.com/054225d59be2454fabdca3e96912d847.mpd?ad=cleardash&pr.version=2&pr.playenabler=B621D91F-EDCC-4035-8D4B-DC71760D43E9&pr.securitylevel=150', // gjslint: disable=110
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.MULTIPERIOD,
shakaAssets.Feature.SEGMENT_LIST_DURATION,
shakaAssets.Feature.AESCTR_8_BYTE_IV,
shakaAssets.Feature.HIGH_DEFINITION
],
licenseServers: {
'com.microsoft.playready': 'https://content.uplynk.com/pr',
'com.widevine.alpha': 'https://content.uplynk.com/wv'
},
requestFilter: shakaAssets.UplynkRequestFilter,
responseFilter: shakaAssets.UplynkResponseFilter
},
{
name: 'Widevine - 16 Byte IV',
manifestUri: 'https://content.uplynk.com/224ac8717e714b68831997ab6cea4015.mpd', // gjslint: disable=110
encoder: shakaAssets.Encoder.UPLYNK,
source: shakaAssets.Source.UPLYNK,
drm: [
shakaAssets.KeySystem.WIDEVINE
],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.PSSH,
shakaAssets.Feature.MULTIKEY,
shakaAssets.Feature.AESCTR_16_BYTE_IV,
shakaAssets.Feature.SEGMENT_LIST_DURATION,
shakaAssets.Feature.HIGH_DEFINITION
],
licenseServers: {
'com.widevine.alpha': 'https://content.uplynk.com/wv'
},
requestFilter: shakaAssets.UplynkRequestFilter,
responseFilter: shakaAssets.UplynkResponseFilter
},
{
name: 'Widevine - 16 Byte IV - (mix of encrypted and unencrypted periods)',
// Unencrypted periods interspersed with protected periods
// Doesn't work on Chrome < 58
manifestUri: 'https://content.uplynk.com/1eb40d8e64234f5c9879db7045c3d48c.mpd?ad=cleardash&rays=cdefg', // gjslint: disable=110
encoder: shakaAssets.Encoder.UPLYNK,
source: shakaAssets.Source.UPLYNK,
drm: [
shakaAssets.KeySystem.WIDEVINE
],
features: [
shakaAssets.Feature.MP4,
shakaAssets.Feature.MULTIPLE_LANGUAGES,
shakaAssets.Feature.SEGMENT_LIST_DURATION,
shakaAssets.Feature.PSSH,
shakaAssets.Feature.HIGH_DEFINITION,
shakaAssets.Feature.MULTIPERIOD,
shakaAssets.Feature.MULTIKEY,
shakaAssets.Feature.AESCTR_16_BYTE_IV,
shakaAssets.Feature.ENCRYPTED_WITH_CLEAR
],
licenseServers: {
'com.widevine.alpha': 'https://content.uplynk.com/wv'
},
requestFilter: shakaAssets.UplynkRequestFilter,
responseFilter: shakaAssets.UplynkResponseFilter
}
// }}}
];