mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-13 15:46:46 +03:00
chore(demo): Removed demo localization system (#5665)
A localization system was added to the demo, in preparation for future localizations of the demo page. However, such further localizations were never added, and it seems likely that they will never be added. Given that it will almost definitely never be used, the localization system has just become an annoyance that makes adding new features to the demo more difficult, so this removes the system entirely.
This commit is contained in:
@@ -283,7 +283,6 @@ def check_tests(args):
|
||||
[closure_base_js]))
|
||||
files.add(os.path.join(base, 'demo', 'common', 'asset.js'))
|
||||
files.add(os.path.join(base, 'demo', 'common', 'assets.js'))
|
||||
files.add(os.path.join(base, 'demo', 'common', 'message_ids.js'))
|
||||
|
||||
localizations = compiler.GenerateLocalizations(None)
|
||||
localizations.generate(args.force)
|
||||
|
||||
+18
-21
@@ -8,7 +8,6 @@ goog.provide('shakaDemo.AssetCard');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('shakaAssets');
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
goog.require('shakaDemo.Tooltips');
|
||||
goog.requireType('ShakaDemoAssetInfo');
|
||||
|
||||
@@ -134,7 +133,7 @@ shakaDemo.AssetCard = class {
|
||||
|
||||
/**
|
||||
* @param {string} icon
|
||||
* @param {!shakaDemo.MessageIds} title
|
||||
* @param {string} title
|
||||
* @private
|
||||
*/
|
||||
addFeatureIcon_(icon, title) {
|
||||
@@ -190,18 +189,17 @@ shakaDemo.AssetCard = class {
|
||||
|
||||
/**
|
||||
* Modify an asset to make it clear that it is unsupported.
|
||||
* @param {!shakaDemo.MessageIds} unsupportedReason
|
||||
* @param {string} unsupportedReason
|
||||
*/
|
||||
markAsUnsupported(unsupportedReason) {
|
||||
this.card_.classList.add('asset-card-unsupported');
|
||||
this.makeUnsupportedButton_(
|
||||
shakaDemo.MessageIds.UNSUPPORTED, unsupportedReason);
|
||||
this.makeUnsupportedButton_('Not Available', unsupportedReason);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a button that represents the lack of a working button.
|
||||
* @param {?shakaDemo.MessageIds} buttonName
|
||||
* @param {!shakaDemo.MessageIds} unsupportedReason
|
||||
* @param {?string} buttonName
|
||||
* @param {string} unsupportedReason
|
||||
* @return {!Element}
|
||||
* @private
|
||||
*/
|
||||
@@ -306,16 +304,15 @@ shakaDemo.AssetCard = class {
|
||||
return;
|
||||
}
|
||||
|
||||
this.makeYesNoDialogue_(parentDiv,
|
||||
shakaDemo.MessageIds.DELETE_STORED_PROMPT, async () => {
|
||||
deleteButton.disabled = true;
|
||||
await this.asset_.unstoreCallback();
|
||||
});
|
||||
this.makeYesNoDialogue_(parentDiv, 'Delete the offline copy?', async () => {
|
||||
deleteButton.disabled = true;
|
||||
await this.asset_.unstoreCallback();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!Element} parentDiv
|
||||
* @param {!shakaDemo.MessageIds} text
|
||||
* @param {string} text
|
||||
* @param {function():Promise} callback
|
||||
* @private
|
||||
*/
|
||||
@@ -330,14 +327,14 @@ shakaDemo.AssetCard = class {
|
||||
|
||||
const textElement = document.createElement('h2');
|
||||
textElement.classList.add('mdl-typography--title');
|
||||
textElement.textContent = shakaDemoMain.getLocalizedString(text);
|
||||
textElement.textContent = text;
|
||||
dialog.appendChild(textElement);
|
||||
|
||||
const buttonsDiv = document.createElement('div');
|
||||
dialog.appendChild(buttonsDiv);
|
||||
const makeButton = (textId, fn) => {
|
||||
const makeButton = (text, fn) => {
|
||||
const button = document.createElement('button');
|
||||
button.textContent = shakaDemoMain.getLocalizedString(textId);
|
||||
button.textContent = text;
|
||||
button.classList.add('mdl-button');
|
||||
button.classList.add('mdl-button--colored');
|
||||
button.classList.add('mdl-js-button');
|
||||
@@ -348,12 +345,12 @@ shakaDemo.AssetCard = class {
|
||||
buttonsDiv.appendChild(button);
|
||||
button.blur();
|
||||
};
|
||||
makeButton(shakaDemo.MessageIds.PROMPT_YES, async () => {
|
||||
makeButton('Yes', async () => {
|
||||
dialog.close();
|
||||
await callback();
|
||||
this.remakeButtons();
|
||||
});
|
||||
makeButton(shakaDemo.MessageIds.PROMPT_NO, () => {
|
||||
makeButton('No', () => {
|
||||
dialog.close();
|
||||
});
|
||||
|
||||
@@ -385,9 +382,9 @@ shakaDemo.AssetCard = class {
|
||||
/**
|
||||
* Adds a button to the bottom of the card that will call |onClick| when
|
||||
* clicked. For example, a play or delete button.
|
||||
* @param {?shakaDemo.MessageIds} name
|
||||
* @param {?string} name
|
||||
* @param {function()} onclick
|
||||
* @param {shakaDemo.MessageIds=} yesNoDialogText
|
||||
* @param {string=} yesNoDialogText
|
||||
* @return {!HTMLButtonElement}
|
||||
*/
|
||||
addButton(name, onclick, yesNoDialogText) {
|
||||
@@ -397,7 +394,7 @@ shakaDemo.AssetCard = class {
|
||||
button.classList.add('mdl-button--colored');
|
||||
button.classList.add('mdl-js-button');
|
||||
button.classList.add('mdl-js-ripple-effect');
|
||||
button.textContent = name ? shakaDemoMain.getLocalizedString(name) : '';
|
||||
button.textContent = name || '';
|
||||
button.addEventListener('click', () => {
|
||||
if (!button.hasAttribute('disabled')) {
|
||||
if (yesNoDialogText) {
|
||||
|
||||
@@ -52,7 +52,6 @@ UNCOMPILED_JS = [
|
||||
// This file contains goog.require calls for all exported library classes.
|
||||
'../../shaka-player.uncompiled.js',
|
||||
// These are the individual parts of the receiver app.
|
||||
'../common/message_ids.js',
|
||||
'../common/asset.js',
|
||||
'../common/assets.js',
|
||||
'receiver_app.js',
|
||||
|
||||
@@ -41,9 +41,6 @@ shakaDemo.CloseButton = class extends shaka.ui.Element {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: Make sure that the screenreader description of this control is
|
||||
// localized!
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
|
||||
goog.provide('ShakaDemoAssetInfo');
|
||||
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
|
||||
|
||||
/**
|
||||
* An object that contains information about an asset.
|
||||
@@ -115,9 +113,9 @@ const ShakaDemoAssetInfo = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* A sort comparator for comparing two message Ids, ignoring case.
|
||||
* @param {shakaDemo.MessageIds} a
|
||||
* @param {shakaDemo.MessageIds} b
|
||||
* A sort comparator for comparing two messages, ignoring case.
|
||||
* @param {string} a
|
||||
* @param {string} b
|
||||
* @return {number}
|
||||
* @private
|
||||
*/
|
||||
|
||||
+48
-49
@@ -11,7 +11,6 @@
|
||||
*/
|
||||
|
||||
goog.require('ShakaDemoAssetInfo');
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
|
||||
goog.provide('shakaAssets');
|
||||
|
||||
@@ -24,34 +23,34 @@ goog.provide('shakaAssets');
|
||||
const shakaAssets = {};
|
||||
|
||||
|
||||
/** @enum {shakaDemo.MessageIds} */
|
||||
/** @enum {string} */
|
||||
shakaAssets.Source = {
|
||||
CUSTOM: shakaDemo.MessageIds.CUSTOM,
|
||||
SHAKA: shakaDemo.MessageIds.SHAKA,
|
||||
AXINOM: shakaDemo.MessageIds.AXINOM,
|
||||
UNIFIED_STREAMING: shakaDemo.MessageIds.UNIFIED_STREAMING,
|
||||
DASH_IF: shakaDemo.MessageIds.DASH_IF,
|
||||
BITCODIN: shakaDemo.MessageIds.BITCODIN,
|
||||
METACDN: shakaDemo.MessageIds.METACDN,
|
||||
NIMBLE_STREAMER: shakaDemo.MessageIds.NIMBLE_STREAMER,
|
||||
AZURE_MEDIA_SERVICES: shakaDemo.MessageIds.AZURE_MEDIA_SERVICES,
|
||||
GPAC: shakaDemo.MessageIds.GPAC,
|
||||
UPLYNK: shakaDemo.MessageIds.UPLYNK,
|
||||
APPLE: shakaDemo.MessageIds.APPLE,
|
||||
IRT: shakaDemo.MessageIds.IRT,
|
||||
MICROSOFT: shakaDemo.MessageIds.MICROSOFT,
|
||||
VNOVA: shakaDemo.MessageIds.VNOVA,
|
||||
CUSTOM: 'Custom',
|
||||
SHAKA: 'Shaka',
|
||||
AXINOM: 'Axinom',
|
||||
UNIFIED_STREAMING: 'Unified Streaming',
|
||||
DASH_IF: 'DASH-IF',
|
||||
BITCODIN: 'Bitcodin',
|
||||
METACDN: 'MetaCDN',
|
||||
NIMBLE_STREAMER: 'Nimble Streamer',
|
||||
AZURE_MEDIA_SERVICES: 'Azure Media Services',
|
||||
GPAC: 'GPAC',
|
||||
UPLYNK: 'Verizon Digital Media Services',
|
||||
APPLE: 'Apple',
|
||||
IRT: 'IRT',
|
||||
MICROSOFT: 'Microsoft',
|
||||
VNOVA: 'V-Nova',
|
||||
};
|
||||
|
||||
|
||||
/** @enum {shakaDemo.MessageIds} */
|
||||
/** @enum {string} */
|
||||
shakaAssets.KeySystem = {
|
||||
CLEAR_KEY: shakaDemo.MessageIds.CLEAR_KEY,
|
||||
FAIRPLAY: shakaDemo.MessageIds.FAIRPLAY,
|
||||
PLAYREADY: shakaDemo.MessageIds.PLAYREADY,
|
||||
WIDEVINE: shakaDemo.MessageIds.WIDEVINE,
|
||||
AES128: shakaDemo.MessageIds.AES128,
|
||||
CLEAR: shakaDemo.MessageIds.CLEAR,
|
||||
CLEAR_KEY: 'Clear Key DRM',
|
||||
FAIRPLAY: 'Fairplay DRM',
|
||||
PLAYREADY: 'PlayReady DRM',
|
||||
WIDEVINE: 'Widevine DRM',
|
||||
AES128: 'AES-128 protection',
|
||||
CLEAR: 'No DRM protection',
|
||||
};
|
||||
|
||||
|
||||
@@ -95,65 +94,65 @@ shakaAssets.identifierForKeySystem = (keySystem) => {
|
||||
};
|
||||
|
||||
|
||||
/** @enum {shakaDemo.MessageIds} */
|
||||
/** @enum {string} */
|
||||
shakaAssets.Feature = {
|
||||
// Set if the asset has a special trick mode track, for rewinding effects.
|
||||
TRICK_MODE: shakaDemo.MessageIds.TRICK_MODE,
|
||||
XLINK: shakaDemo.MessageIds.XLINK,
|
||||
TRICK_MODE: 'Special trick mode track',
|
||||
XLINK: 'XLink',
|
||||
|
||||
// Set if the asset has any subtitle tracks.
|
||||
SUBTITLES: shakaDemo.MessageIds.SUBTITLES,
|
||||
SUBTITLES: 'Subtitles',
|
||||
// Set if the asset has any closed caption tracks.
|
||||
CAPTIONS: shakaDemo.MessageIds.CAPTIONS,
|
||||
CAPTIONS: 'Captions',
|
||||
// Set if the asset has multiple audio languages.
|
||||
MULTIPLE_LANGUAGES: shakaDemo.MessageIds.MULTIPLE_LANGUAGES,
|
||||
MULTIPLE_LANGUAGES: 'Multiple languages',
|
||||
// Set if the asset is audio-only.
|
||||
AUDIO_ONLY: shakaDemo.MessageIds.AUDIO_ONLY,
|
||||
AUDIO_ONLY: 'Audio only',
|
||||
// Set if the asset can be stored offline.
|
||||
OFFLINE: shakaDemo.MessageIds.OFFLINE,
|
||||
OFFLINE: 'Downloadable',
|
||||
// A synthetic property used in the "all content" tab. Should not be given to
|
||||
// assets.
|
||||
STORED: shakaDemo.MessageIds.STORED,
|
||||
STORED: 'Downloaded',
|
||||
// Set if the asset has ads. Autoset by calling setAdTagUri() on an asset.
|
||||
// Does not need to be set manually.
|
||||
ADS: shakaDemo.MessageIds.ADS,
|
||||
ADS: 'Ads',
|
||||
|
||||
// Set if the asset is a livestream.
|
||||
LIVE: shakaDemo.MessageIds.LIVE,
|
||||
LIVE: 'Live',
|
||||
// A synthetic property used if the asset is VOD (not-livestream).
|
||||
VOD: shakaDemo.MessageIds.VOD,
|
||||
VOD: 'VOD',
|
||||
// Set if the asset has at least one WebM stream.
|
||||
WEBM: shakaDemo.MessageIds.WEBM,
|
||||
WEBM: 'WebM',
|
||||
// Set if the asset has at least one mp4 stream.
|
||||
MP4: shakaDemo.MessageIds.MP4,
|
||||
MP4: 'MP4',
|
||||
// Set if the asset has at least one MPEG-2 TS stream.
|
||||
MP2TS: shakaDemo.MessageIds.MP2TS,
|
||||
MP2TS: 'MPEG-2 TS',
|
||||
// Set if the asset has at least one containerless stream (AAC, etc).
|
||||
CONTAINERLESS: shakaDemo.MessageIds.CONTAINERLESS,
|
||||
CONTAINERLESS: 'Containerless',
|
||||
|
||||
// Set if the asset has at least one stream that is at least 720p.
|
||||
HIGH_DEFINITION: shakaDemo.MessageIds.HIGH_DEFINITION,
|
||||
HIGH_DEFINITION: 'High definition',
|
||||
// Set if the asset has at least one stream that is at least 4k.
|
||||
ULTRA_HIGH_DEFINITION: shakaDemo.MessageIds.ULTRA_HIGH_DEFINITION,
|
||||
ULTRA_HIGH_DEFINITION: 'Ultra-high definition',
|
||||
|
||||
// Set if the asset has at least one stream that is surround sound.
|
||||
SURROUND: shakaDemo.MessageIds.SURROUND,
|
||||
SURROUND: 'Surround sound',
|
||||
|
||||
// Set if the asset is a MPEG-DASH manifest.
|
||||
DASH: shakaDemo.MessageIds.DASH,
|
||||
DASH: 'DASH',
|
||||
// Set if the asset is an HLS manifest.
|
||||
HLS: shakaDemo.MessageIds.HLS,
|
||||
HLS: 'HLS',
|
||||
// Set if the asset is an MSS manifest.
|
||||
MSS: shakaDemo.MessageIds.MSS,
|
||||
MSS: 'MSS',
|
||||
|
||||
// Set if the asset has at least one image stream.
|
||||
THUMBNAILS: shakaDemo.MessageIds.THUMBNAILS,
|
||||
THUMBNAILS: 'Thumbnails',
|
||||
|
||||
// Set if the asset has LCEVC.
|
||||
LCEVC: shakaDemo.MessageIds.LCEVC,
|
||||
LCEVC: 'LCEVC',
|
||||
|
||||
// Set if the asset has Low Latency mode.
|
||||
LOW_LATENCY_STREAM: shakaDemo.MessageIds.LOW_LATENCY_STREAM,
|
||||
LOW_LATENCY_STREAM: 'Low Latency Streams',
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,311 +0,0 @@
|
||||
/*! @license
|
||||
* Shaka Player
|
||||
* Copyright 2016 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
goog.provide('shakaDemo.MessageIds');
|
||||
|
||||
/* eslint-disable max-len */
|
||||
/** @enum {string} */
|
||||
shakaDemo.MessageIds = {
|
||||
/* Features. */
|
||||
ADS: 'DEMO_ADS',
|
||||
AUDIO_ONLY: 'DEMO_AUDIO_ONLY',
|
||||
CAPTIONS: 'DEMO_CAPTIONS',
|
||||
CONTAINERLESS: 'DEMO_CONTAINERLESS',
|
||||
DASH: 'DEMO_DASH',
|
||||
HIGH_DEFINITION: 'DEMO_HIGH_DEFINITION',
|
||||
HLS: 'DEMO_HLS',
|
||||
LCEVC: 'DEMO_LCEVC',
|
||||
LIVE: 'DEMO_LIVE',
|
||||
MP2TS: 'DEMO_MP2TS',
|
||||
MP4: 'DEMO_MP4',
|
||||
MSS: 'DEMO_MSS',
|
||||
MULTIPLE_LANGUAGES: 'DEMO_MULTIPLE_LANGUAGES',
|
||||
OFFLINE: 'DEMO_OFFLINE',
|
||||
STORED: 'DEMO_STORED',
|
||||
SUBTITLES: 'DEMO_SUBTITLES',
|
||||
SURROUND: 'DEMO_SURROUND',
|
||||
THUMBNAILS: 'DEMO_THUMBNAILS',
|
||||
TRICK_MODE: 'DEMO_TRICK_MODE',
|
||||
ULTRA_HIGH_DEFINITION: 'DEMO_ULTRA_HIGH_DEFINITION',
|
||||
VOD: 'DEMO_VOD',
|
||||
WEBM: 'DEMO_WEBM',
|
||||
XLINK: 'DEMO_XLINK',
|
||||
LOW_LATENCY_STREAM: 'DEMO_LOW_LATENCY_STREAM',
|
||||
/* Key systems. */
|
||||
AES128: 'DEMO_AES128',
|
||||
CLEAR: 'DEMO_CLEAR',
|
||||
CLEAR_KEY: 'DEMO_CLEAR_KEY',
|
||||
FAIRPLAY: 'DEMO_FAIRPLAY',
|
||||
PLAYREADY: 'DEMO_PLAYREADY',
|
||||
WIDEVINE: 'DEMO_WIDEVINE',
|
||||
/* Sources. */
|
||||
APPLE: 'DEMO_APPLE',
|
||||
AXINOM: 'DEMO_AXINOM',
|
||||
AZURE_MEDIA_SERVICES: 'DEMO_AZURE_MEDIA_SERVICES',
|
||||
BITCODIN: 'DEMO_BITCODIN',
|
||||
CUSTOM: 'DEMO_CUSTOM',
|
||||
DASH_IF: 'DEMO_DASH_IF',
|
||||
GPAC: 'DEMO_GPAC',
|
||||
IRT: 'DEMO_IRT',
|
||||
METACDN: 'DEMO_METACDN',
|
||||
MICROSOFT: 'DEMO_MICROSOFT',
|
||||
NIMBLE_STREAMER: 'DEMO_NIMBLE_STREAMER',
|
||||
SHAKA: 'DEMO_SHAKA',
|
||||
UNIFIED_STREAMING: 'DEMO_UNIFIED_STREAMING',
|
||||
UPLYNK: 'DEMO_UPLYNK',
|
||||
/* HTML. */
|
||||
ALL_CONTENT: 'DEMO_ALL_CONTENT',
|
||||
CDN_HEADER: 'DEMO_CDN_HEADER',
|
||||
COMPILED_DEBUG: 'DEMO_COMPILED_DEBUG',
|
||||
COMPILED_RELEASE: 'DEMO_COMPILED_RELEASE',
|
||||
CONFIG: 'DEMO_CONFIG',
|
||||
CUSTOM_CONTENT: 'DEMO_CUSTOM_CONTENT',
|
||||
DEMO_MODE_HEADER: 'DEMO_DEMO_MODE_HEADER',
|
||||
DOCUMENTATION: 'DEMO_DOCUMENTATION',
|
||||
HOME: 'DEMO_HOME',
|
||||
JSDELIVR: 'DEMO_JSDELIVR',
|
||||
LIBRARIES: 'DEMO_LIBRARIES',
|
||||
LICENSE: 'DEMO_LICENSE',
|
||||
NPM: 'DEMO_NPM',
|
||||
PROJECT_LINKS_HEADER: 'DEMO_PROJECT_LINKS_HEADER',
|
||||
REPORT_BUG: 'DEMO_REPORT_BUG',
|
||||
SOURCE: 'DEMO_SOURCE',
|
||||
SUPPORT: 'DEMO_SUPPORT',
|
||||
UNCOMPILED: 'DEMO_UNCOMPILED',
|
||||
/* Common. */
|
||||
FAILURE_MISC: 'DEMO_FAILURE_MISC',
|
||||
FAILURE_NO_BROWSER_SUPPORT: 'DEMO_FAILURE_NO_BROWSER_SUPPORT',
|
||||
PLAY: 'DEMO_PLAY',
|
||||
PROMPT_NO: 'DEMO_PROMPT_NO',
|
||||
PROMPT_YES: 'DEMO_PROMPT_YES',
|
||||
UNSUPPORTED_DISABLED: 'DEMO_UNSUPPORTED_DISABLED',
|
||||
UNSUPPORTED_NO_DASH_SUPPORT: 'DEMO_UNSUPPORTED_NO_DASH_SUPPORT',
|
||||
UNSUPPORTED_NO_DOWNLOAD: 'DEMO_UNSUPPORTED_NO_DOWNLOAD',
|
||||
UNSUPPORTED_NO_FORMAT_SUPPORT: 'DEMO_UNSUPPORTED_NO_FORMAT_SUPPORT',
|
||||
UNSUPPORTED_NO_HLS_SUPPORT: 'DEMO_UNSUPPORTED_NO_HLS_SUPPORT',
|
||||
UNSUPPORTED_NO_OFFLINE: 'DEMO_UNSUPPORTED_NO_OFFLINE',
|
||||
UNSUPPORTED_NO_KEY_SUPPORT: 'DEMO_UNSUPPORTED_NO_KEY_SUPPORT',
|
||||
UNSUPPORTED_NO_LICENSE_SUPPORT: 'DEMO_UNSUPPORTED_NO_LICENSE_SUPPORT',
|
||||
UNSUPPORTED_NO_MSS_SUPPORT: 'DEMO_UNSUPPORTED_NO_MSS_SUPPORT',
|
||||
/* Visualizer. */
|
||||
VISUALIZER_AUTO_SCREENSHOT_TOGGLE: 'DEMO_VISUALIZER_AUTO_SCREENSHOT_TOGGLE',
|
||||
VISUALIZER_BUTTON: 'DEMO_VISUALIZER_BUTTON',
|
||||
VISUALIZER_SCREENSHOT_BUTTON: 'DEMO_VISUALIZER_SCREENSHOT_BUTTON',
|
||||
/* Asset card. */
|
||||
DELETE_STORED_PROMPT: 'DEMO_DELETE_STORED_PROMPT',
|
||||
UNSUPPORTED: 'DEMO_UNSUPPORTED',
|
||||
/* Front panel. */
|
||||
FRONT_INTRO_DISMISS: 'DEMO_FRONT_INTRO_DISMISS',
|
||||
FRONT_INTRO_ONE: 'DEMO_FRONT_INTRO_ONE',
|
||||
FRONT_INTRO_TWO: 'DEMO_FRONT_INTRO_TWO',
|
||||
/* Custom panel. */
|
||||
AD_TAG_URL: 'DEMO_AD_TAG_URL',
|
||||
ADS_TAB: 'DEMO_ADS_TAB',
|
||||
IMA_ASSET_KEY: 'DEMO_IMA_ASSET_KEY',
|
||||
IMA_CONTENT_SRC_ID: 'DEMO_IMA_CONTENT_SRC_ID',
|
||||
IMA_MANIFEST_TYPE: 'DEMO_IMA_MANIFEST_TYPE',
|
||||
IMA_VIDEO_ID: 'DEMO_IMA_VIDEO_ID',
|
||||
CANCEL_BUTTON: 'DEMO_CANCEL_BUTTON',
|
||||
CUSTOM_INTRO_ONE: 'DEMO_CUSTOM_INTRO_ONE',
|
||||
CUSTOM_INTRO_TWO: 'DEMO_CUSTOM_INTRO_TWO',
|
||||
CUSTOM_INTRO_THREE: 'DEMO_CUSTOM_INTRO_THREE',
|
||||
DELETE_CUSTOM: 'DEMO_DELETE_CUSTOM',
|
||||
DELETE_CUSTOM_PROMPT: 'DEMO_DELETE_CUSTOM_PROMPT',
|
||||
DRM_SYSTEM: 'DEMO_DRM_SYSTEM',
|
||||
DRM_TAB: 'DEMO_DRM_TAB',
|
||||
EDIT_CUSTOM: 'DEMO_EDIT_CUSTOM',
|
||||
HLS_FULL_MIME_TYPE: 'DEMO_HLS_FULL_MIME_TYPE',
|
||||
HLS_TAB: 'DEMO_HLS_TAB',
|
||||
HEADERS_TAB: 'DEMO_HEADERS_TAB',
|
||||
ICON_URL: 'DEMO_ICON_URL',
|
||||
LICENSE_CERTIFICATE_URL: 'DEMO_LICENSE_CERTIFICATE_URL',
|
||||
LICENSE_HEADER_NAME: 'DEMO_LICENSE_HEADER_NAME',
|
||||
LICENSE_HEADER_TITLE: 'DEMO_LICENSE_HEADER_TITLE',
|
||||
LICENSE_HEADER_VALUE: 'DEMO_LICENSE_HEADER_VALUE',
|
||||
LICENSE_SERVER_URL: 'DEMO_LICENSE_SERVER_URL',
|
||||
MAIN_TAB: 'DEMO_MAIN_TAB',
|
||||
MANIFEST_URL: 'DEMO_MANIFEST_URL',
|
||||
MANIFEST_URL_ERROR: 'DEMO_MANIFEST_URL_ERROR',
|
||||
NAME: 'DEMO_NAME',
|
||||
NAME_ERROR: 'DEMO_NAME_ERROR',
|
||||
EXTRA_SHAKA_PLAYER_CONFIG: 'DEMO_EXTRA_SHAKA_PLAYER_CONFIG',
|
||||
EXTRA_TAB: 'DEMO_EXTRA_TAB',
|
||||
INVALID_JSON_CONFIG_ERROR: 'DEMO_INVALID_JSON_CONFIG_ERROR',
|
||||
MIME_TYPE: 'DEMO_MIME_TYPE',
|
||||
SAVE_BUTTON: 'DEMO_SAVE_BUTTON',
|
||||
/* Search panel. */
|
||||
AD_SEARCH: 'DEMO_AD_SEARCH',
|
||||
AUDIO_ONLY_SEARCH: 'DEMO_AUDIO_ONLY_SEARCH',
|
||||
CONTAINER_SEARCH: 'DEMO_CONTAINER_SEARCH',
|
||||
DRM_SEARCH: 'DEMO_DRM_SEARCH',
|
||||
HIGH_DEFINITION_SEARCH: 'DEMO_HIGH_DEFINITION_SEARCH',
|
||||
LIVE_SEARCH: 'DEMO_LIVE_SEARCH',
|
||||
MANIFEST_SEARCH: 'DEMO_MANIFEST_SEARCH',
|
||||
OFFLINE_SEARCH: 'DEMO_OFFLINE_SEARCH',
|
||||
STORED_SEARCH: 'DEMO_STORED_SEARCH',
|
||||
SUBTITLES_SEARCH: 'DEMO_SUBTITLES_SEARCH',
|
||||
SURROUND_SEARCH: 'DEMO_SURROUND_SEARCH',
|
||||
SOURCE_SEARCH: 'DEMO_SOURCE_SEARCH',
|
||||
TRICK_MODE_SEARCH: 'DEMO_TRICK_MODE_SEARCH',
|
||||
XLINK_SEARCH: 'DEMO_XLINK_SEARCH',
|
||||
/* Config panel. */
|
||||
ADAPTATION_RESTRICTIONS_SECTION_HEADER: 'DEMO_ADAPTATION_RESTRICTIONS_SECTION_HEADER',
|
||||
ADAPTATION_SECTION_HEADER: 'DEMO_ADAPTATION_SECTION_HEADER',
|
||||
ADS_SECTION_HEADER: 'DEMO_ADS_SECTION_HEADER',
|
||||
ALWAYS_STREAM_TEXT: 'DEMO_ALWAYS_STREAM_TEXT',
|
||||
ALWAYS_STREAM_TEXT_WARNING: 'DEMO_ALWAYS_STREAM_TEXT_WARNING',
|
||||
AUDIO_CHANNEL_COUNT: 'DEMO_AUDIO_CHANNEL_COUNT',
|
||||
AUDIO_LANGUAGE: 'DEMO_AUDIO_LANGUAGE',
|
||||
AUDIO_LABEL: 'DEMO_AUDIO_LABEL',
|
||||
AUDIO_ROBUSTNESS: 'DEMO_AUDIO_ROBUSTNESS',
|
||||
AUTO_CORRECT_DASH_DRIFT: 'DEMO_AUTO_CORRECT_DASH_DRIFT',
|
||||
AUTO_LOW_LATENCY: 'DEMO_AUTO_LOW_LATENCY',
|
||||
AUTO_SHOW_TEXT: 'DEMO_AUTO_SHOW_TEXT',
|
||||
AUTO_SHOW_TEXT_NEVER: 'DEMO_AUTO_SHOW_TEXT_NEVER',
|
||||
AUTO_SHOW_TEXT_ALWAYS: 'DEMO_AUTO_SHOW_TEXT_ALWAYS',
|
||||
AUTO_SHOW_TEXT_IF_PREFERRED_TEXT_LANGUAGE: 'DEMO_AUTO_SHOW_TEXT_IF_PREFERRED_TEXT_LANGUAGE',
|
||||
AUTO_SHOW_TEXT_IF_SUBTITLES_MAY_BE_NEEDED: 'DEMO_AUTO_SHOW_TEXT_IF_SUBTITLES_MAY_BE_NEEDED',
|
||||
AVAILABILITY_WINDOW_OVERRIDE: 'DEMO_AVAILABILITY_WINDOW_OVERRIDE',
|
||||
BACKOFF_FACTOR: 'DEMO_BACKOFF_FACTOR',
|
||||
BASE_DELAY: 'DEMO_BASE_DELAY',
|
||||
BANDWIDTH_DOWNGRADE: 'DEMO_BANDWIDTH_DOWNGRADE',
|
||||
BANDWIDTH_ESTIMATE: 'DEMO_BANDWIDTH_ESTIMATE',
|
||||
BANDWIDTH_UPGRADE: 'DEMO_BANDWIDTH_UPGRADE',
|
||||
BUFFER_BEHIND: 'DEMO_BUFFER_BEHIND',
|
||||
BUFFERING_GOAL: 'DEMO_BUFFERING_GOAL',
|
||||
CLEAR_BUFFER_SWITCH: 'DEMO_CLEAR_BUFFER_SWITCH',
|
||||
CLOCK_SYNC_URI: 'DEMO_CLOCK_SYNC_URI',
|
||||
CMCD_SECTION_HEADER: 'DEMO_CMCD_SECTION_HEADER',
|
||||
CONNECTION_TIMEOUT: 'DEMO_CONNECTION_TIMEOUT',
|
||||
CONTENT_ID: 'DEMO_CONTENT_ID',
|
||||
CUSTOM_PLAYHEAD_TRACKER: 'DEMO_CUSTOM_PLAYHEAD_TRACKER',
|
||||
DASH_SEQUENCE_MODE: 'DEMO_DASH_SEQUENCE_MODE',
|
||||
DEFAULT_AUDIO_CODEC: 'DEMO_DEFAULT_AUDIO_CODEC',
|
||||
DEFAULT_PRESENTATION_DELAY: 'DEMO_DEFAULT_PRESENTATION_DELAY',
|
||||
DEFAULT_VIDEO_CODEC: 'DEMO_DEFAULT_VIDEO_CODEC',
|
||||
DELAY_LICENSE: 'DEMO_DELAY_LICENSE',
|
||||
DISABLE_AUDIO: 'DEMO_DISABLE_AUDIO',
|
||||
DISABLE_TEXT: 'DEMO_DISABLE_TEXT',
|
||||
DISABLE_THUMBNAILS: 'DEMO_DISABLE_THUMBNAILS',
|
||||
DISABLE_VIDEO: 'DEMO_DISABLE_VIDEO',
|
||||
DISABLE_XLINK_PROCESSING: 'DEMO_DISABLE_XLINK_PROCESSING',
|
||||
DISPATCH_ALL_EMSG_BOXES: 'DEMO_DISPATCH_ALL_EMSG_BOXES',
|
||||
OBSERVE_QUALITY_CHANGES: 'DEMO_OBSERVE_QUALITY_CHANGES',
|
||||
DRM_RETRY_SECTION_HEADER: 'DEMO_DRM_RETRY_SECTION_HEADER',
|
||||
DRM_SECTION_HEADER: 'DEMO_DRM_SECTION_HEADER',
|
||||
DRM_SESSION_TYPE: 'DEMO_DRM_SESSION_TYPE',
|
||||
DURATION_BACKOFF: 'DEMO_DURATION_BACKOFF',
|
||||
ENABLED: 'DEMO_ENABLED',
|
||||
ENABLE_AUDIO_GROUPS: 'DEMO_ENABLE_AUDIO_GROUPS',
|
||||
FAST_HALF_LIFE: 'DEMO_FAST_HALF_LIFE',
|
||||
FORCE_HTTPS: 'DEMO_FORCE_HTTPS',
|
||||
FORCE_TRANSMUX: 'DEMO_FORCE_TRANSMUX',
|
||||
INSERT_FAKE_ENCRYPTION_IN_INIT: 'DEMO_INSERT_FAKE_ENCRYPTION_IN_INIT',
|
||||
FUZZ_FACTOR: 'DEMO_FUZZ_FACTOR',
|
||||
GAP_DETECTION_THRESHOLD: 'DEMO_GAP_DETECTION_THRESHOLD',
|
||||
GAP_JUMP_TIMER_TIME: 'DEMO_GAP_JUMP_TIMER_TIME',
|
||||
HDR_LEVEL: 'DEMO_HDR_LEVEL',
|
||||
HDR_LEVEL_AUTO: 'DEMO_HDR_LEVEL_AUTO',
|
||||
HDR_LEVEL_HLG: 'DEMO_HDR_LEVEL_HLG',
|
||||
HDR_LEVEL_NONE: 'DEMO_HDR_LEVEL_NONE',
|
||||
HDR_LEVEL_PQ: 'DEMO_HDR_LEVEL_PQ',
|
||||
HDR_LEVEL_SDR: 'DEMO_HDR_LEVEL_SDR',
|
||||
HLS_SEQUENCE_MODE: 'DEMO_HLS_SEQUENCE_MODE',
|
||||
IGNORE_DASH_EMPTY_ADAPTATION_SET: 'DEMO_IGNORE_DASH_EMPTY_ADAPTATION_SET',
|
||||
IGNORE_DASH_DRM: 'DEMO_IGNORE_DASH_DRM',
|
||||
IGNORE_DASH_MAX_SEGMENT_DURATION: 'DEMO_IGNORE_DASH_MAX_SEGMENT_DURATION',
|
||||
IGNORE_DASH_SUGGESTED_PRESENTATION_DELAY: 'DEMO_IGNORE_DASH_SUGGESTED_PRESENTATION_DELAY',
|
||||
IGNORE_DEVICE_PIXEL_RATIO: 'DEMO_IGNORE_DEVICE_PIXEL_RATIO',
|
||||
IGNORE_HLS_IMAGE_FAILURES: 'DEMO_IGNORE_HLS_IMAGE_FAILURES',
|
||||
IGNORE_HLS_TEXT_FAILURES: 'DEMO_IGNORE_HLS_TEXT_FAILURES',
|
||||
IGNORE_MANIFEST_PROGRAM_DATE_TIME: 'DEMO_IGNORE_MANIFEST_PROGRAM_DATE_TIME',
|
||||
IGNORE_MANIFEST_TIMESTAMPS_IN_SEGMENTS_MODE: 'DEMO_IGNORE_MANIFEST_TIMESTAMPS_IN_SEGMENTS_MODE',
|
||||
IGNORE_MIN_BUFFER_TIME: 'DEMO_IGNORE_MIN_BUFFER_TIME',
|
||||
IGNORE_TEXT_FAILURES: 'DEMO_IGNORE_TEXT_FAILURES',
|
||||
INACCURATE_MANIFEST_TOLERANCE: 'DEMO_INACCURATE_MANIFEST_TOLERANCE',
|
||||
INITIAL_SEGMENT_LIMIT: 'DEMO_INITIAL_SEGMENT_LIMIT',
|
||||
LANGUAGE_SECTION_HEADER: 'DEMO_LANGUAGE_SECTION_HEADER',
|
||||
LCEVC_DRAW_LOGO: 'DEMO_LCEVC_DRAW_LOGO',
|
||||
LCEVC_DYNAMIC_PERFORMANCE_SCALING: 'DEMO_LCEVC_DYNAMIC_PERFORMANCE_SCALING',
|
||||
LCEVC_LOG_LEVEL: 'DEMO_LCEVC_LOG_LEVEL',
|
||||
LCEVC_SECTION_HEADER: 'DEMO_LCEVC_SECTION_HEADER',
|
||||
LIVE_SEGMENTS_DELAY: 'DEMO_LIVE_SEGMENTS_DELAY',
|
||||
LIVE_SYNC: 'DEMO_LIVE_SYNC',
|
||||
LIVE_SYNC_MAX_LATENCY: 'DEMO_LIVE_SYNC_MAX_LATENCY',
|
||||
LIVE_SYNC_PLAYBACK_RATE: 'DEMO_LIVE_SYNC_PLAYBACK_RATE',
|
||||
LOG_LEVEL: 'DEMO_LOG_LEVEL',
|
||||
LOG_LEVEL_DEBUG: 'DEMO_LOG_LEVEL_DEBUG',
|
||||
LOG_LEVEL_INFO: 'DEMO_LOG_LEVEL_INFO',
|
||||
LOG_LEVEL_V: 'DEMO_LOG_LEVEL_V',
|
||||
LOG_LEVEL_VV: 'DEMO_LOG_LEVEL_VV',
|
||||
LOG_LICENSE_EXCHANGE: 'DEMO_LOG_LICENSE_EXCHANGE',
|
||||
LOW_LATENCY: 'DEMO_LOW_LATENCY',
|
||||
MANIFEST_RETRY_SECTION_HEADER: 'DEMO_MANIFEST_RETRY_SECTION_HEADER',
|
||||
MANIFEST_SECTION_HEADER: 'DEMO_MANIFEST_SECTION_HEADER',
|
||||
MAX_ATTEMPTS: 'DEMO_MAX_ATTEMPTS',
|
||||
MAX_BANDWIDTH: 'DEMO_MAX_BANDWIDTH',
|
||||
MAX_DISABLED_TIME: 'DEMO_MAX_DISABLED_TIME',
|
||||
MAX_FRAMERATE: 'DEMO_MAX_FRAMERATE',
|
||||
MAX_HEIGHT: 'DEMO_MAX_HEIGHT',
|
||||
MAX_PIXELS: 'DEMO_MAX_PIXELS',
|
||||
MAX_WIDTH: 'DEMO_MAX_WIDTH',
|
||||
MEDIA_SOURCE_SECTION_HEADER: 'DEMO_MEDIA_SOURCE_SECTION_HEADER',
|
||||
MIN_BANDWIDTH: 'DEMO_MIN_BANDWIDTH',
|
||||
MIN_BYTES: 'DEMO_MIN_BYTES',
|
||||
MIN_HDCP_VERSION: 'DEMO_MIN_HDCP_VERSION',
|
||||
MIN_FRAMERATE: 'DEMO_MIN_FRAMERATE',
|
||||
MIN_HEIGHT: 'DEMO_MIN_HEIGHT',
|
||||
MIN_PIXELS: 'DEMO_MIN_PIXELS',
|
||||
MIN_TOTAL_BYTES: 'DEMO_MIN_TOTAL_BYTES',
|
||||
MIN_WIDTH: 'DEMO_MIN_WIDTH',
|
||||
MSS_SEQUENCE_MODE: 'DEMO_MSS_SEQUENCE_MODE',
|
||||
NETWORK_INFORMATION: 'DEMO_NETWORK_INFORMATION',
|
||||
NUMBER_DECIMAL_WARNING: 'DEMO_NUMBER_DECIMAL_WARNING',
|
||||
NUMBER_INTEGER_WARNING: 'DEMO_NUMBER_INTEGER_WARNING',
|
||||
NUMBER_NONZERO_DECIMAL_WARNING: 'DEMO_NUMBER_NONZERO_DECIMAL_WARNING',
|
||||
NUMBER_NONZERO_INTEGER_WARNING: 'DEMO_NUMBER_NONZERO_INTEGER_WARNING',
|
||||
NUMBER_OF_PARALLEL_DOWNLOADS: 'DEMO_NUMBER_OF_PARALLEL_DOWNLOADS',
|
||||
OFFLINE_SECTION_HEADER: 'DEMO_OFFLINE_SECTION_HEADER',
|
||||
PARSE_INBAND_PSSH_ENABLED: 'DEMO_PARSE_INBAND_PSSH_ENABLED',
|
||||
PREFER_FORCED_SUBS: 'DEMO_PREFER_FORCED_SUBS',
|
||||
PREFER_NATIVE_HLS: 'DEMO_PREFER_NATIVE_HLS',
|
||||
REBUFFERING_GOAL: 'DEMO_REBUFFERING_GOAL',
|
||||
RESTRICT_TO_ELEMENT_SIZE: 'DEMO_RESTRICT_TO_ELEMENT_SIZE',
|
||||
RESTRICT_TO_SCREEN_SIZE: 'DEMO_RESTRICT_TO_SCREEN_SIZE',
|
||||
RESTRICTIONS_SECTION_HEADER: 'DEMO_RESTRICTIONS_SECTION_HEADER',
|
||||
SAFE_MARGIN_SWITCH: 'DEMO_SAFE_MARGIN_SWITCH',
|
||||
SAFE_SEEK_OFFSET: 'DEMO_SAFE_SEEK_OFFSET',
|
||||
SAFE_SKIP_DISTANCE: 'DEMO_SAFE_SKIP_DISTANCE',
|
||||
SEGMENT_RELATIVE_VTT_TIMING: 'DEMO_SEGMENT_RELATIVE_VTT_TIMING',
|
||||
SESSION_ID: 'DEMO_SESSION_ID',
|
||||
SHAKA_CONTROLS: 'DEMO_SHAKA_CONTROLS',
|
||||
SLOW_HALF_LIFE: 'DEMO_SLOW_HALF_LIFE',
|
||||
SOURCE_BUFFER_EXTRA_FEATURES: 'DEMO_SOURCE_BUFFER_EXTRA_FEATURES',
|
||||
STALL_DETECTOR_ENABLED: 'DEMO_STALL_DETECTOR_ENABLED',
|
||||
STALL_THRESHOLD: 'DEMO_STALL_THRESHOLD',
|
||||
STALL_TIMEOUT: 'DEMO_STALL_TIMEOUT',
|
||||
START_AT_SEGMENT_BOUNDARY: 'DEMO_START_AT_SEGMENT_BOUNDARY',
|
||||
STREAMING_RETRY_SECTION_HEADER: 'DEMO_STREAMING_RETRY_SECTION_HEADER',
|
||||
STREAMING_SECTION_HEADER: 'DEMO_STREAMING_SECTION_HEADER',
|
||||
SWITCH_INTERVAL: 'DEMO_SWITCH_INTERVAL',
|
||||
TEXT_LANGUAGE: 'DEMO_TEXT_LANGUAGE',
|
||||
TEXT_ROLE: 'DEMO_TEXT_ROLE',
|
||||
TIMEOUT: 'DEMO_TIMEOUT',
|
||||
TRICK_PLAY_CONTROLS: 'DEMO_TRICK_PLAY_CONTROLS',
|
||||
TRICK_PLAY_CONTROLS_WARNING: 'DEMO_TRICK_PLAY_CONTROLS_WARNING',
|
||||
UI_LOCALE: 'DEMO_UI_LOCALE',
|
||||
UPDATE_EXPIRATION_TIME: 'DEMO_UPDATE_EXPIRATION_TIME',
|
||||
UPDATE_INTERVAL_SECONDS: 'DEMO_UPDATE_INTERVAL_SECONDS',
|
||||
USE_HEADERS: 'DEMO_USE_HEADERS',
|
||||
USE_NATIVE_HLS_SAFARI: 'DEMO_USE_NATIVE_HLS_SAFARI',
|
||||
USE_PERSISTENT_LICENSES: 'DEMO_USE_PERSISTENT_LICENSES',
|
||||
USE_SAFARI_BEHAVIOR_FOR_LIVE: 'DEMO_USE_SAFARI_BEHAVIOR_FOR_LIVE',
|
||||
VIDEO_ROBUSTNESS: 'DEMO_VIDEO_ROBUSTNESS',
|
||||
VNOVA: 'DEMO_VNOVA',
|
||||
XLINK_FAIL_GRACEFULLY: 'DEMO_XLINK_FAIL_GRACEFULLY',
|
||||
SEGMENT_PREFETCH_LIMIT: 'DEMO_SEGMENT_PREFETCH_LIMIT',
|
||||
};
|
||||
/* eslint-enable max-len */
|
||||
+181
-255
@@ -11,7 +11,6 @@ goog.require('goog.asserts');
|
||||
goog.require('shakaDemo.BoolInput');
|
||||
goog.require('shakaDemo.DatalistInput');
|
||||
goog.require('shakaDemo.InputContainer');
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
goog.require('shakaDemo.NumberInput');
|
||||
goog.require('shakaDemo.SelectInput');
|
||||
goog.require('shakaDemo.TextInput');
|
||||
@@ -58,11 +57,6 @@ shakaDemo.Config = class {
|
||||
// changes based on the config changes.
|
||||
this.reloadAndSaveState_();
|
||||
});
|
||||
document.addEventListener('shaka-main-locale-changed', () => {
|
||||
// Respond to them by remaking. This is to avoid triggering any config
|
||||
// changes based on the config changes.
|
||||
this.reloadAndSaveState_();
|
||||
});
|
||||
document.addEventListener('shaka-main-drawer-state-change', () => {
|
||||
this.setContentAvailability_(shakaDemoMain.getIsDrawerOpen());
|
||||
});
|
||||
@@ -94,8 +88,7 @@ shakaDemo.Config = class {
|
||||
this.addStreamingSection_();
|
||||
this.addMediaSourceSection_();
|
||||
this.addManifestSection_();
|
||||
this.addRetrictionsSection_('',
|
||||
shakaDemo.MessageIds.RESTRICTIONS_SECTION_HEADER);
|
||||
this.addRetrictionsSection_('', 'Restrictions');
|
||||
this.addCmcdSection_();
|
||||
this.addLcevcSection_();
|
||||
this.addAdsSection_();
|
||||
@@ -123,22 +116,19 @@ shakaDemo.Config = class {
|
||||
|
||||
/** @private */
|
||||
addDrmSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.DrmConfiguration');
|
||||
this.addSection_(MessageIds.DRM_SECTION_HEADER, docLink)
|
||||
.addBoolInput_(MessageIds.DELAY_LICENSE,
|
||||
this.addSection_('DRM', docLink)
|
||||
.addBoolInput_('Delay License Request Until Played',
|
||||
'drm.delayLicenseRequestUntilPlayed')
|
||||
.addBoolInput_(MessageIds.LOG_LICENSE_EXCHANGE,
|
||||
'drm.logLicenseExchange')
|
||||
.addNumberInput_(MessageIds.UPDATE_EXPIRATION_TIME,
|
||||
.addBoolInput_('Log license exchange data', 'drm.logLicenseExchange')
|
||||
.addNumberInput_('Update expiration time',
|
||||
'drm.updateExpirationTime',
|
||||
/* canBeDecimal= */ true,
|
||||
/* canBeZero= */ false,
|
||||
/* canBeUnset= */ true)
|
||||
.addBoolInput_(MessageIds.PARSE_INBAND_PSSH_ENABLED,
|
||||
.addBoolInput_('Parse inband "pssh" from media segments',
|
||||
'drm.parseInbandPsshEnabled')
|
||||
.addTextInput_(MessageIds.MIN_HDCP_VERSION,
|
||||
'drm.minHdcpVersion');
|
||||
.addTextInput_('Min HDCP version', 'drm.minHdcpVersion');
|
||||
const advanced = shakaDemoMain.getConfiguration().drm.advanced || {};
|
||||
const addDRMAdvancedField = (name, valueName, suggestions) => {
|
||||
// All advanced fields of a given type are set at once.
|
||||
@@ -177,301 +167,254 @@ shakaDemo.Config = class {
|
||||
const sessionTypeSuggestions = ['temporary', 'persistent-license'];
|
||||
|
||||
addDRMAdvancedField(
|
||||
MessageIds.VIDEO_ROBUSTNESS,
|
||||
'videoRobustness',
|
||||
robustnessSuggestions);
|
||||
'Video Robustness', 'videoRobustness', robustnessSuggestions);
|
||||
addDRMAdvancedField(
|
||||
MessageIds.AUDIO_ROBUSTNESS,
|
||||
'audioRobustness',
|
||||
robustnessSuggestions);
|
||||
addDRMAdvancedField(
|
||||
MessageIds.DRM_SESSION_TYPE,
|
||||
'sessionType',
|
||||
sessionTypeSuggestions);
|
||||
'Audio Robustness', 'audioRobustness', robustnessSuggestions);
|
||||
addDRMAdvancedField('Session Type', 'sessionType', sessionTypeSuggestions);
|
||||
|
||||
this.addRetrySection_('drm', MessageIds.DRM_RETRY_SECTION_HEADER);
|
||||
this.addRetrySection_('drm', 'DRM Retry Parameters');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addManifestSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.ManifestConfiguration');
|
||||
this.addSection_(MessageIds.MANIFEST_SECTION_HEADER, docLink)
|
||||
.addBoolInput_(MessageIds.IGNORE_DASH_DRM,
|
||||
'manifest.dash.ignoreDrmInfo')
|
||||
.addBoolInput_(MessageIds.AUTO_CORRECT_DASH_DRIFT,
|
||||
this.addSection_('Manifest', docLink)
|
||||
.addBoolInput_('Ignore DASH DRM Info', 'manifest.dash.ignoreDrmInfo')
|
||||
.addBoolInput_('Auto-Correct DASH Drift',
|
||||
'manifest.dash.autoCorrectDrift')
|
||||
.addBoolInput_(MessageIds.DISABLE_XLINK_PROCESSING,
|
||||
.addBoolInput_('Disable Xlink processing',
|
||||
'manifest.dash.disableXlinkProcessing')
|
||||
.addBoolInput_(MessageIds.XLINK_FAIL_GRACEFULLY,
|
||||
.addBoolInput_('Xlink Should Fail Gracefully',
|
||||
'manifest.dash.xlinkFailGracefully')
|
||||
.addBoolInput_(MessageIds.IGNORE_DASH_SUGGESTED_PRESENTATION_DELAY,
|
||||
.addBoolInput_('Ignore DASH suggestedPresentationDelay',
|
||||
'manifest.dash.ignoreSuggestedPresentationDelay')
|
||||
.addBoolInput_(MessageIds.IGNORE_DASH_EMPTY_ADAPTATION_SET,
|
||||
.addBoolInput_('Ignore empty DASH AdaptationSets',
|
||||
'manifest.dash.ignoreEmptyAdaptationSet')
|
||||
.addBoolInput_(MessageIds.IGNORE_DASH_MAX_SEGMENT_DURATION,
|
||||
.addBoolInput_('Ignore DASH maxSegmentDuration',
|
||||
'manifest.dash.ignoreMaxSegmentDuration')
|
||||
.addBoolInput_(MessageIds.IGNORE_HLS_TEXT_FAILURES,
|
||||
.addBoolInput_('Ignore HLS Text Stream Failures',
|
||||
'manifest.hls.ignoreTextStreamFailures')
|
||||
.addBoolInput_(MessageIds.IGNORE_HLS_IMAGE_FAILURES,
|
||||
.addBoolInput_('Ignore HLS Image Stream Failures',
|
||||
'manifest.hls.ignoreImageStreamFailures')
|
||||
.addTextInput_(MessageIds.DEFAULT_AUDIO_CODEC,
|
||||
'manifest.hls.defaultAudioCodec')
|
||||
.addTextInput_(MessageIds.DEFAULT_VIDEO_CODEC,
|
||||
'manifest.hls.defaultVideoCodec')
|
||||
.addBoolInput_(MessageIds.IGNORE_MANIFEST_PROGRAM_DATE_TIME,
|
||||
.addTextInput_('Default Audio Codec', 'manifest.hls.defaultAudioCodec')
|
||||
.addTextInput_('Default Video Codec', 'manifest.hls.defaultVideoCodec')
|
||||
.addBoolInput_('Ignore Program Date Time from manifest',
|
||||
'manifest.hls.ignoreManifestProgramDateTime')
|
||||
.addBoolInput_(MessageIds.USE_SAFARI_BEHAVIOR_FOR_LIVE,
|
||||
.addBoolInput_('Use Safari behavior for live',
|
||||
'manifest.hls.useSafariBehaviorForLive')
|
||||
.addNumberInput_(MessageIds.LIVE_SEGMENTS_DELAY,
|
||||
.addNumberInput_('Live segments delay',
|
||||
'manifest.hls.liveSegmentsDelay')
|
||||
.addBoolInput_(MessageIds.HLS_SEQUENCE_MODE,
|
||||
'manifest.hls.sequenceMode')
|
||||
.addBoolInput_(MessageIds.IGNORE_MANIFEST_TIMESTAMPS_IN_SEGMENTS_MODE,
|
||||
.addBoolInput_('Enable HLS sequence mode', 'manifest.hls.sequenceMode')
|
||||
.addBoolInput_('Ignore Manifest Timestamps in Segments Mode',
|
||||
'manifest.hls.ignoreManifestTimestampsInSegmentsMode')
|
||||
.addNumberInput_(MessageIds.AVAILABILITY_WINDOW_OVERRIDE,
|
||||
.addNumberInput_('Availability Window Override',
|
||||
'manifest.availabilityWindowOverride',
|
||||
/* canBeDecimal= */ true,
|
||||
/* canBeZero= */ false,
|
||||
/* canBeUnset= */ true)
|
||||
.addTextInput_(MessageIds.CLOCK_SYNC_URI, 'manifest.dash.clockSyncUri')
|
||||
.addNumberInput_(MessageIds.DEFAULT_PRESENTATION_DELAY,
|
||||
.addTextInput_('Clock Sync URI', 'manifest.dash.clockSyncUri')
|
||||
.addNumberInput_('Default Presentation Delay',
|
||||
'manifest.defaultPresentationDelay')
|
||||
.addBoolInput_(MessageIds.ENABLE_AUDIO_GROUPS,
|
||||
'manifest.dash.enableAudioGroups')
|
||||
.addBoolInput_(MessageIds.IGNORE_MIN_BUFFER_TIME,
|
||||
.addBoolInput_('Enable Audio Groups', 'manifest.dash.enableAudioGroups')
|
||||
.addBoolInput_('Ignore Min Buffer Time',
|
||||
'manifest.dash.ignoreMinBufferTime')
|
||||
.addNumberInput_(MessageIds.INITIAL_SEGMENT_LIMIT,
|
||||
.addNumberInput_('Initial Segment Limit',
|
||||
'manifest.dash.initialSegmentLimit',
|
||||
/* canBeDecimal= */ false,
|
||||
/* canBeZero= */ false,
|
||||
/* canBeUnset= */ true)
|
||||
.addBoolInput_(MessageIds.DASH_SEQUENCE_MODE,
|
||||
.addBoolInput_('Enable DASH sequence mode',
|
||||
'manifest.dash.sequenceMode')
|
||||
.addBoolInput_(MessageIds.DISABLE_AUDIO,
|
||||
'manifest.disableAudio')
|
||||
.addBoolInput_(MessageIds.DISABLE_VIDEO,
|
||||
'manifest.disableVideo')
|
||||
.addBoolInput_(MessageIds.DISABLE_TEXT,
|
||||
'manifest.disableText')
|
||||
.addBoolInput_(MessageIds.DISABLE_THUMBNAILS,
|
||||
'manifest.disableThumbnails')
|
||||
.addBoolInput_(MessageIds.SEGMENT_RELATIVE_VTT_TIMING,
|
||||
.addBoolInput_('Disable Audio', 'manifest.disableAudio')
|
||||
.addBoolInput_('Disable Video', 'manifest.disableVideo')
|
||||
.addBoolInput_('Disable Text', 'manifest.disableText')
|
||||
.addBoolInput_('Disable Thumbnails', 'manifest.disableThumbnails')
|
||||
.addBoolInput_('Enable segment-relative VTT Timing',
|
||||
'manifest.segmentRelativeVttTiming')
|
||||
.addBoolInput_(MessageIds.MSS_SEQUENCE_MODE,
|
||||
'manifest.mss.sequenceMode');
|
||||
.addBoolInput_('Enable MSS sequence mode', 'manifest.mss.sequenceMode');
|
||||
|
||||
this.addRetrySection_('manifest', MessageIds.MANIFEST_RETRY_SECTION_HEADER);
|
||||
this.addRetrySection_('manifest', 'Manifest Retry Parameters');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addAbrSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.AbrConfiguration');
|
||||
this.addSection_(MessageIds.ADAPTATION_SECTION_HEADER, docLink)
|
||||
.addBoolInput_(MessageIds.ENABLED, 'abr.enabled')
|
||||
.addBoolInput_(MessageIds.NETWORK_INFORMATION,
|
||||
this.addSection_('Adaptation', docLink)
|
||||
.addBoolInput_('Enabled', 'abr.enabled')
|
||||
.addBoolInput_('Use Network Information API',
|
||||
'abr.useNetworkInformation')
|
||||
.addNumberInput_(MessageIds.BANDWIDTH_ESTIMATE,
|
||||
.addNumberInput_('Default Bandwidth EstimatZ',
|
||||
'abr.defaultBandwidthEstimate')
|
||||
.addNumberInput_(MessageIds.BANDWIDTH_DOWNGRADE,
|
||||
.addNumberInput_('Bandwidth Downgrade Target',
|
||||
'abr.bandwidthDowngradeTarget',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.BANDWIDTH_UPGRADE,
|
||||
.addNumberInput_('Bandwidth Upgrade Target',
|
||||
'abr.bandwidthUpgradeTarget',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.SWITCH_INTERVAL,
|
||||
'abr.switchInterval',
|
||||
.addNumberInput_('Switch Interval', 'abr.switchInterval',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.MIN_TOTAL_BYTES,
|
||||
'abr.advanced.minTotalBytes')
|
||||
.addNumberInput_(MessageIds.MIN_BYTES,
|
||||
'abr.advanced.minBytes')
|
||||
.addNumberInput_(MessageIds.FAST_HALF_LIFE,
|
||||
'abr.advanced.fastHalfLife',
|
||||
.addNumberInput_('Min total Bytes', 'abr.advanced.minTotalBytes')
|
||||
.addNumberInput_('Min Bytes', 'abr.advanced.minBytes')
|
||||
.addNumberInput_('Fast half life', 'abr.advanced.fastHalfLife',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.SLOW_HALF_LIFE,
|
||||
'abr.advanced.slowHalfLife',
|
||||
.addNumberInput_('Slow half life', 'abr.advanced.slowHalfLife',
|
||||
/* canBeDecimal= */ true)
|
||||
.addBoolInput_(MessageIds.RESTRICT_TO_ELEMENT_SIZE,
|
||||
'abr.restrictToElementSize')
|
||||
.addBoolInput_(MessageIds.RESTRICT_TO_SCREEN_SIZE,
|
||||
'abr.restrictToScreenSize')
|
||||
.addBoolInput_(MessageIds.IGNORE_DEVICE_PIXEL_RATIO,
|
||||
.addBoolInput_('Restrict to element size', 'abr.restrictToElementSize')
|
||||
.addBoolInput_('Restrict to screen size', 'abr.restrictToScreenSize')
|
||||
.addBoolInput_('Ignore device pixel ratio',
|
||||
'abr.ignoreDevicePixelRatio')
|
||||
.addBoolInput_(MessageIds.CLEAR_BUFFER_SWITCH,
|
||||
.addBoolInput_('Clear video buffer on abr rendition switch',
|
||||
'abr.clearBufferSwitch')
|
||||
.addNumberInput_(MessageIds.SAFE_MARGIN_SWITCH,
|
||||
.addNumberInput_('Safe margin on abr switch rendition',
|
||||
'abr.safeMarginSwitch',
|
||||
/* canBeDecimal= */ true);
|
||||
this.addRetrictionsSection_('abr',
|
||||
MessageIds.ADAPTATION_RESTRICTIONS_SECTION_HEADER);
|
||||
this.addRetrictionsSection_('abr', 'Adaptation Restrictions');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addCmcdSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.CmcdConfiguration');
|
||||
this.addSection_(MessageIds.CMCD_SECTION_HEADER, docLink)
|
||||
.addBoolInput_(MessageIds.ENABLED, 'cmcd.enabled')
|
||||
.addTextInput_(MessageIds.SESSION_ID, 'cmcd.sessionId')
|
||||
.addTextInput_(MessageIds.CONTENT_ID, 'cmcd.contentId')
|
||||
.addBoolInput_(MessageIds.USE_HEADERS, 'cmcd.useHeaders');
|
||||
this.addSection_('CMCD', docLink)
|
||||
.addBoolInput_('Enabled', 'cmcd.enabled')
|
||||
.addTextInput_('Session ID', 'cmcd.sessionId')
|
||||
.addTextInput_('Content ID', 'cmcd.contentId')
|
||||
.addBoolInput_('Use Headers', 'cmcd.useHeaders');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addLcevcSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.LcevcConfiguration');
|
||||
this.addSection_(MessageIds.LCEVC_SECTION_HEADER, docLink)
|
||||
.addBoolInput_(MessageIds.ENABLED, 'lcevc.enabled')
|
||||
.addBoolInput_(MessageIds.LCEVC_DYNAMIC_PERFORMANCE_SCALING,
|
||||
this.addSection_('MPEG-5 Part-2 LCEVC', docLink)
|
||||
.addBoolInput_('Enabled', 'lcevc.enabled')
|
||||
.addBoolInput_('LCEVC Dynamic Performance scaling',
|
||||
'lcevc.dynamicPerformanceScaling')
|
||||
.addNumberInput_(MessageIds.LCEVC_LOG_LEVEL, 'lcevc.logLevel')
|
||||
.addBoolInput_(MessageIds.LCEVC_DRAW_LOGO, 'lcevc.drawLogo');
|
||||
.addNumberInput_('LCEVC Log Level', 'lcevc.logLevel')
|
||||
.addBoolInput_('Draw LCEVC Logo', 'lcevc.drawLogo');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addAdsSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.AdsConfiguration');
|
||||
this.addSection_(MessageIds.ADS_SECTION_HEADER, docLink)
|
||||
.addBoolInput_(MessageIds.CUSTOM_PLAYHEAD_TRACKER,
|
||||
this.addSection_('Ads', docLink)
|
||||
.addBoolInput_('Custom playhead tracker',
|
||||
'ads.customPlayheadTracker');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} category
|
||||
* @param {!shakaDemo.MessageIds} sectionName
|
||||
* @param {string} sectionName
|
||||
* @private
|
||||
*/
|
||||
addRetrictionsSection_(category, sectionName) {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const prefix = (category ? category + '.' : '') + 'restrictions.';
|
||||
const docLink = this.resolveExternLink_('.Restrictions');
|
||||
this.addSection_(sectionName, docLink)
|
||||
.addNumberInput_(MessageIds.MIN_WIDTH, prefix + 'minWidth')
|
||||
.addNumberInput_(MessageIds.MAX_WIDTH, prefix + 'maxWidth')
|
||||
.addNumberInput_(MessageIds.MIN_HEIGHT, prefix + 'minHeight')
|
||||
.addNumberInput_(MessageIds.MAX_HEIGHT, prefix + 'maxHeight')
|
||||
.addNumberInput_(MessageIds.MIN_PIXELS, prefix + 'minPixels')
|
||||
.addNumberInput_(MessageIds.MAX_PIXELS, prefix + 'maxPixels')
|
||||
.addNumberInput_(MessageIds.MIN_FRAMERATE, prefix + 'minFrameRate')
|
||||
.addNumberInput_(MessageIds.MAX_FRAMERATE, prefix + 'maxFrameRate')
|
||||
.addNumberInput_(MessageIds.MIN_BANDWIDTH, prefix + 'minBandwidth')
|
||||
.addNumberInput_(MessageIds.MAX_BANDWIDTH, prefix + 'maxBandwidth');
|
||||
.addNumberInput_('Min Width', prefix + 'minWidth')
|
||||
.addNumberInput_('Max Width', prefix + 'maxWidth')
|
||||
.addNumberInput_('Min Height', prefix + 'minHeight')
|
||||
.addNumberInput_('Max Height', prefix + 'maxHeight')
|
||||
.addNumberInput_('Min Pixels', prefix + 'minPixels')
|
||||
.addNumberInput_('Max Pixels', prefix + 'maxPixels')
|
||||
.addNumberInput_('Min Framerate', prefix + 'minFrameRate')
|
||||
.addNumberInput_('Max Framerate', prefix + 'maxFrameRate')
|
||||
.addNumberInput_('Min Bandwidth', prefix + 'minBandwidth')
|
||||
.addNumberInput_('Max Bandwidth', prefix + 'maxBandwidth');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} category
|
||||
* @param {!shakaDemo.MessageIds} sectionName
|
||||
* @param {string} sectionName
|
||||
* @private
|
||||
*/
|
||||
addRetrySection_(category, sectionName) {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const prefix = category + '.retryParameters.';
|
||||
const docLink = this.resolveExternLink_('.RetryParameters');
|
||||
this.addSection_(sectionName, docLink)
|
||||
.addNumberInput_(MessageIds.MAX_ATTEMPTS, prefix + 'maxAttempts')
|
||||
.addNumberInput_(MessageIds.BASE_DELAY, prefix + 'baseDelay',
|
||||
.addNumberInput_('Max Attempts', prefix + 'maxAttempts')
|
||||
.addNumberInput_('Base Delay', prefix + 'baseDelay',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.BACKOFF_FACTOR, prefix + 'backoffFactor',
|
||||
.addNumberInput_('Backoff Factor', prefix + 'backoffFactor',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.FUZZ_FACTOR, prefix + 'fuzzFactor',
|
||||
.addNumberInput_('Fuzz Factor', prefix + 'fuzzFactor',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.TIMEOUT, prefix + 'timeout',
|
||||
.addNumberInput_('Timeout Factor', prefix + 'timeout',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.STALL_TIMEOUT, prefix + 'stallTimeout',
|
||||
.addNumberInput_('Stall Timeout', prefix + 'stallTimeout',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.CONNECTION_TIMEOUT,
|
||||
prefix + 'connectionTimeout',
|
||||
.addNumberInput_('Connection Timeout', prefix + 'connectionTimeout',
|
||||
/* canBeDecimal= */ true);
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addOfflineSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.OfflineConfiguration');
|
||||
this.addSection_(MessageIds.OFFLINE_SECTION_HEADER, docLink)
|
||||
.addBoolInput_(MessageIds.USE_PERSISTENT_LICENSES,
|
||||
this.addSection_('Offline', docLink)
|
||||
.addBoolInput_('Use Persistent Licenses',
|
||||
'offline.usePersistentLicense')
|
||||
.addNumberInput_(MessageIds.NUMBER_OF_PARALLEL_DOWNLOADS,
|
||||
.addNumberInput_('Number of Parallel Downloads',
|
||||
'offline.numberOfParallelDownloads');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addStreamingSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.StreamingConfiguration');
|
||||
this.addSection_(MessageIds.STREAMING_SECTION_HEADER, docLink)
|
||||
.addNumberInput_(MessageIds.GAP_DETECTION_THRESHOLD,
|
||||
this.addSection_('Streaming', docLink)
|
||||
.addNumberInput_('Gap detection threshold',
|
||||
'streaming.gapDetectionThreshold',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.GAP_JUMP_TIMER_TIME,
|
||||
'streaming.gapJumpTimerTime',
|
||||
.addNumberInput_('Gap Jump Timer Time', 'streaming.gapJumpTimerTime',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.BUFFERING_GOAL,
|
||||
'streaming.bufferingGoal',
|
||||
.addNumberInput_('Buffering Goal', 'streaming.bufferingGoal',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.DURATION_BACKOFF,
|
||||
'streaming.durationBackoff',
|
||||
.addNumberInput_('Duration Backoff', 'streaming.durationBackoff',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.REBUFFERING_GOAL,
|
||||
'streaming.rebufferingGoal',
|
||||
.addNumberInput_('Rebuffering Goal', 'streaming.rebufferingGoal',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.BUFFER_BEHIND,
|
||||
'streaming.bufferBehind',
|
||||
.addNumberInput_('Buffer Behind', 'streaming.bufferBehind',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.SAFE_SEEK_OFFSET,
|
||||
'streaming.safeSeekOffset',
|
||||
.addNumberInput_('Safe Seek Offset', 'streaming.safeSeekOffset',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.STALL_THRESHOLD,
|
||||
'streaming.stallThreshold',
|
||||
.addNumberInput_('Stall Threshold', 'streaming.stallThreshold',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.SAFE_SKIP_DISTANCE,
|
||||
'streaming.stallSkip',
|
||||
.addNumberInput_('Safe Skip Distance', 'streaming.stallSkip',
|
||||
/* canBeDecimal= */ true)
|
||||
.addNumberInput_(MessageIds.INACCURATE_MANIFEST_TOLERANCE,
|
||||
.addNumberInput_('Inaccurate Manifest Tolerance',
|
||||
'streaming.inaccurateManifestTolerance',
|
||||
/* canBeDecimal= */ true)
|
||||
.addBoolInput_(MessageIds.LOW_LATENCY,
|
||||
'streaming.lowLatencyMode')
|
||||
.addBoolInput_(MessageIds.AUTO_LOW_LATENCY,
|
||||
'streaming.autoLowLatencyMode')
|
||||
.addBoolInput_(MessageIds.FORCE_HTTPS,
|
||||
'streaming.forceHTTPS')
|
||||
.addBoolInput_(MessageIds.PREFER_NATIVE_HLS,
|
||||
.addBoolInput_('Low Latency Mode', 'streaming.lowLatencyMode')
|
||||
.addBoolInput_('Auto Low Latency Mode', 'streaming.autoLowLatencyMode')
|
||||
.addBoolInput_('Force HTTPS', 'streaming.forceHTTPS')
|
||||
.addBoolInput_('Prefer native HLS playback when available',
|
||||
'streaming.preferNativeHls')
|
||||
.addNumberInput_(MessageIds.UPDATE_INTERVAL_SECONDS,
|
||||
.addNumberInput_('Update interval seconds',
|
||||
'streaming.updateIntervalSeconds',
|
||||
/* canBeDecimal= */ true)
|
||||
.addBoolInput_(MessageIds.DISPATCH_ALL_EMSG_BOXES,
|
||||
.addBoolInput_('Dispatch all emsg boxes',
|
||||
'streaming.dispatchAllEmsgBoxes')
|
||||
.addBoolInput_(MessageIds.OBSERVE_QUALITY_CHANGES,
|
||||
.addBoolInput_('Observe media quality changes',
|
||||
'streaming.observeQualityChanges')
|
||||
.addNumberInput_(MessageIds.MAX_DISABLED_TIME,
|
||||
.addNumberInput_('Max Variant Disabled Time',
|
||||
'streaming.maxDisabledTime')
|
||||
.addNumberInput_(MessageIds.SEGMENT_PREFETCH_LIMIT,
|
||||
.addNumberInput_('Segment Prefetch Limit',
|
||||
'streaming.segmentPrefetchLimit')
|
||||
.addBoolInput_(MessageIds.LIVE_SYNC,
|
||||
'streaming.liveSync')
|
||||
.addNumberInput_(MessageIds.LIVE_SYNC_MAX_LATENCY,
|
||||
.addBoolInput_('Live Sync', 'streaming.liveSync')
|
||||
.addNumberInput_('Max latency for live sync',
|
||||
'streaming.liveSyncMaxLatency',
|
||||
/* canBeDecimal= */ true,
|
||||
/* canBeZero= */ true)
|
||||
.addNumberInput_(MessageIds.LIVE_SYNC_PLAYBACK_RATE,
|
||||
.addNumberInput_('Playback rate for live sync',
|
||||
'streaming.liveSyncPlaybackRate',
|
||||
/* canBeDecimal= */ true,
|
||||
/* canBeZero= */ false);
|
||||
|
||||
if (!shakaDemoMain.getNativeControlsEnabled()) {
|
||||
this.addBoolInput_(MessageIds.ALWAYS_STREAM_TEXT,
|
||||
'streaming.alwaysStreamText');
|
||||
this.addBoolInput_('Always Stream Text', 'streaming.alwaysStreamText');
|
||||
} else {
|
||||
// Add a fake custom fixed "input" that warns the users not to change it.
|
||||
const noop = (input) => {};
|
||||
this.addCustomBoolInput_(MessageIds.ALWAYS_STREAM_TEXT,
|
||||
noop, MessageIds.ALWAYS_STREAM_TEXT_WARNING);
|
||||
this.addCustomBoolInput_('Always Stream Text', noop,
|
||||
'Text must always be streamed while native controls are enabled, ' +
|
||||
'for captions to work.');
|
||||
this.latestInput_.input().disabled = true;
|
||||
this.latestInput_.input().checked = true;
|
||||
}
|
||||
@@ -483,65 +426,55 @@ shakaDemo.Config = class {
|
||||
'PQ': 'PQ',
|
||||
'HLG': 'HLG',
|
||||
};
|
||||
const localize = (name) => shakaDemoMain.getLocalizedString(name);
|
||||
const hdrLevelNames = {
|
||||
'AUTO': localize(MessageIds.HDR_LEVEL_AUTO),
|
||||
'SDR': localize(MessageIds.HDR_LEVEL_SDR),
|
||||
'PQ': localize(MessageIds.HDR_LEVEL_PQ),
|
||||
'HLG': localize(MessageIds.HDR_LEVEL_HLG),
|
||||
'': localize(MessageIds.HDR_LEVEL_NONE),
|
||||
'AUTO': 'Auto Detect',
|
||||
'SDR': 'SDR',
|
||||
'PQ': 'PQ',
|
||||
'HLG': 'HLG',
|
||||
'': 'No Preference',
|
||||
};
|
||||
this.addSelectInput_(MessageIds.HDR_LEVEL, 'preferredVideoHdrLevel',
|
||||
this.addSelectInput_('Preferred HDR Level', 'preferredVideoHdrLevel',
|
||||
hdrLevels, hdrLevelNames);
|
||||
|
||||
this.addBoolInput_(MessageIds.START_AT_SEGMENT_BOUNDARY,
|
||||
this.addBoolInput_('Start At Segment Boundary',
|
||||
'streaming.startAtSegmentBoundary')
|
||||
.addBoolInput_(MessageIds.IGNORE_TEXT_FAILURES,
|
||||
.addBoolInput_('Ignore Text Stream Failures',
|
||||
'streaming.ignoreTextStreamFailures')
|
||||
.addBoolInput_(MessageIds.STALL_DETECTOR_ENABLED,
|
||||
'streaming.stallEnabled')
|
||||
.addBoolInput_(MessageIds.USE_NATIVE_HLS_SAFARI,
|
||||
.addBoolInput_('Stall Detector Enabled', 'streaming.stallEnabled')
|
||||
.addBoolInput_('Use native HLS on Safari',
|
||||
'streaming.useNativeHlsOnSafari');
|
||||
this.addRetrySection_('streaming',
|
||||
MessageIds.STREAMING_RETRY_SECTION_HEADER);
|
||||
this.addRetrySection_('streaming', 'Streaming Retry Parameters');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addMediaSourceSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.MediaSourceConfiguration');
|
||||
this.addSection_(MessageIds.MEDIA_SOURCE_SECTION_HEADER, docLink)
|
||||
.addTextInput_(MessageIds.SOURCE_BUFFER_EXTRA_FEATURES,
|
||||
this.addSection_('Media source', docLink)
|
||||
.addTextInput_('Source buffer extra features',
|
||||
'mediaSource.sourceBufferExtraFeatures')
|
||||
.addBoolInput_(MessageIds.FORCE_TRANSMUX,
|
||||
'mediaSource.forceTransmux')
|
||||
.addBoolInput_(MessageIds.INSERT_FAKE_ENCRYPTION_IN_INIT,
|
||||
'mediaSource.insertFakeEncryptionInInit');
|
||||
.addBoolInput_('Force Transmux', 'mediaSource.forceTransmux')
|
||||
.addBoolInput_('Insert fake encryption in init segments when needed ' +
|
||||
'by the platform.', 'mediaSource.insertFakeEncryptionInInit');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addLanguageSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const docLink = this.resolveExternLink_('.PlayerConfiguration');
|
||||
|
||||
const autoShowTextOptions = shaka.config.AutoShowText;
|
||||
const localize = (name) => shakaDemoMain.getLocalizedString(name);
|
||||
const autoShowTextOptionNames = {
|
||||
'NEVER': localize(MessageIds.AUTO_SHOW_TEXT_NEVER),
|
||||
'ALWAYS': localize(MessageIds.AUTO_SHOW_TEXT_ALWAYS),
|
||||
'IF_PREFERRED_TEXT_LANGUAGE':
|
||||
localize(MessageIds.AUTO_SHOW_TEXT_IF_PREFERRED_TEXT_LANGUAGE),
|
||||
'IF_SUBTITLES_MAY_BE_NEEDED':
|
||||
localize(MessageIds.AUTO_SHOW_TEXT_IF_SUBTITLES_MAY_BE_NEEDED),
|
||||
'NEVER': 'Never',
|
||||
'ALWAYS': 'Always',
|
||||
'IF_PREFERRED_TEXT_LANGUAGE': 'If preferred text language',
|
||||
'IF_SUBTITLES_MAY_BE_NEEDED': 'If subtitles may be needed',
|
||||
};
|
||||
|
||||
this.addSection_(MessageIds.LANGUAGE_SECTION_HEADER, docLink)
|
||||
.addTextInput_(MessageIds.AUDIO_LANGUAGE, 'preferredAudioLanguage')
|
||||
.addTextInput_(MessageIds.AUDIO_LABEL, 'preferredAudioLabel')
|
||||
.addTextInput_(MessageIds.TEXT_LANGUAGE, 'preferredTextLanguage')
|
||||
.addTextInput_(MessageIds.TEXT_ROLE, 'preferredTextRole')
|
||||
.addSelectInput_(
|
||||
MessageIds.AUTO_SHOW_TEXT,
|
||||
this.addSection_('Language', docLink)
|
||||
.addTextInput_('Preferred Audio Language', 'preferredAudioLanguage')
|
||||
.addTextInput_('Preferred Audio Label', 'preferredAudioLabel')
|
||||
.addTextInput_('Preferred Text Language', 'preferredTextLanguage')
|
||||
.addTextInput_('Preferred Text Role', 'preferredTextRole')
|
||||
.addSelectInput_('Auto-Show Text',
|
||||
'autoShowText',
|
||||
autoShowTextOptions,
|
||||
autoShowTextOptionNames);
|
||||
@@ -549,20 +482,18 @@ shakaDemo.Config = class {
|
||||
shakaDemoMain.setUILocale(input.value);
|
||||
shakaDemoMain.remakeHash();
|
||||
};
|
||||
this.addCustomTextInput_(MessageIds.UI_LOCALE, onChange);
|
||||
this.addCustomTextInput_('Preferred UI Locale', onChange);
|
||||
this.latestInput_.input().value = shakaDemoMain.getUILocale();
|
||||
this.addNumberInput_(MessageIds.AUDIO_CHANNEL_COUNT,
|
||||
this.addNumberInput_('Preferred Audio Channel Count',
|
||||
'preferredAudioChannelCount');
|
||||
this.addBoolInput_(MessageIds.PREFER_FORCED_SUBS,
|
||||
'preferForcedSubs');
|
||||
this.addBoolInput_('Prefer Forced Subs', 'preferForcedSubs');
|
||||
}
|
||||
|
||||
/** @private */
|
||||
addMetaSection_() {
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
this.addSection_(/* name= */ null, /* docLink= */ null);
|
||||
|
||||
this.addCustomBoolInput_(MessageIds.SHAKA_CONTROLS, (input) => {
|
||||
this.addCustomBoolInput_('Shaka Controls', (input) => {
|
||||
shakaDemoMain.setNativeControlsEnabled(!input.checked);
|
||||
if (input.checked) {
|
||||
// Forcibly set |streaming.alwaysStreamText| to true.
|
||||
@@ -580,7 +511,7 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
if (!shakaDemoMain.getNativeControlsEnabled()) {
|
||||
this.addCustomBoolInput_(MessageIds.TRICK_PLAY_CONTROLS, (input) => {
|
||||
this.addCustomBoolInput_('Enabled Trick Play Controls', (input) => {
|
||||
shakaDemoMain.setTrickPlayControlsEnabled(input.checked);
|
||||
});
|
||||
if (shakaDemoMain.getTrickPlayControlsEnabled()) {
|
||||
@@ -589,8 +520,8 @@ shakaDemo.Config = class {
|
||||
} else {
|
||||
// Add a fake custom fixed "input" that warns the users not to change it.
|
||||
const noop = (input) => {};
|
||||
this.addCustomBoolInput_(MessageIds.TRICK_PLAY_CONTROLS,
|
||||
noop, MessageIds.TRICK_PLAY_CONTROLS_WARNING);
|
||||
this.addCustomBoolInput_('Enabled Trick Play Controls',
|
||||
noop, 'Trick Play controls require the Shaka UI.');
|
||||
this.latestInput_.input().disabled = true;
|
||||
this.latestInput_.input().checked = false;
|
||||
}
|
||||
@@ -610,12 +541,11 @@ shakaDemo.Config = class {
|
||||
const Level = shaka['log']['Level'];
|
||||
const setLevel = shaka['log']['setLevel'];
|
||||
|
||||
const localize = (name) => shakaDemoMain.getLocalizedString(name);
|
||||
const logLevels = {
|
||||
'info': localize(MessageIds.LOG_LEVEL_INFO),
|
||||
'debug': localize(MessageIds.LOG_LEVEL_DEBUG),
|
||||
'v': localize(MessageIds.LOG_LEVEL_V),
|
||||
'vv': localize(MessageIds.LOG_LEVEL_VV),
|
||||
'info': 'Info',
|
||||
'debug': 'Debug',
|
||||
'v': 'Verbose',
|
||||
'vv': 'Very Verbose',
|
||||
};
|
||||
const onChange = (input) => {
|
||||
switch (input.value) {
|
||||
@@ -634,7 +564,7 @@ shakaDemo.Config = class {
|
||||
}
|
||||
shakaDemoMain.remakeHash();
|
||||
};
|
||||
this.addCustomSelectInput_(MessageIds.LOG_LEVEL, logLevels, onChange);
|
||||
this.addCustomSelectInput_('Log Level', logLevels, onChange);
|
||||
const input = this.latestInput_.input();
|
||||
switch (shaka['log']['currentLevel']) {
|
||||
case Level['DEBUG']:
|
||||
@@ -662,7 +592,7 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {?shakaDemo.MessageIds} name
|
||||
* @param {?string} name
|
||||
* @param {?string} docLink
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
@@ -678,9 +608,9 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {string} valueName
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
@@ -697,24 +627,23 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {function(!HTMLInputElement)} onChange
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
addCustomBoolInput_(name, onChange, tooltipMessage) {
|
||||
this.createRow_(name, tooltipMessage);
|
||||
const localized = shakaDemoMain.getLocalizedString(name);
|
||||
this.latestInput_ = new shakaDemo.BoolInput(
|
||||
this.getLatestSection_(), localized, onChange);
|
||||
this.getLatestSection_(), name, onChange);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {!string} name
|
||||
* @param {string} valueName
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
@@ -730,27 +659,26 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {function(!HTMLInputElement)} onChange
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
addCustomTextInput_(name, onChange, tooltipMessage) {
|
||||
this.createRow_(name, tooltipMessage);
|
||||
const localized = shakaDemoMain.getLocalizedString(name);
|
||||
this.latestInput_ = new shakaDemo.TextInput(
|
||||
this.getLatestSection_(), localized, onChange);
|
||||
this.getLatestSection_(), name, onChange);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {string} valueName
|
||||
* @param {boolean=} canBeDecimal
|
||||
* @param {boolean=} canBeZero
|
||||
* @param {boolean=} canBeUnset
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
@@ -780,9 +708,8 @@ shakaDemo.Config = class {
|
||||
}
|
||||
};
|
||||
this.createRow_(name, tooltipMessage);
|
||||
const localized = shakaDemoMain.getLocalizedString(name);
|
||||
this.latestInput_ = new shakaDemo.NumberInput(
|
||||
this.getLatestSection_(), localized, onChange, canBeDecimal, canBeZero,
|
||||
this.getLatestSection_(), name, onChange, canBeDecimal, canBeZero,
|
||||
canBeUnset);
|
||||
this.latestInput_.input().value =
|
||||
shakaDemoMain.getCurrentConfigValue(valueName);
|
||||
@@ -793,26 +720,25 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {!Array.<string>} values
|
||||
* @param {function(!HTMLInputElement)} onChange
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
addDatalistInput_(name, values, onChange, tooltipMessage) {
|
||||
this.createRow_(name, tooltipMessage);
|
||||
const localized = shakaDemoMain.getLocalizedString(name);
|
||||
this.latestInput_ = new shakaDemo.DatalistInput(
|
||||
this.getLatestSection_(), localized, onChange, values);
|
||||
this.getLatestSection_(), name, onChange, values);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {!Object.<string, string>} values
|
||||
* @param {function(!HTMLInputElement)} onChange
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
@@ -826,11 +752,11 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {string} valueName
|
||||
* @param {!Object.<string, ?>} options
|
||||
* @param {!Object.<string, string>} optionNames
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string=} tooltipMessage
|
||||
* @return {!shakaDemo.Config}
|
||||
* @private
|
||||
*/
|
||||
@@ -862,8 +788,8 @@ shakaDemo.Config = class {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {shakaDemo.MessageIds=} tooltipMessage
|
||||
* @param {string} name
|
||||
* @param {string=} tooltipMessage
|
||||
* @private
|
||||
*/
|
||||
createRow_(name, tooltipMessage) {
|
||||
|
||||
+39
-98
@@ -12,7 +12,6 @@ goog.require('ShakaDemoAssetInfo');
|
||||
goog.require('shakaDemo.AssetCard');
|
||||
goog.require('shakaDemo.Input');
|
||||
goog.require('shakaDemo.InputContainer');
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
goog.require('shakaDemo.TextInput');
|
||||
|
||||
/** @type {?shakaDemo.Custom} */
|
||||
@@ -71,9 +70,6 @@ shakaDemo.Custom = class {
|
||||
document.addEventListener('shaka-main-offline-progress', () => {
|
||||
this.updateOfflineProgress_();
|
||||
});
|
||||
document.addEventListener('shaka-main-locale-changed', () => {
|
||||
this.remakeSavedList_();
|
||||
});
|
||||
document.addEventListener('shaka-main-page-changed', () => {
|
||||
if (!this.savedList_.childNodes.length &&
|
||||
!container.classList.contains('hidden')) {
|
||||
@@ -142,9 +138,8 @@ shakaDemo.Custom = class {
|
||||
const div = document.createElement('div');
|
||||
headersDiv.appendChild(div);
|
||||
const containerStyle = shakaDemo.InputContainer.Style.VERTICAL;
|
||||
const headerText = shakaDemo.MessageIds.LICENSE_HEADER_TITLE;
|
||||
const container = new shakaDemo.InputContainer(
|
||||
div, headerText, containerStyle,
|
||||
div, 'License Header', containerStyle,
|
||||
/* docLink= */ null);
|
||||
|
||||
const collisionCheckEntry = {
|
||||
@@ -209,9 +204,7 @@ shakaDemo.Custom = class {
|
||||
const nameOnChange = (input) => {
|
||||
onChange(input.value, headerValue);
|
||||
};
|
||||
const licenseHeaderName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.LICENSE_HEADER_NAME);
|
||||
this.makeField_(container, licenseHeaderName, nameSetup, nameOnChange);
|
||||
this.makeField_(container, 'Header Name', nameSetup, nameOnChange);
|
||||
|
||||
const valueSetup = (input, container) => {
|
||||
if (headerValue) {
|
||||
@@ -221,9 +214,7 @@ shakaDemo.Custom = class {
|
||||
const valueOnChange = (input) => {
|
||||
onChange(headerName, input.value);
|
||||
};
|
||||
const licenseHeaderValue = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.LICENSE_HEADER_VALUE);
|
||||
this.makeField_(container, licenseHeaderValue, valueSetup, valueOnChange);
|
||||
this.makeField_(container, 'Header Value', valueSetup, valueOnChange);
|
||||
};
|
||||
if (assetInProgress.licenseRequestHeaders.size == 0) {
|
||||
// It starts out with a single empty row, but each time you start filling
|
||||
@@ -269,8 +260,8 @@ shakaDemo.Custom = class {
|
||||
const fullMimeTypeOnChange = (input) => {
|
||||
assetInProgress.setMediaPlaylistFullMimeType(input.value);
|
||||
};
|
||||
const fullMimeTypeName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.HLS_FULL_MIME_TYPE);
|
||||
const fullMimeTypeName =
|
||||
'Full Mime Type for Playing Media Playlists Directly';
|
||||
this.makeField_(
|
||||
container, fullMimeTypeName, fullMimeTypeSetup, fullMimeTypeOnChange);
|
||||
|
||||
@@ -300,10 +291,7 @@ shakaDemo.Custom = class {
|
||||
const adTagOnChange = (input) => {
|
||||
assetInProgress.adTagUri = input.value;
|
||||
};
|
||||
const adTagURLName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.AD_TAG_URL);
|
||||
this.makeField_(
|
||||
container, adTagURLName, adTagSetup, adTagOnChange);
|
||||
this.makeField_(container, 'Ad Tag URL', adTagSetup, adTagOnChange);
|
||||
|
||||
// Make the content source id field.
|
||||
const contentSrcIdSetup = (input, container) => {
|
||||
@@ -319,8 +307,7 @@ shakaDemo.Custom = class {
|
||||
this.manifestField_.required =
|
||||
this.checkManifestRequired_(assetInProgress);
|
||||
};
|
||||
const contentSrcIdName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.IMA_CONTENT_SRC_ID);
|
||||
const contentSrcIdName = 'Content source ID (for VOD DAI Content)';
|
||||
this.makeField_(
|
||||
container, contentSrcIdName, contentSrcIdSetup, contentSrcIdOnChange);
|
||||
|
||||
@@ -338,10 +325,8 @@ shakaDemo.Custom = class {
|
||||
this.manifestField_.required =
|
||||
this.checkManifestRequired_(assetInProgress);
|
||||
};
|
||||
const videoIdName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.IMA_VIDEO_ID);
|
||||
this.makeField_(
|
||||
container, videoIdName, videoIdSetup, videoIdOnChange);
|
||||
const videoIdName = 'Video ID (for VOD DAI Content)';
|
||||
this.makeField_(container, videoIdName, videoIdSetup, videoIdOnChange);
|
||||
|
||||
// Make the asset key field.
|
||||
const assetKeySetup = (input, container) => {
|
||||
@@ -357,10 +342,8 @@ shakaDemo.Custom = class {
|
||||
this.manifestField_.required =
|
||||
this.checkManifestRequired_(assetInProgress);
|
||||
};
|
||||
const assetKeyName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.IMA_ASSET_KEY);
|
||||
this.makeField_(
|
||||
container, assetKeyName, assetKeySetup, assetKeyChange);
|
||||
const assetKeyName = 'Asset key (for LIVE DAI Content)';
|
||||
this.makeField_(container, assetKeyName, assetKeySetup, assetKeyChange);
|
||||
|
||||
// Make the manifest type field.
|
||||
const manifestTypeSetup = (input, container) => {
|
||||
@@ -376,8 +359,7 @@ shakaDemo.Custom = class {
|
||||
this.manifestField_.required =
|
||||
this.checkManifestRequired_(assetInProgress);
|
||||
};
|
||||
const manifestTypeName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.IMA_MANIFEST_TYPE);
|
||||
const manifestTypeName = 'Manifest type (for DAI Content)';
|
||||
this.makeField_(
|
||||
container, manifestTypeName, manifestTypeSetup, manifestTypeChange);
|
||||
|
||||
@@ -437,10 +419,8 @@ shakaDemo.Custom = class {
|
||||
const licenseOnChange = (input) => {
|
||||
setLicenseServerURLs();
|
||||
};
|
||||
const licenseServerURLName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.LICENSE_SERVER_URL);
|
||||
this.makeField_(
|
||||
container, licenseServerURLName, licenseSetup, licenseOnChange);
|
||||
container, 'Custom License Server URL', licenseSetup, licenseOnChange);
|
||||
|
||||
// Make the license certificate URL field.
|
||||
const certSetup = (input, container) => {
|
||||
@@ -451,10 +431,8 @@ shakaDemo.Custom = class {
|
||||
const certOnChange = (input) => {
|
||||
assetInProgress.certificateUri = input.value;
|
||||
};
|
||||
const licenseCertificateURLName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.LICENSE_CERTIFICATE_URL);
|
||||
this.makeField_(
|
||||
container, licenseCertificateURLName, certSetup, certOnChange);
|
||||
container, 'Custom License Certificate URL', certSetup, certOnChange);
|
||||
|
||||
// Make the drm system field.
|
||||
const drmSetup = (input, container) => {
|
||||
@@ -470,10 +448,7 @@ shakaDemo.Custom = class {
|
||||
const drmOnChange = (input) => {
|
||||
setLicenseServerURLs();
|
||||
};
|
||||
const DRMSystemName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.DRM_SYSTEM);
|
||||
this.makeField_(
|
||||
container, DRMSystemName, drmSetup, drmOnChange);
|
||||
this.makeField_(container, 'Custom DRM System', drmSetup, drmOnChange);
|
||||
|
||||
return drmDiv;
|
||||
}
|
||||
@@ -508,8 +483,7 @@ shakaDemo.Custom = class {
|
||||
// Make an error that shows up if you did not provide valid JSON.
|
||||
const error = document.createElement('span');
|
||||
error.classList.add('mdl-textfield__error');
|
||||
error.textContent = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.INVALID_JSON_CONFIG_ERROR);
|
||||
error.textContent = 'Invalid JSON configuration';
|
||||
|
||||
container.appendChild(error);
|
||||
};
|
||||
@@ -526,8 +500,7 @@ shakaDemo.Custom = class {
|
||||
inputWrapper.setValid(false);
|
||||
}
|
||||
};
|
||||
const extraConfigLabel = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.EXTRA_SHAKA_PLAYER_CONFIG);
|
||||
const extraConfigLabel = 'Extra Shaka Player configuration (JSON)';
|
||||
this.makeField_(
|
||||
container, extraConfigLabel, extraSetup, extraOnChange,
|
||||
/* isTextArea= */ true);
|
||||
@@ -557,8 +530,7 @@ shakaDemo.Custom = class {
|
||||
// Make an error that shows up if you did not provide an URL.
|
||||
const error = document.createElement('span');
|
||||
error.classList.add('mdl-textfield__error');
|
||||
error.textContent = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.MANIFEST_URL_ERROR);
|
||||
error.textContent = 'Must have a manifest URL, or IMA DAI id fields';
|
||||
container.appendChild(error);
|
||||
|
||||
// Add a regex that will detect empty strings.
|
||||
@@ -569,10 +541,7 @@ shakaDemo.Custom = class {
|
||||
const manifestOnChange = (input) => {
|
||||
assetInProgress.manifestUri = input.value.trim();
|
||||
};
|
||||
const manifestURLName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.MANIFEST_URL);
|
||||
this.makeField_(
|
||||
container, manifestURLName, manifestSetup, manifestOnChange);
|
||||
this.makeField_(container, 'Manifest URL', manifestSetup, manifestOnChange);
|
||||
|
||||
// Make the name field.
|
||||
const nameSetup = (input, container) => {
|
||||
@@ -582,8 +551,7 @@ shakaDemo.Custom = class {
|
||||
// Make an error that shows up if you have an empty/duplicate name.
|
||||
const error = document.createElement('span');
|
||||
error.classList.add('mdl-textfield__error');
|
||||
error.textContent = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.NAME_ERROR);
|
||||
error.textContent = 'Must be a unique name.';
|
||||
container.appendChild(error);
|
||||
|
||||
// Make a regex that will detect duplicates.
|
||||
@@ -604,10 +572,7 @@ shakaDemo.Custom = class {
|
||||
const nameOnChange = (input) => {
|
||||
assetInProgress.name = input.value;
|
||||
};
|
||||
const nameName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.NAME);
|
||||
this.makeField_(
|
||||
container, nameName, nameSetup, nameOnChange);
|
||||
this.makeField_(container, 'Name', nameSetup, nameOnChange);
|
||||
|
||||
// Make the icon field.
|
||||
const iconSetup = (input, container) => {
|
||||
@@ -634,11 +599,7 @@ shakaDemo.Custom = class {
|
||||
iconDiv.appendChild(img);
|
||||
}
|
||||
};
|
||||
|
||||
const iconURLName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.ICON_URL);
|
||||
this.makeField_(
|
||||
container, iconURLName, iconSetup, iconOnChange);
|
||||
this.makeField_(container, 'Icon URL', iconSetup, iconOnChange);
|
||||
|
||||
// Make the MIME type field.
|
||||
const mimeTypeSetup = (input, container) => {
|
||||
@@ -650,11 +611,7 @@ shakaDemo.Custom = class {
|
||||
const mimeTypeOnChange = (input) => {
|
||||
assetInProgress.mimeType = input.value || null;
|
||||
};
|
||||
|
||||
const mimeTypeName = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.MIME_TYPE);
|
||||
this.makeField_(
|
||||
container, mimeTypeName, mimeTypeSetup, mimeTypeOnChange);
|
||||
this.makeField_(container, 'MIME Type', mimeTypeSetup, mimeTypeOnChange);
|
||||
|
||||
return mainDiv;
|
||||
}
|
||||
@@ -681,9 +638,7 @@ shakaDemo.Custom = class {
|
||||
const finishDiv = document.createElement('tr');
|
||||
|
||||
const buttonStyle = shakaDemo.Custom.ButtonStyle_.RAISED;
|
||||
const saveString =
|
||||
shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.SAVE_BUTTON);
|
||||
finishDiv.appendChild(this.makeButton_(saveString, buttonStyle, () => {
|
||||
finishDiv.appendChild(this.makeButton_('Save', buttonStyle, () => {
|
||||
for (const input of inputsToCheck) {
|
||||
if (!input.validity.valid) {
|
||||
return;
|
||||
@@ -695,9 +650,7 @@ shakaDemo.Custom = class {
|
||||
this.remakeSavedList_();
|
||||
this.dialog_.close();
|
||||
}));
|
||||
const cancelString =
|
||||
shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.CANCEL_BUTTON);
|
||||
finishDiv.appendChild(this.makeButton_(cancelString, buttonStyle, () => {
|
||||
finishDiv.appendChild(this.makeButton_('Cancel', buttonStyle, () => {
|
||||
this.dialog_.close();
|
||||
}));
|
||||
|
||||
@@ -737,9 +690,8 @@ shakaDemo.Custom = class {
|
||||
const tabDiv = document.createElement('tr');
|
||||
const tabsToHide = [];
|
||||
const buttonsToSwitch = [];
|
||||
const addTabButton = (messageId, tabToShow, startOn) => {
|
||||
const addTabButton = (name, tabToShow, startOn) => {
|
||||
const buttonStyle = shakaDemo.Custom.ButtonStyle_.PLAIN;
|
||||
const name = shakaDemoMain.getLocalizedString(messageId);
|
||||
const button = this.makeButton_(name, buttonStyle, () => {
|
||||
for (const tab of tabsToHide) {
|
||||
tab.classList.add('hidden');
|
||||
@@ -759,18 +711,12 @@ shakaDemo.Custom = class {
|
||||
tabToShow.classList.add('hidden');
|
||||
}
|
||||
};
|
||||
addTabButton(
|
||||
shakaDemo.MessageIds.MAIN_TAB, mainDiv, /* startOn= */ true);
|
||||
addTabButton(
|
||||
shakaDemo.MessageIds.DRM_TAB, drmDiv, /* startOn= */ false);
|
||||
addTabButton(
|
||||
shakaDemo.MessageIds.HEADERS_TAB, headersDiv, /* startOn= */ false);
|
||||
addTabButton(
|
||||
shakaDemo.MessageIds.ADS_TAB, adsDiv, /* startOn= */ false);
|
||||
addTabButton(
|
||||
shakaDemo.MessageIds.HLS_TAB, hlsDiv, /* startOn= */ false);
|
||||
addTabButton(
|
||||
shakaDemo.MessageIds.EXTRA_TAB, extraConfigDiv, /* startOn= */ false);
|
||||
addTabButton('Main', mainDiv, /* startOn= */ true);
|
||||
addTabButton('Drm', drmDiv, /* startOn= */ false);
|
||||
addTabButton('Headers', headersDiv, /* startOn= */ false);
|
||||
addTabButton('Ads', adsDiv, /* startOn= */ false);
|
||||
addTabButton('HLS', hlsDiv, /* startOn= */ false);
|
||||
addTabButton('Extra Config', extraConfigDiv, /* startOn= */ false);
|
||||
|
||||
// Append the divs in the desired order.
|
||||
this.dialog_.appendChild(tabDiv);
|
||||
@@ -861,24 +807,24 @@ shakaDemo.Custom = class {
|
||||
const savedList = this.savedList_;
|
||||
const isFeatured = false;
|
||||
return new shakaDemo.AssetCard(savedList, asset, isFeatured, (c) => {
|
||||
c.addButton(shakaDemo.MessageIds.PLAY, () => {
|
||||
c.addButton('Play', () => {
|
||||
shakaDemoMain.loadAsset(asset);
|
||||
this.updateSelected_();
|
||||
});
|
||||
c.addButton(shakaDemo.MessageIds.EDIT_CUSTOM, async () => {
|
||||
c.addButton('Edit', async () => {
|
||||
if (asset.unstoreCallback) {
|
||||
await asset.unstoreCallback();
|
||||
}
|
||||
this.showAssetDialog_(asset);
|
||||
});
|
||||
c.addButton(shakaDemo.MessageIds.DELETE_CUSTOM, async () => {
|
||||
c.addButton('Delete', async () => {
|
||||
this.assets_.delete(asset);
|
||||
if (asset.unstoreCallback) {
|
||||
await asset.unstoreCallback();
|
||||
}
|
||||
this.saveAssetInfos_(this.assets_);
|
||||
this.remakeSavedList_();
|
||||
}, shakaDemo.MessageIds.DELETE_CUSTOM);
|
||||
}, 'Delete this custom asset?');
|
||||
c.addStoreButton();
|
||||
});
|
||||
}
|
||||
@@ -905,15 +851,10 @@ shakaDemo.Custom = class {
|
||||
textElement.textContent = text;
|
||||
this.savedList_.appendChild(textElement);
|
||||
};
|
||||
makeMessage('title',
|
||||
shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.CUSTOM_INTRO_ONE));
|
||||
makeMessage('body-2',
|
||||
shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.CUSTOM_INTRO_TWO));
|
||||
makeMessage('title', 'Try Shaka Player with your own content!');
|
||||
makeMessage('body-2', 'Press the button below to add a custom asset.');
|
||||
makeMessage('body-1',
|
||||
shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.CUSTOM_INTRO_THREE));
|
||||
'Custom assets will remain even after reloading the page.');
|
||||
} else {
|
||||
// Make asset cards for the assets.
|
||||
this.assetCards_ = Array.from(this.assets_).map((asset) => {
|
||||
|
||||
+7
-10
@@ -9,7 +9,6 @@ goog.provide('shakaDemo.Front');
|
||||
|
||||
|
||||
goog.require('shakaDemo.AssetCard');
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
goog.requireType('ShakaDemoAssetInfo');
|
||||
|
||||
/** @type {?shakaDemo.Front} */
|
||||
@@ -50,9 +49,6 @@ shakaDemo.Front = class {
|
||||
document.addEventListener('shaka-main-offline-progress', () => {
|
||||
this.updateOfflineProgress_();
|
||||
});
|
||||
document.addEventListener('shaka-main-locale-changed', () => {
|
||||
this.remakeAssetCards_();
|
||||
});
|
||||
document.addEventListener('shaka-main-page-changed', () => {
|
||||
if (!this.assetCardDiv_.childNodes.length &&
|
||||
!container.classList.contains('hidden')) {
|
||||
@@ -74,19 +70,20 @@ shakaDemo.Front = class {
|
||||
const makeMessage = (textClass, text) => {
|
||||
const textElement = document.createElement('h2');
|
||||
textElement.classList.add('mdl-typography--' + textClass);
|
||||
textElement.textContent = shakaDemoMain.getLocalizedString(text);
|
||||
textElement.textContent = text;
|
||||
this.messageDiv_.appendChild(textElement);
|
||||
};
|
||||
makeMessage('body-2', shakaDemo.MessageIds.FRONT_INTRO_ONE);
|
||||
makeMessage('body-1', shakaDemo.MessageIds.FRONT_INTRO_TWO);
|
||||
makeMessage('body-2', 'This is a demo of Google\'s Shaka Player, a ' +
|
||||
'JavaScript library for adaptive video streaming.');
|
||||
makeMessage('body-1', 'Choose a video to playback; more assets are ' +
|
||||
'available via the "all content" tab.');
|
||||
|
||||
const hideButton = document.createElement('button');
|
||||
hideButton.classList.add('mdl-button');
|
||||
hideButton.classList.add('mdl-button--colored');
|
||||
hideButton.classList.add('mdl-js-button');
|
||||
hideButton.classList.add('mdl-js-ripple-effect');
|
||||
hideButton.textContent = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.FRONT_INTRO_DISMISS);
|
||||
hideButton.textContent = 'Dismiss';
|
||||
hideButton.addEventListener('click', () => {
|
||||
shaka.util.Dom.removeAllChildren(this.messageDiv_);
|
||||
window.localStorage.setItem(hideName, 'true');
|
||||
@@ -122,7 +119,7 @@ shakaDemo.Front = class {
|
||||
if (unsupportedReason) {
|
||||
c.markAsUnsupported(unsupportedReason);
|
||||
} else {
|
||||
c.addButton(shakaDemo.MessageIds.PLAY, () => {
|
||||
c.addButton('Play', () => {
|
||||
shakaDemoMain.loadAsset(asset);
|
||||
this.updateSelected_();
|
||||
});
|
||||
|
||||
+18
-19
@@ -85,7 +85,6 @@ UNCOMPILED_JS = [
|
||||
// Enable less, the CSS pre-processor.
|
||||
'../node_modules/less/dist/less.js',
|
||||
// These are the individual parts of the demo app.
|
||||
'common/message_ids.js',
|
||||
'common/asset.js',
|
||||
'common/assets.js',
|
||||
'demo_uncompiled.js',
|
||||
@@ -100,11 +99,11 @@ UNCOMPILED_JS = [
|
||||
<header class="app-header mdl-layout__header should-hide-in-no-input-mode">
|
||||
<header class="mdl-layout__header-row" id="nav-button-container">
|
||||
<img alt="Shaka Player Logo" src="shaka_logo_trans.png" class="logo" />
|
||||
<button id="nav-button-front" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" defaultselected localized-string="HOME" tab-identifier="HOME"></button>
|
||||
<button id="nav-button-search" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" localized-string="ALL_CONTENT" tab-identifier="ALL_CONTENT"></button>
|
||||
<button id="nav-button-custom" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" localized-string="CUSTOM_CONTENT" tab-identifier="CUSTOM CONTENT"></button>
|
||||
<button id="nav-button-front" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" defaultselected tab-identifier="HOME">HOME</button>
|
||||
<button id="nav-button-search" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" tab-identifier="ALL_CONTENT">ALL CONTENT</button>
|
||||
<button id="nav-button-custom" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" tab-identifier="CUSTOM CONTENT">CUSTOM CONTENT</button>
|
||||
<div class="mdl-layout-spacer"></div>
|
||||
<button id="bug-button" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" localized-string="REPORT_BUG"></button>
|
||||
<button id="bug-button" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail">REPORT BUG</button>
|
||||
<div class="version-block">
|
||||
<span class="version-string"></span>
|
||||
</div>
|
||||
@@ -115,7 +114,7 @@ UNCOMPILED_JS = [
|
||||
</div>
|
||||
<div class="mdl-layout__drawer hamburger-menu">
|
||||
<div id="hamburger-menu-title" class="mdl-layout-title">
|
||||
<div localized-string="CONFIG"></div>
|
||||
<div>Shaka Player Demo Config</div>
|
||||
<div class="mdl-layout-spacer"></div>
|
||||
<button id="drawer-close-button" class="mdl-button mdl-js-button mdl-button--icon should-disable-on-fail"><i class="material-icons-round">close</i></button>
|
||||
</div>
|
||||
@@ -142,28 +141,28 @@ UNCOMPILED_JS = [
|
||||
<div class="mdl-mega-footer__middle-section">
|
||||
|
||||
<div class="mdl-mega-footer__drop-down-section">
|
||||
<h1 class="mdl-mega-footer__heading" localized-string="PROJECT_LINKS_HEADER"></h1>
|
||||
<h1 class="mdl-mega-footer__heading">PROJECT LINKS</h1>
|
||||
<ul class="mdl-mega-footer__link-list">
|
||||
<li><a rel="noopener" target="_blank" href="../docs/api/index.html" localized-string="DOCUMENTATION"></a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0" localized-string="LICENSE"></a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://github.com/shaka-project/shaka-player" localized-string="SOURCE"></a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://www.npmjs.com/package/shaka-player" localized-string="NPM"></a></li>
|
||||
<li><a rel="noopener" target="_blank" href="../support.html" localized-string="SUPPORT"></a></li>
|
||||
<li><a rel="noopener" target="_blank" href="../docs/api/index.html">Documentation</a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0">Apache License</a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://github.com/shaka-project/shaka-player">Source on GitHub</a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://www.npmjs.com/package/shaka-player">Package on NPM</a></li>
|
||||
<li><a rel="noopener" target="_blank" href="../support.html">Browser Support Test</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="mdl-mega-footer__drop-down-section">
|
||||
<h1 class="mdl-mega-footer__heading" localized-string="CDN_HEADER"></h1>
|
||||
<h1 class="mdl-mega-footer__heading">CDN</h1>
|
||||
<ul class="mdl-mega-footer__link-list">
|
||||
<li><a rel="noopener" target="_blank" href="https://developers.google.com/speed/libraries/#shaka-player" localized-string="LIBRARIES"></a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://www.jsdelivr.com/package/npm/shaka-player" localized-string="JSDELIVR"></a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://developers.google.com/speed/libraries/#shaka-player">Google Hosted Libraries</a></li>
|
||||
<li><a rel="noopener" target="_blank" href="https://www.jsdelivr.com/package/npm/shaka-player">jsDelivr</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="mdl-mega-footer__drop-down-section">
|
||||
<h1 class="mdl-mega-footer__heading" localized-string="DEMO_MODE_HEADER"></h1>
|
||||
<h1 class="mdl-mega-footer__heading">DEMO MODE</h1>
|
||||
<ul class="mdl-mega-footer__link-list" id="compiled-links">
|
||||
<li><a href="#build=compiled" id="compiled-link" localized-string="COMPILED_RELEASE"></a></li>
|
||||
<li><a href="#build=debug_compiled" id="debug-compiled-link" localized-string="COMPILED_DEBUG"></a></li>
|
||||
<li><a href="#build=uncompiled" id="uncompiled-link" localized-string="UNCOMPILED"></a></li>
|
||||
<li><a href="#build=compiled" id="compiled-link">Compiled (Release)</a></li>
|
||||
<li><a href="#build=debug_compiled" id="debug-compiled-link">Compiled (Debug)</a></li>
|
||||
<li><a href="#build=uncompiled" id="uncompiled-link">Uncompiled</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+6
-11
@@ -11,7 +11,6 @@ goog.provide('shakaDemo.NumberInput');
|
||||
goog.provide('shakaDemo.SelectInput');
|
||||
goog.provide('shakaDemo.TextInput');
|
||||
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
goog.requireType('shakaDemo.InputContainer');
|
||||
|
||||
/**
|
||||
@@ -121,7 +120,7 @@ shakaDemo.Input.lastId_ = 0;
|
||||
shakaDemo.SelectInput = class extends shakaDemo.Input {
|
||||
/**
|
||||
* @param {!shakaDemo.InputContainer} parentContainer
|
||||
* @param {?shakaDemo.MessageIds} name
|
||||
* @param {?string} name
|
||||
* @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
|
||||
* @param {!Object.<string, string>} values
|
||||
*/
|
||||
@@ -134,7 +133,7 @@ shakaDemo.SelectInput = class extends shakaDemo.Input {
|
||||
this.extra_.classList.add('mdl-textfield__label');
|
||||
this.extra_.setAttribute('for', this.input_.id);
|
||||
if (name) {
|
||||
this.extra_.textContent = shakaDemoMain.getLocalizedString(name);
|
||||
this.extra_.textContent = name;
|
||||
}
|
||||
for (const value of Object.keys(values)) {
|
||||
const option =
|
||||
@@ -243,18 +242,14 @@ shakaDemo.NumberInput = class extends shakaDemo.TextInput {
|
||||
error.classList.add('mdl-textfield__error');
|
||||
this.container_.appendChild(error);
|
||||
|
||||
const MessageIds = shakaDemo.MessageIds;
|
||||
const localize = (name) => shakaDemoMain.getLocalizedString(name);
|
||||
if (canBeZero && canBeDecimal) {
|
||||
error.textContent = localize(MessageIds.NUMBER_DECIMAL_WARNING);
|
||||
error.textContent = 'Must be a positive number.';
|
||||
} else if (canBeZero) {
|
||||
error.textContent = localize(MessageIds.NUMBER_INTEGER_WARNING);
|
||||
error.textContent = 'Must be a positive integer.';
|
||||
} else if (canBeDecimal) {
|
||||
error.textContent =
|
||||
localize(MessageIds.NUMBER_NONZERO_DECIMAL_WARNING);
|
||||
error.textContent = 'Must be a positive, nonzero number.';
|
||||
} else {
|
||||
error.textContent =
|
||||
localize(MessageIds.NUMBER_NONZERO_INTEGER_WARNING);
|
||||
error.textContent = 'Must be a positive, nonzero integer.';
|
||||
}
|
||||
|
||||
this.input_.pattern = '(Infinity|';
|
||||
|
||||
@@ -9,7 +9,6 @@ goog.provide('shakaDemo.InputContainer');
|
||||
|
||||
|
||||
goog.require('shakaDemo.Tooltips');
|
||||
goog.requireType('shakaDemo.MessageIds');
|
||||
|
||||
/**
|
||||
* Creates elements for containing inputs. It represents a single "section" of
|
||||
@@ -22,8 +21,8 @@ goog.requireType('shakaDemo.MessageIds');
|
||||
shakaDemo.InputContainer = class {
|
||||
/**
|
||||
* @param {!Element} parentDiv
|
||||
* @param {?shakaDemo.MessageIds} headerText The text to be displayed by
|
||||
* the header. If null, there will be no header.
|
||||
* @param {?string} headerText The text to be displayed by the header.
|
||||
* If null, there will be no header.
|
||||
* @param {!shakaDemo.InputContainer.Style} style
|
||||
* @param {?string} docLink
|
||||
*/
|
||||
@@ -46,7 +45,7 @@ shakaDemo.InputContainer = class {
|
||||
/** @type {?Element} */
|
||||
this.latestElementContainer;
|
||||
|
||||
/** @type {?shakaDemo.MessageIds} */
|
||||
/** @type {?string} */
|
||||
this.latestTooltip;
|
||||
|
||||
/** @private {number} */
|
||||
@@ -101,7 +100,7 @@ shakaDemo.InputContainer = class {
|
||||
|
||||
/**
|
||||
* @param {!Element} parentDiv
|
||||
* @param {shakaDemo.MessageIds} headerText
|
||||
* @param {string} headerText
|
||||
* @private
|
||||
*/
|
||||
createHeader_(parentDiv, headerText) {
|
||||
@@ -123,7 +122,7 @@ shakaDemo.InputContainer = class {
|
||||
this.header_ = document.createElement('div');
|
||||
this.header_.classList.add('input-header');
|
||||
}
|
||||
this.header_.textContent = shakaDemoMain.getLocalizedString(headerText);
|
||||
this.header_.textContent = headerText;
|
||||
parentDiv.appendChild(this.header_);
|
||||
}
|
||||
|
||||
@@ -170,8 +169,8 @@ shakaDemo.InputContainer = class {
|
||||
|
||||
/**
|
||||
* Makes a row, for storing an input.
|
||||
* @param {?shakaDemo.MessageIds} labelString
|
||||
* @param {?shakaDemo.MessageIds} tooltipString
|
||||
* @param {?string} labelString
|
||||
* @param {?string} tooltipString
|
||||
* @param {string=} rowClass
|
||||
*/
|
||||
addRow(labelString, tooltipString, rowClass) {
|
||||
@@ -190,7 +189,7 @@ shakaDemo.InputContainer = class {
|
||||
label.setAttribute('for', elementId);
|
||||
label.classList.add('input-container-label');
|
||||
const labelText = document.createElement('b');
|
||||
labelText.textContent = shakaDemoMain.getLocalizedString(labelString);
|
||||
labelText.textContent = labelString;
|
||||
label.appendChild(labelText);
|
||||
this.latestRow_.appendChild(label);
|
||||
}
|
||||
|
||||
@@ -1,289 +0,0 @@
|
||||
{
|
||||
"DEMO_ADAPTATION_RESTRICTIONS_SECTION_HEADER": "Adaptation Restrictions",
|
||||
"DEMO_ADAPTATION_SECTION_HEADER": "Adaptation",
|
||||
"DEMO_ADS": "Ads",
|
||||
"DEMO_AD_SEARCH": "Filters for assets that have advertisements.",
|
||||
"DEMO_AD_TAG_URL": "Ad Tag URL",
|
||||
"DEMO_ADS_TAB": "Ads",
|
||||
"DEMO_ADS_SECTION_HEADER": "Ads",
|
||||
"DEMO_AES128": "AES-128 protection",
|
||||
"DEMO_ALL_CONTENT": "ALL CONTENT",
|
||||
"DEMO_ALWAYS_STREAM_TEXT": "Always Stream Text",
|
||||
"DEMO_ALWAYS_STREAM_TEXT_WARNING": "Text must always be streamed while native controls are enabled, for captions to work.",
|
||||
"DEMO_APPLE": "Apple",
|
||||
"DEMO_AUDIO_CHANNEL_COUNT": "Preferred Audio Channel Count",
|
||||
"DEMO_AUDIO_LANGUAGE": "Preferred Audio Language",
|
||||
"DEMO_AUDIO_LABEL": "Preferred Audio Label",
|
||||
"DEMO_AUDIO_ONLY": "Audio only",
|
||||
"DEMO_AUDIO_ONLY_SEARCH": "Filters for assets that do not have video streams.",
|
||||
"DEMO_AUDIO_ROBUSTNESS": "Audio Robustness",
|
||||
"DEMO_AUTO_CORRECT_DASH_DRIFT": "Auto-Correct DASH Drift",
|
||||
"DEMO_AUTO_LOW_LATENCY": "Auto Low Latency Mode",
|
||||
"DEMO_AUTO_SHOW_TEXT": "Auto-Show Text",
|
||||
"DEMO_AUTO_SHOW_TEXT_NEVER": "Never",
|
||||
"DEMO_AUTO_SHOW_TEXT_ALWAYS": "Always",
|
||||
"DEMO_AUTO_SHOW_TEXT_IF_PREFERRED_TEXT_LANGUAGE": "If preferred text language",
|
||||
"DEMO_AUTO_SHOW_TEXT_IF_SUBTITLES_MAY_BE_NEEDED": "If subtitles may be needed",
|
||||
"DEMO_AVAILABILITY_WINDOW_OVERRIDE": "Availability Window Override",
|
||||
"DEMO_AXINOM": "Axinom",
|
||||
"DEMO_AZURE_MEDIA_SERVICES": "Azure Media Services",
|
||||
"DEMO_BACKOFF_FACTOR": "Backoff Factor",
|
||||
"DEMO_BANDWIDTH_DOWNGRADE": "Bandwidth Downgrade Target",
|
||||
"DEMO_BANDWIDTH_ESTIMATE": "Default Bandwidth Estimate",
|
||||
"DEMO_BANDWIDTH_UPGRADE": "Bandwidth Upgrade Target",
|
||||
"DEMO_BASE_DELAY": "Base Delay",
|
||||
"DEMO_BITCODIN": "Bitcodin",
|
||||
"DEMO_BUFFERING_GOAL": "Buffering Goal",
|
||||
"DEMO_BUFFER_BEHIND": "Buffer Behind",
|
||||
"DEMO_CANCEL_BUTTON": "Cancel",
|
||||
"DEMO_CAPTIONS": "Captions",
|
||||
"DEMO_CDN_HEADER": "CDN",
|
||||
"DEMO_CLEAR": "No DRM protection",
|
||||
"DEMO_CLEAR_KEY": "Clear Key DRM",
|
||||
"DEMO_CLOCK_SYNC_URI": "Clock Sync URI",
|
||||
"DEMO_CLEAR_BUFFER_SWITCH": "Clear video buffer on abr rendition switch",
|
||||
"DEMO_CMCD_SECTION_HEADER": "CMCD",
|
||||
"DEMO_COMPILED_DEBUG": "Compiled (Debug)",
|
||||
"DEMO_COMPILED_RELEASE": "Compiled (Release)",
|
||||
"DEMO_CONNECTION_TIMEOUT": "Connection timeout",
|
||||
"DEMO_CONFIG": "Shaka Player Demo Config",
|
||||
"DEMO_CONTAINER_SEARCH": "Container",
|
||||
"DEMO_CONTAINERLESS": "Containerless",
|
||||
"DEMO_CONTENT_ID": "Content ID",
|
||||
"DEMO_CUSTOM": "Custom",
|
||||
"DEMO_CUSTOM_CONTENT": "CUSTOM CONTENT",
|
||||
"DEMO_CUSTOM_INTRO_ONE": "Try Shaka Player with your own content!",
|
||||
"DEMO_CUSTOM_INTRO_THREE": "Custom assets will remain even after reloading the page.",
|
||||
"DEMO_CUSTOM_INTRO_TWO": "Press the button below to add a custom asset.",
|
||||
"DEMO_CUSTOM_PLAYHEAD_TRACKER": "Custom playhead tracker",
|
||||
"DEMO_DASH": "DASH",
|
||||
"DEMO_DASH_IF": "DASH-IF",
|
||||
"DEMO_DASH_SEQUENCE_MODE": "Enable DASH sequence mode",
|
||||
"DEMO_DEFAULT_AUDIO_CODEC": "Default Audio Codec",
|
||||
"DEMO_DEFAULT_PRESENTATION_DELAY": "Default Presentation Delay",
|
||||
"DEMO_DEFAULT_VIDEO_CODEC": "Default Video Codec",
|
||||
"DEMO_DELAY_LICENSE": "Delay License Request Until Played",
|
||||
"DEMO_DELETE_CUSTOM": "Delete",
|
||||
"DEMO_DELETE_CUSTOM_PROMPT": "Delete this custom asset?",
|
||||
"DEMO_DELETE_STORED_PROMPT": "Delete the offline copy?",
|
||||
"DEMO_DEMO_MODE_HEADER": "DEMO MODE",
|
||||
"DEMO_DISABLE_AUDIO": "Disable Audio",
|
||||
"DEMO_DISABLE_TEXT": "Disable Text",
|
||||
"DEMO_DISABLE_THUMBNAILS": "Disable Thumbnails",
|
||||
"DEMO_DISABLE_VIDEO": "Disable Video",
|
||||
"DEMO_DISABLE_XLINK_PROCESSING": "Disable Xlink processing",
|
||||
"DEMO_DISPATCH_ALL_EMSG_BOXES": "Dispatch all emsg boxes",
|
||||
"DEMO_DOCUMENTATION": "Documentation",
|
||||
"DEMO_DRM_RETRY_SECTION_HEADER": "DRM Retry Parameters",
|
||||
"DEMO_DRM_SEARCH": "DRM",
|
||||
"DEMO_DRM_SECTION_HEADER": "DRM",
|
||||
"DEMO_DRM_SYSTEM": "Custom DRM System",
|
||||
"DEMO_DRM_TAB": "Drm",
|
||||
"DEMO_DRM_SESSION_TYPE": "Session Type",
|
||||
"DEMO_DURATION_BACKOFF": "Duration Backoff",
|
||||
"DEMO_EDIT_CUSTOM": "Edit",
|
||||
"DEMO_ENABLED": "Enabled",
|
||||
"DEMO_ENABLE_AUDIO_GROUPS": "Enable Audio Groups",
|
||||
"DEMO_EXTRA_SHAKA_PLAYER_CONFIG": "Extra Shaka Player configuration (JSON)",
|
||||
"DEMO_EXTRA_TAB": "Extra Config",
|
||||
"DEMO_FAIRPLAY": "Fairplay DRM",
|
||||
"DEMO_FAST_HALF_LIFE": "Fast half life",
|
||||
"DEMO_FORCE_HTTPS": "Force HTTPS",
|
||||
"DEMO_FORCE_TRANSMUX": "Force Transmux",
|
||||
"DEMO_INSERT_FAKE_ENCRYPTION_IN_INIT": "Insert fake encryption in init segments when needed by the platform.",
|
||||
"DEMO_FRONT_INTRO_DISMISS": "Dismiss",
|
||||
"DEMO_FRONT_INTRO_ONE": "This is a demo of Google's Shaka Player, a JavaScript library for adaptive video streaming.",
|
||||
"DEMO_FRONT_INTRO_TWO": "Choose a video to playback; more assets are available via the \"all content\" tab.",
|
||||
"DEMO_FUZZ_FACTOR": "Fuzz Factor",
|
||||
"DEMO_GAP_DETECTION_THRESHOLD": "Gap detection threshold",
|
||||
"DEMO_GAP_JUMP_TIMER_TIME": "Gap jump timer time",
|
||||
"DEMO_GPAC": "GPAC",
|
||||
"DEMO_HEADERS_TAB": "Headers",
|
||||
"DEMO_HDR_LEVEL": "Preferred HDR Level",
|
||||
"DEMO_HDR_LEVEL_AUTO": "Auto Detect",
|
||||
"DEMO_HDR_LEVEL_HLG": "HLG",
|
||||
"DEMO_HDR_LEVEL_NONE": "No Preference",
|
||||
"DEMO_HDR_LEVEL_PQ": "PQ",
|
||||
"DEMO_HDR_LEVEL_SDR": "SDR",
|
||||
"DEMO_HIGH_DEFINITION": "High definition",
|
||||
"DEMO_HIGH_DEFINITION_SEARCH": "Filters for assets with at least one high-definition video stream.",
|
||||
"DEMO_HLS": "HLS",
|
||||
"DEMO_HLS_TAB": "HLS",
|
||||
"DEMO_HOME": "HOME",
|
||||
"DEMO_ICON_URL": "Icon URL",
|
||||
"DEMO_IGNORE_DASH_DRM": "Ignore DASH DRM Info",
|
||||
"DEMO_IGNORE_DASH_EMPTY_ADAPTATION_SET": "Ignore empty DASH AdaptationSets",
|
||||
"DEMO_IGNORE_DASH_MAX_SEGMENT_DURATION": "Ignore DASH maxSegmentDuration",
|
||||
"DEMO_IGNORE_DASH_SUGGESTED_PRESENTATION_DELAY": "Ignore DASH suggestedPresentationDelay",
|
||||
"DEMO_IGNORE_DEVICE_PIXEL_RATIO": "Ignore device pixel ratio",
|
||||
"DEMO_IGNORE_HLS_IMAGE_FAILURES": "Ignore HLS Image Stream Failures",
|
||||
"DEMO_IGNORE_HLS_TEXT_FAILURES": "Ignore HLS Text Stream Failures",
|
||||
"DEMO_IMA_ASSET_KEY": "Asset key (for LIVE DAI Content)",
|
||||
"DEMO_IMA_CONTENT_SRC_ID": "Content source ID (for VOD DAI Content)",
|
||||
"DEMO_IMA_MANIFEST_TYPE": "Manifest type (for DAI Content)",
|
||||
"DEMO_IMA_VIDEO_ID": "Video ID (for VOD DAI Content)",
|
||||
"DEMO_IGNORE_MANIFEST_PROGRAM_DATE_TIME": "Ignore Program Date Time from manifest",
|
||||
"DEMO_IGNORE_MANIFEST_TIMESTAMPS_IN_SEGMENTS_MODE": "Ignore Manifest Timestamps in Segments Mode",
|
||||
"DEMO_IGNORE_MIN_BUFFER_TIME": "Ignore Min Buffer Time",
|
||||
"DEMO_IGNORE_TEXT_FAILURES": "Ignore Text Stream Failures",
|
||||
"DEMO_INACCURATE_MANIFEST_TOLERANCE": "Inaccurate Manifest Tolerance",
|
||||
"DEMO_INITIAL_SEGMENT_LIMIT": "Initial Segment Limit",
|
||||
"DEMO_INVALID_JSON_CONFIG_ERROR": "Invalid JSON configuration",
|
||||
"DEMO_IRT": "IRT",
|
||||
"DEMO_JSDELIVR": "jsDelivr",
|
||||
"DEMO_LANGUAGE_SECTION_HEADER": "Language",
|
||||
"DEMO_LCEVC": "LCEVC",
|
||||
"DEMO_LCEVC_DRAW_LOGO": "Draw LCEVC Logo",
|
||||
"DEMO_LCEVC_DYNAMIC_PERFORMANCE_SCALING": "LCEVC Dynamic Performance scaling",
|
||||
"DEMO_LCEVC_LOG_LEVEL": "LCEVC Log Level",
|
||||
"DEMO_LCEVC_SECTION_HEADER": "MPEG-5 Part-2 LCEVC",
|
||||
"DEMO_LOW_LATENCY_STREAM": "Low Latency Streams",
|
||||
"DEMO_LIBRARIES": "Google Hosted Libraries",
|
||||
"DEMO_LICENSE": "Apache License",
|
||||
"DEMO_LICENSE_CERTIFICATE_URL": "Custom License Certificate URL",
|
||||
"DEMO_LICENSE_HEADER_NAME": "Header Name",
|
||||
"DEMO_LICENSE_HEADER_TITLE": "License Header",
|
||||
"DEMO_LICENSE_HEADER_VALUE": "Header Value",
|
||||
"DEMO_LICENSE_SERVER_URL": "Custom License Server URL",
|
||||
"DEMO_LIVE": "Live",
|
||||
"DEMO_LIVE_SEARCH": "Live",
|
||||
"DEMO_LIVE_SEGMENTS_DELAY": "Live segments delay",
|
||||
"DEMO_LIVE_SYNC": "Live sync",
|
||||
"DEMO_LIVE_SYNC_MAX_LATENCY":"Max latency for live sync",
|
||||
"DEMO_LIVE_SYNC_PLAYBACK_RATE":"Playback rate for live sync",
|
||||
"DEMO_LOG_LEVEL": "Log Level",
|
||||
"DEMO_LOG_LEVEL_DEBUG": "Debug",
|
||||
"DEMO_LOG_LEVEL_INFO": "Info",
|
||||
"DEMO_LOG_LEVEL_V": "Verbose",
|
||||
"DEMO_LOG_LEVEL_VV": "Very Verbose",
|
||||
"DEMO_LOG_LICENSE_EXCHANGE": "Log license exchange data",
|
||||
"DEMO_LOW_LATENCY": "Low Latency Mode",
|
||||
"DEMO_MAIN_TAB": "Main",
|
||||
"DEMO_MANIFEST_RETRY_SECTION_HEADER": "Manifest Retry Parameters",
|
||||
"DEMO_MANIFEST_SEARCH": "Manifest",
|
||||
"DEMO_MANIFEST_SECTION_HEADER": "Manifest",
|
||||
"DEMO_MANIFEST_URL": "Manifest URL",
|
||||
"DEMO_MANIFEST_URL_ERROR": "Must have a manifest URL, or IMA DAI id fields",
|
||||
"DEMO_MAX_ATTEMPTS": "Max Attempts",
|
||||
"DEMO_MAX_BANDWIDTH": "Max Bandwidth",
|
||||
"DEMO_MAX_DISABLED_TIME": "Max Variant Disabled Time",
|
||||
"DEMO_MAX_FRAMERATE": "Max Framerate",
|
||||
"DEMO_MAX_HEIGHT": "Max Height",
|
||||
"DEMO_MAX_PIXELS": "Max Pixels",
|
||||
"DEMO_MAX_WIDTH": "Max Width",
|
||||
"DEMO_MEDIA_SOURCE_SECTION_HEADER": "Media source",
|
||||
"DEMO_METACDN": "MetaCDN",
|
||||
"DEMO_MICROSOFT": "Microsoft",
|
||||
"DEMO_MIME_TYPE": "MIME Type",
|
||||
"DEMO_MIN_BANDWIDTH": "Min Bandwidth",
|
||||
"DEMO_MIN_BYTES": "Min Bytes",
|
||||
"DEMO_MIN_HDCP_VERSION": "Min HDCP version",
|
||||
"DEMO_MIN_FRAMERATE": "Min Framerate",
|
||||
"DEMO_MIN_HEIGHT": "Min Height",
|
||||
"DEMO_MIN_PIXELS": "Min Pixels",
|
||||
"DEMO_MIN_TOTAL_BYTES": "Min total Bytes",
|
||||
"DEMO_MIN_WIDTH": "Min Width",
|
||||
"DEMO_MP2TS": "MPEG-2 TS",
|
||||
"DEMO_MP4": "MP4",
|
||||
"DEMO_MSS": "MSS",
|
||||
"DEMO_MSS_SEQUENCE_MODE": "Enable MSS sequence mode",
|
||||
"DEMO_MULTIPLE_LANGUAGES": "Multiple languages",
|
||||
"DEMO_NAME": "Name",
|
||||
"DEMO_NAME_ERROR": "Must be a unique name.",
|
||||
"DEMO_NETWORK_INFORMATION": "Use Network Information API",
|
||||
"DEMO_NIMBLE_STREAMER": "Nimble Streamer",
|
||||
"DEMO_NPM": "Package on NPM",
|
||||
"DEMO_NUMBER_DECIMAL_WARNING": "Must be a positive number.",
|
||||
"DEMO_NUMBER_INTEGER_WARNING": "Must be a positive integer.",
|
||||
"DEMO_NUMBER_NONZERO_DECIMAL_WARNING": "Must be a positive, nonzero number.",
|
||||
"DEMO_NUMBER_NONZERO_INTEGER_WARNING": "Must be a positive, nonzero integer.",
|
||||
"DEMO_NUMBER_OF_PARALLEL_DOWNLOADS": "Number of parallel downloads",
|
||||
"DEMO_OBSERVE_QUALITY_CHANGES": "Observe media quality changes",
|
||||
"DEMO_PARSE_INBAND_PSSH_ENABLED": "Parse inband 'pssh' from media segments",
|
||||
"DEMO_OFFLINE": "Downloadable",
|
||||
"DEMO_OFFLINE_SEARCH": "Filters for assets that can be stored offline.",
|
||||
"DEMO_OFFLINE_SECTION_HEADER": "Offline",
|
||||
"DEMO_FAILURE_MISC": "Shaka Player failed to load! If you are using an ad blocker, try switching to compiled mode at the bottom of the page.",
|
||||
"DEMO_FAILURE_NO_BROWSER_SUPPORT": "Your browser is not supported!",
|
||||
"DEMO_HLS_FULL_MIME_TYPE": "Full Mime Type for Playing Media Playlists Directly",
|
||||
"DEMO_HLS_SEQUENCE_MODE": "Enable HLS sequence mode",
|
||||
"DEMO_PLAY": "Play",
|
||||
"DEMO_PLAYREADY": "PlayReady DRM",
|
||||
"DEMO_PREFER_FORCED_SUBS": "Prefer Forced Subs",
|
||||
"DEMO_PREFER_NATIVE_HLS": "Prefer native HLS playback when available",
|
||||
"DEMO_PROJECT_LINKS_HEADER": "PROJECT LINKS",
|
||||
"DEMO_PROMPT_NO": "No",
|
||||
"DEMO_PROMPT_YES": "Yes",
|
||||
"DEMO_REBUFFERING_GOAL": "Rebuffering Goal",
|
||||
"DEMO_REPORT_BUG": "REPORT BUG",
|
||||
"DEMO_RESTRICT_TO_ELEMENT_SIZE": "Restrict to element size",
|
||||
"DEMO_RESTRICT_TO_SCREEN_SIZE": "Restrict to screen size",
|
||||
"DEMO_RESTRICTIONS_SECTION_HEADER": "Restrictions",
|
||||
"DEMO_SAFE_MARGIN_SWITCH": "Safe margin on abr switch rendition",
|
||||
"DEMO_SAFE_SEEK_OFFSET": "Safe Seek Offset",
|
||||
"DEMO_SAFE_SKIP_DISTANCE": "Safe Skip Distance",
|
||||
"DEMO_SEGMENT_RELATIVE_VTT_TIMING": "Enable segment-relative VTT Timing",
|
||||
"DEMO_SESSION_ID": "Session ID",
|
||||
"DEMO_SAVE_BUTTON": "Save",
|
||||
"DEMO_SHAKA": "Shaka",
|
||||
"DEMO_SHAKA_CONTROLS": "Shaka Controls",
|
||||
"DEMO_SLOW_HALF_LIFE": "Slow half life",
|
||||
"DEMO_SOURCE": "Source on GitHub",
|
||||
"DEMO_SOURCE_BUFFER_EXTRA_FEATURES": "Source buffer extra features",
|
||||
"DEMO_SOURCE_SEARCH": "Source",
|
||||
"DEMO_STALL_DETECTOR_ENABLED": "Stall Detector Enabled",
|
||||
"DEMO_STALL_THRESHOLD": "Stall Threshold",
|
||||
"DEMO_STALL_TIMEOUT": "Stall timeout",
|
||||
"DEMO_START_AT_SEGMENT_BOUNDARY": "Start At Segment Boundary",
|
||||
"DEMO_STORED": "Downloaded",
|
||||
"DEMO_STORED_SEARCH": "Filters for assets that have been stored offline.",
|
||||
"DEMO_STREAMING_RETRY_SECTION_HEADER": "Streaming Retry Parameters",
|
||||
"DEMO_STREAMING_SECTION_HEADER": "Streaming",
|
||||
"DEMO_SUBTITLES": "Subtitles",
|
||||
"DEMO_SUBTITLES_SEARCH": "Filters for assets with caption tracks, or embedded captions.",
|
||||
"DEMO_SUPPORT": "Browser Support Test",
|
||||
"DEMO_SURROUND": "Surround sound",
|
||||
"DEMO_SURROUND_SEARCH": "Filters for assets with at least one surround sound audio track.",
|
||||
"DEMO_SWITCH_INTERVAL": "Switch Interval",
|
||||
"DEMO_TEXT_LANGUAGE": "Preferred Text Language",
|
||||
"DEMO_TEXT_ROLE": "Preferred Text Role",
|
||||
"DEMO_THUMBNAILS": "Thumbnails",
|
||||
"DEMO_TIMEOUT": "Timeout Factor",
|
||||
"DEMO_TRICK_MODE": "Special trick mode track",
|
||||
"DEMO_TRICK_MODE_SEARCH": "Filters for assets that have special video tracks to be used in trick mode playback (aka fast-forward).",
|
||||
"DEMO_TRICK_PLAY_CONTROLS": "Enabled Trick Play Controls",
|
||||
"DEMO_TRICK_PLAY_CONTROLS_WARNING": "Trick Play controls require the Shaka UI.",
|
||||
"DEMO_UI_LOCALE": "Preferred UI Locale",
|
||||
"DEMO_ULTRA_HIGH_DEFINITION": "Ultra-high definition",
|
||||
"DEMO_UNCOMPILED": "Uncompiled",
|
||||
"DEMO_UNIFIED_STREAMING": "Unified Streaming",
|
||||
"DEMO_UNSUPPORTED": "Not Available",
|
||||
"DEMO_UNSUPPORTED_DISABLED": "This asset is disabled.",
|
||||
"DEMO_UNSUPPORTED_NO_DASH_SUPPORT": "Your browser does not support MPEG-DASH manifests.",
|
||||
"DEMO_UNSUPPORTED_NO_DOWNLOAD": "This asset cannot be downloaded.",
|
||||
"DEMO_UNSUPPORTED_NO_FORMAT_SUPPORT": "Your browser does not support the required video format.",
|
||||
"DEMO_UNSUPPORTED_NO_HLS_SUPPORT": "Your browser does not support HLS manifests.",
|
||||
"DEMO_UNSUPPORTED_NO_KEY_SUPPORT": "Your browser does not support the required key systems.",
|
||||
"DEMO_UNSUPPORTED_NO_LICENSE_SUPPORT": "Your browser does not support offline licenses for the required key systems.",
|
||||
"DEMO_UNSUPPORTED_NO_MSS_SUPPORT": "Your browser does not support MSS manifests.",
|
||||
"DEMO_UNSUPPORTED_NO_OFFLINE": "Your browser does not support offline storage.",
|
||||
"DEMO_UPDATE_EXPIRATION_TIME": "Update expiration time",
|
||||
"DEMO_UPDATE_INTERVAL_SECONDS": "Update interval seconds",
|
||||
"DEMO_UPLYNK": "Verizon Digital Media Services",
|
||||
"DEMO_USE_HEADERS": "Use Headers",
|
||||
"DEMO_USE_NATIVE_HLS_SAFARI": "Use native HLS on Safari",
|
||||
"DEMO_USE_PERSISTENT_LICENSES": "Use Persistent Licenses",
|
||||
"DEMO_USE_SAFARI_BEHAVIOR_FOR_LIVE": "Use Safari behavior for live",
|
||||
"DEMO_VIDEO_ROBUSTNESS": "Video Robustness",
|
||||
"DEMO_VISUALIZER_AUTO_SCREENSHOT_TOGGLE": "Take Screenshot On Stall",
|
||||
"DEMO_VISUALIZER_BUTTON": "Buffer Visualizer",
|
||||
"DEMO_VISUALIZER_SCREENSHOT_BUTTON": "Take Screenshot",
|
||||
"DEMO_VNOVA": "V-Nova",
|
||||
"DEMO_VOD": "VOD",
|
||||
"DEMO_WEBM": "WebM",
|
||||
"DEMO_WIDEVINE": "Widevine DRM",
|
||||
"DEMO_XLINK": "XLink",
|
||||
"DEMO_XLINK_FAIL_GRACEFULLY": "Xlink Should Fail Gracefully",
|
||||
"DEMO_XLINK_SEARCH": "Filters for assets that have XLINK tags in their manifests, so that they can be broken into multiple files.",
|
||||
"DEMO_SEGMENT_PREFETCH_LIMIT": "Segment Prefetch Limit"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
+18
-123
@@ -10,7 +10,6 @@ goog.provide('shakaDemo.Main');
|
||||
goog.require('ShakaDemoAssetInfo');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('shakaDemo.CloseButton');
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
goog.require('shakaDemo.Utils');
|
||||
goog.require('shakaDemo.Visualizer');
|
||||
goog.require('shakaDemo.VisualizerButton');
|
||||
@@ -122,9 +121,8 @@ shakaDemo.Main = class {
|
||||
* This does not dispatch the shaka-main-loaded event, so it will not cause
|
||||
* the nav bar buttons to be set up.
|
||||
* @param {!shaka.ui.Overlay.FailReasonCode} reasonCode
|
||||
* @return {!Promise}
|
||||
*/
|
||||
async initFailed(reasonCode) {
|
||||
initFailed(reasonCode) {
|
||||
this.initCommon_();
|
||||
|
||||
// Set up version links, so the user can switch to compiled mode if
|
||||
@@ -155,25 +153,19 @@ shakaDemo.Main = class {
|
||||
element.classList.add('disabled-by-fail');
|
||||
}
|
||||
|
||||
// Because the UI did not load, this will need to set up a localization
|
||||
// object manually.
|
||||
this.localization_ = new shaka.ui.Localization(/* fallbackLocale= */ 'en');
|
||||
this.localization_.changeLocale(navigator.languages || []);
|
||||
await this.setupLocalization_();
|
||||
|
||||
// Process a synthetic error about lack of browser support.
|
||||
const severity = shaka.util.Error.Severity.CRITICAL;
|
||||
let href = '';
|
||||
let message = '';
|
||||
switch (reasonCode) {
|
||||
case shaka.ui.Overlay.FailReasonCode.NO_BROWSER_SUPPORT:
|
||||
message = this.getLocalizedString(
|
||||
shakaDemo.MessageIds.FAILURE_NO_BROWSER_SUPPORT);
|
||||
message = 'Your browser is not supported!';
|
||||
href = 'https://github.com/shaka-project/shaka-player#' +
|
||||
'platform-and-browser-support-matrix';
|
||||
break;
|
||||
case shaka.ui.Overlay.FailReasonCode.PLAYER_FAILED_TO_LOAD:
|
||||
message = this.getLocalizedString(shakaDemo.MessageIds.FAILURE_MISC);
|
||||
message = 'Shaka Player failed to load! If you are using an adblocker' +
|
||||
', try switching to compiled mode at the bottom of the page.';
|
||||
break;
|
||||
}
|
||||
this.handleError_(severity, message, href);
|
||||
@@ -205,7 +197,7 @@ shakaDemo.Main = class {
|
||||
// Optionally enter noinput mode. This has to happen before setting up the
|
||||
// player.
|
||||
this.noInput_ = 'noinput' in this.getParams_();
|
||||
await this.setupPlayer_();
|
||||
this.setupPlayer_();
|
||||
this.readHash_();
|
||||
window.addEventListener('hashchange', () => this.hashChanged_());
|
||||
|
||||
@@ -392,11 +384,8 @@ shakaDemo.Main = class {
|
||||
ui.configure(uiConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {!Promise}
|
||||
* @private
|
||||
*/
|
||||
async setupPlayer_() {
|
||||
/** @private */
|
||||
setupPlayer_() {
|
||||
const video = /** @type {!HTMLVideoElement} */ (this.video_);
|
||||
const ui = video['ui'];
|
||||
this.player_ = ui.getControls().getPlayer();
|
||||
@@ -443,7 +432,6 @@ shakaDemo.Main = class {
|
||||
});
|
||||
|
||||
this.localization_ = this.controls_.getLocalization();
|
||||
await this.setupLocalization_();
|
||||
|
||||
const drawerCloseButton = document.getElementById('drawer-close-button');
|
||||
drawerCloseButton.addEventListener('click', () => {
|
||||
@@ -481,50 +469,6 @@ shakaDemo.Main = class {
|
||||
this.hideElement_(drawerCloseButton);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {!Promise}
|
||||
* @private
|
||||
*/
|
||||
async setupLocalization_() {
|
||||
// Set up localization lazy-loading.
|
||||
const applyNewLocaleIfPossible = () => {
|
||||
this.localizeHTMLElements_();
|
||||
this.dispatchEventWithName_('shaka-main-locale-changed');
|
||||
};
|
||||
const UNKNOWN_LOCALES = shaka.ui.Localization.UNKNOWN_LOCALES;
|
||||
this.localization_.addEventListener(UNKNOWN_LOCALES, (event) => {
|
||||
for (const locale of event['locales']) {
|
||||
// This will leave promise rejections uncaught; this is acceptable, as
|
||||
// this function is actually expected to fail fairly often, and has
|
||||
// built-in fallback behavior (from localization events) without needing
|
||||
// to catch the promise rejection.
|
||||
this.loadUILocale_(locale).then(() => {
|
||||
if (locale == this.uiLocale_) {
|
||||
applyNewLocaleIfPossible();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
const LOCALE_CHANGED = shaka.ui.Localization.LOCALE_CHANGED;
|
||||
this.localization_.addEventListener(LOCALE_CHANGED, (event) => {
|
||||
applyNewLocaleIfPossible();
|
||||
});
|
||||
const initialLocaleLoads = [];
|
||||
initialLocaleLoads.push(this.loadUILocale_(this.uiLocale_));
|
||||
if (this.uiLocale_.includes('-')) {
|
||||
// Also try to load the 'base' localization.
|
||||
// This is so that, for example, the uiLocale_ is set to 'en-US', it will
|
||||
// try to load 'en'.
|
||||
initialLocaleLoads.push(this.loadUILocale_(this.uiLocale_.split('-')[0]));
|
||||
}
|
||||
if (!this.uiLocale_.startsWith('en')) {
|
||||
// Load 'en' as a fallback option, if not already loaded.
|
||||
initialLocaleLoads.push(this.loadUILocale_('en'));
|
||||
}
|
||||
await Promise.all(initialLocaleLoads);
|
||||
this.localizeHTMLElements_();
|
||||
}
|
||||
|
||||
/** @return {boolean} */
|
||||
getIsDrawerOpen() {
|
||||
const drawer = document.querySelector('.mdl-layout__drawer');
|
||||
@@ -719,13 +663,13 @@ shakaDemo.Main = class {
|
||||
*
|
||||
* @param {!ShakaDemoAssetInfo} asset
|
||||
* @param {boolean} needOffline True if offline support is required.
|
||||
* @return {?shakaDemo.MessageIds} unsupportedReason
|
||||
* @return {?string} unsupportedReason
|
||||
* Null if asset is supported.
|
||||
*/
|
||||
getAssetUnsupportedReason(asset, needOffline) {
|
||||
if (needOffline &&
|
||||
(!shaka.offline.Storage.support() || !this.initialStoredList_)) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_OFFLINE;
|
||||
return 'Your browser does not support offline storage.';
|
||||
}
|
||||
|
||||
if (asset.source == shakaAssets.Source.CUSTOM) {
|
||||
@@ -736,11 +680,11 @@ shakaDemo.Main = class {
|
||||
|
||||
// Is the asset disabled?
|
||||
if (asset.disabled) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_DISABLED;
|
||||
return 'This asset is disabled.';
|
||||
}
|
||||
|
||||
if (needOffline && !asset.features.includes(shakaAssets.Feature.OFFLINE)) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_DOWNLOAD;
|
||||
return 'This asset cannot be downloaded.';
|
||||
}
|
||||
|
||||
if (!asset.isClear() && !asset.isAes128()) {
|
||||
@@ -748,7 +692,7 @@ shakaDemo.Main = class {
|
||||
return this.support_.drm[shakaAssets.identifierForKeySystem(drm)];
|
||||
});
|
||||
if (!hasSupportedDRM) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_KEY_SUPPORT;
|
||||
return 'Your browser does not support the required key systems.';
|
||||
}
|
||||
if (needOffline) {
|
||||
const hasSupportedOfflineDRM = asset.drm.some((drm) => {
|
||||
@@ -757,7 +701,8 @@ shakaDemo.Main = class {
|
||||
this.support_.drm[identifier].persistentState;
|
||||
});
|
||||
if (!hasSupportedOfflineDRM) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_LICENSE_SUPPORT;
|
||||
return 'Your browser does not support offline licenses for the ' +
|
||||
'required key systems.';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -765,15 +710,15 @@ shakaDemo.Main = class {
|
||||
// Does the browser support the asset's manifest type?
|
||||
if (asset.features.includes(shakaAssets.Feature.DASH) &&
|
||||
!this.support_.manifest['mpd']) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_DASH_SUPPORT;
|
||||
return 'Your browser does not support MPEG-DASH manifests.';
|
||||
}
|
||||
if (asset.features.includes(shakaAssets.Feature.HLS) &&
|
||||
!this.support_.manifest['m3u8']) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_HLS_SUPPORT;
|
||||
return 'Your browser does not support HLS manifests.';
|
||||
}
|
||||
if (asset.features.includes(shakaAssets.Feature.MSS) &&
|
||||
!this.support_.manifest['ism']) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_MSS_SUPPORT;
|
||||
return 'Your browser does not support MSS manifests.';
|
||||
}
|
||||
|
||||
// Does the asset contain a playable mime type?
|
||||
@@ -794,7 +739,7 @@ shakaDemo.Main = class {
|
||||
return this.support_.media[type];
|
||||
});
|
||||
if (!hasSupportedMimeType) {
|
||||
return shakaDemo.MessageIds.UNSUPPORTED_NO_FORMAT_SUPPORT;
|
||||
return 'Your browser does not support the required video format.';
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -841,55 +786,6 @@ shakaDemo.Main = class {
|
||||
return this.nativeControlsEnabled_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Look through all elements in the DOM, and look for things tagged as having
|
||||
* a localized string. Then, localize them.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
localizeHTMLElements_() {
|
||||
for (const element of document.querySelectorAll('[localized-string]')) {
|
||||
const key = element.getAttribute('localized-string');
|
||||
const value = shakaDemo.MessageIds[key];
|
||||
if (value) {
|
||||
element.textContent = this.getLocalizedString(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {!shakaDemo.MessageIds} string
|
||||
* @return {string}
|
||||
*/
|
||||
getLocalizedString(string) {
|
||||
return this.localization_.resolve(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} locale
|
||||
* @return {!Promise}
|
||||
* @private
|
||||
*/
|
||||
async loadUILocale_(locale) {
|
||||
if (!locale) {
|
||||
return;
|
||||
}
|
||||
|
||||
const load = async (urlBase) => {
|
||||
const url = urlBase + '/locales/' + locale + '.json';
|
||||
|
||||
try {
|
||||
const text = await this.loadText_(url);
|
||||
const obj = /** @type {!Object.<string, string>} */(JSON.parse(text));
|
||||
const map = new Map(Object.entries(obj));
|
||||
this.localization_.insert(locale, map);
|
||||
} catch (error) {
|
||||
console.warn('Unable to load locale', locale, 'for url', url);
|
||||
}
|
||||
};
|
||||
await Promise.all([load('../ui'), load('../demo')]);
|
||||
}
|
||||
|
||||
/** @param {string} locale */
|
||||
setUILocale(locale) {
|
||||
this.uiLocale_ = locale;
|
||||
@@ -1810,7 +1706,6 @@ shakaDemo.Main = class {
|
||||
// Always show the new error if:
|
||||
// 1. there is no error showing currently
|
||||
// 2. the new error is more severe than the old one
|
||||
// Sadly, we do not (yet?) have localizations for error messages.
|
||||
if (this.currentErrorSeverity_ == null ||
|
||||
severity > this.currentErrorSeverity_) {
|
||||
this.errorDisplayLink_.href = href;
|
||||
|
||||
+23
-33
@@ -11,7 +11,6 @@ goog.provide('shakaDemo.Search');
|
||||
goog.require('shakaDemo.AssetCard');
|
||||
goog.require('shakaDemo.BoolInput');
|
||||
goog.require('shakaDemo.InputContainer');
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
goog.require('shakaDemo.SelectInput');
|
||||
goog.requireType('ShakaDemoAssetInfo');
|
||||
|
||||
@@ -60,12 +59,6 @@ shakaDemo.Search = class {
|
||||
document.addEventListener('shaka-main-offline-progress', () => {
|
||||
this.updateOfflineProgress_();
|
||||
});
|
||||
document.addEventListener('shaka-main-locale-changed', () => {
|
||||
this.remakeSearchDiv_(container);
|
||||
this.remakeResultsDiv_();
|
||||
// Update the componentHandler, to account for any new MDL elements added.
|
||||
componentHandler.upgradeDom();
|
||||
});
|
||||
document.addEventListener('shaka-main-page-changed', () => {
|
||||
if (!this.resultsDiv_.childNodes.length &&
|
||||
!container.classList.contains('hidden')) {
|
||||
@@ -153,7 +146,7 @@ shakaDemo.Search = class {
|
||||
if (unsupportedReason) {
|
||||
c.markAsUnsupported(unsupportedReason);
|
||||
} else {
|
||||
c.addButton(shakaDemo.MessageIds.PLAY, () => {
|
||||
c.addButton('Play', () => {
|
||||
shakaDemoMain.loadAsset(asset);
|
||||
this.updateSelected_();
|
||||
});
|
||||
@@ -270,7 +263,7 @@ shakaDemo.Search = class {
|
||||
* The term this represents.
|
||||
* @param {shakaDemo.Search.TermType} type
|
||||
* The type of term that this term is.
|
||||
* @param {?shakaDemo.MessageIds} tooltip
|
||||
* @param {?string} tooltip
|
||||
* @private
|
||||
*/
|
||||
makeBooleanInput_(searchContainer, choice, type, tooltip) {
|
||||
@@ -298,7 +291,7 @@ shakaDemo.Search = class {
|
||||
* Creates an input for a group of related but mutually-exclusive search
|
||||
* terms.
|
||||
* @param {!shakaDemo.InputContainer} searchContainer
|
||||
* @param {!shakaDemo.MessageIds} name
|
||||
* @param {string} name
|
||||
* @param {!Array.<!shakaDemo.Search.SearchTerm>} choices
|
||||
* An array of the terms in this term group.
|
||||
* @param {shakaDemo.Search.TermType} type
|
||||
@@ -311,7 +304,7 @@ shakaDemo.Search = class {
|
||||
const nullOption = '---';
|
||||
const valuesObject = {};
|
||||
for (const term of choices) {
|
||||
valuesObject[term] = shakaDemoMain.getLocalizedString(term);
|
||||
valuesObject[term] = term;
|
||||
}
|
||||
valuesObject[nullOption] = nullOption;
|
||||
let lastValue = nullOption;
|
||||
@@ -357,23 +350,18 @@ shakaDemo.Search = class {
|
||||
const coreContainer = new shakaDemo.InputContainer(
|
||||
container, /* headerText= */ null, shakaDemo.InputContainer.Style.FLEX,
|
||||
/* docLink= */ null);
|
||||
this.makeSelectInput_(coreContainer,
|
||||
shakaDemo.MessageIds.MANIFEST_SEARCH,
|
||||
this.makeSelectInput_(coreContainer, 'Manifest',
|
||||
[Feature.DASH, Feature.HLS, Feature.MSS], FEATURE);
|
||||
this.makeSelectInput_(coreContainer,
|
||||
shakaDemo.MessageIds.CONTAINER_SEARCH,
|
||||
this.makeSelectInput_(coreContainer, 'Container',
|
||||
[Feature.MP4, Feature.MP2TS, Feature.WEBM, Feature.CONTAINERLESS],
|
||||
FEATURE);
|
||||
this.makeSelectInput_(coreContainer,
|
||||
shakaDemo.MessageIds.DRM_SEARCH,
|
||||
this.makeSelectInput_(coreContainer, 'DRM',
|
||||
Object.values(shakaAssets.KeySystem), DRM);
|
||||
this.makeSelectInput_(coreContainer,
|
||||
shakaDemo.MessageIds.SOURCE_SEARCH,
|
||||
this.makeSelectInput_(coreContainer, 'Source',
|
||||
Object.values(shakaAssets.Source).filter((term) => {
|
||||
return term != shakaAssets.Source.CUSTOM;
|
||||
}), SOURCE);
|
||||
this.makeSelectInput_(coreContainer,
|
||||
shakaDemo.MessageIds.LIVE_SEARCH,
|
||||
this.makeSelectInput_(coreContainer, 'Live',
|
||||
[Feature.LIVE, Feature.VOD], FEATURE);
|
||||
|
||||
// Special terms.
|
||||
@@ -382,29 +370,31 @@ shakaDemo.Search = class {
|
||||
container, /* headerText= */ null, containerStyle,
|
||||
/* docLink= */ null);
|
||||
this.makeBooleanInput_(specialContainer, Feature.HIGH_DEFINITION, FEATURE,
|
||||
shakaDemo.MessageIds.HIGH_DEFINITION_SEARCH);
|
||||
'Filters for assets with at least one high-definition video stream.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.XLINK, FEATURE,
|
||||
shakaDemo.MessageIds.XLINK_SEARCH);
|
||||
'Filters for assets that have XLINK tags in their manifests, so that ' +
|
||||
'they can be broken into multiple files.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.SUBTITLES, FEATURE,
|
||||
shakaDemo.MessageIds.SUBTITLES_SEARCH);
|
||||
'Filters for assets with caption tracks, or embedded captions.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.TRICK_MODE, FEATURE,
|
||||
shakaDemo.MessageIds.TRICK_MODE_SEARCH);
|
||||
'Filters for assets that have special video tracks to be used in ' +
|
||||
'trick mode playback (aka fast-forward).');
|
||||
this.makeBooleanInput_(specialContainer, Feature.SURROUND, FEATURE,
|
||||
shakaDemo.MessageIds.SURROUND_SEARCH);
|
||||
'Filters for assets with at least one surround sound audio track.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.OFFLINE, FEATURE,
|
||||
shakaDemo.MessageIds.OFFLINE_SEARCH);
|
||||
'Filters for assets that can be stored offline.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.STORED, FEATURE,
|
||||
shakaDemo.MessageIds.STORED_SEARCH);
|
||||
'Filters for assets that have been stored offline.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.ADS, FEATURE,
|
||||
shakaDemo.MessageIds.AD_SEARCH);
|
||||
'Filters for assets that have advertisements.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.AUDIO_ONLY, FEATURE,
|
||||
shakaDemo.MessageIds.AUDIO_ONLY_SEARCH);
|
||||
'Filters for assets that do not have video streams.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.THUMBNAILS, FEATURE,
|
||||
shakaDemo.MessageIds.THUMBNAILS);
|
||||
'Filters for assets that have a thumbnail track.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.LCEVC, FEATURE,
|
||||
shakaDemo.MessageIds.LCEVC);
|
||||
'Filters for assets that have an LCEVC enhancement layer.');
|
||||
this.makeBooleanInput_(specialContainer, Feature.LOW_LATENCY_STREAM,
|
||||
FEATURE, shakaDemo.MessageIds.LOW_LATENCY_STREAM);
|
||||
FEATURE, 'Filters for assets that have a low-latency stream.');
|
||||
|
||||
container.appendChild(this.resultsDiv_);
|
||||
}
|
||||
|
||||
+3
-5
@@ -7,19 +7,17 @@
|
||||
|
||||
goog.provide('shakaDemo.Tooltips');
|
||||
|
||||
goog.requireType('shakaDemo.MessageIds');
|
||||
|
||||
/**
|
||||
* Creates and contains a tooltip.
|
||||
*/
|
||||
shakaDemo.Tooltips = class {
|
||||
/**
|
||||
* @param {!Element} labeledElement
|
||||
* @param {shakaDemo.MessageIds} message
|
||||
* @param {string} content
|
||||
*/
|
||||
static make(labeledElement, message) {
|
||||
static make(labeledElement, content) {
|
||||
tippy(labeledElement, {
|
||||
content: shakaDemoMain.getLocalizedString(message),
|
||||
content,
|
||||
placement: 'bottom',
|
||||
arrow: true,
|
||||
animation: 'scale',
|
||||
|
||||
+3
-5
@@ -84,8 +84,7 @@ shakaDemo.Visualizer = class {
|
||||
inputContainer.addRow(null, null);
|
||||
this.screenshotButton_ = document.createElement('button');
|
||||
inputContainer.latestElementContainer.appendChild(this.screenshotButton_);
|
||||
this.screenshotButton_.textContent = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.VISUALIZER_SCREENSHOT_BUTTON);
|
||||
this.screenshotButton_.textContent = 'Take Screenshot';
|
||||
this.screenshotButton_.classList.add('mdl-button');
|
||||
this.screenshotButton_.classList.add('mdl-button--colored');
|
||||
this.screenshotButton_.classList.add('mdl-js-button');
|
||||
@@ -94,11 +93,10 @@ shakaDemo.Visualizer = class {
|
||||
this.takeScreenshot_();
|
||||
});
|
||||
|
||||
inputContainer.addRow(
|
||||
shakaDemo.MessageIds.VISUALIZER_AUTO_SCREENSHOT_TOGGLE, null);
|
||||
inputContainer.addRow('Take Screenshot On Stall', null);
|
||||
/** @private {!shakaDemo.BoolInput} */
|
||||
this.autoScreenshotToggle_ = new shakaDemo.BoolInput(
|
||||
inputContainer, shakaDemo.MessageIds.VISUALIZER_AUTO_SCREENSHOT_TOGGLE,
|
||||
inputContainer, 'Take Screenshot On Stall',
|
||||
(input) => {
|
||||
this.takeAutoScreenshots_ = input.checked;
|
||||
});
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
|
||||
goog.provide('shakaDemo.VisualizerButton');
|
||||
|
||||
goog.require('shakaDemo.MessageIds');
|
||||
|
||||
/**
|
||||
* A custom UI overflow button, to allow users to show the visualizer.
|
||||
* This cannot actually extend shaka.ui.Element, as that class does not exist
|
||||
@@ -41,6 +39,7 @@ shakaDemo.VisualizerButton = class extends shaka.ui.Element {
|
||||
label.classList.add('shaka-overflow-menu-only');
|
||||
this.nameSpan_ = document.createElement('span');
|
||||
label.appendChild(this.nameSpan_);
|
||||
this.nameSpan_.textContent = 'Buffer Visualizer';
|
||||
|
||||
/** @private {!HTMLElement} */
|
||||
this.currentPipState_ = /** @type {!HTMLElement} */ (
|
||||
@@ -57,24 +56,6 @@ shakaDemo.VisualizerButton = class extends shaka.ui.Element {
|
||||
!shakaDemoMain.getIsVisualizerActive());
|
||||
this.setIcon_();
|
||||
});
|
||||
|
||||
this.eventManager.listen(
|
||||
this.localization, shaka.ui.Localization.LOCALE_UPDATED, () => {
|
||||
this.updateLocalizedStrings_();
|
||||
});
|
||||
|
||||
this.eventManager.listen(
|
||||
this.localization, shaka.ui.Localization.LOCALE_CHANGED, () => {
|
||||
this.updateLocalizedStrings_();
|
||||
});
|
||||
}
|
||||
|
||||
/** @private */
|
||||
updateLocalizedStrings_() {
|
||||
this.nameSpan_.textContent = shakaDemoMain.getLocalizedString(
|
||||
shakaDemo.MessageIds.VISUALIZER_BUTTON);
|
||||
// TODO: Make sure that the screenreader description of this control is
|
||||
// localized!
|
||||
}
|
||||
|
||||
/** @private */
|
||||
|
||||
@@ -33,22 +33,6 @@ describe('Demo', () => {
|
||||
await shakaDemoMain.cleanup();
|
||||
});
|
||||
|
||||
it('has all messages defined', async () => {
|
||||
const englishBuffer =
|
||||
await shaka.test.Util.fetch('/base/demo/locales/en.json');
|
||||
const englishMessages = JSON.parse(shaka.util.StringUtils.fromUTF8(
|
||||
englishBuffer));
|
||||
const sourceBuffer =
|
||||
await shaka.test.Util.fetch('/base/demo/locales/source.json');
|
||||
const sourceMessages = JSON.parse(shaka.util.StringUtils.fromUTF8(
|
||||
sourceBuffer));
|
||||
|
||||
for (const id of Object.values(shakaDemo.MessageIds)) {
|
||||
expect(englishMessages[id]).withContext(`id=${id}, English`).toBeTruthy();
|
||||
expect(sourceMessages[id]).withContext(`id=${id}, source`).toBeTruthy();
|
||||
}
|
||||
});
|
||||
|
||||
describe('config', () => {
|
||||
it('does not have entries for invalid config options', () => {
|
||||
// We determine whether a config option has been made or not by looking at
|
||||
|
||||
Reference in New Issue
Block a user