@gcorevideo/player 2.28.27 → 2.28.29

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 +1 @@
1
- {"version":3,"file":"BasePlayback.d.ts","sourceRoot":"","sources":["../../src/playback/BasePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,UAAU,EAAe,MAAM,cAAc,CAAA;AAI5E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,IAAI,YAAY,YAEf;IAED,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IA0BlD;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM;IAInB,UAAU;CAIpB"}
1
+ {"version":3,"file":"BasePlayback.d.ts","sourceRoot":"","sources":["../../src/playback/BasePlayback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,UAAU,EAAe,MAAM,cAAc,CAAA;AAK5E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,IAAI,YAAY,YAEf;IAED,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IA0BlD;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM;IAInB,UAAU;CAIpB"}
@@ -1,6 +1,6 @@
1
1
  import { Playback } from '@clappr/core';
2
- import DASHJS, { type BitrateInfo as DashBitrateInfo, IManifestInfo } from 'dashjs';
3
- import { QualityLevel, TimePosition, TimeValue } from '../../playback.types.js';
2
+ import { MediaPlayerClass, IManifestInfo } from 'dashjs';
3
+ import { QualityLevel, TimePosition, TimeValue, VTTCueInfo } from '../../playback.types.js';
4
4
  import { BasePlayback } from '../BasePlayback.js';
5
5
  import { AudioTrack } from '@clappr/core/types/base/playback/playback.js';
6
6
  type PlaybackType = typeof Playback.VOD | typeof Playback.LIVE | typeof Playback.AOD | typeof Playback.NO_OP;
@@ -10,8 +10,8 @@ type LocalTimeCorrelation = {
10
10
  remote: number;
11
11
  };
12
12
  export default class DashPlayback extends BasePlayback {
13
- _levels: QualityLevel[] | null;
14
- _currentLevel: number | null;
13
+ _levels: QualityLevel[];
14
+ _currentLevel: number;
15
15
  _durationExcludesAfterLiveSyncPoint: boolean;
16
16
  _isReadyState: boolean;
17
17
  _playableRegionDuration: number;
@@ -19,7 +19,7 @@ export default class DashPlayback extends BasePlayback {
19
19
  _playbackType: PlaybackType;
20
20
  _playlistType: PlaylistType | null;
21
21
  _programDateTime: TimeValue;
22
- _dash: DASHJS.MediaPlayerClass | null;
22
+ _dash: MediaPlayerClass | null;
23
23
  _extrapolatedWindowDuration: number;
24
24
  _lastDuration: TimeValue | null;
25
25
  _lastTimeUpdate: TimePosition;
@@ -28,6 +28,10 @@ export default class DashPlayback extends BasePlayback {
28
28
  startChangeQuality: boolean;
29
29
  manifestInfo: IManifestInfo | null;
30
30
  _timeUpdateTimer: ReturnType<typeof setInterval> | null;
31
+ oncueenter: ((e: VTTCueInfo) => void) | null;
32
+ oncueexit: ((e: {
33
+ id: string;
34
+ }) => void) | null;
31
35
  get name(): string;
32
36
  get levels(): QualityLevel[];
33
37
  get currentLevel(): number;
@@ -66,7 +70,7 @@ export default class DashPlayback extends BasePlayback {
66
70
  private destroyInstance;
67
71
  destroy(): void;
68
72
  _updatePlaybackType(): void;
69
- _fillLevels(levels: DashBitrateInfo[]): void;
73
+ private _fillLevels;
70
74
  private onLevelSwitch;
71
75
  private onLevelSwitchEnd;
72
76
  getPlaybackType(): string;
@@ -82,6 +86,21 @@ export default class DashPlayback extends BasePlayback {
82
86
  * @override
83
87
  */
84
88
  _handleTextTrackChange(): void;
89
+ setTextTrack(id: number): void;
90
+ /**
91
+ * @override
92
+ */
93
+ get closedCaptionsTracks(): {
94
+ id: number;
95
+ name: string;
96
+ track: {
97
+ id: number;
98
+ label: string;
99
+ language: string | null;
100
+ mode: string;
101
+ };
102
+ }[];
103
+ private getTextTracks;
85
104
  }
86
105
  export {};
87
106
  //# sourceMappingURL=DashPlayback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/dash-playback/DashPlayback.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,QAAQ,EAAyB,MAAM,cAAc,CAAA;AAG3E,OAAO,EAGL,gBAAgB,EAKhB,aAAa,EAQd,MAAM,QAAQ,CAAA;AAEf,OAAO,EAGL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAMzE,KAAK,YAAY,GACb,OAAO,QAAQ,CAAC,GAAG,GACnB,OAAO,QAAQ,CAAC,IAAI,GACpB,OAAO,QAAQ,CAAC,GAAG,GACnB,OAAO,QAAQ,CAAC,KAAK,CAAA;AAEzB,KAAK,YAAY,GAAG,MAAM,CAAA;AAE1B,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAID,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAY;IACpD,OAAO,EAAE,YAAY,EAAE,CAAK;IAE5B,aAAa,EAAE,MAAM,CAAO;IAK5B,mCAAmC,EAAE,OAAO,CAAQ;IAEpD,aAAa,EAAE,OAAO,CAAQ;IAI9B,uBAAuB,EAAE,MAAM,CAAI;IASnC,wBAAwB,EAAE,MAAM,CAAI;IAEpC,aAAa,EAAE,YAAY,CAAe;IAG1C,aAAa,EAAE,YAAY,GAAG,IAAI,CAAO;IAEzC,gBAAgB,EAAE,SAAS,CAAI;IAE/B,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAO;IAErC,2BAA2B,EAAE,MAAM,CAAI;IAEvC,aAAa,EAAE,SAAS,GAAG,IAAI,CAAO;IAEtC,eAAe,EAAE,YAAY,CAA2B;IAIxD,0BAA0B,EAAE,oBAAoB,GAAG,IAAI,CAAO;IAI9D,wBAAwB,EAAE,oBAAoB,GAAG,IAAI,CAAO;IAE5D,kBAAkB,UAAQ;IAE1B,YAAY,EAAE,aAAa,GAAG,IAAI,CAAO;IAEzC,gBAAgB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAO;IAE9D,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;IAEnD,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;IAEtD,IAAI,IAAI,WAEP;IAED,IAAI,MAAM,IAAI,YAAY,EAAE,CAE3B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,CAAC,EAAE,EAAE,MAAM,EAoC1B;IAED,IAAI,UAAU,WAUb;IAED,IAAI,IAAI,WAEP;IAID,IAAI,sBAAsB,WAczB;IAID,IAAI,oBAAoB,WAgBvB;IAED,IAAI,SAAS,WAKZ;gBAEW,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG;IAOzD,MAAM;IA4GN,MAAM;IAMN,MAAM;YAKW,SAAS;IAI1B,qBAAqB;IAQrB,oBAAoB;IAapB,WAAW,IAAI,SAAS;IAQxB,cAAc,IAAI,SAAS;IAO3B,kBAAkB,IAAI,SAAS;IAItB,cAAc,CAAC,UAAU,EAAE,MAAM;IAejC,IAAI,CAAC,IAAI,EAAE,SAAS;IAgB7B,eAAe;IAIf,UAAU,CAAC,MAAM,EAAE,OAAO;IAMjB,eAAe;IAgBxB,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,eAAe,CAkCtB;IAED,OAAO,CAAC,YAAY;IAiBX,aAAa;IAqBb,iBAAiB;IAW1B,IAAI,UAAU,YAQb;IAEQ,WAAW;IAgBX,IAAI;IAMJ,KAAK;IAUL,IAAI;IAQb,OAAO,CAAC,eAAe;IAuBd,OAAO;IAMhB,mBAAmB;IASnB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gBAAgB;IAQxB,eAAe;IAIf,aAAa;IAIb,OAAO,CAAC,QAAQ;IAMhB,eAAe,CAAC,IAAI,EAAE,MAAM;IAI5B,IAAI,WAAW,IAAI,UAAU,EAAE,CAI9B;IAGD,IAAI,iBAAiB,IAAI,UAAU,GAAG,IAAI,CAOzC;IAEQ,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQlC,IAAI,CAAC,MAAM,EAAE,MAAM;IAQ5B,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,sBAAsB;IAKtB,YAAY,CAAC,EAAE,EAAE,MAAM;IAIvB;;OAEG;IACH,IAAI,oBAAoB;;;;;;;;;QAGvB;IAED,OAAO,CAAC,aAAa;CAYtB"}
@@ -5,7 +5,7 @@
5
5
  import { Events, Log, Playback, PlayerError, Utils, $ } from '@clappr/core';
6
6
  import { trace } from '@gcorevideo/utils';
7
7
  import assert from 'assert';
8
- import DASHJS from 'dashjs';
8
+ import { MediaPlayer, } from 'dashjs';
9
9
  import { PlaybackErrorCode, } from '../../playback.types.js';
10
10
  import { isDashSource } from '../../utils/mediaSources.js';
11
11
  import { BasePlayback } from '../BasePlayback.js';
@@ -14,8 +14,8 @@ const AUTO = -1;
14
14
  const { now } = Utils;
15
15
  const T = 'playback.dash';
16
16
  export default class DashPlayback extends BasePlayback {
17
- _levels = null;
18
- _currentLevel = null;
17
+ _levels = [];
18
+ _currentLevel = AUTO;
19
19
  // true when the actual duration is longer than hlsjs's live sync point
20
20
  // when this is false playableRegionDuration will be the actual duration
21
21
  // when this is true playableRegionDuration will exclude the time after the sync point
@@ -49,17 +49,15 @@ export default class DashPlayback extends BasePlayback {
49
49
  startChangeQuality = false;
50
50
  manifestInfo = null;
51
51
  _timeUpdateTimer = null;
52
+ oncueenter = null;
53
+ oncueexit = null;
52
54
  get name() {
53
55
  return 'dash';
54
56
  }
55
57
  get levels() {
56
- return this._levels || [];
58
+ return this._levels;
57
59
  }
58
60
  get currentLevel() {
59
- if (this._currentLevel === null) {
60
- return AUTO;
61
- }
62
- // 0 is a valid level ID
63
61
  return this._currentLevel;
64
62
  }
65
63
  get isReady() {
@@ -81,7 +79,7 @@ export default class DashPlayback extends BasePlayback {
81
79
  });
82
80
  dash.updateSettings(settings);
83
81
  if (id !== -1) {
84
- this._dash.setQualityFor('video', id);
82
+ this._dash.setRepresentationForTypeByIndex('video', id);
85
83
  }
86
84
  if (this._playbackType === Playback.VOD) {
87
85
  const curr_time = this._dash.time();
@@ -95,6 +93,7 @@ export default class DashPlayback extends BasePlayback {
95
93
  }
96
94
  }
97
95
  get _startTime() {
96
+ // TODO review
98
97
  if (this._playbackType === Playback.LIVE &&
99
98
  this._playlistType !== 'EVENT') {
100
99
  return this._extrapolatedStartTime;
@@ -141,7 +140,7 @@ export default class DashPlayback extends BasePlayback {
141
140
  }
142
141
  }
143
142
  _setup() {
144
- const dash = DASHJS.MediaPlayer().create();
143
+ const dash = MediaPlayer().create();
145
144
  this._dash = dash;
146
145
  this._dash.initialize();
147
146
  if (this.options.dash) {
@@ -149,6 +148,7 @@ export default class DashPlayback extends BasePlayback {
149
148
  streaming: {
150
149
  text: {
151
150
  defaultEnabled: false,
151
+ dispatchForManualRendering: true,
152
152
  },
153
153
  },
154
154
  }, this.options.dash);
@@ -157,27 +157,27 @@ export default class DashPlayback extends BasePlayback {
157
157
  this._dash.attachView(this.el);
158
158
  this._dash.setAutoPlay(false);
159
159
  this._dash.attachSource(this.options.src);
160
- this._dash.on(DASHJS.MediaPlayer.events.ERROR, this._onDASHJSSError);
161
- this._dash.on(DASHJS.MediaPlayer.events.PLAYBACK_ERROR, this._onPlaybackError);
162
- this._dash.on(DASHJS.MediaPlayer.events.STREAM_INITIALIZED, () => {
163
- const bitrates = dash.getBitrateInfoListFor('video');
160
+ this._dash.on(MediaPlayer.events.ERROR, this._onDASHJSSError);
161
+ this._dash.on(MediaPlayer.events.PLAYBACK_ERROR, this._onPlaybackError);
162
+ this._dash.on(MediaPlayer.events.STREAM_INITIALIZED, () => {
163
+ const bitrates = dash.getRepresentationsByType('video');
164
164
  this._updatePlaybackType();
165
165
  this._fillLevels(bitrates);
166
- const currentLevel = dash.getQualityFor('video');
167
- if (currentLevel !== -1) {
168
- this.trigger(Events.PLAYBACK_BITRATE, this.getLevel(currentLevel));
166
+ const currentLevel = dash.getCurrentRepresentationForType('video');
167
+ if (currentLevel) {
168
+ this.trigger(Events.PLAYBACK_BITRATE, this.getLevel(currentLevel.index));
169
169
  }
170
- dash.on(DASHJS.MediaPlayer.events.QUALITY_CHANGE_REQUESTED, (evt) => {
171
- const newLevel = this.getLevel(evt.newQuality);
170
+ dash.on(MediaPlayer.events.QUALITY_CHANGE_REQUESTED, (evt) => {
171
+ const newLevel = this.getLevel(evt.newRepresentation.index);
172
172
  this.onLevelSwitch(newLevel);
173
173
  });
174
174
  this.checkAudioTracks();
175
175
  });
176
- this._dash.on(DASHJS.MediaPlayer.events.QUALITY_CHANGE_RENDERED, (evt) => {
177
- const currentLevel = this.getLevel(evt.newQuality);
176
+ this._dash.on(MediaPlayer.events.QUALITY_CHANGE_RENDERED, (evt) => {
177
+ const currentLevel = this.getLevel(evt.newRepresentation.index);
178
178
  this.onLevelSwitchEnd(currentLevel);
179
179
  });
180
- this._dash.on(DASHJS.MediaPlayer.events.METRIC_ADDED, (e) => {
180
+ this._dash.on(MediaPlayer.events.METRIC_ADDED, (e) => {
181
181
  // Listen for the first manifest request in order to update player UI
182
182
  if (e.metric === 'DVRInfo') {
183
183
  // TODO fix typings
@@ -189,14 +189,27 @@ export default class DashPlayback extends BasePlayback {
189
189
  }
190
190
  }
191
191
  });
192
- this._dash.on(DASHJS.MediaPlayer.events.PLAYBACK_RATE_CHANGED, (e) => {
192
+ this._dash.on(MediaPlayer.events.PLAYBACK_RATE_CHANGED, (e) => {
193
193
  this.trigger(PlaybackEvents.PLAYBACK_RATE_CHANGED, e.playbackRate);
194
194
  });
195
- this._dash.on(DASHJS.MediaPlayer.events.TRACK_CHANGE_RENDERED, (e) => {
195
+ this._dash.on(MediaPlayer.events.TRACK_CHANGE_RENDERED, (e) => {
196
196
  if (e.mediaType === 'audio') {
197
197
  this.trigger(Events.PLAYBACK_AUDIO_CHANGED, toClapprTrack(e.newMediaInfo));
198
198
  }
199
199
  });
200
+ this._dash.on(MediaPlayer.events.CUE_ENTER, (e) => {
201
+ this.oncueenter?.({
202
+ end: e.end,
203
+ id: e.id,
204
+ start: e.start,
205
+ text: e.text,
206
+ });
207
+ });
208
+ this._dash.on(MediaPlayer.events.CUE_EXIT, (e) => {
209
+ this.oncueexit?.({
210
+ id: e.id,
211
+ });
212
+ });
200
213
  }
201
214
  render() {
202
215
  this._ready();
@@ -285,8 +298,7 @@ export default class DashPlayback extends BasePlayback {
285
298
  this.trigger(Events.PLAYBACK_SETTINGSUPDATE);
286
299
  }
287
300
  _onPlaybackError = (event) => {
288
- // TODO
289
- trace(`${T} _onPlaybackError`, { event });
301
+ trace(`${T} _onPlaybackError`, { type: event.type, code: event.error.code, message: event.error.message });
290
302
  };
291
303
  _onDASHJSSError = (event) => {
292
304
  this._stopTimeUpdateTimer();
@@ -294,17 +306,17 @@ export default class DashPlayback extends BasePlayback {
294
306
  const e = event.error;
295
307
  switch (e.code) {
296
308
  // TODO test handling of these errors
297
- case DASHJS.MediaPlayer.errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE:
298
- case DASHJS.MediaPlayer.errors.MANIFEST_LOADER_LOADING_FAILURE_ERROR_CODE:
299
- case DASHJS.MediaPlayer.errors.DOWNLOAD_ERROR_ID_MANIFEST_CODE:
300
- case DASHJS.MediaPlayer.errors.DOWNLOAD_ERROR_ID_CONTENT_CODE:
301
- case DASHJS.MediaPlayer.errors.DOWNLOAD_ERROR_ID_INITIALIZATION_CODE:
309
+ case MediaPlayer.errors.MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE:
310
+ case MediaPlayer.errors.MANIFEST_LOADER_LOADING_FAILURE_ERROR_CODE:
311
+ case MediaPlayer.errors.DOWNLOAD_ERROR_ID_MANIFEST_CODE:
312
+ case MediaPlayer.errors.DOWNLOAD_ERROR_ID_CONTENT_CODE:
313
+ case MediaPlayer.errors.DOWNLOAD_ERROR_ID_INITIALIZATION_CODE:
302
314
  // TODO these probably indicate a broken manifest and should be treated by removing the source
303
- case DASHJS.MediaPlayer.errors.MANIFEST_ERROR_ID_NOSTREAMS_CODE:
304
- case DASHJS.MediaPlayer.errors.MANIFEST_ERROR_ID_PARSE_CODE:
305
- case DASHJS.MediaPlayer.errors.MANIFEST_ERROR_ID_MULTIPLEXED_CODE:
306
- case DASHJS.MediaPlayer.errors.MEDIASOURCE_TYPE_UNSUPPORTED_CODE:
307
- case DASHJS.MediaPlayer.errors.SEGMENT_BASE_LOADER_ERROR_CODE:
315
+ case MediaPlayer.errors.MANIFEST_ERROR_ID_NOSTREAMS_CODE:
316
+ case MediaPlayer.errors.MANIFEST_ERROR_ID_PARSE_CODE:
317
+ case MediaPlayer.errors.MANIFEST_ERROR_ID_MULTIPLEXED_CODE:
318
+ case MediaPlayer.errors.MEDIASOURCE_TYPE_UNSUPPORTED_CODE:
319
+ case MediaPlayer.errors.SEGMENT_BASE_LOADER_ERROR_CODE:
308
320
  this.triggerError({
309
321
  code: PlaybackErrorCode.MediaSourceUnavailable,
310
322
  message: e.message,
@@ -363,7 +375,7 @@ export default class DashPlayback extends BasePlayback {
363
375
  if (!this._dash) {
364
376
  return false;
365
377
  }
366
- return (this._dash?.getDVRWindowSize() >= this._minDvrSize &&
378
+ return (this._dash?.getDvrWindow()?.size >= this._minDvrSize &&
367
379
  this.getPlaybackType() === Playback.LIVE);
368
380
  }
369
381
  _onProgress() {
@@ -402,10 +414,17 @@ export default class DashPlayback extends BasePlayback {
402
414
  }
403
415
  destroyInstance() {
404
416
  if (this._dash) {
405
- this._dash.off(DASHJS.MediaPlayer.events.ERROR, this._onDASHJSSError);
406
- this._dash.off(DASHJS.MediaPlayer.events.PLAYBACK_ERROR, this._onPlaybackError);
407
- this._dash.off(DASHJS.MediaPlayer.events.MANIFEST_LOADED, this.getDuration);
417
+ this._dash.off(MediaPlayer.events.ERROR, this._onDASHJSSError);
418
+ this._dash.off(MediaPlayer.events.PLAYBACK_ERROR, this._onPlaybackError);
419
+ this._dash.off(MediaPlayer.events.MANIFEST_LOADED, this.getDuration);
420
+ const tracks = this._dash.getTracksFor('text');
421
+ tracks.forEach(track => {
422
+ if (track.id) {
423
+ this._dash.removeExternalSubtitleById(track.id);
424
+ }
425
+ });
408
426
  this._dash.reset();
427
+ this._dash.destroy();
409
428
  this._dash = null;
410
429
  }
411
430
  }
@@ -423,11 +442,10 @@ export default class DashPlayback extends BasePlayback {
423
442
  }
424
443
  }
425
444
  _fillLevels(levels) {
426
- // TOOD check that levels[i].qualityIndex === i
427
445
  this._levels = levels.map((level) => {
428
446
  return {
429
- level: level.qualityIndex,
430
- bitrate: level.bitrate,
447
+ level: level.index,
448
+ bitrate: level.bitrateInKbit * 1000,
431
449
  width: level.width,
432
450
  height: level.height,
433
451
  };
@@ -451,9 +469,9 @@ export default class DashPlayback extends BasePlayback {
451
469
  return this._playbackType === Playback.VOD || this.dvrEnabled;
452
470
  }
453
471
  getLevel(quality) {
454
- const ret = this.levels.find((level) => level.level === quality);
455
- assert.ok(ret, 'Invalid quality level');
456
- return ret;
472
+ const level = this.levels.find((level) => level.level === quality);
473
+ assert.ok(level, 'Invalid quality level');
474
+ return level;
457
475
  }
458
476
  setPlaybackRate(rate) {
459
477
  this._dash?.setPlaybackRate(rate);
@@ -500,6 +518,31 @@ export default class DashPlayback extends BasePlayback {
500
518
  super._handleTextTrackChange();
501
519
  this._dash?.setTextTrack(this.closedCaptionsTrackId);
502
520
  }
521
+ setTextTrack(id) {
522
+ this._dash?.setTextTrack(id);
523
+ }
524
+ /**
525
+ * @override
526
+ */
527
+ get closedCaptionsTracks() {
528
+ const tt = this.getTextTracks();
529
+ return tt;
530
+ }
531
+ getTextTracks() {
532
+ return this._dash?.getTracksFor('text').map((t, index) => ({
533
+ id: index,
534
+ name: getTextTrackLabel(t) || "",
535
+ track: {
536
+ id: index,
537
+ label: getTextTrackLabel(t) || "",
538
+ language: t.lang,
539
+ mode: "hidden",
540
+ },
541
+ })) || [];
542
+ }
543
+ }
544
+ function getTextTrackLabel(t) {
545
+ return t.labels.find((l) => !l.lang || l.lang === t.lang)?.text;
503
546
  }
504
547
  DashPlayback.canPlay = function (resource, mimeType) {
505
548
  if (!isDashSource(resource, mimeType)) {
@@ -1,10 +1,9 @@
1
- import HLSJS, { Events as HlsEvents, type FragChangedData, type FragLoadedData, type LevelSwitchingData } from 'hls.js';
2
- import { QualityLevel } from '../../playback.types.js';
1
+ import HLSJS, { Events as HlsEvents, type LevelSwitchingData } from 'hls.js';
2
+ import { QualityLevel, VTTCueInfo } from '../../playback.types.js';
3
3
  import { PlaybackType } from '../../types.js';
4
4
  import { BasePlayback } from '../BasePlayback.js';
5
5
  import { AudioTrack } from '@clappr/core/types/base/playback/playback.js';
6
6
  export default class HlsPlayback extends BasePlayback {
7
- private _ccIsSetup;
8
7
  private _ccTracksUpdated;
9
8
  private _currentFragment;
10
9
  private _currentLevel;
@@ -28,6 +27,12 @@ export default class HlsPlayback extends BasePlayback {
28
27
  private _recoveredDecodingError;
29
28
  private _segmentTargetDuration;
30
29
  private _timeUpdateTimer;
30
+ oncueenter: ((e: VTTCueInfo) => void) | null;
31
+ oncueexit: ((e: {
32
+ id: string;
33
+ }) => void) | null;
34
+ private cues;
35
+ private currentCueId;
31
36
  /**
32
37
  * @internal
33
38
  */
@@ -66,7 +71,6 @@ export default class HlsPlayback extends BasePlayback {
66
71
  private _listenHLSEvents;
67
72
  private bindCustomListeners;
68
73
  private unbindCustomListeners;
69
- private _onFragmentParsingMetadata;
70
74
  protected render(): this;
71
75
  protected _ready(): void;
72
76
  private _recover;
@@ -83,10 +87,12 @@ export default class HlsPlayback extends BasePlayback {
83
87
  private _updateDvr;
84
88
  private _updateSettings;
85
89
  private _onHLSJSError;
90
+ private reload;
86
91
  private _keyIsDenied;
87
92
  _onTimeUpdate(): void;
88
93
  _onDurationChange(): void;
89
94
  _onProgress(): void;
95
+ private triggerCues;
90
96
  load(url: string): void;
91
97
  play(): void;
92
98
  pause(): void;
@@ -95,8 +101,6 @@ export default class HlsPlayback extends BasePlayback {
95
101
  private _updatePlaybackType;
96
102
  private _fillLevels;
97
103
  private _onLevelUpdated;
98
- _onFragmentChanged(evt: HlsEvents.FRAG_CHANGED, data: FragChangedData): void;
99
- _onFragmentLoaded(evt: HlsEvents.FRAG_LOADED, data: FragLoadedData): void;
100
104
  _onLevelSwitch(evt: HlsEvents.LEVEL_SWITCHING, data: LevelSwitchingData): void;
101
105
  _onLevelSwitched(evt: HlsEvents.LEVEL_SWITCHED, data: {
102
106
  level: number;
@@ -110,5 +114,27 @@ export default class HlsPlayback extends BasePlayback {
110
114
  switchAudioTrack(id: string): void;
111
115
  private _onAudioTracksUpdated;
112
116
  private _onAudioTrackSwitched;
117
+ setTextTrack(id: number): void;
118
+ /**
119
+ * @override
120
+ */
121
+ get closedCaptionsTracks(): {
122
+ id: number;
123
+ name: string;
124
+ track: {
125
+ id: number;
126
+ label: string;
127
+ language: string | undefined;
128
+ };
129
+ }[];
130
+ getTextTracks(): {
131
+ id: number;
132
+ name: string;
133
+ track: {
134
+ id: number;
135
+ label: string;
136
+ language: string | undefined;
137
+ };
138
+ }[];
113
139
  }
114
140
  //# sourceMappingURL=HlsPlayback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"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"}