@gcorevideo/player 2.19.15 → 2.20.1

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.
Files changed (131) hide show
  1. package/assets/level-selector/list.ejs +1 -1
  2. package/dist/core.js +2 -2
  3. package/dist/index.css +1634 -1634
  4. package/dist/index.js +585 -416
  5. package/dist/player.d.ts +268 -72
  6. package/dist/plugins/index.css +1567 -1567
  7. package/dist/plugins/index.js +526 -357
  8. package/docs/api/player.clapprnerdstats.md +12 -259
  9. package/docs/api/player.dvrcontrols.md +5 -1
  10. package/docs/api/player.errorscreen.attributes.md +3 -0
  11. package/docs/api/player.errorscreen.bindevents.md +3 -0
  12. package/docs/api/player.errorscreen.container.md +3 -0
  13. package/docs/api/player.errorscreen.hide.md +3 -0
  14. package/docs/api/player.errorscreen.md +27 -0
  15. package/docs/api/player.errorscreen.name.md +3 -0
  16. package/docs/api/player.errorscreen.render.md +3 -0
  17. package/docs/api/player.errorscreen.show.md +3 -0
  18. package/docs/api/player.errorscreen.supportedversion.md +3 -0
  19. package/docs/api/player.errorscreen.template.md +3 -0
  20. package/docs/api/player.errorscreen.unbindevents.md +3 -0
  21. package/docs/api/{player.playbackrate.template.md → player.initeventdata.event.md} +3 -3
  22. package/docs/api/{player.playbackrate.updateplaybackrate.md → player.initeventdata.md} +15 -11
  23. package/docs/api/player.md +88 -5
  24. package/docs/api/player.pictureinpicture.md +9 -197
  25. package/docs/api/player.playbackrate.md +10 -314
  26. package/docs/api/{player.playbackrate.onplay.md → player.stalleventdata.count.md} +5 -7
  27. package/docs/api/{player.playbackrate.name.md → player.stalleventdata.event.md} +3 -3
  28. package/docs/api/player.stalleventdata.md +112 -0
  29. package/docs/api/player.stalleventdata.time.md +13 -0
  30. package/docs/api/player.stalleventdata.total_ms.md +13 -0
  31. package/docs/api/{player.pluginsettings.md → player.starteventdata.event.md} +3 -5
  32. package/docs/api/{player.playbackrate.onrateselect.md → player.starteventdata.md} +15 -11
  33. package/docs/api/{player.statistics._constructor_.md → player.telemetry._constructor_.md} +6 -3
  34. package/docs/api/player.telemetry.md +146 -0
  35. package/docs/api/{player.volumefade.name.md → player.telemetry.name.md} +4 -2
  36. package/docs/api/{player.clapprnerdstats.supportedversion.md → player.telemetry.supportedversion.md} +4 -2
  37. package/docs/api/player.telemetryevent.md +89 -0
  38. package/docs/api/player.telemetryeventdata.md +15 -0
  39. package/docs/api/player.telemetrypluginsettings.md +57 -0
  40. package/docs/api/player.telemetrypluginsettings.send.md +13 -0
  41. package/docs/api/player.telemetryrecord.md +17 -0
  42. package/docs/api/player.volumefade.md +0 -93
  43. package/docs/api/{player.pictureinpicture.name.md → player.watcheventdata.event.md} +3 -3
  44. package/docs/api/{player.playbackrate.setselectedrate.md → player.watcheventdata.md} +15 -11
  45. package/lib/index.plugins.d.ts +2 -2
  46. package/lib/index.plugins.d.ts.map +1 -1
  47. package/lib/index.plugins.js +2 -2
  48. package/lib/playback/hls-playback/HlsPlayback.js +1 -1
  49. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts +38 -5
  50. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +1 -1
  51. package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +63 -17
  52. package/lib/plugins/dvr-controls/DvrControls.d.ts +5 -2
  53. package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
  54. package/lib/plugins/dvr-controls/DvrControls.js +5 -2
  55. package/lib/plugins/error-screen/ErrorScreen.d.ts +5 -0
  56. package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
  57. package/lib/plugins/error-screen/ErrorScreen.js +5 -0
  58. package/lib/plugins/index.d.ts +2 -3
  59. package/lib/plugins/index.d.ts.map +1 -1
  60. package/lib/plugins/index.js +2 -3
  61. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +32 -4
  62. package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
  63. package/lib/plugins/picture-in-picture/PictureInPicture.js +30 -2
  64. package/lib/plugins/playback-rate/PlaybackRate.d.ts +47 -14
  65. package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
  66. package/lib/plugins/playback-rate/PlaybackRate.js +38 -9
  67. package/lib/plugins/statistics/Statistics.d.ts +38 -3
  68. package/lib/plugins/statistics/Statistics.d.ts.map +1 -1
  69. package/lib/plugins/statistics/Statistics.js +51 -9
  70. package/lib/plugins/telemetry/Telemetry.d.ts +135 -0
  71. package/lib/plugins/telemetry/Telemetry.d.ts.map +1 -0
  72. package/lib/plugins/telemetry/Telemetry.js +180 -0
  73. package/lib/plugins/volume-fade/VolumeFade.d.ts +7 -1
  74. package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
  75. package/lib/plugins/volume-fade/VolumeFade.js +8 -1
  76. package/package.json +1 -1
  77. package/src/index.plugins.ts +2 -2
  78. package/src/playback/hls-playback/HlsPlayback.ts +1 -1
  79. package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +240 -173
  80. package/src/plugins/dvr-controls/DvrControls.ts +5 -2
  81. package/src/plugins/error-screen/ErrorScreen.ts +5 -0
  82. package/src/plugins/index.ts +2 -3
  83. package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +47 -26
  84. package/src/plugins/level-selector/__tests__/__snapshots__/LevelSelector.test.ts.snap +18 -18
  85. package/src/plugins/picture-in-picture/PictureInPicture.ts +35 -7
  86. package/src/plugins/playback-rate/PlaybackRate.ts +53 -24
  87. package/src/plugins/telemetry/Telemetry.ts +299 -0
  88. package/src/plugins/volume-fade/VolumeFade.ts +9 -2
  89. package/temp/player.api.json +2322 -3281
  90. package/tsconfig.tsbuildinfo +1 -1
  91. package/docs/api/player.clapprnerdstats.attributes.md +0 -17
  92. package/docs/api/player.clapprnerdstats.bindevents.md +0 -18
  93. package/docs/api/player.clapprnerdstats.events.md +0 -18
  94. package/docs/api/player.clapprnerdstats.name.md +0 -14
  95. package/docs/api/player.clapprnerdstats.playerheight.md +0 -14
  96. package/docs/api/player.clapprnerdstats.playerwidth.md +0 -14
  97. package/docs/api/player.clapprnerdstats.render.md +0 -18
  98. package/docs/api/player.clapprnerdstats.statsboxelem.md +0 -14
  99. package/docs/api/player.clapprnerdstats.statsboxwidththreshold.md +0 -14
  100. package/docs/api/player.clapprnerdstats.template.md +0 -14
  101. package/docs/api/player.pictureinpicture.bindevents.md +0 -15
  102. package/docs/api/player.pictureinpicture.events.md +0 -13
  103. package/docs/api/player.pictureinpicture.exitpictureinpicture.md +0 -15
  104. package/docs/api/player.pictureinpicture.render.md +0 -15
  105. package/docs/api/player.pictureinpicture.requestpictureinpicture.md +0 -15
  106. package/docs/api/player.pictureinpicture.supportedversion.md +0 -13
  107. package/docs/api/player.pictureinpicture.togglepictureinpicture.md +0 -15
  108. package/docs/api/player.pictureinpicture.version.md +0 -11
  109. package/docs/api/player.pictureinpicture.videoelement.md +0 -11
  110. package/docs/api/player.playbackrate.attributes.md +0 -14
  111. package/docs/api/player.playbackrate.bindevents.md +0 -15
  112. package/docs/api/player.playbackrate.events.md +0 -15
  113. package/docs/api/player.playbackrate.gettitle.md +0 -15
  114. package/docs/api/player.playbackrate.goback.md +0 -15
  115. package/docs/api/player.playbackrate.highlightcurrentrate.md +0 -15
  116. package/docs/api/player.playbackrate.onfinishad.md +0 -15
  117. package/docs/api/player.playbackrate.onshowmenu.md +0 -15
  118. package/docs/api/player.playbackrate.onstartad.md +0 -15
  119. package/docs/api/player.playbackrate.onstop.md +0 -15
  120. package/docs/api/player.playbackrate.reload.md +0 -15
  121. package/docs/api/player.playbackrate.render.md +0 -15
  122. package/docs/api/player.playbackrate.supportedversion.md +0 -13
  123. package/docs/api/player.playbackrate.unbindevents.md +0 -15
  124. package/docs/api/player.statistics.bindevents.md +0 -15
  125. package/docs/api/player.statistics.md +0 -141
  126. package/docs/api/player.statistics.name.md +0 -11
  127. package/docs/api/player.statistics.supportedversion.md +0 -13
  128. package/docs/api/player.volumefade.bindevents.md +0 -18
  129. package/docs/api/player.volumefade.unbindevents.md +0 -18
  130. package/src/plugins/statistics/Statistics.ts +0 -207
  131. /package/src/plugins/{statistics → telemetry}/Statistics copy.xts +0 -0
@@ -0,0 +1,180 @@
1
+ // An example implementation of client side performancestatistics
2
+ import { ContainerPlugin, Events } from '@clappr/core';
3
+ import { reportError, trace } from '@gcorevideo/utils';
4
+ import assert from 'assert';
5
+ import { CLAPPR_VERSION } from '../../build.js';
6
+ const WATCH_CUTOFF = 5;
7
+ const STALL_MEASURE_PERIOD = 10;
8
+ const T = 'plugins.telemetry';
9
+ /**
10
+ * Telemetry event type
11
+ */
12
+ export var TelemetryEvent;
13
+ (function (TelemetryEvent) {
14
+ TelemetryEvent[TelemetryEvent["Init"] = 1] = "Init";
15
+ TelemetryEvent[TelemetryEvent["Start"] = 2] = "Start";
16
+ TelemetryEvent[TelemetryEvent["Watch"] = 3] = "Watch";
17
+ TelemetryEvent[TelemetryEvent["Stall"] = 4] = "Stall";
18
+ })(TelemetryEvent || (TelemetryEvent = {}));
19
+ /**
20
+ * Collects and reports the performance statistics.
21
+ * @beta
22
+ * @remarks
23
+ * This plugin is experimental and its API is likely to change.
24
+ *
25
+ * Configuration options {@link TelemetryPluginSettings}
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { Statistics } from '@gcorevideo/player'
30
+ *
31
+ * Player.registerPlugin(Statistics)
32
+ *
33
+ * const player = new Player({
34
+ * statistics: {
35
+ * send: (data) => {
36
+ * fetch('/stats', {
37
+ * method: 'POST',
38
+ * body: JSON.stringify(data),
39
+ * headers: { 'content-type': 'application/json' },
40
+ * })
41
+ * },
42
+ * },
43
+ * ...
44
+ * })
45
+ * ```
46
+ */
47
+ export class Telemetry extends ContainerPlugin {
48
+ /**
49
+ * The name of the plugin.
50
+ */
51
+ get name() {
52
+ return 'telemetry';
53
+ }
54
+ /**
55
+ * The supported version of the plugin.
56
+ */
57
+ get supportedVersion() {
58
+ return { min: CLAPPR_VERSION };
59
+ }
60
+ started = false;
61
+ timeStart = 0;
62
+ stallSent = false;
63
+ stallLastTime = 0;
64
+ watchSent = false;
65
+ bufTracking = false;
66
+ numStalls = 0;
67
+ /**
68
+ * The time when buffering last started.
69
+ */
70
+ bufLastStarted = 0;
71
+ /**
72
+ * The accumulated buffering duration.
73
+ */
74
+ stallAcc = 0;
75
+ constructor(container) {
76
+ super(container);
77
+ assert(this.options.telemetry &&
78
+ typeof this.options.telemetry.send === 'function', 'Telemetry plugin configuration is invalid: `send` option is required');
79
+ }
80
+ /**
81
+ * @internal
82
+ */
83
+ bindEvents() {
84
+ // TODO remove this
85
+ // this.listenToOnce(
86
+ // this.container,
87
+ // CUSTOM_EVENTS_CONTAINER_START,
88
+ // this.onStart,
89
+ // )
90
+ this.listenToOnce(this.container, Events.CONTAINER_READY, this.onReady);
91
+ this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERING, this.onBuffering);
92
+ this.listenTo(this.container, Events.CONTAINER_STATE_BUFFERFULL, this.onBufferFull);
93
+ this.listenTo(this.container.playback, Events.PLAYBACK_TIMEUPDATE, this.onTimeUpdate);
94
+ this.listenTo(this.container.playback, Events.PLAYBACK_LEVEL_SWITCH_START, this.startLevelSwitch);
95
+ this.listenTo(this.container.playback, Events.PLAYBACK_LEVEL_SWITCH_END, this.endLevelSwitch);
96
+ }
97
+ startLevelSwitch() {
98
+ this.bufTracking = false;
99
+ }
100
+ endLevelSwitch() {
101
+ this.bufTracking = true;
102
+ }
103
+ onBuffering() {
104
+ if (this.bufTracking) {
105
+ this.bufLastStarted = performance.now();
106
+ }
107
+ }
108
+ onBufferFull() {
109
+ if (this.bufTracking && this.bufLastStarted) {
110
+ this.stallAcc += performance.now() - this.bufLastStarted;
111
+ this.numStalls++;
112
+ }
113
+ this.bufTracking = true;
114
+ }
115
+ onReady() {
116
+ this.sendInit();
117
+ trace(`${T} onReady`, {
118
+ autoPlay: this.options.autoPlay,
119
+ });
120
+ if (this.options.autoPlay) {
121
+ this.onStart();
122
+ }
123
+ else {
124
+ this.listenToOnce(this.container.playback, Events.PLAYBACK_PLAY_INTENT, this.onStart);
125
+ }
126
+ }
127
+ sendInit() {
128
+ this.send({ event: TelemetryEvent.Init });
129
+ }
130
+ send(event) {
131
+ this.options.telemetry.send({
132
+ type: this.container.getPlaybackType(),
133
+ ...event,
134
+ });
135
+ }
136
+ sendStall(time) {
137
+ // TODO don't send if no stalls?
138
+ const res = {
139
+ event: TelemetryEvent.Stall,
140
+ count: this.numStalls,
141
+ time,
142
+ total_ms: Math.round(this.stallAcc * 1000),
143
+ };
144
+ this.stallAcc = 0;
145
+ this.numStalls = 0;
146
+ this.send(res);
147
+ this.stallSent = true;
148
+ this.stallLastTime = time;
149
+ }
150
+ onTimeUpdate({ current }) {
151
+ if (!this.timeStart) {
152
+ this.timeStart = current;
153
+ }
154
+ try {
155
+ const elapsed = current - this.timeStart;
156
+ const stallElapsed = current - this.stallLastTime;
157
+ if (!this.stallSent || stallElapsed >= STALL_MEASURE_PERIOD) {
158
+ this.sendStall(current);
159
+ }
160
+ if (!this.watchSent && elapsed >= WATCH_CUTOFF) {
161
+ this.watchSent = true;
162
+ this.send({
163
+ event: TelemetryEvent.Watch,
164
+ });
165
+ }
166
+ }
167
+ catch (error) {
168
+ reportError(error);
169
+ }
170
+ }
171
+ onStart() {
172
+ if (this.started) {
173
+ return;
174
+ }
175
+ this.started = true;
176
+ this.send({
177
+ event: TelemetryEvent.Start,
178
+ });
179
+ }
180
+ }
@@ -10,9 +10,15 @@ export declare class VolumeFade extends UICorePlugin {
10
10
  private container;
11
11
  private delay;
12
12
  private interval;
13
+ /**
14
+ * @internal
15
+ */
13
16
  get name(): string;
17
+ /**
18
+ * @internal
19
+ */
14
20
  bindEvents(): void;
15
- unBindEvents(): void;
21
+ private unBindEvents;
16
22
  private _onUserChangeVolume;
17
23
  private _onVolumeConfig;
18
24
  private onCoreReady;
@@ -1 +1 @@
1
- {"version":3,"file":"VolumeFade.d.ts","sourceRoot":"","sources":["../../../src/plugins/volume-fade/VolumeFade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiC,MAAM,cAAc,CAAC;AAK3E,oBAAY,gBAAgB;IAC1B,IAAI,qBAAqB;CAC1B;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,KAAK,CAAK;IAElB,OAAO,CAAC,QAAQ,CAAwB;IAExC,IAAI,IAAI,WAEP;IAEQ,UAAU;IAQnB,YAAY;IAKZ,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,OAAO;CAGhB"}
1
+ {"version":3,"file":"VolumeFade.d.ts","sourceRoot":"","sources":["../../../src/plugins/volume-fade/VolumeFade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiC,MAAM,cAAc,CAAC;AAK3E,oBAAY,gBAAgB;IAC1B,IAAI,qBAAqB;CAC1B;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,KAAK,CAAK;IAElB,OAAO,CAAC,QAAQ,CAAwB;IAExC;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACM,UAAU;IASnB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,OAAO;CAGhB"}
@@ -12,15 +12,22 @@ export class VolumeFade extends UICorePlugin {
12
12
  container = null;
13
13
  delay = 0;
14
14
  interval = null;
15
+ /**
16
+ * @internal
17
+ */
15
18
  get name() {
16
19
  return 'volume_fade';
17
20
  }
21
+ /**
22
+ * @internal
23
+ */
18
24
  bindEvents() {
25
+ // TODO on container changed
19
26
  this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
20
27
  if (this.core.mediaControl) {
21
28
  this.listenTo(this.core.mediaControl, 'mediacontrol:volume:user', this._onUserChangeVolume);
22
29
  }
23
- this.listenTo(this.core, 'core:volume:config', this._onVolumeConfig);
30
+ // this.listenTo(this.core, 'core:volume:config', this._onVolumeConfig);
24
31
  }
25
32
  unBindEvents() {
26
33
  this.core.$el.off('mouseleave.volume');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.19.15",
3
+ "version": "2.20.1",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -26,10 +26,10 @@ export * from "./plugins/seek-time/SeekTime.js";
26
26
  export * from "./plugins/share/Share.js";
27
27
  export * from "./plugins/skip-time/SkipTime.js";
28
28
  export * from "./plugins/spinner-three-bounce/SpinnerThreeBounce.js";
29
- export * from "./plugins/statistics/Statistics.js";
29
+ export * from "./plugins/source-controller/SourceController.js";
30
30
  export * from "./plugins/subtitles/Subtitles.js";
31
+ export * from "./plugins/telemetry/Telemetry.js";
31
32
  export * from "./plugins/thumbnails/Thumbnails.js";
32
- export * from "./plugins/source-controller/SourceController.js";
33
33
  // _ vast-ads
34
34
  // _ video360
35
35
  export * from "./plugins/volume-fade/VolumeFade.js";
@@ -821,9 +821,9 @@ export default class HlsPlayback extends HTML5Video {
821
821
 
822
822
  play() {
823
823
  !this._hls && this._setup()
824
- assert.ok(this._hls, 'Hls.js instance is not available')
825
824
  !this._manifestParsed &&
826
825
  !this.options.hlsPlayback.preload &&
826
+ // @ts-expect-error
827
827
  this._hls.loadSource(this.options.src)
828
828
  super.play()
829
829
  this._startTimeUpdateTimer()