@gcorevideo/player 2.22.21 → 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.
Files changed (38) hide show
  1. package/assets/clappr-nerd-stats/clappr-nerd-stats.ejs +30 -30
  2. package/assets/clappr-nerd-stats/clappr-nerd-stats.scss +21 -14
  3. package/dist/core.js +1 -1
  4. package/dist/index.css +686 -678
  5. package/dist/index.js +49 -31
  6. package/dist/player.d.ts +32 -10
  7. package/dist/plugins/index.css +612 -604
  8. package/dist/plugins/index.js +48 -30
  9. package/docs/api/player.extendedevents.md +45 -0
  10. package/docs/api/player.md +21 -1
  11. package/docs/api/player.volumefade._constructor_.md +50 -0
  12. package/docs/api/player.volumefade.md +40 -1
  13. package/docs/api/player.volumefadesettings.md +18 -0
  14. package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts +1 -0
  15. package/lib/plugins/clappr-nerd-stats/NerdStats.d.ts.map +1 -1
  16. package/lib/plugins/clappr-nerd-stats/NerdStats.js +13 -3
  17. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.d.ts.map +1 -1
  18. package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.js +1 -0
  19. package/lib/plugins/clappr-nerd-stats/speedtest/index.js +1 -1
  20. package/lib/plugins/clappr-nerd-stats/utils.d.ts.map +1 -1
  21. package/lib/plugins/clappr-nerd-stats/utils.js +17 -15
  22. package/lib/plugins/clappr-stats/ClapprStats.d.ts +1 -0
  23. package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
  24. package/lib/plugins/clappr-stats/ClapprStats.js +3 -0
  25. package/lib/plugins/click-to-pause/ClickToPause.js +6 -7
  26. package/lib/plugins/volume-fade/VolumeFade.d.ts +3 -1
  27. package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
  28. package/lib/plugins/volume-fade/VolumeFade.js +6 -3
  29. package/package.json +1 -1
  30. package/src/plugins/clappr-nerd-stats/NerdStats.ts +21 -8
  31. package/src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts +1 -0
  32. package/src/plugins/clappr-nerd-stats/speedtest/index.ts +1 -1
  33. package/src/plugins/clappr-nerd-stats/utils.ts +23 -13
  34. package/src/plugins/clappr-stats/ClapprStats.ts +4 -0
  35. package/src/plugins/click-to-pause/ClickToPause.ts +6 -6
  36. package/src/plugins/volume-fade/VolumeFade.ts +6 -3
  37. package/temp/player.api.json +100 -2
  38. package/tsconfig.tsbuildinfo +1 -1
@@ -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('speedTestCanvas');
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>&times;<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>&times;<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
- else if (speedValue < 7) {
12717
+ if (speedValue < 7) {
12711
12718
  return 2;
12712
12719
  }
12713
- else if (speedValue < 13) {
12720
+ if (speedValue < 13) {
12714
12721
  return 3;
12715
12722
  }
12716
- else if (speedValue < 25) {
12723
+ if (speedValue < 25) {
12717
12724
  return 4;
12718
12725
  }
12719
- else {
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
- else if (pingValue < 50) {
12735
+ if (pingValue < 50) {
12728
12736
  return 4;
12729
12737
  }
12730
- else if (pingValue < 100) {
12738
+ if (pingValue < 100) {
12731
12739
  return 3;
12732
12740
  }
12733
- else if (pingValue < 150) {
12741
+ if (pingValue < 150) {
12734
12742
  return 2;
12735
12743
  }
12736
- else {
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
- return;
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.updateEstimatedQuality();
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
- drawSummary(this.speedtestMetrics, this.$el.find('#nerd-stats-quality-vod'), this.$el.find('#nerd-stats-quality-live'));
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
- else if (!isLivePlayback || isDvrEnabled) {
13176
- this.clearTimer();
13177
- this.timer = setTimeout(() => {
13178
- this.timer = null;
13179
- this.togglePlay(false);
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;
@@ -18775,11 +18790,14 @@ var VolumeFadeEvents;
18775
18790
  VolumeFadeEvents["FADE"] = "core:volume:fade";
18776
18791
  })(VolumeFadeEvents || (VolumeFadeEvents = {}));
18777
18792
  const DEFAULT_DURATION = 600;
18793
+ const DEFAULT_VOLUME_LEVEL = 80;
18778
18794
  /**
18779
- * `PLUGIN` that applies fade effect to the player's volume change.
18795
+ * `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
18780
18796
  * @beta
18781
18797
  *
18782
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
+ *
18783
18801
  * Depends on {@link MediaControl} plugin.
18784
18802
  * Configuration options - {@link VolumeFadeSettings}
18785
18803
  */
@@ -18821,10 +18839,10 @@ class VolumeFade extends UICorePlugin {
18821
18839
  this.core.activeContainer?.volume &&
18822
18840
  !isNaN(this.core.activeContainer.volume)
18823
18841
  ? this.core.activeContainer.volume
18824
- : 80;
18842
+ : DEFAULT_VOLUME_LEVEL;
18825
18843
  }
18826
18844
  this.duration = this.options.volumeFade?.duration || DEFAULT_DURATION;
18827
- // TODO check if mute must be respected
18845
+ // TODO check if `mute` must be respected
18828
18846
  this.core.activeContainer?.setVolume(this.activeVolume);
18829
18847
  this.core.activePlayback.volume(0);
18830
18848
  }
@@ -0,0 +1,45 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@gcorevideo/player](./player.md) &gt; [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>
@@ -358,7 +358,7 @@ Description
358
358
 
359
359
  </td><td>
360
360
 
361
- **_(BETA)_** `PLUGIN` that applies fade effect to the player's volume change.
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
 
@@ -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
 
@@ -0,0 +1,50 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@gcorevideo/player](./player.md) &gt; [VolumeFade](./player.volumefade.md) &gt; [(constructor)](./player.volumefade._constructor_.md)
4
+
5
+ ## VolumeFade.(constructor)
6
+
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
+ >
9
+
10
+ Constructs a new instance of the `VolumeFade` class
11
+
12
+ **Signature:**
13
+
14
+ ```typescript
15
+ constructor(core: Core);
16
+ ```
17
+
18
+ ## Parameters
19
+
20
+ <table><thead><tr><th>
21
+
22
+ Parameter
23
+
24
+
25
+ </th><th>
26
+
27
+ Type
28
+
29
+
30
+ </th><th>
31
+
32
+ Description
33
+
34
+
35
+ </th></tr></thead>
36
+ <tbody><tr><td>
37
+
38
+ core
39
+
40
+
41
+ </td><td>
42
+
43
+ Core
44
+
45
+
46
+ </td><td>
47
+
48
+
49
+ </td></tr>
50
+ </tbody></table>
@@ -7,7 +7,7 @@
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
- `PLUGIN` that applies fade effect to the player's volume change.
10
+ `PLUGIN` that mutes the sound and fades it in when the mouse is over the player.
11
11
 
12
12
  **Signature:**
13
13
 
@@ -16,3 +16,42 @@ export declare class VolumeFade extends UICorePlugin
16
16
  ```
17
17
  **Extends:** UICorePlugin
18
18
 
19
+ ## Remarks
20
+
21
+ When the user moves the mouse over and away from the player, the sound is unmuted and unmuted with a fade effect.
22
+
23
+ Depends on [MediaControl](./player.mediacontrol.md) plugin. Configuration options - [VolumeFadeSettings](./player.volumefadesettings.md)
24
+
25
+ ## Constructors
26
+
27
+ <table><thead><tr><th>
28
+
29
+ Constructor
30
+
31
+
32
+ </th><th>
33
+
34
+ Modifiers
35
+
36
+
37
+ </th><th>
38
+
39
+ Description
40
+
41
+
42
+ </th></tr></thead>
43
+ <tbody><tr><td>
44
+
45
+ [(constructor)(core)](./player.volumefade._constructor_.md)
46
+
47
+
48
+ </td><td>
49
+
50
+
51
+ </td><td>
52
+
53
+ **_(BETA)_** Constructs a new instance of the `VolumeFade` class
54
+
55
+
56
+ </td></tr>
57
+ </tbody></table>
@@ -0,0 +1,18 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@gcorevideo/player](./player.md) &gt; [VolumeFadeSettings](./player.volumefadesettings.md)
4
+
5
+ ## VolumeFadeSettings type
6
+
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
+ >
9
+
10
+
11
+ **Signature:**
12
+
13
+ ```typescript
14
+ export type VolumeFadeSettings = {
15
+ level?: number;
16
+ duration?: number;
17
+ };
18
+ ```
@@ -72,6 +72,7 @@ export declare class NerdStats extends UICorePlugin {
72
72
  private updateResolution;
73
73
  private estimateQuality;
74
74
  private updateMetrics;
75
+ private updateCustomMetrics;
75
76
  private updateEstimatedQuality;
76
77
  private setStatsBoxSize;
77
78
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"NerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/NerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,IAAI,EAGL,MAAM,cAAc,CAAA;AAuBrB,OAAO,0DAA0D,CAAA;AAiCjE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,gBAAgB,CAIvB;IAED,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED,OAAO,CAAC,OAAO;IAKf,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;gBAEW,IAAI,EAAE,IAAI;IAgBtB;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,wBAAwB;IAiChC;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,MAAM,CAMb;IAED,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,aAAa;IAmFrB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IAcf,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;CAU3B"}
1
+ {"version":3,"file":"NerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/NerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,IAAI,EAGL,MAAM,cAAc,CAAA;AAuBrB,OAAO,0DAA0D,CAAA;AAiCjE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,gBAAgB,CAIvB;IAED,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED,OAAO,CAAC,OAAO;IAKf,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;gBAEW,IAAI,EAAE,IAAI;IAgBtB;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,wBAAwB;IAiChC;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,MAAM,CAMb;IAED,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,aAAa;IAmFrB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IAcf,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;CAU3B"}
@@ -225,8 +225,11 @@ export class NerdStats extends UICorePlugin {
225
225
  }
226
226
  updateMetrics(metrics) {
227
227
  trace(`${T} updateMetrics`, { custom: this.speedtestMetrics });
228
- Object.assign(this.metrics, metrics);
229
- this.updateEstimatedQuality();
228
+ Object.assign(this.metrics, metrics); // TODO no Object.assign
229
+ this.metrics.custom = {
230
+ ...this.speedtestMetrics,
231
+ };
232
+ this.updateCustomMetrics();
230
233
  this.$el
231
234
  .find('#nerd-stats-current-time')
232
235
  .text(Formatter.formatTime(this.metrics.extra.currentTime));
@@ -288,11 +291,16 @@ export class NerdStats extends UICorePlugin {
288
291
  .text(Formatter.formatFps(this.metrics.counters.fps));
289
292
  this.setStatsBoxSize();
290
293
  drawSpeedTestResults();
291
- drawSummary(this.speedtestMetrics, this.$el.find('#nerd-stats-quality-vod'), this.$el.find('#nerd-stats-quality-live'));
294
+ this.updateEstimatedQuality();
292
295
  if (!this.open) {
293
296
  this.hide();
294
297
  }
295
298
  }
299
+ updateCustomMetrics() {
300
+ this.$el.find('#nerd-stats-dl-text').text(this.metrics.custom.connectionSpeed.toFixed(2));
301
+ this.$el.find('#nerd-stats-ping-text').text(this.metrics.custom.ping.toFixed(2));
302
+ this.$el.find('#nerd-stats-jitter-text').text(this.metrics.custom.jitter.toFixed(2));
303
+ }
296
304
  updateEstimatedQuality() {
297
305
  this.estimateQuality();
298
306
  this.$el
@@ -301,6 +309,7 @@ export class NerdStats extends UICorePlugin {
301
309
  this.$el
302
310
  .find('#nerd-stats-quality-live-text')
303
311
  .html(this.metrics.custom.liveQuality);
312
+ drawSummary(this.speedtestMetrics, this.$el.find('#nerd-stats-quality-vod'), this.$el.find('#nerd-stats-quality-live'));
304
313
  }
305
314
  setStatsBoxSize() {
306
315
  if (this.playerWidth >= this.statsBoxWidthThreshold) {
@@ -345,6 +354,7 @@ export class NerdStats extends UICorePlugin {
345
354
  this.speedtestMetrics.ping = 0;
346
355
  this.speedtestMetrics.jitter = 0;
347
356
  if (clapprStats) {
357
+ clapprStats.clearMetrics();
348
358
  this.updateMetrics(clapprStats.exportMetrics());
349
359
  }
350
360
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Speedtest.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAID,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,YAAY,EAAE,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,CAAA;AAED,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;AAEnD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;AAIrD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,eAAe,CAAsB;IAE7C,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,SAAS,CAAU;IAE3B,OAAO,CAAC,MAAM,CAAI;IAElB,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,SAAS,CAA8B;IAE/C,OAAO,CAAC,cAAc,CAAK;IAE3B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAO;IAE/B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAO;IAErC,QAAQ;IAIR,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAY9C,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAiCrC,YAAY,CAAC,MAAM,EAAE,MAAM;IAY3B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAM5B,iBAAiB;IAQjB,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAShC,YAAY,CAAC,MAAM,EAAE,cAAc;IA0KnC,KAAK;IAsEL,KAAK;IASL,OAAO,CAAC,UAAU;CAUnB"}
1
+ {"version":3,"file":"Speedtest.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAID,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,YAAY,EAAE,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,CAAA;AAED,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;AAEnD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;AAIrD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,eAAe,CAAsB;IAE7C,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,SAAS,CAAU;IAE3B,OAAO,CAAC,MAAM,CAAI;IAElB,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,SAAS,CAA8B;IAE/C,OAAO,CAAC,cAAc,CAAK;IAE3B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAO;IAE/B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAO;IAErC,QAAQ;IAIR,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAY9C,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAiCrC,YAAY,CAAC,MAAM,EAAE,MAAM;IAa3B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAM5B,iBAAiB;IAQjB,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAShC,YAAY,CAAC,MAAM,EAAE,cAAc;IA0KnC,KAAK;IAsEL,KAAK;IASL,OAAO,CAAC,UAAU;CAUnB"}
@@ -61,6 +61,7 @@ export class Speedtest {
61
61
  }
62
62
  addTestPoint(server) {
63
63
  this._checkServerDefinition(server);
64
+ console.log('Speedtest addTestPoint %o', server);
64
65
  if (this._state === 0) {
65
66
  this._state = 1;
66
67
  }
@@ -30,7 +30,7 @@ const getColor = (speedValue) => {
30
30
  }
31
31
  };
32
32
  export function drawSpeedTestResults() {
33
- const canvas = document.getElementById('speedTestCanvas');
33
+ const canvas = document.getElementById('nerd-stats-speed-test-canvas');
34
34
  if (!canvas) {
35
35
  return;
36
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAUpD,eAAO,MAAM,kBAAkB,eAAgB,MAAM,KAAG,MAYvD,CAAA;AAED,eAAO,MAAM,cAAc,cAAe,MAAM,KAAG,MAYlD,CAAA;AAED,eAAO,MAAM,mBAAmB,YAAa,MAAM,KAAG,MAerD,CAAA;AAED,eAAO,MAAM,WAAW,kBACP,gBAAgB,gBACjB,WAAW,iBACV,WAAW,SAe3B,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAUpD,eAAO,MAAM,kBAAkB,eAAgB,MAAM,KAAG,MAiBvD,CAAA;AAED,eAAO,MAAM,cAAc,cAAe,MAAM,KAAG,MAiBlD,CAAA;AAED,eAAO,MAAM,mBAAmB,YAAa,MAAM,KAAG,MAerD,CAAA;AAED,eAAO,MAAM,WAAW,kBACP,gBAAgB,gBACjB,WAAW,iBACV,WAAW,SAe3B,CAAA"}
@@ -6,38 +6,40 @@ const qualityClasses = [
6
6
  'speedtest-quality-value-5',
7
7
  ];
8
8
  export const getDownloadQuality = (speedValue) => {
9
+ if (!speedValue) {
10
+ return 0;
11
+ }
9
12
  if (speedValue < 3) {
10
13
  return 1;
11
14
  }
12
- else if (speedValue < 7) {
15
+ if (speedValue < 7) {
13
16
  return 2;
14
17
  }
15
- else if (speedValue < 13) {
18
+ if (speedValue < 13) {
16
19
  return 3;
17
20
  }
18
- else if (speedValue < 25) {
21
+ if (speedValue < 25) {
19
22
  return 4;
20
23
  }
21
- else {
22
- return 5;
23
- }
24
+ return 5;
24
25
  };
25
26
  export const getPingQuality = (pingValue) => {
27
+ if (!pingValue) {
28
+ return 0;
29
+ }
26
30
  if (pingValue < 20) {
27
31
  return 5;
28
32
  }
29
- else if (pingValue < 50) {
33
+ if (pingValue < 50) {
30
34
  return 4;
31
35
  }
32
- else if (pingValue < 100) {
36
+ if (pingValue < 100) {
33
37
  return 3;
34
38
  }
35
- else if (pingValue < 150) {
39
+ if (pingValue < 150) {
36
40
  return 2;
37
41
  }
38
- else {
39
- return 1;
40
- }
42
+ return 1;
41
43
  };
42
44
  export const generateQualityHtml = (quality) => {
43
45
  const html = [];
@@ -54,9 +56,9 @@ export const generateQualityHtml = (quality) => {
54
56
  };
55
57
  export const drawSummary = (customMetrics, vodContainer, liveContainer) => {
56
58
  const { connectionSpeed, ping } = customMetrics;
57
- if (!connectionSpeed || !ping) {
58
- return;
59
- }
59
+ // if (!connectionSpeed || !ping) {
60
+ // return
61
+ // }
60
62
  const downloadQuality = getDownloadQuality(connectionSpeed);
61
63
  const pingQuality = getPingQuality(ping);
62
64
  const liveQuality = Math.min(downloadQuality, pingQuality);
@@ -56,6 +56,7 @@ export declare class ClapprStats extends ContainerPlugin {
56
56
  * @returns Measurements collected so far
57
57
  */
58
58
  exportMetrics(): ClapprStatsMetrics;
59
+ clearMetrics(): void;
59
60
  private onBitrate;
60
61
  private stopReporting;
61
62
  private startTimers;