shaka-player 3.1.0 → 3.1.4

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.
Files changed (181) hide show
  1. package/AUTHORS +8 -2
  2. package/CHANGELOG.md +209 -0
  3. package/CONTRIBUTORS +10 -3
  4. package/README.md +3 -0
  5. package/build/apps.py +2 -2
  6. package/build/check.py +2 -2
  7. package/build/conformance.textproto +0 -9
  8. package/build/generateExterns.js +1 -1
  9. package/build/misspellings.txt +1 -0
  10. package/build/shakaBuildHelpers.py +6 -5
  11. package/build/subprocessWindowsPatch.py +103 -0
  12. package/demo/common/asset.js +11 -0
  13. package/demo/common/assets.js +1 -1
  14. package/demo/common/message_ids.js +5 -0
  15. package/demo/config.js +2 -1
  16. package/demo/custom.js +84 -3
  17. package/demo/demo.less +13 -1
  18. package/demo/demo_utils.js +1 -0
  19. package/demo/input.js +31 -12
  20. package/demo/input_container.js +24 -1
  21. package/demo/locales/en.json +6 -1
  22. package/demo/locales/source.json +20 -0
  23. package/demo/main.js +5 -1
  24. package/dist/controls.css +2 -2
  25. package/dist/controls.css.map +1 -1
  26. package/dist/demo.compiled.debug.js +99 -91
  27. package/dist/demo.compiled.debug.map +3 -3
  28. package/dist/demo.compiled.js +99 -91
  29. package/dist/demo.compiled.map +3 -3
  30. package/dist/demo.css +1 -1
  31. package/dist/demo.css.map +1 -1
  32. package/dist/deps.js +9 -9
  33. package/dist/locales.js +36 -34
  34. package/dist/receiver.compiled.debug.js +74 -70
  35. package/dist/receiver.compiled.debug.map +3 -3
  36. package/dist/receiver.compiled.js +74 -70
  37. package/dist/receiver.compiled.map +3 -3
  38. package/dist/shaka-player.compiled.d.ts +165 -9
  39. package/dist/shaka-player.compiled.debug.d.ts +165 -9
  40. package/dist/shaka-player.compiled.debug.externs.js +179 -11
  41. package/dist/shaka-player.compiled.debug.js +367 -339
  42. package/dist/shaka-player.compiled.debug.map +4 -4
  43. package/dist/shaka-player.compiled.externs.js +179 -11
  44. package/dist/shaka-player.compiled.js +818 -807
  45. package/dist/shaka-player.compiled.map +4 -4
  46. package/dist/shaka-player.ui.d.ts +165 -9
  47. package/dist/shaka-player.ui.debug.d.ts +165 -9
  48. package/dist/shaka-player.ui.debug.externs.js +181 -13
  49. package/dist/shaka-player.ui.debug.js +459 -429
  50. package/dist/shaka-player.ui.debug.map +4 -4
  51. package/dist/shaka-player.ui.externs.js +181 -13
  52. package/dist/shaka-player.ui.js +973 -961
  53. package/dist/shaka-player.ui.map +4 -4
  54. package/docs/tutorials/fairplay.md +1 -1
  55. package/docs/tutorials/faq.md +25 -0
  56. package/docs/tutorials/index.json +2 -2
  57. package/docs/tutorials/upgrade-v3.md +38 -0
  58. package/docs/tutorials/upgrade.md +3 -3
  59. package/externs/ima.js +4 -0
  60. package/externs/media_capabilities.js +16 -0
  61. package/externs/shaka/ads.js +2 -0
  62. package/externs/shaka/net.js +2 -2
  63. package/externs/shaka/player.js +6 -0
  64. package/karma.conf.js +1 -0
  65. package/lib/abr/simple_abr_manager.js +1 -1
  66. package/lib/ads/ad_manager.js +29 -11
  67. package/lib/ads/client_side_ad_manager.js +76 -86
  68. package/lib/ads/server_side_ad_manager.js +26 -11
  69. package/lib/cast/cast_proxy.js +3 -2
  70. package/lib/cast/cast_receiver.js +2 -1
  71. package/lib/cast/cast_sender.js +2 -2
  72. package/lib/cea/sei_processor.js +24 -17
  73. package/lib/dash/dash_parser.js +107 -4
  74. package/lib/dash/segment_list.js +1 -1
  75. package/lib/dash/segment_template.js +45 -15
  76. package/lib/dependencies/all.js +15 -15
  77. package/lib/hls/hls_parser.js +46 -18
  78. package/lib/media/closed_caption_parser.js +3 -1
  79. package/lib/media/content_workarounds.js +18 -0
  80. package/lib/media/drm_engine.js +20 -1
  81. package/lib/media/gap_jumping_controller.js +8 -4
  82. package/lib/media/media_source_engine.js +1 -2
  83. package/lib/media/playhead.js +1 -1
  84. package/lib/media/presentation_timeline.js +3 -1
  85. package/lib/media/segment_index.js +38 -12
  86. package/lib/media/segment_reference.js +8 -0
  87. package/lib/media/streaming_engine.js +30 -21
  88. package/lib/net/http_fetch_plugin.js +2 -2
  89. package/lib/net/networking_engine.js +3 -2
  90. package/lib/offline/storage.js +4 -0
  91. package/lib/player.js +113 -56
  92. package/lib/polyfill/encryption_scheme.js +2 -0
  93. package/lib/polyfill/fullscreen.js +2 -0
  94. package/lib/polyfill/mathround.js +2 -0
  95. package/lib/polyfill/media_capabilities.js +62 -23
  96. package/lib/polyfill/mediasource.js +8 -0
  97. package/lib/polyfill/orientation.js +3 -1
  98. package/lib/polyfill/patchedmediakeys_apple.js +6 -4
  99. package/lib/polyfill/patchedmediakeys_ms.js +6 -4
  100. package/lib/polyfill/patchedmediakeys_nop.js +2 -0
  101. package/lib/polyfill/patchedmediakeys_webkit.js +6 -4
  102. package/lib/polyfill/pip_webkit.js +2 -0
  103. package/lib/polyfill/storage_estimate.js +2 -0
  104. package/lib/polyfill/video_play_promise.js +2 -0
  105. package/lib/polyfill/videoplaybackquality.js +2 -0
  106. package/lib/polyfill/vttcue.js +2 -0
  107. package/lib/text/cue.js +11 -0
  108. package/lib/text/mp4_ttml_parser.js +3 -0
  109. package/lib/text/text_engine.js +14 -2
  110. package/lib/text/ttml_text_parser.js +52 -30
  111. package/lib/text/ui_text_displayer.js +255 -82
  112. package/lib/text/vtt_text_parser.js +4 -2
  113. package/lib/util/error.js +1 -4
  114. package/lib/util/fake_event.js +53 -7
  115. package/lib/util/mime_utils.js +33 -0
  116. package/lib/util/mp4_box_parsers.js +1 -1
  117. package/lib/util/mp4_parser.js +14 -0
  118. package/lib/util/networking.js +1 -1
  119. package/lib/util/periods.js +132 -37
  120. package/lib/util/platform.js +13 -1
  121. package/lib/util/stream_utils.js +46 -7
  122. package/package.json +3 -3
  123. package/test/cast/cast_proxy_unit.js +12 -6
  124. package/test/cast/cast_receiver_integration.js +1 -1
  125. package/test/cast/cast_utils_unit.js +1 -1
  126. package/test/cea/mp4_cea_parser_unit.js +26 -0
  127. package/test/dash/dash_parser_live_unit.js +1 -0
  128. package/test/dash/dash_parser_manifest_unit.js +187 -1
  129. package/test/dash/dash_parser_segment_template_unit.js +3 -3
  130. package/test/demo/demo_unit.js +0 -1
  131. package/test/hls/hls_parser_unit.js +45 -1
  132. package/test/media/closed_caption_parser_unit.js +20 -0
  133. package/test/media/drm_engine_unit.js +59 -3
  134. package/test/media/playhead_unit.js +27 -1
  135. package/test/media/presentation_timeline_unit.js +19 -0
  136. package/test/media/segment_index_unit.js +76 -3
  137. package/test/media/streaming_engine_unit.js +3 -3
  138. package/test/player_integration.js +38 -0
  139. package/test/player_unit.js +125 -6
  140. package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
  141. package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
  142. package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
  143. package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
  144. package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
  145. package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
  146. package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
  147. package/test/test/assets/3675/dash_0.mpd +30 -0
  148. package/test/test/assets/3675/dash_1.mpd +30 -0
  149. package/test/test/assets/3675/dash_2.mpd +30 -0
  150. package/test/test/assets/3675/dash_3.mpd +30 -0
  151. package/test/test/assets/3675/dash_4.mpd +30 -0
  152. package/test/test/assets/3675/dash_5.mpd +26 -0
  153. package/test/test/assets/3675/init-stream0.m4s +0 -0
  154. package/test/test/assets/empty_caption_video_init.mp4 +0 -0
  155. package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
  156. package/test/test/util/fake_ad_manager.js +4 -1
  157. package/test/test/util/simple_fakes.js +5 -3
  158. package/test/test/util/waiter.js +36 -2
  159. package/test/text/ttml_text_parser_unit.js +55 -0
  160. package/test/text/ui_text_displayer_unit.js +95 -18
  161. package/test/text/vtt_text_parser_unit.js +17 -1
  162. package/test/ui/localization_unit.js +15 -14
  163. package/test/ui/text_displayer_layout_unit.js +52 -1
  164. package/test/ui/ui_unit.js +4 -0
  165. package/test/util/mp4_box_parsers_unit.js +28 -0
  166. package/test/util/periods_unit.js +190 -2
  167. package/test/util/stream_utils_unit.js +56 -5
  168. package/ui/airplay_button.js +5 -0
  169. package/ui/big_play_button.js +10 -0
  170. package/ui/cast_button.js +2 -3
  171. package/ui/controls.js +9 -7
  172. package/ui/less/containers.less +10 -5
  173. package/ui/locales/en.json +1 -0
  174. package/ui/locales/ru.json +6 -6
  175. package/ui/locales/source.json +4 -0
  176. package/ui/localization.js +28 -51
  177. package/ui/pip_button.js +2 -3
  178. package/ui/play_button.js +10 -10
  179. package/ui/small_play_button.js +12 -0
  180. package/ui/ui.js +1 -1
  181. package/docs/tutorials/upgrade-v2-4.md +0 -481
package/demo/custom.js CHANGED
@@ -10,6 +10,7 @@ goog.provide('shakaDemo.Custom');
10
10
 
11
11
  goog.require('ShakaDemoAssetInfo');
12
12
  goog.require('shakaDemo.AssetCard');
13
+ goog.require('shakaDemo.Input');
13
14
  goog.require('shakaDemo.InputContainer');
14
15
  goog.require('shakaDemo.Main');
15
16
  goog.require('shakaDemo.MessageIds');
@@ -104,12 +105,14 @@ shakaDemo.Custom = class {
104
105
  * @param {!shakaDemo.InputContainer} container
105
106
  * @param {string} name
106
107
  * @param {function(!HTMLInputElement, !Element)} setup
107
- * @param {function(!Element)} onChange
108
+ * @param {function(!Element, !shakaDemo.Input)} onChange
109
+ * @param {boolean=} isTextArea
108
110
  * @private
109
111
  */
110
- makeField_(container, name, setup, onChange) {
112
+ makeField_(container, name, setup, onChange, isTextArea) {
111
113
  container.addRow(/* labelString= */ null, /* tooltipString= */ null);
112
- const input = new shakaDemo.TextInput(container, name, onChange);
114
+ const input =
115
+ new shakaDemo.TextInput(container, name, onChange, isTextArea);
113
116
  input.extra().textContent = name;
114
117
  setup(input.input(), input.container());
115
118
  }
@@ -423,6 +426,63 @@ shakaDemo.Custom = class {
423
426
  return drmDiv;
424
427
  }
425
428
 
429
+ /**
430
+ * @param {!ShakaDemoAssetInfo} assetInProgress
431
+ * @param {!Array.<!HTMLInputElement>} inputsToCheck
432
+ * @return {!Element} div
433
+ * @private
434
+ */
435
+ makeAssetDialogContentsExtra_(assetInProgress, inputsToCheck) {
436
+ const extraConfigDiv = document.createElement('div');
437
+ const containerStyle = shakaDemo.InputContainer.Style.FLEX;
438
+ const container = new shakaDemo.InputContainer(
439
+ extraConfigDiv, /* headerText= */ null, containerStyle,
440
+ /* docLink= */ null);
441
+ container.getClassList().add('wide-input');
442
+ container.setDefaultRowClass('wide-input');
443
+
444
+ const extraSetup = (input, container) => {
445
+ input.setAttribute('rows', 10);
446
+
447
+ if (assetInProgress.extraConfig) {
448
+ // Pretty-print the extra config.
449
+ input.value = JSON.stringify(
450
+ assetInProgress.extraConfig,
451
+ /* replacer= */ null, /* spacing= */ 2);
452
+ }
453
+
454
+ inputsToCheck.push(input);
455
+
456
+ // Make an error that shows up if you did not provide valid JSON.
457
+ const error = document.createElement('span');
458
+ error.classList.add('mdl-textfield__error');
459
+ error.textContent = shakaDemoMain.getLocalizedString(
460
+ shakaDemo.MessageIds.INVALID_JSON_CONFIG_ERROR);
461
+
462
+ container.appendChild(error);
463
+ };
464
+ const extraOnChange = (inputElement, inputWrapper) => {
465
+ try {
466
+ if (!inputElement.value) {
467
+ assetInProgress.extraConfig = null;
468
+ } else {
469
+ const config = /** @type {!Object} */(JSON.parse(inputElement.value));
470
+ assetInProgress.extraConfig = config;
471
+ }
472
+ inputWrapper.setValid(true);
473
+ } catch (exception) {
474
+ inputWrapper.setValid(false);
475
+ }
476
+ };
477
+ const extraConfigLabel = shakaDemoMain.getLocalizedString(
478
+ shakaDemo.MessageIds.EXTRA_SHAKA_PLAYER_CONFIG);
479
+ this.makeField_(
480
+ container, extraConfigLabel, extraSetup, extraOnChange,
481
+ /* isTextArea= */ true);
482
+
483
+ return extraConfigDiv;
484
+ }
485
+
426
486
  /**
427
487
  * @param {!ShakaDemoAssetInfo} assetInProgress
428
488
  * @param {!Array.<!HTMLInputElement>} inputsToCheck
@@ -528,6 +588,22 @@ shakaDemo.Custom = class {
528
588
  this.makeField_(
529
589
  container, iconURLName, iconSetup, iconOnChange);
530
590
 
591
+ // Make the MIME type field.
592
+ const mimeTypeSetup = (input, container) => {
593
+ if (assetInProgress.mimeType) {
594
+ input.value = assetInProgress.mimeType;
595
+ }
596
+ };
597
+
598
+ const mimeTypeOnChange = (input) => {
599
+ assetInProgress.mimeType = input.value || null;
600
+ };
601
+
602
+ const mimeTypeName = shakaDemoMain.getLocalizedString(
603
+ shakaDemo.MessageIds.MIME_TYPE);
604
+ this.makeField_(
605
+ container, mimeTypeName, mimeTypeSetup, mimeTypeOnChange);
606
+
531
607
  return mainDiv;
532
608
  }
533
609
 
@@ -598,6 +674,8 @@ shakaDemo.Custom = class {
598
674
  assetInProgress, inputsToCheck);
599
675
  const adsDiv = this.makeAssetDialogContentsAds_(
600
676
  assetInProgress, inputsToCheck);
677
+ const extraConfigDiv = this.makeAssetDialogContentsExtra_(
678
+ assetInProgress, inputsToCheck);
601
679
  const finishDiv = this.makeAssetDialogContentsFinish_(
602
680
  assetInProgress, inputsToCheck);
603
681
 
@@ -635,6 +713,8 @@ shakaDemo.Custom = class {
635
713
  shakaDemo.MessageIds.HEADERS_TAB, headersDiv, /* startOn= */ false);
636
714
  addTabButton(
637
715
  shakaDemo.MessageIds.ADS_TAB, adsDiv, /* startOn= */ false);
716
+ addTabButton(
717
+ shakaDemo.MessageIds.EXTRA_TAB, extraConfigDiv, /* startOn= */ false);
638
718
 
639
719
  // Append the divs in the desired order.
640
720
  this.dialog_.appendChild(tabDiv);
@@ -642,6 +722,7 @@ shakaDemo.Custom = class {
642
722
  this.dialog_.appendChild(drmDiv);
643
723
  this.dialog_.appendChild(headersDiv);
644
724
  this.dialog_.appendChild(adsDiv);
725
+ this.dialog_.appendChild(extraConfigDiv);
645
726
  this.dialog_.appendChild(finishDiv);
646
727
  this.dialog_.appendChild(iconDiv);
647
728
 
package/demo/demo.less CHANGED
@@ -373,7 +373,7 @@ html, body {
373
373
 
374
374
  .mdl-dialog {
375
375
  /* Override MDL dialog width, so that input elements don't overflow. */
376
- width: 320px;
376
+ width: 420px;
377
377
  }
378
378
 
379
379
  .mdl-dialog img {
@@ -533,6 +533,8 @@ footer .mdl-mega-footer__link-list {
533
533
 
534
534
  /* Style the input containers. */
535
535
  .input-container-row {
536
+ /* When a row is preceded by its label, inline-block will ensure the label
537
+ * sits before the input row on the same line. */
536
538
  display: inline-block;
537
539
  }
538
540
 
@@ -560,3 +562,13 @@ footer .mdl-mega-footer__link-list {
560
562
  * So give it a fixed maximum instead. */
561
563
  max-height: 1000px;
562
564
  }
565
+
566
+ .input-header {
567
+ font-size: 125%;
568
+ }
569
+
570
+ .wide-input,
571
+ .wide-input .input-container-row,
572
+ .wide-input .mdl-textfield {
573
+ width: 100%;
574
+ }
@@ -38,6 +38,7 @@ shakaDemo.Utils = class {
38
38
  // Override config values with custom names.
39
39
  configOverride('audiolang', 'preferredAudioLanguage');
40
40
  configOverride('textlang', 'preferredTextLanguage');
41
+ configOverride('textrole', 'preferredTextRole');
41
42
  configOverride('channels', 'preferredAudioChannelCount');
42
43
 
43
44
  // Override config values that are handled manually.
package/demo/input.js CHANGED
@@ -25,7 +25,7 @@ shakaDemo.Input = class {
25
25
  * the input object.
26
26
  * @param {string} extraType The element type for the "sibling element" to the
27
27
  * input object. If null, it adds no such element.
28
- * @param {function(!HTMLInputElement)} onChange
28
+ * @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
29
29
  */
30
30
  constructor(parentContainer, inputType, containerType, extraType, onChange) {
31
31
  /** @private {!Element} */
@@ -36,8 +36,14 @@ shakaDemo.Input = class {
36
36
  this.input_ =
37
37
  /** @type {!HTMLInputElement} */(document.createElement(inputType));
38
38
  this.input_.onchange = () => {
39
- onChange(this.input_);
39
+ onChange(this.input_, this);
40
40
  };
41
+ // <textarea> elements need to also react to 'input' events.
42
+ if (inputType == 'textarea') {
43
+ this.input_.oninput = () => {
44
+ onChange(this.input_, this);
45
+ };
46
+ }
41
47
  this.input_.id = shakaDemo.Input.generateNewId_('input');
42
48
  this.container_.appendChild(this.input_);
43
49
 
@@ -81,6 +87,17 @@ shakaDemo.Input = class {
81
87
  return this.extra_;
82
88
  }
83
89
 
90
+ /** @param {boolean} valid */
91
+ setValid(valid) {
92
+ if (valid) {
93
+ this.input_.setCustomValidity(''); // valid
94
+ this.container_.classList.remove('is-invalid');
95
+ } else {
96
+ this.input_.setCustomValidity('invalid'); // any message will do
97
+ this.container_.parentElement.classList.add('is-invalid');
98
+ }
99
+ }
100
+
84
101
  /**
85
102
  * @param {string} prefix
86
103
  * @return {string}
@@ -105,7 +122,7 @@ shakaDemo.SelectInput = class extends shakaDemo.Input {
105
122
  /**
106
123
  * @param {!shakaDemo.InputContainer} parentContainer
107
124
  * @param {?shakaDemo.MessageIds} name
108
- * @param {function(!HTMLInputElement)} onChange
125
+ * @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
109
126
  * @param {!Object.<string, string>} values
110
127
  */
111
128
  constructor(parentContainer, name, onChange, values) {
@@ -137,7 +154,7 @@ shakaDemo.BoolInput = class extends shakaDemo.Input {
137
154
  /**
138
155
  * @param {!shakaDemo.InputContainer} parentContainer
139
156
  * @param {string} name
140
- * @param {function(!HTMLInputElement)} onChange
157
+ * @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
141
158
  */
142
159
  constructor(parentContainer, name, onChange) {
143
160
  super(parentContainer, 'input', 'label', 'span', onChange);
@@ -159,10 +176,12 @@ shakaDemo.TextInput = class extends shakaDemo.Input {
159
176
  /**
160
177
  * @param {!shakaDemo.InputContainer} parentContainer
161
178
  * @param {string} name
162
- * @param {function(!HTMLInputElement)} onChange
179
+ * @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
180
+ * @param {boolean=} isTextArea
163
181
  */
164
- constructor(parentContainer, name, onChange) {
165
- super(parentContainer, 'input', 'div', 'label', onChange);
182
+ constructor(parentContainer, name, onChange, isTextArea) {
183
+ super(parentContainer, isTextArea ? 'textarea' : 'input', 'div', 'label',
184
+ onChange);
166
185
  this.container_.classList.add('mdl-textfield');
167
186
  this.container_.classList.add('mdl-js-textfield');
168
187
  this.container_.classList.add('mdl-textfield--floating-label');
@@ -180,11 +199,11 @@ shakaDemo.DatalistInput = class extends shakaDemo.TextInput {
180
199
  /**
181
200
  * @param {!shakaDemo.InputContainer} parentContainer
182
201
  * @param {string} name
183
- * @param {function(!HTMLInputElement)} onChange
202
+ * @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
184
203
  * @param {!Array.<string>} values
185
204
  */
186
205
  constructor(parentContainer, name, onChange, values) {
187
- super(parentContainer, name, onChange);
206
+ super(parentContainer, name, onChange, /* isTextArea= */ false);
188
207
  // This element is not literally a datalist, as those are not supported on
189
208
  // all platforms (and they also have no MDL style support).
190
209
  // Instead, this is using the third-party "awesomplete" module, which acts
@@ -199,7 +218,7 @@ shakaDemo.DatalistInput = class extends shakaDemo.TextInput {
199
218
  awesomplete.evaluate();
200
219
  });
201
220
  this.input_.addEventListener('awesomplete-selectcomplete', () => {
202
- onChange(this.input_);
221
+ onChange(this.input_, this);
203
222
  });
204
223
  }
205
224
  };
@@ -212,14 +231,14 @@ shakaDemo.NumberInput = class extends shakaDemo.TextInput {
212
231
  /**
213
232
  * @param {!shakaDemo.InputContainer} parentContainer
214
233
  * @param {string} name
215
- * @param {function(!HTMLInputElement)} onChange
234
+ * @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
216
235
  * @param {boolean} canBeDecimal
217
236
  * @param {boolean} canBeZero
218
237
  * @param {boolean} canBeUnset
219
238
  */
220
239
  constructor(
221
240
  parentContainer, name, onChange, canBeDecimal, canBeZero, canBeUnset) {
222
- super(parentContainer, name, onChange);
241
+ super(parentContainer, name, onChange, /* isTextArea= */ false);
223
242
  const error = document.createElement('span');
224
243
  error.classList.add('mdl-textfield__error');
225
244
  this.container_.appendChild(error);
@@ -40,6 +40,9 @@ shakaDemo.InputContainer = class {
40
40
  /** @private {?Element} */
41
41
  this.latestRow_;
42
42
 
43
+ /** @private {?string} */
44
+ this.defaultRowClass_ = null;
45
+
43
46
  /** @type {?Element} */
44
47
  this.latestElementContainer;
45
48
 
@@ -117,7 +120,8 @@ shakaDemo.InputContainer = class {
117
120
  }
118
121
  });
119
122
  } else {
120
- this.header_ = document.createElement('h3');
123
+ this.header_ = document.createElement('div');
124
+ this.header_.classList.add('input-header');
121
125
  }
122
126
  this.header_.textContent = shakaDemoMain.getLocalizedString(headerText);
123
127
  parentDiv.appendChild(this.header_);
@@ -146,6 +150,24 @@ shakaDemo.InputContainer = class {
146
150
  parentDiv.appendChild(link);
147
151
  }
148
152
 
153
+ /**
154
+ * Set the default row class for future calls to addRow().
155
+ *
156
+ * @param {?string} rowClass
157
+ */
158
+ setDefaultRowClass(rowClass) {
159
+ this.defaultRowClass_ = rowClass;
160
+ }
161
+
162
+ /**
163
+ * Return the CSS class list for the container.
164
+ *
165
+ * @return {!DOMTokenList}
166
+ */
167
+ getClassList() {
168
+ return this.table_.classList;
169
+ }
170
+
149
171
  /**
150
172
  * Makes a row, for storing an input.
151
173
  * @param {?shakaDemo.MessageIds} labelString
@@ -153,6 +175,7 @@ shakaDemo.InputContainer = class {
153
175
  * @param {string=} rowClass
154
176
  */
155
177
  addRow(labelString, tooltipString, rowClass) {
178
+ rowClass = rowClass || this.defaultRowClass_ || '';
156
179
  this.latestRow_ = document.createElement('div');
157
180
  if (rowClass) {
158
181
  this.latestRow_.classList.add(rowClass);
@@ -66,6 +66,8 @@
66
66
  "DEMO_DURATION_BACKOFF": "Duration Backoff",
67
67
  "DEMO_EDIT_CUSTOM": "Edit",
68
68
  "DEMO_ENABLED": "Enabled",
69
+ "DEMO_EXTRA_SHAKA_PLAYER_CONFIG": "Extra Shaka Player configuration (JSON)",
70
+ "DEMO_EXTRA_TAB": "Extra Config",
69
71
  "DEMO_FAIRPLAY": "Fairplay DRM",
70
72
  "DEMO_FORCE_HTTPS": "Force HTTPS",
71
73
  "DEMO_FORCE_TRANSMUX_TS": "Force Transmux TS",
@@ -89,11 +91,11 @@
89
91
  "DEMO_IMA_ASSET_KEY": "Asset key (for LIVE DAI Content)",
90
92
  "DEMO_IMA_CONTENT_SRC_ID": "Content source ID (for VOD DAI Content)",
91
93
  "DEMO_IMA_VIDEO_ID": "Video ID (for VOD DAI Content)",
92
- "DEMO_USE_FULL_SEGMENTS_FOR_START_TIME": "Use Full Segments For Start Time",
93
94
  "DEMO_IGNORE_MIN_BUFFER_TIME": "Ignore Min Buffer Time",
94
95
  "DEMO_IGNORE_TEXT_FAILURES": "Ignore Text Stream Failures",
95
96
  "DEMO_INACCURATE_MANIFEST_TOLERANCE": "Inaccurate Manifest Tolerance",
96
97
  "DEMO_INITIAL_SEGMENT_LIMIT": "Initial Segment Limit",
98
+ "DEMO_INVALID_JSON_CONFIG_ERROR": "Invalid JSON configuration",
97
99
  "DEMO_IRT": "IRT",
98
100
  "DEMO_JSDELIVR": "jsDelivr",
99
101
  "DEMO_JUMP_LARGE_GAPS": "Jump Large Gaps",
@@ -130,6 +132,7 @@
130
132
  "DEMO_USE_MEDIA_CAPABILITIES": "Use MediaCapabilities",
131
133
  "DEMO_METACDN": "MetaCDN",
132
134
  "DEMO_MICROSOFT": "Microsoft",
135
+ "DEMO_MIME_TYPE": "MIME Type",
133
136
  "DEMO_MIN_BANDWIDTH": "Min Bandwidth",
134
137
  "DEMO_MIN_FRAMERATE": "Min Framerate",
135
138
  "DEMO_MIN_HEIGHT": "Min Height",
@@ -184,6 +187,7 @@
184
187
  "DEMO_SURROUND_SEARCH": "Filters for assets with at least one surround sound audio track.",
185
188
  "DEMO_SWITCH_INTERVAL": "Switch Interval",
186
189
  "DEMO_TEXT_LANGUAGE": "Preferred Text Language",
190
+ "DEMO_TEXT_ROLE": "Preferred Text Role",
187
191
  "DEMO_THUMBNAILS": "Thumbnails",
188
192
  "DEMO_TIMEOUT": "Timeout Factor",
189
193
  "DEMO_TRICK_MODE": "Special trick mode track",
@@ -205,6 +209,7 @@
205
209
  "DEMO_UNSUPPORTED_NO_OFFLINE": "Your browser does not support offline storage.",
206
210
  "DEMO_UPDATE_EXPIRATION_TIME": "Update expiration time",
207
211
  "DEMO_UPLYNK": "Verizon Digital Media Services",
212
+ "DEMO_USE_FULL_SEGMENTS_FOR_START_TIME": "Use Full Segments For Start Time",
208
213
  "DEMO_USE_NATIVE_HLS_SAFARI": "Use native HLS on Safari",
209
214
  "DEMO_USE_PERSISTENT_LICENSES": "Use Persistent Licenses",
210
215
  "DEMO_VIDEO_ROBUSTNESS": "Video Robustness",
@@ -267,6 +267,14 @@
267
267
  "description": "The name of a configuration value.",
268
268
  "message": "Enabled"
269
269
  },
270
+ "DEMO_EXTRA_SHAKA_PLAYER_CONFIG": {
271
+ "description": "A label for a form field where extra Shaka Player configuration can be set",
272
+ "message": "Extra [PROPER_NAME:Shaka Player] configuration ([JARGON:JSON])"
273
+ },
274
+ "DEMO_EXTRA_TAB": {
275
+ "description": "The header for a tab within the custom asset creation dialog.",
276
+ "message": "Extra Config"
277
+ },
270
278
  "DEMO_FAIRPLAY": {
271
279
  "description": "Text that describes an asset that is protected with the Fairplay Digital Rights Management system.",
272
280
  "message": "[PROPER_NAME:Fairplay] [JARGON:DRM]"
@@ -379,6 +387,10 @@
379
387
  "description": "The name of a configuration value.",
380
388
  "message": "Initial Segment Limit"
381
389
  },
390
+ "DEMO_INVALID_JSON_CONFIG_ERROR": {
391
+ "description": "An error message for an invalid JSON configuration.",
392
+ "message": "Invalid JSON configuration"
393
+ },
382
394
  "DEMO_IRT": {
383
395
  "description": "Text that describes an asset that comes from the Institut f\u00fcr Rundfunktechnik asset library.",
384
396
  "message": "[PROPER_NAME:IRT]"
@@ -523,6 +535,10 @@
523
535
  "description": "Text that describes an asset that comes from the Microsoft.",
524
536
  "message": "[PROPER_NAME:Microsoft]"
525
537
  },
538
+ "DEMO_MIME_TYPE": {
539
+ "description": "The label on a field that allows users to provide a MIME type for a custom asset.",
540
+ "message": "MIME Type"
541
+ },
526
542
  "DEMO_MIN_BANDWIDTH": {
527
543
  "description": "The name of a configuration value.",
528
544
  "message": "Min Bandwidth"
@@ -739,6 +755,10 @@
739
755
  "description": "The name of a configuration value.",
740
756
  "message": "Preferred Text Language"
741
757
  },
758
+ "DEMO_TEXT_ROLE": {
759
+ "description": "The name of a configuration value.",
760
+ "message": "Preferred Text Role"
761
+ },
742
762
  "DEMO_THUMBNAILS": {
743
763
  "description": "Text that describes an asset that has a thumbnail stream.",
744
764
  "message": "Thumbnails"
package/demo/main.js CHANGED
@@ -1256,7 +1256,11 @@ shakaDemo.Main = class {
1256
1256
  if (asset.imaAssetKey || (asset.imaContentSrcId && asset.imaVideoId)) {
1257
1257
  manifestUri = await this.getManifestUriFromAdManager_(asset);
1258
1258
  }
1259
- await this.player_.load(manifestUri);
1259
+ await this.player_.load(
1260
+ manifestUri,
1261
+ /* startTime= */ null,
1262
+ asset.mimeType || undefined);
1263
+
1260
1264
  if (this.player_.isAudioOnly()) {
1261
1265
  this.video_.poster = shakaDemo.Main.audioOnlyPoster_;
1262
1266
  }
package/dist/controls.css CHANGED
@@ -3,7 +3,7 @@
3
3
  * Copyright 2016 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- .shaka-hidden{display:none!important}.shaka-video-container{position:relative;top:0;left:0;display:flex}.shaka-video-container .material-icons-round{font-family:'Material Icons Round';font-size:24px}.shaka-video-container *{font-family:Roboto-Regular,Roboto,sans-serif}.shaka-video-container:fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-webkit-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-webkit-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-moz-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-moz-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-ms-fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:-ms-fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-controls-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;z-index:1}.shaka-video-container:not([shaka-controls=true]) .shaka-controls-container{display:none}.shaka-controls-container *{flex-shrink:0}.shaka-controls-container[casting=true] .shaka-fullscreen-button{display:none}.shaka-bottom-controls{width:96%;padding:0;padding-bottom:2.5%;z-index:1}.shaka-controls-button-panel{padding:0;margin:0;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;overflow:hidden;min-width:48px;font-size:12px;font-weight:400;font-style:normal;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-controls-button-panel,.shaka-controls-container[shown=true] .shaka-controls-button-panel{opacity:1}.shaka-controls-button-panel>*{color:#fff;height:32px;margin:1px 6px;padding:0;background:0 0;border:0;cursor:pointer}.shaka-controls-button-panel .shaka-overflow-menu-only{display:none}.shaka-play-button-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center}.shaka-scrim-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;background:linear-gradient(to top,#000 0,rgba(0,0,0,0) 15%)}.shaka-controls-container[casting=true] .shaka-scrim-container,.shaka-controls-container[shown=true] .shaka-scrim-container{opacity:1}.shaka-text-container{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;bottom:0;width:100%;min-width:48px;transition:bottom cubic-bezier(.4,0,.6,1) .1s;transition-delay:.5s}.shaka-text-container span{font-size:20px;line-height:1.4;background-color:rgba(0,0,0,.8);color:#fff}.shaka-controls-container[shown=true]~.shaka-text-container{bottom:15%;transition-delay:0s}.shaka-spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center}.shaka-video-container:not([shaka-controls=true]) .shaka-spinner-container{display:none}.shaka-spinner{position:relative;top:0;left:0;margin:0;box-sizing:border-box;padding:7.8%;width:0;height:0;filter:drop-shadow(0 0 2px rgba(255, 255, 255, .5))}.shaka-play-button{box-sizing:border-box;padding:7.5%;width:0;height:0;margin:0;border-radius:50%;box-shadow:rgba(0,0,0,.1) 0 0 20px 0;border:none;background-size:50%;background-repeat:no-repeat;background-position:center center;background-color:rgba(255,255,255,.9);opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-play-button,.shaka-controls-container[shown=true] .shaka-play-button{opacity:1}.shaka-play-button[icon=play]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M8%205v14l11-7z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-play-button[icon=pause]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M6%2019h4V5H6v14zm8-14v14h4V5h-4z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-current-time{font-size:14px;color:#fff;height:auto;cursor:pointer}.shaka-current-time[disabled]{background-color:transparent;color:#fff;cursor:default}.shaka-controls-container button:focus,.shaka-controls-container input:focus{outline:1px solid Highlight}.shaka-controls-container button:-moz-focus-inner,.shaka-controls-container input:-moz-focus-outer{outline:0;border:0}.shaka-controls-container:not(.shaka-keyboard-navigation) button:focus,.shaka-controls-container:not(.shaka-keyboard-navigation) input:focus{outline:0}.shaka-range-container{position:relative;top:0;left:0;margin:4px 6px;height:4px;border-radius:4px;background:#fff}.shaka-volume-bar-container{width:100px}.shaka-range-element{-webkit-appearance:none;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;height:12px;top:-4px;z-index:1}.shaka-range-element::-webkit-slider-runnable-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-webkit-slider-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-moz-range-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-moz-range-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-seek-bar-container{opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-seek-bar-container,.shaka-controls-container[shown=true] .shaka-seek-bar-container{opacity:1}.shaka-ad-markers{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%}/*!
6
+ .shaka-hidden{display:none!important}.shaka-video-container{position:relative;top:0;left:0;display:flex}.shaka-video-container .material-icons-round{font-family:'Material Icons Round';font-size:24px}.shaka-video-container *{font-family:Roboto-Regular,Roboto,sans-serif}.shaka-video-container:fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-webkit-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-webkit-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-moz-full-screen{width:100%;height:100%;background-color:#000}.shaka-video-container:-moz-full-screen .shaka-text-container{font-size:4.4vmin}.shaka-video-container:-ms-fullscreen{width:100%;height:100%;background-color:#000}.shaka-video-container:-ms-fullscreen .shaka-text-container{font-size:4.4vmin}.shaka-controls-container{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;z-index:1}.shaka-video-container:not([shaka-controls=true]) .shaka-controls-container{display:none}.shaka-controls-container *{flex-shrink:0}.shaka-controls-container[casting=true] .shaka-fullscreen-button{display:none}.shaka-bottom-controls{width:96%;padding:0;padding-bottom:2.5%;z-index:1}.shaka-controls-button-panel{padding:0;margin:0;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;overflow:hidden;min-width:48px;font-size:12px;font-weight:400;font-style:normal;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-controls-button-panel,.shaka-controls-container[shown=true] .shaka-controls-button-panel{opacity:1}.shaka-controls-button-panel>*{color:#fff;height:32px;line-height:.5;margin:1px 6px;padding:0;background:0 0;border:0;cursor:pointer}.shaka-controls-button-panel .shaka-overflow-menu-only{display:none}.shaka-play-button-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center}.shaka-scrim-container{margin:0;width:100%;height:100%;flex-shrink:1;position:absolute;left:0;right:0;top:0;bottom:0;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;background:linear-gradient(to top,#000 0,rgba(0,0,0,0) 15%)}.shaka-controls-container[casting=true] .shaka-scrim-container,.shaka-controls-container[shown=true] .shaka-scrim-container{opacity:1}.shaka-text-container{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;bottom:0;width:100%;min-width:48px;transition:bottom cubic-bezier(.4,0,.6,1) .1s;transition-delay:.5s;font-size:20px;line-height:1.4;color:#fff}.shaka-text-container span.shaka-text-wrapper{display:inline;background:0 0}.shaka-controls-container[shown=true]~.shaka-text-container{bottom:15%;transition-delay:0s}.shaka-spinner-container{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;flex-shrink:1;display:flex;justify-content:center;align-items:center}.shaka-video-container:not([shaka-controls=true]) .shaka-spinner-container{display:none}.shaka-spinner{position:relative;top:0;left:0;margin:0;box-sizing:border-box;padding:7.8%;width:0;height:0;filter:drop-shadow(0 0 2px rgba(255, 255, 255, .5))}.shaka-play-button{box-sizing:border-box;padding:7.5%;width:0;height:0;margin:0;border-radius:50%;box-shadow:rgba(0,0,0,.1) 0 0 20px 0;border:none;background-size:50%;background-repeat:no-repeat;background-position:center center;background-color:rgba(255,255,255,.9);opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-play-button,.shaka-controls-container[shown=true] .shaka-play-button{opacity:1}.shaka-play-button[icon=play]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M8%205v14l11-7z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-play-button[icon=pause]{background-image:url(data:image/svg+xml,%3Csvg%20fill%3D%22%23000000%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M6%2019h4V5H6v14zm8-14v14h4V5h-4z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%0A%3C%2Fsvg%3E)}.shaka-current-time{font-size:14px;color:#fff;height:auto;cursor:pointer}.shaka-current-time[disabled]{background-color:transparent;color:#fff;cursor:default}.shaka-controls-container button:focus,.shaka-controls-container input:focus{outline:1px solid Highlight}.shaka-controls-container button:-moz-focus-inner,.shaka-controls-container input:-moz-focus-outer{outline:0;border:0}.shaka-controls-container:not(.shaka-keyboard-navigation) button:focus,.shaka-controls-container:not(.shaka-keyboard-navigation) input:focus{outline:0}.shaka-range-container{position:relative;top:0;left:0;margin:4px 6px;height:4px;border-radius:4px;background:#fff}.shaka-volume-bar-container{width:100px}.shaka-range-element{-webkit-appearance:none;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%;height:12px;top:-4px;z-index:1}.shaka-range-element::-webkit-slider-runnable-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-webkit-slider-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-range-element::-moz-range-track{width:100%;height:12px;background:0 0;color:transparent;border:none}.shaka-range-element::-moz-range-thumb{-webkit-appearance:none;border:none;border-radius:12px;height:12px;width:12px;background:#fff}.shaka-seek-bar-container{opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s}.shaka-controls-container[casting=true] .shaka-seek-bar-container,.shaka-controls-container[shown=true] .shaka-seek-bar-container{opacity:1}.shaka-ad-markers{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0;width:100%;height:100%}/*!
7
7
  * @license
8
8
  * The SVG/CSS buffering spinner is based on http://codepen.io/jczimm/pen/vEBpoL
9
9
  * Some local modifications have been made.
@@ -27,4 +27,4 @@
27
27
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
28
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
29
  * SOFTWARE.
30
- */.shaka-spinner-svg{position:absolute;top:0;left:0;right:0;bottom:0;animation:rotate 2s linear infinite;transform-origin:center center;width:100%;height:100%;margin:0;padding:0}.shaka-spinner-path{stroke:#202124;stroke-dasharray:20,200;stroke-dashoffset:0;animation:dash 1s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.shaka-spacer{cursor:default;flex-shrink:1;flex-grow:1;margin:0}.shaka-overflow-menu,.shaka-settings-menu{overflow-x:hidden;overflow-y:auto;white-space:nowrap;background:#fff;box-shadow:0 1px 9px 0 rgba(0,0,0,.4);border-radius:2px;max-height:250px;min-width:180px;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;display:flex;flex-direction:column;position:absolute;z-index:2;right:15px;bottom:30px}.shaka-controls-container[casting=true] .shaka-overflow-menu,.shaka-controls-container[casting=true] .shaka-settings-menu,.shaka-controls-container[shown=true] .shaka-overflow-menu,.shaka-controls-container[shown=true] .shaka-settings-menu{opacity:1}.shaka-overflow-menu button,.shaka-settings-menu button{font-size:14px;background:0 0;color:#000;border:none;min-height:30px;padding:3.5px 6px;display:flex;align-items:center;cursor:pointer}.shaka-overflow-menu button:hover,.shaka-settings-menu button:hover{background:#e0e0e0}.shaka-overflow-menu button label,.shaka-settings-menu button label{cursor:pointer}.shaka-keyboard-navigation .shaka-overflow-menu button:focus,.shaka-keyboard-navigation .shaka-settings-menu button:focus{background:#e0e0e0}.shaka-overflow-menu i,.shaka-settings-menu i{padding-left:10px;padding-right:10px}.shaka-overflow-menu.shaka-low-position,.shaka-settings-menu.shaka-low-position{bottom:15px}.shaka-overflow-menu span{text-align:left}.shaka-overflow-button-label{position:relative;display:flex;flex-direction:column}.shaka-current-selection-span{color:rgba(0,0,0,.54)}.shaka-settings-menu span{margin-left:54px}.shaka-back-to-overflow-button span{margin-left:0}.shaka-back-to-overflow-button i{padding-right:20px}.shaka-auto-span{left:17px}.shaka-captions-on{color:#000}.shaka-captions-off{color:grey}.shaka-controls-container[ad-active=true]{pointer-events:none}.shaka-controls-container[ad-active=true] .shaka-bottom-controls{pointer-events:auto}.shaka-client-side-ad-container,.shaka-server-side-ad-container{position:absolute;left:0;right:0;top:0;bottom:0}.shaka-video-container[shaka-controls=true] .shaka-client-side-ad-container iframe,.shaka-video-container[shaka-controls=true] .shaka-server-side-ad-container iframe{height:90%}.shaka-server-side-ad-container{width:100%;height:100%;flex-shrink:1}.shaka-server-side-ad-container:not([ad-active=true]){pointer-events:none}.shaka-ad-controls{display:flex;flex-direction:row;z-index:1;padding-bottom:1%}.shaka-video-container:not([shaka-controls=true]) .shaka-ad-controls{display:none}.shaka-ad-controls button,.shaka-ad-controls div{color:#fff;font-size:initial}.shaka-ad-controls div:not(.shaka-skip-ad-counter){margin:1px 6px}.shaka-ad-counter,.shaka-ad-position{display:flex;justify-content:flex-end;flex-direction:column;text-shadow:1px 1px 4px #000}.shaka-skip-ad-container{position:relative;right:-2%;display:flex;flex-direction:row;margin:0}.shaka-skip-ad-button{padding:5px 15px;background:rgba(0,0,0,.7);border:none;cursor:pointer}.shaka-skip-ad-button:disabled{background:rgba(0,0,0,.3)}.shaka-skip-ad-counter{padding:5px 5px;background:rgba(0,0,0,.7);margin:0}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialiconsround/v55/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmM.otf) format('opentype')}.material-icons-round{font-family:'Material Icons Round';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}/*# sourceMappingURL=controls.css.map */
30
+ */.shaka-spinner-svg{position:absolute;top:0;left:0;right:0;bottom:0;animation:rotate 2s linear infinite;transform-origin:center center;width:100%;height:100%;margin:0;padding:0}.shaka-spinner-path{stroke:#202124;stroke-dasharray:20,200;stroke-dashoffset:0;animation:dash 1s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.shaka-spacer{cursor:default;flex-shrink:1;flex-grow:1;margin:0}.shaka-overflow-menu,.shaka-settings-menu{overflow-x:hidden;overflow-y:auto;white-space:nowrap;background:#fff;box-shadow:0 1px 9px 0 rgba(0,0,0,.4);border-radius:2px;max-height:250px;min-width:180px;opacity:0;transition:opacity cubic-bezier(.4,0,.6,1) .6s;display:flex;flex-direction:column;position:absolute;z-index:2;right:15px;bottom:30px}.shaka-controls-container[casting=true] .shaka-overflow-menu,.shaka-controls-container[casting=true] .shaka-settings-menu,.shaka-controls-container[shown=true] .shaka-overflow-menu,.shaka-controls-container[shown=true] .shaka-settings-menu{opacity:1}.shaka-overflow-menu button,.shaka-settings-menu button{font-size:14px;background:0 0;color:#000;border:none;min-height:30px;padding:3.5px 6px;display:flex;align-items:center;cursor:pointer}.shaka-overflow-menu button:hover,.shaka-settings-menu button:hover{background:#e0e0e0}.shaka-overflow-menu button label,.shaka-settings-menu button label{cursor:pointer}.shaka-keyboard-navigation .shaka-overflow-menu button:focus,.shaka-keyboard-navigation .shaka-settings-menu button:focus{background:#e0e0e0}.shaka-overflow-menu i,.shaka-settings-menu i{padding-left:10px;padding-right:10px}.shaka-overflow-menu.shaka-low-position,.shaka-settings-menu.shaka-low-position{bottom:15px}.shaka-overflow-menu span{text-align:left}.shaka-overflow-button-label{position:relative;display:flex;flex-direction:column}.shaka-current-selection-span{color:rgba(0,0,0,.54)}.shaka-settings-menu span{margin-left:54px}.shaka-back-to-overflow-button span{margin-left:0}.shaka-back-to-overflow-button i{padding-right:20px}.shaka-auto-span{left:17px}.shaka-captions-on{color:#000}.shaka-captions-off{color:grey}.shaka-controls-container[ad-active=true]{pointer-events:none}.shaka-controls-container[ad-active=true] .shaka-bottom-controls{pointer-events:auto}.shaka-client-side-ad-container,.shaka-server-side-ad-container{position:absolute;left:0;right:0;top:0;bottom:0}.shaka-video-container[shaka-controls=true] .shaka-client-side-ad-container iframe,.shaka-video-container[shaka-controls=true] .shaka-server-side-ad-container iframe{height:90%}.shaka-server-side-ad-container{width:100%;height:100%;flex-shrink:1}.shaka-server-side-ad-container:not([ad-active=true]){pointer-events:none}.shaka-ad-controls{display:flex;flex-direction:row;z-index:1;padding-bottom:1%}.shaka-video-container:not([shaka-controls=true]) .shaka-ad-controls{display:none}.shaka-ad-controls button,.shaka-ad-controls div{color:#fff;font-size:initial}.shaka-ad-controls div:not(.shaka-skip-ad-counter){margin:1px 6px}.shaka-ad-counter,.shaka-ad-position{display:flex;justify-content:flex-end;flex-direction:column;text-shadow:1px 1px 4px #000}.shaka-skip-ad-container{position:relative;right:-2%;display:flex;flex-direction:row;margin:0}.shaka-skip-ad-button{padding:5px 15px;background:rgba(0,0,0,.7);border:none;cursor:pointer}.shaka-skip-ad-button:disabled{background:rgba(0,0,0,.3)}.shaka-skip-ad-counter{padding:5px 5px;background:rgba(0,0,0,.7);margin:0}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialiconsround/v93/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmM.otf) format('opentype')}.material-icons-round{font-family:'Material Icons Round';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}/*# sourceMappingURL=controls.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../ui/less/general.less","$stdin","../ui/less/containers.less","../ui/less/buttons.less","../ui/less/range_elements.less","../ui/less/spinner.less","../ui/less/other_elements.less","../ui/less/overflow_menu.less","../ui/less/ad_controls.less","../ui/https:/fonts.googleapis.com/css?family=Roboto","../ui/https:/fonts.googleapis.com/icon?family=Material+Icons+Round"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../ui/less/general.less","$stdin","../ui/less/containers.less","../ui/less/buttons.less","../ui/less/range_elements.less","../ui/less/spinner.less","../ui/less/other_elements.less","../ui/less/overflow_menu.less","../ui/less/ad_controls.less","../ui/https:/fonts.googleapis.com/css?family=Roboto","../ui/https:/fonts.googleapis.com/icon?family=Material+Icons+Round"],"names":[],"mappings":"AAqBA,cCNE,QDSA,eEZF,uBDwBE,SDgBA,SCPA,IDYA,EACA,KAAA,ECRA,QCjCA,KAGA,6CACE,YAAA,uBACA,UAAA,KAIF,yBACE,YAAA,eAAA,OAAA,WAsBkB,kCFrBpB,MAAA,KACA,OAAA,KEWA,iBAAA,KAEA,wDDiCA,UC7BE,QAIkB,2CFtBpB,MAAA,KACA,OAAA,KEWA,iBAAA,KAEA,iED4CA,UCxCE,QAKkB,wCFvBpB,MAAA,KACA,OAAA,KEWA,iBAAA,KAEA,8DDuDA,UCnDE,QAMkB,sCFxBpB,MAAA,KACA,OAAA,KEWA,iBAAA,KAEA,4DDkEA,UC9DE,QAoBJ,0BD2DE,SDtDA,SAGA,IAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EAnDA,MAAA,KACA,OAAA,KE2CA,WAAA,WAGA,QAAA,KAGA,eAAA,OAGA,gBAAA,SAGA,YAAA,ODsEA,QC9DA,EF+BoD,4EAzGpD,QAAA,KEsEA,4BFUA,YAAA,EEFE,iEF9EF,QAAA,KEsFF,uBACE,MAAA,IACA,QAAA,EACA,eAAA,KDsEA,QC/DA,EAMF,6BAEE,QAAA,EACA,OAAA,EAGA,QAAA,KACA,eAAA,IAGA,gBAAA,SAGA,YAAA,OAGA,SAAA,OACA,UAAA,KDgEA,UC5DA,KACA,YAAA,IACA,WAAA,OFpIA,YAAA,KACA,oBAAA,KACA,iBAAA,KACA,gBAAA,KA+FA,QAAA,EAGA,WAAA,QAAA,wBAAA,IAK0C,qEADF,mEAEtC,QAAA,EEkCA,+BAEA,MAAA,KAGA,OAAA,KAGA,YAAA,GFzHF,OAAA,IAAA,IE8HE,QAAA,EDqEF,WCjEE,IACA,OAAA,EACA,OAAA,QAKyB,uDAC3B,QAAA,KAMF,6BDiEE,OC9DA,EF9JA,MAAA,KACA,OAAA,KA2EA,YAAA,ECsJA,SDtKA,SACA,KAAA,EACA,MAAA,EACA,IAAA,EACA,OAAA,EEoGA,QAAA,KACA,gBAAA,OACA,YAAA,OAGF,uBACE,OAAA,EF1KA,MAAA,KACA,OAAA,KA2EA,YAAA,ECwKA,SDxLA,SACA,KAAA,EACA,MAAA,EACA,IAAA,EACA,OAAA,EAiBA,QAAA,EAGA,WAAA,QAAA,wBAAA,IC6KA,WChFA,iDFxF0C,+DADF,6DAEtC,QAAA,EE0FJ,sBDsFE,SD9MA,SACA,KAAA,EACA,MAAA,EACA,IAAA,EACA,OAAA,ECkNA,eCxFA,KAGA,OAAA,EACA,MAAA,KACA,UAAA,KD2FA,WCnFmB,OAAnB,wBAAA,IACA,iBAAA,IAGA,UAAA,KACA,YAAA,IACA,MAAA,KAEI,8CACF,QAAA,OACA,WAAA,IAIoC,4DDuFtC,OCpFA,IDuFA,iBCnFA,GAIF,yBDqFE,SDzPA,SACA,KAAA,EACA,MAAA,EACA,IAAA,EACA,OAAA,EAhEA,MAAA,KACA,OAAA,KEoOA,YAAA,EACA,QAAA,KACA,gBAAA,OACA,YAAA,OFzIoD,2EAzGpD,QAAA,KEuPF,eD6FE,SDlTA,SC8TA,IDzTA,EACA,KAAA,EEwNA,OAAA,EACA,WAAA,WACA,QAAA,KACA,MAAA,EACA,OAAA,EDsGA,OClGA,6CCvQF,mBFqXE,WE7WA,WACA,QAAA,KACA,MAAA,EACA,OAAA,EFqXA,OEjXA,EAGA,cAAA,IAGA,WAAA,eAAA,EAAA,EAAA,KAAA,EAGA,OAAA,KFiXA,gBE5WA,IACA,kBAAA,UACA,oBAAA,OAAA,OAGA,iBAAA,qBHwDA,QAAA,EAGA,WAAA,QAAA,wBAAA,IAK0C,2DADF,yDAEtC,QAAA,EGzDD,8BACC,iBAAkB,4UAGnB,+BACC,iBAAkB,8VAQtB,oBACE,UAAA,KACA,MAAA,KFoXA,OEhXA,KACA,OAAA,QAEC,8BFmXD,iBEzbA,YACA,MAAA,KACA,OAAA,QA2EM,uCAAa,sCFyXnB,QEtXE,IAAA,MAAA,UAKI,kDAAwB,iDAC5B,QAAA,EACA,OAAA,EAQI,uEAAa,sEACjB,QAAA,ECsBJ,uBHoYE,SDndA,SC4dA,IDvdA,EACA,KAAA,EIjBA,OAAA,IAAA,IAGA,OAAA,IAGA,cAAA,IAGA,WAAA,KAqFF,4BACE,MAAA,MAGF,qBA9CE,mBAAA,KACA,WAAA,IHwcA,SD/dA,SAGA,IAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EAnDA,MAAA,KACA,OAAA,KC2hBA,OGldA,KHsdA,IGldA,KHqdA,QGjdA,EAGC,oDAxDD,MAAA,KH+gBA,OG1gBA,KH8gBA,WG1gBA,IACA,MAAA,YACA,OAAA,KAiDC,2CA1CD,mBAAA,KH0gBA,OGtgBA,KAGA,cAAA,KACA,OAAA,KACA,MAAA,KAGA,WAAA,KAmCC,uCAjED,MAAA,KHyiBA,OGpiBA,KHwiBA,WGpiBA,IACA,MAAA,YACA,OAAA,KA0DC,uCAnDD,mBAAA,KHoiBA,OGhiBA,KAGA,cAAA,KACA,OAAA,KACA,MAAA,KAGA,WAAA,KAwDF,0BJlCE,QAAA,EAGA,WAAA,QAAA,wBAAA,IAK0C,kEADF,gEAEtC,QAAA,EI6BJ,kBHmfE,SD/jBA,SAGA,IAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EAnDA,MAAA,KACA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;AKDF,mBJ0pBE,SD/mBA,SAGA,IAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EK1CA,UAAA,OAAA,GAAA,OAAA,SACA,iBAAA,OAAA,OAGA,MAAA,KACA,OAAA,KACA,OAAA,EACA,QAAA,EAIF,oBACE,OAAA,QACA,iBAAA,GAAA,IACA,kBAAA,EAGA,UAAA,KAAA,GAAA,YAAA,SAGA,eAAA,MAIF,kBACE,KACE,UAAW,gBAKf,gBACE,GACE,iBAAA,EAAA,IACA,kBAAA,EAGF,IACE,iBAAA,GAAA,IACA,kBAAA,MAGF,KACE,iBAAA,GAAA,IACA,kBAAA,QCrEJ,cAEE,OAAA,QN4FA,YAAA,EMtFA,UAAA,EL2uBA,OKvuBA,ECdF,qBACA,qBNiwBE,WM9vBA,OACA,WAAA,KAGA,YAAA,OAGA,WAAA,KACA,WAAA,EAAA,IAAA,IAAA,EAAA,eACA,cAAA,IACA,WAAA,MACA,UAAA,MPsFA,QAAA,EAGA,WAAA,QAAA,wBAAA,IC4qBA,QM9vBA,KACA,eAAA,OAGA,SAAA,SACA,QAAA,EACA,MAAA,KACA,OAAA,KPgF0C,6DAAA,6DADF,2DAAA,2DAEtC,QAAA,EO9EF,4BAAA,4BACE,UAAA,KACA,WAAA,IACA,MAAA,KACA,OAAA,KACA,WAAA,KACA,QAAA,MAAA,IAGA,QAAA,KACA,YAAA,OAQA,OAAA,QALC,kCAAA,kCACC,WAAA,QAOF,kCAAA,kCACE,OAAA,QAG0B,6DAAA,6DAC1B,WAAA,QAMJ,uBAAA,uBAEE,aAAA,KACA,cAAA,KAKD,wCAAA,wCAEC,OAAA,KAUiB,0BACnB,WAAA,KAKF,6BACE,SAAA,SAGA,QAAA,KACA,eAAA,OAMF,8BAEE,MAAA,gBAKA,0BAEE,YAAA,KAQF,oCAEE,YAAA,EAIF,iCAEE,cAAA,KAKJ,iBAEE,KAAA,KAIF,mBACE,MAAA,KAIF,oBACE,MAAA,KC1IuB,0CAEvB,eAAA,KAGA,iEACE,eAAA,KAIJ,gCAAiC,gCP04B/B,SDz0BA,SACA,KAAA,EACA,MAAA,EACA,IAAA,EACA,OAAA,EQ/DA,mFAAA,mFPk5BA,OO94BI,IAKN,gCRVE,MAAA,KACA,OAAA,KA2EA,YAAA,EQ9DK,sDACH,eAAA,KAIJ,mBAGE,QAAA,KACA,eAAA,IACA,QAAA,EP24BA,eOv4BA,GRmEoD,qEAzGpD,QAAA,KQwCA,0BAAQ,uBACN,MAAA,KACA,UAAA,QAGK,mDRxBP,OAAA,IAAA,IQ6BF,kBAAmB,mBRnCjB,QAAA,KACA,gBAAA,SACA,eAAA,OCg7BA,YOz8BA,IAAA,IAAA,IAAA,KA+DF,yBP+4BE,SO54BA,SP+4BA,MOv4BA,IACA,QAAA,KACA,eAAA,IACA,OAAA,EAGF,sBACE,QAAA,IAAA,KACA,WAAA,eACA,OAAA,KAMA,OAAA,QAJC,+BACC,WAAA,eAMJ,uBACE,QAAA,IAAA,IACA,WAAA,eACA,OAAA,ECzGF,WACE,YAAa,OACb,WAAY,OACZ,YAAa,IACb,IAAK,qEAAoE,mBCJ3E,WACE,YAAa,uBACb,WAAY,OACZ,YAAa,IACb,IAAK,iGAAgG,mBAGvG,sBACE,YAAa,uBACb,YAAa,IACb,WAAY,OACZ,UAAW,KACX,YAAa,EACb,eAAgB,OAChB,eAAgB,KAChB,QAAS,aACT,YAAa,OACb,UAAW,OACX,UAAW"}