shaka-player 4.9.0 → 4.9.2

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 (40) hide show
  1. package/dist/deps.js +1 -1
  2. package/dist/locales.js +33 -33
  3. package/dist/shaka-player.compiled.d.ts +0 -1
  4. package/dist/shaka-player.compiled.debug.d.ts +0 -1
  5. package/dist/shaka-player.compiled.debug.externs.js +0 -1
  6. package/dist/shaka-player.compiled.debug.js +222 -219
  7. package/dist/shaka-player.compiled.debug.map +3 -3
  8. package/dist/shaka-player.compiled.externs.js +0 -1
  9. package/dist/shaka-player.compiled.js +961 -961
  10. package/dist/shaka-player.compiled.map +2 -2
  11. package/dist/shaka-player.ui.d.ts +0 -1
  12. package/dist/shaka-player.ui.debug.d.ts +0 -1
  13. package/dist/shaka-player.ui.debug.externs.js +0 -1
  14. package/dist/shaka-player.ui.debug.js +140 -135
  15. package/dist/shaka-player.ui.debug.map +3 -3
  16. package/dist/shaka-player.ui.externs.js +0 -1
  17. package/dist/shaka-player.ui.js +1229 -1228
  18. package/dist/shaka-player.ui.map +3 -3
  19. package/lib/media/content_workarounds.js +4 -2
  20. package/lib/media/drm_engine.js +1 -1
  21. package/lib/media/media_source_engine.js +66 -31
  22. package/lib/media/preload_manager.js +42 -62
  23. package/lib/player.js +25 -17
  24. package/lib/polyfill/mediasource.js +12 -0
  25. package/lib/transmuxer/aac_transmuxer.js +4 -2
  26. package/lib/transmuxer/ac3_transmuxer.js +2 -1
  27. package/lib/transmuxer/ec3_transmuxer.js +2 -1
  28. package/lib/transmuxer/mp3_transmuxer.js +4 -2
  29. package/lib/transmuxer/mpeg_ts_transmuxer.js +2 -1
  30. package/lib/transmuxer/mss_transmuxer.js +4 -2
  31. package/lib/transmuxer/ts_transmuxer.js +44 -24
  32. package/lib/util/config_utils.js +2 -0
  33. package/lib/util/error.js +10 -8
  34. package/lib/util/object_utils.js +1 -2
  35. package/lib/util/platform.js +11 -2
  36. package/package.json +1 -1
  37. package/ui/audio_language_selection.js +4 -0
  38. package/ui/presentation_time.js +15 -0
  39. package/ui/resolution_selection.js +7 -0
  40. package/ui/text_selection.js +4 -0
@@ -128,7 +128,8 @@ shaka.transmuxer.Mp3Transmuxer = class {
128
128
  return Promise.reject(new shaka.util.Error(
129
129
  shaka.util.Error.Severity.CRITICAL,
130
130
  shaka.util.Error.Category.MEDIA,
131
- shaka.util.Error.Code.TRANSMUXING_FAILED));
131
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
132
+ reference ? reference.getUris()[0] : null));
132
133
  }
133
134
  if (!firstHeader) {
134
135
  firstHeader = header;
@@ -155,7 +156,8 @@ shaka.transmuxer.Mp3Transmuxer = class {
155
156
  return Promise.reject(new shaka.util.Error(
156
157
  shaka.util.Error.Severity.CRITICAL,
157
158
  shaka.util.Error.Category.MEDIA,
158
- shaka.util.Error.Code.TRANSMUXING_FAILED));
159
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
160
+ reference ? reference.getUris()[0] : null));
159
161
  }
160
162
  /** @type {number} */
161
163
  const sampleRate = firstHeader.sampleRate;
@@ -147,7 +147,8 @@ shaka.transmuxer.MpegTsTransmuxer = class {
147
147
  return Promise.reject(new shaka.util.Error(
148
148
  shaka.util.Error.Severity.CRITICAL,
149
149
  shaka.util.Error.Category.MEDIA,
150
- shaka.util.Error.Code.TRANSMUXING_FAILED));
150
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
151
+ reference ? reference.getUris()[0] : null));
151
152
  }
152
153
 
153
154
  let transmuxData = new Uint8Array([]);
@@ -226,7 +226,8 @@ shaka.transmuxer.MssTransmuxer = class {
226
226
  return Promise.reject(new shaka.util.Error(
227
227
  shaka.util.Error.Severity.CRITICAL,
228
228
  shaka.util.Error.Category.MEDIA,
229
- shaka.util.Error.Code.MSS_MISSING_DATA_FOR_TRANSMUXING));
229
+ shaka.util.Error.Code.MSS_MISSING_DATA_FOR_TRANSMUXING,
230
+ reference ? reference.getUris()[0] : null));
230
231
  }
231
232
  try {
232
233
  const transmuxedData = this.processMediaSegment_(
@@ -239,7 +240,8 @@ shaka.transmuxer.MssTransmuxer = class {
239
240
  return Promise.reject(new shaka.util.Error(
240
241
  shaka.util.Error.Severity.CRITICAL,
241
242
  shaka.util.Error.Category.MEDIA,
242
- shaka.util.Error.Code.MSS_TRANSMUXING_FAILED));
243
+ shaka.util.Error.Code.MSS_TRANSMUXING_FAILED,
244
+ reference ? reference.getUris()[0] : null));
243
245
  }
244
246
  }
245
247
 
@@ -192,7 +192,8 @@ shaka.transmuxer.TsTransmuxer = class {
192
192
  return Promise.reject(new shaka.util.Error(
193
193
  shaka.util.Error.Severity.CRITICAL,
194
194
  shaka.util.Error.Category.MEDIA,
195
- shaka.util.Error.Code.TRANSMUXING_FAILED));
195
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
196
+ reference ? reference.getUris()[0] : null));
196
197
  }
197
198
  }
198
199
  offset = id3Data.length;
@@ -209,7 +210,8 @@ shaka.transmuxer.TsTransmuxer = class {
209
210
  return Promise.reject(new shaka.util.Error(
210
211
  shaka.util.Error.Severity.CRITICAL,
211
212
  shaka.util.Error.Category.MEDIA,
212
- shaka.util.Error.Code.TRANSMUXING_FAILED));
213
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
214
+ reference ? reference.getUris()[0] : null));
213
215
  }
214
216
 
215
217
  if (!this.tsParser_) {
@@ -247,19 +249,19 @@ shaka.transmuxer.TsTransmuxer = class {
247
249
  break;
248
250
  case 'ac3':
249
251
  streamInfo =
250
- this.getAc3StreamInfo_(tsParser, stream, duration);
252
+ this.getAc3StreamInfo_(tsParser, stream, duration, reference);
251
253
  break;
252
254
  case 'ec3':
253
255
  streamInfo =
254
- this.getEc3StreamInfo_(tsParser, stream, duration);
256
+ this.getEc3StreamInfo_(tsParser, stream, duration, reference);
255
257
  break;
256
258
  case 'mp3':
257
259
  streamInfo =
258
- this.getMp3StreamInfo_(tsParser, stream, duration);
260
+ this.getMp3StreamInfo_(tsParser, stream, duration, reference);
259
261
  break;
260
262
  case 'opus':
261
263
  streamInfo =
262
- this.getOpusStreamInfo_(tsParser, stream, duration);
264
+ this.getOpusStreamInfo_(tsParser, stream, duration, reference);
263
265
  break;
264
266
  }
265
267
  if (streamInfo) {
@@ -278,7 +280,8 @@ shaka.transmuxer.TsTransmuxer = class {
278
280
  return Promise.reject(new shaka.util.Error(
279
281
  shaka.util.Error.Severity.CRITICAL,
280
282
  shaka.util.Error.Category.MEDIA,
281
- shaka.util.Error.Code.TRANSMUXING_FAILED));
283
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
284
+ reference ? reference.getUris()[0] : null));
282
285
  }
283
286
 
284
287
  const mp4Generator = new shaka.util.Mp4Generator(streamInfos);
@@ -327,7 +330,8 @@ shaka.transmuxer.TsTransmuxer = class {
327
330
  throw new shaka.util.Error(
328
331
  shaka.util.Error.Severity.CRITICAL,
329
332
  shaka.util.Error.Category.MEDIA,
330
- shaka.util.Error.Code.TRANSMUXING_FAILED);
333
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
334
+ reference ? reference.getUris()[0] : null);
331
335
  }
332
336
  stream.audioSamplingRate = info.sampleRate;
333
337
  stream.channelsCount = info.channelCount;
@@ -370,7 +374,8 @@ shaka.transmuxer.TsTransmuxer = class {
370
374
  throw new shaka.util.Error(
371
375
  shaka.util.Error.Severity.CRITICAL,
372
376
  shaka.util.Error.Category.MEDIA,
373
- shaka.util.Error.Code.TRANSMUXING_FAILED);
377
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
378
+ reference ? reference.getUris()[0] : null);
374
379
  }
375
380
 
376
381
  firstPts = reference.startTime * timescale;
@@ -382,7 +387,8 @@ shaka.transmuxer.TsTransmuxer = class {
382
387
  throw new shaka.util.Error(
383
388
  shaka.util.Error.Severity.CRITICAL,
384
389
  shaka.util.Error.Category.MEDIA,
385
- shaka.util.Error.Code.TRANSMUXING_FAILED);
390
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
391
+ reference ? reference.getUris()[0] : null);
386
392
  }
387
393
  info = {
388
394
  sampleRate: stream.audioSamplingRate,
@@ -395,7 +401,8 @@ shaka.transmuxer.TsTransmuxer = class {
395
401
  throw new shaka.util.Error(
396
402
  shaka.util.Error.Severity.CRITICAL,
397
403
  shaka.util.Error.Category.MEDIA,
398
- shaka.util.Error.Code.TRANSMUXING_FAILED);
404
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
405
+ reference ? reference.getUris()[0] : null);
399
406
  }
400
407
  const segmentDuration =
401
408
  (reference.endTime - reference.startTime) * timescale;
@@ -451,10 +458,11 @@ shaka.transmuxer.TsTransmuxer = class {
451
458
  * @param {shaka.util.TsParser} tsParser
452
459
  * @param {shaka.extern.Stream} stream
453
460
  * @param {number} duration
461
+ * @param {?shaka.media.SegmentReference} reference
454
462
  * @return {shaka.util.Mp4Generator.StreamInfo}
455
463
  * @private
456
464
  */
457
- getAc3StreamInfo_(tsParser, stream, duration) {
465
+ getAc3StreamInfo_(tsParser, stream, duration, reference) {
458
466
  const Ac3 = shaka.transmuxer.Ac3;
459
467
  const timescale = shaka.util.TsParser.Timescale;
460
468
 
@@ -511,7 +519,8 @@ shaka.transmuxer.TsTransmuxer = class {
511
519
  throw new shaka.util.Error(
512
520
  shaka.util.Error.Severity.CRITICAL,
513
521
  shaka.util.Error.Category.MEDIA,
514
- shaka.util.Error.Code.TRANSMUXING_FAILED);
522
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
523
+ reference ? reference.getUris()[0] : null);
515
524
  }
516
525
 
517
526
 
@@ -544,10 +553,11 @@ shaka.transmuxer.TsTransmuxer = class {
544
553
  * @param {shaka.util.TsParser} tsParser
545
554
  * @param {shaka.extern.Stream} stream
546
555
  * @param {number} duration
556
+ * @param {?shaka.media.SegmentReference} reference
547
557
  * @return {shaka.util.Mp4Generator.StreamInfo}
548
558
  * @private
549
559
  */
550
- getEc3StreamInfo_(tsParser, stream, duration) {
560
+ getEc3StreamInfo_(tsParser, stream, duration, reference) {
551
561
  const Ec3 = shaka.transmuxer.Ec3;
552
562
  const timescale = shaka.util.TsParser.Timescale;
553
563
 
@@ -604,7 +614,8 @@ shaka.transmuxer.TsTransmuxer = class {
604
614
  throw new shaka.util.Error(
605
615
  shaka.util.Error.Severity.CRITICAL,
606
616
  shaka.util.Error.Category.MEDIA,
607
- shaka.util.Error.Code.TRANSMUXING_FAILED);
617
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
618
+ reference ? reference.getUris()[0] : null);
608
619
  }
609
620
 
610
621
 
@@ -637,10 +648,11 @@ shaka.transmuxer.TsTransmuxer = class {
637
648
  * @param {shaka.util.TsParser} tsParser
638
649
  * @param {shaka.extern.Stream} stream
639
650
  * @param {number} duration
651
+ * @param {?shaka.media.SegmentReference} reference
640
652
  * @return {shaka.util.Mp4Generator.StreamInfo}
641
653
  * @private
642
654
  */
643
- getMp3StreamInfo_(tsParser, stream, duration) {
655
+ getMp3StreamInfo_(tsParser, stream, duration, reference) {
644
656
  const MpegAudio = shaka.transmuxer.MpegAudio;
645
657
  const timescale = shaka.util.TsParser.Timescale;
646
658
 
@@ -692,7 +704,8 @@ shaka.transmuxer.TsTransmuxer = class {
692
704
  throw new shaka.util.Error(
693
705
  shaka.util.Error.Severity.CRITICAL,
694
706
  shaka.util.Error.Category.MEDIA,
695
- shaka.util.Error.Code.TRANSMUXING_FAILED);
707
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
708
+ reference ? reference.getUris()[0] : null);
696
709
  }
697
710
  /** @type {number} */
698
711
  const sampleRate = firstHeader.sampleRate;
@@ -725,10 +738,11 @@ shaka.transmuxer.TsTransmuxer = class {
725
738
  * @param {shaka.util.TsParser} tsParser
726
739
  * @param {shaka.extern.Stream} stream
727
740
  * @param {number} duration
741
+ * @param {?shaka.media.SegmentReference} reference
728
742
  * @return {shaka.util.Mp4Generator.StreamInfo}
729
743
  * @private
730
744
  */
731
- getOpusStreamInfo_(tsParser, stream, duration) {
745
+ getOpusStreamInfo_(tsParser, stream, duration, reference) {
732
746
  const Opus = shaka.transmuxer.Opus;
733
747
  const timescale = shaka.util.TsParser.Timescale;
734
748
 
@@ -744,7 +758,8 @@ shaka.transmuxer.TsTransmuxer = class {
744
758
  throw new shaka.util.Error(
745
759
  shaka.util.Error.Severity.CRITICAL,
746
760
  shaka.util.Error.Category.MEDIA,
747
- shaka.util.Error.Code.TRANSMUXING_FAILED);
761
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
762
+ reference ? reference.getUris()[0] : null);
748
763
  }
749
764
 
750
765
  /** @type {!Uint8Array} */
@@ -798,7 +813,8 @@ shaka.transmuxer.TsTransmuxer = class {
798
813
  throw new shaka.util.Error(
799
814
  shaka.util.Error.Severity.CRITICAL,
800
815
  shaka.util.Error.Category.MEDIA,
801
- shaka.util.Error.Code.TRANSMUXING_FAILED);
816
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
817
+ reference ? reference.getUris()[0] : null);
802
818
  }
803
819
 
804
820
  stream.audioSamplingRate = opusMetadata.sampleRate;
@@ -854,7 +870,8 @@ shaka.transmuxer.TsTransmuxer = class {
854
870
  throw new shaka.util.Error(
855
871
  shaka.util.Error.Severity.CRITICAL,
856
872
  shaka.util.Error.Category.MEDIA,
857
- shaka.util.Error.Code.TRANSMUXING_NO_VIDEO_DATA);
873
+ shaka.util.Error.Code.TRANSMUXING_NO_VIDEO_DATA,
874
+ reference ? reference.getUris()[0] : null);
858
875
  }
859
876
  for (let i = 0; i < videoData.length; i++) {
860
877
  const pes = videoData[i];
@@ -897,7 +914,8 @@ shaka.transmuxer.TsTransmuxer = class {
897
914
  throw new shaka.util.Error(
898
915
  shaka.util.Error.Severity.CRITICAL,
899
916
  shaka.util.Error.Category.MEDIA,
900
- shaka.util.Error.Code.TRANSMUXING_FAILED);
917
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
918
+ reference ? reference.getUris()[0] : null);
901
919
  }
902
920
  stream.height = info.height;
903
921
  stream.width = info.width;
@@ -948,7 +966,8 @@ shaka.transmuxer.TsTransmuxer = class {
948
966
  throw new shaka.util.Error(
949
967
  shaka.util.Error.Severity.CRITICAL,
950
968
  shaka.util.Error.Category.MEDIA,
951
- shaka.util.Error.Code.TRANSMUXING_NO_VIDEO_DATA);
969
+ shaka.util.Error.Code.TRANSMUXING_NO_VIDEO_DATA,
970
+ reference ? reference.getUris()[0] : null);
952
971
  }
953
972
  for (let i = 0; i < videoData.length; i++) {
954
973
  const pes = videoData[i];
@@ -991,7 +1010,8 @@ shaka.transmuxer.TsTransmuxer = class {
991
1010
  throw new shaka.util.Error(
992
1011
  shaka.util.Error.Severity.CRITICAL,
993
1012
  shaka.util.Error.Category.MEDIA,
994
- shaka.util.Error.Code.TRANSMUXING_FAILED);
1013
+ shaka.util.Error.Code.TRANSMUXING_FAILED,
1014
+ reference ? reference.getUris()[0] : null);
995
1015
  }
996
1016
  stream.height = info.height;
997
1017
  stream.width = info.width;
@@ -211,6 +211,8 @@ shaka.util.ConfigUtils = class {
211
211
  delete obj[key];
212
212
  } else if (isArrayEmpty(obj[key])) {
213
213
  delete obj[key];
214
+ } else if (typeof obj[key] == 'function') {
215
+ delete obj[key];
214
216
  } else if (isObject(obj[key])) {
215
217
  removeEmpty(obj[key]);
216
218
  }
package/lib/util/error.js CHANGED
@@ -456,6 +456,7 @@ shaka.util.Error.Code = {
456
456
  /**
457
457
  * A MediaSource operation failed.
458
458
  * <br> error.data[0] is a MediaError code from the video element.
459
+ * <br> error.data[1] is the segment URI that triggered the error, if any.
459
460
  */
460
461
  'MEDIA_SOURCE_OPERATION_FAILED': 3014,
461
462
 
@@ -463,6 +464,7 @@ shaka.util.Error.Code = {
463
464
  * A MediaSource operation threw an exception.
464
465
  * <br> error.data[0] is the exception that was thrown.
465
466
  * <br> error.data[1] is the error object from the video element.
467
+ * <br> error.data[2] is the segment URI that triggered the error, if any.
466
468
  */
467
469
  'MEDIA_SOURCE_OPERATION_THREW': 3015,
468
470
 
@@ -485,37 +487,37 @@ shaka.util.Error.Code = {
485
487
  'QUOTA_EXCEEDED_ERROR': 3017,
486
488
 
487
489
  /**
488
- * Mux.js did not invoke the callback signifying successful transmuxing.
490
+ * Transmuxing with our internal transmuxer failed.
491
+ * <br> error.data[0] is the segment URI that triggered the error, if any.
489
492
  */
490
493
  'TRANSMUXING_FAILED': 3018,
491
494
 
492
495
  /**
493
496
  * Content transformations required by the platform could not be performed for
494
497
  * some reason (unsupported container, etc.)
495
- *
496
- * @see https://github.com/shaka-project/shaka-player/issues/2759
498
+ * <br> @see https://github.com/shaka-project/shaka-player/issues/2759
499
+ * <br> error.data[0] is the segment URI that triggered the error, if any.
497
500
  */
498
501
  'CONTENT_TRANSFORMATION_FAILED': 3019,
499
502
 
500
503
  /**
501
504
  * Important data is missing to be able to do the transmuxing of MSS.
505
+ * <br> error.data[0] is the segment URI that triggered the error, if any.
502
506
  */
503
507
  'MSS_MISSING_DATA_FOR_TRANSMUXING': 3020,
504
508
 
505
- /**
506
- * MSS transmuing failed for unknown codec.
507
- * <br> error.data[0] is a unknown codec.
508
- */
509
- 'MSS_TRANSMUXING_CODEC_UNKNOWN': 3021,
509
+ // RETIRED: 'MSS_TRANSMUXING_CODEC_UNKNOWN': 3021,
510
510
 
511
511
  /**
512
512
  * MSS transmuing failed for unknown reason.
513
+ * <br> error.data[0] is the segment URI that triggered the error, if any.
513
514
  */
514
515
  'MSS_TRANSMUXING_FAILED': 3022,
515
516
 
516
517
  /**
517
518
  * An internal error which indicates that transmuxing operation has no video
518
519
  * data. This should not be seen by applications.
520
+ * <br> error.data[0] is the segment URI that triggered the error, if any.
519
521
  */
520
522
  'TRANSMUXING_NO_VIDEO_DATA': 3023,
521
523
 
@@ -41,8 +41,7 @@ shaka.util.ObjectUtils = class {
41
41
 
42
42
  // This covers Uint8Array and friends, even without a TypedArray
43
43
  // base-class constructor.
44
- const isTypedArray =
45
- val.buffer && val.buffer.constructor == ArrayBuffer;
44
+ const isTypedArray = val.buffer instanceof ArrayBuffer;
46
45
  if (isTypedArray) {
47
46
  return val;
48
47
  }
@@ -299,7 +299,8 @@ shaka.util.Platform = class {
299
299
  !shaka.util.Platform.isOrange() &&
300
300
  !shaka.util.Platform.isPS4() &&
301
301
  !shaka.util.Platform.isAmazonFireTV() &&
302
- !shaka.util.Platform.isWPE();
302
+ !shaka.util.Platform.isWPE() &&
303
+ !shaka.util.Platform.isZenterio();
303
304
  }
304
305
 
305
306
  /**
@@ -362,6 +363,14 @@ shaka.util.Platform = class {
362
363
  return shaka.util.Platform.userAgentContains_('WPE');
363
364
  }
364
365
 
366
+ /**
367
+ * Check if the current platform is Deutsche Telecom Zenterio STB.
368
+ * @return {boolean}
369
+ */
370
+ static isZenterio() {
371
+ return shaka.util.Platform.userAgentContains_('DT_STB_BCM');
372
+ }
373
+
365
374
  /**
366
375
  * Returns a major version number for Safari, or Safari-based iOS browsers.
367
376
  *
@@ -519,7 +528,7 @@ shaka.util.Platform = class {
519
528
  Platform.isEOS() || Platform.isAPL() ||
520
529
  Platform.isVirginMedia() || Platform.isOrange() ||
521
530
  Platform.isWPE() || Platform.isChromecast() ||
522
- Platform.isHisense()) {
531
+ Platform.isHisense() || Platform.isZenterio()) {
523
532
  return true;
524
533
  }
525
534
  return false;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shaka-player",
3
3
  "description": "DASH/EME video player library",
4
- "version": "4.9.0",
4
+ "version": "4.9.2",
5
5
  "homepage": "https://github.com/shaka-project/shaka-player",
6
6
  "author": "Google",
7
7
  "maintainers": [
@@ -46,6 +46,10 @@ shaka.ui.AudioLanguageSelection = class extends shaka.ui.SettingsMenu {
46
46
  });
47
47
 
48
48
 
49
+ this.eventManager.listen(this.player, 'loading', () => {
50
+ this.onTracksChanged_();
51
+ });
52
+
49
53
  this.eventManager.listen(this.player, 'trackschanged', () => {
50
54
  this.onTracksChanged_();
51
55
  });
@@ -7,6 +7,7 @@
7
7
 
8
8
  goog.provide('shaka.ui.PresentationTimeTracker');
9
9
 
10
+ goog.require('shaka.ads.AdManager');
10
11
  goog.require('shaka.ui.Controls');
11
12
  goog.require('shaka.ui.Element');
12
13
  goog.require('shaka.ui.Locales');
@@ -40,6 +41,10 @@ shaka.ui.PresentationTimeTracker = class extends shaka.ui.Element {
40
41
  }
41
42
  });
42
43
 
44
+ this.eventManager.listen(this.player, 'loading', () => {
45
+ shaka.ui.Utils.setDisplay(this.currentTime_, true);
46
+ });
47
+
43
48
  this.eventManager.listen(this.controls, 'timeandseekrangeupdated', () => {
44
49
  this.updateTime_();
45
50
  });
@@ -47,6 +52,16 @@ shaka.ui.PresentationTimeTracker = class extends shaka.ui.Element {
47
52
  this.eventManager.listen(this.player, 'trackschanged', () => {
48
53
  this.onTracksChanged_();
49
54
  });
55
+
56
+ this.eventManager.listen(
57
+ this.adManager, shaka.ads.AdManager.AD_STARTED, () => {
58
+ shaka.ui.Utils.setDisplay(this.currentTime_, false);
59
+ });
60
+
61
+ this.eventManager.listen(
62
+ this.adManager, shaka.ads.AdManager.AD_STOPPED, () => {
63
+ shaka.ui.Utils.setDisplay(this.currentTime_, true);
64
+ });
50
65
  }
51
66
 
52
67
  /** @private */
@@ -50,6 +50,10 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
50
50
  });
51
51
 
52
52
 
53
+ this.eventManager.listen(this.player, 'loading', () => {
54
+ this.updateResolutionSelection_();
55
+ });
56
+
53
57
  this.eventManager.listen(this.player, 'variantchanged', () => {
54
58
  this.updateResolutionSelection_();
55
59
  });
@@ -136,6 +140,9 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
136
140
  tracks.sort((t1, t2) => {
137
141
  goog.asserts.assert(t1.height != null, 'Null height');
138
142
  goog.asserts.assert(t2.height != null, 'Null height');
143
+ if (t2.height == t1.height) {
144
+ return t2.bandwidth - t1.bandwidth;
145
+ }
139
146
  return t2.height - t1.height;
140
147
  });
141
148
  }
@@ -64,6 +64,10 @@ shaka.ui.TextSelection = class extends shaka.ui.SettingsMenu {
64
64
  this.updateTextLanguages_();
65
65
  });
66
66
 
67
+ this.eventManager.listen(this.player, 'loading', () => {
68
+ this.onTracksChanged_();
69
+ });
70
+
67
71
  this.eventManager.listen(this.player, 'texttrackvisibility', () => {
68
72
  this.onCaptionStateChange_();
69
73
  this.updateTextLanguages_();