@gcorevideo/player 2.28.28 → 2.28.30
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 +128 -62
- package/dist/index.css +211 -211
- package/dist/index.embed.js +270 -190
- package/dist/index.js +241 -168
- package/lib/playback/BasePlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.d.ts +22 -3
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/dash-playback/DashPlayback.js +50 -5
- package/lib/playback/hls-playback/HlsPlayback.d.ts +32 -6
- package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
- package/lib/playback/hls-playback/HlsPlayback.js +78 -57
- package/lib/playback.types.d.ts +6 -0
- package/lib/playback.types.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.d.ts +5 -6
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +40 -38
- package/lib/plugins/subtitles/ClosedCaptions.d.ts +5 -0
- package/lib/plugins/subtitles/ClosedCaptions.d.ts.map +1 -1
- package/lib/plugins/subtitles/ClosedCaptions.js +56 -54
- package/lib/plugins/utils/mobile.d.ts +2 -0
- package/lib/plugins/utils/mobile.d.ts.map +1 -0
- package/lib/plugins/utils/mobile.js +4 -0
- package/lib/testUtils.d.ts +3 -0
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +3 -0
- package/package.json +1 -1
- package/src/playback/BasePlayback.ts +2 -1
- package/src/playback/dash-playback/DashPlayback.ts +68 -13
- package/src/playback/hls-playback/HlsPlayback.ts +89 -80
- package/src/playback.types.ts +7 -0
- package/src/plugins/media-control/MediaControl.ts +45 -43
- package/src/plugins/media-control/__tests__/MediaControl.test.ts +63 -35
- package/src/plugins/multi-camera/MultiCamera.ts +5 -5
- package/src/plugins/subtitles/ClosedCaptions.ts +64 -57
- package/src/plugins/subtitles/__tests__/ClosedCaptions.test.ts +195 -196
- package/src/plugins/subtitles/__tests__/__snapshots__/ClosedCaptions.test.ts.snap +13 -1
- package/src/plugins/utils/mobile.ts +5 -0
- package/src/testUtils.ts +3 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/index.embed.js
CHANGED
|
@@ -12692,6 +12692,7 @@ var PlaybackEvents;
|
|
|
12692
12692
|
// https://github.com/clappr/clappr/blob/8752995ea439321ac7ca3cd35e8c64de7a3c3d17/LICENSE
|
|
12693
12693
|
const AUTO$1 = -1;
|
|
12694
12694
|
const { now: now$2 } = Utils;
|
|
12695
|
+
const T$8 = 'playback.dash';
|
|
12695
12696
|
class DashPlayback extends BasePlayback {
|
|
12696
12697
|
_levels = [];
|
|
12697
12698
|
_currentLevel = AUTO$1;
|
|
@@ -12728,6 +12729,8 @@ class DashPlayback extends BasePlayback {
|
|
|
12728
12729
|
startChangeQuality = false;
|
|
12729
12730
|
manifestInfo = null;
|
|
12730
12731
|
_timeUpdateTimer = null;
|
|
12732
|
+
oncueenter = null;
|
|
12733
|
+
oncueexit = null;
|
|
12731
12734
|
get name() {
|
|
12732
12735
|
return 'dash';
|
|
12733
12736
|
}
|
|
@@ -12770,6 +12773,7 @@ class DashPlayback extends BasePlayback {
|
|
|
12770
12773
|
}
|
|
12771
12774
|
}
|
|
12772
12775
|
get _startTime() {
|
|
12776
|
+
// TODO review
|
|
12773
12777
|
if (this._playbackType === Playback.LIVE &&
|
|
12774
12778
|
this._playlistType !== 'EVENT') {
|
|
12775
12779
|
return this._extrapolatedStartTime;
|
|
@@ -12824,12 +12828,12 @@ class DashPlayback extends BasePlayback {
|
|
|
12824
12828
|
streaming: {
|
|
12825
12829
|
text: {
|
|
12826
12830
|
defaultEnabled: false,
|
|
12831
|
+
dispatchForManualRendering: true,
|
|
12827
12832
|
},
|
|
12828
12833
|
},
|
|
12829
12834
|
}, this.options.dash);
|
|
12830
12835
|
this._dash.updateSettings(settings);
|
|
12831
12836
|
}
|
|
12832
|
-
assert.ok(this.el instanceof HTMLMediaElement, 'el must be an HTMLMediaElement');
|
|
12833
12837
|
this._dash.attachView(this.el);
|
|
12834
12838
|
this._dash.setAutoPlay(false);
|
|
12835
12839
|
this._dash.attachSource(this.options.src);
|
|
@@ -12873,6 +12877,19 @@ class DashPlayback extends BasePlayback {
|
|
|
12873
12877
|
this.trigger(Events$1.PLAYBACK_AUDIO_CHANGED, toClapprTrack$1(e.newMediaInfo));
|
|
12874
12878
|
}
|
|
12875
12879
|
});
|
|
12880
|
+
this._dash.on(_.events.CUE_ENTER, (e) => {
|
|
12881
|
+
this.oncueenter?.({
|
|
12882
|
+
end: e.end,
|
|
12883
|
+
id: e.id,
|
|
12884
|
+
start: e.start,
|
|
12885
|
+
text: e.text,
|
|
12886
|
+
});
|
|
12887
|
+
});
|
|
12888
|
+
this._dash.on(_.events.CUE_EXIT, (e) => {
|
|
12889
|
+
this.oncueexit?.({
|
|
12890
|
+
id: e.id,
|
|
12891
|
+
});
|
|
12892
|
+
});
|
|
12876
12893
|
}
|
|
12877
12894
|
render() {
|
|
12878
12895
|
this._ready();
|
|
@@ -12961,6 +12978,7 @@ class DashPlayback extends BasePlayback {
|
|
|
12961
12978
|
this.trigger(Events$1.PLAYBACK_SETTINGSUPDATE);
|
|
12962
12979
|
}
|
|
12963
12980
|
_onPlaybackError = (event) => {
|
|
12981
|
+
trace(`${T$8} _onPlaybackError`, { type: event.type, code: event.error.code, message: event.error.message });
|
|
12964
12982
|
};
|
|
12965
12983
|
_onDASHJSSError = (event) => {
|
|
12966
12984
|
this._stopTimeUpdateTimer();
|
|
@@ -13079,7 +13097,14 @@ class DashPlayback extends BasePlayback {
|
|
|
13079
13097
|
this._dash.off(_.events.ERROR, this._onDASHJSSError);
|
|
13080
13098
|
this._dash.off(_.events.PLAYBACK_ERROR, this._onPlaybackError);
|
|
13081
13099
|
this._dash.off(_.events.MANIFEST_LOADED, this.getDuration);
|
|
13100
|
+
const tracks = this._dash.getTracksFor('text');
|
|
13101
|
+
tracks.forEach(track => {
|
|
13102
|
+
if (track.id) {
|
|
13103
|
+
this._dash.removeExternalSubtitleById(track.id);
|
|
13104
|
+
}
|
|
13105
|
+
});
|
|
13082
13106
|
this._dash.reset();
|
|
13107
|
+
this._dash.destroy();
|
|
13083
13108
|
this._dash = null;
|
|
13084
13109
|
}
|
|
13085
13110
|
}
|
|
@@ -13173,6 +13198,31 @@ class DashPlayback extends BasePlayback {
|
|
|
13173
13198
|
super._handleTextTrackChange();
|
|
13174
13199
|
this._dash?.setTextTrack(this.closedCaptionsTrackId);
|
|
13175
13200
|
}
|
|
13201
|
+
setTextTrack(id) {
|
|
13202
|
+
this._dash?.setTextTrack(id);
|
|
13203
|
+
}
|
|
13204
|
+
/**
|
|
13205
|
+
* @override
|
|
13206
|
+
*/
|
|
13207
|
+
get closedCaptionsTracks() {
|
|
13208
|
+
const tt = this.getTextTracks();
|
|
13209
|
+
return tt;
|
|
13210
|
+
}
|
|
13211
|
+
getTextTracks() {
|
|
13212
|
+
return this._dash?.getTracksFor('text').map((t, index) => ({
|
|
13213
|
+
id: index,
|
|
13214
|
+
name: getTextTrackLabel(t) || "",
|
|
13215
|
+
track: {
|
|
13216
|
+
id: index,
|
|
13217
|
+
label: getTextTrackLabel(t) || "",
|
|
13218
|
+
language: t.lang,
|
|
13219
|
+
mode: "hidden",
|
|
13220
|
+
},
|
|
13221
|
+
})) || [];
|
|
13222
|
+
}
|
|
13223
|
+
}
|
|
13224
|
+
function getTextTrackLabel(t) {
|
|
13225
|
+
return t.labels.find((l) => !l.lang || l.lang === t.lang)?.text;
|
|
13176
13226
|
}
|
|
13177
13227
|
DashPlayback.canPlay = function (resource, mimeType) {
|
|
13178
13228
|
if (!isDashSource(resource, mimeType)) {
|
|
@@ -49827,11 +49877,9 @@ const CLAPPR_VERSION$1 = '0.13.0';
|
|
|
49827
49877
|
const { now } = Utils;
|
|
49828
49878
|
const AUTO = -1;
|
|
49829
49879
|
const DEFAULT_RECOVER_ATTEMPTS = 16;
|
|
49830
|
-
Events$1.register('PLAYBACK_FRAGMENT_CHANGED');
|
|
49831
49880
|
Events$1.register('PLAYBACK_FRAGMENT_PARSING_METADATA');
|
|
49832
|
-
const T$
|
|
49881
|
+
const T$7 = 'playback.hls';
|
|
49833
49882
|
class HlsPlayback extends BasePlayback {
|
|
49834
|
-
_ccIsSetup = false;
|
|
49835
49883
|
_ccTracksUpdated = false;
|
|
49836
49884
|
_currentFragment = null;
|
|
49837
49885
|
_currentLevel = null;
|
|
@@ -49855,6 +49903,10 @@ class HlsPlayback extends BasePlayback {
|
|
|
49855
49903
|
_recoveredDecodingError = false;
|
|
49856
49904
|
_segmentTargetDuration = null;
|
|
49857
49905
|
_timeUpdateTimer = null;
|
|
49906
|
+
oncueenter = null;
|
|
49907
|
+
oncueexit = null;
|
|
49908
|
+
cues = []; // TODO check the list size and use BST if needed
|
|
49909
|
+
currentCueId = null;
|
|
49858
49910
|
/**
|
|
49859
49911
|
* @internal
|
|
49860
49912
|
*/
|
|
@@ -50049,7 +50101,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
50049
50101
|
return;
|
|
50050
50102
|
}
|
|
50051
50103
|
this._manifestParsed = false;
|
|
50052
|
-
this._ccIsSetup = false
|
|
50104
|
+
// this._ccIsSetup = false
|
|
50053
50105
|
this._ccTracksUpdated = false;
|
|
50054
50106
|
this._setInitialState();
|
|
50055
50107
|
this._hls.destroy();
|
|
@@ -50060,6 +50112,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
50060
50112
|
maxBufferLength: 2,
|
|
50061
50113
|
maxMaxBufferLength: 4,
|
|
50062
50114
|
autoStartLoad: false,
|
|
50115
|
+
renderTextTracksNatively: false,
|
|
50063
50116
|
}, this.options.playback.hlsjsConfig);
|
|
50064
50117
|
this._hls = new Hls(config);
|
|
50065
50118
|
}
|
|
@@ -50073,7 +50126,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
50073
50126
|
if (!this._hls) {
|
|
50074
50127
|
return;
|
|
50075
50128
|
}
|
|
50076
|
-
this._hls.once(
|
|
50129
|
+
this._hls.once(Events.MEDIA_ATTACHED, () => {
|
|
50077
50130
|
assert.ok(this._hls, 'HLS.js is not initialized');
|
|
50078
50131
|
this.options.hlsPlayback.preload && this._hls.loadSource(this.options.src);
|
|
50079
50132
|
});
|
|
@@ -50088,25 +50141,29 @@ class HlsPlayback extends BasePlayback {
|
|
|
50088
50141
|
this.el.removeEventListener('playing', onPlaying);
|
|
50089
50142
|
};
|
|
50090
50143
|
this.el.addEventListener('playing', onPlaying);
|
|
50091
|
-
this._hls.on(
|
|
50144
|
+
this._hls.on(Events.MANIFEST_PARSED, () => {
|
|
50092
50145
|
this._manifestParsed = true;
|
|
50093
|
-
this.
|
|
50146
|
+
this.reload();
|
|
50094
50147
|
});
|
|
50095
|
-
this._hls.on(
|
|
50148
|
+
this._hls.on(Events.LEVEL_LOADED, (evt, data) => {
|
|
50096
50149
|
this._updatePlaybackType(evt, data);
|
|
50097
50150
|
});
|
|
50098
|
-
this._hls.on(
|
|
50099
|
-
this._hls.on(
|
|
50100
|
-
this._hls.on(
|
|
50101
|
-
this._hls.on(
|
|
50102
|
-
this._hls.on(Hls.Events.FRAG_LOADED, (evt, data) => this._onFragmentLoaded(evt, data));
|
|
50103
|
-
this._hls.on(Hls.Events.FRAG_PARSING_METADATA, (evt, data) => this._onFragmentParsingMetadata(evt, data));
|
|
50104
|
-
this._hls.on(Hls.Events.ERROR, (evt, data) => this._onHLSJSError(evt, data));
|
|
50105
|
-
// this._hls.on(HLSJS.Events.SUBTITLE_TRACK_LOADED, () =>
|
|
50106
|
-
// this._onSubtitleLoaded(),
|
|
50107
|
-
// )
|
|
50151
|
+
this._hls.on(Events.LEVEL_UPDATED, (evt, data) => this._onLevelUpdated(evt, data));
|
|
50152
|
+
this._hls.on(Events.LEVEL_SWITCHING, (evt, data) => this._onLevelSwitch(evt, data));
|
|
50153
|
+
this._hls.on(Events.LEVEL_SWITCHED, (evt, data) => this._onLevelSwitched(evt, data));
|
|
50154
|
+
this._hls.on(Events.ERROR, (evt, data) => this._onHLSJSError(evt, data));
|
|
50108
50155
|
this._hls.on(Events.AUDIO_TRACKS_UPDATED, (evt, data) => this._onAudioTracksUpdated(evt, data));
|
|
50109
50156
|
this._hls.on(Events.AUDIO_TRACK_SWITCHED, (evt, data) => this._onAudioTrackSwitched(evt, data));
|
|
50157
|
+
this._hls.on(Events.CUES_PARSED, (evt, data) => {
|
|
50158
|
+
data.cues?.forEach((cue) => {
|
|
50159
|
+
this.cues.push({
|
|
50160
|
+
id: cue.id,
|
|
50161
|
+
start: cue.startTime,
|
|
50162
|
+
end: cue.endTime,
|
|
50163
|
+
text: cue.text,
|
|
50164
|
+
});
|
|
50165
|
+
});
|
|
50166
|
+
});
|
|
50110
50167
|
this.bindCustomListeners();
|
|
50111
50168
|
}
|
|
50112
50169
|
bindCustomListeners() {
|
|
@@ -50125,13 +50182,6 @@ class HlsPlayback extends BasePlayback {
|
|
|
50125
50182
|
requestedEventName && this._hls.off(requestedEventName, item.callback);
|
|
50126
50183
|
});
|
|
50127
50184
|
}
|
|
50128
|
-
_onFragmentParsingMetadata(evt, data) {
|
|
50129
|
-
// @ts-ignore
|
|
50130
|
-
this.trigger(Events$1.Custom.PLAYBACK_FRAGMENT_PARSING_METADATA, {
|
|
50131
|
-
evt,
|
|
50132
|
-
data,
|
|
50133
|
-
});
|
|
50134
|
-
}
|
|
50135
50185
|
render() {
|
|
50136
50186
|
this._ready();
|
|
50137
50187
|
return super.render();
|
|
@@ -50153,7 +50203,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
50153
50203
|
}
|
|
50154
50204
|
else {
|
|
50155
50205
|
Log.error('hlsjs: failed to recover', { evt, data });
|
|
50156
|
-
trace(`${T$
|
|
50206
|
+
trace(`${T$7} _recover failed to recover`, {
|
|
50157
50207
|
type: data.type,
|
|
50158
50208
|
details: data.details,
|
|
50159
50209
|
});
|
|
@@ -50213,6 +50263,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
50213
50263
|
this.dvrEnabled && this._updateDvr(time < this.getDuration() - 3);
|
|
50214
50264
|
time += this._startTime;
|
|
50215
50265
|
this.el.currentTime = time;
|
|
50266
|
+
this.triggerCues();
|
|
50216
50267
|
}
|
|
50217
50268
|
seekToLivePoint() {
|
|
50218
50269
|
this.seek(this.getDuration());
|
|
@@ -50239,7 +50290,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
50239
50290
|
this.trigger(Events$1.PLAYBACK_SETTINGSUPDATE);
|
|
50240
50291
|
}
|
|
50241
50292
|
_onHLSJSError(evt, data) {
|
|
50242
|
-
trace(`${T$
|
|
50293
|
+
trace(`${T$7} _onHLSJSError`, {
|
|
50243
50294
|
fatal: data.fatal,
|
|
50244
50295
|
type: data.type,
|
|
50245
50296
|
details: data.details,
|
|
@@ -50261,20 +50312,20 @@ class HlsPlayback extends BasePlayback {
|
|
|
50261
50312
|
if (this._recoverAttemptsRemaining > 0) {
|
|
50262
50313
|
this._recoverAttemptsRemaining -= 1;
|
|
50263
50314
|
switch (data.type) {
|
|
50264
|
-
case
|
|
50315
|
+
case ErrorTypes.NETWORK_ERROR:
|
|
50265
50316
|
switch (data.details) {
|
|
50266
50317
|
// The following network errors cannot be recovered with HLS.startLoad()
|
|
50267
50318
|
// For more details, see https://github.com/video-dev/hls.js/blob/master/doc/design.md#error-detection-and-handling
|
|
50268
50319
|
// For "level load" fatal errors, see https://github.com/video-dev/hls.js/issues/1138
|
|
50269
50320
|
// TODO test handling of these errors
|
|
50270
|
-
case
|
|
50271
|
-
case
|
|
50272
|
-
case
|
|
50321
|
+
case ErrorDetails.MANIFEST_LOAD_ERROR:
|
|
50322
|
+
case ErrorDetails.MANIFEST_LOAD_TIMEOUT:
|
|
50323
|
+
case ErrorDetails.MANIFEST_PARSING_ERROR:
|
|
50273
50324
|
// TODO sort out the errors below, perhaps some of them are recoverable
|
|
50274
|
-
case
|
|
50275
|
-
case
|
|
50276
|
-
case
|
|
50277
|
-
case
|
|
50325
|
+
case ErrorDetails.LEVEL_LOAD_ERROR:
|
|
50326
|
+
case ErrorDetails.LEVEL_LOAD_TIMEOUT:
|
|
50327
|
+
case ErrorDetails.FRAG_LOAD_ERROR:
|
|
50328
|
+
case ErrorDetails.FRAG_LOAD_TIMEOUT:
|
|
50278
50329
|
Log.error('hlsjs: unrecoverable network fatal error.', {
|
|
50279
50330
|
evt,
|
|
50280
50331
|
data,
|
|
@@ -50287,20 +50338,20 @@ class HlsPlayback extends BasePlayback {
|
|
|
50287
50338
|
evt,
|
|
50288
50339
|
data,
|
|
50289
50340
|
});
|
|
50290
|
-
trace(`${T$
|
|
50341
|
+
trace(`${T$7} _onHLSJSError trying to recover from network error`, {
|
|
50291
50342
|
details: data.details,
|
|
50292
50343
|
});
|
|
50293
50344
|
error.level = PlayerError.Levels.WARN;
|
|
50294
|
-
this.
|
|
50345
|
+
this.reload();
|
|
50295
50346
|
break;
|
|
50296
50347
|
}
|
|
50297
50348
|
break;
|
|
50298
|
-
case
|
|
50349
|
+
case ErrorTypes.MEDIA_ERROR:
|
|
50299
50350
|
Log.warn('hlsjs: trying to recover from media error.', {
|
|
50300
50351
|
evt,
|
|
50301
50352
|
data,
|
|
50302
50353
|
});
|
|
50303
|
-
trace(`${T$
|
|
50354
|
+
trace(`${T$7} _onHLSJSError trying to recover from media error`, {
|
|
50304
50355
|
details: data.details,
|
|
50305
50356
|
});
|
|
50306
50357
|
error.level = PlayerError.Levels.WARN;
|
|
@@ -50330,15 +50381,20 @@ class HlsPlayback extends BasePlayback {
|
|
|
50330
50381
|
return;
|
|
50331
50382
|
}
|
|
50332
50383
|
Log.warn('hlsjs: non-fatal error occurred', { evt, data });
|
|
50333
|
-
trace(`${T$
|
|
50384
|
+
trace(`${T$7} _onHLSJSError non-fatal error occurred`, {
|
|
50334
50385
|
type: data.type,
|
|
50335
50386
|
details: data.details,
|
|
50336
50387
|
});
|
|
50337
50388
|
}
|
|
50338
50389
|
}
|
|
50390
|
+
reload() {
|
|
50391
|
+
this.cues = [];
|
|
50392
|
+
this.currentCueId = null;
|
|
50393
|
+
this._hls?.startLoad(-1);
|
|
50394
|
+
}
|
|
50339
50395
|
_keyIsDenied(data) {
|
|
50340
|
-
return (data.type ===
|
|
50341
|
-
data.details ===
|
|
50396
|
+
return (data.type === ErrorTypes.NETWORK_ERROR &&
|
|
50397
|
+
data.details === ErrorDetails.KEY_LOAD_ERROR &&
|
|
50342
50398
|
data.response &&
|
|
50343
50399
|
data.response.code &&
|
|
50344
50400
|
data.response.code >= 400);
|
|
@@ -50356,6 +50412,7 @@ class HlsPlayback extends BasePlayback {
|
|
|
50356
50412
|
}
|
|
50357
50413
|
this._lastTimeUpdate = update;
|
|
50358
50414
|
this.trigger(Events$1.PLAYBACK_TIMEUPDATE, update, this.name);
|
|
50415
|
+
this.triggerCues();
|
|
50359
50416
|
}
|
|
50360
50417
|
_onDurationChange() {
|
|
50361
50418
|
const duration = this.getDuration();
|
|
@@ -50394,6 +50451,20 @@ class HlsPlayback extends BasePlayback {
|
|
|
50394
50451
|
};
|
|
50395
50452
|
this.trigger(Events$1.PLAYBACK_PROGRESS, progress, buffered);
|
|
50396
50453
|
}
|
|
50454
|
+
triggerCues() {
|
|
50455
|
+
const currentTime = this.getCurrentTime();
|
|
50456
|
+
// const cues = Object.values(this.cues)
|
|
50457
|
+
// TODO build a search tree
|
|
50458
|
+
const cue = this.cues.find((cue) => currentTime >= cue.start && currentTime <= cue.end);
|
|
50459
|
+
if (cue) {
|
|
50460
|
+
this.currentCueId = cue.id;
|
|
50461
|
+
this.oncueenter?.(cue);
|
|
50462
|
+
}
|
|
50463
|
+
else if (this.currentCueId) {
|
|
50464
|
+
this.oncueexit?.({ id: this.currentCueId });
|
|
50465
|
+
this.currentCueId = null;
|
|
50466
|
+
}
|
|
50467
|
+
}
|
|
50397
50468
|
load(url) {
|
|
50398
50469
|
this._stopTimeUpdateTimer();
|
|
50399
50470
|
this.options.src = url;
|
|
@@ -50585,26 +50656,6 @@ class HlsPlayback extends BasePlayback {
|
|
|
50585
50656
|
durationChanged && this._onDurationChange();
|
|
50586
50657
|
startTimeChanged && this._onProgress();
|
|
50587
50658
|
}
|
|
50588
|
-
_onFragmentChanged(evt, data) {
|
|
50589
|
-
this._currentFragment = data.frag;
|
|
50590
|
-
// @ts-ignore
|
|
50591
|
-
this.trigger(Events$1.Custom.PLAYBACK_FRAGMENT_CHANGED, data);
|
|
50592
|
-
}
|
|
50593
|
-
_onFragmentLoaded(evt, data) {
|
|
50594
|
-
this.trigger(Events$1.PLAYBACK_FRAGMENT_LOADED, data);
|
|
50595
|
-
}
|
|
50596
|
-
// _onSubtitleLoaded() {
|
|
50597
|
-
// trace(`${T} _onSubtitleLoaded`)
|
|
50598
|
-
// // This event may be triggered multiple times
|
|
50599
|
-
// // Setup CC only once (disable CC by default)
|
|
50600
|
-
// if (!this._ccIsSetup) {
|
|
50601
|
-
// this.trigger(Events.PLAYBACK_SUBTITLE_AVAILABLE)
|
|
50602
|
-
// const trackId =
|
|
50603
|
-
// this._playbackType === Playback.LIVE ? -1 : this.closedCaptionsTrackId
|
|
50604
|
-
// this.closedCaptionsTrackId = trackId
|
|
50605
|
-
// this._ccIsSetup = true
|
|
50606
|
-
// }
|
|
50607
|
-
// }
|
|
50608
50659
|
_onLevelSwitch(evt, data) {
|
|
50609
50660
|
if (!this.levels.length) {
|
|
50610
50661
|
this._fillLevels();
|
|
@@ -50675,6 +50726,26 @@ class HlsPlayback extends BasePlayback {
|
|
|
50675
50726
|
const track = this._hls.audioTracks[data.id];
|
|
50676
50727
|
this.trigger(Events$1.PLAYBACK_AUDIO_CHANGED, toClapprTrack(track));
|
|
50677
50728
|
}
|
|
50729
|
+
setTextTrack(id) {
|
|
50730
|
+
this._hls.subtitleTrack = id;
|
|
50731
|
+
}
|
|
50732
|
+
/**
|
|
50733
|
+
* @override
|
|
50734
|
+
*/
|
|
50735
|
+
get closedCaptionsTracks() {
|
|
50736
|
+
return this.getTextTracks();
|
|
50737
|
+
}
|
|
50738
|
+
getTextTracks() {
|
|
50739
|
+
return this._hls?.subtitleTracks.map((t) => ({
|
|
50740
|
+
id: t.id,
|
|
50741
|
+
name: t.name,
|
|
50742
|
+
track: {
|
|
50743
|
+
id: t.id,
|
|
50744
|
+
label: t.name,
|
|
50745
|
+
language: t.lang,
|
|
50746
|
+
},
|
|
50747
|
+
})) || [];
|
|
50748
|
+
}
|
|
50678
50749
|
}
|
|
50679
50750
|
HlsPlayback.canPlay = function (resource, mimeType) {
|
|
50680
50751
|
if (!isHlsSource(resource, mimeType)) {
|
|
@@ -50807,7 +50878,7 @@ function registerPlaybacks() {
|
|
|
50807
50878
|
Loader.registerPlayback(DashPlayback);
|
|
50808
50879
|
}
|
|
50809
50880
|
|
|
50810
|
-
const T$
|
|
50881
|
+
const T$6 = 'gplayer';
|
|
50811
50882
|
const DEFAULT_OPTIONS = {
|
|
50812
50883
|
autoPlay: false,
|
|
50813
50884
|
debug: 'none',
|
|
@@ -51157,7 +51228,7 @@ class Player {
|
|
|
51157
51228
|
// TODO test
|
|
51158
51229
|
events = {
|
|
51159
51230
|
onReady: () => {
|
|
51160
|
-
trace(`${T$
|
|
51231
|
+
trace(`${T$6} onReady`, {
|
|
51161
51232
|
ready: this.ready,
|
|
51162
51233
|
});
|
|
51163
51234
|
if (this.ready) {
|
|
@@ -51589,23 +51660,9 @@ const FullscreenIOS = {
|
|
|
51589
51660
|
},
|
|
51590
51661
|
};
|
|
51591
51662
|
|
|
51592
|
-
insertStyle("[data-player] {\n --bottom-panel: 40px;\n}\n\n.container .media-control-notransition {\n transition: none !important;\n}\n.container .player-poster .play-wrapper {\n opacity: 1;\n}\n.container.crop-video [data-html5-video] {\n object-fit: cover;\n}\n.container .player-poster .circle-poster {\n top: 50%;\n margin-top: -60px;\n left: 50%;\n margin-left: -60px;\n position: absolute;\n width: 120px;\n height: 120px;\n border: 2px solid white;\n border-radius: 50%;\n filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\";\n filter: alpha(opacity=60);\n opacity: 1;\n box-shadow: 0 0 1px 0 white;\n}\n.container .player-poster .circle-poster svg {\n margin-left: 5px;\n width: 80px;\n}\n.container .spinner-three-bounce[data-spinner] > div {\n background-color: #ff5700;\n}\n\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n transform: rotate(270deg);\n float: none;\n display: block;\n position: absolute;\n margin: 0;\n top: -40px;\n padding: 0;\n margin-left: -32px;\n margin-top: -3px;\n width: 80px;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background-mask {\n position: absolute;\n width: 100%;\n height: 100%;\n left: -5px;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n display: none;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background {\n margin-left: 11px;\n top: 7px;\n width: 80px;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber {\n margin-left: 11px;\n top: 1px;\n}\n.media-control-skin-1.w270 .media-control-dd__popup {\n max-width: 114px;\n}\n\n.media-control-skin-1.w370 .media-control-cc {\n width: 28px;\n}\n.media-control-skin-1.w370 .media-control-cc svg {\n height: 17px;\n}\n.media-control-skin-1.w370 .share_plugin[data-share] .share-container {\n top: calc(50% - 150px);\n left: calc(50% - 125px);\n width: 250px;\n height: calc(100% - 32px);\n max-height: 300px;\n transform: none;\n}\n.media-control-skin-1.w370 .share_plugin[data-share] .share-container .share-container-header {\n border: none;\n}\n.media-control-skin-1.w370 .share_plugin[data-share] .share-container .share-container-header .share-container-header--title {\n visibility: hidden;\n}\n.media-control-skin-1.w370 .media-control-quality {\n display: block;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera {\n margin-top: 0;\n margin-right: 10px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button svg {\n height: 17px;\n margin: 0;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] {\n padding-left: 10px;\n padding-right: 12px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator {\n line-height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator[data-position], .media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n font-size: 11px;\n line-height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-button {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-button::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-info {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-info::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n height: 33px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] button.media-control-button svg {\n height: 17px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n line-height: 33px;\n font-size: 11px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n max-width: 50px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] {\n height: 32px;\n margin-right: 8px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 17px;\n margin-top: 5px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n display: none;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n width: 0;\n height: 12px;\n top: 9px;\n padding: 0;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-button,\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-item {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-dd__popup {\n max-width: 150px;\n}\n\n:root {\n --font-size-media-controls: 14px;\n --font-size-media-controls-dropdown: 16px;\n --gplayer-mc-font-size-dropdown: 16px;\n --player-vod-color: #005aff;\n --player-dvr-color: #fff;\n --player-live-color: #ff0101;\n --player-seekbar-current-color: #ff5700;\n --player-seekbar-buffer-color: #fff;\n --gplayer-mc-text-color: #fff;\n --gplayer-mc-text-dim-color: #fffffe;\n --gplayer-mc-popup-border-color: rgb(255 255 255 / 10%);\n --gplayer-mc-popup-bg: rgb(74 74 74 / 60%);\n}\n\n.media-control-skin-1 {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 9999;\n pointer-events: none;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n font-size: var(--font-size-media-controls);\n}\n.media-control-skin-1.dragging {\n pointer-events: auto;\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1.dragging * {\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1 .media-control-icon {\n line-height: 0;\n letter-spacing: 0;\n speak: none;\n color: var(--gplayer-mc-text-color);\n vertical-align: middle;\n text-align: left;\n transition: all 0.1s ease;\n}\n.media-control-skin-1 .media-control-icon:hover {\n color: white;\n}\n.media-control-skin-1.media-control-hide .media-control-background[data-background] {\n opacity: 0;\n}\n.media-control-skin-1.media-control-hide .media-control-layer[data-controls] {\n bottom: -50px;\n}\n.media-control-skin-1.media-control-hide .media-control-layer[data-controls] .bar-scrubber[data-seekbar] {\n opacity: 0;\n}\n.media-control-skin-1 .media-control-layer[data-controls] {\n position: absolute;\n bottom: 0;\n width: 100%;\n padding: 0 12px 0 8px;\n height: var(--bottom-panel);\n vertical-align: middle;\n pointer-events: auto;\n transition: bottom 0.4s ease-out;\n display: flex;\n justify-content: space-between;\n}\n.media-control-skin-1 .media-control-left-panel {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n justify-content: flex-start;\n}\n.media-control-skin-1 .media-control-button,\n.media-control-skin-1 .media-control-indicator,\n.media-control-skin-1 .media-control-item {\n order: 50;\n}\n.media-control-skin-1 .media-control-item {\n display: flex;\n align-items: center;\n}\n.media-control-skin-1 [data-playpause],\n.media-control-skin-1 [data-playstop] {\n order: 1;\n}\n.media-control-skin-1 [data-volume] {\n order: 2;\n}\n.media-control-skin-1 [data-position] {\n order: 3;\n}\n.media-control-skin-1 [data-duration] {\n order: 3;\n}\n.media-control-skin-1 .media-control-center-panel {\n height: 100%;\n text-align: center;\n line-height: var(--bottom-panel);\n}\n.media-control-skin-1 .media-control-right-panel {\n display: flex;\n align-items: center;\n gap: 1rem;\n justify-content: flex-end;\n}\n@media (max-width: 420px) {\n .media-control-skin-1 .media-control-right-panel {\n gap: 0.5rem;\n }\n}\n.media-control-skin-1 button.media-control-button {\n background-color: transparent;\n border: 0;\n padding: 0;\n cursor: pointer;\n display: inline-block;\n height: 20px;\n width: 24px;\n}\n.media-control-skin-1 button.media-control-button svg {\n height: 20px;\n}\n.media-control-skin-1 button.media-control-button svg path {\n fill: white;\n}\n.media-control-skin-1 button.media-control-button:focus {\n outline: none;\n}\n.media-control-skin-1 button.media-control-button[data-play] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-pause] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-stop] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-fullscreen] {\n order: 100;\n background-color: transparent;\n border: 0;\n height: 40px;\n}\n.media-control-skin-1 button.media-control-button[data-hd-indicator] {\n background-color: transparent;\n border: 0;\n cursor: default;\n display: none !important;\n float: right;\n height: 100%;\n}\n.media-control-skin-1 .media-control-indicator[data-position], .media-control-skin-1 .media-control-indicator[data-duration] {\n display: flex;\n color: white;\n cursor: default;\n line-height: var(--bottom-panel);\n position: relative;\n}\n.media-control-skin-1 .media-control-indicator[data-position] {\n margin: 1px 0 0 7px;\n}\n.media-control-skin-1 .media-control-indicator[data-duration]::before {\n content: \"|\";\n margin-right: 7px;\n}\n.media-control-skin-1 .media-control-indicator[data-duration] {\n color: rgb(255, 255, 255);\n opacity: 0.5;\n margin-top: 1px;\n margin-right: 6px;\n}\n.media-control-skin-1 .bar-container[data-seekbar] {\n position: absolute;\n top: -11px;\n left: 0;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n height: 20px;\n cursor: pointer;\n}\n.media-control-skin-1 .bar-container[data-seekbar] .bar-background[data-seekbar] {\n width: 100%;\n height: 3px;\n position: relative;\n top: 8px;\n background-color: #666;\n}\n.media-control-skin-1 .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-1[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-buffer-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-current-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .bar-container[data-seekbar].seek-disabled {\n cursor: default;\n display: none;\n}\n.media-control-skin-1 .bar-scrubber[data-seekbar] {\n position: absolute;\n transform: translateX(-50%);\n top: 0;\n left: 0;\n width: 20px;\n height: 20px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .bar-scrubber[data-seekbar] .bar-scrubber-icon[data-seekbar] {\n position: absolute;\n left: 4.5px;\n top: 4.5px;\n width: 11px;\n height: 11px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1 .drawer-container[data-volume] {\n display: flex;\n justify-content: flex-start;\n height: var(--bottom-panel);\n cursor: pointer;\n box-sizing: border-box;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] {\n bottom: 0;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n background-color: transparent;\n border: 0;\n box-sizing: content-box;\n height: var(--bottom-panel);\n width: 20px;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 20px;\n position: relative;\n top: 3px;\n margin-top: 7px;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg path {\n fill: white;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume].muted svg {\n margin-left: 2px;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] {\n position: relative;\n margin-left: 10px;\n top: 8px;\n width: 80px;\n height: 23px;\n padding: 3px 0;\n transition: width 0.2s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] {\n height: 3px;\n border-radius: 100px;\n position: relative;\n top: 7px;\n background-color: #666;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-1[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n border-radius: 100px;\n background-color: white;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-2[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-vod-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] {\n position: absolute;\n transform: translateX(-50%);\n top: 3px;\n margin-left: 3px;\n width: 16px;\n height: 16px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] .bar-scrubber-icon[data-volume] {\n position: absolute;\n left: 3px;\n top: 5px;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume] {\n float: left;\n width: 4px;\n padding-left: 2px;\n height: 12px;\n opacity: 0.5;\n box-shadow: inset 2px 0 0 white;\n transition: transform 0.2s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume].fill {\n box-shadow: inset 2px 0 0 #fff;\n opacity: 1;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:nth-of-type(1) {\n padding-left: 0;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:hover {\n transform: scaleY(1.5);\n}\n.media-control-skin-1 .seek-time {\n height: 26px;\n line-height: 26px;\n bottom: 52px;\n border-radius: 3px;\n background-color: rgba(74, 74, 74, 0.7);\n}\n.media-control-skin-1 .seek-time span {\n letter-spacing: 0.8px;\n font-size: 14px;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n}\n.media-control-skin-1 .seek-time .seek-time__pos {\n padding-left: 8px;\n padding-right: 8px;\n}\n.media-control-skin-1 .media-control-dd {\n display: flex;\n height: 32px;\n line-height: 32px;\n align-items: baseline;\n gap: 4px;\n vertical-align: baseline;\n padding: 0;\n background-color: transparent;\n color: var(--gplayer-mc-text-color);\n -webkit-font-smoothing: antialiased;\n border: none;\n cursor: pointer;\n}\n.media-control-skin-1 .media-control-dd__text {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 100px;\n}\n.media-control-skin-1 .media-control-dd.changing {\n animation: pulse 0.5s infinite alternate;\n}\n.media-control-skin-1 .media-control-dd svg {\n fill: var(--gplayer-mc-text-color);\n}\n.media-control-skin-1 .media-control-dd__arrow {\n width: 9px;\n height: 6px;\n}\n.media-control-skin-1 .media-control-dd__wrap {\n position: relative;\n}\n.media-control-skin-1 .media-control-dd__popup {\n max-width: 200px;\n list-style-type: none;\n position: absolute;\n box-shadow: 0 0 1px 1px var(--gplayer-mc-popup-border-color);\n border: none;\n min-width: 60px;\n border-radius: 4px;\n bottom: 40px;\n right: -2px;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 5px 0;\n}\n.media-control-skin-1 .media-control-dd__popup li {\n font-size: var(--gplayer-mc-font-size-dropdown);\n text-align: right;\n height: 30px;\n}\n.media-control-skin-1 .media-control-dd__popup li a {\n display: block;\n text-decoration: none;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n padding: 5px 10px;\n line-height: 20px;\n color: #fffffe;\n}\n.media-control-skin-1 .media-control-dd__popup li a:hover {\n text-decoration: none;\n background-color: rgba(0, 0, 0, 0.4);\n color: var(--gplayer-mc-text-color);\n}\n.media-control-skin-1 .media-control-dd__popup li.current a {\n color: #f00;\n}\n.media-control-skin-1 .media-control-dd__popup li:first-child a {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.media-control-skin-1 .media-control-dd__popup li:last-child a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n\n@keyframes pulse {\n 0% {\n color: #fff;\n }\n 50% {\n color: #ff0101;\n }\n 100% {\n color: #B80000;\n }\n}");
|
|
51593
|
-
|
|
51594
|
-
|
|
51595
|
-
|
|
51596
|
-
const playIcon = "<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_1564)\">\n <path d=\"M6 3V20L19.3571 11.5L6 3Z\" fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_28_1564\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
51597
|
-
|
|
51598
|
-
const pauseIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.05 3H15.35C14.6057 3 14 3.6057 14 4.35V19.65C14 20.3943 14.6057 21 15.35 21H18.05C18.7943 21 19.4 20.3943 19.4 19.65V4.35C19.4 3.6057 18.7943 3 18.05 3ZM10.4 4.35V19.65C10.4 20.3943 9.7943 21 9.05 21H6.35C5.6057 21 5 20.3943 5 19.65V4.35C5 3.6057 5.6057 3 6.35 3H9.05C9.7943 3 10.4 3.6057 10.4 4.35Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
51599
|
-
|
|
51600
|
-
const stopIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#C9C9C9\" d=\"M4.568 3.86h14.9v16.28h-14.9z\"/>\n</svg>\n";
|
|
51601
|
-
|
|
51602
|
-
const volumeMaxIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14.187 7.71405C13.759 8.06405 13.697 8.69307 14.046 9.12107C14.662 9.87207 15 10.8941 15 11.9961C15 13.0991 14.662 14.1201 14.046 14.8711C13.697 15.2991 13.759 15.9291 14.187 16.2781C14.373 16.4311 14.597 16.5051 14.82 16.5051C15.109 16.5051 15.396 16.3801 15.594 16.1391C16.501 15.0301 17 13.5601 17 11.9961C17 10.4331 16.501 8.96207 15.594 7.85407C15.245 7.42707 14.614 7.36405 14.187 7.71405ZM19.772 5.14408C19.443 4.70008 18.816 4.60907 18.374 4.94007C17.931 5.27007 17.839 5.89605 18.169 6.33905C19.367 7.94705 20 9.90307 20 11.9961C20 14.0891 19.367 16.0451 18.169 17.6531C17.839 18.0971 17.931 18.7231 18.374 19.0531C18.553 19.1871 18.762 19.2511 18.97 19.2511C19.275 19.2511 19.576 19.1121 19.772 18.8491C21.23 16.8921 22 14.5231 22 11.9961C22 9.47007 21.23 7.10108 19.772 5.14408ZM12 3.85108V20.1421C12 20.4881 11.793 20.7971 11.473 20.9291C11.368 20.9721 11.258 20.9921 11.149 20.9921C10.926 20.9921 10.708 20.9031 10.544 20.7371L6.317 16.4431C6.038 16.1591 5.648 15.9961 5.249 15.9961H3.5C2.673 15.9961 2 15.3231 2 14.4961V9.49607C2 8.66907 2.673 7.99607 3.5 7.99607H5.249C5.648 7.99607 6.038 7.83308 6.317 7.54908L10.544 3.25507C10.787 3.00807 11.151 2.93206 11.473 3.06406C11.793 3.19506 12 3.50408 12 3.85108Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
51603
|
-
|
|
51604
|
-
const volumeMuteIcon = "<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";
|
|
51605
|
-
|
|
51606
|
-
const fullscreenOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M17.1999 4.85023H21.1498V8.80019C21.1498 9.0786 21.2604 9.34577 21.4574 9.54268C21.6283 9.71365 21.8523 9.81956 22.0906 9.84449L22.0965 9.85041H22.2001C22.4785 9.85041 22.7456 9.73981 22.9426 9.5429C23.1395 9.346 23.2501 9.07883 23.2501 8.80042V3.80024C23.2501 3.52182 23.1395 3.25465 22.9426 3.05775L22.7658 3.23453L22.9426 3.05775C22.7456 2.86085 22.4785 2.75024 22.2001 2.75024H17.1999C16.8247 2.75024 16.478 2.95039 16.2905 3.27526C16.103 3.6001 16.103 4.00037 16.2905 4.32521C16.478 4.65009 16.8247 4.85023 17.1999 4.85023Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n <path\n d=\"M1.79999 9.85017H1.90368L1.90961 9.84423C2.14785 9.81928 2.37176 9.71338 2.54271 9.54243C2.73961 9.34553 2.85021 9.07836 2.85021 8.79995V4.84999H6.80017C7.17536 4.84999 7.52201 4.64984 7.70953 4.32497C7.89703 4.00013 7.89703 3.59986 7.70953 3.27502C7.52201 2.95014 7.17537 2.75 6.80017 2.75H1.79999C1.52158 2.75 1.25441 2.8606 1.05751 3.05751C0.860605 3.25441 0.75 3.52158 0.75 3.79999V8.80017C0.75 9.07859 0.860605 9.34576 1.05751 9.54266C1.25441 9.73956 1.52158 9.85017 1.79999 9.85017Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n <path\n d=\"M21.1496 18.7498H17.1996C16.8245 18.7498 16.4778 18.95 16.2903 19.2748C16.1028 19.5997 16.1028 19.9999 16.2903 20.3248C16.4778 20.6497 16.8244 20.8498 17.1996 20.8498H21.5963L21.596 20.85H22.1996C22.478 20.85 22.7452 20.7394 22.9421 20.5425C23.139 20.3456 23.2496 20.0785 23.2496 19.8V14.7999C23.2496 14.4247 23.0494 14.078 22.7246 13.8905C22.3997 13.703 21.9995 13.703 21.6746 13.8905C21.3497 14.078 21.1496 14.4247 21.1496 14.7999V18.7498Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n <path\n d=\"M2.85003 18.7498H6.79999C7.17518 18.7498 7.52183 18.95 7.70935 19.2748C7.89685 19.5997 7.89685 19.9999 7.70935 20.3248C7.52183 20.6497 7.17519 20.8498 6.79999 20.8498H2.40337L2.40359 20.85H1.80004C1.52163 20.85 1.25446 20.7394 1.05756 20.5425C0.860653 20.3456 0.750049 20.0785 0.750049 19.8V14.7999C0.750049 14.4247 0.950194 14.078 1.27507 13.8905C1.5999 13.703 2.00018 13.703 2.32501 13.8905C2.64989 14.078 2.85003 14.4247 2.85003 14.7999V18.7498Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n</svg>\n";
|
|
51607
|
-
|
|
51608
|
-
const fullscreenOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15.1568 23.15C15.7408 23.15 16.2142 22.6766 16.2142 22.0926V17.1947C16.2142 16.7253 16.5948 16.3447 17.0642 16.3447H21.9621C22.5461 16.3447 23.0195 15.8713 23.0195 15.2873C23.0195 14.7034 22.5461 14.2299 21.9621 14.2299H16.0642C14.9832 14.2299 14.0995 15.1137 14.0995 16.1947V22.0926C14.0995 22.6766 14.5729 23.15 15.1568 23.15Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n <path\n d=\"M1.90739 10.7701H7.80528C8.88627 10.7701 9.77006 9.88627 9.77006 8.80528V2.90739C9.77006 2.32341 9.29665 1.85 8.71267 1.85C8.12869 1.85 7.65528 2.32341 7.65528 2.90739V7.80528C7.65528 8.27472 7.27472 8.65528 6.80528 8.65528H1.90739C1.32341 8.65528 0.85 9.12869 0.85 9.71267C0.85 10.2966 1.32341 10.7701 1.90739 10.7701Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n <path\n d=\"M8.71261 23.15C9.29659 23.15 9.77 22.6766 9.77 22.0926V16.1947C9.77 15.1137 8.88621 14.2299 7.80521 14.2299H1.90733C1.32335 14.2299 0.849939 14.7034 0.849939 15.2873C0.849939 15.8713 1.32335 16.3447 1.90733 16.3447H6.80521C7.27466 16.3447 7.65521 16.7253 7.65521 17.1947V22.0926C7.65521 22.6766 8.12862 23.15 8.71261 23.15Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n <path\n d=\"M21.9621 10.7701C22.5461 10.7701 23.0195 10.2966 23.0195 9.71267C23.0195 9.12869 22.5461 8.65528 21.9621 8.65528H17.0642C16.5948 8.65528 16.2142 8.27472 16.2142 7.80528V2.90739C16.2142 2.32341 15.7408 1.85 15.1568 1.85C14.5729 1.85 14.0995 2.32341 14.0995 2.90739V8.80528C14.0995 9.88627 14.9832 10.7701 16.0642 10.7701H21.9621Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n</svg>\n";
|
|
51663
|
+
function isMobile() {
|
|
51664
|
+
return Browser.isMobile;
|
|
51665
|
+
}
|
|
51609
51666
|
|
|
51610
51667
|
/**
|
|
51611
51668
|
*
|
|
@@ -51647,6 +51704,24 @@ function mediaControlClickaway(callback) {
|
|
|
51647
51704
|
};
|
|
51648
51705
|
}
|
|
51649
51706
|
|
|
51707
|
+
insertStyle("[data-player] {\n --bottom-panel: 40px;\n}\n\n.container .media-control-notransition {\n transition: none !important;\n}\n.container .player-poster .play-wrapper {\n opacity: 1;\n}\n.container.crop-video [data-html5-video] {\n object-fit: cover;\n}\n.container .player-poster .circle-poster {\n top: 50%;\n margin-top: -60px;\n left: 50%;\n margin-left: -60px;\n position: absolute;\n width: 120px;\n height: 120px;\n border: 2px solid white;\n border-radius: 50%;\n filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\";\n filter: alpha(opacity=60);\n opacity: 1;\n box-shadow: 0 0 1px 0 white;\n}\n.container .player-poster .circle-poster svg {\n margin-left: 5px;\n width: 80px;\n}\n.container .spinner-three-bounce[data-spinner] > div {\n background-color: #ff5700;\n}\n\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n transform: rotate(270deg);\n float: none;\n display: block;\n position: absolute;\n margin: 0;\n top: -40px;\n padding: 0;\n margin-left: -32px;\n margin-top: -3px;\n width: 80px;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background-mask {\n position: absolute;\n width: 100%;\n height: 100%;\n left: -5px;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n display: none;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-background {\n margin-left: 11px;\n top: 7px;\n width: 80px;\n}\n.media-control-skin-1.w270 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber {\n margin-left: 11px;\n top: 1px;\n}\n.media-control-skin-1.w270 .media-control-dd__popup {\n max-width: 114px;\n}\n\n.media-control-skin-1.w370 .media-control-cc {\n width: 28px;\n}\n.media-control-skin-1.w370 .media-control-cc svg {\n height: 17px;\n}\n.media-control-skin-1.w370 .share_plugin[data-share] .share-container {\n top: calc(50% - 150px);\n left: calc(50% - 125px);\n width: 250px;\n height: calc(100% - 32px);\n max-height: 300px;\n transform: none;\n}\n.media-control-skin-1.w370 .share_plugin[data-share] .share-container .share-container-header {\n border: none;\n}\n.media-control-skin-1.w370 .share_plugin[data-share] .share-container .share-container-header .share-container-header--title {\n visibility: hidden;\n}\n.media-control-skin-1.w370 .media-control-quality {\n display: block;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera {\n margin-top: 0;\n margin-right: 10px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-multicamera .multicamera button svg {\n height: 17px;\n margin: 0;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] {\n padding-left: 10px;\n padding-right: 12px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator {\n line-height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator[data-position], .media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-indicator[data-duration] {\n font-size: 11px;\n line-height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-button {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-button::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-info {\n margin-left: 10px;\n height: 32px;\n font-size: 12px;\n line-height: 32px;\n text-shadow: none;\n letter-spacing: 0.6px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .dvr-controls .live-info::before {\n width: 8px;\n height: 8px;\n margin-right: 4px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] button.media-control-button[data-fullscreen] {\n height: 33px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] button.media-control-button svg {\n height: 17px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n line-height: 33px;\n font-size: 11px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .gplayer-mc-clips .gplayer-mc-clips-text {\n max-width: 50px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] {\n height: 32px;\n margin-right: 8px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 17px;\n margin-top: 5px;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume] {\n display: none;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .drawer-container[data-volume] .bar-container[data-volume].volume-bar-hide {\n width: 0;\n height: 12px;\n top: 9px;\n padding: 0;\n}\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-button,\n.media-control-skin-1.w370 .media-control-layer[data-controls] .media-control-item {\n height: 32px;\n}\n.media-control-skin-1.w370 .media-control-dd__popup {\n max-width: 150px;\n}\n\n:root {\n --font-size-media-controls: 14px;\n --font-size-media-controls-dropdown: 16px;\n --gplayer-mc-font-size-dropdown: 16px;\n --player-vod-color: #005aff;\n --player-dvr-color: #fff;\n --player-live-color: #ff0101;\n --player-seekbar-current-color: #ff5700;\n --player-seekbar-buffer-color: #fff;\n --gplayer-mc-text-color: #fff;\n --gplayer-mc-text-dim-color: #fffffe;\n --gplayer-mc-popup-border-color: rgb(255 255 255 / 10%);\n --gplayer-mc-popup-bg: rgb(74 74 74 / 60%);\n}\n\n.media-control-skin-1 {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 9999;\n pointer-events: none;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n font-size: var(--font-size-media-controls);\n}\n.media-control-skin-1.dragging {\n pointer-events: auto;\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1.dragging * {\n cursor: grabbing !important;\n cursor: url(\"closed-hand.cur\"), move;\n}\n.media-control-skin-1 .media-control-icon {\n line-height: 0;\n letter-spacing: 0;\n speak: none;\n color: var(--gplayer-mc-text-color);\n vertical-align: middle;\n text-align: left;\n transition: all 0.1s ease;\n}\n.media-control-skin-1 .media-control-icon:hover {\n color: white;\n}\n.media-control-skin-1.media-control-hide .media-control-background[data-background] {\n opacity: 0;\n}\n.media-control-skin-1.media-control-hide .media-control-layer[data-controls] {\n bottom: -50px;\n}\n.media-control-skin-1.media-control-hide .media-control-layer[data-controls] .bar-scrubber[data-seekbar] {\n opacity: 0;\n}\n.media-control-skin-1 .media-control-layer[data-controls] {\n position: absolute;\n bottom: 0;\n width: 100%;\n padding: 0 12px 0 8px;\n height: var(--bottom-panel);\n vertical-align: middle;\n pointer-events: auto;\n transition: bottom 0.4s ease-out;\n display: flex;\n justify-content: space-between;\n}\n.media-control-skin-1 .media-control-left-panel {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n justify-content: flex-start;\n}\n.media-control-skin-1 .media-control-button,\n.media-control-skin-1 .media-control-indicator,\n.media-control-skin-1 .media-control-item {\n order: 50;\n}\n.media-control-skin-1 .media-control-item {\n display: flex;\n align-items: center;\n}\n.media-control-skin-1 [data-playpause],\n.media-control-skin-1 [data-playstop] {\n order: 1;\n}\n.media-control-skin-1 [data-volume] {\n order: 2;\n}\n.media-control-skin-1 [data-position] {\n order: 3;\n}\n.media-control-skin-1 [data-duration] {\n order: 3;\n}\n.media-control-skin-1 .media-control-center-panel {\n height: 100%;\n text-align: center;\n line-height: var(--bottom-panel);\n}\n.media-control-skin-1 .media-control-right-panel {\n display: flex;\n align-items: center;\n gap: 1rem;\n justify-content: flex-end;\n}\n@media (max-width: 420px) {\n .media-control-skin-1 .media-control-right-panel {\n gap: 0.5rem;\n }\n}\n.media-control-skin-1 button.media-control-button {\n background-color: transparent;\n border: 0;\n padding: 0;\n cursor: pointer;\n display: inline-block;\n height: 20px;\n width: 24px;\n}\n.media-control-skin-1 button.media-control-button svg {\n height: 20px;\n}\n.media-control-skin-1 button.media-control-button svg path {\n fill: white;\n}\n.media-control-skin-1 button.media-control-button:focus {\n outline: none;\n}\n.media-control-skin-1 button.media-control-button[data-play] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-pause] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-stop] {\n float: left;\n height: 100%;\n}\n.media-control-skin-1 button.media-control-button[data-fullscreen] {\n order: 100;\n background-color: transparent;\n border: 0;\n height: 40px;\n}\n.media-control-skin-1 button.media-control-button[data-hd-indicator] {\n background-color: transparent;\n border: 0;\n cursor: default;\n display: none !important;\n float: right;\n height: 100%;\n}\n.media-control-skin-1 .media-control-indicator[data-position], .media-control-skin-1 .media-control-indicator[data-duration] {\n display: flex;\n color: white;\n cursor: default;\n line-height: var(--bottom-panel);\n position: relative;\n}\n.media-control-skin-1 .media-control-indicator[data-position] {\n margin: 1px 0 0 7px;\n}\n.media-control-skin-1 .media-control-indicator[data-duration]::before {\n content: \"|\";\n margin-right: 7px;\n}\n.media-control-skin-1 .media-control-indicator[data-duration] {\n color: rgb(255, 255, 255);\n opacity: 0.5;\n margin-top: 1px;\n margin-right: 6px;\n}\n.media-control-skin-1 .bar-container[data-seekbar] {\n position: absolute;\n top: -11px;\n left: 0;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n height: 20px;\n cursor: pointer;\n}\n.media-control-skin-1 .bar-container[data-seekbar] .bar-background[data-seekbar] {\n width: 100%;\n height: 3px;\n position: relative;\n top: 8px;\n background-color: #666;\n}\n.media-control-skin-1 .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-1[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-buffer-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .bar-container[data-seekbar] .bar-background[data-seekbar] .bar-fill-2[data-seekbar] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-seekbar-current-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .bar-container[data-seekbar].seek-disabled {\n cursor: default;\n display: none;\n}\n.media-control-skin-1 .bar-scrubber[data-seekbar] {\n position: absolute;\n transform: translateX(-50%);\n top: 0;\n left: 0;\n width: 20px;\n height: 20px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .bar-scrubber[data-seekbar] .bar-scrubber-icon[data-seekbar] {\n position: absolute;\n left: 4.5px;\n top: 4.5px;\n width: 11px;\n height: 11px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1 .drawer-container[data-volume] {\n display: flex;\n justify-content: flex-start;\n height: var(--bottom-panel);\n cursor: pointer;\n box-sizing: border-box;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] {\n bottom: 0;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] {\n background-color: transparent;\n border: 0;\n box-sizing: content-box;\n height: var(--bottom-panel);\n width: 20px;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg {\n height: 20px;\n position: relative;\n top: 3px;\n margin-top: 7px;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume] svg path {\n fill: white;\n}\n.media-control-skin-1 .drawer-container[data-volume] .drawer-icon-container[data-volume] .drawer-icon[data-volume].muted svg {\n margin-left: 2px;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] {\n position: relative;\n margin-left: 10px;\n top: 8px;\n width: 80px;\n height: 23px;\n padding: 3px 0;\n transition: width 0.2s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] {\n height: 3px;\n border-radius: 100px;\n position: relative;\n top: 7px;\n background-color: #666;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-1[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n border-radius: 100px;\n background-color: white;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-background[data-volume] .bar-fill-2[data-volume] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n background-color: var(--player-vod-color);\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] {\n position: absolute;\n transform: translateX(-50%);\n top: 3px;\n margin-left: 3px;\n width: 16px;\n height: 16px;\n opacity: 1;\n transition: all 0.1s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .bar-scrubber[data-volume] .bar-scrubber-icon[data-volume] {\n position: absolute;\n left: 3px;\n top: 5px;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background-color: white;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume] {\n float: left;\n width: 4px;\n padding-left: 2px;\n height: 12px;\n opacity: 0.5;\n box-shadow: inset 2px 0 0 white;\n transition: transform 0.2s ease-out;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume].fill {\n box-shadow: inset 2px 0 0 #fff;\n opacity: 1;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:nth-of-type(1) {\n padding-left: 0;\n}\n.media-control-skin-1 .drawer-container[data-volume] .bar-container[data-volume] .segmented-bar-element[data-volume]:hover {\n transform: scaleY(1.5);\n}\n.media-control-skin-1 .seek-time {\n height: 26px;\n line-height: 26px;\n bottom: 52px;\n border-radius: 3px;\n background-color: rgba(74, 74, 74, 0.7);\n}\n.media-control-skin-1 .seek-time span {\n letter-spacing: 0.8px;\n font-size: 14px;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n}\n.media-control-skin-1 .seek-time .seek-time__pos {\n padding-left: 8px;\n padding-right: 8px;\n}\n.media-control-skin-1 .media-control-dd {\n display: flex;\n height: 32px;\n line-height: 32px;\n align-items: baseline;\n gap: 4px;\n vertical-align: baseline;\n padding: 0;\n background-color: transparent;\n color: var(--gplayer-mc-text-color);\n -webkit-font-smoothing: antialiased;\n border: none;\n cursor: pointer;\n}\n.media-control-skin-1 .media-control-dd__text {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 100px;\n}\n.media-control-skin-1 .media-control-dd.changing {\n animation: pulse 0.5s infinite alternate;\n}\n.media-control-skin-1 .media-control-dd svg {\n fill: var(--gplayer-mc-text-color);\n}\n.media-control-skin-1 .media-control-dd__arrow {\n width: 9px;\n height: 6px;\n}\n.media-control-skin-1 .media-control-dd__wrap {\n position: relative;\n}\n.media-control-skin-1 .media-control-dd__popup {\n max-width: 200px;\n list-style-type: none;\n position: absolute;\n box-shadow: 0 0 1px 1px var(--gplayer-mc-popup-border-color);\n border: none;\n min-width: 60px;\n border-radius: 4px;\n bottom: 40px;\n right: -2px;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 5px 0;\n}\n.media-control-skin-1 .media-control-dd__popup li {\n font-size: var(--gplayer-mc-font-size-dropdown);\n text-align: right;\n height: 30px;\n}\n.media-control-skin-1 .media-control-dd__popup li a {\n display: block;\n text-decoration: none;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n padding: 5px 10px;\n line-height: 20px;\n color: #fffffe;\n}\n.media-control-skin-1 .media-control-dd__popup li a:hover {\n text-decoration: none;\n background-color: rgba(0, 0, 0, 0.4);\n color: var(--gplayer-mc-text-color);\n}\n.media-control-skin-1 .media-control-dd__popup li.current a {\n color: #f00;\n}\n.media-control-skin-1 .media-control-dd__popup li:first-child a {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.media-control-skin-1 .media-control-dd__popup li:last-child a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n\n@keyframes pulse {\n 0% {\n color: #fff;\n }\n 50% {\n color: #ff0101;\n }\n 100% {\n color: #B80000;\n }\n}");
|
|
51708
|
+
|
|
51709
|
+
const mediaControlHTML = "<div class=\"media-control-background\" data-background></div>\n\n<div class=\"media-control-layer gcore-skin-bg-color\" data-controls>\n <% var renderBar = function(name) { %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1\" data-<%= name %>></div>\n <div class=\"bar-fill-2 gcore-skin-main-color\" data-<%= name %>></div>\n <div class=\"bar-hover\" data-<%= name %>></div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n </div>\n <% }; %>\n <% var renderSegmentedBar = function(name, segments) {\n segments = segments || 10; %>\n <div class=\"bar-container\" data-<%= name %>>\n <div class=\"bar-background\" data-<%= name %>>\n <div class=\"bar-fill-1 gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n <div class=\"bar-scrubber\" data-<%= name %>>\n <div class=\"bar-scrubber-icon gcore-skin-main-color\" data-<%= name %>></div>\n </div>\n </div>\n <% }; %>\n <% var renderDrawer = function(name, renderContent) { %>\n <div class=\"drawer-container\" data-<%= name %>>\n <div class=\"drawer-icon-container\" data-<%= name %>>\n <div class=\"drawer-icon media-control-icon gcore-skin-button-color\" data-<%= name %>></div>\n <span class=\"drawer-text\" data-<%= name %>></span>\n </div>\n <% renderContent(name); %>\n </div>\n <% }; %>\n <% var renderIndicator = function(name) { %>\n <div class=\"media-control-indicator gcore-skin-text-color\" data-<%= name %>></div>\n <% }; %>\n <% var renderQuality = function(name) { %>\n <div class=\"media-control-quality\" data-<%= name %>></div>\n <% }; %>\n <% var renderNerd = function(name) { %>\n <div class=\"media-control-nerd\" data-<%= name %>></div>\n <% }; %>\n <% var renderMultiCamera = function(name) { %>\n <div class=\"media-control-multicamera\" data-<%= name %>></div>\n <% }; %>\n <% var renderVR = function(name) { %>\n <div class=\"media-control-vr\" data-<%= name %>></div>\n <% }; %>\n <% var renderButton = function(name) { %>\n <button type=\"button\" class=\"media-control-button media-control-icon gcore-skin-button-color\" data-<%= name %>\n aria-label=\"<%= name %>\"></button>\n <% }; %>\n\n <% var templates = {\n bar: renderBar,\n segmentedBar: renderSegmentedBar,\n };\n var render = function (settingsList) {\n settingsList.forEach(function (setting) {\n\n if (setting === \"seekbar\") {\n renderBar(setting);\n } else if (setting === \"volume\") {\n renderDrawer(setting, settings.volumeBarTemplate ? templates[settings.volumeBarTemplate] : function (name) {\n return renderSegmentedBar(name);\n });\n } else if (setting === \"duration\" || setting === \"position\" || setting === \"clips\") {\n renderIndicator(setting);\n } else if (setting === \"quality\") {\n renderQuality(setting)\n } else if (setting === \"nerd\") {\n renderNerd(setting)\n } else if (setting === \"multicamera\") {\n renderMultiCamera(setting)\n } else if (setting === \"vr\") {\n renderVR(setting)\n } else if ([\"playpause\", \"playstop\", \"fullscreen\"].includes(setting)) {\n renderButton(setting);\n }\n });\n }; %>\n <% if (settings.left && settings.left.length) { %>\n <div class=\"media-control-left-panel\" data-media-control>\n <% render(settings.left); %>\n </div>\n <% } %>\n <% if (settings.default && settings.default.length) { %>\n <div class=\"media-control-center-panel\" data-media-control>\n <% render(settings.default); %>\n </div>\n <% } %>\n <% if (settings.right && settings.right.length) { %>\n <div class=\"media-control-right-panel\" data-media-control>\n <% render(settings.right); %>\n </div>\n <% } %>\n</div>\n";
|
|
51710
|
+
|
|
51711
|
+
const playIcon = "<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_1564)\">\n <path d=\"M6 3V20L19.3571 11.5L6 3Z\" fill=\"#C9C9C9\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_28_1564\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>\n";
|
|
51712
|
+
|
|
51713
|
+
const pauseIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.05 3H15.35C14.6057 3 14 3.6057 14 4.35V19.65C14 20.3943 14.6057 21 15.35 21H18.05C18.7943 21 19.4 20.3943 19.4 19.65V4.35C19.4 3.6057 18.7943 3 18.05 3ZM10.4 4.35V19.65C10.4 20.3943 9.7943 21 9.05 21H6.35C5.6057 21 5 20.3943 5 19.65V4.35C5 3.6057 5.6057 3 6.35 3H9.05C9.7943 3 10.4 3.6057 10.4 4.35Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
51714
|
+
|
|
51715
|
+
const stopIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#C9C9C9\" d=\"M4.568 3.86h14.9v16.28h-14.9z\"/>\n</svg>\n";
|
|
51716
|
+
|
|
51717
|
+
const volumeMaxIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14.187 7.71405C13.759 8.06405 13.697 8.69307 14.046 9.12107C14.662 9.87207 15 10.8941 15 11.9961C15 13.0991 14.662 14.1201 14.046 14.8711C13.697 15.2991 13.759 15.9291 14.187 16.2781C14.373 16.4311 14.597 16.5051 14.82 16.5051C15.109 16.5051 15.396 16.3801 15.594 16.1391C16.501 15.0301 17 13.5601 17 11.9961C17 10.4331 16.501 8.96207 15.594 7.85407C15.245 7.42707 14.614 7.36405 14.187 7.71405ZM19.772 5.14408C19.443 4.70008 18.816 4.60907 18.374 4.94007C17.931 5.27007 17.839 5.89605 18.169 6.33905C19.367 7.94705 20 9.90307 20 11.9961C20 14.0891 19.367 16.0451 18.169 17.6531C17.839 18.0971 17.931 18.7231 18.374 19.0531C18.553 19.1871 18.762 19.2511 18.97 19.2511C19.275 19.2511 19.576 19.1121 19.772 18.8491C21.23 16.8921 22 14.5231 22 11.9961C22 9.47007 21.23 7.10108 19.772 5.14408ZM12 3.85108V20.1421C12 20.4881 11.793 20.7971 11.473 20.9291C11.368 20.9721 11.258 20.9921 11.149 20.9921C10.926 20.9921 10.708 20.9031 10.544 20.7371L6.317 16.4431C6.038 16.1591 5.648 15.9961 5.249 15.9961H3.5C2.673 15.9961 2 15.3231 2 14.4961V9.49607C2 8.66907 2.673 7.99607 3.5 7.99607H5.249C5.648 7.99607 6.038 7.83308 6.317 7.54908L10.544 3.25507C10.787 3.00807 11.151 2.93206 11.473 3.06406C11.793 3.19506 12 3.50408 12 3.85108Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
51718
|
+
|
|
51719
|
+
const volumeMuteIcon = "<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";
|
|
51720
|
+
|
|
51721
|
+
const fullscreenOffIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M17.1999 4.85023H21.1498V8.80019C21.1498 9.0786 21.2604 9.34577 21.4574 9.54268C21.6283 9.71365 21.8523 9.81956 22.0906 9.84449L22.0965 9.85041H22.2001C22.4785 9.85041 22.7456 9.73981 22.9426 9.5429C23.1395 9.346 23.2501 9.07883 23.2501 8.80042V3.80024C23.2501 3.52182 23.1395 3.25465 22.9426 3.05775L22.7658 3.23453L22.9426 3.05775C22.7456 2.86085 22.4785 2.75024 22.2001 2.75024H17.1999C16.8247 2.75024 16.478 2.95039 16.2905 3.27526C16.103 3.6001 16.103 4.00037 16.2905 4.32521C16.478 4.65009 16.8247 4.85023 17.1999 4.85023Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n <path\n d=\"M1.79999 9.85017H1.90368L1.90961 9.84423C2.14785 9.81928 2.37176 9.71338 2.54271 9.54243C2.73961 9.34553 2.85021 9.07836 2.85021 8.79995V4.84999H6.80017C7.17536 4.84999 7.52201 4.64984 7.70953 4.32497C7.89703 4.00013 7.89703 3.59986 7.70953 3.27502C7.52201 2.95014 7.17537 2.75 6.80017 2.75H1.79999C1.52158 2.75 1.25441 2.8606 1.05751 3.05751C0.860605 3.25441 0.75 3.52158 0.75 3.79999V8.80017C0.75 9.07859 0.860605 9.34576 1.05751 9.54266C1.25441 9.73956 1.52158 9.85017 1.79999 9.85017Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n <path\n d=\"M21.1496 18.7498H17.1996C16.8245 18.7498 16.4778 18.95 16.2903 19.2748C16.1028 19.5997 16.1028 19.9999 16.2903 20.3248C16.4778 20.6497 16.8244 20.8498 17.1996 20.8498H21.5963L21.596 20.85H22.1996C22.478 20.85 22.7452 20.7394 22.9421 20.5425C23.139 20.3456 23.2496 20.0785 23.2496 19.8V14.7999C23.2496 14.4247 23.0494 14.078 22.7246 13.8905C22.3997 13.703 21.9995 13.703 21.6746 13.8905C21.3497 14.078 21.1496 14.4247 21.1496 14.7999V18.7498Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n <path\n d=\"M2.85003 18.7498H6.79999C7.17518 18.7498 7.52183 18.95 7.70935 19.2748C7.89685 19.5997 7.89685 19.9999 7.70935 20.3248C7.52183 20.6497 7.17519 20.8498 6.79999 20.8498H2.40337L2.40359 20.85H1.80004C1.52163 20.85 1.25446 20.7394 1.05756 20.5425C0.860653 20.3456 0.750049 20.0785 0.750049 19.8V14.7999C0.750049 14.4247 0.950194 14.078 1.27507 13.8905C1.5999 13.703 2.00018 13.703 2.32501 13.8905C2.64989 14.078 2.85003 14.4247 2.85003 14.7999V18.7498Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.5\"/>\n</svg>\n";
|
|
51722
|
+
|
|
51723
|
+
const fullscreenOnIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15.1568 23.15C15.7408 23.15 16.2142 22.6766 16.2142 22.0926V17.1947C16.2142 16.7253 16.5948 16.3447 17.0642 16.3447H21.9621C22.5461 16.3447 23.0195 15.8713 23.0195 15.2873C23.0195 14.7034 22.5461 14.2299 21.9621 14.2299H16.0642C14.9832 14.2299 14.0995 15.1137 14.0995 16.1947V22.0926C14.0995 22.6766 14.5729 23.15 15.1568 23.15Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n <path\n d=\"M1.90739 10.7701H7.80528C8.88627 10.7701 9.77006 9.88627 9.77006 8.80528V2.90739C9.77006 2.32341 9.29665 1.85 8.71267 1.85C8.12869 1.85 7.65528 2.32341 7.65528 2.90739V7.80528C7.65528 8.27472 7.27472 8.65528 6.80528 8.65528H1.90739C1.32341 8.65528 0.85 9.12869 0.85 9.71267C0.85 10.2966 1.32341 10.7701 1.90739 10.7701Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n <path\n d=\"M8.71261 23.15C9.29659 23.15 9.77 22.6766 9.77 22.0926V16.1947C9.77 15.1137 8.88621 14.2299 7.80521 14.2299H1.90733C1.32335 14.2299 0.849939 14.7034 0.849939 15.2873C0.849939 15.8713 1.32335 16.3447 1.90733 16.3447H6.80521C7.27466 16.3447 7.65521 16.7253 7.65521 17.1947V22.0926C7.65521 22.6766 8.12862 23.15 8.71261 23.15Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n <path\n d=\"M21.9621 10.7701C22.5461 10.7701 23.0195 10.2966 23.0195 9.71267C23.0195 9.12869 22.5461 8.65528 21.9621 8.65528H17.0642C16.5948 8.65528 16.2142 8.27472 16.2142 7.80528V2.90739C16.2142 2.32341 15.7408 1.85 15.1568 1.85C14.5729 1.85 14.0995 2.32341 14.0995 2.90739V8.80528C14.0995 9.88627 14.9832 10.7701 16.0642 10.7701H21.9621Z\"\n fill=\"#C9C9C9\" stroke=\"#C9C9C9\" stroke-width=\"0.3\"/>\n</svg>\n";
|
|
51724
|
+
|
|
51650
51725
|
// This is a derived work from the {@link https://github.com/clappr/clappr-plugins/tree/ffaa9d27005fa5a8a7c243ffc47eb5655b84b371/src/plugins/media_control | Clappr MediaControl plugin}
|
|
51651
51726
|
// It is redistributed under the terms of the {@link ../../../../../LICENSE | Apache 2.0} license.
|
|
51652
51727
|
// Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
@@ -51681,7 +51756,7 @@ const INITIAL_SETTINGS = {
|
|
|
51681
51756
|
default: [],
|
|
51682
51757
|
seekEnabled: false,
|
|
51683
51758
|
};
|
|
51684
|
-
const T$
|
|
51759
|
+
const T$5 = 'plugins.media_control';
|
|
51685
51760
|
/**
|
|
51686
51761
|
* Extended events for the {@link MediaControl} plugin
|
|
51687
51762
|
* @public
|
|
@@ -51862,8 +51937,6 @@ class MediaControl extends UICorePlugin {
|
|
|
51862
51937
|
'touchmove .bar-container[data-seekbar]': 'mousemoveOnSeekBar',
|
|
51863
51938
|
'mouseleave .bar-container[data-seekbar]': 'mouseleaveOnSeekBar',
|
|
51864
51939
|
'touchend .bar-container[data-seekbar]': 'mouseleaveOnSeekBar',
|
|
51865
|
-
'mouseenter .media-control-layer[data-controls]': 'setUserKeepVisible',
|
|
51866
|
-
'mouseleave .media-control-layer[data-controls]': 'resetUserKeepVisible',
|
|
51867
51940
|
};
|
|
51868
51941
|
}
|
|
51869
51942
|
get currentSeekPos() {
|
|
@@ -51945,7 +52018,6 @@ class MediaControl extends UICorePlugin {
|
|
|
51945
52018
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PAUSE, this.changeTogglePlay);
|
|
51946
52019
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_STOP, this.changeTogglePlay);
|
|
51947
52020
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_DBLCLICK, this.toggleFullscreen);
|
|
51948
|
-
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_CLICK, () => this.clickaway(this.core.activeContainer.$el[0]));
|
|
51949
52021
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
|
|
51950
52022
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PROGRESS, this.updateProgressBar);
|
|
51951
52023
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_SETTINGSUPDATE, this.updateSettings);
|
|
@@ -51959,12 +52031,10 @@ class MediaControl extends UICorePlugin {
|
|
|
51959
52031
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_LOADEDMETADATA, this.onLoadedMetadata);
|
|
51960
52032
|
this.listenTo(this.core, Events$1.CONTAINER_DESTROYED, () => {
|
|
51961
52033
|
this.cancelRenderTimer();
|
|
52034
|
+
this.setKeepVisible(false);
|
|
51962
52035
|
});
|
|
51963
52036
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_MOUSE_ENTER, this.show);
|
|
51964
52037
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_MOUSE_LEAVE, this.delayHide);
|
|
51965
|
-
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_DESTROYED, () => {
|
|
51966
|
-
this.clickaway(null);
|
|
51967
|
-
});
|
|
51968
52038
|
}
|
|
51969
52039
|
/**
|
|
51970
52040
|
* Hides the media control UI
|
|
@@ -51979,7 +52049,7 @@ class MediaControl extends UICorePlugin {
|
|
|
51979
52049
|
* Reenables the plugin disabled earlier with the {@link MediaControl.disable} method
|
|
51980
52050
|
*/
|
|
51981
52051
|
enable() {
|
|
51982
|
-
trace(`${T$
|
|
52052
|
+
trace(`${T$5} enable`, {
|
|
51983
52053
|
chromeless: this.options.chromeless,
|
|
51984
52054
|
userDisabled: this.userDisabled,
|
|
51985
52055
|
});
|
|
@@ -52095,7 +52165,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52095
52165
|
this.$playPauseToggle?.append(playIcon);
|
|
52096
52166
|
this.$playStopToggle?.append(playIcon);
|
|
52097
52167
|
this.trigger(Events$1.MEDIACONTROL_NOTPLAYING);
|
|
52098
|
-
if (
|
|
52168
|
+
if (isMobile()) {
|
|
52099
52169
|
this.show();
|
|
52100
52170
|
}
|
|
52101
52171
|
}
|
|
@@ -52136,7 +52206,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52136
52206
|
this.$el.removeClass('w370');
|
|
52137
52207
|
this.$el.removeClass('w270');
|
|
52138
52208
|
this.verticalVolume = false;
|
|
52139
|
-
trace(`${T$
|
|
52209
|
+
trace(`${T$5} playerResize`, {
|
|
52140
52210
|
width: this.container.$el.width(),
|
|
52141
52211
|
height: this.container.$el.height(),
|
|
52142
52212
|
hideVolumeBar: this.options.hideVolumeBar});
|
|
@@ -52145,7 +52215,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52145
52215
|
if (skinWidth <= 370 || this.options.hideVolumeBar) {
|
|
52146
52216
|
this.$el.addClass('w370');
|
|
52147
52217
|
}
|
|
52148
|
-
if (skinWidth <= 270 && !
|
|
52218
|
+
if (skinWidth <= 270 && !isMobile()) {
|
|
52149
52219
|
this.verticalVolume = true;
|
|
52150
52220
|
this.$el.addClass('w270');
|
|
52151
52221
|
}
|
|
@@ -52157,6 +52227,15 @@ class MediaControl extends UICorePlugin {
|
|
|
52157
52227
|
this.container.isPlaying() ? this.container.pause() : this.container.play();
|
|
52158
52228
|
return false;
|
|
52159
52229
|
}
|
|
52230
|
+
play() {
|
|
52231
|
+
this.container && this.container.play();
|
|
52232
|
+
}
|
|
52233
|
+
pause() {
|
|
52234
|
+
this.container && this.container.pause();
|
|
52235
|
+
}
|
|
52236
|
+
stop() {
|
|
52237
|
+
this.container && this.container.stop();
|
|
52238
|
+
}
|
|
52160
52239
|
togglePlayStop() {
|
|
52161
52240
|
this.container.isPlaying()
|
|
52162
52241
|
? this.container.stop({ ui: true })
|
|
@@ -52257,11 +52336,11 @@ class MediaControl extends UICorePlugin {
|
|
|
52257
52336
|
}
|
|
52258
52337
|
}
|
|
52259
52338
|
toggleFullscreen() {
|
|
52260
|
-
if (!
|
|
52339
|
+
if (!isMobile()) {
|
|
52261
52340
|
this.trigger(Events$1.MEDIACONTROL_FULLSCREEN, this.name);
|
|
52262
52341
|
this.core.activeContainer.fullscreen();
|
|
52263
52342
|
this.core.toggleFullscreen();
|
|
52264
|
-
this.resetUserKeepVisible()
|
|
52343
|
+
// this.resetUserKeepVisible()
|
|
52265
52344
|
}
|
|
52266
52345
|
}
|
|
52267
52346
|
onActiveContainerChanged() {
|
|
@@ -52382,13 +52461,6 @@ class MediaControl extends UICorePlugin {
|
|
|
52382
52461
|
this.core.activeContainer && this.core.activeContainer.seekPercentage(pos);
|
|
52383
52462
|
this.setSeekPercentage(pos);
|
|
52384
52463
|
}
|
|
52385
|
-
setUserKeepVisible(e) {
|
|
52386
|
-
this.userKeepVisible = true;
|
|
52387
|
-
this.clickaway(this.core.activeContainer.$el[0]);
|
|
52388
|
-
}
|
|
52389
|
-
resetUserKeepVisible = (e) => {
|
|
52390
|
-
this.userKeepVisible = false;
|
|
52391
|
-
};
|
|
52392
52464
|
isVisible() {
|
|
52393
52465
|
return !this.$el.hasClass('media-control-hide');
|
|
52394
52466
|
}
|
|
@@ -52396,7 +52468,6 @@ class MediaControl extends UICorePlugin {
|
|
|
52396
52468
|
if (this.disabled || this.options.disableControlPanel) {
|
|
52397
52469
|
return;
|
|
52398
52470
|
}
|
|
52399
|
-
const timeout = DEFAULT_HIDE_DELAY;
|
|
52400
52471
|
const mousePointerMoved = event &&
|
|
52401
52472
|
event.clientX !== this.lastMouseX &&
|
|
52402
52473
|
event.clientY !== this.lastMouseY;
|
|
@@ -52405,26 +52476,25 @@ class MediaControl extends UICorePlugin {
|
|
|
52405
52476
|
clearTimeout(this.hideId);
|
|
52406
52477
|
this.hideId = null;
|
|
52407
52478
|
}
|
|
52479
|
+
this.hideId = setTimeout(() => this.hide(), DEFAULT_HIDE_DELAY);
|
|
52408
52480
|
this.$el.show();
|
|
52409
52481
|
this.trigger(Events$1.MEDIACONTROL_SHOW, this.name);
|
|
52410
52482
|
this.core.activeContainer?.trigger(Events$1.CONTAINER_MEDIACONTROL_SHOW, this.name);
|
|
52411
52483
|
this.$el.removeClass('media-control-hide');
|
|
52412
|
-
this.hideId = setTimeout(() => this.hide(), timeout);
|
|
52413
52484
|
if (event) {
|
|
52414
52485
|
this.lastMouseX = event.clientX;
|
|
52415
52486
|
this.lastMouseY = event.clientY;
|
|
52416
52487
|
}
|
|
52417
52488
|
}
|
|
52418
|
-
|
|
52419
|
-
this.updateCursorStyle(showing);
|
|
52489
|
+
this.updateCursorStyle(true);
|
|
52420
52490
|
}
|
|
52421
52491
|
hide(delay = 0) {
|
|
52422
52492
|
if (!this.isVisible()) {
|
|
52423
52493
|
return;
|
|
52424
52494
|
}
|
|
52425
|
-
const timeout = delay || 2000;
|
|
52426
52495
|
if (this.hideId !== null) {
|
|
52427
52496
|
clearTimeout(this.hideId);
|
|
52497
|
+
this.hideId = null;
|
|
52428
52498
|
}
|
|
52429
52499
|
if (!this.disabled && this.options.hideMediaControl === false) {
|
|
52430
52500
|
return;
|
|
@@ -52433,7 +52503,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52433
52503
|
const hasDraggingAction = this.draggingSeekBar || this.draggingVolumeBar;
|
|
52434
52504
|
if (!this.disabled &&
|
|
52435
52505
|
(delay || hasKeepVisibleRequested || hasDraggingAction)) {
|
|
52436
|
-
this.hideId = setTimeout(() => this.hide(),
|
|
52506
|
+
this.hideId = setTimeout(() => this.hide(), delay || 2000);
|
|
52437
52507
|
}
|
|
52438
52508
|
else {
|
|
52439
52509
|
if (!this.options.controlsDontHide || isFullscreen(this.container.el)) {
|
|
@@ -52568,19 +52638,13 @@ class MediaControl extends UICorePlugin {
|
|
|
52568
52638
|
/**
|
|
52569
52639
|
* Set or reset the keep visibility state
|
|
52570
52640
|
*
|
|
52571
|
-
* Keep visibility state controls whether the media control is hidden automatically after a delay.
|
|
52572
|
-
* Keep visibility prevents the the auto-hide behaviour
|
|
52641
|
+
* Keep visibility state controls whether the media control is hidden automatically after a delay, which is a default behaviour.
|
|
52573
52642
|
*
|
|
52574
52643
|
* @param keepVisible - The state
|
|
52575
52644
|
*/
|
|
52576
52645
|
setKeepVisible(keepVisible) {
|
|
52577
52646
|
this.keepVisible = keepVisible;
|
|
52578
|
-
|
|
52579
|
-
this.clickaway(this.core.activeContainer.$el[0]);
|
|
52580
|
-
}
|
|
52581
|
-
else {
|
|
52582
|
-
this.clickaway(null);
|
|
52583
|
-
}
|
|
52647
|
+
this.clickaway(keepVisible ? this.core.activeContainer.$el[0] : null);
|
|
52584
52648
|
}
|
|
52585
52649
|
getMountParent(name) {
|
|
52586
52650
|
switch (name) {
|
|
@@ -52661,7 +52725,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52661
52725
|
});
|
|
52662
52726
|
}
|
|
52663
52727
|
bindKeyEvents() {
|
|
52664
|
-
if (
|
|
52728
|
+
if (isMobile() || this.options.disableKeyboardShortcuts) {
|
|
52665
52729
|
return;
|
|
52666
52730
|
}
|
|
52667
52731
|
this.unbindKeyEvents();
|
|
@@ -52748,6 +52812,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52748
52812
|
* @internal
|
|
52749
52813
|
*/
|
|
52750
52814
|
destroy() {
|
|
52815
|
+
this.cancelTimers();
|
|
52751
52816
|
this.cancelRenderTimer();
|
|
52752
52817
|
$(document).unbind('mouseup', this.stopDrag);
|
|
52753
52818
|
$(document).unbind('mousemove', this.updateDrag);
|
|
@@ -52756,6 +52821,17 @@ class MediaControl extends UICorePlugin {
|
|
|
52756
52821
|
this.unbindKeyEvents();
|
|
52757
52822
|
return super.destroy();
|
|
52758
52823
|
}
|
|
52824
|
+
cancelTimers() {
|
|
52825
|
+
if (this.hideId !== null) {
|
|
52826
|
+
clearTimeout(this.hideId);
|
|
52827
|
+
this.hideId = null;
|
|
52828
|
+
}
|
|
52829
|
+
if (this.hideVolumeId !== null) {
|
|
52830
|
+
clearTimeout(this.hideVolumeId);
|
|
52831
|
+
this.hideVolumeId = null;
|
|
52832
|
+
}
|
|
52833
|
+
this.cancelRenderTimer();
|
|
52834
|
+
}
|
|
52759
52835
|
cancelRenderTimer() {
|
|
52760
52836
|
if (this.renderTimerId) {
|
|
52761
52837
|
clearTimeout(this.renderTimerId);
|
|
@@ -52785,7 +52861,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52785
52861
|
}
|
|
52786
52862
|
// Video volume cannot be changed with Safari on mobile devices
|
|
52787
52863
|
// Display mute/unmute icon only if Safari version >= 10
|
|
52788
|
-
if (Browser.isSafari &&
|
|
52864
|
+
if (Browser.isSafari && isMobile()) {
|
|
52789
52865
|
if (Browser.version < 10) {
|
|
52790
52866
|
this.$volumeContainer?.css({ display: 'none' });
|
|
52791
52867
|
}
|
|
@@ -52802,7 +52878,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52802
52878
|
setTimeout(() => {
|
|
52803
52879
|
!this.settings.seekEnabled &&
|
|
52804
52880
|
this.$seekBarContainer?.addClass('seek-disabled');
|
|
52805
|
-
!
|
|
52881
|
+
!isMobile() &&
|
|
52806
52882
|
!this.options.disableKeyboardShortcuts &&
|
|
52807
52883
|
this.bindKeyEvents();
|
|
52808
52884
|
this.playerResize({
|
|
@@ -52826,6 +52902,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52826
52902
|
this.container.fullscreen();
|
|
52827
52903
|
// TODO: fix after it full screen will be fixed on iOS
|
|
52828
52904
|
if (Browser.isiOS) {
|
|
52905
|
+
// TODO use isFullscreen utility function
|
|
52829
52906
|
if (this.core.isFullscreen()) {
|
|
52830
52907
|
Fullscreen.cancelFullscreen(this.core.el);
|
|
52831
52908
|
}
|
|
@@ -52836,7 +52913,6 @@ class MediaControl extends UICorePlugin {
|
|
|
52836
52913
|
else {
|
|
52837
52914
|
this.core.toggleFullscreen();
|
|
52838
52915
|
}
|
|
52839
|
-
this.resetUserKeepVisible();
|
|
52840
52916
|
}
|
|
52841
52917
|
static getPageX(event) {
|
|
52842
52918
|
return getPageX(event);
|
|
@@ -52881,7 +52957,7 @@ class MediaControl extends UICorePlugin {
|
|
|
52881
52957
|
delayHide() {
|
|
52882
52958
|
this.hide(this.options.hideMediaControlDelay || DEFAULT_HIDE_DELAY);
|
|
52883
52959
|
}
|
|
52884
|
-
clickaway = mediaControlClickaway(() => this.
|
|
52960
|
+
clickaway = mediaControlClickaway(() => this.setKeepVisible(false));
|
|
52885
52961
|
}
|
|
52886
52962
|
MediaControl.extend = function (properties) {
|
|
52887
52963
|
return extend(MediaControl, properties);
|
|
@@ -53130,7 +53206,7 @@ const templateHtml$2 = "<div class=\"big-mute-icon-wrapper\" data-big-mute id=\"
|
|
|
53130
53206
|
|
|
53131
53207
|
insertStyle(".big-mute-icon-wrapper[data-big-mute] {\n position: absolute;\n z-index: 9998;\n background-color: transparent;\n display: flex;\n justify-content: center;\n width: 100%;\n height: calc(100% - 50px);\n margin: 0 auto;\n opacity: 0.75;\n transition: opacity 0.1s ease;\n pointer-events: auto;\n}\n.big-mute-icon-wrapper[data-big-mute].hide {\n display: none;\n}\n.big-mute-icon-wrapper[data-big-mute]:hover {\n cursor: pointer;\n}\n\n.big-mute-icon[data-big-mute-icon] {\n display: flex;\n align-items: center;\n justify-content: center;\n align-self: center;\n width: 120px;\n height: 120px;\n border: 2px solid white;\n border-radius: 50%;\n filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\";\n filter: alpha(opacity=60);\n opacity: 1;\n box-shadow: 0 0 1px 0 white;\n background: rgba(240, 243, 247, 0.9411764706);\n z-index: 10000;\n}\n.big-mute-icon[data-big-mute-icon] svg {\n margin-left: 5px;\n width: 80px;\n height: 80px;\n}\n.big-mute-icon[data-big-mute-icon] svg path {\n fill: #1f1e1e !important;\n}\n.big-mute-icon[data-big-mute-icon]:hover {\n background: rgba(240, 243, 247, 0.8784313725);\n}\n.big-mute-icon[data-big-mute-icon]:hover svg path {\n fill: #151515 !important;\n}");
|
|
53132
53208
|
|
|
53133
|
-
const T$
|
|
53209
|
+
const T$4 = 'plugins.big_mute_button';
|
|
53134
53210
|
// TODO rewrite as a container plugin
|
|
53135
53211
|
/**
|
|
53136
53212
|
* `PLUGIN` that displays a big mute button over the video when it's being played muted.
|
|
@@ -53193,7 +53269,7 @@ class BigMuteButton extends UICorePlugin {
|
|
|
53193
53269
|
if (autoPlay) {
|
|
53194
53270
|
this.autoPlay = true;
|
|
53195
53271
|
}
|
|
53196
|
-
trace(`${T$
|
|
53272
|
+
trace(`${T$4} onPlay`, {
|
|
53197
53273
|
autoPlay: this.autoPlay});
|
|
53198
53274
|
if (this.autoPlay && !wasMuted && volume === 0) {
|
|
53199
53275
|
this.mount();
|
|
@@ -55909,7 +55985,7 @@ const PLAYBACK_NAMES = {
|
|
|
55909
55985
|
hls: 'HLS.js',
|
|
55910
55986
|
html5_video: 'Native',
|
|
55911
55987
|
};
|
|
55912
|
-
const T$
|
|
55988
|
+
const T$3 = 'plugins.nerd_stats';
|
|
55913
55989
|
/**
|
|
55914
55990
|
* `PLUGIN` that displays useful statistics regarding the playback as well as the network quality estimation.
|
|
55915
55991
|
* @public
|
|
@@ -56046,7 +56122,7 @@ class NerdStats extends UICorePlugin {
|
|
|
56046
56122
|
return super.destroy();
|
|
56047
56123
|
}
|
|
56048
56124
|
toggle = () => {
|
|
56049
|
-
trace(`${T$
|
|
56125
|
+
trace(`${T$3} toggle`, {
|
|
56050
56126
|
open: this.open,
|
|
56051
56127
|
});
|
|
56052
56128
|
if (this.open) {
|
|
@@ -56940,7 +57016,7 @@ const buttonHtml$2 = "<button class=\"gplayer-lite-btn gcore-skin-button-color\"
|
|
|
56940
57016
|
insertStyle(".media-control-skin-1 .media-control-item.media-control-pip {\n order: 95;\n}\n.media-control-skin-1 .media-control-item.media-control-pip button {\n height: 20px;\n}\n.media-control-skin-1 .media-control-item.media-control-pip button svg {\n height: 20px;\n}");
|
|
56941
57017
|
|
|
56942
57018
|
const VERSION$3 = '0.0.1';
|
|
56943
|
-
const T$
|
|
57019
|
+
const T$2 = `plugins.pip`;
|
|
56944
57020
|
/**
|
|
56945
57021
|
* `PLUGIN` that enables picture-in-picture mode.
|
|
56946
57022
|
* @public
|
|
@@ -57024,7 +57100,7 @@ class PictureInPicture extends UICorePlugin {
|
|
|
57024
57100
|
}
|
|
57025
57101
|
}
|
|
57026
57102
|
requestPictureInPicture() {
|
|
57027
|
-
trace(`${T$
|
|
57103
|
+
trace(`${T$2} requestPictureInPicture`, {
|
|
57028
57104
|
videoElement: !!this.videoElement,
|
|
57029
57105
|
});
|
|
57030
57106
|
this.videoElement.requestPictureInPicture();
|
|
@@ -57056,7 +57132,7 @@ const DEFAULT_PLAYBACK_RATES = [
|
|
|
57056
57132
|
{ value: 2.0, label: '2x' },
|
|
57057
57133
|
];
|
|
57058
57134
|
const DEFAULT_PLAYBACK_RATE = 1;
|
|
57059
|
-
const T$
|
|
57135
|
+
const T$1 = 'plugins.playback_rate';
|
|
57060
57136
|
/**
|
|
57061
57137
|
* `PLUGIN` that allows changing the playback speed of the video.
|
|
57062
57138
|
* @public
|
|
@@ -57163,7 +57239,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
57163
57239
|
this.mount();
|
|
57164
57240
|
}
|
|
57165
57241
|
mount() {
|
|
57166
|
-
trace(`${T$
|
|
57242
|
+
trace(`${T$1} mount`, {
|
|
57167
57243
|
shouldMount: this.shouldMount(),
|
|
57168
57244
|
});
|
|
57169
57245
|
if (!this.shouldMount()) {
|
|
@@ -57180,7 +57256,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
57180
57256
|
})));
|
|
57181
57257
|
}
|
|
57182
57258
|
onMetaDataLoaded() {
|
|
57183
|
-
trace(`${T$
|
|
57259
|
+
trace(`${T$1} onMetaDataLoaded`, {
|
|
57184
57260
|
playbackType: this.core.activePlayback.getPlaybackType(),
|
|
57185
57261
|
dvrEnabled: this.core.activePlayback.dvrEnabled,
|
|
57186
57262
|
});
|
|
@@ -57202,7 +57278,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
57202
57278
|
this.core.activePlayback?.setPlaybackRate(this.selectedRate);
|
|
57203
57279
|
}
|
|
57204
57280
|
else {
|
|
57205
|
-
trace(`${T$
|
|
57281
|
+
trace(`${T$1} onPlaybackRateChange not steering to the selected rate, it is seemingly a catchup algorithm working`, {
|
|
57206
57282
|
selectedRate: this.selectedRate,
|
|
57207
57283
|
});
|
|
57208
57284
|
}
|
|
@@ -57264,13 +57340,13 @@ class PlaybackRate extends UICorePlugin {
|
|
|
57264
57340
|
}
|
|
57265
57341
|
}
|
|
57266
57342
|
syncRate() {
|
|
57267
|
-
trace(`${T$
|
|
57343
|
+
trace(`${T$1} syncRate`, {
|
|
57268
57344
|
selectedRate: this.selectedRate,
|
|
57269
57345
|
});
|
|
57270
57346
|
this.core.activePlayback?.setPlaybackRate(this.selectedRate);
|
|
57271
57347
|
}
|
|
57272
57348
|
resetPlaybackRate() {
|
|
57273
|
-
trace(`${T$
|
|
57349
|
+
trace(`${T$1} resetPlaybackRate`, {
|
|
57274
57350
|
selectedRate: this.selectedRate,
|
|
57275
57351
|
});
|
|
57276
57352
|
this.core.activePlayback?.setPlaybackRate(DEFAULT_PLAYBACK_RATE);
|
|
@@ -57305,7 +57381,7 @@ class PlaybackRate extends UICorePlugin {
|
|
|
57305
57381
|
?.label || `x${rate}`);
|
|
57306
57382
|
}
|
|
57307
57383
|
highlightCurrentRate() {
|
|
57308
|
-
trace(`${T$
|
|
57384
|
+
trace(`${T$1} highlightCurrentRate`, {
|
|
57309
57385
|
selectedRate: this.selectedRate,
|
|
57310
57386
|
});
|
|
57311
57387
|
this.allRateElements().removeClass('current');
|
|
@@ -58219,7 +58295,7 @@ class SpinnerThreeBounce extends UIContainerPlugin {
|
|
|
58219
58295
|
}
|
|
58220
58296
|
}
|
|
58221
58297
|
|
|
58222
|
-
const T
|
|
58298
|
+
const T = 'plugins.source_controller';
|
|
58223
58299
|
const INITIAL_RETRY_DELAY = 1000;
|
|
58224
58300
|
const MAX_RETRY_DELAY = 5000;
|
|
58225
58301
|
const RETRY_DELAY_BLUR = 500;
|
|
@@ -58392,7 +58468,7 @@ class SourceController extends CorePlugin {
|
|
|
58392
58468
|
}
|
|
58393
58469
|
bindContainerEventListeners() {
|
|
58394
58470
|
this.core.activePlayback.on(Events$1.PLAYBACK_ERROR, (error) => {
|
|
58395
|
-
trace(`${T
|
|
58471
|
+
trace(`${T} on PLAYBACK_ERROR`, {
|
|
58396
58472
|
error: {
|
|
58397
58473
|
code: error?.code,
|
|
58398
58474
|
description: error?.description,
|
|
@@ -58416,7 +58492,7 @@ class SourceController extends CorePlugin {
|
|
|
58416
58492
|
}
|
|
58417
58493
|
});
|
|
58418
58494
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_PLAY, (_, { autoPlay }) => {
|
|
58419
|
-
trace(`${T
|
|
58495
|
+
trace(`${T} onContainerPlay`, {
|
|
58420
58496
|
currentSource: this.sourcesList[this.currentSourceIndex],
|
|
58421
58497
|
retrying: this.active,
|
|
58422
58498
|
});
|
|
@@ -58433,7 +58509,7 @@ class SourceController extends CorePlugin {
|
|
|
58433
58509
|
this.sourcesDelay = {};
|
|
58434
58510
|
}
|
|
58435
58511
|
retryPlayback() {
|
|
58436
|
-
trace(`${T
|
|
58512
|
+
trace(`${T} retryPlayback enter`, {
|
|
58437
58513
|
currentSourceIndex: this.currentSourceIndex,
|
|
58438
58514
|
currentSource: this.sourcesList[this.currentSourceIndex],
|
|
58439
58515
|
});
|
|
@@ -58446,7 +58522,7 @@ class SourceController extends CorePlugin {
|
|
|
58446
58522
|
this.switching = false;
|
|
58447
58523
|
this.core.load(nextSource.source, nextSource.mimeType);
|
|
58448
58524
|
setTimeout(() => {
|
|
58449
|
-
trace(`${T
|
|
58525
|
+
trace(`${T} retryPlayback playing`, {
|
|
58450
58526
|
autoPlay: this.autoPlay});
|
|
58451
58527
|
this.core.activeContainer.play({
|
|
58452
58528
|
autoPlay: this.autoPlay,
|
|
@@ -58485,7 +58561,6 @@ const stringHTML = "<div class=\"gplayer-cc-line\" id=\"gplayer-cc-line\">\n <p
|
|
|
58485
58561
|
|
|
58486
58562
|
const VERSION = '2.19.14';
|
|
58487
58563
|
const LOCAL_STORAGE_CC_ID = 'gplayer.plugins.cc.selected';
|
|
58488
|
-
const T = 'plugins.cc';
|
|
58489
58564
|
/**
|
|
58490
58565
|
* `PLUGIN` that provides a UI to select the subtitles when available.
|
|
58491
58566
|
* @public
|
|
@@ -58580,6 +58655,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58580
58655
|
bindEvents() {
|
|
58581
58656
|
this.listenTo(this.core, Events$1.CORE_READY, this.onCoreReady);
|
|
58582
58657
|
this.listenTo(this.core, Events$1.CORE_ACTIVE_CONTAINER_CHANGED, this.onContainerChanged);
|
|
58658
|
+
this.listenTo(this.core, Events$1.PLAYBACK_READY, this.onPlaybackReady);
|
|
58583
58659
|
}
|
|
58584
58660
|
onCoreReady() {
|
|
58585
58661
|
const mediaControl = this.core.getPlugin('media_control');
|
|
@@ -58593,18 +58669,15 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58593
58669
|
this.hideMenu();
|
|
58594
58670
|
}
|
|
58595
58671
|
});
|
|
58672
|
+
this.onPlaybackReady();
|
|
58596
58673
|
}
|
|
58597
58674
|
onContainerChanged() {
|
|
58675
|
+
this.tracks = [];
|
|
58598
58676
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_FULLSCREEN, this.onContainerResize);
|
|
58599
58677
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_RESIZE, this.onContainerResize);
|
|
58600
58678
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_DESTROYED, () => {
|
|
58601
58679
|
this.clickaway(null);
|
|
58602
58680
|
});
|
|
58603
|
-
// this.listenTo(
|
|
58604
|
-
// this.core.activeContainer,
|
|
58605
|
-
// 'container:advertisement:start',
|
|
58606
|
-
// this.onStartAd,
|
|
58607
|
-
// )
|
|
58608
58681
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_SUBTITLE_AVAILABLE, this.onSubtitleAvailable);
|
|
58609
58682
|
this.listenTo(this.core.activePlayback, Events$1.PLAYBACK_SUBTITLE_CHANGED, this.onSubtitleChanged);
|
|
58610
58683
|
this.listenTo(this.core.activeContainer, Events$1.CONTAINER_CLICK, () => {
|
|
@@ -58626,23 +58699,32 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58626
58699
|
});
|
|
58627
58700
|
this.isPreselectedApplied = false;
|
|
58628
58701
|
}
|
|
58702
|
+
onPlaybackReady() {
|
|
58703
|
+
this.core.activePlayback.oncueenter = (e) => {
|
|
58704
|
+
this.setSubtitleText(e.text);
|
|
58705
|
+
};
|
|
58706
|
+
this.core.activePlayback.oncueexit = () => {
|
|
58707
|
+
this.clearSubtitleText();
|
|
58708
|
+
};
|
|
58709
|
+
}
|
|
58629
58710
|
onSubtitleAvailable() {
|
|
58630
|
-
trace(`${T} onSubtitleAvailable`, {
|
|
58631
|
-
tracks: this.core.activePlayback.closedCaptionsTracks.length,
|
|
58632
|
-
});
|
|
58633
58711
|
this.applyTracks();
|
|
58634
58712
|
this.mount();
|
|
58635
58713
|
}
|
|
58636
58714
|
onSubtitleChanged({ id: changedId }) {
|
|
58637
58715
|
// ignoring the subtitle selected by the playback engine or user agent
|
|
58638
|
-
const id = this.
|
|
58716
|
+
const id = this.currentTrack?.id ?? -1;
|
|
58639
58717
|
if (id === -1) {
|
|
58640
58718
|
this.clearSubtitleText();
|
|
58641
58719
|
}
|
|
58642
58720
|
this.activateTrack(id);
|
|
58643
58721
|
}
|
|
58644
58722
|
activateTrack(id) {
|
|
58645
|
-
|
|
58723
|
+
if (['dash', 'hls'].includes(this.core.activePlayback?.name)) {
|
|
58724
|
+
this.core.activePlayback.setTextTrack(id);
|
|
58725
|
+
return;
|
|
58726
|
+
}
|
|
58727
|
+
for (const track of this.currentTracks) {
|
|
58646
58728
|
if (track.id === id) {
|
|
58647
58729
|
if (this.useNativeSubtitles) {
|
|
58648
58730
|
track.track.mode = 'showing';
|
|
@@ -58666,43 +58748,26 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58666
58748
|
};
|
|
58667
58749
|
}
|
|
58668
58750
|
else {
|
|
58669
|
-
track.track.oncuechange =
|
|
58751
|
+
track.track.oncuechange = () => { };
|
|
58670
58752
|
track.track.mode = 'disabled';
|
|
58671
58753
|
}
|
|
58672
58754
|
}
|
|
58673
58755
|
}
|
|
58674
58756
|
applyTracks() {
|
|
58675
58757
|
try {
|
|
58676
|
-
|
|
58758
|
+
// TODO ensure to apply only once
|
|
58759
|
+
this.currentTracks = this.core.activePlayback.closedCaptionsTracks;
|
|
58677
58760
|
this.applyPreselectedSubtitles();
|
|
58678
58761
|
this.render();
|
|
58679
58762
|
}
|
|
58680
58763
|
catch (error) {
|
|
58681
58764
|
}
|
|
58682
58765
|
}
|
|
58683
|
-
// private onStartAd() {
|
|
58684
|
-
// if (this.active && this.core.activeContainer) {
|
|
58685
|
-
// this.hide()
|
|
58686
|
-
// this.listenTo(
|
|
58687
|
-
// this.core.activeContainer,
|
|
58688
|
-
// 'container:advertisement:finish',
|
|
58689
|
-
// this.onFinishAd,
|
|
58690
|
-
// )
|
|
58691
|
-
// }
|
|
58692
|
-
// }
|
|
58693
|
-
// private onFinishAd() {
|
|
58694
|
-
// this.show()
|
|
58695
|
-
// this.stopListening(
|
|
58696
|
-
// this.core.activeContainer,
|
|
58697
|
-
// 'container:advertisement:finish',
|
|
58698
|
-
// this.onFinishAd,
|
|
58699
|
-
// )
|
|
58700
|
-
// }
|
|
58701
58766
|
onContainerResize() {
|
|
58702
58767
|
const shouldShow = this.core.activeContainer &&
|
|
58703
58768
|
isFullscreen(this.core.activeContainer.el) &&
|
|
58704
|
-
this.
|
|
58705
|
-
this.
|
|
58769
|
+
this.currentTrack &&
|
|
58770
|
+
this.currentTrack.track.mode &&
|
|
58706
58771
|
Browser.isiOS &&
|
|
58707
58772
|
this.active;
|
|
58708
58773
|
if (shouldShow) {
|
|
@@ -58725,10 +58790,8 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58725
58790
|
this.$el.find('#gplayer-cc-menu').hide();
|
|
58726
58791
|
this.$el.find('#gplayer-cc-button').attr('aria-expanded', 'false');
|
|
58727
58792
|
this.$line.hide();
|
|
58728
|
-
|
|
58729
|
-
|
|
58730
|
-
t.track.mode = 'hidden';
|
|
58731
|
-
}
|
|
58793
|
+
for (const track of this.currentTracks) {
|
|
58794
|
+
track.track.mode = 'hidden';
|
|
58732
58795
|
}
|
|
58733
58796
|
}
|
|
58734
58797
|
/**
|
|
@@ -58739,18 +58802,19 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58739
58802
|
this.renderIcon();
|
|
58740
58803
|
if (this.core.activeContainer &&
|
|
58741
58804
|
isFullscreen(this.core.activeContainer.el) &&
|
|
58742
|
-
this.
|
|
58743
|
-
this.
|
|
58805
|
+
this.currentTrack &&
|
|
58806
|
+
// this.currentTrack.track.mode &&
|
|
58744
58807
|
(Browser.isiOS || this.useNativeSubtitles)) {
|
|
58745
58808
|
this.$line.hide();
|
|
58746
|
-
this.
|
|
58809
|
+
this.currentTrack.track.mode = 'showing';
|
|
58747
58810
|
}
|
|
58748
58811
|
else {
|
|
58749
58812
|
this.$line.show();
|
|
58750
58813
|
}
|
|
58751
58814
|
}
|
|
58752
58815
|
shouldRender() {
|
|
58753
|
-
|
|
58816
|
+
// this might not have been fully initialized yet since `render` is called from the parent class constructor
|
|
58817
|
+
return this.currentTracks?.length > 0;
|
|
58754
58818
|
}
|
|
58755
58819
|
resizeFont() {
|
|
58756
58820
|
if (!this.$line) {
|
|
@@ -58763,13 +58827,16 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58763
58827
|
* @internal
|
|
58764
58828
|
*/
|
|
58765
58829
|
render() {
|
|
58830
|
+
if (!this.shouldRender()) {
|
|
58831
|
+
return this;
|
|
58832
|
+
}
|
|
58766
58833
|
if (!this.core.activeContainer) {
|
|
58767
58834
|
return this;
|
|
58768
58835
|
}
|
|
58769
58836
|
this.$el.html(ClosedCaptions.templateControl({
|
|
58770
|
-
tracks: this.
|
|
58837
|
+
tracks: this.currentTracks,
|
|
58771
58838
|
i18n: this.core.i18n,
|
|
58772
|
-
current: this.
|
|
58839
|
+
current: this.currentTrack?.id ?? -1,
|
|
58773
58840
|
}));
|
|
58774
58841
|
this.$el.find('#gplayer-cc-menu').hide();
|
|
58775
58842
|
this.open = false;
|
|
@@ -58783,11 +58850,11 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58783
58850
|
return this;
|
|
58784
58851
|
}
|
|
58785
58852
|
findById(id) {
|
|
58786
|
-
return this.
|
|
58853
|
+
return this.currentTracks.find((track) => track.id === id) || null;
|
|
58787
58854
|
}
|
|
58788
58855
|
selectItem(item) {
|
|
58789
58856
|
this.clearSubtitleText();
|
|
58790
|
-
this.
|
|
58857
|
+
this.currentTrack = item;
|
|
58791
58858
|
const trackId = item?.id ?? -1;
|
|
58792
58859
|
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
58793
58860
|
this.updateSelection();
|
|
@@ -58844,7 +58911,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58844
58911
|
return this.$el.find('#gplayer-cc-menu li'); // TODO fix semantically
|
|
58845
58912
|
}
|
|
58846
58913
|
selectSubtitles() {
|
|
58847
|
-
const trackId = this.
|
|
58914
|
+
const trackId = this.currentTrack?.id ?? -1;
|
|
58848
58915
|
// TODO find out if this is needed
|
|
58849
58916
|
this.core.activePlayback.closedCaptionsTrackId = trackId;
|
|
58850
58917
|
// this.core.activePlayback.closedCaptionsTrackId = -1
|
|
@@ -58870,7 +58937,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58870
58937
|
this.setSubtitleText('');
|
|
58871
58938
|
}
|
|
58872
58939
|
updateSelection() {
|
|
58873
|
-
if (!this.
|
|
58940
|
+
if (!this.currentTrack) {
|
|
58874
58941
|
this.hide();
|
|
58875
58942
|
}
|
|
58876
58943
|
else {
|
|
@@ -58885,7 +58952,7 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58885
58952
|
.find('a')
|
|
58886
58953
|
.removeClass('gcore-skin-active')
|
|
58887
58954
|
.attr('aria-checked', 'false');
|
|
58888
|
-
const currentLevelElement = this.itemElement(this.
|
|
58955
|
+
const currentLevelElement = this.itemElement(this.currentTrack?.id ?? -1);
|
|
58889
58956
|
currentLevelElement
|
|
58890
58957
|
.addClass('current')
|
|
58891
58958
|
.find('a')
|
|
@@ -58910,15 +58977,28 @@ class ClosedCaptions extends UICorePlugin {
|
|
|
58910
58977
|
}
|
|
58911
58978
|
}
|
|
58912
58979
|
get useNativeSubtitles() {
|
|
58913
|
-
if (this.core.activePlayback?.name === 'dash') {
|
|
58914
|
-
return true;
|
|
58915
|
-
}
|
|
58916
58980
|
const mode = this.core.options.cc?.mode ??
|
|
58917
58981
|
this.core.options.subtitles?.mode ??
|
|
58918
58982
|
'custom';
|
|
58919
58983
|
// TODO or Safari? or iOS?
|
|
58920
58984
|
return mode === 'native';
|
|
58921
58985
|
}
|
|
58986
|
+
get currentTracks() {
|
|
58987
|
+
return this.tracks;
|
|
58988
|
+
}
|
|
58989
|
+
get currentTrack() {
|
|
58990
|
+
return this.track;
|
|
58991
|
+
}
|
|
58992
|
+
set currentTrack(track) {
|
|
58993
|
+
this.track = track;
|
|
58994
|
+
}
|
|
58995
|
+
set currentTracks(tracks) {
|
|
58996
|
+
this.tracks = tracks.map(track => ({
|
|
58997
|
+
id: track.id,
|
|
58998
|
+
name: !track.name || track.name === "null" ? track.track.language : track.name,
|
|
58999
|
+
track: track.track,
|
|
59000
|
+
}));
|
|
59001
|
+
}
|
|
58922
59002
|
clickaway = mediaControlClickaway(() => this.hideMenu());
|
|
58923
59003
|
}
|
|
58924
59004
|
|