@gcorevideo/player 2.6.9 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -12375,9 +12375,9 @@ class DashPlayback extends HTML5Video {
12375
12375
  dash.on(DASHJS.MediaPlayer.events.QUALITY_CHANGE_REQUESTED, (evt) => {
12376
12376
  // TODO
12377
12377
  assert.ok(this._levels, 'An array of levels is required to change quality');
12378
- const newLevel = this._levels.find((level) => level.id === evt.newQuality); // TODO or simply this._levels[evt.newQuality]?
12378
+ const newLevel = this._levels.find((level) => level.level === evt.newQuality); // TODO or simply this._levels[evt.newQuality]?
12379
12379
  assert.ok(newLevel, 'A valid level is required to change quality');
12380
- this.onLevelSwitch(newLevel.level);
12380
+ this.onLevelSwitch(newLevel);
12381
12381
  });
12382
12382
  });
12383
12383
  this._dash.on(DASHJS.MediaPlayer.events.METRIC_ADDED, (e) => {
@@ -12662,17 +12662,17 @@ class DashPlayback extends HTML5Video {
12662
12662
  _fillLevels(levels) {
12663
12663
  // TOOD check that levels[i].qualityIndex === i
12664
12664
  this._levels = levels.map((level) => {
12665
- return { id: level.qualityIndex, level: level };
12665
+ return {
12666
+ level: level.qualityIndex,
12667
+ bitrate: level.bitrate,
12668
+ width: level.width,
12669
+ height: level.height,
12670
+ };
12666
12671
  });
12667
12672
  this.trigger(Events$1.PLAYBACK_LEVELS_AVAILABLE, this._levels);
12668
12673
  }
12669
12674
  onLevelSwitch(currentLevel) {
12670
- this.trigger(Events$1.PLAYBACK_BITRATE, {
12671
- height: currentLevel.height,
12672
- width: currentLevel.width,
12673
- bitrate: currentLevel.bitrate,
12674
- level: currentLevel.qualityIndex,
12675
- });
12675
+ this.trigger(Events$1.PLAYBACK_BITRATE, currentLevel);
12676
12676
  }
12677
12677
  getPlaybackType() {
12678
12678
  return this._playbackType;
@@ -41843,7 +41843,12 @@ class HlsPlayback extends HTML5Video {
41843
41843
  _fillLevels() {
41844
41844
  assert.ok(this._hls, 'Hls.js instance is not available');
41845
41845
  this._levels = this._hls.levels.map((level, index) => {
41846
- return { id: index, level: level, label: `${level.bitrate / 1000}Kbps` };
41846
+ return {
41847
+ level: index, // or level.id?
41848
+ width: level.width,
41849
+ height: level.height,
41850
+ bitrate: level.bitrate,
41851
+ };
41847
41852
  });
41848
41853
  this.trigger(Events$1.PLAYBACK_LEVELS_AVAILABLE, this._levels);
41849
41854
  }
@@ -42004,7 +42009,6 @@ class HlsPlayback extends HTML5Video {
42004
42009
  this.trigger(Events$1.PLAYBACK_BITRATE, {
42005
42010
  height: currentLevel.height,
42006
42011
  width: currentLevel.width,
42007
- bandwidth: currentLevel.bitrate,
42008
42012
  bitrate: currentLevel.bitrate,
42009
42013
  level: data.level
42010
42014
  });
@@ -42248,6 +42252,13 @@ class Player {
42248
42252
  assert.ok(!this.player, 'Player already initialized');
42249
42253
  const player = new Player$1(coreOptions);
42250
42254
  this.player = player;
42255
+ if (player.core.activeContainer) {
42256
+ trace(`${T} tuneIn bindBitrateChangeHandler`);
42257
+ this.bindBitrateChangeHandler();
42258
+ }
42259
+ player.core.on(Events$1.CORE_ACTIVE_CONTAINER_CHANGED, () => {
42260
+ this.bindBitrateChangeHandler();
42261
+ }, null);
42251
42262
  // TODO checks if the whole thing is necessary
42252
42263
  this.tuneInTimerId = globalThis.setTimeout(() => {
42253
42264
  trace(`${T} tuneInTimer`, {
@@ -42269,13 +42280,17 @@ class Player {
42269
42280
  }
42270
42281
  this.tunedIn = true;
42271
42282
  const player = this.player;
42272
- if (player.core.activeContainer) {
42273
- trace(`${T} tuneIn bindBitrateChangeHandler`);
42274
- this.bindBitrateChangeHandler();
42275
- }
42276
- player.core.on(Events$1.CORE_ACTIVE_CONTAINER_CHANGED, () => {
42277
- this.bindBitrateChangeHandler();
42278
- }, null);
42283
+ // if (player.core.activeContainer) {
42284
+ // trace(`${T} tuneIn bindBitrateChangeHandler`)
42285
+ // this.bindBitrateChangeHandler()
42286
+ // }
42287
+ // player.core.on(
42288
+ // ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED,
42289
+ // () => {
42290
+ // this.bindBitrateChangeHandler()
42291
+ // },
42292
+ // null,
42293
+ // )
42279
42294
  if (Browser.isiOS && player.core.activePlayback) {
42280
42295
  player.core.activePlayback.$el.on('webkitendfullscreen', () => {
42281
42296
  try {
@@ -42438,6 +42453,10 @@ class Player {
42438
42453
  }
42439
42454
  bindBitrateChangeHandler() {
42440
42455
  trace(`${T} bindBitrateChangeHandler`, { activeContainer: this.player?.core?.activeContainer?.name });
42456
+ const currentPlayback = this.player?.core.activePlayback;
42457
+ currentPlayback.on(Events$1.PLAYBACK_LEVELS_AVAILABLE, (levels) => {
42458
+ // TODO
42459
+ });
42441
42460
  this.player?.core.activeContainer.on(Events$1.CONTAINER_BITRATE, (bitrate) => {
42442
42461
  trace(`${T} bitrate has changed`, { bitrate });
42443
42462
  this.qLevel = bitrate;
@@ -42571,12 +42590,12 @@ class SentryTracer {
42571
42590
  }
42572
42591
  }
42573
42592
 
42574
- var version$1 = "2.6.9";
42593
+ var version$1 = "2.7.0";
42575
42594
 
42576
42595
  var packages = {
42577
42596
  "": {
42578
42597
  name: "@gcorevideo/player",
42579
- version: "2.6.9",
42598
+ version: "2.7.0",
42580
42599
  license: "Apache-2.0",
42581
42600
  dependencies: {
42582
42601
  "@clappr/core": "^0.11.3",
package/lib/Player.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import type { PlaybackType, PlayerPlugin, QualityLevelInfo } from './types.js';
1
+ import type { PlaybackType, PlayerPlugin } from './types.js';
2
2
  import { PlayerConfig, PlayerEvent } from './types.js';
3
+ import { QualityLevel } from './playback.types.js';
3
4
  type PlayerEventHandler<T extends PlayerEvent> = () => void;
4
5
  export type PlaybackModule = 'dash' | 'hls' | 'native';
5
6
  /**
@@ -16,7 +17,7 @@ export declare class Player {
16
17
  private tunedIn;
17
18
  get activePlayback(): PlaybackModule | null;
18
19
  get activeSource(): string | null;
19
- get bitrate(): QualityLevelInfo | null;
20
+ get bitrate(): QualityLevel | null;
20
21
  get hd(): any;
21
22
  get playbackType(): PlaybackType | undefined;
22
23
  constructor(config: PlayerConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAWtD,KAAK,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,MAAM,IAAI,CAAA;AAiB3D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAItD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,QAAQ,CAA2B;IAE3C,OAAO,CAAC,aAAa,CAA6C;IAElE,OAAO,CAAC,OAAO,CAAQ;IAEvB,IAAI,cAAc,IAAI,cAAc,GAAG,IAAI,CAY1C;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAKhC;IAED,IAAI,OAAO,IAAI,gBAAgB,GAAG,IAAI,CAErC;IAED,IAAI,EAAE,QAEL;IAED,IAAI,YAAY,IAAI,YAAY,GAAG,SAAS,CAE3C;gBAEW,MAAM,EAAE,YAAY;IAIhC,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAIlE,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAInE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAIvC,OAAO,CAAC,SAAS;IAIX,IAAI,CAAC,aAAa,EAAE,WAAW;IAyBrC,OAAO;IAiBP,KAAK;IAKL,IAAI;IAKJ,MAAM,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAQjD,MAAM,CAAC,IAAI,EAAE,MAAM;IAKnB,IAAI;IAKJ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY;IAI1C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY;IAI5C,OAAO,CAAC,UAAU;YAqBJ,MAAM;IA0FpB,OAAO,CAAC,MAAM,CAgDb;IAED,OAAO,CAAC,gBAAgB;IAiDxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,iBAAiB;CAM1B"}
1
+ {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EAEb,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAQtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIlD,KAAK,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,MAAM,IAAI,CAAA;AAiB3D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAItD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,QAAQ,CAA2B;IAE3C,OAAO,CAAC,aAAa,CAA6C;IAElE,OAAO,CAAC,OAAO,CAAQ;IAEvB,IAAI,cAAc,IAAI,cAAc,GAAG,IAAI,CAY1C;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAKhC;IAED,IAAI,OAAO,IAAI,YAAY,GAAG,IAAI,CAEjC;IAED,IAAI,EAAE,QAEL;IAED,IAAI,YAAY,IAAI,YAAY,GAAG,SAAS,CAE3C;gBAEW,MAAM,EAAE,YAAY;IAIhC,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAIlE,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAInE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAIvC,OAAO,CAAC,SAAS;IAIX,IAAI,CAAC,aAAa,EAAE,WAAW;IAyBrC,OAAO;IAiBP,KAAK;IAKL,IAAI;IAKJ,MAAM,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAQjD,MAAM,CAAC,IAAI,EAAE,MAAM;IAKnB,IAAI;IAKJ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY;IAI1C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY;IAI5C,OAAO,CAAC,UAAU;YAiCJ,MAAM;IA0FpB,OAAO,CAAC,MAAM,CAgDb;IAED,OAAO,CAAC,gBAAgB;IAiDxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,iBAAiB;CAM1B"}
package/lib/Player.js CHANGED
@@ -148,6 +148,13 @@ export class Player {
148
148
  assert.ok(!this.player, 'Player already initialized');
149
149
  const player = new PlayerClappr(coreOptions);
150
150
  this.player = player;
151
+ if (player.core.activeContainer) {
152
+ trace(`${T} tuneIn bindBitrateChangeHandler`);
153
+ this.bindBitrateChangeHandler();
154
+ }
155
+ player.core.on(ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED, () => {
156
+ this.bindBitrateChangeHandler();
157
+ }, null);
151
158
  // TODO checks if the whole thing is necessary
152
159
  this.tuneInTimerId = globalThis.setTimeout(() => {
153
160
  trace(`${T} tuneInTimer`, {
@@ -169,13 +176,17 @@ export class Player {
169
176
  }
170
177
  this.tunedIn = true;
171
178
  const player = this.player;
172
- if (player.core.activeContainer) {
173
- trace(`${T} tuneIn bindBitrateChangeHandler`);
174
- this.bindBitrateChangeHandler();
175
- }
176
- player.core.on(ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED, () => {
177
- this.bindBitrateChangeHandler();
178
- }, null);
179
+ // if (player.core.activeContainer) {
180
+ // trace(`${T} tuneIn bindBitrateChangeHandler`)
181
+ // this.bindBitrateChangeHandler()
182
+ // }
183
+ // player.core.on(
184
+ // ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED,
185
+ // () => {
186
+ // this.bindBitrateChangeHandler()
187
+ // },
188
+ // null,
189
+ // )
179
190
  if (Browser.isiOS && player.core.activePlayback) {
180
191
  player.core.activePlayback.$el.on('webkitendfullscreen', () => {
181
192
  try {
@@ -338,6 +349,10 @@ export class Player {
338
349
  }
339
350
  bindBitrateChangeHandler() {
340
351
  trace(`${T} bindBitrateChangeHandler`, { activeContainer: this.player?.core?.activeContainer?.name });
352
+ const currentPlayback = this.player?.core.activePlayback;
353
+ currentPlayback.on(ClapprEvents.PLAYBACK_LEVELS_AVAILABLE, (levels) => {
354
+ // TODO
355
+ });
341
356
  this.player?.core.activeContainer.on(ClapprEvents.CONTAINER_BITRATE, (bitrate) => {
342
357
  trace(`${T} bitrate has changed`, { bitrate });
343
358
  this.qLevel = bitrate;
@@ -9,4 +9,16 @@ export type TimeProgress = TimePosition & {
9
9
  export type TimeUpdate = TimePosition & {
10
10
  firstFragDateTime: number;
11
11
  };
12
+ export type BitrateInfo = {
13
+ bitrate: number;
14
+ width: number;
15
+ height: number;
16
+ };
17
+ export type QualityLevel = {
18
+ level: number;
19
+ width: number;
20
+ height: number;
21
+ bitrate: number;
22
+ };
23
+ export type QualityLevelInfo = QualityLevel;
12
24
  //# sourceMappingURL=playback.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"playback.types.d.ts","sourceRoot":"","sources":["../src/playback.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;CAAE,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"playback.types.d.ts","sourceRoot":"","sources":["../src/playback.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;CAAE,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAA;AAOD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAGD,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC"}
@@ -1,12 +1,8 @@
1
1
  import { HTML5Video, Playback } from '@clappr/core';
2
- import DASHJS, { ErrorEvent as DashErrorEvent, PlaybackErrorEvent as DashPlaybackErrorEvent, type BitrateInfo, IManifestInfo } from 'dashjs';
3
- import { TimePosition, TimeValue } from '../../playback.types.js';
2
+ import DASHJS, { ErrorEvent as DashErrorEvent, PlaybackErrorEvent as DashPlaybackErrorEvent, type BitrateInfo as DashBitrateInfo, IManifestInfo } from 'dashjs';
3
+ import { QualityLevel, TimePosition, TimeValue } from '../../playback.types.js';
4
4
  type PlaybackType = typeof Playback.VOD | typeof Playback.LIVE | typeof Playback.AOD | typeof Playback.NO_OP;
5
5
  type PlaylistType = string;
6
- type QualityLevel = {
7
- id: number;
8
- level: BitrateInfo;
9
- };
10
6
  type LocalTimeCorrelation = {
11
7
  local: number;
12
8
  remote: number;
@@ -68,7 +64,7 @@ export default class DashPlayback extends HTML5Video {
68
64
  stop(): void;
69
65
  destroy(): import("@clappr/core").UIObject;
70
66
  _updatePlaybackType(): void;
71
- _fillLevels(levels: BitrateInfo[]): void;
67
+ _fillLevels(levels: DashBitrateInfo[]): void;
72
68
  private onLevelSwitch;
73
69
  getPlaybackType(): string;
74
70
  isSeekEnabled(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/plugins/dash-playback/DashPlayback.ts"],"names":[],"mappings":"AAIA,OAAO,EAAU,UAAU,EAAO,QAAQ,EAAS,MAAM,cAAc,CAAA;AAEvE,OAAO,MAAM,EAAE,EACb,UAAU,IAAI,cAAc,EAC5B,kBAAkB,IAAI,sBAAsB,EAC5C,KAAK,WAAW,EAEhB,aAAa,EACd,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAMjE,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,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,WAAW,CAAA;CACnB,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAID,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU;IAClD,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAO;IAErC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAO;IAKnC,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;IAGzC,gBAAgB,EAAE,SAAS,CAAI;IAE/B,KAAK,EAAE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAO;IAE5C,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;IAGzC,sBAAsB,EAAE,SAAS,GAAG,IAAI,CAAO;IAE/C,gBAAgB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAO;IAE9D,IAAI,IAAI,WAEP;IAED,IAAI,MAAM,IAAI,YAAY,EAAE,CAE3B;IAED,IAAI,YAAY,IAAI,MAAM,CAMzB;IAED,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,CAAC,EAAE,EAAE,MAAM,EAiC1B;IAED,IAAI,UAAU,WASb;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;IAwEN,MAAM;IAMN,MAAM;IAMN,SAAS;IAIT,qBAAqB;IAQrB,oBAAoB;IAMpB,kBAAkB;IAOlB,WAAW,IAAI,SAAS;IAQxB,cAAc,IAAI,SAAS;IAU3B,kBAAkB,IAAI,SAAS;IAI/B,cAAc,CAAC,UAAU,EAAE,MAAM;IAejC,IAAI,CAAC,IAAI,EAAE,SAAS;IAgBpB,eAAe;IAIf,UAAU,CAAC,MAAM,EAAE,OAAO;IAK1B,eAAe;IAaf,gBAAgB,UAAW,sBAAsB,UAEhD;IAED,eAAe,UAAW,cAAc,UAwGvC;IAED,aAAa;IAqBb,iBAAiB;IAWjB,IAAI,UAAU,YASb;IAED,WAAW;IAmBX,IAAI;IAUJ,KAAK;IAWL,IAAI;IASJ,OAAO;IAkBP,mBAAmB;IAQnB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE;IAQjC,OAAO,CAAC,aAAa;IASrB,eAAe;IAIf,aAAa;CAGd"}
1
+ {"version":3,"file":"DashPlayback.d.ts","sourceRoot":"","sources":["../../../src/plugins/dash-playback/DashPlayback.ts"],"names":[],"mappings":"AAIA,OAAO,EAAU,UAAU,EAAO,QAAQ,EAAS,MAAM,cAAc,CAAA;AAEvE,OAAO,MAAM,EAAE,EACb,UAAU,IAAI,cAAc,EAC5B,kBAAkB,IAAI,sBAAsB,EAC5C,KAAK,WAAW,IAAI,eAAe,EAEnC,aAAa,EACd,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAe,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAM5F,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,UAAU;IAClD,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAO;IAErC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAO;IAKnC,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;IAGzC,gBAAgB,EAAE,SAAS,CAAI;IAE/B,KAAK,EAAE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAO;IAE5C,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;IAGzC,sBAAsB,EAAE,SAAS,GAAG,IAAI,CAAO;IAE/C,gBAAgB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAO;IAE9D,IAAI,IAAI,WAEP;IAED,IAAI,MAAM,IAAI,YAAY,EAAE,CAE3B;IAED,IAAI,YAAY,IAAI,MAAM,CAMzB;IAED,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,CAAC,EAAE,EAAE,MAAM,EAiC1B;IAED,IAAI,UAAU,WASb;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;IAwEN,MAAM;IAMN,MAAM;IAMN,SAAS;IAIT,qBAAqB;IAQrB,oBAAoB;IAMpB,kBAAkB;IAOlB,WAAW,IAAI,SAAS;IAQxB,cAAc,IAAI,SAAS;IAU3B,kBAAkB,IAAI,SAAS;IAI/B,cAAc,CAAC,UAAU,EAAE,MAAM;IAejC,IAAI,CAAC,IAAI,EAAE,SAAS;IAgBpB,eAAe;IAIf,UAAU,CAAC,MAAM,EAAE,OAAO;IAK1B,eAAe;IAaf,gBAAgB,UAAW,sBAAsB,UAEhD;IAED,eAAe,UAAW,cAAc,UAwGvC;IAED,aAAa;IAqBb,iBAAiB;IAWjB,IAAI,UAAU,YASb;IAED,WAAW;IAmBX,IAAI;IAUJ,KAAK;IAWL,IAAI;IASJ,OAAO;IAkBP,mBAAmB;IAQnB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE;IAarC,OAAO,CAAC,aAAa;IAIrB,eAAe;IAIf,aAAa;CAGd"}
@@ -164,9 +164,9 @@ export default class DashPlayback extends HTML5Video {
164
164
  dash.on(DASHJS.MediaPlayer.events.QUALITY_CHANGE_REQUESTED, (evt) => {
165
165
  // TODO
166
166
  assert.ok(this._levels, 'An array of levels is required to change quality');
167
- const newLevel = this._levels.find((level) => level.id === evt.newQuality); // TODO or simply this._levels[evt.newQuality]?
167
+ const newLevel = this._levels.find((level) => level.level === evt.newQuality); // TODO or simply this._levels[evt.newQuality]?
168
168
  assert.ok(newLevel, 'A valid level is required to change quality');
169
- this.onLevelSwitch(newLevel.level);
169
+ this.onLevelSwitch(newLevel);
170
170
  });
171
171
  });
172
172
  this._dash.on(DASHJS.MediaPlayer.events.METRIC_ADDED, (e) => {
@@ -451,17 +451,17 @@ export default class DashPlayback extends HTML5Video {
451
451
  _fillLevels(levels) {
452
452
  // TOOD check that levels[i].qualityIndex === i
453
453
  this._levels = levels.map((level) => {
454
- return { id: level.qualityIndex, level: level };
454
+ return {
455
+ level: level.qualityIndex,
456
+ bitrate: level.bitrate,
457
+ width: level.width,
458
+ height: level.height,
459
+ };
455
460
  });
456
461
  this.trigger(Events.PLAYBACK_LEVELS_AVAILABLE, this._levels);
457
462
  }
458
463
  onLevelSwitch(currentLevel) {
459
- this.trigger(Events.PLAYBACK_BITRATE, {
460
- height: currentLevel.height,
461
- width: currentLevel.width,
462
- bitrate: currentLevel.bitrate,
463
- level: currentLevel.qualityIndex,
464
- });
464
+ this.trigger(Events.PLAYBACK_BITRATE, currentLevel);
465
465
  }
466
466
  getPlaybackType() {
467
467
  return this._playbackType;
@@ -1,5 +1,6 @@
1
1
  import { HTML5Video } from '@clappr/core';
2
2
  import HLSJS, { HlsEvents, type HlsErrorData, type FragChangedData, type FragLoadedData, type FragParsingMetadataData, type LevelSwitchingData } from 'hls.js';
3
+ import { QualityLevel } from '../../playback.types.js';
3
4
  import { PlaybackType } from '../../types';
4
5
  type ErrorInfo = Record<string, unknown>;
5
6
  export default class HlsPlayback extends HTML5Video {
@@ -32,7 +33,7 @@ export default class HlsPlayback extends HTML5Video {
32
33
  get supportedVersion(): {
33
34
  min: string;
34
35
  };
35
- get levels(): any[];
36
+ get levels(): QualityLevel[];
36
37
  get currentLevel(): number;
37
38
  get isReady(): boolean;
38
39
  set currentLevel(id: number);
@@ -1 +1 @@
1
- {"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/plugins/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/plugins/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@ import { Events, HTML5Video, Log, Playback, PlayerError, Utils } from '@clappr/c
5
5
  import assert from 'assert';
6
6
  import HLSJS from 'hls.js';
7
7
  import { trace } from '../../trace/index.js';
8
- const { now, listContainsIgnoreCase } = Utils;
9
8
  import { CLAPPR_VERSION } from "../../build.js";
9
+ const { now, listContainsIgnoreCase } = Utils;
10
10
  const AUTO = -1;
11
11
  const DEFAULT_RECOVER_ATTEMPTS = 16;
12
12
  Events.register('PLAYBACK_FRAGMENT_CHANGED');
@@ -559,7 +559,12 @@ export default class HlsPlayback extends HTML5Video {
559
559
  _fillLevels() {
560
560
  assert.ok(this._hls, 'Hls.js instance is not available');
561
561
  this._levels = this._hls.levels.map((level, index) => {
562
- return { id: index, level: level, label: `${level.bitrate / 1000}Kbps` };
562
+ return {
563
+ level: index, // or level.id?
564
+ width: level.width,
565
+ height: level.height,
566
+ bitrate: level.bitrate,
567
+ };
563
568
  });
564
569
  this.trigger(Events.PLAYBACK_LEVELS_AVAILABLE, this._levels);
565
570
  }
@@ -720,7 +725,6 @@ export default class HlsPlayback extends HTML5Video {
720
725
  this.trigger(Events.PLAYBACK_BITRATE, {
721
726
  height: currentLevel.height,
722
727
  width: currentLevel.width,
723
- bandwidth: currentLevel.bitrate,
724
728
  bitrate: currentLevel.bitrate,
725
729
  level: data.level
726
730
  });
package/lib/types.d.ts CHANGED
@@ -79,12 +79,6 @@ export type StreamMediaSource = {
79
79
  export type SrcProjectionType = 'regular' | '360' | 'vr180' | 'vr360tb';
80
80
  export type ProjectionType = '360' | '180' | '360_TB';
81
81
  export type TranslationSettings = Partial<Record<LangTag, Record<TranslationKey, string>>>;
82
- export type QualityLevelInfo = {
83
- level: number;
84
- width: number;
85
- height: number;
86
- bitrate: number;
87
- };
88
82
  export declare enum PlayerEvent {
89
83
  Ready = "ready",
90
84
  Play = "play",
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.6.9",
3
+ "version": "2.7.0",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
package/src/Player.ts CHANGED
@@ -18,7 +18,7 @@ import type {
18
18
  import type {
19
19
  PlaybackType,
20
20
  PlayerPlugin,
21
- QualityLevelInfo,
21
+ // QualityLevel,
22
22
  } from './types.js'
23
23
  import { reportError, trace } from './trace/index.js'
24
24
  import { PlayerConfig, PlayerEvent } from './types.js'
@@ -29,6 +29,7 @@ import {
29
29
  buildSourcesSet,
30
30
  unwrapSource,
31
31
  } from './utils/mediaSources.js'
32
+ import { QualityLevel } from './playback.types.js'
32
33
 
33
34
  // TODO implement transport retry/failover and fallback logic
34
35
 
@@ -57,7 +58,7 @@ type PluginOptions = Record<string, unknown>
57
58
  * @beta
58
59
  */
59
60
  export class Player {
60
- private qLevel: QualityLevelInfo | null = null
61
+ private qLevel: QualityLevel | null = null
61
62
 
62
63
  private config: PlayerConfig = DEFAULT_OPTIONS
63
64
 
@@ -94,7 +95,7 @@ export class Player {
94
95
  return this.player.core.activePlayback.options.src
95
96
  }
96
97
 
97
- get bitrate(): QualityLevelInfo | null {
98
+ get bitrate(): QualityLevel | null {
98
99
  return this.qLevel
99
100
  }
100
101
 
@@ -214,6 +215,18 @@ export class Player {
214
215
  const player = new PlayerClappr(coreOptions)
215
216
  this.player = player
216
217
 
218
+ if (player.core.activeContainer) {
219
+ trace(`${T} tuneIn bindBitrateChangeHandler`)
220
+ this.bindBitrateChangeHandler()
221
+ }
222
+ player.core.on(
223
+ ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED,
224
+ () => {
225
+ this.bindBitrateChangeHandler()
226
+ },
227
+ null,
228
+ )
229
+
217
230
  // TODO checks if the whole thing is necessary
218
231
  this.tuneInTimerId = globalThis.setTimeout(() => {
219
232
  trace(`${T} tuneInTimer`, {
@@ -236,17 +249,17 @@ export class Player {
236
249
  }
237
250
  this.tunedIn = true
238
251
  const player = this.player
239
- if (player.core.activeContainer) {
240
- trace(`${T} tuneIn bindBitrateChangeHandler`)
241
- this.bindBitrateChangeHandler()
242
- }
243
- player.core.on(
244
- ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED,
245
- () => {
246
- this.bindBitrateChangeHandler()
247
- },
248
- null,
249
- )
252
+ // if (player.core.activeContainer) {
253
+ // trace(`${T} tuneIn bindBitrateChangeHandler`)
254
+ // this.bindBitrateChangeHandler()
255
+ // }
256
+ // player.core.on(
257
+ // ClapprEvents.CORE_ACTIVE_CONTAINER_CHANGED,
258
+ // () => {
259
+ // this.bindBitrateChangeHandler()
260
+ // },
261
+ // null,
262
+ // )
250
263
  if (Browser.isiOS && player.core.activePlayback) {
251
264
  player.core.activePlayback.$el.on('webkitendfullscreen', () => {
252
265
  try {
@@ -422,9 +435,13 @@ export class Player {
422
435
 
423
436
  private bindBitrateChangeHandler() {
424
437
  trace(`${T} bindBitrateChangeHandler`, { activeContainer: this.player?.core?.activeContainer?.name })
438
+ const currentPlayback = this.player?.core.activePlayback;
439
+ currentPlayback.on(ClapprEvents.PLAYBACK_LEVELS_AVAILABLE, (levels: QualityLevel[]) => {
440
+ // TODO
441
+ });
425
442
  this.player?.core.activeContainer.on(
426
443
  ClapprEvents.CONTAINER_BITRATE,
427
- (bitrate: QualityLevelInfo) => {
444
+ (bitrate: QualityLevel) => {
428
445
  trace(`${T} bitrate has changed`, { bitrate })
429
446
 
430
447
  this.qLevel = bitrate
@@ -11,3 +11,23 @@ export type TimeUpdate = TimePosition & {
11
11
  firstFragDateTime: number;
12
12
  };
13
13
 
14
+ export type BitrateInfo = {
15
+ bitrate: number;
16
+ width: number;
17
+ height: number;
18
+ }
19
+
20
+ // TODO decide which one to use
21
+ // export type QualityLevel = {
22
+ // id: number
23
+ // level: BitrateInfo
24
+ // }
25
+ export type QualityLevel = {
26
+ level: number // index
27
+ width: number
28
+ height: number
29
+ bitrate: number
30
+ }
31
+
32
+ // TODO drop
33
+ export type QualityLevelInfo = QualityLevel;
@@ -7,13 +7,13 @@ import assert from 'assert'
7
7
  import DASHJS, {
8
8
  ErrorEvent as DashErrorEvent,
9
9
  PlaybackErrorEvent as DashPlaybackErrorEvent,
10
- type BitrateInfo,
10
+ type BitrateInfo as DashBitrateInfo,
11
11
  MetricEvent as DashMetricEvent,
12
12
  IManifestInfo,
13
13
  } from 'dashjs'
14
14
  import { trace } from '../../trace/index.js'
15
15
 
16
- import { TimePosition, TimeValue } from '../../playback.types.js'
16
+ import { BitrateInfo, QualityLevel, TimePosition, TimeValue } from '../../playback.types.js'
17
17
 
18
18
  const AUTO = -1
19
19
 
@@ -27,11 +27,6 @@ type PlaybackType =
27
27
 
28
28
  type PlaylistType = string // TODO union
29
29
 
30
- type QualityLevel = {
31
- id: number
32
- level: BitrateInfo
33
- }
34
-
35
30
  type LocalTimeCorrelation = {
36
31
  local: number
37
32
  remote: number
@@ -260,10 +255,10 @@ export default class DashPlayback extends HTML5Video {
260
255
  'An array of levels is required to change quality',
261
256
  )
262
257
  const newLevel = this._levels.find(
263
- (level) => level.id === evt.newQuality,
258
+ (level) => level.level === evt.newQuality,
264
259
  ) // TODO or simply this._levels[evt.newQuality]?
265
260
  assert.ok(newLevel, 'A valid level is required to change quality')
266
- this.onLevelSwitch(newLevel.level)
261
+ this.onLevelSwitch(newLevel)
267
262
  })
268
263
  })
269
264
 
@@ -631,21 +626,21 @@ export default class DashPlayback extends HTML5Video {
631
626
  this._playbackType = this._dash.isDynamic() ? Playback.LIVE : Playback.VOD
632
627
  }
633
628
 
634
- _fillLevels(levels: BitrateInfo[]) {
629
+ _fillLevels(levels: DashBitrateInfo[]) {
635
630
  // TOOD check that levels[i].qualityIndex === i
636
631
  this._levels = levels.map((level) => {
637
- return { id: level.qualityIndex, level: level }
632
+ return {
633
+ level: level.qualityIndex,
634
+ bitrate: level.bitrate,
635
+ width: level.width,
636
+ height: level.height,
637
+ }
638
638
  })
639
639
  this.trigger(Events.PLAYBACK_LEVELS_AVAILABLE, this._levels)
640
640
  }
641
641
 
642
- private onLevelSwitch(currentLevel: BitrateInfo) {
643
- this.trigger(Events.PLAYBACK_BITRATE, {
644
- height: currentLevel.height,
645
- width: currentLevel.width,
646
- bitrate: currentLevel.bitrate,
647
- level: currentLevel.qualityIndex,
648
- })
642
+ private onLevelSwitch(currentLevel: QualityLevel) {
643
+ this.trigger(Events.PLAYBACK_BITRATE, currentLevel)
649
644
  }
650
645
 
651
646
  getPlaybackType() {
@@ -17,15 +17,15 @@ import HLSJS, {
17
17
  type LevelSwitchingData,
18
18
  } from 'hls.js';
19
19
 
20
- import { TimePosition } from '../../playback.types.js';
20
+ import { QualityLevel, TimePosition } from '../../playback.types.js';
21
21
  import { trace } from '../../trace/index.js';
22
22
  import { PlaybackType } from '../../types';
23
23
  import { TimerId } from '../../utils/types';
24
24
 
25
- const { now, listContainsIgnoreCase } = Utils;
26
-
27
25
  import { CLAPPR_VERSION } from "../../build.js";
28
26
 
27
+ const { now, listContainsIgnoreCase } = Utils;
28
+
29
29
  const AUTO = -1;
30
30
  const DEFAULT_RECOVER_ATTEMPTS = 16;
31
31
 
@@ -84,7 +84,7 @@ export default class HlsPlayback extends HTML5Video {
84
84
 
85
85
  private _lastTimeUpdate: TimePosition | null = null;
86
86
 
87
- private _levels: any[] | null = null;
87
+ private _levels: QualityLevel[] | null = null;
88
88
 
89
89
  private _localStartTimeCorrelation: TimeCorrelation | null = null;
90
90
 
@@ -707,7 +707,12 @@ export default class HlsPlayback extends HTML5Video {
707
707
  private _fillLevels() {
708
708
  assert.ok(this._hls, 'Hls.js instance is not available');
709
709
  this._levels = this._hls.levels.map((level, index) => {
710
- return { id: index, level: level, label: `${level.bitrate / 1000}Kbps` };
710
+ return {
711
+ level: index, // or level.id?
712
+ width: level.width,
713
+ height: level.height,
714
+ bitrate: level.bitrate,
715
+ };
711
716
  });
712
717
  this.trigger(Events.PLAYBACK_LEVELS_AVAILABLE, this._levels);
713
718
  }
@@ -878,7 +883,6 @@ export default class HlsPlayback extends HTML5Video {
878
883
  this.trigger(Events.PLAYBACK_BITRATE, {
879
884
  height: currentLevel.height,
880
885
  width: currentLevel.width,
881
- bandwidth: currentLevel.bitrate,
882
886
  bitrate: currentLevel.bitrate,
883
887
  level: data.level
884
888
  });