@gcorevideo/player 2.22.20 → 2.22.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/clappr-nerd-stats/clappr-nerd-stats.ejs +30 -30
- package/assets/clappr-nerd-stats/clappr-nerd-stats.scss +21 -14
- package/assets/level-selector/button.ejs +1 -1
- package/dist/core.js +1 -1
- package/dist/index.css +696 -688
- package/dist/index.js +271 -247
- package/dist/player.d.ts +57 -27
- package/dist/plugins/index.css +335 -327
- package/dist/plugins/index.js +109 -89
- package/docs/api/{player.bitratetrackrecord.md → player.clapprstatsbitratetrack.md} +3 -3
- package/docs/api/player.clapprstatsmetrics.md +2 -2
- package/docs/api/player.extendedevents.md +45 -0
- package/docs/api/player.gearevents.md +1 -1
- package/docs/api/player.md +22 -2
- package/docs/api/player.mediacontrol.mount.md +0 -5
- package/docs/api/player.mediacontrol.putelement.md +5 -0
- package/docs/api/player.mediacontrol.toggleelement.md +1 -1
- package/docs/api/player.volumefade._constructor_.md +50 -0
- package/docs/api/player.volumefade.md +40 -1
- package/docs/api/player.volumefadesettings.md +18 -0
- package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts +1 -0
- package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/NerdStats.js +13 -3
- package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.js +1 -0
- package/lib/plugins/clappr-nerd-stats/speedtest/index.js +1 -1
- package/lib/plugins/clappr-nerd-stats/utils.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/utils.js +17 -15
- package/lib/plugins/clappr-stats/ClapprStats.d.ts +1 -0
- package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
- package/lib/plugins/clappr-stats/ClapprStats.js +3 -0
- package/lib/plugins/click-to-pause/ClickToPause.js +6 -7
- package/lib/plugins/media-control/MediaControl.d.ts +3 -0
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +6 -1
- package/lib/plugins/volume-fade/VolumeFade.d.ts +28 -11
- package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
- package/lib/plugins/volume-fade/VolumeFade.js +66 -61
- package/package.json +1 -1
- package/src/plugins/clappr-nerd-stats/NerdStats.ts +21 -8
- package/src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts +1 -0
- package/src/plugins/clappr-nerd-stats/speedtest/index.ts +1 -1
- package/src/plugins/clappr-nerd-stats/utils.ts +23 -13
- package/src/plugins/clappr-stats/ClapprStats.ts +4 -0
- package/src/plugins/click-to-pause/ClickToPause.ts +6 -6
- package/src/plugins/level-selector/__tests__/__snapshots__/QualityLevels.test.ts.snap +1 -1
- package/src/plugins/media-control/MediaControl.ts +6 -1
- package/src/plugins/volume-fade/VolumeFade.ts +96 -76
- package/temp/player.api.json +132 -34
- package/tsconfig.tsbuildinfo +1 -1
package/dist/plugins/index.js
CHANGED
|
@@ -10496,6 +10496,9 @@ class ClapprStats extends ContainerPlugin {
|
|
|
10496
10496
|
exportMetrics() {
|
|
10497
10497
|
return structuredClone(this.metrics);
|
|
10498
10498
|
}
|
|
10499
|
+
clearMetrics() {
|
|
10500
|
+
this.metrics = newMetrics$1();
|
|
10501
|
+
}
|
|
10499
10502
|
onBitrate(newBitrate) {
|
|
10500
10503
|
const bitrate = newBitrate.bitrate;
|
|
10501
10504
|
const now = this.now();
|
|
@@ -12271,6 +12274,7 @@ class Speedtest {
|
|
|
12271
12274
|
}
|
|
12272
12275
|
addTestPoint(server) {
|
|
12273
12276
|
this._checkServerDefinition(server);
|
|
12277
|
+
console.log('Speedtest addTestPoint %o', server);
|
|
12274
12278
|
if (this._state === 0) {
|
|
12275
12279
|
this._state = 1;
|
|
12276
12280
|
}
|
|
@@ -12567,7 +12571,7 @@ const getColor = (speedValue) => {
|
|
|
12567
12571
|
}
|
|
12568
12572
|
};
|
|
12569
12573
|
function drawSpeedTestResults() {
|
|
12570
|
-
const canvas = document.getElementById('
|
|
12574
|
+
const canvas = document.getElementById('nerd-stats-speed-test-canvas');
|
|
12571
12575
|
if (!canvas) {
|
|
12572
12576
|
return;
|
|
12573
12577
|
}
|
|
@@ -12690,7 +12694,7 @@ function rankConnectionSpeed(dlSpeed) {
|
|
|
12690
12694
|
return 0;
|
|
12691
12695
|
}
|
|
12692
12696
|
|
|
12693
|
-
const pluginHtml$4 = "<% general = metrics.general %>\n<% counters = metrics.counters %>\n<% timers = metrics.chrono %>\n<% extra = metrics.extra %>\n<% custom = metrics.custom %>\n\n<div class=\"stats-box\" id=\"nerd-stats-box\">\n <div class=\"stats-box-top\">\n <a class=\"close-button gplayer-lite-btn\" id=\"nerd-stats-close\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <g clip-path=\"url(#clip0_184_1489)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.41376 6.00013L13.7068 -0.292872C14.0978 -0.683872 14.0978 -1.31587 13.7068 -1.70687C13.3158 -2.09787 12.6838 -2.09787 12.2928 -1.70687L5.99976 4.58613L-0.293238 -1.70687C-0.684238 -2.09787 -1.31624 -2.09787 -1.70724 -1.70687C-2.09824 -1.31587 -2.09824 -0.683872 -1.70724 -0.292872L4.58576 6.00013L-1.70724 12.2931C-2.09824 12.6841 -2.09824 13.3161 -1.70724 13.7071C-1.51224 13.9021 -1.25624 14.0001 -1.00024 14.0001C-0.744238 14.0001 -0.488238 13.9021 -0.293238 13.7071L5.99976 7.41413L12.2928 13.7071C12.4878 13.9021 12.7438 14.0001 12.9998 14.0001C13.2558 14.0001 13.5118 13.9021 13.7068 13.7071C14.0978 13.3161 14.0978 12.6841 13.7068 12.2931L7.41376 6.00013Z\"\n fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_184_1489\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n </a>\n </div>\n <div class=\"stats-box-main\">\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.general') %></span></li>\n <li>\n <%= i18n.t('stats.display_resolution') %>\n <div><span><span id=\"nerd-stats-resolution-width\"><%= general.resolution.width %></span>×<span id=\"nerd-stats-resolution-height\"><%= general.resolution.height %></span></span></div>\n </li>\n <li>\n <%= i18n.t('stats.volume') %>\n <div id=\"nerd-stats-volume\"><span><%= general.volume %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.connection_speed') %>\n <div><span id=\"dlText\"><%= custom.connectionSpeed %></span> <%= i18n.t('mbps') %></div>\n </li>\n <li class=\"canvas-wrapper\">\n <canvas id=\"speedTestCanvas\" width=\"190\" height=\"20\"></canvas>\n </li>\n <li>\n <%= i18n.t('stats.ping') %>\n <div><span id=\"pingText\"><%= custom.ping %></span> <%= i18n.t('ms') %></div>\n </li>\n <li>\n <%= i18n.t('stats.jitter') %>\n <div><span id=\"jitterText\"><%= custom.jitter %></span> <%= i18n.t('ms') %></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.counters') %></span></li>\n <li>\n <%= i18n.t('stats.plays') %>\n <div><span id=\"nerd-stats-plays\"><%= counters.play %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.pauses') %>\n <div><span id=\"nerd-stats-pauses\"><%= counters.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.errors') %>\n <div><span id=\"nerd-stats-errors\"><%= counters.error %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bufferings') %>\n <div><span id=\"nerd-stats-bufferings\"><%= counters.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.decoded_frames') %>\n <div><span id=\"nerd-stats-decoded-frames\"><%= counters.decodedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dropped_frames') %>\n <div><span id=\"nerd-stats-dropped-frames\"><%= counters.droppedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fps') %>\n <div><span id=\"nerd-stats-fps\"><%= counters.fps %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_changes') %>\n <div><span id=\"nerd-stats-bitrate-changes\"><%= counters.changeLevel %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.seeks') %>\n <div><span id=\"nerd-stats-seeks\"><%= counters.seek %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fullscreen') %>\n <div><span id=\"nerd-stats-fullscreen\"><%= counters.fullscreen %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dvr_seeks') %>\n <div><span id=\"nerd-stats-dvr-usage\"><%= counters.dvrUsage %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.duration') %></span></li>\n <li>\n <%= i18n.t('stats.startup') %>\n <div><span id=\"nerd-stats-startup-time\"><%= timers.startup %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watching') %>\n <div><span id=\"nerd-stats-watch-time\"><%= timers.watch %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.paused') %>\n <div><span id=\"nerd-stats-pause-time\"><%= timers.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering') %>\n <div><span id=\"nerd-stats-buffering-time\"><%= timers.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.session') %>\n <div><span id=\"nerd-stats-session-time\"><%= timers.session %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.extra') %></span></li>\n <li>\n <%= i18n.t('stats.playback') %>\n <div><span id=\"nerd-stats-playback-name\"><%= extra.playbackName %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.playback_type') %>\n <div><span id=\"nerd-stats-playback-type\"><%= extra.playbackType %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffer_size') %>\n <div><span id=\"nerd-stats-buffer-size\"><%= extra.buffersize %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.video_duration') %>\n <div><span id=\"nerd-stats-video-duration\"><%= extra.duration %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.current_time') %>\n <div><span id=\"nerd-stats-current-time\"><%= extra.currentTime %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_weighted_mean') %>\n <div><span id=\"nerd-stats-bitrate-weighted-mean\"><%= extra.bitrateWeightedMean %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_most_used') %>\n <div><span id=\"nerd-stats-bitrate-most-used\"><%= extra.bitrateMostUsed %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watched_percentage') %>\n <div><span id=\"nerd-stats-watched-percentage\"><%= extra.watchedPercentage %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering_percentage') %>\n <div><span id=\"nerd-stats-buffering-percentage\"><%= extra.bufferingPercentage %></span></div>\n </li>\n </ul>\n </div>\n <div class=\"speedtest-summary\">\n <div class=\"speedtest-summary-header\"><%= i18n.t('stats.your_internet_quality_summary') %>:</div>\n <div class=\"speedtest-summary-block\">\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('vod') %>: \n <span id=\"nerd-stats-quality-vod-text\"><%= custom.vodQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"vod\" id=\"nerd-stats-quality-vod\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('live') %>: \n <span id=\"nerd-stats-quality-live-text\"><%= custom.liveQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"live\" id=\"nerd-stats-quality-live\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-footer\">\n <!-- <a class=\"speedtest-footer-about-link\" href=\"\" target=\"_blank\">I am not a nerd, what's this all about?</a>-->\n <button class=\"gplayer-lite-btn speedtest-btn speedtest-footer-refresh\" type=\"button\" id=\"nerd-stats-refresh\">\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path\n d=\"M6.03968 0.124998C3.64268 0.124998 1.67268 1.9565 1.48068 4.2915H1.00018C0.925833 4.29146 0.853156 4.31353 0.791378 4.35489C0.729601 4.39625 0.681511 4.45503 0.653218 4.52378C0.624925 4.59253 0.617705 4.66814 0.632476 4.74101C0.647248 4.81387 0.683343 4.88069 0.736177 4.933L1.57618 5.766C1.64641 5.83561 1.74129 5.87467 1.84018 5.87467C1.93906 5.87467 2.03395 5.83561 2.10418 5.766L2.94418 4.933C2.99701 4.88069 3.03311 4.81387 3.04788 4.74101C3.06265 4.66814 3.05543 4.59253 3.02714 4.52378C2.99884 4.45503 2.95075 4.39625 2.88898 4.35489C2.8272 4.31353 2.75452 4.29146 2.68018 4.2915H2.23368C2.42368 2.376 4.05268 0.874998 6.03968 0.874998C6.6948 0.873639 7.33932 1.04039 7.91158 1.35931C8.48384 1.67822 8.9647 2.13863 9.30818 2.6965C9.33331 2.73978 9.36686 2.7776 9.40684 2.80771C9.44682 2.83783 9.49243 2.85963 9.54097 2.87184C9.58951 2.88405 9.64001 2.88643 9.68948 2.87881C9.73895 2.8712 9.7864 2.85377 9.82902 2.82753C9.87165 2.80129 9.90859 2.76679 9.93767 2.72605C9.96675 2.68531 9.98739 2.63916 9.99835 2.59032C10.0093 2.54148 10.0104 2.49095 10.0015 2.44168C9.99264 2.39242 9.974 2.34544 9.94668 2.3035C9.53615 1.63664 8.96146 1.08621 8.27752 0.704805C7.59359 0.323402 6.82277 0.123774 6.03968 0.124998ZM10.4207 4.2335C10.3505 4.16419 10.2558 4.12532 10.1572 4.12532C10.0585 4.12532 9.96386 4.16419 9.89368 4.2335L9.05018 5.0665C8.9972 5.11874 8.96096 5.18557 8.94608 5.25847C8.93119 5.33137 8.93833 5.40705 8.96658 5.47588C8.99483 5.54472 9.04292 5.60359 9.10473 5.64501C9.16654 5.68644 9.23927 5.70853 9.31368 5.7085H9.76318C9.57218 7.6235 7.93768 9.125 5.94118 9.125C5.28399 9.12683 4.63729 8.96035 4.06269 8.64141C3.48808 8.32247 3.00473 7.86169 2.65868 7.303C2.63281 7.26107 2.59893 7.22465 2.55899 7.19582C2.51904 7.16699 2.47381 7.14631 2.42587 7.13495C2.37793 7.1236 2.32823 7.1218 2.27959 7.12966C2.23096 7.13752 2.18435 7.15488 2.14243 7.18075C2.05776 7.233 1.99731 7.31674 1.97438 7.41355C1.95146 7.51037 1.96793 7.61233 2.02018 7.697C2.43345 8.36457 3.01076 8.91521 3.69713 9.29647C4.38349 9.67772 5.15604 9.87689 5.94118 9.875C8.34518 9.875 10.3237 8.045 10.5162 5.7085H11.0002C11.0746 5.70853 11.1473 5.68644 11.2091 5.64501C11.2709 5.60359 11.319 5.54472 11.3473 5.47588C11.3755 5.40705 11.3827 5.33137 11.3678 5.25847C11.3529 5.18557 11.3167 5.11874 11.2637 5.0665L10.4207 4.2335Z\"\n fill=\"white\"/>\n </svg>\n <%= i18n.t('stats.refresh') %>\n </button>\n </div>\n</div>\n";
|
|
12697
|
+
const pluginHtml$4 = "<% general = metrics.general %>\n<% counters = metrics.counters %>\n<% timers = metrics.chrono %>\n<% extra = metrics.extra %>\n<% custom = metrics.custom %>\n\n<div class=\"stats-box\" id=\"nerd-stats-box\">\n <div class=\"stats-box-top\">\n <a class=\"close-button gplayer-lite-btn\" id=\"nerd-stats-close\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <g clip-path=\"url(#clip0_184_1489)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.41376 6.00013L13.7068 -0.292872C14.0978 -0.683872 14.0978 -1.31587 13.7068 -1.70687C13.3158 -2.09787 12.6838 -2.09787 12.2928 -1.70687L5.99976 4.58613L-0.293238 -1.70687C-0.684238 -2.09787 -1.31624 -2.09787 -1.70724 -1.70687C-2.09824 -1.31587 -2.09824 -0.683872 -1.70724 -0.292872L4.58576 6.00013L-1.70724 12.2931C-2.09824 12.6841 -2.09824 13.3161 -1.70724 13.7071C-1.51224 13.9021 -1.25624 14.0001 -1.00024 14.0001C-0.744238 14.0001 -0.488238 13.9021 -0.293238 13.7071L5.99976 7.41413L12.2928 13.7071C12.4878 13.9021 12.7438 14.0001 12.9998 14.0001C13.2558 14.0001 13.5118 13.9021 13.7068 13.7071C14.0978 13.3161 14.0978 12.6841 13.7068 12.2931L7.41376 6.00013Z\"\n fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_184_1489\">\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n </a>\n </div>\n <div class=\"stats-box-main\">\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.general') %></span></li>\n <li>\n <%= i18n.t('stats.display_resolution') %>\n <div><span><span id=\"nerd-stats-resolution-width\"><%= general.resolution.width %></span>×<span id=\"nerd-stats-resolution-height\"><%= general.resolution.height %></span></span></div>\n </li>\n <li>\n <%= i18n.t('stats.volume') %>\n <div id=\"nerd-stats-volume\"><span><%= general.volume %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.connection_speed') %>\n <div><span id=\"nerd-stats-dl-text\"><%= custom.connectionSpeed %></span> <%= i18n.t('mbps') %></div>\n </li>\n <li class=\"canvas-wrapper\">\n <canvas id=\"nerd-stats-speed-test-canvas\" width=\"190\" height=\"20\"></canvas>\n </li>\n <li>\n <%= i18n.t('stats.ping') %>\n <div><span id=\"nerd-stats-ping-text\"><%= custom.ping %></span> <%= i18n.t('ms') %></div>\n </li>\n <li>\n <%= i18n.t('stats.jitter') %>\n <div><span id=\"nerd-stats-jitter-text\"><%= custom.jitter %></span> <%= i18n.t('ms') %></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.duration') %></span></li>\n <li>\n <%= i18n.t('stats.startup') %>\n <div><span id=\"nerd-stats-startup-time\"><%= timers.startup %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watching') %>\n <div><span id=\"nerd-stats-watch-time\"><%= timers.watch %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.paused') %>\n <div><span id=\"nerd-stats-pause-time\"><%= timers.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering') %>\n <div><span id=\"nerd-stats-buffering-time\"><%= timers.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.session') %>\n <div><span id=\"nerd-stats-session-time\"><%= timers.session %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.counters') %></span></li>\n <li>\n <%= i18n.t('stats.plays') %>\n <div><span id=\"nerd-stats-plays\"><%= counters.play %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.pauses') %>\n <div><span id=\"nerd-stats-pauses\"><%= counters.pause %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.errors') %>\n <div><span id=\"nerd-stats-errors\"><%= counters.error %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bufferings') %>\n <div><span id=\"nerd-stats-bufferings\"><%= counters.buffering %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.decoded_frames') %>\n <div><span id=\"nerd-stats-decoded-frames\"><%= counters.decodedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dropped_frames') %>\n <div><span id=\"nerd-stats-dropped-frames\"><%= counters.droppedFrames %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fps') %>\n <div><span id=\"nerd-stats-fps\"><%= counters.fps %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_changes') %>\n <div><span id=\"nerd-stats-bitrate-changes\"><%= counters.changeLevel %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.seeks') %>\n <div><span id=\"nerd-stats-seeks\"><%= counters.seek %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.fullscreen') %>\n <div><span id=\"nerd-stats-fullscreen\"><%= counters.fullscreen %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.dvr_seeks') %>\n <div><span id=\"nerd-stats-dvr-usage\"><%= counters.dvrUsage %></span></div>\n </li>\n </ul>\n\n <ul>\n <li class=\"title\"><span><%= i18n.t('stats.extra') %></span></li>\n <li>\n <%= i18n.t('stats.playback') %>\n <div><span id=\"nerd-stats-playback-name\"><%= extra.playbackName %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.playback_type') %>\n <div><span id=\"nerd-stats-playback-type\"><%= extra.playbackType %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffer_size') %>\n <div><span id=\"nerd-stats-buffer-size\"><%= extra.buffersize %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.video_duration') %>\n <div><span id=\"nerd-stats-video-duration\"><%= extra.duration %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.current_time') %>\n <div><span id=\"nerd-stats-current-time\"><%= extra.currentTime %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_weighted_mean') %>\n <div><span id=\"nerd-stats-bitrate-weighted-mean\"><%= extra.bitrateWeightedMean %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.bitrate_most_used') %>\n <div><span id=\"nerd-stats-bitrate-most-used\"><%= extra.bitrateMostUsed %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.watched_percentage') %>\n <div><span id=\"nerd-stats-watched-percentage\"><%= extra.watchedPercentage %></span></div>\n </li>\n <li>\n <%= i18n.t('stats.buffering_percentage') %>\n <div><span id=\"nerd-stats-buffering-percentage\"><%= extra.bufferingPercentage %></span></div>\n </li>\n </ul>\n </div>\n <div class=\"speedtest-summary\">\n <div class=\"speedtest-summary-header\"><%= i18n.t('stats.your_internet_quality_summary') %>:</div>\n <div class=\"speedtest-summary-block\">\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('vod') %>: \n <span id=\"nerd-stats-quality-vod-text\"><%= custom.vodQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"vod\" id=\"nerd-stats-quality-vod\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-summary-subblock\">\n <div class=\"speedtest-summary-subblock-content\">\n <div class=\"speedtest-quality\">\n <div class=\"speedtest-quality-header\"><%= i18n.t('live') %>: \n <span id=\"nerd-stats-quality-live-text\"><%= custom.liveQuality %></span></div>\n <div class=\"speedtest-quality-content\" data-streaming-type=\"live\" id=\"nerd-stats-quality-live\">\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n <div class=\"speedtest-quality-content-item\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"speedtest-footer\">\n <!-- <a class=\"speedtest-footer-about-link\" href=\"\" target=\"_blank\">I am not a nerd, what's this all about?</a>-->\n <button class=\"gplayer-lite-btn speedtest-btn speedtest-footer-refresh\" type=\"button\" id=\"nerd-stats-refresh\">\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path\n d=\"M6.03968 0.124998C3.64268 0.124998 1.67268 1.9565 1.48068 4.2915H1.00018C0.925833 4.29146 0.853156 4.31353 0.791378 4.35489C0.729601 4.39625 0.681511 4.45503 0.653218 4.52378C0.624925 4.59253 0.617705 4.66814 0.632476 4.74101C0.647248 4.81387 0.683343 4.88069 0.736177 4.933L1.57618 5.766C1.64641 5.83561 1.74129 5.87467 1.84018 5.87467C1.93906 5.87467 2.03395 5.83561 2.10418 5.766L2.94418 4.933C2.99701 4.88069 3.03311 4.81387 3.04788 4.74101C3.06265 4.66814 3.05543 4.59253 3.02714 4.52378C2.99884 4.45503 2.95075 4.39625 2.88898 4.35489C2.8272 4.31353 2.75452 4.29146 2.68018 4.2915H2.23368C2.42368 2.376 4.05268 0.874998 6.03968 0.874998C6.6948 0.873639 7.33932 1.04039 7.91158 1.35931C8.48384 1.67822 8.9647 2.13863 9.30818 2.6965C9.33331 2.73978 9.36686 2.7776 9.40684 2.80771C9.44682 2.83783 9.49243 2.85963 9.54097 2.87184C9.58951 2.88405 9.64001 2.88643 9.68948 2.87881C9.73895 2.8712 9.7864 2.85377 9.82902 2.82753C9.87165 2.80129 9.90859 2.76679 9.93767 2.72605C9.96675 2.68531 9.98739 2.63916 9.99835 2.59032C10.0093 2.54148 10.0104 2.49095 10.0015 2.44168C9.99264 2.39242 9.974 2.34544 9.94668 2.3035C9.53615 1.63664 8.96146 1.08621 8.27752 0.704805C7.59359 0.323402 6.82277 0.123774 6.03968 0.124998ZM10.4207 4.2335C10.3505 4.16419 10.2558 4.12532 10.1572 4.12532C10.0585 4.12532 9.96386 4.16419 9.89368 4.2335L9.05018 5.0665C8.9972 5.11874 8.96096 5.18557 8.94608 5.25847C8.93119 5.33137 8.93833 5.40705 8.96658 5.47588C8.99483 5.54472 9.04292 5.60359 9.10473 5.64501C9.16654 5.68644 9.23927 5.70853 9.31368 5.7085H9.76318C9.57218 7.6235 7.93768 9.125 5.94118 9.125C5.28399 9.12683 4.63729 8.96035 4.06269 8.64141C3.48808 8.32247 3.00473 7.86169 2.65868 7.303C2.63281 7.26107 2.59893 7.22465 2.55899 7.19582C2.51904 7.16699 2.47381 7.14631 2.42587 7.13495C2.37793 7.1236 2.32823 7.1218 2.27959 7.12966C2.23096 7.13752 2.18435 7.15488 2.14243 7.18075C2.05776 7.233 1.99731 7.31674 1.97438 7.41355C1.95146 7.51037 1.96793 7.61233 2.02018 7.697C2.43345 8.36457 3.01076 8.91521 3.69713 9.29647C4.38349 9.67772 5.15604 9.87689 5.94118 9.875C8.34518 9.875 10.3237 8.045 10.5162 5.7085H11.0002C11.0746 5.70853 11.1473 5.68644 11.2091 5.64501C11.2709 5.60359 11.319 5.54472 11.3473 5.47588C11.3755 5.40705 11.3827 5.33137 11.3678 5.25847C11.3529 5.18557 11.3167 5.11874 11.2637 5.0665L10.4207 4.2335Z\"\n fill=\"white\"/>\n </svg>\n <%= i18n.t('stats.refresh') %>\n </button>\n </div>\n</div>\n";
|
|
12694
12698
|
|
|
12695
12699
|
const buttonHtml$3 = "<button class='nerd-button gplayer-lite-btn gcore-skin-text-color gear-option' id=\"nerd-stats-button\">\n <span class=\"gear-option_icon\"><%= icon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('statistics') %></span>\n</button>\n";
|
|
12696
12700
|
|
|
@@ -12704,38 +12708,40 @@ const qualityClasses = [
|
|
|
12704
12708
|
'speedtest-quality-value-5',
|
|
12705
12709
|
];
|
|
12706
12710
|
const getDownloadQuality = (speedValue) => {
|
|
12711
|
+
if (!speedValue) {
|
|
12712
|
+
return 0;
|
|
12713
|
+
}
|
|
12707
12714
|
if (speedValue < 3) {
|
|
12708
12715
|
return 1;
|
|
12709
12716
|
}
|
|
12710
|
-
|
|
12717
|
+
if (speedValue < 7) {
|
|
12711
12718
|
return 2;
|
|
12712
12719
|
}
|
|
12713
|
-
|
|
12720
|
+
if (speedValue < 13) {
|
|
12714
12721
|
return 3;
|
|
12715
12722
|
}
|
|
12716
|
-
|
|
12723
|
+
if (speedValue < 25) {
|
|
12717
12724
|
return 4;
|
|
12718
12725
|
}
|
|
12719
|
-
|
|
12720
|
-
return 5;
|
|
12721
|
-
}
|
|
12726
|
+
return 5;
|
|
12722
12727
|
};
|
|
12723
12728
|
const getPingQuality = (pingValue) => {
|
|
12729
|
+
if (!pingValue) {
|
|
12730
|
+
return 0;
|
|
12731
|
+
}
|
|
12724
12732
|
if (pingValue < 20) {
|
|
12725
12733
|
return 5;
|
|
12726
12734
|
}
|
|
12727
|
-
|
|
12735
|
+
if (pingValue < 50) {
|
|
12728
12736
|
return 4;
|
|
12729
12737
|
}
|
|
12730
|
-
|
|
12738
|
+
if (pingValue < 100) {
|
|
12731
12739
|
return 3;
|
|
12732
12740
|
}
|
|
12733
|
-
|
|
12741
|
+
if (pingValue < 150) {
|
|
12734
12742
|
return 2;
|
|
12735
12743
|
}
|
|
12736
|
-
|
|
12737
|
-
return 1;
|
|
12738
|
-
}
|
|
12744
|
+
return 1;
|
|
12739
12745
|
};
|
|
12740
12746
|
const generateQualityHtml = (quality) => {
|
|
12741
12747
|
const html = [];
|
|
@@ -12752,9 +12758,9 @@ const generateQualityHtml = (quality) => {
|
|
|
12752
12758
|
};
|
|
12753
12759
|
const drawSummary = (customMetrics, vodContainer, liveContainer) => {
|
|
12754
12760
|
const { connectionSpeed, ping } = customMetrics;
|
|
12755
|
-
if (!connectionSpeed || !ping) {
|
|
12756
|
-
|
|
12757
|
-
}
|
|
12761
|
+
// if (!connectionSpeed || !ping) {
|
|
12762
|
+
// return
|
|
12763
|
+
// }
|
|
12758
12764
|
const downloadQuality = getDownloadQuality(connectionSpeed);
|
|
12759
12765
|
const pingQuality = getPingQuality(ping);
|
|
12760
12766
|
const liveQuality = Math.min(downloadQuality, pingQuality);
|
|
@@ -12973,8 +12979,11 @@ class NerdStats extends UICorePlugin {
|
|
|
12973
12979
|
}
|
|
12974
12980
|
updateMetrics(metrics) {
|
|
12975
12981
|
trace(`${T$c} updateMetrics`, { custom: this.speedtestMetrics });
|
|
12976
|
-
Object.assign(this.metrics, metrics);
|
|
12977
|
-
this.
|
|
12982
|
+
Object.assign(this.metrics, metrics); // TODO no Object.assign
|
|
12983
|
+
this.metrics.custom = {
|
|
12984
|
+
...this.speedtestMetrics,
|
|
12985
|
+
};
|
|
12986
|
+
this.updateCustomMetrics();
|
|
12978
12987
|
this.$el
|
|
12979
12988
|
.find('#nerd-stats-current-time')
|
|
12980
12989
|
.text(Formatter.formatTime(this.metrics.extra.currentTime));
|
|
@@ -13036,11 +13045,16 @@ class NerdStats extends UICorePlugin {
|
|
|
13036
13045
|
.text(Formatter.formatFps(this.metrics.counters.fps));
|
|
13037
13046
|
this.setStatsBoxSize();
|
|
13038
13047
|
drawSpeedTestResults();
|
|
13039
|
-
|
|
13048
|
+
this.updateEstimatedQuality();
|
|
13040
13049
|
if (!this.open) {
|
|
13041
13050
|
this.hide();
|
|
13042
13051
|
}
|
|
13043
13052
|
}
|
|
13053
|
+
updateCustomMetrics() {
|
|
13054
|
+
this.$el.find('#nerd-stats-dl-text').text(this.metrics.custom.connectionSpeed.toFixed(2));
|
|
13055
|
+
this.$el.find('#nerd-stats-ping-text').text(this.metrics.custom.ping.toFixed(2));
|
|
13056
|
+
this.$el.find('#nerd-stats-jitter-text').text(this.metrics.custom.jitter.toFixed(2));
|
|
13057
|
+
}
|
|
13044
13058
|
updateEstimatedQuality() {
|
|
13045
13059
|
this.estimateQuality();
|
|
13046
13060
|
this.$el
|
|
@@ -13049,6 +13063,7 @@ class NerdStats extends UICorePlugin {
|
|
|
13049
13063
|
this.$el
|
|
13050
13064
|
.find('#nerd-stats-quality-live-text')
|
|
13051
13065
|
.html(this.metrics.custom.liveQuality);
|
|
13066
|
+
drawSummary(this.speedtestMetrics, this.$el.find('#nerd-stats-quality-vod'), this.$el.find('#nerd-stats-quality-live'));
|
|
13052
13067
|
}
|
|
13053
13068
|
setStatsBoxSize() {
|
|
13054
13069
|
if (this.playerWidth >= this.statsBoxWidthThreshold) {
|
|
@@ -13092,6 +13107,7 @@ class NerdStats extends UICorePlugin {
|
|
|
13092
13107
|
this.speedtestMetrics.ping = 0;
|
|
13093
13108
|
this.speedtestMetrics.jitter = 0;
|
|
13094
13109
|
if (clapprStats) {
|
|
13110
|
+
clapprStats.clearMetrics();
|
|
13095
13111
|
this.updateMetrics(clapprStats.exportMetrics());
|
|
13096
13112
|
}
|
|
13097
13113
|
}
|
|
@@ -13171,14 +13187,13 @@ class ClickToPause extends ContainerPlugin {
|
|
|
13171
13187
|
const isDvrEnabled = this.container.isDvrEnabled();
|
|
13172
13188
|
if (isLivePlayback && !isDvrEnabled) {
|
|
13173
13189
|
this.togglePlay(true);
|
|
13190
|
+
return;
|
|
13174
13191
|
}
|
|
13175
|
-
|
|
13176
|
-
|
|
13177
|
-
this.timer =
|
|
13178
|
-
|
|
13179
|
-
|
|
13180
|
-
}, 300);
|
|
13181
|
-
}
|
|
13192
|
+
this.clearTimer();
|
|
13193
|
+
this.timer = setTimeout(() => {
|
|
13194
|
+
this.timer = null;
|
|
13195
|
+
this.togglePlay(false);
|
|
13196
|
+
}, 300);
|
|
13182
13197
|
}
|
|
13183
13198
|
settingsUpdate() {
|
|
13184
13199
|
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE;
|
|
@@ -14476,6 +14491,10 @@ const LEFT_ORDER = [
|
|
|
14476
14491
|
'duration',
|
|
14477
14492
|
'dvr',
|
|
14478
14493
|
];
|
|
14494
|
+
var ExtendedEvents;
|
|
14495
|
+
(function (ExtendedEvents) {
|
|
14496
|
+
ExtendedEvents["MEDIACONTROL_VOLUME"] = "mediacontrol:volume";
|
|
14497
|
+
})(ExtendedEvents || (ExtendedEvents = {}));
|
|
14479
14498
|
const { Config, Fullscreen, formatTime: formatTime$1, extend, removeArrayItem } = Utils;
|
|
14480
14499
|
function orderByOrderPattern(arr, order) {
|
|
14481
14500
|
const arrWithoutDuplicates = [...new Set(arr)];
|
|
@@ -14953,14 +14972,15 @@ class MediaControl extends UICorePlugin {
|
|
|
14953
14972
|
// if the container is not ready etc
|
|
14954
14973
|
this.intendedVolume = value;
|
|
14955
14974
|
this.persistConfig && !isInitialVolume && Config.persist('volume', value);
|
|
14956
|
-
// TODO
|
|
14957
14975
|
const setWhenContainerReady = () => {
|
|
14958
14976
|
if (this.core.activeContainer && this.core.activeContainer.isReady) {
|
|
14959
14977
|
this.core.activeContainer.setVolume(value);
|
|
14978
|
+
this.trigger(ExtendedEvents.MEDIACONTROL_VOLUME, value);
|
|
14960
14979
|
}
|
|
14961
14980
|
else {
|
|
14962
14981
|
this.listenToOnce(this.core.activeContainer, Events.CONTAINER_READY, () => {
|
|
14963
14982
|
this.core.activeContainer.setVolume(value);
|
|
14983
|
+
this.trigger(ExtendedEvents.MEDIACONTROL_VOLUME, value);
|
|
14964
14984
|
});
|
|
14965
14985
|
}
|
|
14966
14986
|
};
|
|
@@ -16636,7 +16656,7 @@ class Poster extends UIContainerPlugin {
|
|
|
16636
16656
|
}
|
|
16637
16657
|
}
|
|
16638
16658
|
|
|
16639
|
-
const buttonHtml = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option' aria-haspopup=\"menu\">\n <span class=\"gear-option_icon<%= isHd ? '' : ' hidden' %>\"><%= hdIcon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('quality') %></span>\n <span class='gear-option_value'><%= currentText %></span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n</button>\n";
|
|
16659
|
+
const buttonHtml = "<button class='gplayer-lite-btn gcore-skin-text-color gear-option' aria-haspopup=\"menu\" id=\"quality-levels\">\n <span class=\"gear-option_icon<%= isHd ? '' : ' hidden' %>\"><%= hdIcon %></span>\n <span class=\"gear-option_label\"><%= i18n.t('quality') %></span>\n <span class='gear-option_value'><%= currentText %></span>\n <span class=\"gear-option_arrow-right-icon\"><%= arrowRightIcon %></span>\n</button>\n";
|
|
16640
16660
|
|
|
16641
16661
|
const listHtml = "<button class=\"gplayer-lite-btn go-back gcore-skin-text-color\" id=\"level-selector-back-button\">\n <span class=\"arrow-left-icon\"><%= arrowLeftIcon %></span>\n <%= i18n.t('quality') %>\n</button>\n<ul class=\"gear-sub-menu quality-levels\" id=\"level-selector-menu\" role=\"menu\">\n <% if (!removeAuto) { %>\n <li>\n <a href=\"#\"\n class=\"gear-sub-menu_btn gcore-skin-text-color\"\n data-id=\"-1\"\n id=\"level_selector_auto\"\n aria-checked=\"<%= current === -1 %>\"\n role=\"menuitemradio\"\n >\n <span class=\"check-icon\"><%= checkIcon %></span>\n <%= i18n.t('auto') %>\n </a>\n </li>\n <% } %>\n <% for (const item of levels.slice().reverse()) {\n var disabled = maxLevel >= 0 && item.level > maxLevel\n var checked = item.level === current\n %>\n <li class=\"<%= disabled ? ' disabled' : ''%><%=checked ? ' current' : ''%>\">\n <a href=\"#\"\n class=\"gear-sub-menu_btn gcore-skin-text-color<%= checked ? ' gcore-skin-active' : '' %>\"\n data-id=\"<%= item.level %>\"\n aria-disabled=\"<%= disabled %>\"\n aria-checked=\"<%= checked %>\"\n role=\"menuitemradio\"\n id=\"level_selector_<%= item.width > item.height ? item.height : item.width %>\"\n >\n <span class=\"check-icon\"><%= checkIcon %></span>\n <%= labels[item.level] %>\n </a>\n </li>\n <% } %>\n</ul>\n";
|
|
16642
16662
|
|
|
@@ -18769,98 +18789,98 @@ var VolumeFadeEvents;
|
|
|
18769
18789
|
(function (VolumeFadeEvents) {
|
|
18770
18790
|
VolumeFadeEvents["FADE"] = "core:volume:fade";
|
|
18771
18791
|
})(VolumeFadeEvents || (VolumeFadeEvents = {}));
|
|
18792
|
+
const DEFAULT_DURATION = 600;
|
|
18793
|
+
const DEFAULT_VOLUME_LEVEL = 80;
|
|
18772
18794
|
/**
|
|
18773
|
-
* `PLUGIN` that
|
|
18795
|
+
* `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
|
|
18774
18796
|
* @beta
|
|
18797
|
+
*
|
|
18798
|
+
* @remarks
|
|
18799
|
+
* When the user moves the mouse over and away from the player, the sound is unmuted and unmuted with a fade effect.
|
|
18800
|
+
*
|
|
18801
|
+
* Depends on {@link MediaControl} plugin.
|
|
18802
|
+
* Configuration options - {@link VolumeFadeSettings}
|
|
18775
18803
|
*/
|
|
18776
18804
|
class VolumeFade extends UICorePlugin {
|
|
18777
|
-
|
|
18778
|
-
|
|
18779
|
-
|
|
18780
|
-
interval = null;
|
|
18805
|
+
activeVolume = 0;
|
|
18806
|
+
duration = 0;
|
|
18807
|
+
timerId = null;
|
|
18781
18808
|
/**
|
|
18782
18809
|
* @internal
|
|
18783
18810
|
*/
|
|
18784
18811
|
get name() {
|
|
18785
18812
|
return 'volume_fade';
|
|
18786
18813
|
}
|
|
18814
|
+
constructor(core) {
|
|
18815
|
+
super(core);
|
|
18816
|
+
if (typeof this.options.volumeFade?.level === 'number') {
|
|
18817
|
+
this.activeVolume = this.options.volumeFade.level;
|
|
18818
|
+
}
|
|
18819
|
+
}
|
|
18787
18820
|
/**
|
|
18788
18821
|
* @internal
|
|
18789
18822
|
*/
|
|
18790
18823
|
bindEvents() {
|
|
18791
|
-
// TODO on container changed
|
|
18792
18824
|
this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
|
|
18793
|
-
if (this.core.mediaControl) {
|
|
18794
|
-
this.listenTo(this.core.mediaControl, 'mediacontrol:volume:user', this._onUserChangeVolume);
|
|
18795
|
-
}
|
|
18796
|
-
// this.listenTo(this.core, 'core:volume:config', this._onVolumeConfig);
|
|
18797
|
-
}
|
|
18798
|
-
unBindEvents() {
|
|
18799
|
-
this.core.$el.off('mouseleave.volume');
|
|
18800
|
-
this.core.$el.off('mouseenter.volume');
|
|
18801
|
-
}
|
|
18802
|
-
_onUserChangeVolume(volume) {
|
|
18803
|
-
this._aboveBorderVolume = volume;
|
|
18804
|
-
}
|
|
18805
|
-
_onVolumeConfig(value) {
|
|
18806
|
-
this._aboveBorderVolume = value;
|
|
18807
|
-
this.container?.setVolume(0);
|
|
18808
18825
|
}
|
|
18809
18826
|
onCoreReady() {
|
|
18810
|
-
this.
|
|
18811
|
-
|
|
18812
|
-
if (this.core && this.core.$el) {
|
|
18813
|
-
// TODO find out why options.playerElement instead of this.core.$el or this.container.$el
|
|
18814
|
-
$(this.options.playerElement).on('mouseenter.volume', () => {
|
|
18815
|
-
this.onEnter();
|
|
18816
|
-
});
|
|
18817
|
-
$(this.options.playerElement).on('mouseleave.volume', () => {
|
|
18818
|
-
this.onLeave();
|
|
18819
|
-
});
|
|
18820
|
-
}
|
|
18821
|
-
if (!this._aboveBorderVolume) {
|
|
18822
|
-
this._aboveBorderVolume = this.container?.volume && !isNaN(this.container.volume) ? this.container.volume : 80;
|
|
18823
|
-
}
|
|
18824
|
-
if (this.options.mute || Browser.isMobile) {
|
|
18827
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
18828
|
+
if (Browser.isMobile) {
|
|
18825
18829
|
this.destroy();
|
|
18826
18830
|
return;
|
|
18827
18831
|
}
|
|
18828
|
-
|
|
18829
|
-
|
|
18832
|
+
if (mediaControl) {
|
|
18833
|
+
this.listenTo(mediaControl, ExtendedEvents.MEDIACONTROL_VOLUME, this.onVolumeChange);
|
|
18834
|
+
}
|
|
18835
|
+
$(this.core.$el).on('mouseenter', () => this.onEnter());
|
|
18836
|
+
$(this.core.$el).on('mouseleave', () => this.onLeave());
|
|
18837
|
+
if (!this.activeVolume) {
|
|
18838
|
+
this.activeVolume =
|
|
18839
|
+
this.core.activeContainer?.volume &&
|
|
18840
|
+
!isNaN(this.core.activeContainer.volume)
|
|
18841
|
+
? this.core.activeContainer.volume
|
|
18842
|
+
: DEFAULT_VOLUME_LEVEL;
|
|
18843
|
+
}
|
|
18844
|
+
this.duration = this.options.volumeFade?.duration || DEFAULT_DURATION;
|
|
18845
|
+
// TODO check if `mute` must be respected
|
|
18846
|
+
this.core.activeContainer?.setVolume(this.activeVolume);
|
|
18847
|
+
this.core.activePlayback.volume(0);
|
|
18848
|
+
}
|
|
18849
|
+
onVolumeChange(volume) {
|
|
18850
|
+
this.activeVolume = volume;
|
|
18830
18851
|
}
|
|
18831
18852
|
onEnter() {
|
|
18832
|
-
this.
|
|
18853
|
+
this.fade(this.duration, 1);
|
|
18833
18854
|
}
|
|
18834
|
-
|
|
18835
|
-
this.
|
|
18855
|
+
onLeave() {
|
|
18856
|
+
this.fade(this.duration, 0);
|
|
18857
|
+
}
|
|
18858
|
+
fade(duration, to) {
|
|
18859
|
+
this.stopFade();
|
|
18836
18860
|
const start = new Date().getTime();
|
|
18837
|
-
|
|
18838
|
-
|
|
18839
|
-
|
|
18840
|
-
|
|
18841
|
-
|
|
18842
|
-
const
|
|
18861
|
+
const from = 1 - to;
|
|
18862
|
+
this.timerId = setInterval(() => {
|
|
18863
|
+
const delta = new Date().getTime() - start;
|
|
18864
|
+
const progress = Math.min(1, delta / duration);
|
|
18865
|
+
const normVol = progress * to + (1 - progress) * from;
|
|
18866
|
+
const volume = normVol * this.activeVolume;
|
|
18867
|
+
this.core.activePlayback.volume(volume);
|
|
18843
18868
|
try {
|
|
18844
|
-
this.
|
|
18845
|
-
this.core.trigger(VolumeFadeEvents.FADE, progress * this._aboveBorderVolume);
|
|
18869
|
+
this.core.trigger(VolumeFadeEvents.FADE, volume);
|
|
18846
18870
|
}
|
|
18847
18871
|
catch (error) {
|
|
18848
|
-
this.clearCurrentInterval();
|
|
18849
18872
|
}
|
|
18850
|
-
if (progress >= 1
|
|
18851
|
-
this.
|
|
18873
|
+
if (progress >= 1) {
|
|
18874
|
+
this.stopFade();
|
|
18852
18875
|
}
|
|
18853
18876
|
}, 10);
|
|
18854
18877
|
}
|
|
18855
|
-
|
|
18856
|
-
if (this.
|
|
18857
|
-
clearInterval(this.
|
|
18858
|
-
this.
|
|
18878
|
+
stopFade() {
|
|
18879
|
+
if (this.timerId !== null) {
|
|
18880
|
+
clearInterval(this.timerId);
|
|
18881
|
+
this.timerId = null;
|
|
18859
18882
|
}
|
|
18860
18883
|
}
|
|
18861
|
-
onLeave() {
|
|
18862
|
-
this.numberTo(this.delay, 1);
|
|
18863
|
-
}
|
|
18864
18884
|
}
|
|
18865
18885
|
|
|
18866
|
-
export { AudioTracks as AudioSelector, AudioTracks, BigMuteButton, BottomGear, NerdStats as ClapprNerdStats, ClapprStats, ClapprStatsChronograph, ClapprStatsCounter, ClapprStatsEvents, ClickToPause, Clips, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, Favicon, GearEvents, GoogleAnalytics, QualityLevels as LevelSelector, Logo, MediaControl, MultiCamera, NerdStats, PictureInPicture, PlaybackRate, Poster, QualityLevels, SeekTime, Share, SkipTime, SourceController, SpinnerThreeBounce as Spinner, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents };
|
|
18886
|
+
export { AudioTracks as AudioSelector, AudioTracks, BigMuteButton, BottomGear, NerdStats as ClapprNerdStats, ClapprStats, ClapprStatsChronograph, ClapprStatsCounter, ClapprStatsEvents, ClickToPause, Clips, ClosedCaptions, ContextMenu, DvrControls, ErrorScreen, ExtendedEvents, Favicon, GearEvents, GoogleAnalytics, QualityLevels as LevelSelector, Logo, MediaControl, MultiCamera, NerdStats, PictureInPicture, PlaybackRate, Poster, QualityLevels, SeekTime, Share, SkipTime, SourceController, SpinnerThreeBounce as Spinner, SpinnerEvents, SpinnerThreeBounce, ClosedCaptions as Subtitles, Telemetry, TelemetryEvent, Thumbnails, VolumeFade, VolumeFadeEvents };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
2
|
|
|
3
|
-
[Home](./index.md) > [@gcorevideo/player](./player.md) > [
|
|
3
|
+
[Home](./index.md) > [@gcorevideo/player](./player.md) > [ClapprStatsBitrateTrack](./player.clapprstatsbitratetrack.md)
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## ClapprStatsBitrateTrack type
|
|
6
6
|
|
|
7
7
|
> This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
|
|
8
8
|
>
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
**Signature:**
|
|
12
12
|
|
|
13
13
|
```typescript
|
|
14
|
-
export type
|
|
14
|
+
export type ClapprStatsBitrateTrack = {
|
|
15
15
|
start: number;
|
|
16
16
|
end?: number;
|
|
17
17
|
time?: number;
|
|
@@ -35,7 +35,7 @@ export type ClapprStatsMetrics = {
|
|
|
35
35
|
extra: {
|
|
36
36
|
playbackName: string;
|
|
37
37
|
playbackType: string;
|
|
38
|
-
bitratesHistory:
|
|
38
|
+
bitratesHistory: ClapprStatsBitrateTrack[];
|
|
39
39
|
bitrateWeightedMean: number;
|
|
40
40
|
bitrateMostUsed: number;
|
|
41
41
|
buffersize: number;
|
|
@@ -48,5 +48,5 @@ export type ClapprStatsMetrics = {
|
|
|
48
48
|
};
|
|
49
49
|
};
|
|
50
50
|
```
|
|
51
|
-
**References:** [ClapprStatsCounter.Play](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Pause](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Error](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Buffering](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.DecodedFrames](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.DroppedFrames](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Fps](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.ChangeLevel](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Seek](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Fullscreen](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.DvrUsage](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsChronograph.Startup](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Watch](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Pause](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Buffering](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Session](./player.clapprstatschronograph.md)<!-- -->, [
|
|
51
|
+
**References:** [ClapprStatsCounter.Play](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Pause](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Error](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Buffering](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.DecodedFrames](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.DroppedFrames](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Fps](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.ChangeLevel](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Seek](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.Fullscreen](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsCounter.DvrUsage](./player.clapprstatscounter.md)<!-- -->, [ClapprStatsChronograph.Startup](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Watch](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Pause](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Buffering](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsChronograph.Session](./player.clapprstatschronograph.md)<!-- -->, [ClapprStatsBitrateTrack](./player.clapprstatsbitratetrack.md)
|
|
52
52
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@gcorevideo/player](./player.md) > [ExtendedEvents](./player.extendedevents.md)
|
|
4
|
+
|
|
5
|
+
## ExtendedEvents enum
|
|
6
|
+
|
|
7
|
+
**Signature:**
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
export declare enum ExtendedEvents
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Enumeration Members
|
|
14
|
+
|
|
15
|
+
<table><thead><tr><th>
|
|
16
|
+
|
|
17
|
+
Member
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
</th><th>
|
|
21
|
+
|
|
22
|
+
Value
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
</th><th>
|
|
26
|
+
|
|
27
|
+
Description
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
</th></tr></thead>
|
|
31
|
+
<tbody><tr><td>
|
|
32
|
+
|
|
33
|
+
MEDIACONTROL\_VOLUME
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
</td><td>
|
|
37
|
+
|
|
38
|
+
`"mediacontrol:volume"`
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
</td><td>
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
</td></tr>
|
|
45
|
+
</tbody></table>
|
package/docs/api/player.md
CHANGED
|
@@ -358,7 +358,7 @@ Description
|
|
|
358
358
|
|
|
359
359
|
</td><td>
|
|
360
360
|
|
|
361
|
-
**_(BETA)_** `PLUGIN` that
|
|
361
|
+
**_(BETA)_** `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
|
|
362
362
|
|
|
363
363
|
|
|
364
364
|
</td></tr>
|
|
@@ -409,6 +409,15 @@ Description
|
|
|
409
409
|
**_(BETA)_**
|
|
410
410
|
|
|
411
411
|
|
|
412
|
+
</td></tr>
|
|
413
|
+
<tr><td>
|
|
414
|
+
|
|
415
|
+
[ExtendedEvents](./player.extendedevents.md)
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
</td><td>
|
|
419
|
+
|
|
420
|
+
|
|
412
421
|
</td></tr>
|
|
413
422
|
<tr><td>
|
|
414
423
|
|
|
@@ -688,7 +697,7 @@ Description
|
|
|
688
697
|
</th></tr></thead>
|
|
689
698
|
<tbody><tr><td>
|
|
690
699
|
|
|
691
|
-
[
|
|
700
|
+
[ClapprStatsBitrateTrack](./player.clapprstatsbitratetrack.md)
|
|
692
701
|
|
|
693
702
|
|
|
694
703
|
</td><td>
|
|
@@ -1116,6 +1125,17 @@ Localization strings for the player UI.
|
|
|
1116
1125
|
Preferred streaming media delivery protocol
|
|
1117
1126
|
|
|
1118
1127
|
|
|
1128
|
+
</td></tr>
|
|
1129
|
+
<tr><td>
|
|
1130
|
+
|
|
1131
|
+
[VolumeFadeSettings](./player.volumefadesettings.md)
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
</td><td>
|
|
1135
|
+
|
|
1136
|
+
**_(BETA)_**
|
|
1137
|
+
|
|
1138
|
+
|
|
1119
1139
|
</td></tr>
|
|
1120
1140
|
<tr><td>
|
|
1121
1141
|
|
|
@@ -7,11 +7,6 @@
|
|
|
7
7
|
> This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
|
|
8
8
|
>
|
|
9
9
|
|
|
10
|
-
> Warning: This API is now obsolete.
|
|
11
|
-
>
|
|
12
|
-
> Use [MediaControl.putElement()](./player.mediacontrol.putelement.md) instead
|
|
13
|
-
>
|
|
14
|
-
|
|
15
10
|
Get a media control element DOM node
|
|
16
11
|
|
|
17
12
|
**Signature:**
|
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
> This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
|
|
8
8
|
>
|
|
9
9
|
|
|
10
|
+
> Warning: This API is now obsolete.
|
|
11
|
+
>
|
|
12
|
+
> Use [MediaControl.mount()](./player.mediacontrol.mount.md) instead
|
|
13
|
+
>
|
|
14
|
+
|
|
10
15
|
**Signature:**
|
|
11
16
|
|
|
12
17
|
```typescript
|