@gcorevideo/player 2.6.10 → 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 +21 -13
- package/lib/Player.d.ts +3 -2
- package/lib/Player.d.ts.map +1 -1
- package/lib/Player.js +4 -0
- package/lib/playback.types.d.ts +12 -0
- package/lib/playback.types.d.ts.map +1 -1
- package/lib/plugins/dash-playback/DashPlayback.d.ts +3 -7
- package/lib/plugins/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/plugins/dash-playback/DashPlayback.js +9 -9
- package/lib/plugins/hls-playback/HlsPlayback.d.ts +2 -1
- package/lib/plugins/hls-playback/HlsPlayback.d.ts.map +1 -1
- package/lib/plugins/hls-playback/HlsPlayback.js +7 -3
- package/lib/types.d.ts +0 -6
- package/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Player.ts +9 -4
- package/src/playback.types.ts +20 -0
- package/src/plugins/dash-playback/DashPlayback.ts +13 -18
- package/src/plugins/hls-playback/HlsPlayback.ts +10 -6
- package/src/types.ts +0 -7
- package/tsconfig.tsbuildinfo +1 -1
- package/src/plugins/hls-playback/hls.js +0 -706
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.
|
|
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
|
|
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 {
|
|
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 {
|
|
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
|
});
|
|
@@ -42449,6 +42453,10 @@ class Player {
|
|
|
42449
42453
|
}
|
|
42450
42454
|
bindBitrateChangeHandler() {
|
|
42451
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
|
+
});
|
|
42452
42460
|
this.player?.core.activeContainer.on(Events$1.CONTAINER_BITRATE, (bitrate) => {
|
|
42453
42461
|
trace(`${T} bitrate has changed`, { bitrate });
|
|
42454
42462
|
this.qLevel = bitrate;
|
|
@@ -42582,12 +42590,12 @@ class SentryTracer {
|
|
|
42582
42590
|
}
|
|
42583
42591
|
}
|
|
42584
42592
|
|
|
42585
|
-
var version$1 = "2.
|
|
42593
|
+
var version$1 = "2.7.0";
|
|
42586
42594
|
|
|
42587
42595
|
var packages = {
|
|
42588
42596
|
"": {
|
|
42589
42597
|
name: "@gcorevideo/player",
|
|
42590
|
-
version: "2.
|
|
42598
|
+
version: "2.7.0",
|
|
42591
42599
|
license: "Apache-2.0",
|
|
42592
42600
|
dependencies: {
|
|
42593
42601
|
"@clappr/core": "^0.11.3",
|
package/lib/Player.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { PlaybackType, PlayerPlugin
|
|
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():
|
|
20
|
+
get bitrate(): QualityLevel | null;
|
|
20
21
|
get hd(): any;
|
|
21
22
|
get playbackType(): PlaybackType | undefined;
|
|
22
23
|
constructor(config: PlayerConfig);
|
package/lib/Player.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,
|
|
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
|
@@ -349,6 +349,10 @@ export class Player {
|
|
|
349
349
|
}
|
|
350
350
|
bindBitrateChangeHandler() {
|
|
351
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
|
+
});
|
|
352
356
|
this.player?.core.activeContainer.on(ClapprEvents.CONTAINER_BITRATE, (bitrate) => {
|
|
353
357
|
trace(`${T} bitrate has changed`, { bitrate });
|
|
354
358
|
this.qLevel = bitrate;
|
package/lib/playback.types.d.ts
CHANGED
|
@@ -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:
|
|
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,
|
|
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.
|
|
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
|
|
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 {
|
|
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():
|
|
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":"AAIA,OAAO,EAAU,UAAU,EAAqC,MAAM,cAAc,CAAC;AAErF,OAAO,KAAK,EAAE,EACZ,SAAS,EAET,KAAK,YAAY,EAEjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAG5B,KAAK,kBAAkB,EACxB,MAAM,QAAQ,CAAC;
|
|
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 {
|
|
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",
|
package/lib/types.d.ts.map
CHANGED
|
@@ -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
package/src/Player.ts
CHANGED
|
@@ -18,7 +18,7 @@ import type {
|
|
|
18
18
|
import type {
|
|
19
19
|
PlaybackType,
|
|
20
20
|
PlayerPlugin,
|
|
21
|
-
|
|
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:
|
|
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():
|
|
98
|
+
get bitrate(): QualityLevel | null {
|
|
98
99
|
return this.qLevel
|
|
99
100
|
}
|
|
100
101
|
|
|
@@ -434,9 +435,13 @@ export class Player {
|
|
|
434
435
|
|
|
435
436
|
private bindBitrateChangeHandler() {
|
|
436
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
|
+
});
|
|
437
442
|
this.player?.core.activeContainer.on(
|
|
438
443
|
ClapprEvents.CONTAINER_BITRATE,
|
|
439
|
-
(bitrate:
|
|
444
|
+
(bitrate: QualityLevel) => {
|
|
440
445
|
trace(`${T} bitrate has changed`, { bitrate })
|
|
441
446
|
|
|
442
447
|
this.qLevel = bitrate
|
package/src/playback.types.ts
CHANGED
|
@@ -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.
|
|
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
|
|
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:
|
|
629
|
+
_fillLevels(levels: DashBitrateInfo[]) {
|
|
635
630
|
// TOOD check that levels[i].qualityIndex === i
|
|
636
631
|
this._levels = levels.map((level) => {
|
|
637
|
-
return {
|
|
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:
|
|
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:
|
|
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 {
|
|
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
|
});
|
package/src/types.ts
CHANGED
|
@@ -100,13 +100,6 @@ export type TranslationSettings = Partial<
|
|
|
100
100
|
Record<LangTag, Record<TranslationKey, string>>
|
|
101
101
|
>
|
|
102
102
|
|
|
103
|
-
export type QualityLevelInfo = {
|
|
104
|
-
level: number
|
|
105
|
-
width: number
|
|
106
|
-
height: number
|
|
107
|
-
bitrate: number
|
|
108
|
-
}
|
|
109
|
-
|
|
110
103
|
export enum PlayerEvent {
|
|
111
104
|
Ready = 'ready',
|
|
112
105
|
Play = 'play',
|