shaka-player 4.4.3 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/workflows/release-please.yaml +2 -27
- package/AUTHORS +2 -0
- package/CHANGELOG.md +156 -39
- package/CODE_OF_CONDUCT.md +1 -1
- package/CONTRIBUTORS +2 -0
- package/README.md +54 -42
- package/demo/asset_card.js +18 -21
- package/demo/cast_receiver/index.html +0 -1
- package/demo/close_button.js +0 -3
- package/demo/common/asset.js +33 -22
- package/demo/common/assets.js +249 -60
- package/demo/config.js +219 -253
- package/demo/custom.js +88 -133
- package/demo/front.js +7 -10
- package/demo/index.html +19 -22
- package/demo/input.js +6 -11
- package/demo/input_container.js +8 -9
- package/demo/main.js +62 -126
- package/demo/search.js +29 -34
- package/demo/service_worker.js +0 -3
- package/demo/tooltip.js +3 -5
- package/demo/visualizer.js +3 -5
- package/demo/visualizer_button.js +1 -20
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +211 -228
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +211 -228
- package/dist/demo.compiled.map +4 -4
- package/dist/deps.js +42 -37
- package/dist/locales.js +34 -30
- package/dist/receiver.compiled.debug.js +64 -77
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +64 -77
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +343 -151
- package/dist/shaka-player.compiled.debug.d.ts +343 -151
- package/dist/shaka-player.compiled.debug.externs.js +356 -117
- package/dist/shaka-player.compiled.debug.js +952 -811
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +356 -117
- package/dist/shaka-player.compiled.js +1165 -1078
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +359 -153
- package/dist/shaka-player.ui.debug.d.ts +359 -153
- package/dist/shaka-player.ui.debug.externs.js +382 -117
- package/dist/shaka-player.ui.debug.js +1084 -918
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +382 -117
- package/dist/shaka-player.ui.js +1377 -1274
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/lcevc-integration.md +14 -14
- package/docs/tutorials/ad_monetization.md +54 -0
- package/docs/tutorials/basic-usage.md +2 -1
- package/docs/tutorials/errors.md +2 -1
- package/docs/tutorials/faq.md +27 -55
- package/docs/tutorials/index.json +2 -1
- package/docs/tutorials/lcevc.md +118 -0
- package/docs/tutorials/offline.md +10 -8
- package/docs/tutorials/plugins.md +5 -0
- package/docs/tutorials/ui-customization.md +17 -0
- package/docs/tutorials/ui.md +2 -1
- package/docs/tutorials/upgrade.md +3 -0
- package/externs/css_style_declaration.js +19 -0
- package/externs/lcevc.js +37 -13
- package/externs/managedmediasource.js +24 -0
- package/externs/media_remote.js +68 -0
- package/externs/mediatailor.js +193 -0
- package/externs/pictureinpicture.js +11 -0
- package/externs/shaka/abr_manager.js +6 -2
- package/externs/shaka/ads.js +27 -0
- package/externs/shaka/cea.js +7 -0
- package/externs/shaka/codecs.js +5 -3
- package/externs/shaka/manifest.js +31 -10
- package/externs/shaka/manifest_parser.js +24 -1
- package/externs/shaka/net.js +2 -2
- package/externs/shaka/offline.js +13 -2
- package/externs/shaka/player.js +65 -8
- package/externs/shaka/text.js +3 -1
- package/externs/shaka/transmuxer.js +1 -1
- package/karma.conf.js +7 -3
- package/lib/abr/simple_abr_manager.js +66 -9
- package/lib/ads/ad_manager.js +104 -50
- package/lib/ads/media_tailor_ad.js +297 -0
- package/lib/ads/media_tailor_ad_manager.js +839 -0
- package/lib/cast/cast_receiver.js +1 -1
- package/lib/cea/cea_decoder.js +28 -0
- package/lib/cea/dummy_caption_decoder.js +5 -0
- package/lib/cea/ts_cea_parser.js +15 -2
- package/lib/config/codec_switching_strategy.js +24 -0
- package/lib/dash/content_protection.js +120 -2
- package/lib/dash/dash_parser.js +322 -93
- package/lib/dash/mpd_utils.js +62 -37
- package/lib/dash/segment_base.js +17 -10
- package/lib/dash/segment_list.js +18 -9
- package/lib/dash/segment_template.js +122 -107
- package/lib/dependencies/all.js +8 -7
- package/lib/hls/hls_classes.js +28 -43
- package/lib/hls/hls_parser.js +798 -658
- package/lib/hls/hls_utils.js +64 -5
- package/lib/hls/manifest_text_parser.js +7 -11
- package/lib/lcevc/lcevc_dec.js +220 -0
- package/lib/media/adaptation_set.js +32 -14
- package/lib/media/adaptation_set_criteria.js +86 -16
- package/lib/media/closed_caption_parser.js +13 -0
- package/lib/media/content_workarounds.js +6 -0
- package/lib/media/drm_engine.js +8 -13
- package/lib/media/manifest_parser.js +8 -113
- package/lib/media/media_source_capabilities.js +10 -3
- package/lib/media/media_source_engine.js +286 -44
- package/lib/media/play_rate_controller.js +8 -38
- package/lib/media/presentation_timeline.js +7 -1
- package/lib/media/quality_observer.js +1 -1
- package/lib/media/segment_index.js +6 -6
- package/lib/media/segment_prefetch.js +92 -24
- package/lib/media/segment_reference.js +73 -7
- package/lib/media/segment_utils.js +343 -0
- package/lib/media/stall_detector.js +0 -3
- package/lib/media/streaming_engine.js +73 -38
- package/lib/mss/mss_parser.js +19 -2
- package/lib/net/networking_engine.js +67 -12
- package/lib/net/networking_utils.js +95 -0
- package/lib/offline/indexeddb/v1_storage_cell.js +3 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +3 -0
- package/lib/offline/manifest_converter.js +3 -0
- package/lib/offline/offline_manifest_parser.js +10 -0
- package/lib/offline/storage.js +14 -7
- package/lib/player.js +1098 -1537
- package/lib/polyfill/mediasource.js +22 -1
- package/lib/text/cue.js +15 -0
- package/lib/text/mp4_ttml_parser.js +2 -2
- package/lib/text/srt_text_parser.js +2 -2
- package/lib/text/stub_text_displayer.js +51 -0
- package/lib/text/text_engine.js +3 -2
- package/lib/text/ttml_text_parser.js +45 -5
- package/lib/text/ui_text_displayer.js +8 -0
- package/lib/text/vtt_text_parser.js +40 -22
- package/lib/transmuxer/aac_transmuxer.js +1 -1
- package/lib/transmuxer/ac3_transmuxer.js +1 -1
- package/lib/transmuxer/ec3_transmuxer.js +1 -1
- package/lib/transmuxer/h264.js +5 -4
- package/lib/transmuxer/h265.js +863 -0
- package/lib/transmuxer/mp3_transmuxer.js +1 -1
- package/lib/transmuxer/mpeg_ts_transmuxer.js +4 -3
- package/lib/transmuxer/mss_transmuxer.js +1 -1
- package/lib/transmuxer/ts_transmuxer.js +187 -22
- package/lib/util/buffer_utils.js +26 -4
- package/lib/util/content_steering_manager.js +358 -0
- package/lib/util/error.js +30 -15
- package/lib/util/exp_golomb.js +30 -2
- package/lib/util/fairplay_utils.js +1 -1
- package/lib/util/fake_event.js +8 -1
- package/lib/util/id3_utils.js +50 -1
- package/lib/util/manifest_parser_utils.js +12 -8
- package/lib/util/mp4_generator.js +6 -8
- package/lib/util/mutex.js +59 -0
- package/lib/util/object_utils.js +1 -1
- package/lib/util/periods.js +156 -179
- package/lib/util/platform.js +44 -3
- package/lib/util/player_configuration.js +43 -6
- package/lib/util/state_history.js +6 -2
- package/lib/util/stream_utils.js +206 -283
- package/lib/util/ts_parser.js +335 -98
- package/lib/util/uint8array_utils.js +5 -1
- package/lib/util/xml_utils.js +5 -0
- package/maintained-branches.md +3 -2
- package/package.json +4 -6
- package/roadmap.md +25 -5
- package/shaka-player.uncompiled.js +2 -2
- package/support.html +0 -1
- package/test/abr/simple_abr_manager_unit.js +33 -33
- package/test/ads/ad_manager_unit.js +3 -2
- package/test/cast/cast_receiver_integration.js +50 -4
- package/test/cast/cast_utils_unit.js +2 -0
- package/test/cea/cea_decoder_unit.js +7 -0
- package/test/codec_switching/codec_switching_integration.js +182 -0
- package/test/dash/dash_parser_content_protection_unit.js +2 -0
- package/test/dash/dash_parser_integration.js +74 -0
- package/test/dash/dash_parser_live_unit.js +2 -19
- package/test/dash/dash_parser_manifest_unit.js +536 -2
- package/test/dash/dash_parser_segment_base_unit.js +2 -0
- package/test/dash/dash_parser_segment_list_unit.js +2 -0
- package/test/dash/dash_parser_segment_template_unit.js +2 -0
- package/test/dash/mpd_utils_unit.js +61 -30
- package/test/demo/demo_unit.js +0 -16
- package/test/hls/hls_live_unit.js +14 -3
- package/test/hls/hls_parser_unit.js +385 -33
- package/test/hls/manifest_text_parser_unit.js +32 -99
- package/test/media/adaptation_set_criteria_unit.js +284 -15
- package/test/media/adaptation_set_unit.js +2 -0
- package/test/media/content_workarounds_unit.js +1 -1
- package/test/media/drm_engine_unit.js +3 -3
- package/test/media/media_source_engine_unit.js +166 -2
- package/test/media/play_rate_controller_unit.js +0 -48
- package/test/media/segment_index_unit.js +5 -4
- package/test/media/segment_prefetch_unit.js +1 -1
- package/test/media/streaming_engine_unit.js +17 -17
- package/test/mss/mss_parser_unit.js +2 -0
- package/test/mss/mss_player_integration.js +3 -2
- package/test/net/networking_engine_unit.js +3 -3
- package/test/{media/manifest_parser_unit.js → net/networking_utils_unit.js} +2 -2
- package/test/offline/manifest_convert_unit.js +14 -0
- package/test/offline/offline_integration.js +2 -1
- package/test/offline/storage_integration.js +22 -13
- package/test/player_external.js +4 -2
- package/test/player_integration.js +15 -4
- package/test/player_load_graph_integration.js +47 -151
- package/test/player_src_equals_external.js +1 -0
- package/test/player_src_equals_integration.js +71 -4
- package/test/player_unit.js +182 -158
- package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/dash.mpd +18 -0
- package/test/test/assets/dash-aes-128/license +1 -0
- package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
- package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
- package/test/test/assets/dash-multi-codec/dash.mpd +32 -0
- package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
- package/test/test/assets/hls-ts-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-h265/hevc.m3u8 +6 -0
- package/test/test/assets/hls-ts-h265/index.m3u8 +7 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +9 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +24 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +14 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +23 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
- package/test/test/util/dash_parser_util.js +4 -0
- package/test/test/util/fake_ad_manager.js +20 -0
- package/test/test/util/fake_media_source_engine.js +13 -2
- package/test/test/util/fake_networking_engine.js +9 -1
- package/test/test/util/fake_segment_prefetch.js +3 -0
- package/test/test/util/manifest_generator.js +11 -3
- package/test/test/util/manifest_parser_util.js +14 -2
- package/test/test/util/mss_parser_util.js +4 -0
- package/test/test/util/offline_utils.js +2 -0
- package/test/test/util/simple_fakes.js +2 -2
- package/test/test/util/streaming_engine_util.js +10 -4
- package/test/test/util/test_scheme.js +6 -0
- package/test/test/util/ui_utils.js +4 -3
- package/test/text/mp4_ttml_parser_unit.js +4 -4
- package/test/text/srt_text_parser_unit.js +1 -1
- package/test/text/text_displayer_layout_unit.js +1 -1
- package/test/text/text_engine_unit.js +6 -0
- package/test/text/ttml_text_parser_unit.js +85 -2
- package/test/text/vtt_text_parser_unit.js +103 -31
- package/test/transmuxer/transmuxer_engine_integration.js +9 -0
- package/test/transmuxer/transmuxer_integration.js +150 -3
- package/test/ui/ad_ui_unit.js +2 -2
- package/test/ui/ui_customization_unit.js +17 -16
- package/test/ui/ui_integration.js +30 -20
- package/test/ui/ui_unit.js +28 -29
- package/test/util/buffer_utils_unit.js +1 -1
- package/test/util/content_steering_manager_unit.js +427 -0
- package/test/util/id3_utils_unit.js +52 -0
- package/test/util/stream_utils_unit.js +207 -169
- package/test/util/ts_parser_unit.js +3 -3
- package/third_party/closure-uri/uri.js +13 -1
- package/ui/audio_language_selection.js +9 -2
- package/ui/controls.js +125 -0
- package/ui/externs/ui.js +24 -2
- package/ui/language_utils.js +43 -8
- package/ui/less/range_elements.less +33 -0
- package/ui/locales/en.json +1 -0
- package/ui/locales/es-419.json +1 -0
- package/ui/locales/es.json +1 -0
- package/ui/locales/source.json +4 -0
- package/ui/localization.js +10 -0
- package/ui/pip_button.js +22 -120
- package/ui/remote_button.js +203 -0
- package/ui/resolution_selection.js +47 -10
- package/ui/seek_bar.js +296 -3
- package/ui/text_selection.js +2 -1
- package/ui/ui.js +11 -4
- package/demo/common/message_ids.js +0 -309
- package/demo/locales/en.json +0 -288
- package/demo/locales/source.json +0 -1146
- package/externs/mux.js +0 -69
- package/lib/lcevc/lcevc_dil.js +0 -152
- package/lib/routing/node.js +0 -23
- package/lib/routing/payload.js +0 -43
- package/lib/routing/walker.js +0 -587
- package/lib/transmuxer/muxjs_transmuxer.js +0 -242
- package/test/routing/walker_unit.js +0 -504
- package/test/transmuxer/muxjs_transmuxer_integration.js +0 -177
package/demo/custom.js
CHANGED
|
@@ -12,7 +12,6 @@ goog.require('ShakaDemoAssetInfo');
|
|
|
12
12
|
goog.require('shakaDemo.AssetCard');
|
|
13
13
|
goog.require('shakaDemo.Input');
|
|
14
14
|
goog.require('shakaDemo.InputContainer');
|
|
15
|
-
goog.require('shakaDemo.MessageIds');
|
|
16
15
|
goog.require('shakaDemo.TextInput');
|
|
17
16
|
|
|
18
17
|
/** @type {?shakaDemo.Custom} */
|
|
@@ -71,9 +70,6 @@ shakaDemo.Custom = class {
|
|
|
71
70
|
document.addEventListener('shaka-main-offline-progress', () => {
|
|
72
71
|
this.updateOfflineProgress_();
|
|
73
72
|
});
|
|
74
|
-
document.addEventListener('shaka-main-locale-changed', () => {
|
|
75
|
-
this.remakeSavedList_();
|
|
76
|
-
});
|
|
77
73
|
document.addEventListener('shaka-main-page-changed', () => {
|
|
78
74
|
if (!this.savedList_.childNodes.length &&
|
|
79
75
|
!container.classList.contains('hidden')) {
|
|
@@ -142,9 +138,8 @@ shakaDemo.Custom = class {
|
|
|
142
138
|
const div = document.createElement('div');
|
|
143
139
|
headersDiv.appendChild(div);
|
|
144
140
|
const containerStyle = shakaDemo.InputContainer.Style.VERTICAL;
|
|
145
|
-
const headerText = shakaDemo.MessageIds.LICENSE_HEADER_TITLE;
|
|
146
141
|
const container = new shakaDemo.InputContainer(
|
|
147
|
-
div,
|
|
142
|
+
div, 'License Header', containerStyle,
|
|
148
143
|
/* docLink= */ null);
|
|
149
144
|
|
|
150
145
|
const collisionCheckEntry = {
|
|
@@ -209,9 +204,7 @@ shakaDemo.Custom = class {
|
|
|
209
204
|
const nameOnChange = (input) => {
|
|
210
205
|
onChange(input.value, headerValue);
|
|
211
206
|
};
|
|
212
|
-
|
|
213
|
-
shakaDemo.MessageIds.LICENSE_HEADER_NAME);
|
|
214
|
-
this.makeField_(container, licenseHeaderName, nameSetup, nameOnChange);
|
|
207
|
+
this.makeField_(container, 'Header Name', nameSetup, nameOnChange);
|
|
215
208
|
|
|
216
209
|
const valueSetup = (input, container) => {
|
|
217
210
|
if (headerValue) {
|
|
@@ -221,9 +214,7 @@ shakaDemo.Custom = class {
|
|
|
221
214
|
const valueOnChange = (input) => {
|
|
222
215
|
onChange(headerName, input.value);
|
|
223
216
|
};
|
|
224
|
-
|
|
225
|
-
shakaDemo.MessageIds.LICENSE_HEADER_VALUE);
|
|
226
|
-
this.makeField_(container, licenseHeaderValue, valueSetup, valueOnChange);
|
|
217
|
+
this.makeField_(container, 'Header Value', valueSetup, valueOnChange);
|
|
227
218
|
};
|
|
228
219
|
if (assetInProgress.licenseRequestHeaders.size == 0) {
|
|
229
220
|
// It starts out with a single empty row, but each time you start filling
|
|
@@ -244,40 +235,6 @@ shakaDemo.Custom = class {
|
|
|
244
235
|
}
|
|
245
236
|
|
|
246
237
|
|
|
247
|
-
/**
|
|
248
|
-
* @param {!ShakaDemoAssetInfo} assetInProgress
|
|
249
|
-
* @param {!Array.<!HTMLInputElement>} inputsToCheck
|
|
250
|
-
* @return {!Element} div
|
|
251
|
-
* @private
|
|
252
|
-
*/
|
|
253
|
-
makeAssetDialogContentsHLS_(assetInProgress, inputsToCheck) {
|
|
254
|
-
const mediaPlaylistDiv = document.createElement('div');
|
|
255
|
-
const containerStyle = shakaDemo.InputContainer.Style.FLEX;
|
|
256
|
-
const container = new shakaDemo.InputContainer(
|
|
257
|
-
mediaPlaylistDiv, /* headerText= */ null, containerStyle,
|
|
258
|
-
/* docLink= */ null);
|
|
259
|
-
container.getClassList().add('wide-input');
|
|
260
|
-
container.setDefaultRowClass('wide-input');
|
|
261
|
-
|
|
262
|
-
const fullMimeTypeSetup = (input, container) => {
|
|
263
|
-
if (assetInProgress.mediaPlaylistFullMimeType) {
|
|
264
|
-
input.value = assetInProgress.mediaPlaylistFullMimeType;
|
|
265
|
-
}
|
|
266
|
-
const defaultConfig = shaka.util.PlayerConfiguration.createDefault();
|
|
267
|
-
input.placeholder = defaultConfig.manifest.hls.mediaPlaylistFullMimeType;
|
|
268
|
-
};
|
|
269
|
-
const fullMimeTypeOnChange = (input) => {
|
|
270
|
-
assetInProgress.setMediaPlaylistFullMimeType(input.value);
|
|
271
|
-
};
|
|
272
|
-
const fullMimeTypeName = shakaDemoMain.getLocalizedString(
|
|
273
|
-
shakaDemo.MessageIds.HLS_FULL_MIME_TYPE);
|
|
274
|
-
this.makeField_(
|
|
275
|
-
container, fullMimeTypeName, fullMimeTypeSetup, fullMimeTypeOnChange);
|
|
276
|
-
|
|
277
|
-
return mediaPlaylistDiv;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
|
|
281
238
|
/**
|
|
282
239
|
* @param {!ShakaDemoAssetInfo} assetInProgress
|
|
283
240
|
* @param {!Array.<!HTMLInputElement>} inputsToCheck
|
|
@@ -300,10 +257,7 @@ shakaDemo.Custom = class {
|
|
|
300
257
|
const adTagOnChange = (input) => {
|
|
301
258
|
assetInProgress.adTagUri = input.value;
|
|
302
259
|
};
|
|
303
|
-
|
|
304
|
-
shakaDemo.MessageIds.AD_TAG_URL);
|
|
305
|
-
this.makeField_(
|
|
306
|
-
container, adTagURLName, adTagSetup, adTagOnChange);
|
|
260
|
+
this.makeField_(container, 'Ad Tag URL', adTagSetup, adTagOnChange);
|
|
307
261
|
|
|
308
262
|
// Make the content source id field.
|
|
309
263
|
const contentSrcIdSetup = (input, container) => {
|
|
@@ -319,8 +273,7 @@ shakaDemo.Custom = class {
|
|
|
319
273
|
this.manifestField_.required =
|
|
320
274
|
this.checkManifestRequired_(assetInProgress);
|
|
321
275
|
};
|
|
322
|
-
const contentSrcIdName =
|
|
323
|
-
shakaDemo.MessageIds.IMA_CONTENT_SRC_ID);
|
|
276
|
+
const contentSrcIdName = 'Content source ID (for VOD DAI Content)';
|
|
324
277
|
this.makeField_(
|
|
325
278
|
container, contentSrcIdName, contentSrcIdSetup, contentSrcIdOnChange);
|
|
326
279
|
|
|
@@ -338,10 +291,8 @@ shakaDemo.Custom = class {
|
|
|
338
291
|
this.manifestField_.required =
|
|
339
292
|
this.checkManifestRequired_(assetInProgress);
|
|
340
293
|
};
|
|
341
|
-
const videoIdName =
|
|
342
|
-
|
|
343
|
-
this.makeField_(
|
|
344
|
-
container, videoIdName, videoIdSetup, videoIdOnChange);
|
|
294
|
+
const videoIdName = 'Video ID (for VOD DAI Content)';
|
|
295
|
+
this.makeField_(container, videoIdName, videoIdSetup, videoIdOnChange);
|
|
345
296
|
|
|
346
297
|
// Make the asset key field.
|
|
347
298
|
const assetKeySetup = (input, container) => {
|
|
@@ -357,10 +308,8 @@ shakaDemo.Custom = class {
|
|
|
357
308
|
this.manifestField_.required =
|
|
358
309
|
this.checkManifestRequired_(assetInProgress);
|
|
359
310
|
};
|
|
360
|
-
const assetKeyName =
|
|
361
|
-
|
|
362
|
-
this.makeField_(
|
|
363
|
-
container, assetKeyName, assetKeySetup, assetKeyChange);
|
|
311
|
+
const assetKeyName = 'Asset key (for LIVE DAI Content)';
|
|
312
|
+
this.makeField_(container, assetKeyName, assetKeySetup, assetKeyChange);
|
|
364
313
|
|
|
365
314
|
// Make the manifest type field.
|
|
366
315
|
const manifestTypeSetup = (input, container) => {
|
|
@@ -376,11 +325,25 @@ shakaDemo.Custom = class {
|
|
|
376
325
|
this.manifestField_.required =
|
|
377
326
|
this.checkManifestRequired_(assetInProgress);
|
|
378
327
|
};
|
|
379
|
-
const manifestTypeName =
|
|
380
|
-
shakaDemo.MessageIds.IMA_MANIFEST_TYPE);
|
|
328
|
+
const manifestTypeName = 'Manifest type (for DAI Content)';
|
|
381
329
|
this.makeField_(
|
|
382
330
|
container, manifestTypeName, manifestTypeSetup, manifestTypeChange);
|
|
383
331
|
|
|
332
|
+
// Make the MediaTailor URL field.
|
|
333
|
+
const mediaTailorSetup = (input, container) => {
|
|
334
|
+
if (assetInProgress.mediaTailorUrl) {
|
|
335
|
+
input.value = assetInProgress.mediaTailorUrl;
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
const mediaTailorOnChange = (input) => {
|
|
339
|
+
assetInProgress.setMediaTailor(input.value);
|
|
340
|
+
this.manifestField_.required =
|
|
341
|
+
this.checkManifestRequired_(assetInProgress);
|
|
342
|
+
};
|
|
343
|
+
const mediaTailorName = 'Media Tailor URL';
|
|
344
|
+
this.makeField_(
|
|
345
|
+
container, mediaTailorName, mediaTailorSetup, mediaTailorOnChange);
|
|
346
|
+
|
|
384
347
|
return adsDiv;
|
|
385
348
|
}
|
|
386
349
|
|
|
@@ -437,10 +400,8 @@ shakaDemo.Custom = class {
|
|
|
437
400
|
const licenseOnChange = (input) => {
|
|
438
401
|
setLicenseServerURLs();
|
|
439
402
|
};
|
|
440
|
-
const licenseServerURLName = shakaDemoMain.getLocalizedString(
|
|
441
|
-
shakaDemo.MessageIds.LICENSE_SERVER_URL);
|
|
442
403
|
this.makeField_(
|
|
443
|
-
container,
|
|
404
|
+
container, 'Custom License Server URL', licenseSetup, licenseOnChange);
|
|
444
405
|
|
|
445
406
|
// Make the license certificate URL field.
|
|
446
407
|
const certSetup = (input, container) => {
|
|
@@ -451,10 +412,8 @@ shakaDemo.Custom = class {
|
|
|
451
412
|
const certOnChange = (input) => {
|
|
452
413
|
assetInProgress.certificateUri = input.value;
|
|
453
414
|
};
|
|
454
|
-
const licenseCertificateURLName = shakaDemoMain.getLocalizedString(
|
|
455
|
-
shakaDemo.MessageIds.LICENSE_CERTIFICATE_URL);
|
|
456
415
|
this.makeField_(
|
|
457
|
-
container,
|
|
416
|
+
container, 'Custom License Certificate URL', certSetup, certOnChange);
|
|
458
417
|
|
|
459
418
|
// Make the drm system field.
|
|
460
419
|
const drmSetup = (input, container) => {
|
|
@@ -470,14 +429,42 @@ shakaDemo.Custom = class {
|
|
|
470
429
|
const drmOnChange = (input) => {
|
|
471
430
|
setLicenseServerURLs();
|
|
472
431
|
};
|
|
473
|
-
|
|
474
|
-
shakaDemo.MessageIds.DRM_SYSTEM);
|
|
475
|
-
this.makeField_(
|
|
476
|
-
container, DRMSystemName, drmSetup, drmOnChange);
|
|
432
|
+
this.makeField_(container, 'Custom DRM System', drmSetup, drmOnChange);
|
|
477
433
|
|
|
478
434
|
return drmDiv;
|
|
479
435
|
}
|
|
480
436
|
|
|
437
|
+
/**
|
|
438
|
+
* @param {!ShakaDemoAssetInfo} assetInProgress
|
|
439
|
+
* @param {!Array.<!HTMLInputElement>} inputsToCheck
|
|
440
|
+
* @return {!Element} div
|
|
441
|
+
* @private
|
|
442
|
+
*/
|
|
443
|
+
makeAssetDialogContentsExtraTracks_(assetInProgress, inputsToCheck) {
|
|
444
|
+
const extraTracksDiv = document.createElement('div');
|
|
445
|
+
const containerStyle = shakaDemo.InputContainer.Style.FLEX;
|
|
446
|
+
const container = new shakaDemo.InputContainer(
|
|
447
|
+
extraTracksDiv, /* headerText= */ null, containerStyle,
|
|
448
|
+
/* docLink= */ null);
|
|
449
|
+
container.getClassList().add('wide-input');
|
|
450
|
+
container.setDefaultRowClass('wide-input');
|
|
451
|
+
|
|
452
|
+
const thumbnailsUrlSetup = (input, container) => {
|
|
453
|
+
if (assetInProgress.extraThumbnail.length) {
|
|
454
|
+
input.value = assetInProgress.extraThumbnail[0];
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
const thumbnailsUrlOnChange = (input) => {
|
|
458
|
+
assetInProgress.extraThumbnail = [];
|
|
459
|
+
assetInProgress.addExtraThumbnail(input.value);
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
this.makeField_(
|
|
463
|
+
container, 'Thumbnails URL', thumbnailsUrlSetup, thumbnailsUrlOnChange);
|
|
464
|
+
|
|
465
|
+
return extraTracksDiv;
|
|
466
|
+
}
|
|
467
|
+
|
|
481
468
|
/**
|
|
482
469
|
* @param {!ShakaDemoAssetInfo} assetInProgress
|
|
483
470
|
* @param {!Array.<!HTMLInputElement>} inputsToCheck
|
|
@@ -508,8 +495,7 @@ shakaDemo.Custom = class {
|
|
|
508
495
|
// Make an error that shows up if you did not provide valid JSON.
|
|
509
496
|
const error = document.createElement('span');
|
|
510
497
|
error.classList.add('mdl-textfield__error');
|
|
511
|
-
error.textContent =
|
|
512
|
-
shakaDemo.MessageIds.INVALID_JSON_CONFIG_ERROR);
|
|
498
|
+
error.textContent = 'Invalid JSON configuration';
|
|
513
499
|
|
|
514
500
|
container.appendChild(error);
|
|
515
501
|
};
|
|
@@ -526,8 +512,7 @@ shakaDemo.Custom = class {
|
|
|
526
512
|
inputWrapper.setValid(false);
|
|
527
513
|
}
|
|
528
514
|
};
|
|
529
|
-
const extraConfigLabel =
|
|
530
|
-
shakaDemo.MessageIds.EXTRA_SHAKA_PLAYER_CONFIG);
|
|
515
|
+
const extraConfigLabel = 'Extra Shaka Player configuration (JSON)';
|
|
531
516
|
this.makeField_(
|
|
532
517
|
container, extraConfigLabel, extraSetup, extraOnChange,
|
|
533
518
|
/* isTextArea= */ true);
|
|
@@ -557,8 +542,7 @@ shakaDemo.Custom = class {
|
|
|
557
542
|
// Make an error that shows up if you did not provide an URL.
|
|
558
543
|
const error = document.createElement('span');
|
|
559
544
|
error.classList.add('mdl-textfield__error');
|
|
560
|
-
error.textContent =
|
|
561
|
-
shakaDemo.MessageIds.MANIFEST_URL_ERROR);
|
|
545
|
+
error.textContent = 'Must have a manifest URL, or IMA DAI id fields';
|
|
562
546
|
container.appendChild(error);
|
|
563
547
|
|
|
564
548
|
// Add a regex that will detect empty strings.
|
|
@@ -569,10 +553,7 @@ shakaDemo.Custom = class {
|
|
|
569
553
|
const manifestOnChange = (input) => {
|
|
570
554
|
assetInProgress.manifestUri = input.value.trim();
|
|
571
555
|
};
|
|
572
|
-
|
|
573
|
-
shakaDemo.MessageIds.MANIFEST_URL);
|
|
574
|
-
this.makeField_(
|
|
575
|
-
container, manifestURLName, manifestSetup, manifestOnChange);
|
|
556
|
+
this.makeField_(container, 'Manifest URL', manifestSetup, manifestOnChange);
|
|
576
557
|
|
|
577
558
|
// Make the name field.
|
|
578
559
|
const nameSetup = (input, container) => {
|
|
@@ -582,8 +563,7 @@ shakaDemo.Custom = class {
|
|
|
582
563
|
// Make an error that shows up if you have an empty/duplicate name.
|
|
583
564
|
const error = document.createElement('span');
|
|
584
565
|
error.classList.add('mdl-textfield__error');
|
|
585
|
-
error.textContent =
|
|
586
|
-
shakaDemo.MessageIds.NAME_ERROR);
|
|
566
|
+
error.textContent = 'Must be a unique name.';
|
|
587
567
|
container.appendChild(error);
|
|
588
568
|
|
|
589
569
|
// Make a regex that will detect duplicates.
|
|
@@ -604,10 +584,7 @@ shakaDemo.Custom = class {
|
|
|
604
584
|
const nameOnChange = (input) => {
|
|
605
585
|
assetInProgress.name = input.value;
|
|
606
586
|
};
|
|
607
|
-
|
|
608
|
-
shakaDemo.MessageIds.NAME);
|
|
609
|
-
this.makeField_(
|
|
610
|
-
container, nameName, nameSetup, nameOnChange);
|
|
587
|
+
this.makeField_(container, 'Name', nameSetup, nameOnChange);
|
|
611
588
|
|
|
612
589
|
// Make the icon field.
|
|
613
590
|
const iconSetup = (input, container) => {
|
|
@@ -634,11 +611,7 @@ shakaDemo.Custom = class {
|
|
|
634
611
|
iconDiv.appendChild(img);
|
|
635
612
|
}
|
|
636
613
|
};
|
|
637
|
-
|
|
638
|
-
const iconURLName = shakaDemoMain.getLocalizedString(
|
|
639
|
-
shakaDemo.MessageIds.ICON_URL);
|
|
640
|
-
this.makeField_(
|
|
641
|
-
container, iconURLName, iconSetup, iconOnChange);
|
|
614
|
+
this.makeField_(container, 'Icon URL', iconSetup, iconOnChange);
|
|
642
615
|
|
|
643
616
|
// Make the MIME type field.
|
|
644
617
|
const mimeTypeSetup = (input, container) => {
|
|
@@ -650,11 +623,7 @@ shakaDemo.Custom = class {
|
|
|
650
623
|
const mimeTypeOnChange = (input) => {
|
|
651
624
|
assetInProgress.mimeType = input.value || null;
|
|
652
625
|
};
|
|
653
|
-
|
|
654
|
-
const mimeTypeName = shakaDemoMain.getLocalizedString(
|
|
655
|
-
shakaDemo.MessageIds.MIME_TYPE);
|
|
656
|
-
this.makeField_(
|
|
657
|
-
container, mimeTypeName, mimeTypeSetup, mimeTypeOnChange);
|
|
626
|
+
this.makeField_(container, 'MIME Type', mimeTypeSetup, mimeTypeOnChange);
|
|
658
627
|
|
|
659
628
|
return mainDiv;
|
|
660
629
|
}
|
|
@@ -668,7 +637,9 @@ shakaDemo.Custom = class {
|
|
|
668
637
|
// from the Google Ad Manager using IMA ids.
|
|
669
638
|
const isDaiAdManifest = (assetInProgress.imaContentSrcId &&
|
|
670
639
|
assetInProgress.imaVideoId) || assetInProgress.imaAssetKey != null;
|
|
671
|
-
|
|
640
|
+
// Or if we are getting it from AWS Elemental MediaTailor.
|
|
641
|
+
const isMediaTailor = !!assetInProgress.mediaTailorUrl;
|
|
642
|
+
return !isDaiAdManifest && !isMediaTailor;
|
|
672
643
|
}
|
|
673
644
|
|
|
674
645
|
/**
|
|
@@ -681,9 +652,7 @@ shakaDemo.Custom = class {
|
|
|
681
652
|
const finishDiv = document.createElement('tr');
|
|
682
653
|
|
|
683
654
|
const buttonStyle = shakaDemo.Custom.ButtonStyle_.RAISED;
|
|
684
|
-
|
|
685
|
-
shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.SAVE_BUTTON);
|
|
686
|
-
finishDiv.appendChild(this.makeButton_(saveString, buttonStyle, () => {
|
|
655
|
+
finishDiv.appendChild(this.makeButton_('Save', buttonStyle, () => {
|
|
687
656
|
for (const input of inputsToCheck) {
|
|
688
657
|
if (!input.validity.valid) {
|
|
689
658
|
return;
|
|
@@ -695,9 +664,7 @@ shakaDemo.Custom = class {
|
|
|
695
664
|
this.remakeSavedList_();
|
|
696
665
|
this.dialog_.close();
|
|
697
666
|
}));
|
|
698
|
-
|
|
699
|
-
shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.CANCEL_BUTTON);
|
|
700
|
-
finishDiv.appendChild(this.makeButton_(cancelString, buttonStyle, () => {
|
|
667
|
+
finishDiv.appendChild(this.makeButton_('Cancel', buttonStyle, () => {
|
|
701
668
|
this.dialog_.close();
|
|
702
669
|
}));
|
|
703
670
|
|
|
@@ -726,7 +693,7 @@ shakaDemo.Custom = class {
|
|
|
726
693
|
assetInProgress, inputsToCheck);
|
|
727
694
|
const adsDiv = this.makeAssetDialogContentsAds_(
|
|
728
695
|
assetInProgress, inputsToCheck);
|
|
729
|
-
const
|
|
696
|
+
const extraTracksDiv = this.makeAssetDialogContentsExtraTracks_(
|
|
730
697
|
assetInProgress, inputsToCheck);
|
|
731
698
|
const extraConfigDiv = this.makeAssetDialogContentsExtra_(
|
|
732
699
|
assetInProgress, inputsToCheck);
|
|
@@ -737,9 +704,8 @@ shakaDemo.Custom = class {
|
|
|
737
704
|
const tabDiv = document.createElement('tr');
|
|
738
705
|
const tabsToHide = [];
|
|
739
706
|
const buttonsToSwitch = [];
|
|
740
|
-
const addTabButton = (
|
|
707
|
+
const addTabButton = (name, tabToShow, startOn) => {
|
|
741
708
|
const buttonStyle = shakaDemo.Custom.ButtonStyle_.PLAIN;
|
|
742
|
-
const name = shakaDemoMain.getLocalizedString(messageId);
|
|
743
709
|
const button = this.makeButton_(name, buttonStyle, () => {
|
|
744
710
|
for (const tab of tabsToHide) {
|
|
745
711
|
tab.classList.add('hidden');
|
|
@@ -759,18 +725,12 @@ shakaDemo.Custom = class {
|
|
|
759
725
|
tabToShow.classList.add('hidden');
|
|
760
726
|
}
|
|
761
727
|
};
|
|
762
|
-
addTabButton(
|
|
763
|
-
|
|
764
|
-
addTabButton(
|
|
765
|
-
|
|
766
|
-
addTabButton(
|
|
767
|
-
|
|
768
|
-
addTabButton(
|
|
769
|
-
shakaDemo.MessageIds.ADS_TAB, adsDiv, /* startOn= */ false);
|
|
770
|
-
addTabButton(
|
|
771
|
-
shakaDemo.MessageIds.HLS_TAB, hlsDiv, /* startOn= */ false);
|
|
772
|
-
addTabButton(
|
|
773
|
-
shakaDemo.MessageIds.EXTRA_TAB, extraConfigDiv, /* startOn= */ false);
|
|
728
|
+
addTabButton('Main', mainDiv, /* startOn= */ true);
|
|
729
|
+
addTabButton('Drm', drmDiv, /* startOn= */ false);
|
|
730
|
+
addTabButton('Headers', headersDiv, /* startOn= */ false);
|
|
731
|
+
addTabButton('Ads', adsDiv, /* startOn= */ false);
|
|
732
|
+
addTabButton('Extra Tracks', extraTracksDiv, /* startOn= */ false);
|
|
733
|
+
addTabButton('Extra Config', extraConfigDiv, /* startOn= */ false);
|
|
774
734
|
|
|
775
735
|
// Append the divs in the desired order.
|
|
776
736
|
this.dialog_.appendChild(tabDiv);
|
|
@@ -778,7 +738,7 @@ shakaDemo.Custom = class {
|
|
|
778
738
|
this.dialog_.appendChild(drmDiv);
|
|
779
739
|
this.dialog_.appendChild(headersDiv);
|
|
780
740
|
this.dialog_.appendChild(adsDiv);
|
|
781
|
-
this.dialog_.appendChild(
|
|
741
|
+
this.dialog_.appendChild(extraTracksDiv);
|
|
782
742
|
this.dialog_.appendChild(extraConfigDiv);
|
|
783
743
|
this.dialog_.appendChild(finishDiv);
|
|
784
744
|
this.dialog_.appendChild(iconDiv);
|
|
@@ -861,24 +821,24 @@ shakaDemo.Custom = class {
|
|
|
861
821
|
const savedList = this.savedList_;
|
|
862
822
|
const isFeatured = false;
|
|
863
823
|
return new shakaDemo.AssetCard(savedList, asset, isFeatured, (c) => {
|
|
864
|
-
c.addButton(
|
|
824
|
+
c.addButton('Play', () => {
|
|
865
825
|
shakaDemoMain.loadAsset(asset);
|
|
866
826
|
this.updateSelected_();
|
|
867
827
|
});
|
|
868
|
-
c.addButton(
|
|
828
|
+
c.addButton('Edit', async () => {
|
|
869
829
|
if (asset.unstoreCallback) {
|
|
870
830
|
await asset.unstoreCallback();
|
|
871
831
|
}
|
|
872
832
|
this.showAssetDialog_(asset);
|
|
873
833
|
});
|
|
874
|
-
c.addButton(
|
|
834
|
+
c.addButton('Delete', async () => {
|
|
875
835
|
this.assets_.delete(asset);
|
|
876
836
|
if (asset.unstoreCallback) {
|
|
877
837
|
await asset.unstoreCallback();
|
|
878
838
|
}
|
|
879
839
|
this.saveAssetInfos_(this.assets_);
|
|
880
840
|
this.remakeSavedList_();
|
|
881
|
-
},
|
|
841
|
+
}, 'Delete this custom asset?');
|
|
882
842
|
c.addStoreButton();
|
|
883
843
|
});
|
|
884
844
|
}
|
|
@@ -905,15 +865,10 @@ shakaDemo.Custom = class {
|
|
|
905
865
|
textElement.textContent = text;
|
|
906
866
|
this.savedList_.appendChild(textElement);
|
|
907
867
|
};
|
|
908
|
-
makeMessage('title',
|
|
909
|
-
|
|
910
|
-
shakaDemo.MessageIds.CUSTOM_INTRO_ONE));
|
|
911
|
-
makeMessage('body-2',
|
|
912
|
-
shakaDemoMain.getLocalizedString(
|
|
913
|
-
shakaDemo.MessageIds.CUSTOM_INTRO_TWO));
|
|
868
|
+
makeMessage('title', 'Try Shaka Player with your own content!');
|
|
869
|
+
makeMessage('body-2', 'Press the button below to add a custom asset.');
|
|
914
870
|
makeMessage('body-1',
|
|
915
|
-
|
|
916
|
-
shakaDemo.MessageIds.CUSTOM_INTRO_THREE));
|
|
871
|
+
'Custom assets will remain even after reloading the page.');
|
|
917
872
|
} else {
|
|
918
873
|
// Make asset cards for the assets.
|
|
919
874
|
this.assetCards_ = Array.from(this.assets_).map((asset) => {
|
package/demo/front.js
CHANGED
|
@@ -9,7 +9,6 @@ goog.provide('shakaDemo.Front');
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
goog.require('shakaDemo.AssetCard');
|
|
12
|
-
goog.require('shakaDemo.MessageIds');
|
|
13
12
|
goog.requireType('ShakaDemoAssetInfo');
|
|
14
13
|
|
|
15
14
|
/** @type {?shakaDemo.Front} */
|
|
@@ -50,9 +49,6 @@ shakaDemo.Front = class {
|
|
|
50
49
|
document.addEventListener('shaka-main-offline-progress', () => {
|
|
51
50
|
this.updateOfflineProgress_();
|
|
52
51
|
});
|
|
53
|
-
document.addEventListener('shaka-main-locale-changed', () => {
|
|
54
|
-
this.remakeAssetCards_();
|
|
55
|
-
});
|
|
56
52
|
document.addEventListener('shaka-main-page-changed', () => {
|
|
57
53
|
if (!this.assetCardDiv_.childNodes.length &&
|
|
58
54
|
!container.classList.contains('hidden')) {
|
|
@@ -74,19 +70,20 @@ shakaDemo.Front = class {
|
|
|
74
70
|
const makeMessage = (textClass, text) => {
|
|
75
71
|
const textElement = document.createElement('h2');
|
|
76
72
|
textElement.classList.add('mdl-typography--' + textClass);
|
|
77
|
-
textElement.textContent =
|
|
73
|
+
textElement.textContent = text;
|
|
78
74
|
this.messageDiv_.appendChild(textElement);
|
|
79
75
|
};
|
|
80
|
-
makeMessage('body-2',
|
|
81
|
-
|
|
76
|
+
makeMessage('body-2', 'This is a demo of Google\'s Shaka Player, a ' +
|
|
77
|
+
'JavaScript library for adaptive video streaming.');
|
|
78
|
+
makeMessage('body-1', 'Choose a video to playback; more assets are ' +
|
|
79
|
+
'available via the "all content" tab.');
|
|
82
80
|
|
|
83
81
|
const hideButton = document.createElement('button');
|
|
84
82
|
hideButton.classList.add('mdl-button');
|
|
85
83
|
hideButton.classList.add('mdl-button--colored');
|
|
86
84
|
hideButton.classList.add('mdl-js-button');
|
|
87
85
|
hideButton.classList.add('mdl-js-ripple-effect');
|
|
88
|
-
hideButton.textContent =
|
|
89
|
-
shakaDemo.MessageIds.FRONT_INTRO_DISMISS);
|
|
86
|
+
hideButton.textContent = 'Dismiss';
|
|
90
87
|
hideButton.addEventListener('click', () => {
|
|
91
88
|
shaka.util.Dom.removeAllChildren(this.messageDiv_);
|
|
92
89
|
window.localStorage.setItem(hideName, 'true');
|
|
@@ -122,7 +119,7 @@ shakaDemo.Front = class {
|
|
|
122
119
|
if (unsupportedReason) {
|
|
123
120
|
c.markAsUnsupported(unsupportedReason);
|
|
124
121
|
} else {
|
|
125
|
-
c.addButton(
|
|
122
|
+
c.addButton('Play', () => {
|
|
126
123
|
shakaDemoMain.loadAsset(asset);
|
|
127
124
|
this.updateSelected_();
|
|
128
125
|
});
|
package/demo/index.html
CHANGED
|
@@ -36,12 +36,10 @@
|
|
|
36
36
|
<link rel="stylesheet" href="../dist/controls.css">
|
|
37
37
|
|
|
38
38
|
<script defer src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
|
|
39
|
-
<!-- transmuxing support is enabled by including this: -->
|
|
40
|
-
<script defer src="../node_modules/mux.js/dist/mux.min.js"></script>
|
|
41
39
|
<!-- MSS support is enabled by including this: -->
|
|
42
40
|
<script defer src="../node_modules/codem-isoboxer/dist/iso_boxer.min.js"></script>
|
|
43
41
|
<!-- MPEG-5 Part2 LCEVC support is enabled by including this: -->
|
|
44
|
-
<script defer src="../node_modules/
|
|
42
|
+
<script defer src="../node_modules/lcevc_dec.js/dist/lcevc_dec.min.js"></script>
|
|
45
43
|
<!-- MDL is enabled by including this: -->
|
|
46
44
|
<script defer src="../node_modules/material-design-lite/dist/material.min.js"></script>
|
|
47
45
|
<!-- MDL modal dialogs are enabled by including these: -->
|
|
@@ -87,7 +85,6 @@ UNCOMPILED_JS = [
|
|
|
87
85
|
// Enable less, the CSS pre-processor.
|
|
88
86
|
'../node_modules/less/dist/less.js',
|
|
89
87
|
// These are the individual parts of the demo app.
|
|
90
|
-
'common/message_ids.js',
|
|
91
88
|
'common/asset.js',
|
|
92
89
|
'common/assets.js',
|
|
93
90
|
'demo_uncompiled.js',
|
|
@@ -102,11 +99,11 @@ UNCOMPILED_JS = [
|
|
|
102
99
|
<header class="app-header mdl-layout__header should-hide-in-no-input-mode">
|
|
103
100
|
<header class="mdl-layout__header-row" id="nav-button-container">
|
|
104
101
|
<img alt="Shaka Player Logo" src="shaka_logo_trans.png" class="logo" />
|
|
105
|
-
<button id="nav-button-front" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" defaultselected
|
|
106
|
-
<button id="nav-button-search" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail"
|
|
107
|
-
<button id="nav-button-custom" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail"
|
|
102
|
+
<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>
|
|
103
|
+
<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>
|
|
104
|
+
<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>
|
|
108
105
|
<div class="mdl-layout-spacer"></div>
|
|
109
|
-
<button id="bug-button" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail"
|
|
106
|
+
<button id="bug-button" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail">REPORT BUG</button>
|
|
110
107
|
<div class="version-block">
|
|
111
108
|
<span class="version-string"></span>
|
|
112
109
|
</div>
|
|
@@ -117,7 +114,7 @@ UNCOMPILED_JS = [
|
|
|
117
114
|
</div>
|
|
118
115
|
<div class="mdl-layout__drawer hamburger-menu">
|
|
119
116
|
<div id="hamburger-menu-title" class="mdl-layout-title">
|
|
120
|
-
<div
|
|
117
|
+
<div>Shaka Player Demo Config</div>
|
|
121
118
|
<div class="mdl-layout-spacer"></div>
|
|
122
119
|
<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>
|
|
123
120
|
</div>
|
|
@@ -144,28 +141,28 @@ UNCOMPILED_JS = [
|
|
|
144
141
|
<div class="mdl-mega-footer__middle-section">
|
|
145
142
|
|
|
146
143
|
<div class="mdl-mega-footer__drop-down-section">
|
|
147
|
-
<h1 class="mdl-mega-footer__heading"
|
|
144
|
+
<h1 class="mdl-mega-footer__heading">PROJECT LINKS</h1>
|
|
148
145
|
<ul class="mdl-mega-footer__link-list">
|
|
149
|
-
<li><a rel="noopener" target="_blank" href="../docs/api/index.html"
|
|
150
|
-
<li><a rel="noopener" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0"
|
|
151
|
-
<li><a rel="noopener" target="_blank" href="https://github.com/shaka-project/shaka-player"
|
|
152
|
-
<li><a rel="noopener" target="_blank" href="https://www.npmjs.com/package/shaka-player"
|
|
153
|
-
<li><a rel="noopener" target="_blank" href="../support.html"
|
|
146
|
+
<li><a rel="noopener" target="_blank" href="../docs/api/index.html">Documentation</a></li>
|
|
147
|
+
<li><a rel="noopener" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0">Apache License</a></li>
|
|
148
|
+
<li><a rel="noopener" target="_blank" href="https://github.com/shaka-project/shaka-player">Source on GitHub</a></li>
|
|
149
|
+
<li><a rel="noopener" target="_blank" href="https://www.npmjs.com/package/shaka-player">Package on NPM</a></li>
|
|
150
|
+
<li><a rel="noopener" target="_blank" href="../support.html">Browser Support Test</a></li>
|
|
154
151
|
</ul>
|
|
155
152
|
</div>
|
|
156
153
|
<div class="mdl-mega-footer__drop-down-section">
|
|
157
|
-
<h1 class="mdl-mega-footer__heading"
|
|
154
|
+
<h1 class="mdl-mega-footer__heading">CDN</h1>
|
|
158
155
|
<ul class="mdl-mega-footer__link-list">
|
|
159
|
-
<li><a rel="noopener" target="_blank" href="https://developers.google.com/speed/libraries/#shaka-player"
|
|
160
|
-
<li><a rel="noopener" target="_blank" href="https://www.jsdelivr.com/package/npm/shaka-player"
|
|
156
|
+
<li><a rel="noopener" target="_blank" href="https://developers.google.com/speed/libraries/#shaka-player">Google Hosted Libraries</a></li>
|
|
157
|
+
<li><a rel="noopener" target="_blank" href="https://www.jsdelivr.com/package/npm/shaka-player">jsDelivr</a></li>
|
|
161
158
|
</ul>
|
|
162
159
|
</div>
|
|
163
160
|
<div class="mdl-mega-footer__drop-down-section">
|
|
164
|
-
<h1 class="mdl-mega-footer__heading"
|
|
161
|
+
<h1 class="mdl-mega-footer__heading">DEMO MODE</h1>
|
|
165
162
|
<ul class="mdl-mega-footer__link-list" id="compiled-links">
|
|
166
|
-
<li><a href="#build=compiled" id="compiled-link"
|
|
167
|
-
<li><a href="#build=debug_compiled" id="debug-compiled-link"
|
|
168
|
-
<li><a href="#build=uncompiled" id="uncompiled-link"
|
|
163
|
+
<li><a href="#build=compiled" id="compiled-link">Compiled (Release)</a></li>
|
|
164
|
+
<li><a href="#build=debug_compiled" id="debug-compiled-link">Compiled (Debug)</a></li>
|
|
165
|
+
<li><a href="#build=uncompiled" id="uncompiled-link">Uncompiled</a></li>
|
|
169
166
|
</ul>
|
|
170
167
|
</div>
|
|
171
168
|
</div>
|
package/demo/input.js
CHANGED
|
@@ -11,7 +11,6 @@ goog.provide('shakaDemo.NumberInput');
|
|
|
11
11
|
goog.provide('shakaDemo.SelectInput');
|
|
12
12
|
goog.provide('shakaDemo.TextInput');
|
|
13
13
|
|
|
14
|
-
goog.require('shakaDemo.MessageIds');
|
|
15
14
|
goog.requireType('shakaDemo.InputContainer');
|
|
16
15
|
|
|
17
16
|
/**
|
|
@@ -121,7 +120,7 @@ shakaDemo.Input.lastId_ = 0;
|
|
|
121
120
|
shakaDemo.SelectInput = class extends shakaDemo.Input {
|
|
122
121
|
/**
|
|
123
122
|
* @param {!shakaDemo.InputContainer} parentContainer
|
|
124
|
-
* @param {?
|
|
123
|
+
* @param {?string} name
|
|
125
124
|
* @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
|
|
126
125
|
* @param {!Object.<string, string>} values
|
|
127
126
|
*/
|
|
@@ -134,7 +133,7 @@ shakaDemo.SelectInput = class extends shakaDemo.Input {
|
|
|
134
133
|
this.extra_.classList.add('mdl-textfield__label');
|
|
135
134
|
this.extra_.setAttribute('for', this.input_.id);
|
|
136
135
|
if (name) {
|
|
137
|
-
this.extra_.textContent =
|
|
136
|
+
this.extra_.textContent = name;
|
|
138
137
|
}
|
|
139
138
|
for (const value of Object.keys(values)) {
|
|
140
139
|
const option =
|
|
@@ -243,18 +242,14 @@ shakaDemo.NumberInput = class extends shakaDemo.TextInput {
|
|
|
243
242
|
error.classList.add('mdl-textfield__error');
|
|
244
243
|
this.container_.appendChild(error);
|
|
245
244
|
|
|
246
|
-
const MessageIds = shakaDemo.MessageIds;
|
|
247
|
-
const localize = (name) => shakaDemoMain.getLocalizedString(name);
|
|
248
245
|
if (canBeZero && canBeDecimal) {
|
|
249
|
-
error.textContent =
|
|
246
|
+
error.textContent = 'Must be a positive number.';
|
|
250
247
|
} else if (canBeZero) {
|
|
251
|
-
error.textContent =
|
|
248
|
+
error.textContent = 'Must be a positive integer.';
|
|
252
249
|
} else if (canBeDecimal) {
|
|
253
|
-
error.textContent =
|
|
254
|
-
localize(MessageIds.NUMBER_NONZERO_DECIMAL_WARNING);
|
|
250
|
+
error.textContent = 'Must be a positive, nonzero number.';
|
|
255
251
|
} else {
|
|
256
|
-
error.textContent =
|
|
257
|
-
localize(MessageIds.NUMBER_NONZERO_INTEGER_WARNING);
|
|
252
|
+
error.textContent = 'Must be a positive, nonzero integer.';
|
|
258
253
|
}
|
|
259
254
|
|
|
260
255
|
this.input_.pattern = '(Infinity|';
|