bigscreen-player 8.2.0 → 8.2.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.
@@ -1,5 +1,5 @@
1
1
  import { fromXML, generateISD, renderHTML } from 'smp-imsc';
2
- import { f as findSegmentTemplate, L as LoadUrl, a as DebugToolInstance, P as Plugins, U as Utils, D as DOMHelpers } from './main-3159416c.js';
2
+ import { f as findSegmentTemplate, L as LoadUrl, a as DebugToolInstance, P as Plugins, U as Utils, D as DOMHelpers } from './main-98c741f8.js';
3
3
 
4
4
  const SEGMENTS_BUFFER_SIZE = 3;
5
5
  const LOAD_ERROR_COUNT_MAX = 3;
@@ -1,4 +1,4 @@
1
- import { D as DOMHelpers, a as DebugToolInstance, P as Plugins, L as LoadUrl, T as TransportControlPosition } from './main-3159416c.js';
1
+ import { D as DOMHelpers, a as DebugToolInstance, P as Plugins, L as LoadUrl, T as TransportControlPosition } from './main-98c741f8.js';
2
2
 
3
3
  /**
4
4
  * Safely checks if an attribute exists on an element.
@@ -903,8 +903,7 @@ function DebugTool() {
903
903
  chronicle.setCurrentElementTime(seconds);
904
904
  }
905
905
  function apicall(functionName, functionArgs = []) {
906
- const argsPart = functionArgs.length === 0 ? "" : ` with args [${functionArgs.join(", ")}]`;
907
- debug(`Called '${functionName}${argsPart}'`);
906
+ chronicle.trace("apicall", { functionName, functionArgs });
908
907
  }
909
908
  function buffered(kind, buffered) {
910
909
  chronicle.trace("buffered-ranges", { kind, buffered });
@@ -1118,6 +1117,8 @@ function LegacyPlayerAdapter(mediaSources, windowType, playbackElement, isUHD, p
1118
1117
  }
1119
1118
 
1120
1119
  function onTimeUpdate(event) {
1120
+ DebugToolInstance.updateElementTime(event.currentTime);
1121
+
1121
1122
  isPaused = false;
1122
1123
 
1123
1124
  // Note: Multiple consecutive CDN failover logic
@@ -1130,6 +1131,7 @@ function LegacyPlayerAdapter(mediaSources, windowType, playbackElement, isUHD, p
1130
1131
  // Must publish this time update before checkSeekSucceded - which could cause a pause event
1131
1132
  // This is a device specific event ordering issue.
1132
1133
  publishTimeUpdate();
1134
+
1133
1135
  if ((handleErrorOnExitingSeek || delayPauseOnExitSeek) && exitingSeek) {
1134
1136
  checkSeekSucceeded(event.seekableRange.start, event.currentTime);
1135
1137
  }
@@ -5679,14 +5681,16 @@ function BasicStrategy(mediaSources, windowType, mediaKind, playbackElement) {
5679
5681
  }
5680
5682
 
5681
5683
  function load(_mimeType, startTime) {
5682
- if (!mediaElement) {
5684
+ if (mediaElement == null) {
5683
5685
  setUpMediaElement(startTime);
5684
5686
  setUpMediaListeners();
5685
- } else {
5686
- mediaElement.src = mediaSources.currentSource();
5687
- setStartTime(startTime);
5688
- mediaElement.load();
5687
+
5688
+ return
5689
5689
  }
5690
+
5691
+ mediaElement.src = mediaSources.currentSource();
5692
+ setStartTime(startTime);
5693
+ mediaElement.load();
5690
5694
  }
5691
5695
 
5692
5696
  function setUpMediaElement(startTime) {
@@ -5756,6 +5760,8 @@ function BasicStrategy(mediaSources, windowType, mediaKind, playbackElement) {
5756
5760
  }
5757
5761
 
5758
5762
  function onTimeUpdate() {
5763
+ DebugToolInstance.updateElementTime(mediaElement.currentTime);
5764
+
5759
5765
  publishTimeUpdate();
5760
5766
  }
5761
5767
 
@@ -5928,7 +5934,7 @@ BasicStrategy.getLiveSupport = () => LiveSupport.SEEKABLE;
5928
5934
  function StrategyPicker() {
5929
5935
  return new Promise((resolve, reject) => {
5930
5936
  if (window.bigscreenPlayer.playbackStrategy === PlaybackStrategy.MSE) {
5931
- return import('./msestrategy-01ed7ba0.js')
5937
+ return import('./msestrategy-9bfd05cd.js')
5932
5938
  .then(({ default: MSEStrategy }) => resolve(MSEStrategy))
5933
5939
  .catch(() => {
5934
5940
  reject({ error: "strategyDynamicLoadError" });
@@ -6375,7 +6381,7 @@ function CallCallbacks(callbacks, data) {
6375
6381
  }
6376
6382
  }
6377
6383
 
6378
- var Version = "8.2.0";
6384
+ var Version = "8.2.2";
6379
6385
 
6380
6386
  var sourceList;
6381
6387
  var source;
@@ -7726,7 +7732,7 @@ function Subtitles(mediaPlayer, autoStart, playbackElement, defaultStyleOpts, me
7726
7732
 
7727
7733
  if (available()) {
7728
7734
  if (useLegacySubs) {
7729
- import('./legacysubtitles-6de060f9.js')
7735
+ import('./legacysubtitles-c0af01e0.js')
7730
7736
  .then(({ default: LegacySubtitles }) => {
7731
7737
  subtitlesContainer = LegacySubtitles(mediaPlayer, autoStart, playbackElement, mediaSources, defaultStyleOpts);
7732
7738
  callback(subtitlesEnabled);
@@ -7735,7 +7741,7 @@ function Subtitles(mediaPlayer, autoStart, playbackElement, defaultStyleOpts, me
7735
7741
  Plugins.interface.onSubtitlesDynamicLoadError();
7736
7742
  });
7737
7743
  } else {
7738
- import('./imscsubtitles-119375e3.js')
7744
+ import('./imscsubtitles-1ade53b5.js')
7739
7745
  .then(({ default: IMSCSubtitles }) => {
7740
7746
  subtitlesContainer = IMSCSubtitles(mediaPlayer, autoStart, playbackElement, mediaSources, defaultStyleOpts);
7741
7747
  callback(subtitlesEnabled);
@@ -8000,10 +8006,10 @@ function BigscreenPlayer() {
8000
8006
  * @function
8001
8007
  * @name init
8002
8008
  * @param {HTMLDivElement} playbackElement - The Div element where content elements should be rendered
8003
- * @param {import("./types").InitData} bigscreenPlayerData
8009
+ * @param {InitData} bigscreenPlayerData
8004
8010
  * @param {WindowTypes} newWindowType
8005
8011
  * @param {boolean} enableSubtitles - Enable subtitles on initialisation
8006
- * @param {import("./types").InitCallbacks} callbacks
8012
+ * @param {InitCallbacks} callbacks
8007
8013
  */
8008
8014
  init: (newPlaybackElement, bigscreenPlayerData, newWindowType, enableSubtitles, callbacks = {}) => {
8009
8015
  playbackElement = newPlaybackElement;
@@ -8327,7 +8333,7 @@ function BigscreenPlayer() {
8327
8333
  /**
8328
8334
  * Customise the rendered subitles style
8329
8335
  *
8330
- * @param {import("./types").SubtitlesCustomisationOptions} styleOpts
8336
+ * @param {SubtitlesCustomisationOptions} styleOpts
8331
8337
  */
8332
8338
  customiseSubtitles: (styleOpts) => {
8333
8339
  if (subtitles) {
@@ -8339,7 +8345,7 @@ function BigscreenPlayer() {
8339
8345
  * Render an example subtitles string with a given style and location
8340
8346
  *
8341
8347
  * @param {string} xmlString - EBU-TT-D compliant XML String
8342
- * @param {import("./types").SubtitlesCustomisationOptions} styleOpts
8348
+ * @param {SubtitlesCustomisationOptions} styleOpts
8343
8349
  * @param {DOMRect} safePosition
8344
8350
  */
8345
8351
  renderSubtitleExample: (xmlString, styleOpts, safePosition) => {
@@ -73,10 +73,10 @@ declare function BigscreenPlayer(): {
73
73
  * @function
74
74
  * @name init
75
75
  * @param {HTMLDivElement} playbackElement - The Div element where content elements should be rendered
76
- * @param {import("./types").InitData} bigscreenPlayerData
76
+ * @param {InitData} bigscreenPlayerData
77
77
  * @param {WindowTypes} newWindowType
78
78
  * @param {boolean} enableSubtitles - Enable subtitles on initialisation
79
- * @param {import("./types").InitCallbacks} callbacks
79
+ * @param {InitCallbacks} callbacks
80
80
  */
81
81
  init: (newPlaybackElement: any, bigscreenPlayerData: InitData, newWindowType: WindowTypes, enableSubtitles: boolean, callbacks?: InitCallbacks) => void;
82
82
  /**
@@ -244,14 +244,14 @@ declare function BigscreenPlayer(): {
244
244
  /**
245
245
  * Customise the rendered subitles style
246
246
  *
247
- * @param {import("./types").SubtitlesCustomisationOptions} styleOpts
247
+ * @param {SubtitlesCustomisationOptions} styleOpts
248
248
  */
249
249
  customiseSubtitles: (styleOpts: SubtitlesCustomisationOptions) => void;
250
250
  /**
251
251
  * Render an example subtitles string with a given style and location
252
252
  *
253
253
  * @param {string} xmlString - EBU-TT-D compliant XML String
254
- * @param {import("./types").SubtitlesCustomisationOptions} styleOpts
254
+ * @param {SubtitlesCustomisationOptions} styleOpts
255
255
  * @param {DOMRect} safePosition
256
256
  */
257
257
  renderSubtitleExample: (xmlString: string, styleOpts: SubtitlesCustomisationOptions, safePosition: DOMRect) => void;
@@ -481,6 +481,7 @@ type FramesDropped = CreateMetric<"frames-dropped", number>;
481
481
  type InitialPlaybackTime = CreateMetric<"initial-playback-time", number>;
482
482
  type MediaElementEnded = CreateMetric<"ended", HTMLMediaElement["ended"]>;
483
483
  type MediaElementPaused = CreateMetric<"paused", HTMLMediaElement["paused"]>;
484
+ type MediaElementPlaybackRate = CreateMetric<"playback-rate", HTMLMediaElement["playbackRate"]>;
484
485
  type MediaElementReadyState = CreateMetric<"ready-state", HTMLMediaElement["readyState"]>;
485
486
  type MediaElementSeeking = CreateMetric<"seeking", HTMLMediaElement["seeking"]>;
486
487
  type PlaybackStrategy = CreateMetric<"strategy", string>;
@@ -490,7 +491,7 @@ type SeekableRange = CreateMetric<"seekable-range", [start: number, end: number]
490
491
  type SubtitleCDNsAvailable = CreateMetric<"subtitle-cdns-available", string[]>;
491
492
  type SubtitleCurrentUrl = CreateMetric<"subtitle-current-url", string>;
492
493
  type Version = CreateMetric<"version", string>;
493
- type Metric = AutoResume | BitRate | BufferLength | CDNsAvailable | CurrentUrl | Duration | FramesDropped | InitialPlaybackTime | MediaElementEnded | MediaElementPaused | MediaElementReadyState | MediaElementSeeking | PlaybackStrategy | RepresentationAudio | RepresentationVideo | SeekableRange | SubtitleCDNsAvailable | SubtitleCurrentUrl | Version;
494
+ type Metric = AutoResume | BitRate | BufferLength | CDNsAvailable | CurrentUrl | Duration | FramesDropped | InitialPlaybackTime | MediaElementEnded | MediaElementPaused | MediaElementPlaybackRate | MediaElementReadyState | MediaElementSeeking | PlaybackStrategy | RepresentationAudio | RepresentationVideo | SeekableRange | SubtitleCDNsAvailable | SubtitleCurrentUrl | Version;
494
495
  type MetricKind = Metric["kind"];
495
496
  type MetricForKind<Kind extends MetricKind> = Extract<Metric, {
496
497
  kind: Kind;
@@ -501,6 +502,10 @@ type CreateTrace<Kind extends string, Data extends Primitives | Record<string, P
501
502
  kind: Kind;
502
503
  data: Data;
503
504
  };
505
+ type ApiCall = CreateTrace<"apicall", {
506
+ functionName: string;
507
+ functionArgs: any[];
508
+ }>;
504
509
  type BufferedRanges = CreateTrace<"buffered-ranges", {
505
510
  kind: MediaKinds;
506
511
  buffered: [start: number, end: number][];
@@ -524,7 +529,7 @@ type QuotaExceeded = CreateTrace<"quota-exceeded", {
524
529
  type SessionStart = CreateTrace<"session-start", number>;
525
530
  type SessionEnd = CreateTrace<"session-end", number>;
526
531
  type StateChange = CreateTrace<"state-change", MediaState>;
527
- type Trace = BufferedRanges | Error | Event | Gap | QuotaExceeded | SessionStart | SessionEnd | StateChange;
532
+ type Trace = ApiCall | BufferedRanges | Error | Event | Gap | QuotaExceeded | SessionStart | SessionEnd | StateChange;
528
533
  type TraceKind = Trace["kind"];
529
534
  type TraceForKind<Kind extends TraceKind> = Extract<Trace, {
530
535
  kind: Kind;
@@ -576,8 +581,8 @@ declare const DebugToolInstance: {
576
581
  info: (...parts: any[]) => void;
577
582
  statechange: (value: MediaState) => void;
578
583
  warn: (...parts: any[]) => void;
579
- dynamicMetric: <Kind extends "auto-resume" | "bitrate" | "buffer-length" | "cdns-available" | "current-url" | "duration" | "frames-dropped" | "initial-playback-time" | "ended" | "paused" | "ready-state" | "seeking" | "strategy" | "representation-audio" | "representation-video" | "seekable-range" | "subtitle-cdns-available" | "subtitle-current-url" | "version">(kind: Kind, data: MetricForKind<Kind>["data"]) => void;
580
- staticMetric: <Kind_1 extends "auto-resume" | "bitrate" | "buffer-length" | "cdns-available" | "current-url" | "duration" | "frames-dropped" | "initial-playback-time" | "ended" | "paused" | "ready-state" | "seeking" | "strategy" | "representation-audio" | "representation-video" | "seekable-range" | "subtitle-cdns-available" | "subtitle-current-url" | "version">(kind: Kind_1, data: MetricForKind<Kind_1>["data"]) => void;
584
+ dynamicMetric: <Kind extends "auto-resume" | "bitrate" | "buffer-length" | "cdns-available" | "current-url" | "duration" | "frames-dropped" | "initial-playback-time" | "ended" | "paused" | "playback-rate" | "ready-state" | "seeking" | "strategy" | "representation-audio" | "representation-video" | "seekable-range" | "subtitle-cdns-available" | "subtitle-current-url" | "version">(kind: Kind, data: MetricForKind<Kind>["data"]) => void;
585
+ staticMetric: <Kind_1 extends "auto-resume" | "bitrate" | "buffer-length" | "cdns-available" | "current-url" | "duration" | "frames-dropped" | "initial-playback-time" | "ended" | "paused" | "playback-rate" | "ready-state" | "seeking" | "strategy" | "representation-audio" | "representation-video" | "seekable-range" | "subtitle-cdns-available" | "subtitle-current-url" | "version">(kind: Kind_1, data: MetricForKind<Kind_1>["data"]) => void;
581
586
  hide: () => void;
582
587
  show: () => void;
583
588
  setRootElement: (element: HTMLElement) => void;
package/dist/esm/main.js CHANGED
@@ -1 +1 @@
1
- export { B as BigscreenPlayer, a as DebugTool, E as EntryCategory, b as LiveSupport, c as MediaKinds, M as MediaState, g as MockBigscreenPlayer, h as PauseTriggers, i as PlaybackStrategy, j as TransferFormat, T as TransportControlPosition, W as WindowTypes, k as isMessage, l as isMetric, m as isTrace } from './main-3159416c.js';
1
+ export { B as BigscreenPlayer, a as DebugTool, E as EntryCategory, b as LiveSupport, c as MediaKinds, M as MediaState, g as MockBigscreenPlayer, h as PauseTriggers, i as PlaybackStrategy, j as TransferFormat, T as TransportControlPosition, W as WindowTypes, k as isMessage, l as isMetric, m as isTrace } from './main-98c741f8.js';
@@ -1,5 +1,5 @@
1
1
  import { MediaPlayer } from 'dashjs/index_mediaplayerOnly';
2
- import { W as WindowTypes, U as Utils, D as DOMHelpers, b as LiveSupport, a as DebugToolInstance, M as MediaState, P as Plugins, c as MediaKinds, d as TimeUtils, e as DynamicWindowUtils } from './main-3159416c.js';
2
+ import { W as WindowTypes, U as Utils, D as DOMHelpers, b as LiveSupport, a as DebugToolInstance, M as MediaState, P as Plugins, c as MediaKinds, d as TimeUtils, e as DynamicWindowUtils } from './main-98c741f8.js';
3
3
 
4
4
  function filter(manifest, representationOptions) {
5
5
  const constantFps = representationOptions.constantFps;
@@ -325,13 +325,6 @@ function MSEStrategy(mediaSources, windowType, mediaKind, playbackElement, isUHD
325
325
  onBuffering();
326
326
  }
327
327
 
328
- function onStalled() {
329
- DebugToolInstance.event("stalled", "MediaElement");
330
- DebugToolInstance.dynamicMetric("ready-state", mediaElement.readyState);
331
-
332
- getBufferedRanges().map(({ kind, buffered }) => DebugToolInstance.buffered(kind, buffered));
333
- }
334
-
335
328
  function onEnded() {
336
329
  DebugToolInstance.event("ended", "MediaElement");
337
330
  DebugToolInstance.dynamicMetric("ended", mediaElement.ended);
@@ -341,7 +334,13 @@ function MSEStrategy(mediaSources, windowType, mediaKind, playbackElement, isUHD
341
334
  publishMediaState(MediaState.ENDED);
342
335
  }
343
336
 
337
+ function onRateChange() {
338
+ DebugToolInstance.dynamicMetric("playback-rate", mediaElement.playbackRate);
339
+ }
340
+
344
341
  function onTimeUpdate() {
342
+ DebugToolInstance.updateElementTime(mediaElement.currentTime);
343
+
345
344
  const currentMpdTimeSeconds =
346
345
  windowType === WindowTypes.SLIDING
347
346
  ? mediaPlayer.getDashMetrics().getCurrentDVRInfo(mediaKind)?.time
@@ -368,7 +367,8 @@ function MSEStrategy(mediaSources, windowType, mediaKind, playbackElement, isUHD
368
367
  }
369
368
 
370
369
  if (event.error && event.error.message) {
371
- DebugToolInstance.info(`MSE Error: ${event.error.message} Code: ${event.error.code}`);
370
+ DebugToolInstance.error(`${event.error.message} (code: ${event.error.code})`);
371
+
372
372
  lastError = event.error;
373
373
 
374
374
  // Don't raise an error on fragment download error
@@ -648,6 +648,7 @@ function MSEStrategy(mediaSources, windowType, mediaKind, playbackElement, isUHD
648
648
  function setUpMediaListeners() {
649
649
  DebugToolInstance.dynamicMetric("ended", mediaElement.ended);
650
650
  DebugToolInstance.dynamicMetric("paused", mediaElement.paused);
651
+ DebugToolInstance.dynamicMetric("playback-rate", mediaElement.playbackRate);
651
652
  DebugToolInstance.dynamicMetric("ready-state", mediaElement.readyState);
652
653
  DebugToolInstance.dynamicMetric("seeking", mediaElement.seeking);
653
654
 
@@ -661,7 +662,7 @@ function MSEStrategy(mediaSources, windowType, mediaKind, playbackElement, isUHD
661
662
  mediaElement.addEventListener("seeking", onSeeking);
662
663
  mediaElement.addEventListener("seeked", onSeeked);
663
664
  mediaElement.addEventListener("ended", onEnded);
664
- mediaElement.addEventListener("stalled", onStalled);
665
+ mediaElement.addEventListener("ratechange", onRateChange);
665
666
  mediaPlayer.on(DashJSEvents.ERROR, onError);
666
667
  mediaPlayer.on(DashJSEvents.MANIFEST_LOADED, onManifestLoaded);
667
668
  mediaPlayer.on(DashJSEvents.STREAM_INITIALIZED, onStreamInitialised);
@@ -793,7 +794,7 @@ function MSEStrategy(mediaSources, windowType, mediaKind, playbackElement, isUHD
793
794
  mediaElement.removeEventListener("seeking", onSeeking);
794
795
  mediaElement.removeEventListener("seeked", onSeeked);
795
796
  mediaElement.removeEventListener("ended", onEnded);
796
- mediaElement.removeEventListener("stalled", onStalled);
797
+ mediaElement.removeEventListener("ratechange", onRateChange);
797
798
  mediaPlayer.off(DashJSEvents.ERROR, onError);
798
799
  mediaPlayer.off(DashJSEvents.MANIFEST_LOADED, onManifestLoaded);
799
800
  mediaPlayer.off(DashJSEvents.MANIFEST_VALIDITY_CHANGED, onManifestValidityChange);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bigscreen-player",
3
- "version": "8.2.0",
3
+ "version": "8.2.2",
4
4
  "type": "module",
5
5
  "description": "Simplified media playback for bigscreen devices.",
6
6
  "main": "dist/esm/main.js",