diff --git a/build/check.py b/build/check.py index f8552a8ce..1f6799ddb 100755 --- a/build/check.py +++ b/build/check.py @@ -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) diff --git a/demo/asset_card.js b/demo/asset_card.js index dbe71173d..4544f8257 100644 --- a/demo/asset_card.js +++ b/demo/asset_card.js @@ -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) { diff --git a/demo/cast_receiver/index.html b/demo/cast_receiver/index.html index e7454d2ac..7fda5f9cc 100644 --- a/demo/cast_receiver/index.html +++ b/demo/cast_receiver/index.html @@ -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', diff --git a/demo/close_button.js b/demo/close_button.js index 570ff38d5..041fa5ea5 100644 --- a/demo/close_button.js +++ b/demo/close_button.js @@ -41,9 +41,6 @@ shakaDemo.CloseButton = class extends shaka.ui.Element { }); }); } - - // TODO: Make sure that the screenreader description of this control is - // localized! } }; diff --git a/demo/common/asset.js b/demo/common/asset.js index e17a4cfb0..fb9e36a4c 100644 --- a/demo/common/asset.js +++ b/demo/common/asset.js @@ -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 */ diff --git a/demo/common/assets.js b/demo/common/assets.js index 2a4ed40df..0b8ee93d5 100644 --- a/demo/common/assets.js +++ b/demo/common/assets.js @@ -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', }; diff --git a/demo/common/message_ids.js b/demo/common/message_ids.js deleted file mode 100644 index 316ee28c9..000000000 --- a/demo/common/message_ids.js +++ /dev/null @@ -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 */ diff --git a/demo/config.js b/demo/config.js index 1fc78b28e..c3256dd4d 100644 --- a/demo/config.js +++ b/demo/config.js @@ -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.} 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.} 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.} options * @param {!Object.} 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) { diff --git a/demo/custom.js b/demo/custom.js index dc9588030..dda6cf329 100644 --- a/demo/custom.js +++ b/demo/custom.js @@ -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) => { diff --git a/demo/front.js b/demo/front.js index dac025b6e..ee7ac4921 100644 --- a/demo/front.js +++ b/demo/front.js @@ -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_(); }); diff --git a/demo/index.html b/demo/index.html index b3c670ed3..c929f3fb9 100644 --- a/demo/index.html +++ b/demo/index.html @@ -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 = [