@gcorevideo/player 2.19.15 → 2.20.3
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/level-selector/list.ejs +1 -1
- package/dist/core.js +2 -2
- package/dist/index.css +966 -966
- package/dist/index.js +884 -627
- package/dist/player.d.ts +536 -122
- package/dist/plugins/index.css +1160 -1160
- package/dist/plugins/index.js +2006 -1725
- package/docs/api/player.audioselector.md +1 -251
- package/docs/api/player.bigmutebutton.md +1 -156
- package/docs/api/player.clapprnerdstats.md +12 -259
- package/docs/api/player.clapprstats.exportmetrics.md +4 -0
- package/docs/api/player.clapprstats.md +7 -223
- package/docs/api/player.clapprstats.setupdatemetrics.md +2 -0
- package/docs/api/player.clicktopause.md +5 -113
- package/docs/api/player.clipsplugin.gettext.md +9 -0
- package/docs/api/player.clipsplugin.md +10 -94
- package/docs/api/{player.playbackrate.setselectedrate.md → player.clipspluginsettings.md} +18 -10
- package/docs/api/player.clipspluginsettings.text.md +13 -0
- package/docs/api/player.contextmenu._constructor_.md +6 -3
- package/docs/api/player.contextmenu.md +13 -256
- package/docs/api/player.contextmenupluginsettings.label.md +11 -0
- package/docs/api/player.contextmenupluginsettings.md +93 -0
- package/docs/api/player.contextmenupluginsettings.preventshowcontextmenu.md +11 -0
- package/docs/api/player.contextmenupluginsettings.url.md +11 -0
- package/docs/api/player.dvrcontrols.md +5 -1
- package/docs/api/player.errorscreen.attributes.md +3 -0
- package/docs/api/player.errorscreen.bindevents.md +3 -0
- package/docs/api/player.errorscreen.container.md +3 -0
- package/docs/api/player.errorscreen.hide.md +3 -0
- package/docs/api/player.errorscreen.md +25 -0
- package/docs/api/player.errorscreen.name.md +3 -0
- package/docs/api/player.errorscreen.render.md +3 -0
- package/docs/api/player.errorscreen.show.md +3 -0
- package/docs/api/player.errorscreen.supportedversion.md +3 -0
- package/docs/api/player.errorscreen.template.md +3 -0
- package/docs/api/player.errorscreen.unbindevents.md +3 -0
- package/docs/api/player.favicon._constructor_.md +3 -0
- package/docs/api/player.favicon.bindevents.md +3 -0
- package/docs/api/player.favicon.configure.md +3 -0
- package/docs/api/player.favicon.destroy.md +3 -0
- package/docs/api/player.favicon.disable.md +3 -0
- package/docs/api/player.favicon.md +18 -1
- package/docs/api/player.favicon.name.md +3 -0
- package/docs/api/player.favicon.supportedversion.md +3 -0
- package/docs/api/player.gearevents.md +4 -1
- package/docs/api/player.googleanalytics._constructor_.md +3 -0
- package/docs/api/player.googleanalytics.addeventlisteners.md +3 -0
- package/docs/api/player.googleanalytics.embedscript.md +3 -0
- package/docs/api/player.googleanalytics.md +42 -1
- package/docs/api/player.googleanalytics.name.md +3 -0
- package/docs/api/player.googleanalytics.onbufferfull.md +3 -0
- package/docs/api/player.googleanalytics.onbuffering.md +3 -0
- package/docs/api/player.googleanalytics.ondvr.md +3 -0
- package/docs/api/player.googleanalytics.onended.md +3 -0
- package/docs/api/player.googleanalytics.onerror.md +3 -0
- package/docs/api/player.googleanalytics.onfullscreen.md +3 -0
- package/docs/api/player.googleanalytics.onhd.md +3 -0
- package/docs/api/player.googleanalytics.onpause.md +3 -0
- package/docs/api/player.googleanalytics.onplay.md +3 -0
- package/docs/api/player.googleanalytics.onready.md +3 -0
- package/docs/api/player.googleanalytics.onseek.md +3 -0
- package/docs/api/player.googleanalytics.onstop.md +3 -0
- package/docs/api/player.googleanalytics.onvolumechanged.md +3 -0
- package/docs/api/player.googleanalytics.push.md +3 -0
- package/docs/api/player.googleanalytics.supportedversion.md +3 -0
- package/docs/api/{player.clapprstats.name.md → player.initeventdata.event.md} +3 -3
- package/docs/api/player.initeventdata.md +60 -0
- package/docs/api/player.logo._constructor_.md +3 -0
- package/docs/api/player.logo.attributes.md +3 -0
- package/docs/api/player.logo.bindevents.md +3 -0
- package/docs/api/player.logo.md +20 -1
- package/docs/api/player.logo.name.md +3 -0
- package/docs/api/player.logo.render.md +3 -0
- package/docs/api/player.logo.stoplistening.md +3 -0
- package/docs/api/player.logo.supportedversion.md +3 -0
- package/docs/api/player.logo.template.md +3 -0
- package/docs/api/player.md +149 -18
- package/docs/api/player.mediacontrolelement.md +1 -1
- package/docs/api/player.multicamera.md +2 -0
- package/docs/api/player.pictureinpicture.md +9 -197
- package/docs/api/player.playbackrate.md +10 -314
- package/docs/api/player.seektime.attributes.md +3 -0
- package/docs/api/player.seektime.bindevents.md +3 -0
- package/docs/api/player.seektime.durationshown.md +3 -0
- package/docs/api/player.seektime.getseektime.md +3 -0
- package/docs/api/player.seektime.islivestreamwithdvr.md +3 -0
- package/docs/api/player.seektime.md +31 -0
- package/docs/api/player.seektime.mediacontrol.md +3 -0
- package/docs/api/player.seektime.mediacontrolcontainer.md +3 -0
- package/docs/api/player.seektime.name.md +3 -0
- package/docs/api/player.seektime.render.md +3 -0
- package/docs/api/player.seektime.shouldbevisible.md +3 -0
- package/docs/api/player.seektime.supportedversion.md +3 -0
- package/docs/api/player.seektime.template.md +3 -0
- package/docs/api/player.seektime.update.md +3 -0
- package/docs/api/player.share.md +2 -0
- package/docs/api/player.skiptime.md +2 -0
- package/docs/api/{player.clapprstats.destroy.md → player.stalleventdata.count.md} +5 -7
- package/docs/api/{player.bigmutebutton.template.md → player.stalleventdata.event.md} +3 -3
- package/docs/api/player.stalleventdata.md +117 -0
- package/docs/api/{player.audioselector.onshowlevelselectmenu.md → player.stalleventdata.time.md} +5 -7
- package/docs/api/{player.clapprstats.starttimers.md → player.stalleventdata.total_ms.md} +5 -7
- package/docs/api/{player.audioselector.template.md → player.starteventdata.event.md} +3 -3
- package/docs/api/player.starteventdata.md +60 -0
- package/docs/api/{player.clapprstats._defaultreport.md → player.telemetry._constructor_.md} +7 -9
- package/docs/api/player.telemetry.md +146 -0
- package/docs/api/{player.clapprnerdstats.name.md → player.telemetry.name.md} +4 -2
- package/docs/api/{player.clapprstats.supportedversion.md → player.telemetry.supportedversion.md} +4 -2
- package/docs/api/player.telemetryevent.md +100 -0
- package/docs/api/player.telemetryeventdata.md +18 -0
- package/docs/api/player.telemetrypluginsettings.md +60 -0
- package/docs/api/{player.audioselector.bindevents.md → player.telemetrypluginsettings.send.md} +5 -7
- package/docs/api/{player.audioselector.reload.md → player.telemetryrecord.md} +8 -6
- package/docs/api/player.thumbnails.md +21 -139
- package/docs/api/player.thumbnailspluginsettings.md +23 -0
- package/docs/api/player.volumefade.md +1 -93
- package/docs/api/{player.audioselector.name.md → player.watcheventdata.event.md} +3 -3
- package/docs/api/player.watcheventdata.md +60 -0
- package/lib/index.plugins.d.ts +2 -3
- package/lib/index.plugins.d.ts.map +1 -1
- package/lib/index.plugins.js +2 -3
- package/lib/playback/hls-playback/HlsPlayback.js +1 -1
- package/lib/plugins/audio-selector/AudioSelector.d.ts +28 -6
- package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -1
- package/lib/plugins/audio-selector/AudioSelector.js +52 -22
- package/lib/plugins/big-mute-button/BigMuteButton.d.ts +18 -2
- package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -1
- package/lib/plugins/big-mute-button/BigMuteButton.js +21 -16
- package/lib/plugins/bottom-gear/BottomGear.d.ts +1 -0
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +1 -0
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts +38 -5
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +63 -17
- package/lib/plugins/clappr-stats/ClapprStats.d.ts +31 -8
- package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
- package/lib/plugins/clappr-stats/ClapprStats.js +24 -0
- package/lib/plugins/clappr-stats/types.d.ts +12 -0
- package/lib/plugins/clappr-stats/types.d.ts.map +1 -1
- package/lib/plugins/clappr-stats/types.js +3 -0
- package/lib/plugins/click-to-pause/ClickToPause.d.ts +13 -1
- package/lib/plugins/click-to-pause/ClickToPause.d.ts.map +1 -1
- package/lib/plugins/click-to-pause/ClickToPause.js +14 -4
- package/lib/plugins/clips/Clips.d.ts +34 -2
- package/lib/plugins/clips/Clips.d.ts.map +1 -1
- package/lib/plugins/clips/Clips.js +51 -22
- package/lib/plugins/context-menu/ContextMenu.d.ts +40 -13
- package/lib/plugins/context-menu/ContextMenu.d.ts.map +1 -1
- package/lib/plugins/context-menu/ContextMenu.js +48 -36
- package/lib/plugins/dvr-controls/DvrControls.d.ts +5 -4
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +15 -29
- package/lib/plugins/error-screen/ErrorScreen.d.ts +4 -0
- package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
- package/lib/plugins/error-screen/ErrorScreen.js +4 -0
- package/lib/plugins/favicon/Favicon.d.ts +4 -0
- package/lib/plugins/favicon/Favicon.d.ts.map +1 -1
- package/lib/plugins/favicon/Favicon.js +4 -0
- package/lib/plugins/google-analytics/GoogleAnalytics.d.ts +4 -0
- package/lib/plugins/google-analytics/GoogleAnalytics.d.ts.map +1 -1
- package/lib/plugins/google-analytics/GoogleAnalytics.js +5 -1
- package/lib/plugins/index.d.ts +2 -4
- package/lib/plugins/index.d.ts.map +1 -1
- package/lib/plugins/index.js +2 -4
- package/lib/plugins/logo/Logo.d.ts +4 -0
- package/lib/plugins/logo/Logo.d.ts.map +1 -1
- package/lib/plugins/logo/Logo.js +4 -0
- package/lib/plugins/media-control/MediaControl.d.ts +1 -1
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +3 -1
- package/lib/plugins/multi-camera/MultiCamera.d.ts +3 -0
- package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -1
- package/lib/plugins/multi-camera/MultiCamera.js +3 -0
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +32 -4
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts.map +1 -1
- package/lib/plugins/picture-in-picture/PictureInPicture.js +30 -2
- package/lib/plugins/playback-rate/PlaybackRate.d.ts +47 -14
- package/lib/plugins/playback-rate/PlaybackRate.d.ts.map +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +38 -9
- package/lib/plugins/seek-time/SeekTime.d.ts +4 -0
- package/lib/plugins/seek-time/SeekTime.d.ts.map +1 -1
- package/lib/plugins/seek-time/SeekTime.js +5 -1
- package/lib/plugins/share/Share.d.ts +3 -0
- package/lib/plugins/share/Share.d.ts.map +1 -1
- package/lib/plugins/share/Share.js +3 -0
- package/lib/plugins/skip-time/SkipTime.d.ts +3 -0
- package/lib/plugins/skip-time/SkipTime.d.ts.map +1 -1
- package/lib/plugins/skip-time/SkipTime.js +3 -0
- package/lib/plugins/statistics/Statistics.d.ts +38 -3
- package/lib/plugins/statistics/Statistics.d.ts.map +1 -1
- package/lib/plugins/statistics/Statistics.js +51 -9
- package/lib/plugins/telemetry/Telemetry.d.ts +153 -0
- package/lib/plugins/telemetry/Telemetry.d.ts.map +1 -0
- package/lib/plugins/telemetry/Telemetry.js +181 -0
- package/lib/plugins/thumbnails/Thumbnails.d.ts +48 -3
- package/lib/plugins/thumbnails/Thumbnails.d.ts.map +1 -1
- package/lib/plugins/thumbnails/Thumbnails.js +52 -18
- package/lib/plugins/volume-fade/VolumeFade.d.ts +8 -1
- package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
- package/lib/plugins/volume-fade/VolumeFade.js +9 -1
- package/package.json +1 -1
- package/src/index.plugins.ts +2 -3
- package/src/playback/hls-playback/HlsPlayback.ts +1 -1
- package/src/plugins/audio-selector/AudioSelector.ts +227 -154
- package/src/plugins/big-mute-button/BigMuteButton.ts +100 -79
- package/src/plugins/bottom-gear/BottomGear.ts +1 -0
- package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +240 -173
- package/src/plugins/clappr-stats/ClapprStats.ts +32 -8
- package/src/plugins/clappr-stats/types.ts +13 -0
- package/src/plugins/click-to-pause/ClickToPause.ts +47 -36
- package/src/plugins/clips/Clips.ts +127 -71
- package/src/plugins/context-menu/ContextMenu.ts +105 -76
- package/src/plugins/dvr-controls/DvrControls.ts +15 -31
- package/src/plugins/error-screen/ErrorScreen.ts +4 -0
- package/src/plugins/favicon/Favicon.ts +4 -0
- package/src/plugins/google-analytics/GoogleAnalytics.ts +5 -1
- package/src/plugins/index.ts +2 -4
- package/src/plugins/level-selector/__tests__/LevelSelector.test.ts +47 -26
- package/src/plugins/level-selector/__tests__/__snapshots__/LevelSelector.test.ts.snap +18 -18
- package/src/plugins/logo/Logo.ts +4 -0
- package/src/plugins/media-control/MediaControl.ts +4 -1
- package/src/plugins/multi-camera/MultiCamera.ts +3 -0
- package/src/plugins/picture-in-picture/PictureInPicture.ts +35 -7
- package/src/plugins/playback-rate/PlaybackRate.ts +53 -24
- package/src/plugins/seek-time/SeekTime.ts +5 -1
- package/src/plugins/share/Share.ts +3 -0
- package/src/plugins/skip-time/SkipTime.ts +3 -0
- package/src/plugins/telemetry/Telemetry.ts +317 -0
- package/src/plugins/thumbnails/Thumbnails.ts +268 -194
- package/src/plugins/volume-fade/VolumeFade.ts +10 -2
- package/temp/player.api.json +2457 -5257
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.audioselector.attributes.md +0 -17
- package/docs/api/player.audioselector.events.md +0 -17
- package/docs/api/player.audioselector.hideselecttrackmenu.md +0 -18
- package/docs/api/player.audioselector.render.md +0 -18
- package/docs/api/player.audioselector.supportedversion.md +0 -16
- package/docs/api/player.audioselector.togglecontextmenu.md +0 -18
- package/docs/api/player.audioselector.unbindevents.md +0 -18
- package/docs/api/player.audioselector.version.md +0 -14
- package/docs/api/player.bigmutebutton.bindevents.md +0 -18
- package/docs/api/player.bigmutebutton.events.md +0 -17
- package/docs/api/player.bigmutebutton.name.md +0 -14
- package/docs/api/player.bigmutebutton.render.md +0 -18
- package/docs/api/player.bigmutebutton.supportedversion.md +0 -16
- package/docs/api/player.clapprnerdstats.attributes.md +0 -17
- package/docs/api/player.clapprnerdstats.bindevents.md +0 -18
- package/docs/api/player.clapprnerdstats.events.md +0 -18
- package/docs/api/player.clapprnerdstats.playerheight.md +0 -14
- package/docs/api/player.clapprnerdstats.playerwidth.md +0 -14
- package/docs/api/player.clapprnerdstats.render.md +0 -18
- package/docs/api/player.clapprnerdstats.statsboxelem.md +0 -14
- package/docs/api/player.clapprnerdstats.statsboxwidththreshold.md +0 -14
- package/docs/api/player.clapprnerdstats.supportedversion.md +0 -16
- package/docs/api/player.clapprnerdstats.template.md +0 -14
- package/docs/api/player.clapprstats._buildreport.md +0 -18
- package/docs/api/player.clapprstats._playbackname.md +0 -14
- package/docs/api/player.clapprstats._playbacktype.md +0 -14
- package/docs/api/player.clapprstats.bindevents.md +0 -18
- package/docs/api/player.clapprstats.onfirstplaying.md +0 -18
- package/docs/api/player.clapprstats.playafterpause.md +0 -18
- package/docs/api/player.clapprstats.stopreporting.md +0 -18
- package/docs/api/player.clicktopause.bindevents.md +0 -15
- package/docs/api/player.clicktopause.config.md +0 -11
- package/docs/api/player.clicktopause.name.md +0 -11
- package/docs/api/player.clicktopause.supportedversion.md +0 -13
- package/docs/api/player.clipsplugin.attributes.md +0 -13
- package/docs/api/player.clipsplugin.bindevents.md +0 -15
- package/docs/api/player.clipsplugin.makesvg.md +0 -49
- package/docs/api/player.clipsplugin.name.md +0 -11
- package/docs/api/player.clipsplugin.unbindevents.md +0 -15
- package/docs/api/player.contextmenu.attributes.md +0 -13
- package/docs/api/player.contextmenu.bindevents.md +0 -15
- package/docs/api/player.contextmenu.destroy.md +0 -15
- package/docs/api/player.contextmenu.events.md +0 -13
- package/docs/api/player.contextmenu.exposeversion.md +0 -14
- package/docs/api/player.contextmenu.label.md +0 -11
- package/docs/api/player.contextmenu.mediacontrol.md +0 -11
- package/docs/api/player.contextmenu.name.md +0 -11
- package/docs/api/player.contextmenu.render.md +0 -15
- package/docs/api/player.contextmenu.supportedversion.md +0 -13
- package/docs/api/player.contextmenu.template.md +0 -11
- package/docs/api/player.contextmenu.url.md +0 -11
- package/docs/api/player.disablecontrols.bindevents.md +0 -15
- package/docs/api/player.disablecontrols.container.md +0 -11
- package/docs/api/player.disablecontrols.md +0 -138
- package/docs/api/player.disablecontrols.name.md +0 -11
- package/docs/api/player.disablecontrols.supportedversion.md +0 -13
- package/docs/api/player.disablecontrols.unbindevents.md +0 -15
- package/docs/api/player.pictureinpicture.bindevents.md +0 -15
- package/docs/api/player.pictureinpicture.events.md +0 -13
- package/docs/api/player.pictureinpicture.exitpictureinpicture.md +0 -15
- package/docs/api/player.pictureinpicture.name.md +0 -11
- package/docs/api/player.pictureinpicture.render.md +0 -15
- package/docs/api/player.pictureinpicture.requestpictureinpicture.md +0 -15
- package/docs/api/player.pictureinpicture.supportedversion.md +0 -13
- package/docs/api/player.pictureinpicture.togglepictureinpicture.md +0 -15
- package/docs/api/player.pictureinpicture.version.md +0 -11
- package/docs/api/player.pictureinpicture.videoelement.md +0 -11
- package/docs/api/player.playbackrate.attributes.md +0 -14
- package/docs/api/player.playbackrate.bindevents.md +0 -15
- package/docs/api/player.playbackrate.events.md +0 -15
- package/docs/api/player.playbackrate.gettitle.md +0 -15
- package/docs/api/player.playbackrate.goback.md +0 -15
- package/docs/api/player.playbackrate.highlightcurrentrate.md +0 -15
- package/docs/api/player.playbackrate.name.md +0 -11
- package/docs/api/player.playbackrate.onfinishad.md +0 -15
- package/docs/api/player.playbackrate.onplay.md +0 -15
- package/docs/api/player.playbackrate.onrateselect.md +0 -49
- package/docs/api/player.playbackrate.onshowmenu.md +0 -15
- package/docs/api/player.playbackrate.onstartad.md +0 -15
- package/docs/api/player.playbackrate.onstop.md +0 -15
- package/docs/api/player.playbackrate.reload.md +0 -15
- package/docs/api/player.playbackrate.render.md +0 -15
- package/docs/api/player.playbackrate.supportedversion.md +0 -13
- package/docs/api/player.playbackrate.template.md +0 -11
- package/docs/api/player.playbackrate.unbindevents.md +0 -15
- package/docs/api/player.playbackrate.updateplaybackrate.md +0 -49
- package/docs/api/player.pluginsettings.md +0 -13
- package/docs/api/player.statistics._constructor_.md +0 -47
- package/docs/api/player.statistics.bindevents.md +0 -15
- package/docs/api/player.statistics.md +0 -141
- package/docs/api/player.statistics.name.md +0 -11
- package/docs/api/player.statistics.supportedversion.md +0 -13
- package/docs/api/player.thumbnails.attributes.md +0 -13
- package/docs/api/player.thumbnails.bindevents.md +0 -15
- package/docs/api/player.thumbnails.name.md +0 -11
- package/docs/api/player.thumbnails.settext.md +0 -49
- package/docs/api/player.thumbnails.supportedversion.md +0 -13
- package/docs/api/player.thumbnails.template.md +0 -11
- package/docs/api/player.volumefade.bindevents.md +0 -18
- package/docs/api/player.volumefade.name.md +0 -14
- package/docs/api/player.volumefade.unbindevents.md +0 -18
- package/src/plugins/disable-controls/DisableControls.ts +0 -81
- package/src/plugins/ga-events/GaEvents.js +0 -395
- package/src/plugins/ga-events/ga-tracking.js +0 -46
- package/src/plugins/statistics/Statistics.ts +0 -207
- /package/src/plugins/{statistics → telemetry}/Statistics copy.xts +0 -0
|
@@ -23,7 +23,10 @@ type UriToMeasureBandwidth = {
|
|
|
23
23
|
const updateMetrics = () => {};
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
+
* Collects useful statistics about playback performance.
|
|
26
27
|
* @beta
|
|
28
|
+
* @remarks
|
|
29
|
+
* This plugin does not render anything and is supposed to be extended or used together with other plugins that actually render something.
|
|
27
30
|
*/
|
|
28
31
|
export class ClapprStats extends ContainerPlugin {
|
|
29
32
|
private bwMeasureCount = 0;
|
|
@@ -60,19 +63,25 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
60
63
|
|
|
61
64
|
private uriToMeasureLatency: string | undefined;
|
|
62
65
|
|
|
66
|
+
/**
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
63
69
|
get name() {
|
|
64
70
|
return 'clappr_stats';
|
|
65
71
|
}
|
|
66
72
|
|
|
73
|
+
/**
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
67
76
|
get supportedVersion() {
|
|
68
77
|
return { min: CLAPPR_VERSION };
|
|
69
78
|
}
|
|
70
79
|
|
|
71
|
-
get _playbackName() {
|
|
80
|
+
private get _playbackName() {
|
|
72
81
|
return String(this.container.playback.name || '');
|
|
73
82
|
}
|
|
74
83
|
|
|
75
|
-
get _playbackType() {
|
|
84
|
+
private get _playbackType() {
|
|
76
85
|
return this.container.getPlaybackType();
|
|
77
86
|
}
|
|
78
87
|
|
|
@@ -100,11 +109,15 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
100
109
|
this.metrics.timers[timer] += this._now() - this.timers[timer];
|
|
101
110
|
}
|
|
102
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Registers a callback to receive the metrics.
|
|
114
|
+
* @param updateMetricsFn
|
|
115
|
+
*/
|
|
103
116
|
setUpdateMetrics(updateMetricsFn: MetricsUpdateFn) {
|
|
104
117
|
this.updateFn = updateMetricsFn;
|
|
105
118
|
}
|
|
106
119
|
|
|
107
|
-
_defaultReport(metrics: Metrics) {
|
|
120
|
+
private _defaultReport(metrics: Metrics) {
|
|
108
121
|
this.updateFn(metrics);
|
|
109
122
|
}
|
|
110
123
|
|
|
@@ -122,6 +135,9 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
122
135
|
};
|
|
123
136
|
}
|
|
124
137
|
|
|
138
|
+
/**
|
|
139
|
+
* @internal
|
|
140
|
+
*/
|
|
125
141
|
override bindEvents() {
|
|
126
142
|
this.listenTo(this.container, CoreEvents.CONTAINER_BITRATE, this.onBitrate);
|
|
127
143
|
this.listenTo(this.container, CoreEvents.CONTAINER_STOP, this.stopReporting);
|
|
@@ -141,11 +157,18 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
141
157
|
this.listenTo(this.container.playback, CoreEvents.PLAYBACK_TIMEUPDATE, this.onTimeUpdate);
|
|
142
158
|
}
|
|
143
159
|
|
|
160
|
+
/**
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
144
163
|
override destroy() {
|
|
145
164
|
this.stopReporting();
|
|
146
165
|
super.destroy();
|
|
147
166
|
}
|
|
148
167
|
|
|
168
|
+
/**
|
|
169
|
+
* Returns the collected metrics.
|
|
170
|
+
* @returns The collected metrics
|
|
171
|
+
*/
|
|
149
172
|
exportMetrics() {
|
|
150
173
|
return structuredClone(this.metrics);
|
|
151
174
|
}
|
|
@@ -166,7 +189,7 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
166
189
|
this._inc('changeLevel');
|
|
167
190
|
}
|
|
168
191
|
|
|
169
|
-
stopReporting() {
|
|
192
|
+
private stopReporting() {
|
|
170
193
|
this._buildReport();
|
|
171
194
|
|
|
172
195
|
if (this.intervalId !== null) {
|
|
@@ -175,25 +198,26 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
175
198
|
}
|
|
176
199
|
this._newMetrics();
|
|
177
200
|
|
|
201
|
+
// TODO
|
|
178
202
|
// @ts-ignore
|
|
179
203
|
this.stopListening();
|
|
180
204
|
this.bindEvents();
|
|
181
205
|
}
|
|
182
206
|
|
|
183
|
-
startTimers() {
|
|
207
|
+
private startTimers() {
|
|
184
208
|
this.intervalId = setInterval(this._buildReport.bind(this), this.runEach);
|
|
185
209
|
this.start('session');
|
|
186
210
|
this.start('startup');
|
|
187
211
|
}
|
|
188
212
|
|
|
189
|
-
onFirstPlaying() {
|
|
213
|
+
private onFirstPlaying() {
|
|
190
214
|
this.listenTo(this.container, CoreEvents.CONTAINER_TIMEUPDATE, this.onContainerUpdateWhilePlaying);
|
|
191
215
|
|
|
192
216
|
this.start('watch');
|
|
193
217
|
this._stop('startup');
|
|
194
218
|
}
|
|
195
219
|
|
|
196
|
-
playAfterPause() {
|
|
220
|
+
private playAfterPause() {
|
|
197
221
|
this.listenTo(this.container, CoreEvents.CONTAINER_TIMEUPDATE, this.onContainerUpdateWhilePlaying);
|
|
198
222
|
this._stop('pause');
|
|
199
223
|
this.start('watch');
|
|
@@ -280,7 +304,7 @@ export class ClapprStats extends ContainerPlugin {
|
|
|
280
304
|
}
|
|
281
305
|
}
|
|
282
306
|
|
|
283
|
-
_buildReport() {
|
|
307
|
+
private _buildReport() {
|
|
284
308
|
this._stop('session');
|
|
285
309
|
this.start('session');
|
|
286
310
|
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @beta
|
|
4
|
+
*/
|
|
1
5
|
export type Metrics = {
|
|
2
6
|
counters: {
|
|
3
7
|
play: number;
|
|
@@ -37,6 +41,9 @@ export type Metrics = {
|
|
|
37
41
|
custom: Record<string, unknown>;
|
|
38
42
|
};
|
|
39
43
|
|
|
44
|
+
/**
|
|
45
|
+
* @beta
|
|
46
|
+
*/
|
|
40
47
|
export type BitrateTrackRecord = {
|
|
41
48
|
start: number;
|
|
42
49
|
end?: number;
|
|
@@ -44,8 +51,14 @@ export type BitrateTrackRecord = {
|
|
|
44
51
|
bitrate: number;
|
|
45
52
|
}
|
|
46
53
|
|
|
54
|
+
/**
|
|
55
|
+
* @beta
|
|
56
|
+
*/
|
|
47
57
|
export type MetricsUpdateFn = (metrics: Metrics) => void;
|
|
48
58
|
|
|
59
|
+
/**
|
|
60
|
+
* @beta
|
|
61
|
+
*/
|
|
49
62
|
export enum ClapprStatsEvents {
|
|
50
63
|
REPORT_EVENT = 'clappr:stats:report',
|
|
51
64
|
PERCENTAGE_EVENT = 'clappr:stats:percentage',
|
|
@@ -1,63 +1,74 @@
|
|
|
1
1
|
//Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
2
2
|
// Use of this source code is governed by a BSD-style
|
|
3
|
-
// license that can be found
|
|
3
|
+
// license that can be found at https://github.com/clappr/clappr-plugins/blob/master/LICENSE.
|
|
4
4
|
|
|
5
|
-
import { ContainerPlugin, Events, Playback } from '@clappr/core'
|
|
6
|
-
import { trace } from '@gcorevideo/utils'
|
|
5
|
+
import { ContainerPlugin, Events, Playback } from '@clappr/core'
|
|
6
|
+
import { trace } from '@gcorevideo/utils'
|
|
7
7
|
|
|
8
|
-
import { CLAPPR_VERSION } from '../../build.js'
|
|
8
|
+
import { CLAPPR_VERSION } from '../../build.js'
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
type Timer = ReturnType<typeof setTimeout>
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const T = 'plugins.click_to_pause_custom';
|
|
12
|
+
const T = 'plugins.click_to_pause_custom'
|
|
15
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Adds a behavior of toggling the playback state on click over the container
|
|
16
|
+
* @beta
|
|
17
|
+
*/
|
|
16
18
|
export class ClickToPause extends ContainerPlugin {
|
|
17
|
-
private pointerEnabled = false
|
|
19
|
+
private pointerEnabled = false
|
|
18
20
|
|
|
19
|
-
private timer: Timer | null = null
|
|
21
|
+
private timer: Timer | null = null
|
|
20
22
|
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
21
26
|
get name() {
|
|
22
|
-
return 'click_to_pause_custom'
|
|
27
|
+
return 'click_to_pause_custom'
|
|
23
28
|
}
|
|
24
29
|
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
25
33
|
get supportedVersion() {
|
|
26
|
-
return { min: CLAPPR_VERSION }
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
get config() {
|
|
30
|
-
return this.container.options.clickToPauseConfig || {};
|
|
34
|
+
return { min: CLAPPR_VERSION }
|
|
31
35
|
}
|
|
32
36
|
|
|
37
|
+
/**
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
33
40
|
override bindEvents() {
|
|
34
|
-
this.listenTo(this.container, Events.CONTAINER_CLICK, this.click)
|
|
35
|
-
this.listenTo(
|
|
41
|
+
this.listenTo(this.container, Events.CONTAINER_CLICK, this.click)
|
|
42
|
+
this.listenTo(
|
|
43
|
+
this.container,
|
|
44
|
+
Events.CONTAINER_SETTINGSUPDATE,
|
|
45
|
+
this.settingsUpdate,
|
|
46
|
+
)
|
|
36
47
|
}
|
|
37
48
|
|
|
38
49
|
private click() {
|
|
39
|
-
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE
|
|
40
|
-
const isDvrEnabled = this.container.isDvrEnabled()
|
|
50
|
+
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE
|
|
51
|
+
const isDvrEnabled = this.container.isDvrEnabled()
|
|
41
52
|
|
|
42
53
|
trace(`${T} click`, {
|
|
43
54
|
isLivePlayback,
|
|
44
55
|
isDvrEnabled,
|
|
45
|
-
})
|
|
56
|
+
})
|
|
46
57
|
|
|
47
58
|
if (isLivePlayback && !isDvrEnabled) {
|
|
48
|
-
this.togglePlay(true)
|
|
59
|
+
this.togglePlay(true)
|
|
49
60
|
} else if (!isLivePlayback || isDvrEnabled) {
|
|
50
|
-
this.clearTimer()
|
|
61
|
+
this.clearTimer()
|
|
51
62
|
this.timer = setTimeout(() => {
|
|
52
63
|
this.timer = null
|
|
53
|
-
this.togglePlay(false)
|
|
54
|
-
}, 300)
|
|
64
|
+
this.togglePlay(false)
|
|
65
|
+
}, 300)
|
|
55
66
|
}
|
|
56
67
|
}
|
|
57
68
|
|
|
58
69
|
private settingsUpdate() {
|
|
59
|
-
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE
|
|
60
|
-
const pointerEnabled = !isLivePlayback || this.container.isDvrEnabled()
|
|
70
|
+
const isLivePlayback = this.container.getPlaybackType() === Playback.LIVE
|
|
71
|
+
const pointerEnabled = !isLivePlayback || this.container.isDvrEnabled()
|
|
61
72
|
|
|
62
73
|
trace(`${T} settingsUpdate`, {
|
|
63
74
|
isLivePlayback,
|
|
@@ -65,29 +76,29 @@ export class ClickToPause extends ContainerPlugin {
|
|
|
65
76
|
})
|
|
66
77
|
|
|
67
78
|
if (pointerEnabled === this.pointerEnabled) {
|
|
68
|
-
return
|
|
79
|
+
return
|
|
69
80
|
}
|
|
70
81
|
|
|
71
|
-
const method = pointerEnabled ? 'addClass' : 'removeClass'
|
|
82
|
+
const method = pointerEnabled ? 'addClass' : 'removeClass'
|
|
72
83
|
|
|
73
|
-
this.container.$el[method]('pointer-enabled')
|
|
74
|
-
this.pointerEnabled = pointerEnabled
|
|
84
|
+
this.container.$el[method]('pointer-enabled')
|
|
85
|
+
this.pointerEnabled = pointerEnabled
|
|
75
86
|
}
|
|
76
87
|
|
|
77
88
|
private togglePlay(useStop: boolean) {
|
|
78
|
-
const isPlaying = this.container && this.container.isPlaying()
|
|
89
|
+
const isPlaying = this.container && this.container.isPlaying()
|
|
79
90
|
|
|
80
91
|
if (isPlaying) {
|
|
81
|
-
useStop ? this.container.stop() : this.container.pause()
|
|
92
|
+
useStop ? this.container.stop() : this.container.pause()
|
|
82
93
|
} else {
|
|
83
|
-
this.container.play()
|
|
94
|
+
this.container.play()
|
|
84
95
|
}
|
|
85
96
|
}
|
|
86
97
|
|
|
87
98
|
private clearTimer() {
|
|
88
99
|
if (this.timer) {
|
|
89
|
-
clearTimeout(this.timer)
|
|
90
|
-
this.timer = null
|
|
100
|
+
clearTimeout(this.timer)
|
|
101
|
+
this.timer = null
|
|
91
102
|
}
|
|
92
103
|
}
|
|
93
104
|
}
|
|
@@ -1,115 +1,158 @@
|
|
|
1
|
-
import { Container, Events, UICorePlugin, $ } from '@clappr/core'
|
|
1
|
+
import { Container, Events, UICorePlugin, $ } from '@clappr/core'
|
|
2
2
|
|
|
3
|
-
import { TimeProgress } from '../../playback.types.js'
|
|
4
|
-
import type { ZeptoResult } from '../../utils/types.js'
|
|
5
|
-
import { strtimeToMiliseconds } from '../utils.js'
|
|
6
|
-
import '../../../assets/clips/clips.scss'
|
|
3
|
+
import { TimeProgress } from '../../playback.types.js'
|
|
4
|
+
import type { ZeptoResult } from '../../utils/types.js'
|
|
5
|
+
import { strtimeToMiliseconds } from '../utils.js'
|
|
6
|
+
import '../../../assets/clips/clips.scss'
|
|
7
|
+
import assert from 'assert'
|
|
7
8
|
|
|
8
9
|
type ClipDesc = {
|
|
9
|
-
start: number
|
|
10
|
-
text: string
|
|
11
|
-
end: number
|
|
12
|
-
index: number
|
|
10
|
+
start: number
|
|
11
|
+
text: string
|
|
12
|
+
end: number
|
|
13
|
+
index: number
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
type ClipItem = {
|
|
16
|
-
start: number
|
|
17
|
-
text: string
|
|
17
|
+
start: number
|
|
18
|
+
text: string
|
|
18
19
|
}
|
|
19
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Configuration options
|
|
23
|
+
*/
|
|
24
|
+
export interface ClipsPluginSettings {
|
|
25
|
+
/**
|
|
26
|
+
* The text to display over the seekbar.
|
|
27
|
+
*/
|
|
28
|
+
text: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Adds a behavior of showing a text over the seekbar to indicate the current clip.
|
|
33
|
+
* @beta
|
|
34
|
+
* @remarks
|
|
35
|
+
* Depends on:
|
|
36
|
+
*
|
|
37
|
+
* - {@link MediaControl}
|
|
38
|
+
*
|
|
39
|
+
* Configuration options - {@link ClipsPluginSettings}
|
|
40
|
+
*/
|
|
20
41
|
export class ClipsPlugin extends UICorePlugin {
|
|
21
42
|
private clips: Map<number, ClipDesc> = new Map()
|
|
22
43
|
|
|
23
|
-
private duration: number = 0
|
|
44
|
+
private duration: number = 0
|
|
24
45
|
|
|
25
|
-
private durationGetting = false
|
|
46
|
+
private durationGetting = false
|
|
26
47
|
|
|
27
|
-
private _oldContainer: Container | undefined
|
|
48
|
+
private _oldContainer: Container | undefined
|
|
28
49
|
|
|
29
|
-
private svgMask: ZeptoResult | null = null
|
|
50
|
+
private svgMask: ZeptoResult | null = null
|
|
30
51
|
|
|
52
|
+
/**
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
31
55
|
get name() {
|
|
32
|
-
return '
|
|
56
|
+
return 'clips'
|
|
33
57
|
}
|
|
34
58
|
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
35
62
|
override get attributes() {
|
|
36
63
|
return {
|
|
37
|
-
|
|
38
|
-
}
|
|
64
|
+
class: this.name,
|
|
65
|
+
}
|
|
39
66
|
}
|
|
40
67
|
|
|
68
|
+
/**
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
41
71
|
override bindEvents() {
|
|
42
|
-
this.
|
|
43
|
-
|
|
44
|
-
this.
|
|
72
|
+
const mediaControl = this.core.getPlugin('media_control')
|
|
73
|
+
assert(mediaControl, 'media_control plugin is required')
|
|
74
|
+
this.listenToOnce(this.core, Events.CORE_READY, this._onCoreReady)
|
|
75
|
+
// TODO listen to CORE_ACTIVE_CONTAINER_CHANGED
|
|
76
|
+
this.listenTo(
|
|
77
|
+
mediaControl,
|
|
78
|
+
Events.MEDIACONTROL_CONTAINERCHANGED,
|
|
79
|
+
this._onMediaControlContainerChanged,
|
|
80
|
+
)
|
|
81
|
+
this.listenTo(this.core, Events.CORE_RESIZE, this.playerResize)
|
|
45
82
|
}
|
|
46
83
|
|
|
47
84
|
private _onCoreReady() {
|
|
48
85
|
if (!this.options.clips) {
|
|
49
|
-
this.destroy()
|
|
86
|
+
this.destroy()
|
|
50
87
|
|
|
51
|
-
return
|
|
88
|
+
return
|
|
52
89
|
}
|
|
53
90
|
|
|
54
|
-
this.parseClips()
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
unbindEvents() {
|
|
58
|
-
// @ts-ignore
|
|
59
|
-
this.stopListening(this.core, Events.CORE_READY);
|
|
60
|
-
// @ts-ignore
|
|
61
|
-
this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED);
|
|
91
|
+
this.parseClips()
|
|
62
92
|
}
|
|
63
93
|
|
|
64
94
|
private _onMediaControlContainerChanged() {
|
|
65
|
-
this._bindContainerEvents()
|
|
95
|
+
this._bindContainerEvents()
|
|
66
96
|
}
|
|
67
97
|
|
|
68
98
|
private playerResize() {
|
|
69
|
-
this.durationGetting = false
|
|
99
|
+
this.durationGetting = false
|
|
70
100
|
if (this.durationGetting) {
|
|
71
|
-
this.makeSvg(this.duration)
|
|
101
|
+
this.makeSvg(this.duration)
|
|
72
102
|
}
|
|
73
103
|
}
|
|
74
104
|
|
|
75
105
|
private _bindContainerEvents() {
|
|
76
106
|
if (this._oldContainer) {
|
|
77
|
-
this.stopListening(
|
|
107
|
+
this.stopListening(
|
|
108
|
+
this._oldContainer,
|
|
109
|
+
Events.CONTAINER_TIMEUPDATE,
|
|
110
|
+
this.onTimeUpdate,
|
|
111
|
+
)
|
|
78
112
|
}
|
|
79
113
|
|
|
80
|
-
|
|
81
|
-
this.
|
|
82
|
-
this.
|
|
114
|
+
const mediaControl = this.core.getPlugin('media_control')
|
|
115
|
+
this._oldContainer = mediaControl.container
|
|
116
|
+
this.durationGetting = false
|
|
117
|
+
this.listenTo(
|
|
118
|
+
mediaControl.container,
|
|
119
|
+
Events.CONTAINER_TIMEUPDATE,
|
|
120
|
+
this.onTimeUpdate,
|
|
121
|
+
)
|
|
83
122
|
}
|
|
84
123
|
|
|
85
124
|
private onTimeUpdate(event: TimeProgress) {
|
|
86
125
|
if (!this.durationGetting) {
|
|
87
|
-
this.duration = event.total
|
|
88
|
-
this.makeSvg(event.total)
|
|
89
|
-
this.durationGetting = true
|
|
126
|
+
this.duration = event.total
|
|
127
|
+
this.makeSvg(event.total)
|
|
128
|
+
this.durationGetting = true
|
|
90
129
|
}
|
|
91
130
|
|
|
92
131
|
for (const value of this.clips.values()) {
|
|
93
132
|
if (event.current >= value.start && event.current < value.end) {
|
|
94
|
-
this.setClipText(value.text)
|
|
95
|
-
break
|
|
133
|
+
this.setClipText(value.text)
|
|
134
|
+
break
|
|
96
135
|
}
|
|
97
136
|
}
|
|
98
137
|
}
|
|
99
138
|
|
|
100
139
|
private parseClips() {
|
|
101
|
-
const textArr = this.options.clips.text.split('\n')
|
|
140
|
+
const textArr = this.options.clips.text.split('\n')
|
|
102
141
|
|
|
103
|
-
const clipsArr = textArr
|
|
104
|
-
|
|
142
|
+
const clipsArr = textArr
|
|
143
|
+
.map((val: string) => {
|
|
144
|
+
const matchRes = val.match(/(\d+:\d+|:\d+) (.+)/i)
|
|
105
145
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
146
|
+
return matchRes
|
|
147
|
+
? {
|
|
148
|
+
start: strtimeToMiliseconds(matchRes[1]),
|
|
149
|
+
text: matchRes[2],
|
|
150
|
+
}
|
|
151
|
+
: null
|
|
152
|
+
})
|
|
153
|
+
.filter((clip: ClipItem | null) => clip !== null)
|
|
111
154
|
|
|
112
|
-
clipsArr.sort((a: ClipDesc, b: ClipDesc) => a.start - b.start)
|
|
155
|
+
clipsArr.sort((a: ClipDesc, b: ClipDesc) => a.start - b.start)
|
|
113
156
|
|
|
114
157
|
clipsArr.forEach((clip: ClipDesc, index: number) => {
|
|
115
158
|
this.clips.set(clip.start, {
|
|
@@ -117,39 +160,49 @@ export class ClipsPlugin extends UICorePlugin {
|
|
|
117
160
|
start: clip.start,
|
|
118
161
|
text: clip.text,
|
|
119
162
|
end: clipsArr[index + 1] ? clipsArr[index + 1].start : null,
|
|
120
|
-
})
|
|
121
|
-
})
|
|
163
|
+
})
|
|
164
|
+
})
|
|
122
165
|
}
|
|
123
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Returns the text of the current clip.
|
|
169
|
+
* @param time - The current time of the player.
|
|
170
|
+
* @returns The text of the current clip.
|
|
171
|
+
*/
|
|
124
172
|
getText(time: number) {
|
|
125
173
|
for (const [key, value] of this.clips.entries()) {
|
|
126
174
|
if (time >= value.start && time < value.end) {
|
|
127
|
-
return value.text
|
|
175
|
+
return value.text
|
|
128
176
|
}
|
|
129
177
|
}
|
|
130
|
-
return ''
|
|
178
|
+
return ''
|
|
131
179
|
}
|
|
132
180
|
|
|
133
|
-
makeSvg(duration: number) {
|
|
134
|
-
let svg =
|
|
135
|
-
|
|
136
|
-
|
|
181
|
+
private makeSvg(duration: number) {
|
|
182
|
+
let svg =
|
|
183
|
+
'<svg width="0" height="0">\n' + '<defs>\n' + '<clipPath id="myClip">\n'
|
|
184
|
+
const widthOfSeek = this.core.activeContainer.$el.width()
|
|
185
|
+
let finishValue = 0
|
|
137
186
|
|
|
138
|
-
this.clips.forEach(val => {
|
|
139
|
-
let end = val.end
|
|
187
|
+
this.clips.forEach((val) => {
|
|
188
|
+
let end = val.end
|
|
140
189
|
|
|
141
190
|
if (!end) {
|
|
142
|
-
end = val.end = duration
|
|
191
|
+
end = val.end = duration
|
|
143
192
|
}
|
|
144
193
|
|
|
145
|
-
const widthChunk = (end - val.start) * widthOfSeek / duration
|
|
194
|
+
const widthChunk = ((end - val.start) * widthOfSeek) / duration
|
|
146
195
|
|
|
147
|
-
svg += `<rect x="${finishValue}" y="0" width="${
|
|
148
|
-
|
|
149
|
-
|
|
196
|
+
svg += `<rect x="${finishValue}" y="0" width="${
|
|
197
|
+
widthChunk - 2
|
|
198
|
+
}" height="30"/>\n`
|
|
199
|
+
finishValue += widthChunk
|
|
200
|
+
})
|
|
150
201
|
|
|
151
|
-
svg += `<rect x="${finishValue}" y="0" width="${
|
|
152
|
-
|
|
202
|
+
svg += `<rect x="${finishValue}" y="0" width="${
|
|
203
|
+
widthOfSeek - finishValue
|
|
204
|
+
}" height="30"/>\n`
|
|
205
|
+
svg += '</clipPath>' + '</defs>' + '</svg>'
|
|
153
206
|
this.setSVGMask(svg)
|
|
154
207
|
}
|
|
155
208
|
|
|
@@ -159,7 +212,9 @@ export class ClipsPlugin extends UICorePlugin {
|
|
|
159
212
|
this.svgMask.remove()
|
|
160
213
|
}
|
|
161
214
|
|
|
162
|
-
const
|
|
215
|
+
const mediaControl = this.core.getPlugin('media_control')
|
|
216
|
+
const $seekBarContainer =
|
|
217
|
+
mediaControl.getElement('seekBarContainer')
|
|
163
218
|
if ($seekBarContainer?.get(0)) {
|
|
164
219
|
$seekBarContainer.addClass('clips')
|
|
165
220
|
}
|
|
@@ -169,7 +224,8 @@ export class ClipsPlugin extends UICorePlugin {
|
|
|
169
224
|
}
|
|
170
225
|
|
|
171
226
|
private setClipText(text: string) {
|
|
172
|
-
const
|
|
227
|
+
const mediaControl = this.core.getPlugin('media_control')
|
|
228
|
+
const $clipText = mediaControl.getElement('clipText')
|
|
173
229
|
if ($clipText && text) {
|
|
174
230
|
$clipText.show()
|
|
175
231
|
$clipText.text(`${text}`)
|