@gcorevideo/player 2.22.18 → 2.22.20
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/assets/audio-selector/track-selector.ejs +3 -3
- package/assets/bottom-gear/bottomgear.ejs +3 -3
- package/assets/dvr-controls/dvr_controls.scss +0 -12
- package/dist/core.js +1 -1
- package/dist/index.css +803 -810
- package/dist/index.js +195 -176
- package/dist/player.d.ts +121 -108
- package/dist/plugins/index.css +904 -911
- package/dist/plugins/index.js +132 -112
- package/docs/api/player.bitratetrackrecord.md +20 -0
- package/docs/api/player.clapprstats.exportmetrics.md +2 -2
- package/docs/api/player.clapprstats.md +0 -4
- package/docs/api/player.clapprstatschronograph.md +115 -0
- package/docs/api/player.clapprstatscounter.md +211 -0
- package/docs/api/player.clapprstatsevents.md +51 -0
- package/docs/api/player.clapprstatsmetrics.md +52 -0
- package/docs/api/player.clipspluginsettings.md +1 -1
- package/docs/api/player.md +57 -2
- package/docs/api/player.nerdstats.md +3 -3
- package/docs/api/player.playerconfig.md +1 -1
- package/docs/api/player.playerconfig.playbacktype.md +6 -1
- package/docs/api/player.timeupdate.md +6 -3
- package/lib/plugins/audio-selector/AudioSelector.d.ts +1 -1
- package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
- package/lib/plugins/audio-selector/AudioSelector.js +15 -8
- package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +2 -2
- package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts +4 -4
- package/lib/plugins/clappr-nerd-stats/NerdStats.js +4 -4
- package/lib/plugins/clappr-stats/ClapprStats.d.ts +5 -2
- package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
- package/lib/plugins/clappr-stats/ClapprStats.js +31 -33
- package/lib/plugins/clappr-stats/types.d.ts +21 -21
- package/lib/plugins/clappr-stats/types.d.ts.map +1 -1
- package/lib/plugins/clappr-stats/types.js +22 -22
- package/lib/plugins/clappr-stats/utils.d.ts +2 -2
- package/lib/plugins/clappr-stats/utils.d.ts.map +1 -1
- package/lib/plugins/click-to-pause/ClickToPause.js +1 -1
- package/lib/plugins/clips/Clips.d.ts +1 -1
- package/lib/plugins/dvr-controls/DvrControls.d.ts +6 -2
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +39 -27
- package/lib/plugins/media-control/MediaControl.d.ts +6 -2
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +20 -9
- package/lib/plugins/picture-in-picture/PictureInPicture.js +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +1 -1
- package/lib/plugins/vast-ads/VastAds.js +1 -1
- package/lib/plugins/vast-ads/rollmanager.js +1 -1
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +7 -4
- package/lib/types.d.ts +1 -1
- package/package.json +3 -3
- package/src/playback/__tests__/HTML5Video.test.ts +2 -2
- package/src/plugins/audio-selector/AudioSelector.ts +14 -7
- package/src/plugins/audio-selector/__tests__/AudioSelector.test.ts +8 -8
- package/src/plugins/audio-selector/__tests__/__snapshots__/AudioSelector.test.ts.snap +15 -15
- package/src/plugins/bottom-gear/BottomGear.ts +2 -2
- package/src/plugins/bottom-gear/__tests__/BottomGear.test.ts +8 -5
- package/src/plugins/bottom-gear/__tests__/__snapshots__/BottomGear.test.ts.snap +3 -3
- package/src/plugins/clappr-nerd-stats/NerdStats.ts +5 -5
- package/src/plugins/clappr-stats/ClapprStats.ts +41 -40
- package/src/plugins/clappr-stats/__tests__/ClapprStats.test.ts +12 -12
- package/src/plugins/clappr-stats/types.ts +21 -21
- package/src/plugins/clappr-stats/utils.ts +2 -2
- package/src/plugins/click-to-pause/ClickToPause.ts +1 -1
- package/src/plugins/clips/Clips.ts +1 -1
- package/src/plugins/clips/__tests__/Clips.test.ts +1 -1
- package/src/plugins/clips/__tests__/__snapshots__/Clips.test.ts.snap +1 -1
- package/src/plugins/dvr-controls/DvrControls.ts +51 -37
- package/src/plugins/dvr-controls/__tests__/DvrControls.test.ts +84 -26
- package/src/plugins/dvr-controls/__tests__/__snapshots__/DvrControls.test.ts.snap +0 -12
- package/src/plugins/media-control/MediaControl.ts +21 -9
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +8 -5
- package/src/plugins/media-control/__tests__/__snapshots__/MediaControl.test.ts.snap +20 -20
- package/src/plugins/picture-in-picture/PictureInPicture.ts +1 -1
- package/src/plugins/subtitles/ClosedCaptions.ts +1 -1
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +1 -1
- package/src/plugins/vast-ads/VastAds.ts +1 -1
- package/src/plugins/vast-ads/rollmanager.ts +1 -1
- package/src/testUtils.ts +11 -5
- package/src/types.ts +1 -1
- package/temp/player.api.json +630 -12
- package/tsconfig.tsbuildinfo +1 -1
package/dist/index.js
CHANGED
|
@@ -12680,7 +12680,7 @@ var PlaybackEvents;
|
|
|
12680
12680
|
// https://github.com/clappr/clappr/blob/8752995ea439321ac7ca3cd35e8c64de7a3c3d17/LICENSE
|
|
12681
12681
|
const AUTO$1 = -1;
|
|
12682
12682
|
const { now: now$2 } = Utils;
|
|
12683
|
-
const T$
|
|
12683
|
+
const T$k = 'playback.dash';
|
|
12684
12684
|
class DashPlayback extends BasePlayback {
|
|
12685
12685
|
_levels = null;
|
|
12686
12686
|
_currentLevel = null;
|
|
@@ -12955,10 +12955,10 @@ class DashPlayback extends BasePlayback {
|
|
|
12955
12955
|
}
|
|
12956
12956
|
_onPlaybackError = (event) => {
|
|
12957
12957
|
// TODO
|
|
12958
|
-
trace(`${T$
|
|
12958
|
+
trace(`${T$k} _onPlaybackError`, { event });
|
|
12959
12959
|
};
|
|
12960
12960
|
_onDASHJSSError = (event) => {
|
|
12961
|
-
trace(`${T$
|
|
12961
|
+
trace(`${T$k} _onDASHJSSError`, { event });
|
|
12962
12962
|
this._stopTimeUpdateTimer();
|
|
12963
12963
|
// Note that the other error types are deprecated
|
|
12964
12964
|
const e = event.error;
|
|
@@ -12993,7 +12993,7 @@ class DashPlayback extends BasePlayback {
|
|
|
12993
12993
|
}
|
|
12994
12994
|
};
|
|
12995
12995
|
triggerError(error) {
|
|
12996
|
-
trace(`${T$
|
|
12996
|
+
trace(`${T$k} triggerError`, { error });
|
|
12997
12997
|
// this triggers Events.ERROR to be handled by the UI
|
|
12998
12998
|
this.trigger(Events$1.PLAYBACK_ERROR, this.createError(error, {
|
|
12999
12999
|
useCodePrefix: false,
|
|
@@ -13032,10 +13032,10 @@ class DashPlayback extends BasePlayback {
|
|
|
13032
13032
|
}
|
|
13033
13033
|
get dvrEnabled() {
|
|
13034
13034
|
if (!this._dash) {
|
|
13035
|
-
trace(`${T$
|
|
13035
|
+
trace(`${T$k} dvrEnable no dash player instance`);
|
|
13036
13036
|
return false;
|
|
13037
13037
|
}
|
|
13038
|
-
trace(`${T$
|
|
13038
|
+
trace(`${T$k} get.dvrEnabled`, {
|
|
13039
13039
|
dvrWindowSize: this._dash?.getDVRWindowSize(),
|
|
13040
13040
|
minDvrSize: this._minDvrSize,
|
|
13041
13041
|
playbackType: this.getPlaybackType(),
|
|
@@ -13057,7 +13057,7 @@ class DashPlayback extends BasePlayback {
|
|
|
13057
13057
|
this.trigger(Events$1.PLAYBACK_PROGRESS, progress, {});
|
|
13058
13058
|
}
|
|
13059
13059
|
play() {
|
|
13060
|
-
trace(`${T$
|
|
13060
|
+
trace(`${T$k} play`, { dash: !!this._dash });
|
|
13061
13061
|
if (!this._dash) {
|
|
13062
13062
|
this._setup();
|
|
13063
13063
|
}
|
|
@@ -13143,7 +13143,7 @@ class DashPlayback extends BasePlayback {
|
|
|
13143
13143
|
}
|
|
13144
13144
|
// @ts-expect-error
|
|
13145
13145
|
get currentAudioTrack() {
|
|
13146
|
-
trace(`${T$
|
|
13146
|
+
trace(`${T$k} get currentAudioTrack`);
|
|
13147
13147
|
assert.ok(this._dash, 'DASH.js MediaPlayer is not initialized');
|
|
13148
13148
|
const t = this._dash.getCurrentTrackFor('audio');
|
|
13149
13149
|
if (!t) {
|
|
@@ -41844,7 +41844,7 @@ const AUTO = -1;
|
|
|
41844
41844
|
const DEFAULT_RECOVER_ATTEMPTS = 16;
|
|
41845
41845
|
Events$1.register('PLAYBACK_FRAGMENT_CHANGED');
|
|
41846
41846
|
Events$1.register('PLAYBACK_FRAGMENT_PARSING_METADATA');
|
|
41847
|
-
const T$
|
|
41847
|
+
const T$j = 'playback.hls';
|
|
41848
41848
|
class HlsPlayback extends BasePlayback {
|
|
41849
41849
|
_ccIsSetup = false;
|
|
41850
41850
|
_ccTracksUpdated = false;
|
|
@@ -42073,7 +42073,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42073
42073
|
maxBufferLength: 2,
|
|
42074
42074
|
maxMaxBufferLength: 4,
|
|
42075
42075
|
}, this.options.playback.hlsjsConfig);
|
|
42076
|
-
trace(`${T$
|
|
42076
|
+
trace(`${T$j} _createHLSInstance`, { config });
|
|
42077
42077
|
this._hls = new Hls(config);
|
|
42078
42078
|
}
|
|
42079
42079
|
_attachHLSMedia() {
|
|
@@ -42164,7 +42164,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42164
42164
|
}
|
|
42165
42165
|
else {
|
|
42166
42166
|
Log.error('hlsjs: failed to recover', { evt, data });
|
|
42167
|
-
trace(`${T$
|
|
42167
|
+
trace(`${T$j} _recover failed to recover`, {
|
|
42168
42168
|
type: data.type,
|
|
42169
42169
|
details: data.details,
|
|
42170
42170
|
});
|
|
@@ -42250,7 +42250,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42250
42250
|
this.trigger(Events$1.PLAYBACK_SETTINGSUPDATE);
|
|
42251
42251
|
}
|
|
42252
42252
|
_onHLSJSError(evt, data) {
|
|
42253
|
-
trace(`${T$
|
|
42253
|
+
trace(`${T$j} _onHLSJSError`, {
|
|
42254
42254
|
fatal: data.fatal,
|
|
42255
42255
|
type: data.type,
|
|
42256
42256
|
details: data.details,
|
|
@@ -42298,7 +42298,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42298
42298
|
evt,
|
|
42299
42299
|
data,
|
|
42300
42300
|
});
|
|
42301
|
-
trace(`${T$
|
|
42301
|
+
trace(`${T$j} _onHLSJSError trying to recover from network error`, {
|
|
42302
42302
|
details: data.details,
|
|
42303
42303
|
});
|
|
42304
42304
|
error.level = PlayerError.Levels.WARN;
|
|
@@ -42311,7 +42311,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42311
42311
|
evt,
|
|
42312
42312
|
data,
|
|
42313
42313
|
});
|
|
42314
|
-
trace(`${T$
|
|
42314
|
+
trace(`${T$j} _onHLSJSError trying to recover from media error`, {
|
|
42315
42315
|
details: data.details,
|
|
42316
42316
|
});
|
|
42317
42317
|
error.level = PlayerError.Levels.WARN;
|
|
@@ -42341,7 +42341,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42341
42341
|
return;
|
|
42342
42342
|
}
|
|
42343
42343
|
Log.warn('hlsjs: non-fatal error occurred', { evt, data });
|
|
42344
|
-
trace(`${T$
|
|
42344
|
+
trace(`${T$j} _onHLSJSError non-fatal error occurred`, {
|
|
42345
42345
|
type: data.type,
|
|
42346
42346
|
details: data.details,
|
|
42347
42347
|
});
|
|
@@ -42675,11 +42675,11 @@ class HlsPlayback extends BasePlayback {
|
|
|
42675
42675
|
this._hls.audioTrack = Number(id); // TODO or find index by .id == id?
|
|
42676
42676
|
}
|
|
42677
42677
|
_onAudioTracksUpdated(_, data) {
|
|
42678
|
-
trace(`${T$
|
|
42678
|
+
trace(`${T$j} onAudioTracksUpdated`);
|
|
42679
42679
|
this.trigger(Events$1.PLAYBACK_AUDIO_AVAILABLE, data.audioTracks.map(toClapprTrack));
|
|
42680
42680
|
}
|
|
42681
42681
|
_onAudioTrackSwitched(_, data) {
|
|
42682
|
-
trace(`${T$
|
|
42682
|
+
trace(`${T$j} onAudioTrackSwitched`);
|
|
42683
42683
|
// @ts-ignore
|
|
42684
42684
|
const track = this._hls.audioTracks[data.id];
|
|
42685
42685
|
this.trigger(Events$1.PLAYBACK_AUDIO_CHANGED, toClapprTrack(track));
|
|
@@ -42700,7 +42700,7 @@ function toClapprTrack(t) {
|
|
|
42700
42700
|
};
|
|
42701
42701
|
}
|
|
42702
42702
|
|
|
42703
|
-
const T$
|
|
42703
|
+
const T$i = 'playback.html5_video';
|
|
42704
42704
|
const STALL_TIMEOUT = 15000;
|
|
42705
42705
|
class HTML5Video extends BasePlayback {
|
|
42706
42706
|
stallTimerId = null;
|
|
@@ -42708,7 +42708,7 @@ class HTML5Video extends BasePlayback {
|
|
|
42708
42708
|
* @internal
|
|
42709
42709
|
*/
|
|
42710
42710
|
createError(errorData, options) {
|
|
42711
|
-
trace(`${T$
|
|
42711
|
+
trace(`${T$i} createError`, {
|
|
42712
42712
|
errorData: { ...errorData },
|
|
42713
42713
|
});
|
|
42714
42714
|
const i18n = this.i18n ||
|
|
@@ -42724,11 +42724,11 @@ class HTML5Video extends BasePlayback {
|
|
|
42724
42724
|
return super.createError(errorData, { ...options, useCodePrefix: false });
|
|
42725
42725
|
}
|
|
42726
42726
|
_onWaiting() {
|
|
42727
|
-
trace(`${T$
|
|
42727
|
+
trace(`${T$i} _onWaiting`);
|
|
42728
42728
|
super._onWaiting();
|
|
42729
42729
|
}
|
|
42730
42730
|
_onEnded() {
|
|
42731
|
-
trace(`${T$
|
|
42731
|
+
trace(`${T$i} _onEnded`);
|
|
42732
42732
|
if (this.stallTimerId) {
|
|
42733
42733
|
clearTimeout(this.stallTimerId);
|
|
42734
42734
|
this.stallTimerId = null;
|
|
@@ -42736,12 +42736,12 @@ class HTML5Video extends BasePlayback {
|
|
|
42736
42736
|
super._onEnded();
|
|
42737
42737
|
}
|
|
42738
42738
|
_handleBufferingEvents() {
|
|
42739
|
-
trace(`${T$
|
|
42739
|
+
trace(`${T$i} _handleBufferingEvents`, {
|
|
42740
42740
|
networkState: this.el.networkState,
|
|
42741
42741
|
});
|
|
42742
42742
|
if (!this.stallTimerId) {
|
|
42743
42743
|
this.stallTimerId = setTimeout(() => {
|
|
42744
|
-
trace(`${T$
|
|
42744
|
+
trace(`${T$i} _handleBufferingEvents stall timeout`, {
|
|
42745
42745
|
buffering: this.buffering,
|
|
42746
42746
|
ended: this.ended,
|
|
42747
42747
|
});
|
|
@@ -42759,7 +42759,7 @@ class HTML5Video extends BasePlayback {
|
|
|
42759
42759
|
super._handleBufferingEvents();
|
|
42760
42760
|
}
|
|
42761
42761
|
_onPlaying() {
|
|
42762
|
-
trace(`${T$
|
|
42762
|
+
trace(`${T$i} _onPlaying`);
|
|
42763
42763
|
if (this.stallTimerId) {
|
|
42764
42764
|
clearTimeout(this.stallTimerId);
|
|
42765
42765
|
this.stallTimerId = null;
|
|
@@ -42767,7 +42767,7 @@ class HTML5Video extends BasePlayback {
|
|
|
42767
42767
|
super._onPlaying();
|
|
42768
42768
|
}
|
|
42769
42769
|
_onPause() {
|
|
42770
|
-
trace(`${T$
|
|
42770
|
+
trace(`${T$i} _onPause`);
|
|
42771
42771
|
super._onPause();
|
|
42772
42772
|
if (this.stallTimerId) {
|
|
42773
42773
|
clearTimeout(this.stallTimerId);
|
|
@@ -42777,7 +42777,7 @@ class HTML5Video extends BasePlayback {
|
|
|
42777
42777
|
get audioTracks() {
|
|
42778
42778
|
const tracks = this.el.audioTracks;
|
|
42779
42779
|
const supported = !!tracks;
|
|
42780
|
-
trace(`${T$
|
|
42780
|
+
trace(`${T$i} get audioTracks`, { supported });
|
|
42781
42781
|
const retval = [];
|
|
42782
42782
|
if (supported) {
|
|
42783
42783
|
for (let i = 0; i < tracks.length; i++) {
|
|
@@ -42796,7 +42796,7 @@ class HTML5Video extends BasePlayback {
|
|
|
42796
42796
|
get currentAudioTrack() {
|
|
42797
42797
|
const tracks = this.el.audioTracks;
|
|
42798
42798
|
const supported = !!tracks;
|
|
42799
|
-
trace(`${T$
|
|
42799
|
+
trace(`${T$i} get currentAudioTrack`, {
|
|
42800
42800
|
supported,
|
|
42801
42801
|
});
|
|
42802
42802
|
if (supported) {
|
|
@@ -42817,7 +42817,7 @@ class HTML5Video extends BasePlayback {
|
|
|
42817
42817
|
switchAudioTrack(id) {
|
|
42818
42818
|
const tracks = this.el.audioTracks;
|
|
42819
42819
|
const supported = !!tracks;
|
|
42820
|
-
trace(`${T$
|
|
42820
|
+
trace(`${T$i} switchAudioTrack`, {
|
|
42821
42821
|
supported,
|
|
42822
42822
|
});
|
|
42823
42823
|
if (supported) {
|
|
@@ -42836,7 +42836,7 @@ function registerPlaybacks() {
|
|
|
42836
42836
|
Loader.registerPlayback(DashPlayback);
|
|
42837
42837
|
}
|
|
42838
42838
|
|
|
42839
|
-
const T$
|
|
42839
|
+
const T$h = 'GPlayer';
|
|
42840
42840
|
const DEFAULT_OPTIONS = {
|
|
42841
42841
|
autoPlay: false,
|
|
42842
42842
|
debug: 'none',
|
|
@@ -42924,7 +42924,7 @@ class Player {
|
|
|
42924
42924
|
* ```
|
|
42925
42925
|
*/
|
|
42926
42926
|
attachTo(playerElement) {
|
|
42927
|
-
trace(`${T$
|
|
42927
|
+
trace(`${T$h} attachTo`, {
|
|
42928
42928
|
player: !!this.player,
|
|
42929
42929
|
});
|
|
42930
42930
|
assert.ok(!this.player, 'Player already initialized');
|
|
@@ -42934,7 +42934,7 @@ class Player {
|
|
|
42934
42934
|
}
|
|
42935
42935
|
const coreOpts = this.buildCoreOptions(playerElement);
|
|
42936
42936
|
const { core, container } = Player.getRegisteredPlugins();
|
|
42937
|
-
trace(`${T$
|
|
42937
|
+
trace(`${T$h} init`, {
|
|
42938
42938
|
registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.prototype.name),
|
|
42939
42939
|
});
|
|
42940
42940
|
coreOpts.plugins = {
|
|
@@ -42948,7 +42948,7 @@ class Player {
|
|
|
42948
42948
|
* Destroys the player, releasing all resources and unmounting its UI from the DOM.
|
|
42949
42949
|
*/
|
|
42950
42950
|
destroy() {
|
|
42951
|
-
trace(`${T$
|
|
42951
|
+
trace(`${T$h} destroy`, {
|
|
42952
42952
|
player: !!this.player,
|
|
42953
42953
|
});
|
|
42954
42954
|
if (this.player) {
|
|
@@ -43135,7 +43135,7 @@ class Player {
|
|
|
43135
43135
|
this.config = $.extend(true, this.config, config);
|
|
43136
43136
|
}
|
|
43137
43137
|
initPlayer(coreOptions) {
|
|
43138
|
-
trace(`${T$
|
|
43138
|
+
trace(`${T$h} initPlayer`, {
|
|
43139
43139
|
autoPlay: coreOptions.autoPlay,
|
|
43140
43140
|
sources: coreOptions.sources,
|
|
43141
43141
|
player: !!this.player,
|
|
@@ -43160,7 +43160,7 @@ class Player {
|
|
|
43160
43160
|
}
|
|
43161
43161
|
}
|
|
43162
43162
|
triggerAutoPlay() {
|
|
43163
|
-
trace(`${T$
|
|
43163
|
+
trace(`${T$h} triggerAutoPlay`);
|
|
43164
43164
|
setTimeout(() => {
|
|
43165
43165
|
this.player?.play({
|
|
43166
43166
|
autoPlay: true,
|
|
@@ -43178,7 +43178,7 @@ class Player {
|
|
|
43178
43178
|
// TODO test
|
|
43179
43179
|
events = {
|
|
43180
43180
|
onReady: () => {
|
|
43181
|
-
trace(`${T$
|
|
43181
|
+
trace(`${T$h} onReady`, {
|
|
43182
43182
|
ready: this.ready,
|
|
43183
43183
|
});
|
|
43184
43184
|
if (this.ready) {
|
|
@@ -43212,7 +43212,7 @@ class Player {
|
|
|
43212
43212
|
buildCoreOptions(rootNode) {
|
|
43213
43213
|
const sources = this.buildMediaSourcesList();
|
|
43214
43214
|
const source = sources[0];
|
|
43215
|
-
trace(`${T$
|
|
43215
|
+
trace(`${T$h} buildCoreOptions`, {
|
|
43216
43216
|
source,
|
|
43217
43217
|
sources,
|
|
43218
43218
|
});
|
|
@@ -43273,7 +43273,7 @@ class Player {
|
|
|
43273
43273
|
assert.ok(this.player, 'Player is not initialized');
|
|
43274
43274
|
const core = this.player.core;
|
|
43275
43275
|
core.on(Events$1.CORE_SCREEN_ORIENTATION_CHANGED, ({ orientation }) => {
|
|
43276
|
-
trace(`${T$
|
|
43276
|
+
trace(`${T$h} on CORE_SCREEN_ORIENTATION_CHANGED`, {
|
|
43277
43277
|
orientation,
|
|
43278
43278
|
rootNode: {
|
|
43279
43279
|
width: this.rootNode?.clientWidth,
|
|
@@ -43288,14 +43288,14 @@ class Player {
|
|
|
43288
43288
|
}
|
|
43289
43289
|
}, null);
|
|
43290
43290
|
core.on(Events$1.CORE_RESIZE, ({ width, height }) => {
|
|
43291
|
-
trace(`${T$
|
|
43291
|
+
trace(`${T$h} on CORE_RESIZE`, {
|
|
43292
43292
|
width,
|
|
43293
43293
|
height,
|
|
43294
43294
|
});
|
|
43295
43295
|
this.safeTriggerEvent(PlayerEvent.Resize, { width, height });
|
|
43296
43296
|
}, null);
|
|
43297
43297
|
core.on(Events$1.CORE_FULLSCREEN, (isFullscreen) => {
|
|
43298
|
-
trace(`${T$
|
|
43298
|
+
trace(`${T$h} CORE_FULLSCREEN`, {
|
|
43299
43299
|
isFullscreen,
|
|
43300
43300
|
});
|
|
43301
43301
|
this.safeTriggerEvent(PlayerEvent.Fullscreen, isFullscreen);
|
|
@@ -43303,7 +43303,7 @@ class Player {
|
|
|
43303
43303
|
}
|
|
43304
43304
|
}
|
|
43305
43305
|
|
|
43306
|
-
var version$1 = "2.22.
|
|
43306
|
+
var version$1 = "2.22.20";
|
|
43307
43307
|
|
|
43308
43308
|
var packages = {
|
|
43309
43309
|
"node_modules/@clappr/core": {
|
|
@@ -43327,10 +43327,11 @@ function version() {
|
|
|
43327
43327
|
};
|
|
43328
43328
|
}
|
|
43329
43329
|
|
|
43330
|
-
const pluginHtml$7 = "<button data-audiotracks-button class='gcore-skin-button-color' id=\"audiotracks-button\">\n <span class='audio-text'><%= title %></span> <span class=\"audio-arrow\"><%= icon %></span>\n</button>\n<ul class='gcore-skin-bg-color menu hidden' id=\"audiotracks-select\">\n <% for (const track of tracks) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-audiotracks-select=\"<%= track.id %>\">\n <%= track.label %>\n </a>\n </li>\n <% }; %>\n</ul>\n";
|
|
43330
|
+
const pluginHtml$7 = "<button data-audiotracks-button class='gcore-skin-button-color' id=\"audiotracks-button\" aria-haspopup=\"menu\" aria-expanded=\"false\">\n <span class='audio-text'><%= title %></span> <span class=\"audio-arrow\"><%= icon %></span>\n</button>\n<ul class='gcore-skin-bg-color menu hidden' id=\"audiotracks-select\" role=\"menu\">\n <% for (const track of tracks) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-audiotracks-select=\"<%= track.id %>\" role=\"menuitemradio\" aria-checked=\"<%= track.id === current %>\">\n <%= track.label %>\n </a>\n </li>\n <% }; %>\n</ul>\n";
|
|
43331
43331
|
|
|
43332
43332
|
const audioArrow = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"9px\" height=\"6px\" viewBox=\"0 0 9 6\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Generator: Sketch 49 (51002) - http://www.bohemiancoding.com/sketch -->\n <title>quality-arrow</title>\n <desc>Created with Sketch.</desc>\n <defs></defs>\n <g id=\"quality-arrow\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path\n d=\"M5.07079194,5.78553848 C4.91457318,5.94277844 4.70551573,6.00941824 4.50028717,5.99893557 C4.2950586,6.00941824 4.08676693,5.94277844 3.92978239,5.78553848 L0.221118462,1.2997069 C-0.0737061539,1.00469478 -0.0737061539,0.526236029 0.221118462,0.231972666 C0.515177299,-0.0630394586 1.23500883,0.00734414472 1.64852907,0.00734414472 L7.77475484,0.00734414472 C8.21201421,0.00734414472 8.48539703,-0.0630394586 8.77945587,0.231972666 C9.07351471,0.526236029 9.07351471,1.00469478 8.77945587,1.2997069 L5.07079194,5.78553848 Z\"\n fill=\"#FFFFFE\"></path>\n </g>\n</svg>\n";
|
|
43333
43333
|
|
|
43334
|
+
// import { trace } from '@gcorevideo/utils'
|
|
43334
43335
|
const VERSION$7 = '2.22.4';
|
|
43335
43336
|
// const T = 'plugins.audiotracks'
|
|
43336
43337
|
/**
|
|
@@ -43393,7 +43394,7 @@ class AudioTracks extends UICorePlugin {
|
|
|
43393
43394
|
const mediaControl = this.core.getPlugin('media_control');
|
|
43394
43395
|
assert(mediaControl, 'media_control plugin is required');
|
|
43395
43396
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, () => {
|
|
43396
|
-
mediaControl.
|
|
43397
|
+
mediaControl.mount('audiotracks', this.$el);
|
|
43397
43398
|
});
|
|
43398
43399
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, this.hideMenu);
|
|
43399
43400
|
}
|
|
@@ -43424,18 +43425,18 @@ class AudioTracks extends UICorePlugin {
|
|
|
43424
43425
|
if (!this.shouldRender()) {
|
|
43425
43426
|
return this;
|
|
43426
43427
|
}
|
|
43427
|
-
this.core.getPlugin('media_control');
|
|
43428
43428
|
this.$el.html(AudioTracks.template({
|
|
43429
43429
|
tracks: this.tracks,
|
|
43430
43430
|
title: this.getTitle(),
|
|
43431
43431
|
icon: audioArrow,
|
|
43432
|
+
current: this.currentTrack?.id,
|
|
43432
43433
|
}));
|
|
43433
43434
|
this.updateText();
|
|
43434
43435
|
this.highlightCurrentTrack();
|
|
43435
43436
|
return this;
|
|
43436
43437
|
}
|
|
43437
43438
|
onTrackSelect(event) {
|
|
43438
|
-
const id = event.
|
|
43439
|
+
const id = event.currentTarget?.dataset?.audiotracksSelect;
|
|
43439
43440
|
if (id) {
|
|
43440
43441
|
this.selectAudioTrack(id);
|
|
43441
43442
|
}
|
|
@@ -43444,7 +43445,7 @@ class AudioTracks extends UICorePlugin {
|
|
|
43444
43445
|
return false;
|
|
43445
43446
|
}
|
|
43446
43447
|
selectAudioTrack(id) {
|
|
43447
|
-
this.
|
|
43448
|
+
this.startTrackSwitching();
|
|
43448
43449
|
this.core.activeContainer.switchAudioTrack(id);
|
|
43449
43450
|
this.updateText();
|
|
43450
43451
|
}
|
|
@@ -43452,7 +43453,9 @@ class AudioTracks extends UICorePlugin {
|
|
|
43452
43453
|
this.$el.find('#audiotracks-select').addClass('hidden');
|
|
43453
43454
|
}
|
|
43454
43455
|
toggleContextMenu() {
|
|
43455
|
-
this.$el.find('#audiotracks-select').toggleClass('hidden');
|
|
43456
|
+
this.$el.find('#audiotracks-select').toggleClass('hidden'); // TODO use plain CSS display: none
|
|
43457
|
+
const open = !this.$el.find('#audiotracks-select').hasClass('hidden'); // TODO hold state
|
|
43458
|
+
this.$el.find('#audiotracks-button').attr('aria-expanded', open);
|
|
43456
43459
|
}
|
|
43457
43460
|
buttonElement() {
|
|
43458
43461
|
return this.$('button');
|
|
@@ -43470,7 +43473,7 @@ class AudioTracks extends UICorePlugin {
|
|
|
43470
43473
|
}
|
|
43471
43474
|
return this.currentTrack.label || this.currentTrack.language;
|
|
43472
43475
|
}
|
|
43473
|
-
|
|
43476
|
+
startTrackSwitching() {
|
|
43474
43477
|
this.buttonElement().addClass('changing');
|
|
43475
43478
|
}
|
|
43476
43479
|
updateText() {
|
|
@@ -43481,12 +43484,16 @@ class AudioTracks extends UICorePlugin {
|
|
|
43481
43484
|
}
|
|
43482
43485
|
highlightCurrentTrack() {
|
|
43483
43486
|
this.trackElement().removeClass('current');
|
|
43484
|
-
this.trackElement()
|
|
43487
|
+
this.trackElement()
|
|
43488
|
+
.find('a')
|
|
43489
|
+
.removeClass('gcore-skin-active')
|
|
43490
|
+
.attr('aria-checked', 'false');
|
|
43485
43491
|
if (this.currentTrack) {
|
|
43486
43492
|
this.trackElement(this.currentTrack.id)
|
|
43487
43493
|
.addClass('current')
|
|
43488
43494
|
.find('a')
|
|
43489
|
-
.addClass('gcore-skin-active')
|
|
43495
|
+
.addClass('gcore-skin-active')
|
|
43496
|
+
.attr('aria-checked', 'true');
|
|
43490
43497
|
}
|
|
43491
43498
|
}
|
|
43492
43499
|
}
|
|
@@ -43495,7 +43502,7 @@ const volumeOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fil
|
|
|
43495
43502
|
|
|
43496
43503
|
const pluginHtml$6 = "<div class=\"big-mute-icon-wrapper\" data-big-mute>\n <div class=\"big-mute-icon gcore-skin-border-color\" data-big-mute-icon></div>\n</div>\n";
|
|
43497
43504
|
|
|
43498
|
-
const T$
|
|
43505
|
+
const T$g = 'plugins.big_mute_button';
|
|
43499
43506
|
// TODO rewrite as a container plugin
|
|
43500
43507
|
/**
|
|
43501
43508
|
* `PLUGIN` that displays a big mute button over the video when it's muted.
|
|
@@ -43536,7 +43543,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43536
43543
|
this.listenTo(this.core, Events$1.CORE_READY, this.onCoreReady);
|
|
43537
43544
|
this.listenTo(this.core, 'core:advertisement:start', this.onStartAd);
|
|
43538
43545
|
this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd);
|
|
43539
|
-
trace(`${T$
|
|
43546
|
+
trace(`${T$g} bindEvents`, {
|
|
43540
43547
|
mediacontrol: !!this.core.mediaControl,
|
|
43541
43548
|
});
|
|
43542
43549
|
this.listenTo(this.core.mediaControl, Events$1.MEDIACONTROL_RENDERED, this.mediaControlRendered);
|
|
@@ -43561,12 +43568,12 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43561
43568
|
}
|
|
43562
43569
|
mediaControlRendered() {
|
|
43563
43570
|
const container = this.core.activeContainer;
|
|
43564
|
-
trace(`${T$
|
|
43571
|
+
trace(`${T$g} mediaControlRendered`, {
|
|
43565
43572
|
container: !!container,
|
|
43566
43573
|
});
|
|
43567
43574
|
if (container) {
|
|
43568
43575
|
this.listenTo(container.playback, Events$1.PLAYBACK_PLAY, () => {
|
|
43569
|
-
trace(`${T$
|
|
43576
|
+
trace(`${T$g} PLAYBACK_PLAY`);
|
|
43570
43577
|
this.render();
|
|
43571
43578
|
});
|
|
43572
43579
|
}
|
|
@@ -43590,7 +43597,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43590
43597
|
}
|
|
43591
43598
|
const { autoPlay, wasMuted } = this.options;
|
|
43592
43599
|
const volume = container.volume;
|
|
43593
|
-
trace(`${T$
|
|
43600
|
+
trace(`${T$g} shouldRender`, {
|
|
43594
43601
|
autoPlay,
|
|
43595
43602
|
wasMuted,
|
|
43596
43603
|
volume,
|
|
@@ -43602,7 +43609,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43602
43609
|
*/
|
|
43603
43610
|
render() {
|
|
43604
43611
|
if (this.shouldRender()) {
|
|
43605
|
-
trace(`${T$
|
|
43612
|
+
trace(`${T$g} render`, {
|
|
43606
43613
|
el: !!this.$el,
|
|
43607
43614
|
});
|
|
43608
43615
|
this.$el.html(BigMuteButton.template());
|
|
@@ -43641,14 +43648,14 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43641
43648
|
}
|
|
43642
43649
|
}
|
|
43643
43650
|
|
|
43644
|
-
const pluginHtml$5 = "<button
|
|
43651
|
+
const pluginHtml$5 = "<button class=\"media-control-button gplayer-lite-btn gcore-skin-button-color gear-icon\" id=\"gear-button\">\n <%= icon %>\n</button>\n<div class=\"gear-wrapper gcore-skin-bg-color\" id=\"gear-options-wrapper\" style=\"display:none\">\n <ul class=\"gear-options-list\" id=\"gear-options\" role=\"menu\"></ul>\n</div>\n";
|
|
43645
43652
|
|
|
43646
43653
|
const gearIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_660_1503)\">\n <path\n d=\"M19.14 12.94C19.18 12.64 19.2 12.33 19.2 12C19.2 11.68 19.18 11.36 19.13 11.06L21.16 9.47999C21.34 9.33999 21.39 9.06999 21.28 8.86999L19.36 5.54999C19.24 5.32999 18.99 5.25999 18.77 5.32999L16.38 6.28999C15.88 5.90999 15.35 5.58999 14.76 5.34999L14.4 2.80999C14.36 2.56999 14.16 2.39999 13.92 2.39999H10.08C9.83999 2.39999 9.64999 2.56999 9.60999 2.80999L9.24999 5.34999C8.65999 5.58999 8.11999 5.91999 7.62999 6.28999L5.23999 5.32999C5.01999 5.24999 4.76999 5.32999 4.64999 5.54999L2.73999 8.86999C2.61999 9.07999 2.65999 9.33999 2.85999 9.47999L4.88999 11.06C4.83999 11.36 4.79999 11.69 4.79999 12C4.79999 12.31 4.81999 12.64 4.86999 12.94L2.83999 14.52C2.65999 14.66 2.60999 14.93 2.71999 15.13L4.63999 18.45C4.75999 18.67 5.00999 18.74 5.22999 18.67L7.61999 17.71C8.11999 18.09 8.64999 18.41 9.23999 18.65L9.59999 21.19C9.64999 21.43 9.83999 21.6 10.08 21.6H13.92C14.16 21.6 14.36 21.43 14.39 21.19L14.75 18.65C15.34 18.41 15.88 18.09 16.37 17.71L18.76 18.67C18.98 18.75 19.23 18.67 19.35 18.45L21.27 15.13C21.39 14.91 21.34 14.66 21.15 14.52L19.14 12.94ZM12 15.6C10.02 15.6 8.39999 13.98 8.39999 12C8.39999 10.02 10.02 8.39999 12 8.39999C13.98 8.39999 15.6 10.02 15.6 12C15.6 13.98 13.98 15.6 12 15.6Z\"\n fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_660_1503\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
43647
43654
|
|
|
43648
43655
|
const gearHdIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_28_1567)\">\n <path\n d=\"M19.14 12.94C19.18 12.64 19.2 12.33 19.2 12C19.2 11.68 19.18 11.36 19.13 11.06L21.16 9.47999C21.34 9.33999 21.39 9.06999 21.28 8.86999L19.36 5.54999C19.24 5.32999 18.99 5.25999 18.77 5.32999L16.38 6.28999C15.88 5.90999 15.35 5.58999 14.76 5.34999L14.4 2.80999C14.36 2.56999 14.16 2.39999 13.92 2.39999H10.08C9.83999 2.39999 9.64999 2.56999 9.60999 2.80999L9.24999 5.34999C8.65999 5.58999 8.11999 5.91999 7.62999 6.28999L5.23999 5.32999C5.01999 5.24999 4.76999 5.32999 4.64999 5.54999L2.73999 8.86999C2.61999 9.07999 2.65999 9.33999 2.85999 9.47999L4.88999 11.06C4.83999 11.36 4.79999 11.69 4.79999 12C4.79999 12.31 4.81999 12.64 4.86999 12.94L2.83999 14.52C2.65999 14.66 2.60999 14.93 2.71999 15.13L4.63999 18.45C4.75999 18.67 5.00999 18.74 5.22999 18.67L7.61999 17.71C8.11999 18.09 8.64999 18.41 9.23999 18.65L9.59999 21.19C9.64999 21.43 9.83999 21.6 10.08 21.6H13.92C14.16 21.6 14.36 21.43 14.39 21.19L14.75 18.65C15.34 18.41 15.88 18.09 16.37 17.71L18.76 18.67C18.98 18.75 19.23 18.67 19.35 18.45L21.27 15.13C21.39 14.91 21.34 14.66 21.15 14.52L19.14 12.94ZM12 15.6C10.02 15.6 8.39999 13.98 8.39999 12C8.39999 10.02 10.02 8.39999 12 8.39999C13.98 8.39999 15.6 10.02 15.6 12C15.6 13.98 13.98 15.6 12 15.6Z\"\n fill=\"#C9C9C9\"/>\n <rect x=\"13\" width=\"11\" height=\"7\" rx=\"1\" fill=\"#F6413B\"/>\n <path\n d=\"M14.6962 6V1.63636H15.3546V3.53267H17.53V1.63636H18.1905V6H17.53V4.0973H15.3546V6H14.6962ZM20.562 6H19.1493V1.63636H20.6067C21.0343 1.63636 21.4015 1.72372 21.7083 1.89844C22.0151 2.07173 22.2502 2.32102 22.4135 2.64631C22.5783 2.97017 22.6607 3.35866 22.6607 3.81179C22.6607 4.26634 22.5776 4.65696 22.4114 4.98366C22.2466 5.31037 22.008 5.56179 21.6955 5.73793C21.383 5.91264 21.0051 6 20.562 6ZM19.8077 5.42472H20.5257C20.8581 5.42472 21.1344 5.36222 21.3546 5.23722C21.5748 5.1108 21.7395 4.92827 21.8489 4.68963C21.9583 4.44957 22.013 4.15696 22.013 3.81179C22.013 3.46946 21.9583 3.17898 21.8489 2.94034C21.7409 2.7017 21.5797 2.5206 21.3652 2.39702C21.1507 2.27344 20.8844 2.21165 20.5662 2.21165H19.8077V5.42472Z\"\n fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_28_1567\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
43649
43656
|
|
|
43650
43657
|
const VERSION$6 = '2.19.12';
|
|
43651
|
-
const T$
|
|
43658
|
+
const T$f = 'plugins.bottom_gear';
|
|
43652
43659
|
/**
|
|
43653
43660
|
* Events triggered by the plugin
|
|
43654
43661
|
* @beta
|
|
@@ -43656,7 +43663,7 @@ const T$g = 'plugins.bottom_gear';
|
|
|
43656
43663
|
var GearEvents;
|
|
43657
43664
|
(function (GearEvents) {
|
|
43658
43665
|
/**
|
|
43659
|
-
*
|
|
43666
|
+
* Subscribe to this event to accurately attach an item to the gear menu
|
|
43660
43667
|
*/
|
|
43661
43668
|
GearEvents["RENDERED"] = "rendered";
|
|
43662
43669
|
})(GearEvents || (GearEvents = {}));
|
|
@@ -43798,20 +43805,20 @@ class BottomGear extends UICorePlugin {
|
|
|
43798
43805
|
addItem(name, $subMenu) {
|
|
43799
43806
|
const $existingItem = this.$el.find(`#gear-options li[data-${name}`);
|
|
43800
43807
|
if ($existingItem.length) {
|
|
43801
|
-
trace(`${T$
|
|
43808
|
+
trace(`${T$f} addItem already exists`, { name });
|
|
43802
43809
|
return $existingItem;
|
|
43803
43810
|
}
|
|
43804
43811
|
const $item = $('<li></li>')
|
|
43805
43812
|
.attr(`data-${name}`, '')
|
|
43806
43813
|
.appendTo(this.$el.find('#gear-options'));
|
|
43807
43814
|
if ($subMenu) {
|
|
43808
|
-
trace(`${T$
|
|
43815
|
+
trace(`${T$f} addItem adding submenu`, { name });
|
|
43809
43816
|
$subMenu
|
|
43810
43817
|
.addClass('gear-sub-menu-wrapper')
|
|
43811
43818
|
.hide()
|
|
43812
43819
|
.appendTo(this.$el.find('#gear-options-wrapper'));
|
|
43813
43820
|
$item.on('click', (e) => {
|
|
43814
|
-
trace(`${T$
|
|
43821
|
+
trace(`${T$f} addItem submenu clicked`, { name });
|
|
43815
43822
|
e.stopPropagation();
|
|
43816
43823
|
$subMenu.show();
|
|
43817
43824
|
this.$el.find('#gear-options').hide();
|
|
@@ -43820,15 +43827,15 @@ class BottomGear extends UICorePlugin {
|
|
|
43820
43827
|
return $item;
|
|
43821
43828
|
}
|
|
43822
43829
|
onActiveContainerChanged() {
|
|
43823
|
-
trace(`${T$
|
|
43830
|
+
trace(`${T$f} onActiveContainerChanged`);
|
|
43824
43831
|
this.bindContainerEvents();
|
|
43825
43832
|
}
|
|
43826
43833
|
bindContainerEvents() {
|
|
43827
|
-
trace(`${T$
|
|
43834
|
+
trace(`${T$f} bindContainerEvents`);
|
|
43828
43835
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
|
|
43829
43836
|
}
|
|
43830
43837
|
highDefinitionUpdate(isHd) {
|
|
43831
|
-
trace(`${T$
|
|
43838
|
+
trace(`${T$f} highDefinitionUpdate`, { isHd });
|
|
43832
43839
|
this.isHd = isHd;
|
|
43833
43840
|
this.$el.find('.gear-icon').html(isHd ? gearHdIcon : gearIcon);
|
|
43834
43841
|
}
|
|
@@ -43836,7 +43843,7 @@ class BottomGear extends UICorePlugin {
|
|
|
43836
43843
|
* @internal
|
|
43837
43844
|
*/
|
|
43838
43845
|
render() {
|
|
43839
|
-
trace(`${T$
|
|
43846
|
+
trace(`${T$f} render`);
|
|
43840
43847
|
const mediaControl = this.core.getPlugin('media_control');
|
|
43841
43848
|
if (!mediaControl) {
|
|
43842
43849
|
return this; // TODO test
|
|
@@ -43868,48 +43875,48 @@ class BottomGear extends UICorePlugin {
|
|
|
43868
43875
|
this.$el.find('#gear-options-wrapper').hide();
|
|
43869
43876
|
}
|
|
43870
43877
|
onCoreReady() {
|
|
43871
|
-
trace(`${T$
|
|
43878
|
+
trace(`${T$f} onCoreReady`);
|
|
43872
43879
|
const mediaControl = this.core.getPlugin('media_control');
|
|
43873
43880
|
assert(mediaControl, 'media_control plugin is required');
|
|
43874
43881
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.onMediaControlRendered);
|
|
43875
43882
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, this.hide);
|
|
43876
43883
|
}
|
|
43877
43884
|
onMediaControlRendered() {
|
|
43878
|
-
trace(`${T$
|
|
43885
|
+
trace(`${T$f} onMediaControlRendered`);
|
|
43879
43886
|
const mediaControl = this.core.getPlugin('media_control');
|
|
43880
|
-
mediaControl.
|
|
43887
|
+
mediaControl.mount('gear', this.$el);
|
|
43881
43888
|
}
|
|
43882
43889
|
}
|
|
43883
43890
|
|
|
43884
43891
|
/**
|
|
43885
43892
|
* @beta
|
|
43886
43893
|
*/
|
|
43887
|
-
var
|
|
43888
|
-
(function (
|
|
43889
|
-
|
|
43890
|
-
|
|
43891
|
-
|
|
43892
|
-
|
|
43893
|
-
|
|
43894
|
+
var ClapprStatsChronograph;
|
|
43895
|
+
(function (ClapprStatsChronograph) {
|
|
43896
|
+
ClapprStatsChronograph["Startup"] = "startup";
|
|
43897
|
+
ClapprStatsChronograph["Watch"] = "watch";
|
|
43898
|
+
ClapprStatsChronograph["Pause"] = "pause";
|
|
43899
|
+
ClapprStatsChronograph["Buffering"] = "buffering";
|
|
43900
|
+
ClapprStatsChronograph["Session"] = "session";
|
|
43894
43901
|
// Latency = 'latency',
|
|
43895
|
-
})(
|
|
43902
|
+
})(ClapprStatsChronograph || (ClapprStatsChronograph = {}));
|
|
43896
43903
|
/**
|
|
43897
43904
|
* @beta
|
|
43898
43905
|
*/
|
|
43899
|
-
var
|
|
43900
|
-
(function (
|
|
43901
|
-
|
|
43902
|
-
|
|
43903
|
-
|
|
43904
|
-
|
|
43905
|
-
|
|
43906
|
-
|
|
43907
|
-
|
|
43908
|
-
|
|
43909
|
-
|
|
43910
|
-
|
|
43911
|
-
|
|
43912
|
-
})(
|
|
43906
|
+
var ClapprStatsCounter;
|
|
43907
|
+
(function (ClapprStatsCounter) {
|
|
43908
|
+
ClapprStatsCounter["Play"] = "play";
|
|
43909
|
+
ClapprStatsCounter["Pause"] = "pause";
|
|
43910
|
+
ClapprStatsCounter["Error"] = "error";
|
|
43911
|
+
ClapprStatsCounter["Buffering"] = "buffering";
|
|
43912
|
+
ClapprStatsCounter["DecodedFrames"] = "decodedFrames";
|
|
43913
|
+
ClapprStatsCounter["DroppedFrames"] = "droppedFrames";
|
|
43914
|
+
ClapprStatsCounter["Fps"] = "fps";
|
|
43915
|
+
ClapprStatsCounter["ChangeLevel"] = "changeLevel";
|
|
43916
|
+
ClapprStatsCounter["Seek"] = "seek";
|
|
43917
|
+
ClapprStatsCounter["Fullscreen"] = "fullscreen";
|
|
43918
|
+
ClapprStatsCounter["DvrUsage"] = "dvrUsage";
|
|
43919
|
+
})(ClapprStatsCounter || (ClapprStatsCounter = {}));
|
|
43913
43920
|
/**
|
|
43914
43921
|
* @beta
|
|
43915
43922
|
*/
|
|
@@ -43970,6 +43977,8 @@ function newMetrics$1() {
|
|
|
43970
43977
|
* @remarks
|
|
43971
43978
|
* This plugin does not render anything and is supposed to be extended or used together with other plugins that actually render something.
|
|
43972
43979
|
*
|
|
43980
|
+
* @see {@link NerdStats} - a plugin that visualises the playback metrics
|
|
43981
|
+
*
|
|
43973
43982
|
* Configuration options - {@link ClapprStatsSettings}
|
|
43974
43983
|
*
|
|
43975
43984
|
* Events - {@link ClapprStatsEvents}
|
|
@@ -43979,11 +43988,11 @@ class ClapprStats extends ContainerPlugin {
|
|
|
43979
43988
|
lastDecodedFramesCount = 0;
|
|
43980
43989
|
metrics = newMetrics$1();
|
|
43981
43990
|
timers = {
|
|
43982
|
-
[
|
|
43983
|
-
[
|
|
43984
|
-
[
|
|
43985
|
-
[
|
|
43986
|
-
[
|
|
43991
|
+
[ClapprStatsChronograph.Startup]: 0,
|
|
43992
|
+
[ClapprStatsChronograph.Watch]: 0,
|
|
43993
|
+
[ClapprStatsChronograph.Pause]: 0,
|
|
43994
|
+
[ClapprStatsChronograph.Buffering]: 0,
|
|
43995
|
+
[ClapprStatsChronograph.Session]: 0,
|
|
43987
43996
|
};
|
|
43988
43997
|
runEach;
|
|
43989
43998
|
/**
|
|
@@ -44013,15 +44022,10 @@ class ClapprStats extends ContainerPlugin {
|
|
|
44013
44022
|
inc(counter) {
|
|
44014
44023
|
this.metrics.counters[counter] += 1;
|
|
44015
44024
|
}
|
|
44016
|
-
// _timerHasStarted(timer) {
|
|
44017
|
-
// return this[`_start${timer}`] !== undefined;
|
|
44018
|
-
// }
|
|
44019
44025
|
start(timer) {
|
|
44020
|
-
// this[`_start${timer}`] = this._now();
|
|
44021
44026
|
this.timers[timer] = this.now();
|
|
44022
44027
|
}
|
|
44023
44028
|
stop(timer) {
|
|
44024
|
-
// this._metrics.timers[timer] += this._now() - this[`_start${timer}`];
|
|
44025
44029
|
this.metrics.chrono[timer] += this.now() - this.timers[timer];
|
|
44026
44030
|
}
|
|
44027
44031
|
constructor(container) {
|
|
@@ -44041,10 +44045,10 @@ class ClapprStats extends ContainerPlugin {
|
|
|
44041
44045
|
this.listenTo(this.container, Events$1.CONTAINER_PAUSE, this.onPause);
|
|
44042
44046
|
this.listenToOnce(this.container, Events$1.CONTAINER_STATE_BUFFERING, this.onBuffering);
|
|
44043
44047
|
this.listenTo(this.container, Events$1.CONTAINER_SEEK, this.onSeek);
|
|
44044
|
-
this.listenTo(this.container, Events$1.CONTAINER_ERROR, () => this.inc(
|
|
44045
|
-
this.listenTo(this.container, Events$1.CONTAINER_FULLSCREEN, () => this.inc(
|
|
44048
|
+
this.listenTo(this.container, Events$1.CONTAINER_ERROR, () => this.inc(ClapprStatsCounter.Error));
|
|
44049
|
+
this.listenTo(this.container, Events$1.CONTAINER_FULLSCREEN, () => this.inc(ClapprStatsCounter.Fullscreen));
|
|
44046
44050
|
this.listenTo(this.container, Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, (dvrInUse) => {
|
|
44047
|
-
dvrInUse && this.inc(
|
|
44051
|
+
dvrInUse && this.inc(ClapprStatsCounter.DvrUsage);
|
|
44048
44052
|
});
|
|
44049
44053
|
this.listenTo(this.container.playback, Events$1.PLAYBACK_PROGRESS, this.onProgress);
|
|
44050
44054
|
this.listenTo(this.container.playback, Events$1.PLAYBACK_TIMEUPDATE, this.onTimeUpdate);
|
|
@@ -44072,7 +44076,7 @@ class ClapprStats extends ContainerPlugin {
|
|
|
44072
44076
|
last.time = now - last.start;
|
|
44073
44077
|
}
|
|
44074
44078
|
this.metrics.extra.bitratesHistory.push({ start: this.now(), bitrate });
|
|
44075
|
-
this.inc(
|
|
44079
|
+
this.inc(ClapprStatsCounter.ChangeLevel);
|
|
44076
44080
|
}
|
|
44077
44081
|
stopReporting() {
|
|
44078
44082
|
this.buildReport();
|
|
@@ -44083,31 +44087,31 @@ class ClapprStats extends ContainerPlugin {
|
|
|
44083
44087
|
}
|
|
44084
44088
|
startTimers() {
|
|
44085
44089
|
this.timerId = setInterval(this.buildReport.bind(this), this.runEach);
|
|
44086
|
-
this.start(
|
|
44087
|
-
this.start(
|
|
44090
|
+
this.start(ClapprStatsChronograph.Session);
|
|
44091
|
+
this.start(ClapprStatsChronograph.Startup);
|
|
44088
44092
|
}
|
|
44089
44093
|
onFirstPlaying() {
|
|
44090
44094
|
this.listenTo(this.container, Events$1.CONTAINER_TIMEUPDATE, this.onContainerUpdateWhilePlaying);
|
|
44091
|
-
this.start(
|
|
44092
|
-
this.stop(
|
|
44095
|
+
this.start(ClapprStatsChronograph.Watch);
|
|
44096
|
+
this.stop(ClapprStatsChronograph.Startup);
|
|
44093
44097
|
}
|
|
44094
44098
|
playAfterPause() {
|
|
44095
44099
|
this.listenTo(this.container, Events$1.CONTAINER_TIMEUPDATE, this.onContainerUpdateWhilePlaying);
|
|
44096
|
-
this.stop(
|
|
44097
|
-
this.start(
|
|
44100
|
+
this.stop(ClapprStatsChronograph.Pause);
|
|
44101
|
+
this.start(ClapprStatsChronograph.Watch);
|
|
44098
44102
|
}
|
|
44099
44103
|
onPlay() {
|
|
44100
|
-
this.inc(
|
|
44104
|
+
this.inc(ClapprStatsCounter.Play);
|
|
44101
44105
|
}
|
|
44102
44106
|
onPause() {
|
|
44103
|
-
this.stop(
|
|
44104
|
-
this.start(
|
|
44105
|
-
this.inc(
|
|
44107
|
+
this.stop(ClapprStatsChronograph.Watch);
|
|
44108
|
+
this.start(ClapprStatsChronograph.Pause);
|
|
44109
|
+
this.inc(ClapprStatsCounter.Pause);
|
|
44106
44110
|
this.listenToOnce(this.container, Events$1.CONTAINER_PLAY, this.playAfterPause);
|
|
44107
44111
|
this.stopListening(this.container, Events$1.CONTAINER_TIMEUPDATE, this.onContainerUpdateWhilePlaying);
|
|
44108
44112
|
}
|
|
44109
44113
|
onSeek(e) {
|
|
44110
|
-
this.inc(
|
|
44114
|
+
this.inc(ClapprStatsCounter.Seek);
|
|
44111
44115
|
this.metrics.extra.watchHistory.push([e * 1000, e * 1000]);
|
|
44112
44116
|
}
|
|
44113
44117
|
onTimeUpdate(e) {
|
|
@@ -44132,17 +44136,17 @@ class ClapprStats extends ContainerPlugin {
|
|
|
44132
44136
|
}
|
|
44133
44137
|
onContainerUpdateWhilePlaying() {
|
|
44134
44138
|
if (this.container.playback.isPlaying()) {
|
|
44135
|
-
this.stop(
|
|
44136
|
-
this.start(
|
|
44139
|
+
this.stop(ClapprStatsChronograph.Watch);
|
|
44140
|
+
this.start(ClapprStatsChronograph.Watch);
|
|
44137
44141
|
}
|
|
44138
44142
|
}
|
|
44139
44143
|
onBuffering() {
|
|
44140
|
-
this.inc(
|
|
44141
|
-
this.start(
|
|
44144
|
+
this.inc(ClapprStatsCounter.Buffering);
|
|
44145
|
+
this.start(ClapprStatsChronograph.Buffering);
|
|
44142
44146
|
this.listenToOnce(this.container, Events$1.CONTAINER_STATE_BUFFERFULL, this.onBufferfull);
|
|
44143
44147
|
}
|
|
44144
44148
|
onBufferfull() {
|
|
44145
|
-
this.stop(
|
|
44149
|
+
this.stop(ClapprStatsChronograph.Buffering);
|
|
44146
44150
|
this.listenToOnce(this.container, Events$1.CONTAINER_STATE_BUFFERING, this.onBuffering);
|
|
44147
44151
|
}
|
|
44148
44152
|
onProgress(progress) {
|
|
@@ -44154,8 +44158,8 @@ class ClapprStats extends ContainerPlugin {
|
|
|
44154
44158
|
// this.trigger(ClapprStatsEvents.PERCENTAGE, currentPercentage);
|
|
44155
44159
|
}
|
|
44156
44160
|
buildReport() {
|
|
44157
|
-
this.stop(
|
|
44158
|
-
this.start(
|
|
44161
|
+
this.stop(ClapprStatsChronograph.Session);
|
|
44162
|
+
this.start(ClapprStatsChronograph.Session);
|
|
44159
44163
|
this.metrics.extra.playbackName = this.playbackName;
|
|
44160
44164
|
this.metrics.extra.playbackType = this.playbackType;
|
|
44161
44165
|
this.calcBitrates();
|
|
@@ -46342,18 +46346,18 @@ const PLAYBACK_NAMES = {
|
|
|
46342
46346
|
hls: 'HLS.js',
|
|
46343
46347
|
html5_video: 'Native',
|
|
46344
46348
|
};
|
|
46345
|
-
const T$
|
|
46349
|
+
const T$e = 'plugins.nerd_stats';
|
|
46346
46350
|
/**
|
|
46347
|
-
* `PLUGIN` that displays useful network
|
|
46351
|
+
* `PLUGIN` that displays useful statistics regarding the playback as well as the network quality estimation.
|
|
46348
46352
|
* @beta
|
|
46349
46353
|
*
|
|
46350
46354
|
* @remarks
|
|
46351
46355
|
* Depends on:
|
|
46352
46356
|
*
|
|
46353
|
-
* - {@link BottomGear}
|
|
46354
|
-
*
|
|
46355
|
-
* - {@link ClapprStats}
|
|
46357
|
+
* - {@link BottomGear} - where the button is attached
|
|
46356
46358
|
*
|
|
46359
|
+
* - {@link ClapprStats} - to get the metrics from
|
|
46360
|
+
*
|
|
46357
46361
|
* The plugin is rendered as an item in the gear menu.
|
|
46358
46362
|
*
|
|
46359
46363
|
* When clicked, it shows an overlay window with the information about the network speed, latency, etc,
|
|
@@ -46522,7 +46526,7 @@ class NerdStats extends UICorePlugin {
|
|
|
46522
46526
|
.text(this.metrics.general.resolution.height);
|
|
46523
46527
|
}
|
|
46524
46528
|
estimateQuality() {
|
|
46525
|
-
trace(`${T$
|
|
46529
|
+
trace(`${T$e} estimateQuality`);
|
|
46526
46530
|
const videoQualityNames = [
|
|
46527
46531
|
'SD (480p)',
|
|
46528
46532
|
'HD (720p)',
|
|
@@ -46547,7 +46551,7 @@ class NerdStats extends UICorePlugin {
|
|
|
46547
46551
|
prefix + videoQualityNames[liveQuality - 1];
|
|
46548
46552
|
}
|
|
46549
46553
|
updateMetrics(metrics) {
|
|
46550
|
-
trace(`${T$
|
|
46554
|
+
trace(`${T$e} updateMetrics`, { custom: this.speedtestMetrics });
|
|
46551
46555
|
Object.assign(this.metrics, metrics);
|
|
46552
46556
|
this.updateEstimatedQuality();
|
|
46553
46557
|
this.$el
|
|
@@ -46649,7 +46653,7 @@ class NerdStats extends UICorePlugin {
|
|
|
46649
46653
|
return this;
|
|
46650
46654
|
}
|
|
46651
46655
|
attach() {
|
|
46652
|
-
trace(`${T$
|
|
46656
|
+
trace(`${T$e} attach`);
|
|
46653
46657
|
const gear = this.core.getPlugin('bottom_gear');
|
|
46654
46658
|
gear
|
|
46655
46659
|
.addItem('nerd_stats')
|
|
@@ -46716,7 +46720,7 @@ function newMetrics() {
|
|
|
46716
46720
|
// Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
46717
46721
|
// Use of this source code is governed by a BSD-style
|
|
46718
46722
|
// license that can be found at https://github.com/clappr/clappr-plugins/blob/master/LICENSE.
|
|
46719
|
-
const T$
|
|
46723
|
+
const T$d = 'plugins.click_to_pause';
|
|
46720
46724
|
/**
|
|
46721
46725
|
* A small `PLUGIN` that toggles the playback state on click over the video container
|
|
46722
46726
|
* @beta
|
|
@@ -46728,7 +46732,7 @@ class ClickToPause extends ContainerPlugin {
|
|
|
46728
46732
|
* @internal
|
|
46729
46733
|
*/
|
|
46730
46734
|
get name() {
|
|
46731
|
-
return '
|
|
46735
|
+
return 'click_to_pause';
|
|
46732
46736
|
}
|
|
46733
46737
|
/**
|
|
46734
46738
|
* @internal
|
|
@@ -46746,7 +46750,7 @@ class ClickToPause extends ContainerPlugin {
|
|
|
46746
46750
|
click() {
|
|
46747
46751
|
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
|
|
46748
46752
|
const isDvrEnabled = this.container.isDvrEnabled();
|
|
46749
|
-
trace(`${T$
|
|
46753
|
+
trace(`${T$d} click`, {
|
|
46750
46754
|
isLivePlayback,
|
|
46751
46755
|
isDvrEnabled,
|
|
46752
46756
|
});
|
|
@@ -46861,7 +46865,7 @@ function buildSvg(clips, duration, barWidth) {
|
|
|
46861
46865
|
|
|
46862
46866
|
const clipsHTML = "<div class=\"media-clip-text\" id=\"clips-text\"></div>";
|
|
46863
46867
|
|
|
46864
|
-
const T$
|
|
46868
|
+
const T$c = 'plugins.clips';
|
|
46865
46869
|
const VERSION$5 = '2.22.16';
|
|
46866
46870
|
const CLAPPR_VERSION = '0.11.4';
|
|
46867
46871
|
/**
|
|
@@ -46911,7 +46915,7 @@ class Clips extends UICorePlugin {
|
|
|
46911
46915
|
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);
|
|
46912
46916
|
}
|
|
46913
46917
|
render() {
|
|
46914
|
-
trace(`${T$
|
|
46918
|
+
trace(`${T$c} render`);
|
|
46915
46919
|
if (!this.options.clips) {
|
|
46916
46920
|
return this;
|
|
46917
46921
|
}
|
|
@@ -46938,19 +46942,19 @@ class Clips extends UICorePlugin {
|
|
|
46938
46942
|
return super.enable();
|
|
46939
46943
|
}
|
|
46940
46944
|
onCoreReady() {
|
|
46941
|
-
trace(`${T$
|
|
46945
|
+
trace(`${T$c} onCoreReady`);
|
|
46942
46946
|
const mediaControl = this.core.getPlugin('media_control');
|
|
46943
46947
|
assert(mediaControl, 'media_control plugin is required');
|
|
46944
46948
|
this.parseClips(this.options.clips.text);
|
|
46945
46949
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.onMcRender);
|
|
46946
46950
|
}
|
|
46947
46951
|
onMcRender() {
|
|
46948
|
-
trace(`${T$
|
|
46952
|
+
trace(`${T$c} onMcRender`);
|
|
46949
46953
|
const mediaControl = this.core.getPlugin('media_control');
|
|
46950
46954
|
mediaControl.mount('clips', this.$el);
|
|
46951
46955
|
}
|
|
46952
46956
|
onContainerChanged() {
|
|
46953
|
-
trace(`${T$
|
|
46957
|
+
trace(`${T$c} onContainerChanged`);
|
|
46954
46958
|
// TODO figure out the conditions of changing the container (without destroying the previous one)
|
|
46955
46959
|
if (this.oldContainer) {
|
|
46956
46960
|
this.stopListening(this.oldContainer, Events$1.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
@@ -47128,7 +47132,7 @@ class ContextMenu extends UIContainerPlugin {
|
|
|
47128
47132
|
|
|
47129
47133
|
const dvrHTML = "<div class=\"live-info\" id=\"media-control-live\"><%= i18n.t('live') %></div>\n<button type=\"button\" class=\"live-button\" aria-label=\"<%= i18n.t('back_to_live') %>\" id=\"media-control-back-to-live\"><%= i18n.t('back_to_live') %></button>\n";
|
|
47130
47134
|
|
|
47131
|
-
const T
|
|
47135
|
+
// const T = 'plugins.dvr_controls'
|
|
47132
47136
|
/**
|
|
47133
47137
|
* `PLUGIN` that adds the DVR controls to the media control UI
|
|
47134
47138
|
*
|
|
@@ -47177,19 +47181,17 @@ class DvrControls extends UICorePlugin {
|
|
|
47177
47181
|
* @internal
|
|
47178
47182
|
*/
|
|
47179
47183
|
bindEvents() {
|
|
47180
|
-
this.
|
|
47181
|
-
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.
|
|
47184
|
+
this.listenToOnce(this.core, Events$1.CORE_READY, this.onCoreReady);
|
|
47185
|
+
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
47182
47186
|
}
|
|
47183
47187
|
onCoreReady() {
|
|
47184
47188
|
const mediaControl = this.core.getPlugin('media_control');
|
|
47185
47189
|
assert(mediaControl, 'media_control plugin is required');
|
|
47186
|
-
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.
|
|
47187
|
-
// MediaControl has been rendered
|
|
47188
|
-
this.render();
|
|
47190
|
+
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.mount);
|
|
47189
47191
|
}
|
|
47190
|
-
|
|
47191
|
-
|
|
47192
|
-
this.
|
|
47192
|
+
onActiveContainerChanged() {
|
|
47193
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_LOADEDMETADATA, this.onMetadataLoaded);
|
|
47194
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrStateChanged);
|
|
47193
47195
|
}
|
|
47194
47196
|
click() {
|
|
47195
47197
|
const container = this.core.activeContainer;
|
|
@@ -47198,32 +47200,47 @@ class DvrControls extends UICorePlugin {
|
|
|
47198
47200
|
}
|
|
47199
47201
|
container.seek(container.getDuration());
|
|
47200
47202
|
}
|
|
47201
|
-
shouldRender() {
|
|
47202
|
-
return this.core.getPlaybackType() === Playback.LIVE;
|
|
47203
|
-
}
|
|
47204
47203
|
/**
|
|
47205
47204
|
* @internal
|
|
47206
47205
|
*/
|
|
47207
47206
|
render() {
|
|
47208
|
-
trace(`${T$c} render`, {
|
|
47209
|
-
dvrEnabled: this.core.activePlayback?.dvrEnabled,
|
|
47210
|
-
playbackType: this.core.getPlaybackType(),
|
|
47211
|
-
});
|
|
47212
|
-
const mediaControl = this.core.getPlugin('media_control');
|
|
47213
|
-
if (!mediaControl) {
|
|
47214
|
-
return this;
|
|
47215
|
-
}
|
|
47216
|
-
if (!this.shouldRender()) {
|
|
47217
|
-
return this;
|
|
47218
|
-
}
|
|
47219
|
-
mediaControl.toggleElement('duration', false);
|
|
47220
|
-
mediaControl.toggleElement('position', false);
|
|
47221
47207
|
this.$el.html(DvrControls.template({
|
|
47222
47208
|
i18n: this.core.i18n,
|
|
47223
47209
|
}));
|
|
47224
|
-
mediaControl.putElement('dvr', this.$el);
|
|
47225
47210
|
return this;
|
|
47226
47211
|
}
|
|
47212
|
+
onMediacontrolRendered() {
|
|
47213
|
+
this.render();
|
|
47214
|
+
}
|
|
47215
|
+
onMetadataLoaded() {
|
|
47216
|
+
this.mount();
|
|
47217
|
+
this.toggleState(this.core.activeContainer.isDvrInUse());
|
|
47218
|
+
}
|
|
47219
|
+
mount() {
|
|
47220
|
+
// TODO move mount point management logic to MediaControl
|
|
47221
|
+
if (this.core.getPlaybackType() !== Playback.LIVE) {
|
|
47222
|
+
return;
|
|
47223
|
+
}
|
|
47224
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
47225
|
+
assert(mediaControl, 'media_control plugin is required');
|
|
47226
|
+
// TODO -> to MediaControl
|
|
47227
|
+
mediaControl.toggleElement('duration', false);
|
|
47228
|
+
mediaControl.toggleElement('position', false);
|
|
47229
|
+
mediaControl.mount('dvr', this.$el);
|
|
47230
|
+
}
|
|
47231
|
+
onDvrStateChanged(dvrInUse) {
|
|
47232
|
+
this.toggleState(dvrInUse);
|
|
47233
|
+
}
|
|
47234
|
+
toggleState(dvrInUse) {
|
|
47235
|
+
if (dvrInUse) {
|
|
47236
|
+
this.$el.find('#media-control-back-to-live').show();
|
|
47237
|
+
this.$el.find('#media-control-live').hide();
|
|
47238
|
+
}
|
|
47239
|
+
else {
|
|
47240
|
+
this.$el.find('#media-control-back-to-live').hide();
|
|
47241
|
+
this.$el.find('#media-control-live').show();
|
|
47242
|
+
}
|
|
47243
|
+
}
|
|
47227
47244
|
}
|
|
47228
47245
|
|
|
47229
47246
|
const reloadIcon = "<svg fill=\"#FFFFFF\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"/>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\n</svg>";
|
|
@@ -48033,8 +48050,6 @@ const DEFAULT_SETTINGS = {
|
|
|
48033
48050
|
right: [
|
|
48034
48051
|
'audiotracks',
|
|
48035
48052
|
'cc',
|
|
48036
|
-
// 'dvr',
|
|
48037
|
-
// 'duration',
|
|
48038
48053
|
'fullscreen',
|
|
48039
48054
|
'gear',
|
|
48040
48055
|
'multicamera',
|
|
@@ -48051,10 +48066,10 @@ const T$a = 'plugins.media_control';
|
|
|
48051
48066
|
const LEFT_ORDER = [
|
|
48052
48067
|
'playpause',
|
|
48053
48068
|
'playstop',
|
|
48054
|
-
'dvr',
|
|
48055
48069
|
'volume',
|
|
48056
48070
|
'position',
|
|
48057
48071
|
'duration',
|
|
48072
|
+
'dvr',
|
|
48058
48073
|
];
|
|
48059
48074
|
const { Config, Fullscreen, formatTime: formatTime$1, extend, removeArrayItem } = Utils;
|
|
48060
48075
|
function orderByOrderPattern(arr, order) {
|
|
@@ -48701,8 +48716,7 @@ class MediaControl extends UICorePlugin {
|
|
|
48701
48716
|
}
|
|
48702
48717
|
this.$el.show();
|
|
48703
48718
|
this.trigger(Events$1.MEDIACONTROL_SHOW, this.name);
|
|
48704
|
-
this.
|
|
48705
|
-
this.container.trigger(Events$1.CONTAINER_MEDIACONTROL_SHOW, this.name);
|
|
48719
|
+
this.core.activeContainer?.trigger(Events$1.CONTAINER_MEDIACONTROL_SHOW, this.name);
|
|
48706
48720
|
this.$el.removeClass('media-control-hide');
|
|
48707
48721
|
this.hideId = setTimeout(() => this.hide(), timeout);
|
|
48708
48722
|
if (event) {
|
|
@@ -48756,7 +48770,7 @@ class MediaControl extends UICorePlugin {
|
|
|
48756
48770
|
right: [],
|
|
48757
48771
|
}, this.core.activeContainer.settings);
|
|
48758
48772
|
trace(`${T$a} updateSettings`, { newSettings });
|
|
48759
|
-
newSettings.left.push('clips'); // TODO
|
|
48773
|
+
newSettings.left.push('clips'); // TODO settings
|
|
48760
48774
|
// TODO make order controlled via CSS
|
|
48761
48775
|
newSettings.left = orderByOrderPattern([...newSettings.left, 'volume', 'clips'], LEFT_ORDER);
|
|
48762
48776
|
if (this.core.activePlayback.getPlaybackType() === Playback.LIVE &&
|
|
@@ -48819,7 +48833,6 @@ class MediaControl extends UICorePlugin {
|
|
|
48819
48833
|
* Get a media control element DOM node
|
|
48820
48834
|
* @param name - The name of the media control element
|
|
48821
48835
|
* @returns The DOM node to render to or extend
|
|
48822
|
-
* @deprecated Use {@link MediaControl.putElement} instead
|
|
48823
48836
|
* @remarks
|
|
48824
48837
|
* Use this method to render custom media control UI in a plugin
|
|
48825
48838
|
* @example
|
|
@@ -48835,7 +48848,7 @@ class MediaControl extends UICorePlugin {
|
|
|
48835
48848
|
*/
|
|
48836
48849
|
mount(name, element) {
|
|
48837
48850
|
const panel = this.getElementLocation(name);
|
|
48838
|
-
trace(`${T$a}
|
|
48851
|
+
trace(`${T$a} mount`, { name, panel: !!panel });
|
|
48839
48852
|
if (panel) {
|
|
48840
48853
|
const current = panel.find(`[data-${name}]`);
|
|
48841
48854
|
element.attr(`data-${name}`, '');
|
|
@@ -48852,13 +48865,18 @@ class MediaControl extends UICorePlugin {
|
|
|
48852
48865
|
return;
|
|
48853
48866
|
}
|
|
48854
48867
|
}
|
|
48868
|
+
/**
|
|
48869
|
+
* @deprecated Use {@link MediaControl.mount} instead
|
|
48870
|
+
* @param name
|
|
48871
|
+
* @param element
|
|
48872
|
+
*/
|
|
48855
48873
|
putElement(name, element) {
|
|
48856
48874
|
this.mount(name, element);
|
|
48857
48875
|
}
|
|
48858
48876
|
/**
|
|
48859
48877
|
* Toggle the visibility of a media control element
|
|
48860
48878
|
* @param name - The name of the media control element
|
|
48861
|
-
* @param show -
|
|
48879
|
+
* @param show - Visibility state
|
|
48862
48880
|
*/
|
|
48863
48881
|
toggleElement(area, show) {
|
|
48864
48882
|
this.$el.find(`[data-${area}]`).toggle(show);
|
|
@@ -49074,6 +49092,7 @@ class MediaControl extends UICorePlugin {
|
|
|
49074
49092
|
width: this.options.width,
|
|
49075
49093
|
height: this.options.height,
|
|
49076
49094
|
});
|
|
49095
|
+
// TODO check out
|
|
49077
49096
|
this.hideVolumeBar(0);
|
|
49078
49097
|
}, 0);
|
|
49079
49098
|
this.parseColors();
|
|
@@ -49629,7 +49648,7 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49629
49648
|
this.$el.html(PictureInPicture.buttonTemplate({ pipIcon }));
|
|
49630
49649
|
const mediaControl = this.core.getPlugin('media_control');
|
|
49631
49650
|
if (mediaControl) {
|
|
49632
|
-
mediaControl.
|
|
49651
|
+
mediaControl.mount('pip', this.$el);
|
|
49633
49652
|
}
|
|
49634
49653
|
return this;
|
|
49635
49654
|
}
|
|
@@ -51533,7 +51552,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
51533
51552
|
this.$line = $(ClosedCaptions.templateString());
|
|
51534
51553
|
this.resizeFont();
|
|
51535
51554
|
this.core.activeContainer.$el.append(this.$line);
|
|
51536
|
-
mediaControl.
|
|
51555
|
+
mediaControl.mount('cc', this.$el);
|
|
51537
51556
|
this.updateSelection();
|
|
51538
51557
|
this.renderIcon();
|
|
51539
51558
|
return this;
|
|
@@ -52471,4 +52490,4 @@ class VolumeFade extends UICorePlugin {
|
|
|
52471
52490
|
}
|
|
52472
52491
|
}
|
|
52473
52492
|
|
|
52474
|
-
export { AudioTracks as AudioSelector, AudioTracks, BigMuteButton, BottomGear, NerdStats as ClapprNerdStats, ClapprStats, ClickToPause, Clips, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GearEvents, GoogleAnalytics, QualityLevels as LevelSelector, LogTracer, Logger, Logo, MediaControl, MultiCamera, NerdStats, PictureInPicture, PlaybackErrorCode, PlaybackRate, Player, PlayerEvent, Poster, QualityLevels, SeekTime, SentryTracer, Share, SkipTime, SourceController, SpinnerThreeBounce as Spinner, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents, reportError, setTracer, trace, version };
|
|
52493
|
+
export { AudioTracks as AudioSelector, AudioTracks, BigMuteButton, BottomGear, NerdStats as ClapprNerdStats, ClapprStats, ClapprStatsChronograph, ClapprStatsCounter, ClapprStatsEvents, ClickToPause, Clips, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GearEvents, GoogleAnalytics, QualityLevels as LevelSelector, LogTracer, Logger, Logo, MediaControl, MultiCamera, NerdStats, PictureInPicture, PlaybackErrorCode, PlaybackRate, Player, PlayerEvent, Poster, QualityLevels, SeekTime, SentryTracer, Share, SkipTime, SourceController, SpinnerThreeBounce as Spinner, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents, reportError, setTracer, trace, version };
|