@gcorevideo/player 2.20.11 → 2.20.13
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/core.js +26 -2
- package/dist/index.css +953 -953
- package/dist/index.js +61 -55
- package/dist/player.d.ts +47 -15
- package/dist/plugins/index.css +1475 -1475
- package/dist/plugins/index.js +36 -49
- package/docs/api/player.contextmenupluginsettings.md +1 -1
- package/docs/api/player.favicon.md +4 -174
- package/docs/api/{player.favicon.bindevents.md → player.faviconpluginsettings.faviconcolor.md} +5 -7
- package/docs/api/{player.favicon._constructor_.md → player.faviconpluginsettings.md} +17 -8
- package/docs/api/player.md +15 -4
- package/docs/api/{player.favicon.disable.md → player.mediacontrol.getcenterpanel.md} +4 -4
- package/docs/api/{player.favicon.configure.md → player.mediacontrol.getleftpanel.md} +8 -4
- package/docs/api/player.mediacontrol.md +30 -11
- package/docs/api/player.playbackerror.md +2 -2
- package/docs/api/player.playbackerror.origin.md +1 -1
- package/docs/api/player.playbackerror.scope.md +1 -1
- package/docs/api/player.poster.md +1 -1
- package/docs/api/player.sourcecontroller.md +2 -33
- package/lib/Player.js +1 -1
- package/lib/playback/HTML5Video.d.ts +5 -0
- package/lib/playback/HTML5Video.d.ts.map +1 -1
- package/lib/playback/HTML5Video.js +21 -0
- package/lib/playback/hls-playback/HlsPlayback.d.ts +2 -2
- package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
- package/lib/playback/hls-playback/HlsPlayback.js +4 -0
- package/lib/playback.types.d.ts +2 -2
- package/lib/plugins/click-to-pause/ClickToPause.d.ts.map +1 -1
- package/lib/plugins/click-to-pause/ClickToPause.js +0 -4
- package/lib/plugins/context-menu/ContextMenu.d.ts +1 -1
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +0 -1
- package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
- package/lib/plugins/error-screen/ErrorScreen.js +0 -1
- package/lib/plugins/favicon/Favicon.d.ts +30 -3
- package/lib/plugins/favicon/Favicon.d.ts.map +1 -1
- package/lib/plugins/favicon/Favicon.js +28 -35
- package/lib/plugins/media-control/MediaControl.d.ts +1 -8
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +2 -9
- package/lib/plugins/poster/Poster.d.ts +2 -0
- package/lib/plugins/poster/Poster.d.ts.map +1 -1
- package/lib/plugins/poster/Poster.js +3 -3
- package/lib/plugins/source-controller/SourceController.d.ts +3 -0
- package/lib/plugins/source-controller/SourceController.d.ts.map +1 -1
- package/lib/plugins/source-controller/SourceController.js +3 -0
- package/package.json +1 -1
- package/src/Player.ts +1 -1
- package/src/playback/HTML5Video.ts +29 -1
- package/src/playback/__tests__/HTML5Video.test.ts +47 -0
- package/src/playback/hls-playback/HlsPlayback.ts +5 -1
- package/src/playback.types.ts +2 -2
- package/src/plugins/click-to-pause/ClickToPause.ts +0 -5
- package/src/plugins/context-menu/ContextMenu.ts +1 -1
- package/src/plugins/dvr-controls/DvrControls.ts +0 -1
- package/src/plugins/error-screen/ErrorScreen.ts +0 -1
- package/src/plugins/favicon/Favicon.ts +38 -41
- package/src/plugins/media-control/MediaControl.ts +2 -9
- package/src/plugins/poster/Poster.ts +4 -3
- package/src/plugins/source-controller/SourceController.ts +3 -0
- package/temp/player.api.json +101 -246
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.favicon.destroy.md +0 -18
- package/docs/api/player.favicon.name.md +0 -14
- package/docs/api/player.favicon.supportedversion.md +0 -16
- package/docs/api/player.sourcecontroller._constructor_.md +0 -50
|
@@ -22,6 +22,8 @@ Have a look at the [source failover diagram](https://miro.com/app/board/uXjVLiN1
|
|
|
22
22
|
|
|
23
23
|
This plugin does not expose any public methods apart from required by the Clappr plugin interface. It is supposed to work autonomously.
|
|
24
24
|
|
|
25
|
+
The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `SourceController` class.
|
|
26
|
+
|
|
25
27
|
## Example
|
|
26
28
|
|
|
27
29
|
|
|
@@ -31,36 +33,3 @@ import { SourceController } from '@gcorevideo/player'
|
|
|
31
33
|
Player.registerPlugin(SourceController)
|
|
32
34
|
```
|
|
33
35
|
|
|
34
|
-
## Constructors
|
|
35
|
-
|
|
36
|
-
<table><thead><tr><th>
|
|
37
|
-
|
|
38
|
-
Constructor
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
</th><th>
|
|
42
|
-
|
|
43
|
-
Modifiers
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
</th><th>
|
|
47
|
-
|
|
48
|
-
Description
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
</th></tr></thead>
|
|
52
|
-
<tbody><tr><td>
|
|
53
|
-
|
|
54
|
-
[(constructor)(core)](./player.sourcecontroller._constructor_.md)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
</td><td>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
</td><td>
|
|
61
|
-
|
|
62
|
-
**_(BETA)_** Constructs a new instance of the `SourceController` class
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
</td></tr>
|
|
66
|
-
</tbody></table>
|
package/lib/Player.js
CHANGED
|
@@ -101,7 +101,7 @@ export class Player {
|
|
|
101
101
|
const coreOpts = this.buildCoreOptions(playerElement);
|
|
102
102
|
const { core, container } = Player.getRegisteredPlugins();
|
|
103
103
|
trace(`${T} init`, {
|
|
104
|
-
registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.name),
|
|
104
|
+
registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.prototype.name),
|
|
105
105
|
});
|
|
106
106
|
coreOpts.plugins = {
|
|
107
107
|
core: Object.values(core),
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import { ErrorOptions } from '@clappr/core';
|
|
1
2
|
import { BasePlayback } from './BasePlayback.js';
|
|
2
3
|
export default class HTML5Video extends BasePlayback {
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
createError(errorData: any, options?: ErrorOptions): Error;
|
|
3
8
|
}
|
|
4
9
|
//# sourceMappingURL=HTML5Video.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HTML5Video.d.ts","sourceRoot":"","sources":["../../src/playback/HTML5Video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"HTML5Video.d.ts","sourceRoot":"","sources":["../../src/playback/HTML5Video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAClD;;OAEG;IACM,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;CAqB5D"}
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
import { PlaybackErrorCode } from '../playback.types.js';
|
|
1
2
|
import { BasePlayback } from './BasePlayback.js';
|
|
2
3
|
export default class HTML5Video extends BasePlayback {
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
createError(errorData, options) {
|
|
8
|
+
const i18n = this.i18n ||
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
(this.core && this.core.i18n) ||
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
(this.container && this.container.i18n);
|
|
13
|
+
if (i18n &&
|
|
14
|
+
!errorData.UI &&
|
|
15
|
+
errorData.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED) {
|
|
16
|
+
errorData.UI = {
|
|
17
|
+
title: i18n.t('no_broadcast'),
|
|
18
|
+
message: errorData.message,
|
|
19
|
+
};
|
|
20
|
+
errorData.code = PlaybackErrorCode.MediaSourceUnavailable;
|
|
21
|
+
}
|
|
22
|
+
return super.createError(errorData, { ...options, useCodePrefix: false });
|
|
23
|
+
}
|
|
3
24
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import HLSJS, { Events as HlsEvents, type ErrorData as HlsErrorData, type FragChangedData, type FragLoadedData, type FragParsingMetadataData, type LevelSwitchingData } from 'hls.js';
|
|
2
|
-
import {
|
|
2
|
+
import { QualityLevel } from '../../playback.types.js';
|
|
3
3
|
import { PlaybackType } from '../../types.js';
|
|
4
4
|
import { BasePlayback } from '../BasePlayback.js';
|
|
5
5
|
export default class HlsPlayback extends BasePlayback {
|
|
@@ -64,7 +64,7 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
64
64
|
_onFragmentParsingMetadata(evt: HlsEvents.FRAG_PARSING_METADATA, data: FragParsingMetadataData): void;
|
|
65
65
|
render(): this;
|
|
66
66
|
_ready(): void;
|
|
67
|
-
_recover
|
|
67
|
+
private _recover;
|
|
68
68
|
protected _setupSrc(srcUrl: string): void;
|
|
69
69
|
_startTimeUpdateTimer(): void;
|
|
70
70
|
_stopTimeUpdateTimer(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EACZ,MAAM,IAAI,SAAS,EAEnB,KAAK,SAAS,IAAI,YAAY,EAE9B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAG5B,KAAK,kBAAkB,EACxB,MAAM,QAAQ,CAAA;AAEf,OAAO,
|
|
1
|
+
{"version":3,"file":"HlsPlayback.d.ts","sourceRoot":"","sources":["../../../src/playback/hls-playback/HlsPlayback.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EACZ,MAAM,IAAI,SAAS,EAEnB,KAAK,SAAS,IAAI,YAAY,EAE9B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAG5B,KAAK,kBAAkB,EACxB,MAAM,QAAQ,CAAA;AAEf,OAAO,EAIL,YAAY,EAGb,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AA0CjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,YAAY;IACnD,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,OAAO,CAAC,gBAAgB,CAAwB;IAEhD,OAAO,CAAC,aAAa,CAAsB;IAE3C,OAAO,CAAC,mCAAmC,CAAQ;IAEnD,OAAO,CAAC,8BAA8B,CAAI;IAE1C,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,IAAI,CAAqB;IAEjC,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,aAAa,CAAsB;IAE3C,OAAO,CAAC,eAAe,CAA4B;IAEnD,OAAO,CAAC,OAAO,CAA8B;IAE7C,OAAO,CAAC,0BAA0B,CAA+B;IAEjE,OAAO,CAAC,wBAAwB,CAA+B;IAE/D,OAAO,CAAC,eAAe,CAAQ;IAE/B,OAAO,CAAC,uBAAuB,CAAI;IAEnC,OAAO,CAAC,aAAa,CAA6C;IAElE,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,wBAAwB,CAAI;IAEpC,OAAO,CAAC,gBAAgB,CAAsB;IAE9C,OAAO,CAAC,yBAAyB,CAAI;IAErC,OAAO,CAAC,yBAAyB,CAAQ;IAEzC,OAAO,CAAC,uBAAuB,CAAQ;IAEvC,OAAO,CAAC,sBAAsB,CAAsB;IAEpD,OAAO,CAAC,gBAAgB,CAAuB;IAE/C,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,IAAI,MAAM,mBAET;IAED,IAAI,YAAY,IAQK,MAAM,CAN1B;IAED,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,CAAC,EAAE,EAAE,MAAM,EAS1B;IAED,IAAI,OAAO,WAGV;IAED,IAAI,sBAAsB,SAIzB;IAED,IAAI,UAAU,WASb;IAED,IAAI,IAAI,WAEP;IAID,IAAI,sBAAsB,WAczB;IAID,IAAI,oBAAoB,WAevB;IAED,IAAI,SAAS,WAEZ;IAmBD,IAAI,2BAA2B,WAM9B;IAED,IAAI,iBAAiB,kBAEpB;IAED,IAAI,cAAc;;MAEjB;IAED,IAAI,eAAe,QAKlB;IAED,IAAI,WAAW,QAEd;IAED,IAAI,gBAAgB,kBAcnB;IAED,MAAM,KAAK,KAAK,iBAEf;gBAEW,GAAG,IAAI,EAAE,GAAG,EAAE;IAU1B,gBAAgB;IAmDhB,MAAM;IAON,mBAAmB;IAYnB,kBAAkB;IAclB,eAAe;IAOf,gBAAgB;IA0EhB,mBAAmB;IAUnB,qBAAqB;IASrB,0BAA0B,CACxB,GAAG,EAAE,SAAS,CAAC,qBAAqB,EACpC,IAAI,EAAE,uBAAuB;IAS/B,MAAM;IAMN,MAAM;IASN,OAAO,CAAC,QAAQ;cAsBG,SAAS,CAAC,MAAM,EAAE,MAAM;IAE3C,qBAAqB;IAUrB,oBAAoB;IAQpB,kBAAkB;IAOlB,WAAW;IAIX,cAAc;IAad,kBAAkB;IAIlB,cAAc,CAAC,UAAU,EAAE,MAAM;IAOjC,IAAI,CAAC,IAAI,EAAE,MAAM;IAajB,eAAe;IAIf,UAAU,CAAC,MAAM,EAAE,OAAO;IAK1B,eAAe;IAiBf,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY;IAgHtD,YAAY,CAAC,IAAI,EAAE,YAAY;IAU/B,aAAa;IAkBJ,iBAAiB;IAUjB,WAAW;IAwCpB,IAAI,CAAC,GAAG,EAAE,MAAM;IAMhB,IAAI;IAUJ,KAAK;IAUL,IAAI;IAQJ,OAAO;IAMP,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,eAAe;IAkJvB,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe;IAMrE,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,cAAc;IAIlE,iBAAiB;IAajB,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,kBAAkB;IAOvE,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAmBvE,IAAI,UAAU,YAUb;IAED,eAAe;IAIf,aAAa;IAIb,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -484,6 +484,10 @@ export default class HlsPlayback extends BasePlayback {
|
|
|
484
484
|
details: data.details,
|
|
485
485
|
});
|
|
486
486
|
error.level = PlayerError.Levels.WARN;
|
|
487
|
+
// TODO check
|
|
488
|
+
// if (data.error instanceof MediaError && data.error.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED) {
|
|
489
|
+
// error.code = PlaybackErrorCode.MediaSourceUnavailable
|
|
490
|
+
// }
|
|
487
491
|
this._recover(evt, data, error);
|
|
488
492
|
break;
|
|
489
493
|
default:
|
package/lib/playback.types.d.ts
CHANGED
|
@@ -103,7 +103,7 @@ export interface PlaybackError {
|
|
|
103
103
|
*/
|
|
104
104
|
message: string;
|
|
105
105
|
/**
|
|
106
|
-
*
|
|
106
|
+
* Name of the component that originated the error.
|
|
107
107
|
* @example
|
|
108
108
|
* - 'core'
|
|
109
109
|
* - 'dash'
|
|
@@ -111,7 +111,7 @@ export interface PlaybackError {
|
|
|
111
111
|
*/
|
|
112
112
|
origin: string;
|
|
113
113
|
/**
|
|
114
|
-
* Component subsystem of the error origin
|
|
114
|
+
* Component subsystem of the error origin, together with the `origin` uniquely identifies the originating component.
|
|
115
115
|
*/
|
|
116
116
|
scope: PlayerComponentType;
|
|
117
117
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickToPause.d.ts","sourceRoot":"","sources":["../../../src/plugins/click-to-pause/ClickToPause.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAA;AAShE;;;GAGG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,KAAK,CAAqB;IAElC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"ClickToPause.d.ts","sourceRoot":"","sources":["../../../src/plugins/click-to-pause/ClickToPause.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAA;AAShE;;;GAGG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,KAAK,CAAqB;IAElC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,UAAU;CAMnB"}
|
|
@@ -52,10 +52,6 @@ export class ClickToPause extends ContainerPlugin {
|
|
|
52
52
|
settingsUpdate() {
|
|
53
53
|
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
|
|
54
54
|
const pointerEnabled = !isLivePlayback || this.container.isDvrEnabled();
|
|
55
|
-
trace(`${T} settingsUpdate`, {
|
|
56
|
-
isLivePlayback,
|
|
57
|
-
pointerEnabled,
|
|
58
|
-
});
|
|
59
55
|
if (pointerEnabled === this.pointerEnabled) {
|
|
60
56
|
return;
|
|
61
57
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Container, UIContainerPlugin } from '@clappr/core';
|
|
2
2
|
import '../../../assets/context-menu/context_menu.scss';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Context menu plugin settings
|
|
5
5
|
* @beta
|
|
6
6
|
*/
|
|
7
7
|
export interface ContextMenuPluginSettings {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DvrControls.d.ts","sourceRoot":"","sources":["../../../src/plugins/dvr-controls/DvrControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAY,MAAM,cAAc,CAAA;AAM7E,OAAO,gDAAgD,CAAA;AAMvD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAEpD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"DvrControls.d.ts","sourceRoot":"","sources":["../../../src/plugins/dvr-controls/DvrControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,YAAY,EAAY,MAAM,cAAc,CAAA;AAM7E,OAAO,gDAAgD,CAAA;AAMvD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAEpD;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACM,MAAM;CAoBhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorScreen.d.ts","sourceRoot":"","sources":["../../../src/plugins/error-screen/ErrorScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAA;AAO7D,OAAO,gDAAgD,CAAA;AAUvD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAID;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,GAAG,CAA+B;IAE1C;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAEzD;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,OAAO;IAgBf;;OAEG;IACM,MAAM;
|
|
1
|
+
{"version":3,"file":"ErrorScreen.d.ts","sourceRoot":"","sources":["../../../src/plugins/error-screen/ErrorScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAA;AAO7D,OAAO,gDAAgD,CAAA;AAUvD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAID;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,GAAG,CAA+B;IAE1C;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAEzD;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,OAAO;IAgBf;;OAEG;IACM,MAAM;CAiBhB"}
|
|
@@ -108,7 +108,6 @@ export class ErrorScreen extends UICorePlugin {
|
|
|
108
108
|
...this.err,
|
|
109
109
|
reloadIcon: this.options.errorScreen?.noReload ? null : reloadIcon,
|
|
110
110
|
}));
|
|
111
|
-
// TODO append to container instead of core?
|
|
112
111
|
if (!this.el.parentElement) {
|
|
113
112
|
this.core.$el.append(this.el);
|
|
114
113
|
}
|
|
@@ -1,23 +1,50 @@
|
|
|
1
1
|
import { CorePlugin, Core } from '@clappr/core';
|
|
2
2
|
/**
|
|
3
|
-
* `PLUGIN` that adds custom favicon to the player's tab.
|
|
4
3
|
* @beta
|
|
5
4
|
*/
|
|
5
|
+
export interface FaviconPluginSettings {
|
|
6
|
+
/**
|
|
7
|
+
* CSS color of the favicon.
|
|
8
|
+
*/
|
|
9
|
+
faviconColor?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* `PLUGIN` that changes the favicon according to the player's state.
|
|
13
|
+
* @beta
|
|
14
|
+
* @remarks
|
|
15
|
+
* There are three states: stopped, playing and paused.
|
|
16
|
+
*/
|
|
6
17
|
export declare class Favicon extends CorePlugin {
|
|
7
|
-
private _container;
|
|
8
18
|
private oldIcon;
|
|
9
19
|
private playIcon;
|
|
10
20
|
private pauseIcon;
|
|
11
21
|
private stopIcon;
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
12
25
|
get name(): string;
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
13
29
|
get supportedVersion(): {
|
|
14
30
|
min: string;
|
|
15
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
16
35
|
constructor(core: Core);
|
|
17
|
-
|
|
36
|
+
/**
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
18
39
|
bindEvents(): void;
|
|
19
40
|
private containerChanged;
|
|
41
|
+
/**
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
20
44
|
disable(): void;
|
|
45
|
+
/**
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
21
48
|
destroy(): void;
|
|
22
49
|
private createIcon;
|
|
23
50
|
private setPlayIcon;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Favicon.d.ts","sourceRoot":"","sources":["../../../src/plugins/favicon/Favicon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,IAAI,EAAa,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Favicon.d.ts","sourceRoot":"","sources":["../../../src/plugins/favicon/Favicon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,IAAI,EAAa,MAAM,cAAc,CAAC;AAYtE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,OAAO,CAAC,OAAO,CAAc;IAE7B,OAAO,CAAC,QAAQ,CAA4B;IAE5C,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,QAAQ,CAA4B;IAE5C;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;gBACS,IAAI,EAAE,IAAI;IAStB;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACM,OAAO;IAKhB;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,UAAU;CAInB"}
|
|
@@ -5,26 +5,32 @@ import pauseIcon from '../../../assets/icons/new/pause.svg';
|
|
|
5
5
|
import stopIcon from '../../../assets/icons/new/stop.svg';
|
|
6
6
|
const FAVICON_COLOR = '#567';
|
|
7
7
|
const FAVICON_SELECTOR = 'link[rel="shortcut icon"]';
|
|
8
|
-
// const oldIcon = $(FAVICON_SELECTOR);
|
|
9
8
|
/**
|
|
10
|
-
* `PLUGIN` that
|
|
9
|
+
* `PLUGIN` that changes the favicon according to the player's state.
|
|
11
10
|
* @beta
|
|
11
|
+
* @remarks
|
|
12
|
+
* There are three states: stopped, playing and paused.
|
|
12
13
|
*/
|
|
13
14
|
export class Favicon extends CorePlugin {
|
|
14
|
-
_container = null;
|
|
15
15
|
oldIcon;
|
|
16
16
|
playIcon = null;
|
|
17
17
|
pauseIcon = null;
|
|
18
18
|
stopIcon = null;
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
19
22
|
get name() {
|
|
20
23
|
return 'favicon';
|
|
21
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
22
28
|
get supportedVersion() {
|
|
23
29
|
return { min: CLAPPR_VERSION };
|
|
24
30
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
/**
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
28
34
|
constructor(core) {
|
|
29
35
|
super(core);
|
|
30
36
|
this.oldIcon = $(FAVICON_SELECTOR);
|
|
@@ -32,41 +38,31 @@ export class Favicon extends CorePlugin {
|
|
|
32
38
|
this.stopIcon = this.createIcon(stopIcon);
|
|
33
39
|
this.changeIcon(this.stopIcon);
|
|
34
40
|
}
|
|
35
|
-
this.configure();
|
|
36
|
-
}
|
|
37
|
-
configure() {
|
|
38
|
-
if (this.core.options.changeFavicon) {
|
|
39
|
-
if (!this.enabled) {
|
|
40
|
-
// @ts-ignore
|
|
41
|
-
this.stopListening(this.core, Events.CORE_OPTIONS_CHANGE);
|
|
42
|
-
this.enable();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else if (this.enabled) {
|
|
46
|
-
this.disable();
|
|
47
|
-
this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.configure);
|
|
48
|
-
}
|
|
49
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
50
45
|
bindEvents() {
|
|
51
|
-
this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.configure);
|
|
52
46
|
this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.containerChanged);
|
|
53
|
-
this.core.activeContainer && this.containerChanged();
|
|
54
47
|
}
|
|
55
48
|
containerChanged() {
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
this.
|
|
59
|
-
this.listenTo(this.
|
|
60
|
-
this.listenTo(this.
|
|
61
|
-
this.listenTo(this._container, Events.CONTAINER_STOP, this.resetIcon);
|
|
62
|
-
this.listenTo(this._container, Events.CONTAINER_ENDED, this.resetIcon);
|
|
63
|
-
this.listenTo(this._container, Events.CONTAINER_ERROR, this.resetIcon);
|
|
49
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAY, this.setPlayIcon);
|
|
50
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_PAUSE, this.setPauseIcon);
|
|
51
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_STOP, this.resetIcon);
|
|
52
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_ENDED, this.resetIcon);
|
|
53
|
+
this.listenTo(this.core.activeContainer, Events.CONTAINER_ERROR, this.resetIcon);
|
|
64
54
|
this.resetIcon();
|
|
65
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
66
59
|
disable() {
|
|
67
60
|
super.disable();
|
|
68
61
|
this.resetIcon();
|
|
69
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
70
66
|
destroy() {
|
|
71
67
|
super.destroy();
|
|
72
68
|
this.resetIcon();
|
|
@@ -97,14 +93,11 @@ export class Favicon extends CorePlugin {
|
|
|
97
93
|
this.changeIcon(this.pauseIcon);
|
|
98
94
|
}
|
|
99
95
|
resetIcon() {
|
|
100
|
-
$(FAVICON_SELECTOR).remove();
|
|
101
96
|
const icon = this.oldIcon.length > 0 ? this.oldIcon : this.stopIcon;
|
|
102
97
|
this.changeIcon(icon);
|
|
103
98
|
}
|
|
104
99
|
changeIcon(icon) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
$('head').append(icon);
|
|
108
|
-
}
|
|
100
|
+
$('link[rel="shortcut icon"]').remove();
|
|
101
|
+
$('head').append(icon);
|
|
109
102
|
}
|
|
110
103
|
}
|
|
@@ -18,17 +18,10 @@ export declare enum MediaControlEvents {
|
|
|
18
18
|
MEDIACONTROL_GEAR_RENDERED = "mediacontrol:gear:rendered"
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* `PLUGIN` that provides a foundation for developing custom
|
|
21
|
+
* `PLUGIN` that provides basic playback controls UI and a foundation for developing custom UI.
|
|
22
22
|
* @beta
|
|
23
23
|
* @remarks
|
|
24
24
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
25
|
-
* The plugin registration should be arranged so that MediaControl is initialized before every other `PLUGIN` that depends on it.
|
|
26
|
-
* @example
|
|
27
|
-
* ```ts
|
|
28
|
-
* Player.registerPlugin(MediaControl) // <--- This must go first
|
|
29
|
-
* Player.registerPlugin(LevelSelector) // a media control plugin
|
|
30
|
-
* Player.registerPlugin(NerdStats) // another media control plugin
|
|
31
|
-
* ```
|
|
32
25
|
*/
|
|
33
26
|
export declare class MediaControl extends UICorePlugin {
|
|
34
27
|
private advertisementPlaying;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,YAAY,EAMZ,IAAI,EACL,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import assert from 'assert';
|
|
7
7
|
import { Events, UICorePlugin, Browser, Playback, Utils, template, $, } from '@clappr/core';
|
|
8
8
|
import { reportError, trace } from '@gcorevideo/utils';
|
|
9
|
+
// TODO replace Kibo with mousetrap
|
|
9
10
|
import { Kibo } from '../kibo/index.js';
|
|
10
11
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
11
12
|
import { getPageX, isFullscreen } from '../utils.js';
|
|
@@ -47,17 +48,10 @@ function orderByOrderPattern(arr, order) {
|
|
|
47
48
|
return [...ordered, ...rest];
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
|
-
* `PLUGIN` that provides a foundation for developing custom
|
|
51
|
+
* `PLUGIN` that provides basic playback controls UI and a foundation for developing custom UI.
|
|
51
52
|
* @beta
|
|
52
53
|
* @remarks
|
|
53
54
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
54
|
-
* The plugin registration should be arranged so that MediaControl is initialized before every other `PLUGIN` that depends on it.
|
|
55
|
-
* @example
|
|
56
|
-
* ```ts
|
|
57
|
-
* Player.registerPlugin(MediaControl) // <--- This must go first
|
|
58
|
-
* Player.registerPlugin(LevelSelector) // a media control plugin
|
|
59
|
-
* Player.registerPlugin(NerdStats) // another media control plugin
|
|
60
|
-
* ```
|
|
61
55
|
*/
|
|
62
56
|
export class MediaControl extends UICorePlugin {
|
|
63
57
|
advertisementPlaying = false;
|
|
@@ -990,7 +984,6 @@ export class MediaControl extends UICorePlugin {
|
|
|
990
984
|
return super.destroy();
|
|
991
985
|
}
|
|
992
986
|
configure() {
|
|
993
|
-
// this.advertisementPlaying ? this.disable() : this.enable()
|
|
994
987
|
this.trigger(Events.MEDIACONTROL_OPTIONS_CHANGE);
|
|
995
988
|
}
|
|
996
989
|
/**
|
|
@@ -5,6 +5,8 @@ import '../../../assets/poster/poster.scss';
|
|
|
5
5
|
* @beta
|
|
6
6
|
* @remarks
|
|
7
7
|
* When the playback is stopped, media control UI is disabled.
|
|
8
|
+
* Note that the poster image, if specified via the player config, will be used to update video element's poster attribute by the
|
|
9
|
+
* HTML5-video-based playback module.
|
|
8
10
|
*
|
|
9
11
|
* Configuration options:
|
|
10
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Poster.d.ts","sourceRoot":"","sources":["../../../src/plugins/poster/Poster.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"Poster.d.ts","sourceRoot":"","sources":["../../../src/plugins/poster/Poster.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,iBAAiB,EAGlB,MAAM,cAAc,CAAA;AAMrB,OAAO,oCAAoC,CAAA;AAO3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,MAAO,SAAQ,iBAAiB;IAG3C,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,iBAAiB,CAAQ;IAEjC,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,WAAW,CAA2B;IAE9C,OAAO,CAAC,YAAY,CAA2B;IAE/C;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD,OAAO,KAAK,YAAY,GAUvB;IAED;;OAEG;IACH,IAAa,UAAU;;;MAKtB;IAED;;OAEG;IACH,IAAa,MAAM;;MAIlB;IAED,OAAO,KAAK,cAAc,GAEzB;IAED;;OAEG;IACM,UAAU;IAiBnB;;OAEG;IACM,MAAM;IAMf;;OAEG;IACM,OAAO;IAOhB,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACM,MAAM;IAuCf;;OAEG;IACM,OAAO;CAIjB"}
|
|
@@ -13,6 +13,8 @@ const T = 'plugins.poster';
|
|
|
13
13
|
* @beta
|
|
14
14
|
* @remarks
|
|
15
15
|
* When the playback is stopped, media control UI is disabled.
|
|
16
|
+
* Note that the poster image, if specified via the player config, will be used to update video element's poster attribute by the
|
|
17
|
+
* HTML5-video-based playback module.
|
|
16
18
|
*
|
|
17
19
|
* Configuration options:
|
|
18
20
|
*
|
|
@@ -36,6 +38,7 @@ const T = 'plugins.poster';
|
|
|
36
38
|
* ```
|
|
37
39
|
*/
|
|
38
40
|
export class Poster extends UIContainerPlugin {
|
|
41
|
+
// TODO merge non-poster related functionality into the ClickToPause plugin
|
|
39
42
|
hasFatalError = false;
|
|
40
43
|
hasStartedPlaying = false;
|
|
41
44
|
playRequested = false;
|
|
@@ -191,9 +194,6 @@ export class Poster extends UIContainerPlugin {
|
|
|
191
194
|
this.container.playback.play();
|
|
192
195
|
}
|
|
193
196
|
}
|
|
194
|
-
else {
|
|
195
|
-
this.container.trigger('container:start');
|
|
196
|
-
}
|
|
197
197
|
return false;
|
|
198
198
|
}
|
|
199
199
|
shouldHideOnPlay() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceController.d.ts","sourceRoot":"","sources":["../../../src/plugins/source-controller/SourceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,IAAI,IAAI,UAAU,EACxB,MAAM,cAAc,CAAA;AAwBrB;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAuC9C,OAAO,CAAC,WAAW,CAA8B;IAEjD,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,IAAI,CAAiB;IAE7B;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;
|
|
1
|
+
{"version":3,"file":"SourceController.d.ts","sourceRoot":"","sources":["../../../src/plugins/source-controller/SourceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,IAAI,IAAI,UAAU,EACxB,MAAM,cAAc,CAAA;AAwBrB;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAuC9C,OAAO,CAAC,WAAW,CAA8B;IAEjD,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,IAAI,CAAiB;IAE7B;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED;;OAEG;gBACS,IAAI,EAAE,UAAU;IAW5B;;OAEG;IACM,UAAU;IAWnB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,2BAA2B;IAwCnC,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,MAAM,KAAK,OAAO,WAEjB;CACF"}
|
package/package.json
CHANGED
package/src/Player.ts
CHANGED
|
@@ -168,7 +168,7 @@ export class Player {
|
|
|
168
168
|
const coreOpts = this.buildCoreOptions(playerElement)
|
|
169
169
|
const { core, container } = Player.getRegisteredPlugins()
|
|
170
170
|
trace(`${T} init`, {
|
|
171
|
-
registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.name),
|
|
171
|
+
registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.prototype.name),
|
|
172
172
|
})
|
|
173
173
|
coreOpts.plugins = {
|
|
174
174
|
core: Object.values(core),
|
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
import { ErrorOptions } from '@clappr/core'
|
|
2
|
+
|
|
3
|
+
import { PlaybackErrorCode } from '../playback.types.js'
|
|
1
4
|
import { BasePlayback } from './BasePlayback.js'
|
|
2
5
|
|
|
3
|
-
export default class HTML5Video extends BasePlayback {
|
|
6
|
+
export default class HTML5Video extends BasePlayback {
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
override createError(errorData: any, options?: ErrorOptions) {
|
|
11
|
+
const i18n =
|
|
12
|
+
this.i18n ||
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
(this.core && this.core.i18n) ||
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
(this.container && this.container.i18n)
|
|
17
|
+
|
|
18
|
+
if (
|
|
19
|
+
i18n &&
|
|
20
|
+
!errorData.UI &&
|
|
21
|
+
errorData.code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
|
|
22
|
+
) {
|
|
23
|
+
errorData.UI = {
|
|
24
|
+
title: i18n.t('no_broadcast'),
|
|
25
|
+
message: errorData.message,
|
|
26
|
+
}
|
|
27
|
+
errorData.code = PlaybackErrorCode.MediaSourceUnavailable
|
|
28
|
+
}
|
|
29
|
+
return super.createError(errorData, { ...options, useCodePrefix: false })
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import HTML5Video from '../HTML5Video.js'
|
|
4
|
+
import { PlaybackErrorCode } from '../../playback.types.js'
|
|
5
|
+
|
|
6
|
+
let savedMediaError: any
|
|
7
|
+
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
savedMediaError = globalThis.MediaError
|
|
10
|
+
if (!globalThis.MediaError) {
|
|
11
|
+
globalThis.MediaError = {
|
|
12
|
+
MEDIA_ERR_ABORTED: 1,
|
|
13
|
+
MEDIA_ERR_NETWORK: 2,
|
|
14
|
+
MEDIA_ERR_DECODE: 3,
|
|
15
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED: 4,
|
|
16
|
+
} as any
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
globalThis.MediaError = savedMediaError
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
describe('HTML5Video', () => {
|
|
25
|
+
describe('errors', () => {
|
|
26
|
+
describe('when the media element emits MEDIA_ERR_SRC_NOT_SUPPORTED', () => {
|
|
27
|
+
it('should trigger MEDIA_SOURCE_UNAVAILABLE error', () => {
|
|
28
|
+
const i18n = {
|
|
29
|
+
t: vi.fn().mockImplementation((key: string) => key),
|
|
30
|
+
}
|
|
31
|
+
const playerError = {
|
|
32
|
+
createError: vi.fn(),
|
|
33
|
+
}
|
|
34
|
+
const html5Video = new HTML5Video({}, i18n, playerError)
|
|
35
|
+
html5Video.load('https://example.com/video.mp4')
|
|
36
|
+
;(html5Video.el as any).error = {
|
|
37
|
+
code: MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED,
|
|
38
|
+
message: 'Media source not supported',
|
|
39
|
+
}
|
|
40
|
+
html5Video.el.dispatchEvent(new Event('error', { bubbles: true }))
|
|
41
|
+
expect(playerError.createError).toHaveBeenCalledWith(expect.objectContaining({
|
|
42
|
+
code: PlaybackErrorCode.MediaSourceUnavailable,
|
|
43
|
+
}))
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
})
|