@gcorevideo/player 2.20.7 → 2.20.8
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 +37 -13
- package/dist/index.css +1343 -1343
- package/dist/index.js +241 -217
- package/dist/plugins/index.css +475 -475
- package/dist/plugins/index.js +152 -154
- package/lib/playback/BasePlayback.d.ts +5 -0
- package/lib/playback/BasePlayback.d.ts.map +1 -1
- package/lib/playback/BasePlayback.js +8 -0
- package/lib/playback/HTML5Video.d.ts +4 -0
- package/lib/playback/HTML5Video.d.ts.map +1 -0
- package/lib/playback/HTML5Video.js +3 -0
- package/lib/playback/dash-playback/DashPlayback.d.ts +1 -0
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +6 -2
- package/lib/playback/index.d.ts.map +1 -1
- package/lib/playback/index.js +2 -0
- package/lib/playback/types.d.ts +9 -0
- package/lib/playback/types.d.ts.map +1 -0
- package/lib/playback/types.js +9 -0
- package/lib/plugins/bottom-gear/BottomGear.d.ts +6 -11
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +5 -14
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +2 -2
- package/lib/plugins/dvr-controls/DvrControls.d.ts +1 -1
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +27 -16
- package/lib/plugins/level-selector/LevelSelector.d.ts +2 -0
- package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
- package/lib/plugins/level-selector/LevelSelector.js +14 -3
- package/lib/plugins/media-control/MediaControl.d.ts +1 -0
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +5 -3
- package/lib/plugins/playback-rate/PlaybackRate.d.ts +11 -10
- package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +83 -91
- package/package.json +1 -1
- package/src/playback/BasePlayback.ts +12 -4
- package/src/playback/HTML5Video.ts +3 -0
- package/src/playback/dash-playback/DashPlayback.ts +15 -11
- package/src/playback/index.ts +2 -1
- package/src/playback/types.ts +9 -0
- package/src/plugins/bottom-gear/BottomGear.ts +6 -15
- package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +3 -3
- package/src/plugins/dvr-controls/DvrControls.ts +87 -54
- package/src/plugins/level-selector/LevelSelector.ts +17 -5
- package/src/plugins/media-control/MediaControl.ts +9 -6
- package/src/plugins/playback-rate/PlaybackRate.ts +89 -105
- package/tsconfig.tsbuildinfo +1 -1
- package/assets/playback-rate/playback-rate-selector.ejs +0 -9
package/dist/index.js
CHANGED
|
@@ -7761,7 +7761,7 @@ var UNKNOWN_ERROR = {
|
|
|
7761
7761
|
};
|
|
7762
7762
|
|
|
7763
7763
|
// TODO: rename this Playback to HTML5Playback (breaking change, only after 0.3.0)
|
|
7764
|
-
var HTML5Video = /*#__PURE__*/function (_Playback) {
|
|
7764
|
+
var HTML5Video$1 = /*#__PURE__*/function (_Playback) {
|
|
7765
7765
|
function HTML5Video() {
|
|
7766
7766
|
var _this;
|
|
7767
7767
|
_classCallCheck(this, HTML5Video);
|
|
@@ -8553,7 +8553,7 @@ var HTML5Video = /*#__PURE__*/function (_Playback) {
|
|
|
8553
8553
|
}
|
|
8554
8554
|
}]);
|
|
8555
8555
|
}(Playback);
|
|
8556
|
-
HTML5Video._mimeTypesForUrl = function () {
|
|
8556
|
+
HTML5Video$1._mimeTypesForUrl = function () {
|
|
8557
8557
|
var resourceUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
8558
8558
|
var mimeTypesByExtension = arguments.length > 1 ? arguments[1] : undefined;
|
|
8559
8559
|
var mimeType = arguments.length > 2 ? arguments[2] : undefined;
|
|
@@ -8561,15 +8561,15 @@ HTML5Video._mimeTypesForUrl = function () {
|
|
|
8561
8561
|
var mimeTypes = mimeType || extension && mimeTypesByExtension[extension.toLowerCase()] || [];
|
|
8562
8562
|
return mimeTypes.constructor === Array ? mimeTypes : [mimeTypes];
|
|
8563
8563
|
};
|
|
8564
|
-
HTML5Video._canPlay = function (type, mimeTypesByExtension, resourceUrl, mimeType) {
|
|
8565
|
-
var mimeTypes = HTML5Video._mimeTypesForUrl(resourceUrl, mimeTypesByExtension, mimeType);
|
|
8564
|
+
HTML5Video$1._canPlay = function (type, mimeTypesByExtension, resourceUrl, mimeType) {
|
|
8565
|
+
var mimeTypes = HTML5Video$1._mimeTypesForUrl(resourceUrl, mimeTypesByExtension, mimeType);
|
|
8566
8566
|
var media = document.createElement(type);
|
|
8567
8567
|
return !!mimeTypes.filter(function (mediaType) {
|
|
8568
8568
|
return !!media.canPlayType(mediaType).replace(/no/, '');
|
|
8569
8569
|
})[0];
|
|
8570
8570
|
};
|
|
8571
|
-
HTML5Video.canPlay = function (resourceUrl, mimeType) {
|
|
8572
|
-
return HTML5Video._canPlay('audio', AUDIO_MIMETYPES, resourceUrl, mimeType) || HTML5Video._canPlay('video', MIMETYPES, resourceUrl, mimeType);
|
|
8571
|
+
HTML5Video$1.canPlay = function (resourceUrl, mimeType) {
|
|
8572
|
+
return HTML5Video$1._canPlay('audio', AUDIO_MIMETYPES, resourceUrl, mimeType) || HTML5Video$1._canPlay('video', MIMETYPES, resourceUrl, mimeType);
|
|
8573
8573
|
};
|
|
8574
8574
|
|
|
8575
8575
|
// TODO: remove this playback and change HTML5Video to HTML5Playback (breaking change, only after 0.3.0)
|
|
@@ -8614,7 +8614,7 @@ var HTML5Audio = /*#__PURE__*/function (_HTML5Video) {
|
|
|
8614
8614
|
return Playback.AOD;
|
|
8615
8615
|
}
|
|
8616
8616
|
}]);
|
|
8617
|
-
}(HTML5Video);
|
|
8617
|
+
}(HTML5Video$1);
|
|
8618
8618
|
HTML5Audio.canPlay = function (resourceUrl, mimeType) {
|
|
8619
8619
|
var mimetypes = {
|
|
8620
8620
|
'wav': ['audio/wav'],
|
|
@@ -8622,7 +8622,7 @@ HTML5Audio.canPlay = function (resourceUrl, mimeType) {
|
|
|
8622
8622
|
'aac': ['audio/mp4;codecs="mp4a.40.5"'],
|
|
8623
8623
|
'oga': ['audio/ogg']
|
|
8624
8624
|
};
|
|
8625
|
-
return HTML5Video._canPlay('audio', mimetypes, resourceUrl, mimeType);
|
|
8625
|
+
return HTML5Video$1._canPlay('audio', mimetypes, resourceUrl, mimeType);
|
|
8626
8626
|
};
|
|
8627
8627
|
|
|
8628
8628
|
var css_248z$1 = "[data-html-img] {\n max-width: 100%;\n max-height: 100%; }\n";
|
|
@@ -9024,7 +9024,7 @@ Loader.registerPlugin(SourcesPlugin);
|
|
|
9024
9024
|
Loader.registerPlayback(NoOp);
|
|
9025
9025
|
Loader.registerPlayback(HTMLImg);
|
|
9026
9026
|
Loader.registerPlayback(HTML5Audio);
|
|
9027
|
-
Loader.registerPlayback(HTML5Video);
|
|
9027
|
+
Loader.registerPlayback(HTML5Video$1);
|
|
9028
9028
|
|
|
9029
9029
|
const global$1 = (typeof global !== "undefined" ? global :
|
|
9030
9030
|
typeof self !== "undefined" ? self :
|
|
@@ -12628,7 +12628,7 @@ var PlaybackErrorCode;
|
|
|
12628
12628
|
* @internal
|
|
12629
12629
|
* TODO use custom HTML5Video playback with this layer applied
|
|
12630
12630
|
*/
|
|
12631
|
-
class BasePlayback extends HTML5Video {
|
|
12631
|
+
class BasePlayback extends HTML5Video$1 {
|
|
12632
12632
|
createError(errorData, options) {
|
|
12633
12633
|
const i18n = this.i18n ||
|
|
12634
12634
|
// @ts-ignore
|
|
@@ -12649,18 +12649,35 @@ class BasePlayback extends HTML5Video {
|
|
|
12649
12649
|
}
|
|
12650
12650
|
return super.createError(errorData, options);
|
|
12651
12651
|
}
|
|
12652
|
+
/**
|
|
12653
|
+
* Sets the playback rate.
|
|
12654
|
+
* @param rate - The playback rate to set.
|
|
12655
|
+
*/
|
|
12656
|
+
setPlaybackRate(rate) {
|
|
12657
|
+
this.el.playbackRate = rate;
|
|
12658
|
+
}
|
|
12652
12659
|
_onPlaying() {
|
|
12653
12660
|
super._onPlaying();
|
|
12654
12661
|
this.trigger(Events$1.PLAYBACK_MEDIACONTROL_ENABLE);
|
|
12655
12662
|
}
|
|
12656
12663
|
}
|
|
12657
12664
|
|
|
12665
|
+
var PlaybackEvents;
|
|
12666
|
+
(function (PlaybackEvents) {
|
|
12667
|
+
/**
|
|
12668
|
+
* Emitted when the playback rate changes.
|
|
12669
|
+
* Payload:
|
|
12670
|
+
* - playbackRate number
|
|
12671
|
+
*/
|
|
12672
|
+
PlaybackEvents["PLAYBACK_RATE_CHANGED"] = "playback:rate-changed";
|
|
12673
|
+
})(PlaybackEvents || (PlaybackEvents = {}));
|
|
12674
|
+
|
|
12658
12675
|
// Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
12659
12676
|
// Use of this source code is governed by a BSD-style
|
|
12660
12677
|
// license that can be found in the LICENSE file.
|
|
12661
12678
|
const AUTO$2 = -1;
|
|
12662
12679
|
const { now: now$2 } = Utils;
|
|
12663
|
-
const T$
|
|
12680
|
+
const T$i = 'playback.dash';
|
|
12664
12681
|
// @ts-expect-error
|
|
12665
12682
|
class DashPlayback extends BasePlayback {
|
|
12666
12683
|
_levels = null;
|
|
@@ -12838,8 +12855,8 @@ class DashPlayback extends BasePlayback {
|
|
|
12838
12855
|
}
|
|
12839
12856
|
}
|
|
12840
12857
|
});
|
|
12841
|
-
this._dash.on(DASHJS.MediaPlayer.events.PLAYBACK_RATE_CHANGED, () => {
|
|
12842
|
-
this.trigger(
|
|
12858
|
+
this._dash.on(DASHJS.MediaPlayer.events.PLAYBACK_RATE_CHANGED, (e) => {
|
|
12859
|
+
this.trigger(PlaybackEvents.PLAYBACK_RATE_CHANGED, e.playbackRate);
|
|
12843
12860
|
});
|
|
12844
12861
|
}
|
|
12845
12862
|
render() {
|
|
@@ -12930,10 +12947,10 @@ class DashPlayback extends BasePlayback {
|
|
|
12930
12947
|
}
|
|
12931
12948
|
_onPlaybackError = (event) => {
|
|
12932
12949
|
// TODO
|
|
12933
|
-
trace(`${T$
|
|
12950
|
+
trace(`${T$i} _onPlaybackError`, { event });
|
|
12934
12951
|
};
|
|
12935
12952
|
_onDASHJSSError = (event) => {
|
|
12936
|
-
trace(`${T$
|
|
12953
|
+
trace(`${T$i} _onDASHJSSError`, { event });
|
|
12937
12954
|
this._stopTimeUpdateTimer();
|
|
12938
12955
|
// Note that the other error types are deprecated
|
|
12939
12956
|
const e = event.error;
|
|
@@ -12968,7 +12985,7 @@ class DashPlayback extends BasePlayback {
|
|
|
12968
12985
|
}
|
|
12969
12986
|
};
|
|
12970
12987
|
triggerError(error) {
|
|
12971
|
-
trace(`${T$
|
|
12988
|
+
trace(`${T$i} triggerError`, { error });
|
|
12972
12989
|
// this triggers Events.ERROR to be handled by the UI
|
|
12973
12990
|
this.trigger(Events$1.PLAYBACK_ERROR, this.createError(error, {
|
|
12974
12991
|
useCodePrefix: false,
|
|
@@ -13007,7 +13024,7 @@ class DashPlayback extends BasePlayback {
|
|
|
13007
13024
|
}
|
|
13008
13025
|
get dvrEnabled() {
|
|
13009
13026
|
if (!this._dash) {
|
|
13010
|
-
trace(`${T$
|
|
13027
|
+
trace(`${T$i} dvrEnable no dash player instance`);
|
|
13011
13028
|
return false;
|
|
13012
13029
|
}
|
|
13013
13030
|
return (this._dash?.getDVRWindowSize() >= this._minDvrSize &&
|
|
@@ -13029,7 +13046,7 @@ class DashPlayback extends BasePlayback {
|
|
|
13029
13046
|
this.trigger(Events$1.PLAYBACK_PROGRESS, progress, {});
|
|
13030
13047
|
}
|
|
13031
13048
|
play() {
|
|
13032
|
-
trace(`${T$
|
|
13049
|
+
trace(`${T$i} play`, { dash: !!this._dash });
|
|
13033
13050
|
if (!this._dash) {
|
|
13034
13051
|
this._setup();
|
|
13035
13052
|
}
|
|
@@ -13105,6 +13122,9 @@ class DashPlayback extends BasePlayback {
|
|
|
13105
13122
|
assert.ok(ret, 'Invalid quality level');
|
|
13106
13123
|
return ret;
|
|
13107
13124
|
}
|
|
13125
|
+
setPlaybackRate(rate) {
|
|
13126
|
+
this._dash?.setPlaybackRate(rate);
|
|
13127
|
+
}
|
|
13108
13128
|
}
|
|
13109
13129
|
DashPlayback.canPlay = function (resource, mimeType) {
|
|
13110
13130
|
if (!isDashSource(resource, mimeType)) {
|
|
@@ -41776,7 +41796,7 @@ const AUTO$1 = -1;
|
|
|
41776
41796
|
const DEFAULT_RECOVER_ATTEMPTS = 16;
|
|
41777
41797
|
Events$1.register('PLAYBACK_FRAGMENT_CHANGED');
|
|
41778
41798
|
Events$1.register('PLAYBACK_FRAGMENT_PARSING_METADATA');
|
|
41779
|
-
const T$
|
|
41799
|
+
const T$h = 'playback.hls';
|
|
41780
41800
|
// @ts-expect-error
|
|
41781
41801
|
class HlsPlayback extends BasePlayback {
|
|
41782
41802
|
_ccIsSetup = false;
|
|
@@ -42006,7 +42026,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42006
42026
|
maxBufferLength: 2,
|
|
42007
42027
|
maxMaxBufferLength: 4,
|
|
42008
42028
|
}, this.options.playback.hlsjsConfig);
|
|
42009
|
-
trace(`${T$
|
|
42029
|
+
trace(`${T$h} _createHLSInstance`, { config });
|
|
42010
42030
|
this._hls = new Hls(config);
|
|
42011
42031
|
}
|
|
42012
42032
|
_attachHLSMedia() {
|
|
@@ -42095,7 +42115,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42095
42115
|
}
|
|
42096
42116
|
else {
|
|
42097
42117
|
Log.error('hlsjs: failed to recover', { evt, data });
|
|
42098
|
-
trace(`${T$
|
|
42118
|
+
trace(`${T$h} _recover failed to recover`, {
|
|
42099
42119
|
type: data.type,
|
|
42100
42120
|
details: data.details,
|
|
42101
42121
|
});
|
|
@@ -42181,7 +42201,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42181
42201
|
this.trigger(Events$1.PLAYBACK_SETTINGSUPDATE);
|
|
42182
42202
|
}
|
|
42183
42203
|
_onHLSJSError(evt, data) {
|
|
42184
|
-
trace(`${T$
|
|
42204
|
+
trace(`${T$h} _onHLSJSError`, {
|
|
42185
42205
|
fatal: data.fatal,
|
|
42186
42206
|
type: data.type,
|
|
42187
42207
|
details: data.details,
|
|
@@ -42229,7 +42249,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42229
42249
|
evt,
|
|
42230
42250
|
data,
|
|
42231
42251
|
});
|
|
42232
|
-
trace(`${T$
|
|
42252
|
+
trace(`${T$h} _onHLSJSError trying to recover from network error`, {
|
|
42233
42253
|
details: data.details,
|
|
42234
42254
|
});
|
|
42235
42255
|
error.level = PlayerError.Levels.WARN;
|
|
@@ -42242,7 +42262,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42242
42262
|
evt,
|
|
42243
42263
|
data,
|
|
42244
42264
|
});
|
|
42245
|
-
trace(`${T$
|
|
42265
|
+
trace(`${T$h} _onHLSJSError trying to recover from media error`, {
|
|
42246
42266
|
details: data.details,
|
|
42247
42267
|
});
|
|
42248
42268
|
error.level = PlayerError.Levels.WARN;
|
|
@@ -42272,7 +42292,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
42272
42292
|
return;
|
|
42273
42293
|
}
|
|
42274
42294
|
Log.warn('hlsjs: non-fatal error occurred', { evt, data });
|
|
42275
|
-
trace(`${T$
|
|
42295
|
+
trace(`${T$h} _onHLSJSError non-fatal error occurred`, {
|
|
42276
42296
|
type: data.type,
|
|
42277
42297
|
details: data.details,
|
|
42278
42298
|
});
|
|
@@ -42596,13 +42616,17 @@ HlsPlayback.canPlay = function (resource, mimeType) {
|
|
|
42596
42616
|
return Hls.isSupported();
|
|
42597
42617
|
};
|
|
42598
42618
|
|
|
42619
|
+
class HTML5Video extends BasePlayback {
|
|
42620
|
+
}
|
|
42621
|
+
|
|
42599
42622
|
// TODO consider allowing the variation of the order of playback modules
|
|
42600
42623
|
function registerPlaybacks() {
|
|
42624
|
+
Loader.registerPlayback(HTML5Video); // TODO check it overrides the default HTML5Video
|
|
42601
42625
|
Loader.registerPlayback(HlsPlayback);
|
|
42602
42626
|
Loader.registerPlayback(DashPlayback);
|
|
42603
42627
|
}
|
|
42604
42628
|
|
|
42605
|
-
const T$
|
|
42629
|
+
const T$g = 'GPlayer';
|
|
42606
42630
|
const DEFAULT_OPTIONS = {
|
|
42607
42631
|
autoPlay: false,
|
|
42608
42632
|
debug: 'none',
|
|
@@ -42697,7 +42721,7 @@ class Player {
|
|
|
42697
42721
|
}
|
|
42698
42722
|
const coreOpts = this.buildCoreOptions(playerElement);
|
|
42699
42723
|
const { core, container } = Player.getRegisteredPlugins();
|
|
42700
|
-
trace(`${T$
|
|
42724
|
+
trace(`${T$g} init`, {
|
|
42701
42725
|
registeredPlaybacks: Loader.registeredPlaybacks.map((p) => p.name),
|
|
42702
42726
|
});
|
|
42703
42727
|
coreOpts.plugins = {
|
|
@@ -42711,7 +42735,7 @@ class Player {
|
|
|
42711
42735
|
* Destroys the player, releasing all resources and unmounting its UI from the DOM.
|
|
42712
42736
|
*/
|
|
42713
42737
|
destroy() {
|
|
42714
|
-
trace(`${T$
|
|
42738
|
+
trace(`${T$g} destroy`, {
|
|
42715
42739
|
player: !!this.player,
|
|
42716
42740
|
});
|
|
42717
42741
|
if (this.player) {
|
|
@@ -42893,7 +42917,7 @@ class Player {
|
|
|
42893
42917
|
this.config = $.extend(true, this.config, config);
|
|
42894
42918
|
}
|
|
42895
42919
|
initPlayer(coreOptions) {
|
|
42896
|
-
trace(`${T$
|
|
42920
|
+
trace(`${T$g} initPlayer`, {
|
|
42897
42921
|
autoPlay: coreOptions.autoPlay,
|
|
42898
42922
|
sources: coreOptions.sources,
|
|
42899
42923
|
// TODO selected options
|
|
@@ -42918,7 +42942,7 @@ class Player {
|
|
|
42918
42942
|
}
|
|
42919
42943
|
}
|
|
42920
42944
|
triggerAutoPlay() {
|
|
42921
|
-
trace(`${T$
|
|
42945
|
+
trace(`${T$g} triggerAutoPlay`);
|
|
42922
42946
|
setTimeout(() => {
|
|
42923
42947
|
this.player?.play({
|
|
42924
42948
|
autoPlay: true,
|
|
@@ -42936,7 +42960,7 @@ class Player {
|
|
|
42936
42960
|
// TODO test
|
|
42937
42961
|
events = {
|
|
42938
42962
|
onReady: () => {
|
|
42939
|
-
trace(`${T$
|
|
42963
|
+
trace(`${T$g} onReady`, {
|
|
42940
42964
|
ready: this.ready,
|
|
42941
42965
|
});
|
|
42942
42966
|
if (this.ready) {
|
|
@@ -42970,7 +42994,7 @@ class Player {
|
|
|
42970
42994
|
buildCoreOptions(rootNode) {
|
|
42971
42995
|
const sources = this.buildMediaSourcesList();
|
|
42972
42996
|
const source = sources[0];
|
|
42973
|
-
trace(`${T$
|
|
42997
|
+
trace(`${T$g} buildCoreOptions`, {
|
|
42974
42998
|
source,
|
|
42975
42999
|
sources,
|
|
42976
43000
|
});
|
|
@@ -43031,7 +43055,7 @@ class Player {
|
|
|
43031
43055
|
assert.ok(this.player, 'Player is not initialized');
|
|
43032
43056
|
const core = this.player.core;
|
|
43033
43057
|
core.on(Events$1.CORE_SCREEN_ORIENTATION_CHANGED, ({ orientation }) => {
|
|
43034
|
-
trace(`${T$
|
|
43058
|
+
trace(`${T$g} on CORE_SCREEN_ORIENTATION_CHANGED`, {
|
|
43035
43059
|
orientation,
|
|
43036
43060
|
rootNode: {
|
|
43037
43061
|
width: this.rootNode?.clientWidth,
|
|
@@ -43046,14 +43070,14 @@ class Player {
|
|
|
43046
43070
|
}
|
|
43047
43071
|
}, null);
|
|
43048
43072
|
core.on(Events$1.CORE_RESIZE, ({ width, height }) => {
|
|
43049
|
-
trace(`${T$
|
|
43073
|
+
trace(`${T$g} on CORE_RESIZE`, {
|
|
43050
43074
|
width,
|
|
43051
43075
|
height,
|
|
43052
43076
|
});
|
|
43053
43077
|
this.safeTriggerEvent(PlayerEvent.Resize, { width, height });
|
|
43054
43078
|
}, null);
|
|
43055
43079
|
core.on(Events$1.CORE_FULLSCREEN, (isFullscreen) => {
|
|
43056
|
-
trace(`${T$
|
|
43080
|
+
trace(`${T$g} CORE_FULLSCREEN`, {
|
|
43057
43081
|
isFullscreen,
|
|
43058
43082
|
});
|
|
43059
43083
|
this.safeTriggerEvent(PlayerEvent.Fullscreen, isFullscreen);
|
|
@@ -43061,7 +43085,7 @@ class Player {
|
|
|
43061
43085
|
}
|
|
43062
43086
|
}
|
|
43063
43087
|
|
|
43064
|
-
var version$1 = "2.20.
|
|
43088
|
+
var version$1 = "2.20.8";
|
|
43065
43089
|
|
|
43066
43090
|
var packages = {
|
|
43067
43091
|
"node_modules/@clappr/core": {
|
|
@@ -43085,7 +43109,7 @@ function version() {
|
|
|
43085
43109
|
};
|
|
43086
43110
|
}
|
|
43087
43111
|
|
|
43088
|
-
const pluginHtml$
|
|
43112
|
+
const pluginHtml$7 = "<button data-track-selector-button class='gcore-skin-button-color'>\n <span class='audio-text'><%= title %></span> <span class=\"audio-arrow\"></span>\n</button>\n<ul class='gcore-skin-bg-color'>\n <% for (var i = 0; i < tracks.length; i++) { %>\n <li>\n <a href=\"#\" class='gcore-skin-text-color' data-track-selector-select=\"<%= tracks[i].id %>\">\n <%= tracks[i].label || tracks[i].name %>\n </a>\n </li>\n <% }; %>\n</ul>\n";
|
|
43089
43113
|
|
|
43090
43114
|
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";
|
|
43091
43115
|
|
|
@@ -43119,7 +43143,7 @@ class AudioSelector extends UICorePlugin {
|
|
|
43119
43143
|
static get version() {
|
|
43120
43144
|
return VERSION$6;
|
|
43121
43145
|
}
|
|
43122
|
-
static template = tmpl(pluginHtml$
|
|
43146
|
+
static template = tmpl(pluginHtml$7);
|
|
43123
43147
|
/**
|
|
43124
43148
|
* @internal
|
|
43125
43149
|
*/
|
|
@@ -43392,9 +43416,9 @@ class AudioSelector extends UICorePlugin {
|
|
|
43392
43416
|
|
|
43393
43417
|
const volumeOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.50025 8.00025C4.67125 8.00025 4.00025 8.67225 4.00025 9.50025V14.5003C4.00025 15.3283 4.67125 16.0003 5.50025 16.0003H7.24824C7.65024 16.0003 8.03627 16.1613 8.31727 16.4483L12.5443 20.7413C12.7083 20.9073 12.9262 20.9963 13.1492 20.9963C13.2572 20.9963 13.3672 20.9763 13.4722 20.9333C13.7932 20.8013 14.0003 20.4923 14.0003 20.1462V16.3283C14.0003 16.1963 13.9473 16.0683 13.8543 15.9753L6.02528 8.14625C5.93228 8.05325 5.80425 8.00025 5.67225 8.00025H5.50025ZM14.0003 3.85426C14.0003 3.50826 13.7932 3.19927 13.4722 3.06727C13.1502 2.93627 12.7873 3.01226 12.5443 3.25926L9.33827 6.51527C9.14627 6.71127 9.14626 7.02625 9.34126 7.22025L13.5733 11.4522C13.7313 11.6102 14.0003 11.4982 14.0003 11.2752V3.85426ZM20.8543 20.8543C20.7563 20.9513 20.6283 21.0003 20.5003 21.0003C20.3723 21.0003 20.2442 20.9513 20.1462 20.8543L3.14625 3.85426C2.95125 3.65826 2.95125 3.34225 3.14625 3.14625C3.34225 2.95125 3.65826 2.95125 3.85426 3.14625L20.8543 20.1462C21.0493 20.3422 21.0493 20.6583 20.8543 20.8543Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
43394
43418
|
|
|
43395
|
-
const pluginHtml$
|
|
43419
|
+
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";
|
|
43396
43420
|
|
|
43397
|
-
const T$
|
|
43421
|
+
const T$f = 'plugins.big_mute_button';
|
|
43398
43422
|
// TODO rewrite as a container plugin
|
|
43399
43423
|
/**
|
|
43400
43424
|
* Displays a big mute button over the video when it's muted.
|
|
@@ -43418,7 +43442,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43418
43442
|
get supportedVersion() {
|
|
43419
43443
|
return { min: CLAPPR_VERSION };
|
|
43420
43444
|
}
|
|
43421
|
-
static template = tmpl(pluginHtml$
|
|
43445
|
+
static template = tmpl(pluginHtml$6);
|
|
43422
43446
|
/**
|
|
43423
43447
|
* @internal
|
|
43424
43448
|
*/
|
|
@@ -43436,7 +43460,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43436
43460
|
this.listenTo(this.core, Events$1.CORE_READY, this.onCoreReady);
|
|
43437
43461
|
this.listenTo(this.core, 'core:advertisement:start', this.onStartAd);
|
|
43438
43462
|
this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd);
|
|
43439
|
-
trace(`${T$
|
|
43463
|
+
trace(`${T$f} bindEvents`, {
|
|
43440
43464
|
mediacontrol: !!this.core.mediaControl,
|
|
43441
43465
|
});
|
|
43442
43466
|
this.listenTo(this.core.mediaControl, Events$1.MEDIACONTROL_RENDERED, this.mediaControlRendered);
|
|
@@ -43461,12 +43485,12 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43461
43485
|
}
|
|
43462
43486
|
mediaControlRendered() {
|
|
43463
43487
|
const container = this.core.activeContainer;
|
|
43464
|
-
trace(`${T$
|
|
43488
|
+
trace(`${T$f} mediaControlRendered`, {
|
|
43465
43489
|
container: !!container,
|
|
43466
43490
|
});
|
|
43467
43491
|
if (container) {
|
|
43468
43492
|
this.listenTo(container.playback, Events$1.PLAYBACK_PLAY, () => {
|
|
43469
|
-
trace(`${T$
|
|
43493
|
+
trace(`${T$f} PLAYBACK_PLAY`);
|
|
43470
43494
|
this.render();
|
|
43471
43495
|
});
|
|
43472
43496
|
}
|
|
@@ -43490,7 +43514,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43490
43514
|
}
|
|
43491
43515
|
const { autoPlay, wasMuted } = this.options;
|
|
43492
43516
|
const volume = container.volume;
|
|
43493
|
-
trace(`${T$
|
|
43517
|
+
trace(`${T$f} shouldRender`, {
|
|
43494
43518
|
autoPlay,
|
|
43495
43519
|
wasMuted,
|
|
43496
43520
|
volume,
|
|
@@ -43502,7 +43526,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43502
43526
|
*/
|
|
43503
43527
|
render() {
|
|
43504
43528
|
if (this.shouldRender()) {
|
|
43505
|
-
trace(`${T$
|
|
43529
|
+
trace(`${T$f} render`, {
|
|
43506
43530
|
el: !!this.$el,
|
|
43507
43531
|
});
|
|
43508
43532
|
this.$el.html(BigMuteButton.template());
|
|
@@ -43541,7 +43565,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
43541
43565
|
}
|
|
43542
43566
|
}
|
|
43543
43567
|
|
|
43544
|
-
const pluginHtml$
|
|
43568
|
+
const pluginHtml$5 = "<div class=\"media-control-gear\" data-<%= name %>>\n <button type=\"button\" class=\"button-gear gplayer-lite-btn gcore-skin-button-color\" data-gear-button=\"-1\">\n <span class=\"gear-icon\"><%= icon %></span>\n </button>\n <div class=\"gear-wrapper gcore-skin-bg-color\">\n <ul class=\"gear-options-list\">\n <% items.forEach(function (gear) { %>\n <li data-<%= gear %>></li>\n <% }); %>\n </ul>\n </div>\n</div>\n";
|
|
43545
43569
|
|
|
43546
43570
|
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";
|
|
43547
43571
|
|
|
@@ -43835,7 +43859,7 @@ var MediaControlEvents;
|
|
|
43835
43859
|
*/
|
|
43836
43860
|
MediaControlEvents["MEDIACONTROL_GEAR_RENDERED"] = "mediacontrol:gear:rendered";
|
|
43837
43861
|
})(MediaControlEvents || (MediaControlEvents = {}));
|
|
43838
|
-
const T$
|
|
43862
|
+
const T$e = 'plugins.media_control';
|
|
43839
43863
|
const LEFT_ORDER = [
|
|
43840
43864
|
'playpause',
|
|
43841
43865
|
'playstop',
|
|
@@ -43869,7 +43893,7 @@ class MediaControl extends UICorePlugin {
|
|
|
43869
43893
|
buttonsColor = null;
|
|
43870
43894
|
currentDurationValue = 0;
|
|
43871
43895
|
currentPositionValue = 0;
|
|
43872
|
-
currentSeekBarPercentage =
|
|
43896
|
+
currentSeekBarPercentage = 0;
|
|
43873
43897
|
disabledClickableList = [];
|
|
43874
43898
|
displayedDuration = null;
|
|
43875
43899
|
displayedPosition = null;
|
|
@@ -43987,6 +44011,9 @@ class MediaControl extends UICorePlugin {
|
|
|
43987
44011
|
'mouseleave .media-control-layer[data-controls]': 'resetUserKeepVisible',
|
|
43988
44012
|
};
|
|
43989
44013
|
}
|
|
44014
|
+
get currentSeekPos() {
|
|
44015
|
+
return this.currentSeekBarPercentage;
|
|
44016
|
+
}
|
|
43990
44017
|
/**
|
|
43991
44018
|
* Current volume [0..100]
|
|
43992
44019
|
*/
|
|
@@ -44083,7 +44110,7 @@ class MediaControl extends UICorePlugin {
|
|
|
44083
44110
|
* Hides the media control UI
|
|
44084
44111
|
*/
|
|
44085
44112
|
disable() {
|
|
44086
|
-
trace(`${T$
|
|
44113
|
+
trace(`${T$e} disable`);
|
|
44087
44114
|
this.userDisabled = true; // TODO distinguish between user and system (e.g., unplayable) disabled?
|
|
44088
44115
|
this.hide();
|
|
44089
44116
|
this.unbindKeyEvents();
|
|
@@ -44093,7 +44120,7 @@ class MediaControl extends UICorePlugin {
|
|
|
44093
44120
|
* Reenables the plugin disabled earlier with the {@link MediaControl.disable} method
|
|
44094
44121
|
*/
|
|
44095
44122
|
enable() {
|
|
44096
|
-
trace(`${T$
|
|
44123
|
+
trace(`${T$e} enable`);
|
|
44097
44124
|
if (this.options.chromeless) {
|
|
44098
44125
|
return;
|
|
44099
44126
|
}
|
|
@@ -44349,8 +44376,7 @@ class MediaControl extends UICorePlugin {
|
|
|
44349
44376
|
this.changeTogglePlay();
|
|
44350
44377
|
this.bindContainerEvents();
|
|
44351
44378
|
this.settingsUpdate();
|
|
44352
|
-
this.core.activeContainer
|
|
44353
|
-
this.core.activeContainer.trigger(Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
44379
|
+
this.core.activeContainer.trigger(Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.core.activeContainer.isDvrInUse());
|
|
44354
44380
|
// TODO test
|
|
44355
44381
|
if (this.core.activeContainer.mediaControlDisabled) {
|
|
44356
44382
|
this.disable();
|
|
@@ -44916,18 +44942,7 @@ MediaControl.extend = function (properties) {
|
|
|
44916
44942
|
};
|
|
44917
44943
|
|
|
44918
44944
|
const VERSION$5 = '2.19.12';
|
|
44919
|
-
const T$
|
|
44920
|
-
/**
|
|
44921
|
-
* Custom events emitted by the plugin
|
|
44922
|
-
* @beta
|
|
44923
|
-
*/
|
|
44924
|
-
var GearEvents;
|
|
44925
|
-
(function (GearEvents) {
|
|
44926
|
-
/**
|
|
44927
|
-
* Emitted when the gear menu is rendered
|
|
44928
|
-
*/
|
|
44929
|
-
GearEvents["MEDIACONTROL_GEAR_RENDERED"] = "mediacontrol:gear:rendered";
|
|
44930
|
-
})(GearEvents || (GearEvents = {}));
|
|
44945
|
+
const T$d = 'plugins.bottom_gear';
|
|
44931
44946
|
/**
|
|
44932
44947
|
* Adds the gear button that triggers extra options menu on the right side of the {@link MediaControl | media control} UI
|
|
44933
44948
|
* @beta
|
|
@@ -44958,7 +44973,7 @@ class BottomGear extends UICorePlugin {
|
|
|
44958
44973
|
static get version() {
|
|
44959
44974
|
return VERSION$5;
|
|
44960
44975
|
}
|
|
44961
|
-
static template = tmpl(pluginHtml$
|
|
44976
|
+
static template = tmpl(pluginHtml$5);
|
|
44962
44977
|
/**
|
|
44963
44978
|
* @internal
|
|
44964
44979
|
*/
|
|
@@ -44983,7 +44998,6 @@ class BottomGear extends UICorePlugin {
|
|
|
44983
44998
|
const mediaControl = this.core.getPlugin('media_control');
|
|
44984
44999
|
assert(mediaControl, 'media_control plugin is required');
|
|
44985
45000
|
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
44986
|
-
this.listenTo(this.core, 'gear:refresh', this.refresh); // TODO use direct plugin method call
|
|
44987
45001
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_RENDERED, this.render);
|
|
44988
45002
|
this.listenTo(mediaControl, Events$1.MEDIACONTROL_HIDE, this.hide); // TODO mediacontrol show as well
|
|
44989
45003
|
}
|
|
@@ -45002,15 +45016,15 @@ class BottomGear extends UICorePlugin {
|
|
|
45002
45016
|
this.$el.find('.gear-wrapper').html(content);
|
|
45003
45017
|
}
|
|
45004
45018
|
onActiveContainerChanged() {
|
|
45005
|
-
trace(`${T$
|
|
45019
|
+
trace(`${T$d} onActiveContainerChanged`);
|
|
45006
45020
|
this.bindContainerEvents();
|
|
45007
45021
|
}
|
|
45008
45022
|
bindContainerEvents() {
|
|
45009
|
-
trace(`${T$
|
|
45023
|
+
trace(`${T$d} bindContainerEvents`);
|
|
45010
45024
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
|
|
45011
45025
|
}
|
|
45012
45026
|
highDefinitionUpdate(isHd) {
|
|
45013
|
-
trace(`${T$
|
|
45027
|
+
trace(`${T$d} highDefinitionUpdate`, { isHd });
|
|
45014
45028
|
this.isHd = isHd;
|
|
45015
45029
|
this.$el.find('.gear-icon').html(isHd ? gearHdIcon : gearIcon);
|
|
45016
45030
|
}
|
|
@@ -45029,11 +45043,14 @@ class BottomGear extends UICorePlugin {
|
|
|
45029
45043
|
const icon = this.isHd ? gearHdIcon : gearIcon;
|
|
45030
45044
|
this.$el.html(BottomGear.template({ icon, items }));
|
|
45031
45045
|
mediaControl.getElement('gear')?.html(this.el);
|
|
45032
|
-
this.core.trigger('gear:rendered'); // @deprecated
|
|
45033
|
-
mediaControl.trigger(GearEvents.MEDIACONTROL_GEAR_RENDERED); // TODO drop
|
|
45034
45046
|
mediaControl.trigger(MediaControlEvents.MEDIACONTROL_GEAR_RENDERED);
|
|
45035
45047
|
return this;
|
|
45036
45048
|
}
|
|
45049
|
+
/**
|
|
45050
|
+
* Re-renders the gear menu.
|
|
45051
|
+
* It fires the {@link MediaControlEvents.MEDIACONTROL_GEAR_RENDERED | MEDIACONTROL_GEAR_RENDERED} event,
|
|
45052
|
+
* which the plugins that attach to the gear menu can listen to to re-render themselves.
|
|
45053
|
+
*/
|
|
45037
45054
|
refresh() {
|
|
45038
45055
|
this.render();
|
|
45039
45056
|
this.$el.find('.gear-wrapper').show();
|
|
@@ -47114,7 +47131,7 @@ function rankConnectionSpeed(dlSpeed) {
|
|
|
47114
47131
|
return 0;
|
|
47115
47132
|
}
|
|
47116
47133
|
|
|
47117
|
-
const pluginHtml$5 = "<% general = metrics.general %>\n<% counters = metrics.counters %>\n<% timers = metrics.timers %>\n<% extra = metrics.extra %>\n<% custom = metrics.custom %>\n\n<div class=\"stats-box\">\n <div class=\"stats-box-top\">\n <a class=\"close-button gplayer-lite-btn\" data-close-button>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <g clip-path=\"url(#clip0_184_1489)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.41376 6.00013L13.7068 -0.292872C14.0978 -0.683872 14.0978 -1.31587 13.7068 -1.70687C13.3158 -2.09787 12.6838 -2.09787 12.2928 -1.70687L5.99976 4.58613L-0.293238 -1.70687C-0.684238 -2.09787 -1.31624 -2.09787 -1.70724 -1.70687C-2.09824 -1.31587 -2.09824 -0.683872 -1.70724 -0.292872L4.58576 6.00013L-1.70724 12.2931C-2.09824 12.6841 -2.09824 13.3161 -1.70724 13.7071C-1.51224 13.9021 -1.25624 14.0001 -1.00024 14.0001C-0.744238 14.0001 -0.488238 13.9021 -0.293238 13.7071L5.99976 7.41413L12.2928 13.7071C12.4878 13.9021 12.7438 14.0001 12.9998 14.0001C13.2558 14.0001 13.5118 13.9021 13.7068 13.7071C14.0978 13.3161 14.0978 12.6841 13.7068 12.2931L7.41376 6.00013Z\"\n fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_184_1489\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n </a>\n </div>\n <div class=\"stats-box-main\">\n <ul>\n <li class=\"title\"><span>General</span></li>\n <li>\n Display resolution:\n <div><span><%= general.displayResolution %></span></div>\n </li>\n <li>\n Volume:\n <div><span><%= general.volume %></span></div>\n </li>\n <li>\n Connection speed:\n <div><span id=\"dlText\"><%= custom.connectionSpeed %></span> Mbps</div>\n </li>\n <li class=\"canvas-wrapper\">\n <canvas id=\"speedTestCanvas\" width=\"190\" height=\"20\"></canvas>\n </li>\n <li>\n Ping:\n <div><span id=\"pingText\"><%= custom.ping %></span> ms</div>\n </li>\n <li>\n Jitter:\n <div><span id=\"jitterText\"><%= custom.jitter %></span> ms</div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span>Counters</span></li>\n <li>\n Plays:\n <div><span><%= counters.play %></span></div>\n </li>\n <li>\n Pauses:\n <div><span><%= counters.pause %></span></div>\n </li>\n <li>\n Errors:\n <div><span><%= counters.error %></span></div>\n </li>\n <li>\n Bufferings:\n <div><span><%= counters.buffering %></span></div>\n </li>\n <li>\n Decoded frames:\n <div><span><%= counters.decodedFrames %></span></div>\n </li>\n <li>\n Dropped frames:\n <div><span><%= counters.droppedFrames %></span></div>\n </li>\n <li>\n Frames per second:\n <div><span><%= counters.fps %></span></div>\n </li>\n <li>\n Bitrate changes:\n <div><span><%= counters.changeLevel %></span></div>\n </li>\n <li>\n Seeks:\n <div><span><%= counters.seek %></span></div>\n </li>\n <li>\n Fullscreen:\n <div><span><%= counters.fullscreen %></span></div>\n </li>\n <li>\n DVR seeks:\n <div><span><%= counters.dvrUsage %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span>Timers</span></li>\n <li>\n Startup time:\n <div><span><%= timers.startup %></span></div>\n </li>\n <li>\n Watching time:\n <div><span><%= timers.watch %></span></div>\n </li>\n <li>\n Pause time:\n <div><span><%= timers.pause %></span></div>\n </li>\n <li>\n Buffering time:\n <div><span><%= timers.buffering %></span></div>\n </li>\n <li>\n Session time:\n <div><span><%= timers.session %></span></div>\n </li>\n <!-- <li>-->\n <!-- Latency:-->\n <!-- <div><span><%= timers.latency %></span></div>-->\n <!-- </li>-->\n </ul>\n\n <ul>\n <li class=\"title\"><span>Extra</span></li>\n <li>\n Playback:\n <div><span><%= extra.playbackName %></span></div>\n </li>\n <li>\n Playback type:\n <div><span><%= extra.playbackType %></span></div>\n </li>\n <li>\n Buffer size:\n <div><span><%= extra.buffersize %></span></div>\n </li>\n <li>\n Video duration:\n <div><span><%= extra.duration %></span></div>\n </li>\n <li>\n Current time:\n <div><span><%= extra.currentTime %></span></div>\n </li>\n <li>\n Bitrate weighted mean:\n <div><span><%= extra.bitrateWeightedMean %></span></div>\n </li>\n <li>\n Bitrate most used:\n <div><span><%= extra.bitrateMostUsed %></span></div>\n </li>\n <li>\n % Watched:\n <div><span><%= extra.watchedPercentage %></span></div>\n </li>\n <li>\n % Buffering:\n <div><span><%= extra.bufferingPercentage %></span></div>\n </li>\n </ul>\n </div>\n <div class=\"speedtest-summary\">\n <div class=\"speedtest-summary-header\">Your internet quality summary</div>\n <div class=\"speedtest-summary-block\">\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\">VOD: <%= custom.vodQuality %></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"vod\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\">Live: <%= custom.liveQuality %></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"live\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-footer\">\n <!-- <a class=\"speedtest-footer-about-link\" href=\"\" target=\"_blank\">I am not a nerd, what's this all about?</a>-->\n <button class=\"gplayer-lite-btn speedtest-btn speedtest-footer-refresh\" data-refresh-button type=\"button\">\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path\n d=\"M6.03968 0.124998C3.64268 0.124998 1.67268 1.9565 1.48068 4.2915H1.00018C0.925833 4.29146 0.853156 4.31353 0.791378 4.35489C0.729601 4.39625 0.681511 4.45503 0.653218 4.52378C0.624925 4.59253 0.617705 4.66814 0.632476 4.74101C0.647248 4.81387 0.683343 4.88069 0.736177 4.933L1.57618 5.766C1.64641 5.83561 1.74129 5.87467 1.84018 5.87467C1.93906 5.87467 2.03395 5.83561 2.10418 5.766L2.94418 4.933C2.99701 4.88069 3.03311 4.81387 3.04788 4.74101C3.06265 4.66814 3.05543 4.59253 3.02714 4.52378C2.99884 4.45503 2.95075 4.39625 2.88898 4.35489C2.8272 4.31353 2.75452 4.29146 2.68018 4.2915H2.23368C2.42368 2.376 4.05268 0.874998 6.03968 0.874998C6.6948 0.873639 7.33932 1.04039 7.91158 1.35931C8.48384 1.67822 8.9647 2.13863 9.30818 2.6965C9.33331 2.73978 9.36686 2.7776 9.40684 2.80771C9.44682 2.83783 9.49243 2.85963 9.54097 2.87184C9.58951 2.88405 9.64001 2.88643 9.68948 2.87881C9.73895 2.8712 9.7864 2.85377 9.82902 2.82753C9.87165 2.80129 9.90859 2.76679 9.93767 2.72605C9.96675 2.68531 9.98739 2.63916 9.99835 2.59032C10.0093 2.54148 10.0104 2.49095 10.0015 2.44168C9.99264 2.39242 9.974 2.34544 9.94668 2.3035C9.53615 1.63664 8.96146 1.08621 8.27752 0.704805C7.59359 0.323402 6.82277 0.123774 6.03968 0.124998ZM10.4207 4.2335C10.3505 4.16419 10.2558 4.12532 10.1572 4.12532C10.0585 4.12532 9.96386 4.16419 9.89368 4.2335L9.05018 5.0665C8.9972 5.11874 8.96096 5.18557 8.94608 5.25847C8.93119 5.33137 8.93833 5.40705 8.96658 5.47588C8.99483 5.54472 9.04292 5.60359 9.10473 5.64501C9.16654 5.68644 9.23927 5.70853 9.31368 5.7085H9.76318C9.57218 7.6235 7.93768 9.125 5.94118 9.125C5.28399 9.12683 4.63729 8.96035 4.06269 8.64141C3.48808 8.32247 3.00473 7.86169 2.65868 7.303C2.63281 7.26107 2.59893 7.22465 2.55899 7.19582C2.51904 7.16699 2.47381 7.14631 2.42587 7.13495C2.37793 7.1236 2.32823 7.1218 2.27959 7.12966C2.23096 7.13752 2.18435 7.15488 2.14243 7.18075C2.05776 7.233 1.99731 7.31674 1.97438 7.41355C1.95146 7.51037 1.96793 7.61233 2.02018 7.697C2.43345 8.36457 3.01076 8.91521 3.69713 9.29647C4.38349 9.67772 5.15604 9.87689 5.94118 9.875C8.34518 9.875 10.3237 8.045 10.5162 5.7085H11.0002C11.0746 5.70853 11.1473 5.68644 11.2091 5.64501C11.2709 5.60359 11.319 5.54472 11.3473 5.47588C11.3755 5.40705 11.3827 5.33137 11.3678 5.25847C11.3529 5.18557 11.3167 5.11874 11.2637 5.0665L10.4207 4.2335Z\"\n fill=\"white\"/>\n </svg>\n Refresh\n </button>\n </div>\n</div>\n";
|
|
47134
|
+
const pluginHtml$4 = "<% general = metrics.general %>\n<% counters = metrics.counters %>\n<% timers = metrics.timers %>\n<% extra = metrics.extra %>\n<% custom = metrics.custom %>\n\n<div class=\"stats-box\">\n <div class=\"stats-box-top\">\n <a class=\"close-button gplayer-lite-btn\" data-close-button>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <g clip-path=\"url(#clip0_184_1489)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.41376 6.00013L13.7068 -0.292872C14.0978 -0.683872 14.0978 -1.31587 13.7068 -1.70687C13.3158 -2.09787 12.6838 -2.09787 12.2928 -1.70687L5.99976 4.58613L-0.293238 -1.70687C-0.684238 -2.09787 -1.31624 -2.09787 -1.70724 -1.70687C-2.09824 -1.31587 -2.09824 -0.683872 -1.70724 -0.292872L4.58576 6.00013L-1.70724 12.2931C-2.09824 12.6841 -2.09824 13.3161 -1.70724 13.7071C-1.51224 13.9021 -1.25624 14.0001 -1.00024 14.0001C-0.744238 14.0001 -0.488238 13.9021 -0.293238 13.7071L5.99976 7.41413L12.2928 13.7071C12.4878 13.9021 12.7438 14.0001 12.9998 14.0001C13.2558 14.0001 13.5118 13.9021 13.7068 13.7071C14.0978 13.3161 14.0978 12.6841 13.7068 12.2931L7.41376 6.00013Z\"\n fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_184_1489\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n </a>\n </div>\n <div class=\"stats-box-main\">\n <ul>\n <li class=\"title\"><span>General</span></li>\n <li>\n Display resolution:\n <div><span><%= general.displayResolution %></span></div>\n </li>\n <li>\n Volume:\n <div><span><%= general.volume %></span></div>\n </li>\n <li>\n Connection speed:\n <div><span id=\"dlText\"><%= custom.connectionSpeed %></span> Mbps</div>\n </li>\n <li class=\"canvas-wrapper\">\n <canvas id=\"speedTestCanvas\" width=\"190\" height=\"20\"></canvas>\n </li>\n <li>\n Ping:\n <div><span id=\"pingText\"><%= custom.ping %></span> ms</div>\n </li>\n <li>\n Jitter:\n <div><span id=\"jitterText\"><%= custom.jitter %></span> ms</div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span>Counters</span></li>\n <li>\n Plays:\n <div><span><%= counters.play %></span></div>\n </li>\n <li>\n Pauses:\n <div><span><%= counters.pause %></span></div>\n </li>\n <li>\n Errors:\n <div><span><%= counters.error %></span></div>\n </li>\n <li>\n Bufferings:\n <div><span><%= counters.buffering %></span></div>\n </li>\n <li>\n Decoded frames:\n <div><span><%= counters.decodedFrames %></span></div>\n </li>\n <li>\n Dropped frames:\n <div><span><%= counters.droppedFrames %></span></div>\n </li>\n <li>\n Frames per second:\n <div><span><%= counters.fps %></span></div>\n </li>\n <li>\n Bitrate changes:\n <div><span><%= counters.changeLevel %></span></div>\n </li>\n <li>\n Seeks:\n <div><span><%= counters.seek %></span></div>\n </li>\n <li>\n Fullscreen:\n <div><span><%= counters.fullscreen %></span></div>\n </li>\n <li>\n DVR seeks:\n <div><span><%= counters.dvrUsage %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span>Timers</span></li>\n <li>\n Startup time:\n <div><span><%= timers.startup %></span></div>\n </li>\n <li>\n Watching time:\n <div><span><%= timers.watch %></span></div>\n </li>\n <li>\n Pause time:\n <div><span><%= timers.pause %></span></div>\n </li>\n <li>\n Buffering time:\n <div><span><%= timers.buffering %></span></div>\n </li>\n <li>\n Session time:\n <div><span><%= timers.session %></span></div>\n </li>\n <!-- <li>-->\n <!-- Latency:-->\n <!-- <div><span><%= timers.latency %></span></div>-->\n <!-- </li>-->\n </ul>\n\n <ul>\n <li class=\"title\"><span>Extra</span></li>\n <li>\n Playback:\n <div><span><%= extra.playbackName %></span></div>\n </li>\n <li>\n Playback type:\n <div><span><%= extra.playbackType %></span></div>\n </li>\n <li>\n Buffer size:\n <div><span><%= extra.buffersize %></span></div>\n </li>\n <li>\n Video duration:\n <div><span><%= extra.duration %></span></div>\n </li>\n <li>\n Current time:\n <div><span><%= extra.currentTime %></span></div>\n </li>\n <li>\n Bitrate weighted mean:\n <div><span><%= extra.bitrateWeightedMean %></span></div>\n </li>\n <li>\n Bitrate most used:\n <div><span><%= extra.bitrateMostUsed %></span></div>\n </li>\n <li>\n % Watched:\n <div><span><%= extra.watchedPercentage %></span></div>\n </li>\n <li>\n % Buffering:\n <div><span><%= extra.bufferingPercentage %></span></div>\n </li>\n </ul>\n </div>\n <div class=\"speedtest-summary\">\n <div class=\"speedtest-summary-header\">Your internet quality summary</div>\n <div class=\"speedtest-summary-block\">\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\">VOD: <%= custom.vodQuality %></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"vod\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\">Live: <%= custom.liveQuality %></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"live\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-footer\">\n <!-- <a class=\"speedtest-footer-about-link\" href=\"\" target=\"_blank\">I am not a nerd, what's this all about?</a>-->\n <button class=\"gplayer-lite-btn speedtest-btn speedtest-footer-refresh\" data-refresh-button type=\"button\">\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path\n d=\"M6.03968 0.124998C3.64268 0.124998 1.67268 1.9565 1.48068 4.2915H1.00018C0.925833 4.29146 0.853156 4.31353 0.791378 4.35489C0.729601 4.39625 0.681511 4.45503 0.653218 4.52378C0.624925 4.59253 0.617705 4.66814 0.632476 4.74101C0.647248 4.81387 0.683343 4.88069 0.736177 4.933L1.57618 5.766C1.64641 5.83561 1.74129 5.87467 1.84018 5.87467C1.93906 5.87467 2.03395 5.83561 2.10418 5.766L2.94418 4.933C2.99701 4.88069 3.03311 4.81387 3.04788 4.74101C3.06265 4.66814 3.05543 4.59253 3.02714 4.52378C2.99884 4.45503 2.95075 4.39625 2.88898 4.35489C2.8272 4.31353 2.75452 4.29146 2.68018 4.2915H2.23368C2.42368 2.376 4.05268 0.874998 6.03968 0.874998C6.6948 0.873639 7.33932 1.04039 7.91158 1.35931C8.48384 1.67822 8.9647 2.13863 9.30818 2.6965C9.33331 2.73978 9.36686 2.7776 9.40684 2.80771C9.44682 2.83783 9.49243 2.85963 9.54097 2.87184C9.58951 2.88405 9.64001 2.88643 9.68948 2.87881C9.73895 2.8712 9.7864 2.85377 9.82902 2.82753C9.87165 2.80129 9.90859 2.76679 9.93767 2.72605C9.96675 2.68531 9.98739 2.63916 9.99835 2.59032C10.0093 2.54148 10.0104 2.49095 10.0015 2.44168C9.99264 2.39242 9.974 2.34544 9.94668 2.3035C9.53615 1.63664 8.96146 1.08621 8.27752 0.704805C7.59359 0.323402 6.82277 0.123774 6.03968 0.124998ZM10.4207 4.2335C10.3505 4.16419 10.2558 4.12532 10.1572 4.12532C10.0585 4.12532 9.96386 4.16419 9.89368 4.2335L9.05018 5.0665C8.9972 5.11874 8.96096 5.18557 8.94608 5.25847C8.93119 5.33137 8.93833 5.40705 8.96658 5.47588C8.99483 5.54472 9.04292 5.60359 9.10473 5.64501C9.16654 5.68644 9.23927 5.70853 9.31368 5.7085H9.76318C9.57218 7.6235 7.93768 9.125 5.94118 9.125C5.28399 9.12683 4.63729 8.96035 4.06269 8.64141C3.48808 8.32247 3.00473 7.86169 2.65868 7.303C2.63281 7.26107 2.59893 7.22465 2.55899 7.19582C2.51904 7.16699 2.47381 7.14631 2.42587 7.13495C2.37793 7.1236 2.32823 7.1218 2.27959 7.12966C2.23096 7.13752 2.18435 7.15488 2.14243 7.18075C2.05776 7.233 1.99731 7.31674 1.97438 7.41355C1.95146 7.51037 1.96793 7.61233 2.02018 7.697C2.43345 8.36457 3.01076 8.91521 3.69713 9.29647C4.38349 9.67772 5.15604 9.87689 5.94118 9.875C8.34518 9.875 10.3237 8.045 10.5162 5.7085H11.0002C11.0746 5.70853 11.1473 5.68644 11.2091 5.64501C11.2709 5.60359 11.319 5.54472 11.3473 5.47588C11.3755 5.40705 11.3827 5.33137 11.3678 5.25847C11.3529 5.18557 11.3167 5.11874 11.2637 5.0665L10.4207 4.2335Z\"\n fill=\"white\"/>\n </svg>\n Refresh\n </button>\n </div>\n</div>\n";
|
|
47118
47135
|
|
|
47119
47136
|
const buttonHtml$3 = "<button class='nerd-button gplayer-lite-btn gcore-skin-text-color gear-option'>\n <span class=\"stats-icon\"></span>\n <span>Statistics</span>\n</button>\n";
|
|
47120
47137
|
|
|
@@ -47229,7 +47246,7 @@ class ClapprNerdStats extends UICorePlugin {
|
|
|
47229
47246
|
get supportedVersion() {
|
|
47230
47247
|
return { min: CLAPPR_VERSION };
|
|
47231
47248
|
}
|
|
47232
|
-
static template = tmpl(pluginHtml$
|
|
47249
|
+
static template = tmpl(pluginHtml$4);
|
|
47233
47250
|
/**
|
|
47234
47251
|
* @internal
|
|
47235
47252
|
*/
|
|
@@ -47283,7 +47300,7 @@ class ClapprNerdStats extends UICorePlugin {
|
|
|
47283
47300
|
const mediaControl = this.core.getPlugin('media_control');
|
|
47284
47301
|
assert(mediaControl, 'media_control plugin is required');
|
|
47285
47302
|
this.listenToOnce(this.core, Events$1.CORE_READY, this.init);
|
|
47286
|
-
this.listenTo(mediaControl,
|
|
47303
|
+
this.listenTo(mediaControl, MediaControlEvents.MEDIACONTROL_GEAR_RENDERED, this.addToBottomGear);
|
|
47287
47304
|
}
|
|
47288
47305
|
init() {
|
|
47289
47306
|
this.container = this.core.activeContainer;
|
|
@@ -47804,7 +47821,7 @@ class ClapprStats extends ContainerPlugin {
|
|
|
47804
47821
|
//Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
47805
47822
|
// Use of this source code is governed by a BSD-style
|
|
47806
47823
|
// license that can be found at https://github.com/clappr/clappr-plugins/blob/master/LICENSE.
|
|
47807
|
-
const T$
|
|
47824
|
+
const T$c = 'plugins.click_to_pause_custom';
|
|
47808
47825
|
/**
|
|
47809
47826
|
* Adds a behavior of toggling the playback state on click over the container
|
|
47810
47827
|
* @beta
|
|
@@ -47834,7 +47851,7 @@ class ClickToPause extends ContainerPlugin {
|
|
|
47834
47851
|
click() {
|
|
47835
47852
|
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
|
|
47836
47853
|
const isDvrEnabled = this.container.isDvrEnabled();
|
|
47837
|
-
trace(`${T$
|
|
47854
|
+
trace(`${T$c} click`, {
|
|
47838
47855
|
isLivePlayback,
|
|
47839
47856
|
isDvrEnabled,
|
|
47840
47857
|
});
|
|
@@ -47852,7 +47869,7 @@ class ClickToPause extends ContainerPlugin {
|
|
|
47852
47869
|
settingsUpdate() {
|
|
47853
47870
|
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
|
|
47854
47871
|
const pointerEnabled = !isLivePlayback || this.container.isDvrEnabled();
|
|
47855
|
-
trace(`${T$
|
|
47872
|
+
trace(`${T$c} settingsUpdate`, {
|
|
47856
47873
|
isLivePlayback,
|
|
47857
47874
|
pointerEnabled,
|
|
47858
47875
|
});
|
|
@@ -48148,6 +48165,7 @@ class ContextMenu extends UIContainerPlugin {
|
|
|
48148
48165
|
|
|
48149
48166
|
const dvrHTML = "<div class=\"live-info\"><%= live %></div>\n<button type=\"button\" class=\"live-button\" aria-label=\"<%= backToLive %>\"><%= backToLive %></button>\n";
|
|
48150
48167
|
|
|
48168
|
+
const T$b = 'plugins.dvr_controls';
|
|
48151
48169
|
/**
|
|
48152
48170
|
* Adds the DVR controls to the media control UI
|
|
48153
48171
|
* @beta
|
|
@@ -48178,7 +48196,7 @@ class DvrControls extends UICorePlugin {
|
|
|
48178
48196
|
*/
|
|
48179
48197
|
get events() {
|
|
48180
48198
|
return {
|
|
48181
|
-
'click .live-button': 'click'
|
|
48199
|
+
'click .live-button': 'click',
|
|
48182
48200
|
};
|
|
48183
48201
|
}
|
|
48184
48202
|
/**
|
|
@@ -48186,8 +48204,8 @@ class DvrControls extends UICorePlugin {
|
|
|
48186
48204
|
*/
|
|
48187
48205
|
get attributes() {
|
|
48188
48206
|
return {
|
|
48189
|
-
|
|
48190
|
-
'data-dvr-controls': ''
|
|
48207
|
+
class: 'dvr-controls',
|
|
48208
|
+
'data-dvr-controls': '',
|
|
48191
48209
|
};
|
|
48192
48210
|
}
|
|
48193
48211
|
constructor(core) {
|
|
@@ -48206,23 +48224,25 @@ class DvrControls extends UICorePlugin {
|
|
|
48206
48224
|
}
|
|
48207
48225
|
bindContainerEvents() {
|
|
48208
48226
|
this.listenToOnce(this.core.activeContainer, Events$1.CONTAINER_TIMEUPDATE, this.render);
|
|
48209
|
-
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.
|
|
48227
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrChanged);
|
|
48210
48228
|
}
|
|
48211
|
-
|
|
48229
|
+
onDvrChanged(dvrEnabled) {
|
|
48230
|
+
trace(`${T$b} onDvrChanged`, {
|
|
48231
|
+
dvrEnabled,
|
|
48232
|
+
});
|
|
48212
48233
|
if (this.core.getPlaybackType() !== Playback.LIVE) {
|
|
48213
48234
|
return;
|
|
48214
48235
|
}
|
|
48215
48236
|
this.settingsUpdate();
|
|
48216
48237
|
this.core.mediaControl.$el.addClass('live');
|
|
48217
48238
|
if (dvrEnabled) {
|
|
48218
|
-
|
|
48239
|
+
// TODO
|
|
48219
48240
|
this.core.mediaControl.$el
|
|
48220
48241
|
.addClass('dvr')
|
|
48221
48242
|
.find('.media-control-indicator[data-position], .media-control-indicator[data-duration]')
|
|
48222
48243
|
.hide();
|
|
48223
48244
|
}
|
|
48224
48245
|
else {
|
|
48225
|
-
this.core.mediaControl.$playbackRate.addClass('playbackrate-enable');
|
|
48226
48246
|
this.core.mediaControl.$el.removeClass('dvr');
|
|
48227
48247
|
}
|
|
48228
48248
|
}
|
|
@@ -48247,24 +48267,31 @@ class DvrControls extends UICorePlugin {
|
|
|
48247
48267
|
this.bindEvents();
|
|
48248
48268
|
}
|
|
48249
48269
|
shouldRender() {
|
|
48250
|
-
const useDvrControls = this.core.options.useDvrControls === undefined ||
|
|
48270
|
+
const useDvrControls = this.core.options.useDvrControls === undefined ||
|
|
48271
|
+
!!this.core.options.useDvrControls;
|
|
48251
48272
|
return useDvrControls && this.core.getPlaybackType() === Playback.LIVE;
|
|
48252
48273
|
}
|
|
48253
48274
|
/**
|
|
48254
48275
|
* @internal
|
|
48255
48276
|
*/
|
|
48256
48277
|
render() {
|
|
48278
|
+
trace(`${T$b} render`, {
|
|
48279
|
+
dvrEnabled: this.core.activePlayback?.dvrEnabled,
|
|
48280
|
+
});
|
|
48281
|
+
if (!this.shouldRender()) {
|
|
48282
|
+
return this;
|
|
48283
|
+
}
|
|
48257
48284
|
this.$el.html(DvrControls.template({
|
|
48258
48285
|
live: this.core.i18n.t('live'),
|
|
48259
|
-
backToLive: this.core.i18n.t('back_to_live')
|
|
48286
|
+
backToLive: this.core.i18n.t('back_to_live'),
|
|
48260
48287
|
}));
|
|
48261
|
-
|
|
48262
|
-
|
|
48263
|
-
|
|
48264
|
-
|
|
48265
|
-
|
|
48266
|
-
|
|
48267
|
-
|
|
48288
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
48289
|
+
assert(mediaControl, 'media_control plugin is required');
|
|
48290
|
+
// TODO don't tap into the $el directly
|
|
48291
|
+
mediaControl.$el.addClass('live');
|
|
48292
|
+
mediaControl
|
|
48293
|
+
.$('.media-control-left-panel[data-media-control]')
|
|
48294
|
+
.append(this.$el);
|
|
48268
48295
|
return this;
|
|
48269
48296
|
}
|
|
48270
48297
|
}
|
|
@@ -48273,7 +48300,7 @@ const reloadIcon = "<svg fill=\"#FFFFFF\" height=\"24\" viewBox=\"0 0 24 24\" wi
|
|
|
48273
48300
|
|
|
48274
48301
|
const templateHtml = "<div class=\"player-error-screen__content\" data-error-screen>\n <% if (icon) { %>\n <div class=\"player-error-screen__icon\" data-error-screen><%= icon %></div>\n <% } %>\n <div class=\"player-error-screen__title\" data-error-screen><%= title %></div>\n <% if (message) { %>\n <div class=\"player-error-screen__message\" data-error-screen><%= message %></div>\n <% } %>\n <% if (code) { %>\n <div class=\"player-error-screen__code\" data-error-screen>Error code: <%= code %></div>\n <% } %>\n <% if (reloadIcon) { %>\n <div class=\"player-error-screen__reload\" data-error-screen><%= reloadIcon %></div>\n <% } %>\n</div>\n";
|
|
48275
48302
|
|
|
48276
|
-
const T$
|
|
48303
|
+
const T$a = 'plugins.error_screen';
|
|
48277
48304
|
/**
|
|
48278
48305
|
* Displays an error nicely in the overlay on top of the player.
|
|
48279
48306
|
* @beta
|
|
@@ -48310,11 +48337,11 @@ class ErrorScreen extends UICorePlugin {
|
|
|
48310
48337
|
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
|
|
48311
48338
|
}
|
|
48312
48339
|
onPlay() {
|
|
48313
|
-
trace(`${T$
|
|
48340
|
+
trace(`${T$a} onPlay`);
|
|
48314
48341
|
this.unmount();
|
|
48315
48342
|
}
|
|
48316
48343
|
unmount() {
|
|
48317
|
-
trace(`${T$
|
|
48344
|
+
trace(`${T$a} unmount`);
|
|
48318
48345
|
this.err = null;
|
|
48319
48346
|
this.$el.remove();
|
|
48320
48347
|
}
|
|
@@ -48336,7 +48363,7 @@ class ErrorScreen extends UICorePlugin {
|
|
|
48336
48363
|
}, 0);
|
|
48337
48364
|
}
|
|
48338
48365
|
onActiveContainerChanged() {
|
|
48339
|
-
trace(`${T$
|
|
48366
|
+
trace(`${T$a} onActiveContainerChanged`, {
|
|
48340
48367
|
reloading: this.core.options.reloading,
|
|
48341
48368
|
});
|
|
48342
48369
|
this.err = null;
|
|
@@ -48352,7 +48379,7 @@ class ErrorScreen extends UICorePlugin {
|
|
|
48352
48379
|
}
|
|
48353
48380
|
}
|
|
48354
48381
|
onError(err) {
|
|
48355
|
-
trace(`${T$
|
|
48382
|
+
trace(`${T$a} onError`, { err });
|
|
48356
48383
|
if (err.UI) {
|
|
48357
48384
|
if (this.err) {
|
|
48358
48385
|
this.unmount();
|
|
@@ -48620,7 +48647,7 @@ const arrowLeftIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fil
|
|
|
48620
48647
|
|
|
48621
48648
|
const checkIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M20.5793 4.19296C20.1216 3.86696 19.4777 3.96396 19.1424 4.40896L9.37295 17.3809L4.81634 12.107C4.45222 11.683 3.80218 11.6289 3.36709 11.9839C2.932 12.3389 2.87543 12.97 3.2416 13.393L8.64165 19.643C8.83708 19.869 9.12506 20 9.42849 20C9.4398 20 9.45114 20 9.46246 19.999C9.77926 19.989 10.0724 19.838 10.2586 19.59L20.8015 5.58996C21.1368 5.14496 21.0371 4.51896 20.5793 4.19296Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
48622
48649
|
|
|
48623
|
-
const T$
|
|
48650
|
+
const T$9 = 'plugins.level_selector';
|
|
48624
48651
|
const VERSION$4 = '2.19.4';
|
|
48625
48652
|
/**
|
|
48626
48653
|
* A {@link MediaControl | media control} plugin that provides a UI to control the quality level of the playback.
|
|
@@ -48697,9 +48724,18 @@ class LevelSelector extends UICorePlugin {
|
|
|
48697
48724
|
* @internal
|
|
48698
48725
|
*/
|
|
48699
48726
|
bindEvents() {
|
|
48727
|
+
this.listenTo(this.core, Events$1.CORE_READY, this.onCoreReady);
|
|
48728
|
+
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.bindPlaybackEvents);
|
|
48729
|
+
}
|
|
48730
|
+
onCoreReady() {
|
|
48731
|
+
trace(`${T$9} onCoreReady`);
|
|
48700
48732
|
const mediaControl = this.core.getPlugin('media_control');
|
|
48701
48733
|
assert(mediaControl, 'media_control plugin is required');
|
|
48702
|
-
this.listenTo(
|
|
48734
|
+
this.listenTo(mediaControl, MediaControlEvents.MEDIACONTROL_GEAR_RENDERED, this.onGearRendered);
|
|
48735
|
+
}
|
|
48736
|
+
onGearRendered() {
|
|
48737
|
+
trace(`${T$9} onGearRendered`);
|
|
48738
|
+
this.deferRender();
|
|
48703
48739
|
}
|
|
48704
48740
|
bindPlaybackEvents() {
|
|
48705
48741
|
this.removeAuto = false;
|
|
@@ -48719,9 +48755,9 @@ class LevelSelector extends UICorePlugin {
|
|
|
48719
48755
|
}
|
|
48720
48756
|
}
|
|
48721
48757
|
onStop() {
|
|
48722
|
-
trace(`${T$
|
|
48758
|
+
trace(`${T$9} onStop`);
|
|
48723
48759
|
this.listenToOnce(this.core.activePlayback, Events$1.PLAYBACK_PLAY, () => {
|
|
48724
|
-
trace(`${T$
|
|
48760
|
+
trace(`${T$9} on PLAYBACK_PLAY after stop`, {
|
|
48725
48761
|
selectedLevelId: this.selectedLevelId,
|
|
48726
48762
|
});
|
|
48727
48763
|
if (this.core.activePlayback.getPlaybackType() === 'live') {
|
|
@@ -48764,7 +48800,7 @@ class LevelSelector extends UICorePlugin {
|
|
|
48764
48800
|
this.$el.html(html);
|
|
48765
48801
|
const gear = this.core.getPlugin('bottom_gear');
|
|
48766
48802
|
if (!gear) {
|
|
48767
|
-
trace(`${T$
|
|
48803
|
+
trace(`${T$9} renderButton: bottom_gear plugin not found`);
|
|
48768
48804
|
}
|
|
48769
48805
|
gear?.getElement('quality')?.html(this.el);
|
|
48770
48806
|
}
|
|
@@ -48780,7 +48816,7 @@ class LevelSelector extends UICorePlugin {
|
|
|
48780
48816
|
});
|
|
48781
48817
|
this.$el.html(html);
|
|
48782
48818
|
const gear = this.core.getPlugin('bottom_gear');
|
|
48783
|
-
trace(`${T$
|
|
48819
|
+
trace(`${T$9} renderDropdown: bottom_gear plugin not found`);
|
|
48784
48820
|
gear?.setContent(this.el);
|
|
48785
48821
|
}
|
|
48786
48822
|
get maxLevel() {
|
|
@@ -48821,13 +48857,14 @@ class LevelSelector extends UICorePlugin {
|
|
|
48821
48857
|
return false;
|
|
48822
48858
|
}
|
|
48823
48859
|
goBack() {
|
|
48824
|
-
trace(`${T$
|
|
48860
|
+
trace(`${T$9} goBack`);
|
|
48825
48861
|
this.isOpen = false;
|
|
48826
|
-
|
|
48827
|
-
|
|
48862
|
+
setTimeout(() => {
|
|
48863
|
+
this.core.getPlugin('bottom_gear').refresh();
|
|
48864
|
+
}, 0);
|
|
48828
48865
|
}
|
|
48829
48866
|
setLevel(index) {
|
|
48830
|
-
trace(`${T$
|
|
48867
|
+
trace(`${T$9} setIndexLevel`, { index });
|
|
48831
48868
|
this.selectedLevelId = index;
|
|
48832
48869
|
if (!this.core.activePlayback) {
|
|
48833
48870
|
return;
|
|
@@ -48845,7 +48882,7 @@ class LevelSelector extends UICorePlugin {
|
|
|
48845
48882
|
this.deferRender();
|
|
48846
48883
|
}
|
|
48847
48884
|
onShowLevelSelectMenu() {
|
|
48848
|
-
trace(`${T$
|
|
48885
|
+
trace(`${T$9} onShowLevelSelectMenu`);
|
|
48849
48886
|
this.isOpen = true;
|
|
48850
48887
|
this.renderDropdown();
|
|
48851
48888
|
this.highlightCurrentLevel();
|
|
@@ -48881,11 +48918,11 @@ class LevelSelector extends UICorePlugin {
|
|
|
48881
48918
|
return this.levelLabels[index] ?? formatLevelLabel(this.levels[index]);
|
|
48882
48919
|
}
|
|
48883
48920
|
updateCurrentLevel(info) {
|
|
48884
|
-
trace(`${T$
|
|
48921
|
+
trace(`${T$9} updateCurrentLevel`, { info });
|
|
48885
48922
|
this.highlightCurrentLevel();
|
|
48886
48923
|
}
|
|
48887
48924
|
highlightCurrentLevel() {
|
|
48888
|
-
trace(`${T$
|
|
48925
|
+
trace(`${T$9} highlightCurrentLevel`, {
|
|
48889
48926
|
selectedLevelId: this.selectedLevelId,
|
|
48890
48927
|
});
|
|
48891
48928
|
this.allLevelElements().removeClass('current');
|
|
@@ -49126,7 +49163,7 @@ class Logo extends UIContainerPlugin {
|
|
|
49126
49163
|
}
|
|
49127
49164
|
}
|
|
49128
49165
|
|
|
49129
|
-
const pluginHtml$
|
|
49166
|
+
const pluginHtml$3 = "<button data-multicamera-button class='gcore-skin-button-color'>\n <span class=\"multicamera-icon\"></span>\n</button>\n\n<ul class=\"gcore-skin-bg-color\">\n <% for (var i = 0; i < streams.length; i++) { %>\n <% if(!streams[i].live && multisources_mode === 'only_live') { %>\n <% continue; %>\n <% } %>\n <li>\n <div class=\"multicamera-item\" data-multicamera-selector-live=\"<%= streams[i].live %>\"\n data-multicamera-selector-select=\"<%= streams[i].id %>\">\n <div class=\"multicamera-screenshot\">\n <% if (streams[i].screenshot) { %>\n <img src=\"<%= streams[i].screenshot %>\" alt=\"<%= streams[i].title %>\"/>\n <% } %>\n </div>\n <div class=\"multicamera-text gcore-skin-text-color\">\n <% if (streams[i].title) { %>\n <div class=\"multicamera-title gcore-skin-text-color\"><%= streams[i].title %></div>\n <% } %>\n <% if (streams[i].description) { %>\n <div class=\"multicamera-description gcore-skin-text-color\"><%= streams[i].description %></div>\n <% } %>\n </div>\n </div>\n </li>\n <% } %>\n</ul>\n";
|
|
49130
49167
|
|
|
49131
49168
|
const streamsIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 24 20\">\n <path fill=\"#FFF\" fill-rule=\"nonzero\" d=\"M24 1.5v13a1.5 1.5 0 0 1-1.5 1.5h-1a.5.5 0 0 1-.5-.5v-10A2.5 2.5 0 0 0 18.5 3h-14a.5.5 0 0 1-.5-.5v-1A1.5 1.5 0 0 1 5.5 0h17A1.5 1.5 0 0 1 24 1.5M12.724 12.447l-5 2.5a.505.505 0 0 1-.487-.021A.503.503 0 0 1 7 14.5v-5c0-.173.09-.334.237-.426a.505.505 0 0 1 .487-.021l5 2.5a.5.5 0 0 1 0 .894M18.5 4h-17C.673 4 0 4.673 0 5.5v13c0 .827.673 1.5 1.5 1.5h17c.827 0 1.5-.673 1.5-1.5v-13c0-.827-.673-1.5-1.5-1.5\"/>\n</svg>\n";
|
|
49132
49169
|
|
|
@@ -49135,7 +49172,7 @@ const streamsMomentoIcon = "<svg id=\"Слой_1\" data-name=\"Слой 1\" xmln
|
|
|
49135
49172
|
const streamsWhiteNightsIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"50\" height=\"50\" viewBox=\"0 0 50 50\">\n <defs>\n <clipPath id=\"clip-Icon\">\n <rect width=\"50\" height=\"50\"/>\n </clipPath>\n </defs>\n <g id=\"Icon\" clip-path=\"url(#clip-Icon)\">\n <g id=\"icon2\" transform=\"translate(-0.041 0)\">\n <path id=\"Контур_77\" data-name=\"Контур 77\" d=\"M6.493,13v8.266h6.275V19.74H8.31V17.714h4.006V16.3H8.31V14.53h4.365V13Zm7.5,0v8.266h1.7V15.732h.023l3.438,5.534h1.818V13h-1.7v5.545h-.023L15.8,13Z\" fill=\"#fff\"/>\n <path id=\"Контур_76\" data-name=\"Контур 76\" d=\"M29.949,29.1V26.774H31.94a1.4,1.4,0,0,1,.938.272,1.1,1.1,0,0,1,.313.874,1.155,1.155,0,0,1-.313.9,1.375,1.375,0,0,1-.938.278ZM28.132,25.36v8.266h1.817V30.4h1.818a1.353,1.353,0,0,1,.984.3,1.637,1.637,0,0,1,.394.949c.046.333.079.681.1,1.042a3.2,3.2,0,0,0,.185.938h1.819a1.218,1.218,0,0,1-.191-.423,3.611,3.611,0,0,1-.093-.527c-.019-.185-.033-.367-.041-.544s-.016-.332-.023-.463a5.052,5.052,0,0,0-.087-.625,2.109,2.109,0,0,0-.2-.573,1.586,1.586,0,0,0-.359-.451,1.414,1.414,0,0,0-.556-.284v-.023a1.926,1.926,0,0,0,1-.81,2.494,2.494,0,0,0,.307-1.262,2.308,2.308,0,0,0-.165-.88,2.128,2.128,0,0,0-.486-.724,2.3,2.3,0,0,0-.764-.492,2.67,2.67,0,0,0-1-.179ZM43.506,30.5V25.36H41.689V30.5a2.065,2.065,0,0,1-.37,1.36,1.7,1.7,0,0,1-1.343.434,2.086,2.086,0,0,1-.886-.156,1.283,1.283,0,0,1-.758-.978,3.748,3.748,0,0,1-.058-.66V25.36H36.456V30.5a3.16,3.16,0,0,0,.92,2.5,3.807,3.807,0,0,0,2.6.81,3.82,3.82,0,0,0,2.593-.816,3.132,3.132,0,0,0,.937-2.492Z\" fill=\"#fff\"/>\n <path id=\"Контур_80\" data-name=\"Контур 80\" d=\"M22.646,31.2H4.689a4.505,4.505,0,0,1-4.5-4.5V8.5A4.505,4.505,0,0,1,4.689,4h18.2a4.505,4.505,0,0,1,4.5,4.5v8.445l-.893.1a3.184,3.184,0,0,0-2.846,3.177V30.5l-.465.7ZM4.689,6a2.5,2.5,0,0,0-2.5,2.5V26.7a2.5,2.5,0,0,0,2.5,2.5H21.65V20.22a5.18,5.18,0,0,1,3.739-4.992V8.5a2.5,2.5,0,0,0-2.5-2.5Z\" fill=\"#fff\"/>\n <path id=\"Контур_81\" data-name=\"Контур 81\" d=\"M30.127,47.884a1,1,0,0,1-1-1V43.267H26.846a5.206,5.206,0,0,1-5.2-5.2V20.222a5.206,5.206,0,0,1,5.2-5.2H44.692a5.206,5.206,0,0,1,5.2,5.2V38.068a5.206,5.206,0,0,1-5.2,5.2H35.058l-4.216,4.316A1,1,0,0,1,30.127,47.884ZM26.846,17.022a3.2,3.2,0,0,0-3.2,3.2V38.067a3.2,3.2,0,0,0,3.2,3.2h3.281a1,1,0,0,1,1,1v2.162l2.8-2.86a1,1,0,0,1,.715-.3H44.692a3.2,3.2,0,0,0,3.2-3.2V20.222a3.2,3.2,0,0,0-3.2-3.2Z\" fill=\"#fff\"/>\n </g>\n </g>\n</svg>\n";
|
|
49136
49173
|
|
|
49137
49174
|
const VERSION$3 = '0.0.1';
|
|
49138
|
-
const T$
|
|
49175
|
+
const T$8 = 'plugins.multicamera';
|
|
49139
49176
|
/**
|
|
49140
49177
|
* The plugin adds support for loading multiple streams and switching between them using the media control UI.
|
|
49141
49178
|
* @beta
|
|
@@ -49156,7 +49193,7 @@ class MultiCamera extends UICorePlugin {
|
|
|
49156
49193
|
return VERSION$3;
|
|
49157
49194
|
}
|
|
49158
49195
|
get template() {
|
|
49159
|
-
return tmpl(pluginHtml$
|
|
49196
|
+
return tmpl(pluginHtml$3);
|
|
49160
49197
|
}
|
|
49161
49198
|
get attributes() {
|
|
49162
49199
|
return {
|
|
@@ -49281,7 +49318,7 @@ class MultiCamera extends UICorePlugin {
|
|
|
49281
49318
|
}
|
|
49282
49319
|
onCameraSelect(event) {
|
|
49283
49320
|
const value = event.currentTarget.dataset.multicameraSelectorSelect;
|
|
49284
|
-
trace(`${T$
|
|
49321
|
+
trace(`${T$8} onCameraSelect`, { value });
|
|
49285
49322
|
if (value !== undefined) {
|
|
49286
49323
|
this.changeById(parseInt(value, 10));
|
|
49287
49324
|
}
|
|
@@ -49407,13 +49444,13 @@ class MultiCamera extends UICorePlugin {
|
|
|
49407
49444
|
}
|
|
49408
49445
|
}
|
|
49409
49446
|
changeById(id) {
|
|
49410
|
-
trace(`${T$
|
|
49447
|
+
trace(`${T$8} changeById`, { id });
|
|
49411
49448
|
queueMicrotask(() => {
|
|
49412
49449
|
const playbackOptions = this.core.options.playback || {};
|
|
49413
49450
|
// TODO figure out what this does
|
|
49414
49451
|
playbackOptions.recycleVideo = Browser.isMobile;
|
|
49415
49452
|
this.currentCamera = this.findElementById(id) ?? null;
|
|
49416
|
-
trace(`${T$
|
|
49453
|
+
trace(`${T$8} changeById`, { id, currentCamera: this.currentCamera, multicamera: this.multicamera });
|
|
49417
49454
|
if (!this.currentCamera) {
|
|
49418
49455
|
return;
|
|
49419
49456
|
}
|
|
@@ -49430,7 +49467,7 @@ class MultiCamera extends UICorePlugin {
|
|
|
49430
49467
|
// TODO remove?
|
|
49431
49468
|
// for html5 playback:
|
|
49432
49469
|
this.options.dvrEnabled = this.currentCamera.dvr;
|
|
49433
|
-
trace(`${T$
|
|
49470
|
+
trace(`${T$8} changeById`, { currentCamera: this.currentCamera });
|
|
49434
49471
|
// TODO
|
|
49435
49472
|
this.core.configure({
|
|
49436
49473
|
playback: playbackOptions,
|
|
@@ -49488,7 +49525,7 @@ const pipIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"no
|
|
|
49488
49525
|
const buttonHtml$1 = "<button class=\"gplayer-lite-btn gcore-skin-button-color\">\n <span><%= pipIcon %></span>\n</button>\n";
|
|
49489
49526
|
|
|
49490
49527
|
const VERSION$2 = '0.0.1';
|
|
49491
|
-
const T$
|
|
49528
|
+
const T$7 = `plugins.pip`;
|
|
49492
49529
|
/**
|
|
49493
49530
|
* Enables picture in picture mode.
|
|
49494
49531
|
* @beta
|
|
@@ -49536,7 +49573,7 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49536
49573
|
this.listenTo(this.core.mediaControl, Events$1.MEDIACONTROL_RENDERED, this.render);
|
|
49537
49574
|
}
|
|
49538
49575
|
isPiPSupported() {
|
|
49539
|
-
trace(`${T$
|
|
49576
|
+
trace(`${T$7} isPiPSupported`, {
|
|
49540
49577
|
pictureInPictureEnabled: document.pictureInPictureEnabled,
|
|
49541
49578
|
requestPictureInPicture: HTMLVideoElement.prototype.requestPictureInPicture,
|
|
49542
49579
|
});
|
|
@@ -49558,7 +49595,7 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49558
49595
|
return this;
|
|
49559
49596
|
}
|
|
49560
49597
|
togglePictureInPicture() {
|
|
49561
|
-
trace(`${T$
|
|
49598
|
+
trace(`${T$7} togglePictureInPicture`);
|
|
49562
49599
|
if (this.videoElement !== document.pictureInPictureElement) {
|
|
49563
49600
|
this.requestPictureInPicture();
|
|
49564
49601
|
}
|
|
@@ -49567,19 +49604,17 @@ class PictureInPicture extends UICorePlugin {
|
|
|
49567
49604
|
}
|
|
49568
49605
|
}
|
|
49569
49606
|
requestPictureInPicture() {
|
|
49570
|
-
trace(`${T$
|
|
49607
|
+
trace(`${T$7} requestPictureInPicture`, {
|
|
49571
49608
|
videoElement: !!this.videoElement,
|
|
49572
49609
|
});
|
|
49573
49610
|
this.videoElement.requestPictureInPicture();
|
|
49574
49611
|
}
|
|
49575
49612
|
exitPictureInPicture() {
|
|
49576
|
-
trace(`${T$
|
|
49613
|
+
trace(`${T$7} exitPictureInPicture`);
|
|
49577
49614
|
document.exitPictureInPicture();
|
|
49578
49615
|
}
|
|
49579
49616
|
}
|
|
49580
49617
|
|
|
49581
|
-
const pluginHtml$3 = "<button class=\"gcore-skin-button-color\" data-playback-rate-button>\n <span><%= title %></span>\n</button>\n<ul>\n <% for (var i = 0; i < playbackRates.length; i++) { %>\n <li data-playback-rate-select=\"<%= playbackRates[i].value %>\"><a\n data-playback-rate-a=\"<%= playbackRates[i].value %>\" href=\"#\"><%= playbackRates[i].label %></a></li>\n <% }; %>\n</ul>\n";
|
|
49582
|
-
|
|
49583
49618
|
const buttonHtml = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option'>\n <span class=\"gear-option_speed-icon\"><%= speedIcon %></span>\n <span>Playback speed</span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n <span class='gear-option_value'><%= title %></span>\n</button>\n";
|
|
49584
49619
|
|
|
49585
49620
|
const listHtml = "<button class=\"gplayer-lite-btn go-back gcore-skin-text-color\">\n <span class=\"arrow-left-icon\"><%= arrowLeftIcon %></span>\n Playback speed\n</button>\n<ul class=\"gear-sub-menu\">\n <% for (var i = playbackRates.length - 1; i >= 0; i--) { %>\n <li>\n <a href=\"#\" class='gear-sub-menu_btn gcore-skin-text-color' data-rate=\"<%= playbackRates[i].value %>\">\n <span class=\"check-icon\"><%= checkIcon %></span>\n <%= playbackRates[i].label %>\n </a>\n </li>\n <% } %>\n</ul>\n";
|
|
@@ -49596,10 +49631,9 @@ const DEFAULT_PLAYBACK_RATES = [
|
|
|
49596
49631
|
{ value: '2.0', label: '2x' }
|
|
49597
49632
|
];
|
|
49598
49633
|
const DEFAULT_PLAYBACK_RATE = '1.0';
|
|
49599
|
-
|
|
49600
|
-
const MEDIACONTROL_PLAYBACKRATE = 'playbackRate';
|
|
49634
|
+
const T$6 = 'plugins.playback_rate';
|
|
49601
49635
|
/**
|
|
49602
|
-
*
|
|
49636
|
+
* PLUGIN that allows changing the playback speed of the video.
|
|
49603
49637
|
* @beta
|
|
49604
49638
|
*
|
|
49605
49639
|
* @remarks
|
|
@@ -49609,12 +49643,13 @@ const MEDIACONTROL_PLAYBACKRATE = 'playbackRate';
|
|
|
49609
49643
|
*
|
|
49610
49644
|
* - {@link BottomGear | bottom_gear}
|
|
49611
49645
|
*
|
|
49612
|
-
* It renders a button in the gear menu, which opens a dropdown with the
|
|
49646
|
+
* It renders a button in the gear menu, which opens a dropdown with the options to change the playback rate.
|
|
49613
49647
|
*/
|
|
49614
49648
|
class PlaybackRate extends UICorePlugin {
|
|
49615
|
-
currentPlayback = null;
|
|
49616
49649
|
playbackRates = DEFAULT_PLAYBACK_RATES;
|
|
49650
|
+
// Saved when an ad starts to restore after it finishes
|
|
49617
49651
|
prevSelectedRate;
|
|
49652
|
+
rendered = false;
|
|
49618
49653
|
selectedRate = DEFAULT_PLAYBACK_RATE;
|
|
49619
49654
|
/**
|
|
49620
49655
|
* @internal
|
|
@@ -49628,9 +49663,13 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49628
49663
|
get supportedVersion() {
|
|
49629
49664
|
return { min: CLAPPR_VERSION };
|
|
49630
49665
|
}
|
|
49631
|
-
static template = tmpl(pluginHtml$3);
|
|
49632
49666
|
static buttonTemplate = tmpl(buttonHtml);
|
|
49633
49667
|
static listTemplate = tmpl(listHtml);
|
|
49668
|
+
constructor(core) {
|
|
49669
|
+
super(core);
|
|
49670
|
+
this.playbackRates = core.options.playbackRate?.options || DEFAULT_PLAYBACK_RATES;
|
|
49671
|
+
this.selectedRate = core.options.playbackRate?.defaultValue || DEFAULT_PLAYBACK_RATE;
|
|
49672
|
+
}
|
|
49634
49673
|
/**
|
|
49635
49674
|
* @internal
|
|
49636
49675
|
*/
|
|
@@ -49654,27 +49693,36 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49654
49693
|
* @internal
|
|
49655
49694
|
*/
|
|
49656
49695
|
bindEvents() {
|
|
49657
|
-
this.listenTo(this.core,
|
|
49658
|
-
|
|
49659
|
-
this.listenTo(this.core.mediaControl, Events$1.MEDIACONTROL_CONTAINERCHANGED, this.reload);
|
|
49660
|
-
this.listenTo(this.core.mediaControl, MEDIACONTROL_PLAYBACKRATE, this.updatePlaybackRate);
|
|
49661
|
-
this.listenTo(this.core, 'core:advertisement:start', this.onStartAd);
|
|
49662
|
-
this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd);
|
|
49663
|
-
if (this.core.activeContainer) {
|
|
49664
|
-
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_BUFFERFULL, this.updateLiveStatus);
|
|
49665
|
-
}
|
|
49666
|
-
if (this.currentPlayback) {
|
|
49667
|
-
this.listenTo(this.currentPlayback, Events$1.PLAYBACK_STOP, this.onStop);
|
|
49668
|
-
this.listenTo(this.currentPlayback, Events$1.PLAYBACK_PLAY, this.onPlay);
|
|
49669
|
-
// TODO import dash playback events
|
|
49670
|
-
this.listenTo(this.currentPlayback, 'dash:playback-rate-changed', this.onDashRateChange);
|
|
49671
|
-
}
|
|
49696
|
+
this.listenTo(this.core, Events$1.CORE_READY, this.onCoreReady);
|
|
49697
|
+
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChange);
|
|
49672
49698
|
}
|
|
49673
|
-
|
|
49674
|
-
this.
|
|
49675
|
-
|
|
49676
|
-
this.
|
|
49677
|
-
|
|
49699
|
+
onCoreReady() {
|
|
49700
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
49701
|
+
assert(mediaControl, 'media_control plugin is required');
|
|
49702
|
+
const gear = this.core.getPlugin('bottom_gear');
|
|
49703
|
+
assert(gear, 'bottom_gear plugin is required');
|
|
49704
|
+
this.listenTo(mediaControl, MediaControlEvents.MEDIACONTROL_GEAR_RENDERED, this.onGearRendered);
|
|
49705
|
+
}
|
|
49706
|
+
onActiveContainerChange() {
|
|
49707
|
+
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_STOP, this.onStop);
|
|
49708
|
+
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_PLAY, this.onPlay);
|
|
49709
|
+
this.listenTo(this.core.activePlayback, PlaybackEvents.PLAYBACK_RATE_CHANGED, this.onPlaybackRateChange);
|
|
49710
|
+
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAYBACKDVRSTATECHANGED, this.onDvrStateChanged);
|
|
49711
|
+
}
|
|
49712
|
+
onGearRendered() {
|
|
49713
|
+
trace(`${T$6} onGearRendered`, {
|
|
49714
|
+
rendered: this.rendered,
|
|
49715
|
+
});
|
|
49716
|
+
this.rendered = false;
|
|
49717
|
+
this.render();
|
|
49718
|
+
}
|
|
49719
|
+
onDvrStateChanged(dvrEnabled) {
|
|
49720
|
+
trace(`${T$6} onDvrStateChanged`, {
|
|
49721
|
+
dvrEnabled,
|
|
49722
|
+
});
|
|
49723
|
+
if (dvrEnabled) {
|
|
49724
|
+
this.render();
|
|
49725
|
+
}
|
|
49678
49726
|
}
|
|
49679
49727
|
allRateElements() {
|
|
49680
49728
|
return this.$('ul.gear-sub-menu li');
|
|
@@ -49682,68 +49730,53 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49682
49730
|
rateElement(rate = "1") {
|
|
49683
49731
|
return this.$(`ul.gear-sub-menu a[data-rate="${rate}"]`).parent();
|
|
49684
49732
|
}
|
|
49685
|
-
|
|
49686
|
-
|
|
49687
|
-
|
|
49688
|
-
|
|
49689
|
-
|
|
49690
|
-
|
|
49691
|
-
|
|
49692
|
-
|
|
49693
|
-
this.core.mediaControl.$el.addClass('dvr');
|
|
49694
|
-
return;
|
|
49695
|
-
}
|
|
49696
|
-
this.updatePlaybackRate(DEFAULT_PLAYBACK_RATE);
|
|
49697
|
-
this.core.mediaControl.$playbackRate.addClass('playbackrate-enable');
|
|
49698
|
-
this.core.mediaControl.$el.removeClass('dvr');
|
|
49733
|
+
onPlaybackRateChange(playbackRate) {
|
|
49734
|
+
const selectedRate = parseInt(this.selectedRate, 10);
|
|
49735
|
+
if (playbackRate !== selectedRate) {
|
|
49736
|
+
trace(`${T$6} onPlaybackRateChange setting target rate`, {
|
|
49737
|
+
playbackRate,
|
|
49738
|
+
selectedRate,
|
|
49739
|
+
});
|
|
49740
|
+
this.core.activePlayback?.setPlaybackRate(selectedRate);
|
|
49699
49741
|
}
|
|
49700
49742
|
}
|
|
49701
|
-
reload() {
|
|
49702
|
-
this.unBindEvents();
|
|
49703
|
-
this.bindEvents();
|
|
49704
|
-
}
|
|
49705
49743
|
shouldRender() {
|
|
49706
49744
|
if (!this.core.activeContainer) {
|
|
49707
49745
|
return false;
|
|
49708
49746
|
}
|
|
49709
|
-
this.
|
|
49710
|
-
|
|
49747
|
+
if (this.core.getPlaybackType() === Playback.LIVE && !this.core.activePlayback.dvrEnabled) {
|
|
49748
|
+
return false;
|
|
49749
|
+
}
|
|
49750
|
+
return 'setPlaybackRate' in this.core.activePlayback;
|
|
49711
49751
|
}
|
|
49712
49752
|
/**
|
|
49713
49753
|
* @internal
|
|
49714
49754
|
*/
|
|
49715
49755
|
render() {
|
|
49716
|
-
|
|
49717
|
-
|
|
49756
|
+
trace(`${T$6} render`, {
|
|
49757
|
+
rendered: this.rendered,
|
|
49758
|
+
shouldRender: this.shouldRender(),
|
|
49759
|
+
});
|
|
49760
|
+
if (!this.shouldRender()) {
|
|
49718
49761
|
return this;
|
|
49719
49762
|
}
|
|
49720
|
-
|
|
49721
|
-
|
|
49722
|
-
this.playbackRates = cfg.options || DEFAULT_PLAYBACK_RATES;
|
|
49723
|
-
}
|
|
49724
|
-
if (!this.selectedRate) {
|
|
49725
|
-
this.selectedRate = cfg.defaultValue || DEFAULT_PLAYBACK_RATE;
|
|
49726
|
-
}
|
|
49727
|
-
if (this.shouldRender()) {
|
|
49728
|
-
const button = PlaybackRate.buttonTemplate({
|
|
49729
|
-
title: this.getTitle(),
|
|
49730
|
-
speedIcon,
|
|
49731
|
-
arrowRightIcon,
|
|
49732
|
-
});
|
|
49733
|
-
this.$el.html(button);
|
|
49734
|
-
// if (this.core.getPlaybackType() === Playback.LIVE) {
|
|
49735
|
-
// this.core.mediaControl.$playbackRate.addClass('playbackrate-enable');
|
|
49736
|
-
// }
|
|
49737
|
-
// this.core.mediaControl.$playbackRate.append(this.el);
|
|
49738
|
-
this.core.mediaControl.$el?.find('.gear-options-list [data-rate]').html(this.el);
|
|
49739
|
-
// this.updateText();
|
|
49763
|
+
if (this.rendered) {
|
|
49764
|
+
return this;
|
|
49740
49765
|
}
|
|
49766
|
+
const button = PlaybackRate.buttonTemplate({
|
|
49767
|
+
title: this.getTitle(),
|
|
49768
|
+
speedIcon,
|
|
49769
|
+
arrowRightIcon,
|
|
49770
|
+
});
|
|
49771
|
+
this.$el.html(button);
|
|
49772
|
+
this.core.getPlugin('bottom_gear')?.getElement('rate')?.html(this.el);
|
|
49773
|
+
this.rendered = true;
|
|
49741
49774
|
return this;
|
|
49742
49775
|
}
|
|
49743
49776
|
onStartAd() {
|
|
49744
49777
|
this.prevSelectedRate = this.selectedRate;
|
|
49745
|
-
this.
|
|
49746
|
-
this.listenToOnce(this.
|
|
49778
|
+
this.resetPlaybackRate();
|
|
49779
|
+
this.listenToOnce(this.core.activePlayback, Events$1.PLAYBACK_PLAY, this.onFinishAd);
|
|
49747
49780
|
}
|
|
49748
49781
|
onFinishAd() {
|
|
49749
49782
|
if (this.prevSelectedRate) {
|
|
@@ -49751,16 +49784,16 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49751
49784
|
}
|
|
49752
49785
|
}
|
|
49753
49786
|
onPlay() {
|
|
49754
|
-
if (!this.core.
|
|
49755
|
-
|
|
49756
|
-
this.updatePlaybackRate(DEFAULT_PLAYBACK_RATE);
|
|
49757
|
-
this.core.mediaControl.$playbackRate.addClass('playbackrate-enable');
|
|
49758
|
-
}
|
|
49787
|
+
if (this.core.getPlaybackType() === Playback.LIVE && !this.core.activePlayback.dvrEnabled) {
|
|
49788
|
+
this.resetPlaybackRate();
|
|
49759
49789
|
}
|
|
49760
49790
|
else {
|
|
49761
49791
|
this.setSelectedRate(this.selectedRate);
|
|
49762
49792
|
}
|
|
49763
49793
|
}
|
|
49794
|
+
resetPlaybackRate() {
|
|
49795
|
+
this.setSelectedRate(DEFAULT_PLAYBACK_RATE);
|
|
49796
|
+
}
|
|
49764
49797
|
onStop() {
|
|
49765
49798
|
}
|
|
49766
49799
|
onRateSelect(event) {
|
|
@@ -49778,30 +49811,21 @@ class PlaybackRate extends UICorePlugin {
|
|
|
49778
49811
|
arrowLeftIcon,
|
|
49779
49812
|
checkIcon,
|
|
49780
49813
|
}));
|
|
49781
|
-
this.core.
|
|
49814
|
+
this.core.getPlugin('bottom_gear')?.setContent(this.el);
|
|
49782
49815
|
this.highlightCurrentRate();
|
|
49783
49816
|
}
|
|
49784
49817
|
goBack() {
|
|
49785
|
-
|
|
49786
|
-
|
|
49787
|
-
|
|
49788
|
-
this.setSelectedRate(rate);
|
|
49818
|
+
setTimeout(() => {
|
|
49819
|
+
this.core.getPlugin('bottom_gear').refresh();
|
|
49820
|
+
}, 0);
|
|
49789
49821
|
}
|
|
49790
49822
|
setSelectedRate(rate) {
|
|
49791
49823
|
// Set <video playbackRate="..."
|
|
49792
|
-
this.core
|
|
49824
|
+
this.core.activePlayback?.setPlaybackRate(rate);
|
|
49793
49825
|
this.selectedRate = rate;
|
|
49794
|
-
// TODO
|
|
49795
|
-
// Player.player.trigger('playbackRateChanged', rate);
|
|
49796
49826
|
}
|
|
49797
49827
|
getTitle() {
|
|
49798
|
-
|
|
49799
|
-
this.playbackRates.forEach((r) => {
|
|
49800
|
-
if (r.value === this.selectedRate) {
|
|
49801
|
-
title = r.label;
|
|
49802
|
-
}
|
|
49803
|
-
});
|
|
49804
|
-
return title;
|
|
49828
|
+
return this.playbackRates.find((r) => r.value === this.selectedRate)?.label || this.selectedRate;
|
|
49805
49829
|
}
|
|
49806
49830
|
highlightCurrentRate() {
|
|
49807
49831
|
this.allRateElements().removeClass('current');
|
|
@@ -52044,4 +52068,4 @@ class VolumeFade extends UICorePlugin {
|
|
|
52044
52068
|
}
|
|
52045
52069
|
}
|
|
52046
52070
|
|
|
52047
|
-
export { AudioSelector, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ContextMenu, DvrControls, ErrorScreen, Favicon,
|
|
52071
|
+
export { AudioSelector, BigMuteButton, BottomGear, ClapprNerdStats, ClapprStats, ClickToPause, ClipsPlugin, ContextMenu, DvrControls, ErrorScreen, Favicon, GoogleAnalytics, Kibo, LevelSelector, LogTracer, Logger, Logo, MediaControl, MediaControlEvents, MultiCamera, PictureInPicture, PlaybackErrorCode, PlaybackRate, Player, PlayerEvent, Poster, SeekTime, SentryTracer, Share, SkipTime, SourceController, SpinnerEvents, SpinnerThreeBounce, Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents, reportError, setTracer, trace, version };
|