@gcorevideo/player 2.20.1 → 2.20.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.js +30 -6
- package/dist/index.css +1572 -1572
- package/dist/index.js +343 -226
- package/dist/player.d.ts +280 -52
- package/dist/plugins/index.css +619 -619
- package/dist/plugins/index.js +1468 -1351
- package/docs/api/player.audioselector.md +1 -251
- package/docs/api/player.bigmutebutton.md +1 -156
- 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.clipspluginsettings.md +57 -0
- 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.audioselector.bindevents.md → player.contextmenupluginsettings.label.md} +3 -7
- package/docs/api/player.contextmenupluginsettings.md +98 -0
- package/docs/api/{player.audioselector.attributes.md → player.contextmenupluginsettings.preventshowcontextmenu.md} +3 -6
- package/docs/api/{player.audioselector.reload.md → player.contextmenupluginsettings.url.md} +3 -7
- package/docs/api/player.dvrcontrols.md +1 -1
- package/docs/api/player.errorscreen.md +0 -2
- 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.initeventdata.event.md +3 -0
- package/docs/api/player.initeventdata.md +7 -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 +73 -21
- package/docs/api/player.mediacontrolelement.md +1 -1
- package/docs/api/player.multicamera._constructor_.md +3 -0
- package/docs/api/player.multicamera.activebyid.md +3 -0
- package/docs/api/player.multicamera.attributes.md +3 -0
- package/docs/api/player.multicamera.bindevents.md +3 -0
- package/docs/api/player.multicamera.events.md +3 -0
- package/docs/api/player.multicamera.getcameraslist.md +3 -0
- package/docs/api/player.multicamera.getcurrentcamera.md +3 -0
- package/docs/api/player.multicamera.md +30 -1
- package/docs/api/player.multicamera.name.md +3 -0
- package/docs/api/player.multicamera.render.md +3 -0
- package/docs/api/player.multicamera.supportedversion.md +3 -0
- package/docs/api/player.multicamera.template.md +3 -0
- package/docs/api/player.multicamera.unbindevents.md +3 -0
- package/docs/api/player.multicamera.version.md +3 -0
- 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.stalleventdata.count.md +3 -0
- package/docs/api/player.stalleventdata.event.md +3 -0
- package/docs/api/player.stalleventdata.md +8 -3
- package/docs/api/player.stalleventdata.time.md +3 -0
- package/docs/api/player.stalleventdata.total_ms.md +3 -0
- package/docs/api/player.starteventdata.event.md +3 -0
- package/docs/api/player.starteventdata.md +7 -0
- package/docs/api/player.telemetryevent.md +11 -0
- package/docs/api/player.telemetryeventdata.md +3 -0
- package/docs/api/player.telemetrypluginsettings.md +4 -1
- package/docs/api/player.telemetrypluginsettings.send.md +3 -0
- package/docs/api/player.telemetryrecord.md +3 -0
- package/docs/api/player.thumbnails.md +21 -139
- package/docs/api/player.thumbnailspluginsettings.md +23 -0
- package/docs/api/player.volumefade.md +1 -0
- package/docs/api/player.volumefadeevents.md +7 -0
- package/docs/api/player.watcheventdata.event.md +3 -0
- package/docs/api/player.watcheventdata.md +7 -0
- package/docs/api/player.zeptoresult.md +1 -0
- package/lib/Player.d.ts +5 -3
- package/lib/Player.d.ts.map +1 -1
- package/lib/Player.js +30 -6
- package/lib/index.plugins.d.ts +0 -1
- package/lib/index.plugins.d.ts.map +1 -1
- package/lib/index.plugins.js +0 -1
- package/lib/internal.types.d.ts +7 -7
- package/lib/internal.types.d.ts.map +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-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 +44 -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 +1 -3
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +11 -28
- package/lib/plugins/error-screen/ErrorScreen.d.ts +0 -1
- package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
- package/lib/plugins/error-screen/ErrorScreen.js +0 -1
- 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 +0 -1
- package/lib/plugins/index.d.ts.map +1 -1
- package/lib/plugins/index.js +0 -1
- 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 +4 -0
- package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -1
- package/lib/plugins/multi-camera/MultiCamera.js +6 -2
- 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 +6 -2
- 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 +4 -1
- 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/telemetry/Telemetry.d.ts +18 -0
- package/lib/plugins/telemetry/Telemetry.d.ts.map +1 -1
- package/lib/plugins/telemetry/Telemetry.js +1 -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 +5 -0
- package/lib/plugins/volume-fade/VolumeFade.d.ts.map +1 -1
- package/lib/plugins/volume-fade/VolumeFade.js +5 -0
- package/lib/types.d.ts +9 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/utils/types.d.ts +1 -0
- package/lib/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/release_notes +297 -0
- package/src/Player.ts +101 -46
- package/src/__tests__/Player.test.ts +23 -1
- package/src/index.plugins.ts +0 -1
- package/src/internal.types.ts +86 -79
- 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-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 +109 -76
- package/src/plugins/dvr-controls/DvrControls.ts +11 -30
- package/src/plugins/error-screen/ErrorScreen.ts +0 -1
- package/src/plugins/favicon/Favicon.ts +4 -0
- package/src/plugins/google-analytics/GoogleAnalytics.ts +5 -1
- package/src/plugins/index.ts +0 -1
- package/src/plugins/logo/Logo.ts +4 -0
- package/src/plugins/media-control/MediaControl.ts +4 -1
- package/src/plugins/multi-camera/MultiCamera.ts +6 -2
- package/src/plugins/seek-time/SeekTime.ts +6 -2
- package/src/plugins/share/Share.ts +4 -1
- package/src/plugins/skip-time/SkipTime.ts +3 -0
- package/src/plugins/telemetry/Telemetry.ts +18 -0
- package/src/plugins/thumbnails/Thumbnails.ts +268 -194
- package/src/plugins/volume-fade/VolumeFade.ts +5 -0
- package/src/types.ts +11 -1
- package/src/utils/types.ts +1 -0
- package/temp/player.api.json +627 -2468
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.audioselector.events.md +0 -17
- package/docs/api/player.audioselector.hideselecttrackmenu.md +0 -18
- package/docs/api/player.audioselector.name.md +0 -14
- package/docs/api/player.audioselector.onshowlevelselectmenu.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.template.md +0 -14
- 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.bigmutebutton.template.md +0 -14
- package/docs/api/player.clapprstats._buildreport.md +0 -18
- package/docs/api/player.clapprstats._defaultreport.md +0 -52
- 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.destroy.md +0 -18
- package/docs/api/player.clapprstats.name.md +0 -14
- package/docs/api/player.clapprstats.onfirstplaying.md +0 -18
- package/docs/api/player.clapprstats.playafterpause.md +0 -18
- package/docs/api/player.clapprstats.starttimers.md +0 -18
- package/docs/api/player.clapprstats.stopreporting.md +0 -18
- package/docs/api/player.clapprstats.supportedversion.md +0 -16
- 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.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/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
|
@@ -1,191 +1,212 @@
|
|
|
1
|
-
import { Events, template, UICorePlugin, Utils } from '@clappr/core'
|
|
2
|
-
import { trace } from '@gcorevideo/utils'
|
|
1
|
+
import { Events, template, UICorePlugin, Utils } from '@clappr/core'
|
|
2
|
+
import { trace } from '@gcorevideo/utils'
|
|
3
3
|
|
|
4
|
-
import { CLAPPR_VERSION } from '../../build.js'
|
|
5
|
-
import { ZeptoResult } from
|
|
4
|
+
import { CLAPPR_VERSION } from '../../build.js'
|
|
5
|
+
import { ZeptoResult } from '../../utils/types.js'
|
|
6
6
|
|
|
7
|
-
import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg'
|
|
8
|
-
import pluginHtml from '../../../assets/big-mute-button/big-mute-button.ejs'
|
|
9
|
-
import '../../../assets/big-mute-button/big-mute-button.scss'
|
|
7
|
+
import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg'
|
|
8
|
+
import pluginHtml from '../../../assets/big-mute-button/big-mute-button.ejs'
|
|
9
|
+
import '../../../assets/big-mute-button/big-mute-button.scss'
|
|
10
10
|
|
|
11
|
-
const T =
|
|
11
|
+
const T = 'plugins.big_mute_button'
|
|
12
|
+
|
|
13
|
+
// TODO rewrite as a container plugin
|
|
12
14
|
|
|
13
15
|
/**
|
|
16
|
+
* Displays a big mute button over the video when it's muted.
|
|
17
|
+
* Once pressed, it unmutes the video.
|
|
14
18
|
* @beta
|
|
15
19
|
*/
|
|
16
20
|
export class BigMuteButton extends UICorePlugin {
|
|
17
|
-
private isBigMuteButtonHidden = false
|
|
21
|
+
private isBigMuteButtonHidden = false
|
|
18
22
|
|
|
19
|
-
private _adIsPlaying = false
|
|
23
|
+
private _adIsPlaying = false
|
|
20
24
|
|
|
21
|
-
private $bigMuteBtnContainer: ZeptoResult | null = null
|
|
25
|
+
private $bigMuteBtnContainer: ZeptoResult | null = null
|
|
22
26
|
|
|
23
|
-
private $bigMuteButton: ZeptoResult | null = null
|
|
27
|
+
private $bigMuteButton: ZeptoResult | null = null
|
|
24
28
|
|
|
29
|
+
/**
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
25
32
|
get name() {
|
|
26
|
-
return 'big_mute_button'
|
|
33
|
+
return 'big_mute_button'
|
|
27
34
|
}
|
|
28
35
|
|
|
36
|
+
/**
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
29
39
|
get supportedVersion() {
|
|
30
|
-
return { min: CLAPPR_VERSION }
|
|
40
|
+
return { min: CLAPPR_VERSION }
|
|
31
41
|
}
|
|
32
42
|
|
|
33
|
-
|
|
34
|
-
return template(pluginHtml);
|
|
35
|
-
}
|
|
43
|
+
private static readonly template = template(pluginHtml)
|
|
36
44
|
|
|
45
|
+
/**
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
37
48
|
override get events() {
|
|
38
49
|
return {
|
|
39
50
|
'click .big-mute-icon': 'handleBigMuteBtnClick',
|
|
40
51
|
'click .big-mute-icon-wrapper': 'destroyBigMuteBtn',
|
|
41
|
-
}
|
|
52
|
+
}
|
|
42
53
|
}
|
|
43
54
|
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
44
58
|
override bindEvents() {
|
|
45
|
-
super.bindEvents()
|
|
46
|
-
this.listenTo(this.core, Events.CORE_READY, this.onCoreReady)
|
|
47
|
-
this.listenTo(this.core, 'core:advertisement:start', this.onStartAd)
|
|
48
|
-
this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd)
|
|
59
|
+
super.bindEvents()
|
|
60
|
+
this.listenTo(this.core, Events.CORE_READY, this.onCoreReady)
|
|
61
|
+
this.listenTo(this.core, 'core:advertisement:start', this.onStartAd)
|
|
62
|
+
this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd)
|
|
49
63
|
trace(`${T} bindEvents`, {
|
|
50
64
|
mediacontrol: !!this.core.mediaControl,
|
|
51
|
-
})
|
|
52
|
-
this.listenTo(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.stopListening(this.core, Events.CORE_READY);
|
|
58
|
-
this.stopListening(this.core, 'core:advertisement:start', this.onStartAd);
|
|
59
|
-
this.stopListening(this.core, 'core:advertisement:finish', this.onFinishAd);
|
|
60
|
-
this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.mediaControlRendered);
|
|
61
|
-
|
|
62
|
-
const container = this.core.activeContainer;
|
|
63
|
-
|
|
64
|
-
if (container) {
|
|
65
|
-
this.stopListening(container.playback, Events.PLAYBACK_PLAY, this.render);
|
|
66
|
-
}
|
|
65
|
+
})
|
|
66
|
+
this.listenTo(
|
|
67
|
+
this.core.mediaControl,
|
|
68
|
+
Events.MEDIACONTROL_RENDERED,
|
|
69
|
+
this.mediaControlRendered,
|
|
70
|
+
)
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
private onCoreReady() {
|
|
70
|
-
this.listenTo(
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
this.listenTo(
|
|
75
|
+
this.core.activeContainer,
|
|
76
|
+
Events.CONTAINER_VOLUME,
|
|
77
|
+
this.onContainerVolume,
|
|
78
|
+
)
|
|
79
|
+
this.listenTo(
|
|
80
|
+
this.core.activeContainer,
|
|
81
|
+
Events.CONTAINER_READY,
|
|
82
|
+
this.onContainerStart,
|
|
83
|
+
)
|
|
84
|
+
this.listenTo(
|
|
85
|
+
this.core.activePlayback,
|
|
86
|
+
Events.PLAYBACK_ENDED,
|
|
87
|
+
this.onPlaybackEnded,
|
|
88
|
+
)
|
|
73
89
|
}
|
|
74
90
|
|
|
75
91
|
private onContainerVolume(value: number) {
|
|
76
92
|
if (value !== 0) {
|
|
77
|
-
this.destroyBigMuteBtn()
|
|
93
|
+
this.destroyBigMuteBtn()
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
96
|
|
|
81
97
|
private onContainerStart() {
|
|
82
98
|
if (this.isBigMuteButtonHidden) {
|
|
83
|
-
this.showBigMuteBtn()
|
|
99
|
+
this.showBigMuteBtn()
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
102
|
|
|
87
103
|
private onPlaybackEnded() {
|
|
88
|
-
this.hideBigMuteBtn()
|
|
104
|
+
this.hideBigMuteBtn()
|
|
89
105
|
}
|
|
90
106
|
|
|
91
107
|
private mediaControlRendered() {
|
|
92
|
-
const container = this.core.activeContainer
|
|
108
|
+
const container = this.core.activeContainer
|
|
93
109
|
|
|
94
110
|
trace(`${T} mediaControlRendered`, {
|
|
95
111
|
container: !!container,
|
|
96
|
-
})
|
|
112
|
+
})
|
|
97
113
|
|
|
98
114
|
if (container) {
|
|
99
115
|
this.listenTo(container.playback, Events.PLAYBACK_PLAY, () => {
|
|
100
|
-
trace(`${T} PLAYBACK_PLAY`)
|
|
101
|
-
this.render()
|
|
102
|
-
})
|
|
116
|
+
trace(`${T} PLAYBACK_PLAY`)
|
|
117
|
+
this.render()
|
|
118
|
+
})
|
|
103
119
|
}
|
|
104
120
|
}
|
|
105
121
|
|
|
106
122
|
private onStartAd() {
|
|
107
|
-
this._adIsPlaying = true
|
|
123
|
+
this._adIsPlaying = true
|
|
108
124
|
if (this.$bigMuteBtnContainer) {
|
|
109
|
-
this.$bigMuteBtnContainer.addClass('hide')
|
|
125
|
+
this.$bigMuteBtnContainer.addClass('hide')
|
|
110
126
|
}
|
|
111
127
|
}
|
|
112
128
|
|
|
113
129
|
private onFinishAd() {
|
|
114
|
-
this._adIsPlaying = false
|
|
130
|
+
this._adIsPlaying = false
|
|
115
131
|
if (this.$bigMuteBtnContainer) {
|
|
116
|
-
this.$bigMuteBtnContainer.removeClass('hide')
|
|
132
|
+
this.$bigMuteBtnContainer.removeClass('hide')
|
|
117
133
|
}
|
|
118
134
|
}
|
|
119
135
|
|
|
120
136
|
private shouldRender() {
|
|
121
|
-
const container = this.core.activeContainer
|
|
137
|
+
const container = this.core.activeContainer
|
|
122
138
|
|
|
123
139
|
if (!container) {
|
|
124
|
-
return false
|
|
140
|
+
return false
|
|
125
141
|
}
|
|
126
142
|
|
|
127
|
-
const { autoPlay, wasMuted } = this.options
|
|
128
|
-
const volume = container.volume
|
|
143
|
+
const { autoPlay, wasMuted } = this.options
|
|
144
|
+
const volume = container.volume
|
|
129
145
|
|
|
130
146
|
trace(`${T} shouldRender`, {
|
|
131
147
|
autoPlay,
|
|
132
148
|
wasMuted,
|
|
133
149
|
volume,
|
|
134
|
-
})
|
|
150
|
+
})
|
|
135
151
|
|
|
136
|
-
return autoPlay && !wasMuted && volume === 0
|
|
152
|
+
return autoPlay && !wasMuted && volume === 0
|
|
137
153
|
}
|
|
138
154
|
|
|
155
|
+
/**
|
|
156
|
+
* @internal
|
|
157
|
+
*/
|
|
139
158
|
override render() {
|
|
140
159
|
if (this.shouldRender()) {
|
|
141
160
|
trace(`${T} render`, {
|
|
142
161
|
el: !!this.$el,
|
|
143
|
-
})
|
|
144
|
-
this.$el.html(
|
|
162
|
+
})
|
|
163
|
+
this.$el.html(BigMuteButton.template())
|
|
145
164
|
|
|
146
|
-
this.$bigMuteBtnContainer = this.$el.find(
|
|
147
|
-
|
|
165
|
+
this.$bigMuteBtnContainer = this.$el.find(
|
|
166
|
+
'.big-mute-icon-wrapper[data-big-mute]',
|
|
167
|
+
)
|
|
168
|
+
this._adIsPlaying && this.$bigMuteBtnContainer.addClass('hide')
|
|
148
169
|
|
|
149
|
-
this.$bigMuteButton = this.$bigMuteBtnContainer.find('.big-mute-icon')
|
|
150
|
-
this.$bigMuteButton.append(volumeMuteIcon)
|
|
170
|
+
this.$bigMuteButton = this.$bigMuteBtnContainer.find('.big-mute-icon')
|
|
171
|
+
this.$bigMuteButton.append(volumeMuteIcon)
|
|
151
172
|
|
|
152
|
-
const container = this.core.activeContainer
|
|
173
|
+
const container = this.core.activeContainer
|
|
153
174
|
|
|
154
|
-
container.$el.append(this.$el.get(0))
|
|
175
|
+
container.$el.append(this.$el.get(0))
|
|
155
176
|
}
|
|
156
177
|
|
|
157
|
-
return this
|
|
178
|
+
return this
|
|
158
179
|
}
|
|
159
180
|
|
|
160
181
|
private hideBigMuteBtn() {
|
|
161
|
-
this.isBigMuteButtonHidden = true
|
|
162
|
-
this.$bigMuteBtnContainer?.addClass('hide')
|
|
182
|
+
this.isBigMuteButtonHidden = true
|
|
183
|
+
this.$bigMuteBtnContainer?.addClass('hide')
|
|
163
184
|
}
|
|
164
185
|
|
|
165
186
|
private showBigMuteBtn() {
|
|
166
|
-
this.isBigMuteButtonHidden = false
|
|
187
|
+
this.isBigMuteButtonHidden = false
|
|
167
188
|
if (this.$bigMuteBtnContainer) {
|
|
168
|
-
this.$bigMuteBtnContainer.removeClass('hide')
|
|
189
|
+
this.$bigMuteBtnContainer.removeClass('hide')
|
|
169
190
|
}
|
|
170
191
|
}
|
|
171
192
|
|
|
172
193
|
private destroyBigMuteBtn(e?: MouseEvent) {
|
|
173
|
-
this.hideBigMuteBtn()
|
|
194
|
+
this.hideBigMuteBtn()
|
|
174
195
|
|
|
175
196
|
if (e && e.stopPropagation) {
|
|
176
|
-
e.stopPropagation()
|
|
197
|
+
e.stopPropagation()
|
|
177
198
|
}
|
|
178
199
|
|
|
179
|
-
this.destroy()
|
|
200
|
+
this.destroy()
|
|
180
201
|
}
|
|
181
202
|
|
|
182
203
|
private handleBigMuteBtnClick(e: MouseEvent) {
|
|
183
|
-
const localVolume = Utils.Config.restore('volume')
|
|
184
|
-
const volume = !isNaN(localVolume) ? localVolume : 100
|
|
204
|
+
const localVolume = Utils.Config.restore('volume')
|
|
205
|
+
const volume = !isNaN(localVolume) ? localVolume : 100
|
|
185
206
|
|
|
186
207
|
// TODO use container.setVolume() instead
|
|
187
|
-
this.core.mediaControl.setVolume(volume === 0 ? 100 : volume)
|
|
208
|
+
this.core.mediaControl.setVolume(volume === 0 ? 100 : volume)
|
|
188
209
|
|
|
189
|
-
this.destroyBigMuteBtn(e)
|
|
210
|
+
this.destroyBigMuteBtn(e)
|
|
190
211
|
}
|
|
191
212
|
}
|
|
@@ -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
|
}
|