@gcorevideo/player 2.20.8 → 2.20.11
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/dvr-controls/dvr_controls.scss +0 -2
- package/dist/core.js +22 -17
- package/dist/index.css +1343 -1346
- package/dist/index.js +119 -109
- package/dist/player.d.ts +238 -179
- package/dist/plugins/index.css +461 -464
- package/dist/plugins/index.js +97 -93
- package/docs/api/player.audioselector.md +1 -1
- package/docs/api/player.bigmutebutton.md +1 -1
- package/docs/api/player.bottomgear.md +15 -1
- package/docs/api/player.bottomgear.refresh.md +20 -0
- package/docs/api/player.clapprnerdstats.md +1 -1
- package/docs/api/player.clapprstats.exportmetrics.md +1 -1
- package/docs/api/player.clapprstats.md +1 -15
- package/docs/api/player.clapprstats.setupdatemetrics.md +2 -0
- package/docs/api/player.clicktopause.md +1 -1
- package/docs/api/player.clipsplugin.md +1 -1
- package/docs/api/player.clipspluginsettings.md +5 -2
- package/docs/api/player.clipspluginsettings.text.md +3 -0
- package/docs/api/player.containerpluginconstructor.md +17 -0
- package/docs/api/player.containersize.md +0 -3
- package/docs/api/player.contextmenu.md +1 -1
- package/docs/api/player.corepluginconstructor.md +17 -0
- package/docs/api/player.dashsettings.md +0 -3
- package/docs/api/player.dvrcontrols.md +2 -35
- package/docs/api/player.errorlevel.md +0 -3
- package/docs/api/player.errorscreen.md +1 -220
- package/docs/api/{player.errorscreen.render.md → player.errorscreenpluginsettings.md} +7 -7
- package/docs/api/player.favicon.md +1 -1
- package/docs/api/player.googleanalytics.md +1 -1
- package/docs/api/player.langtag.md +0 -3
- package/docs/api/player.levelselector.md +3 -9
- package/docs/api/{player.errorscreen.bindevents.md → player.levelselectorpluginsettings.labels.md} +11 -5
- package/docs/api/player.levelselectorpluginsettings.md +79 -0
- package/docs/api/{player.errorscreen.unbindevents.md → player.levelselectorpluginsettings.restrictresolution.md} +5 -7
- package/docs/api/player.logo.md +1 -1
- package/docs/api/player.md +131 -65
- package/docs/api/{player.errorscreen.container.md → player.mediacontrol.currentseekpos.md} +3 -3
- package/docs/api/player.mediacontrol.disable.md +1 -1
- package/docs/api/player.mediacontrol.md +24 -3
- package/docs/api/{player.gearevents.md → player.mediacontrolevents.md} +4 -4
- package/docs/api/player.multicamera.md +1 -29
- package/docs/api/player.pictureinpicture.md +1 -1
- package/docs/api/player.playbackerror.code.md +0 -3
- package/docs/api/player.playbackerror.description.md +0 -3
- package/docs/api/player.playbackerror.level.md +0 -3
- package/docs/api/player.playbackerror.md +25 -9
- package/docs/api/player.playbackerror.message.md +0 -3
- package/docs/api/player.playbackerror.origin.md +0 -3
- package/docs/api/player.playbackerror.scope.md +0 -3
- package/docs/api/player.playbackerror.ui.md +17 -0
- package/docs/api/player.playbackerrorcode.md +6 -9
- package/docs/api/player.playbackmodule.md +0 -3
- package/docs/api/{player.dvrcontrols._constructor_.md → player.playbackrate._constructor_.md} +3 -3
- package/docs/api/player.playbackrate.md +35 -2
- package/docs/api/player.playbacktype.md +1 -4
- package/docs/api/player.player._constructor_.md +0 -3
- package/docs/api/player.player.attachto.md +0 -3
- package/docs/api/player.player.configure.md +0 -3
- package/docs/api/player.player.destroy.md +0 -3
- package/docs/api/player.player.getcurrenttime.md +0 -3
- package/docs/api/player.player.getduration.md +0 -3
- package/docs/api/player.player.getvolume.md +0 -3
- package/docs/api/player.player.isdvrenabled.md +0 -3
- package/docs/api/player.player.isdvrinuse.md +0 -3
- package/docs/api/player.player.ismuted.md +0 -3
- package/docs/api/player.player.isplaying.md +0 -3
- package/docs/api/player.player.md +25 -28
- package/docs/api/player.player.mute.md +0 -3
- package/docs/api/player.player.off.md +0 -3
- package/docs/api/player.player.on.md +0 -3
- package/docs/api/player.player.pause.md +0 -3
- package/docs/api/player.player.play.md +0 -3
- package/docs/api/player.player.registerplugin.md +2 -5
- package/docs/api/player.player.resize.md +0 -3
- package/docs/api/player.player.seek.md +0 -3
- package/docs/api/player.player.setvolume.md +0 -3
- package/docs/api/player.player.stop.md +0 -3
- package/docs/api/player.player.unmute.md +0 -3
- package/docs/api/player.player.unregisterplugin.md +14 -7
- package/docs/api/player.playercomponenttype.md +0 -3
- package/docs/api/player.playerconfig.autoplay.md +0 -3
- package/docs/api/player.playerconfig.dash.md +0 -3
- package/docs/api/player.playerconfig.debug.md +0 -3
- package/docs/api/player.playerconfig.language.md +0 -3
- package/docs/api/player.playerconfig.loop.md +0 -3
- package/docs/api/player.playerconfig.md +10 -13
- package/docs/api/player.playerconfig.mute.md +0 -3
- package/docs/api/player.playerconfig.playbacktype.md +0 -3
- package/docs/api/player.playerconfig.prioritytransport.md +0 -3
- package/docs/api/player.playerconfig.sources.md +0 -3
- package/docs/api/player.playerconfig.strings.md +0 -3
- package/docs/api/player.playerdebugsettings.md +0 -3
- package/docs/api/player.playerdebugtag.md +0 -3
- package/docs/api/player.playerevent.md +11 -14
- package/docs/api/player.playereventhandler.md +0 -3
- package/docs/api/player.playereventparams.md +0 -3
- package/docs/api/player.playermediasource.md +0 -3
- package/docs/api/player.playermediasourcedesc.md +2 -5
- package/docs/api/player.playermediasourcedesc.mimetype.md +0 -3
- package/docs/api/player.playermediasourcedesc.source.md +0 -3
- package/docs/api/player.playerplugin.md +0 -4
- package/docs/api/player.playerpluginconstructor.md +14 -0
- package/docs/api/player.poster.md +1 -1
- package/docs/api/player.qualitylevel.bitrate.md +0 -3
- package/docs/api/player.qualitylevel.height.md +0 -3
- package/docs/api/player.qualitylevel.level.md +0 -3
- package/docs/api/player.qualitylevel.md +4 -7
- package/docs/api/player.qualitylevel.width.md +0 -3
- package/docs/api/player.seektime.md +1 -1
- package/docs/api/player.share.attributes.md +3 -0
- package/docs/api/player.share.bindevents.md +3 -0
- package/docs/api/player.share.canshowshare.md +3 -0
- package/docs/api/player.share.events.md +3 -0
- package/docs/api/player.share.hideshare.md +3 -0
- package/docs/api/player.share.initializeicons.md +3 -0
- package/docs/api/player.share.md +40 -1
- package/docs/api/player.share.name.md +3 -0
- package/docs/api/player.share.onshareembedclick.md +3 -0
- package/docs/api/player.share.onsharefb.md +3 -0
- package/docs/api/player.share.onsharehide.md +3 -0
- package/docs/api/player.share.onsharelinkclick.md +3 -0
- package/docs/api/player.share.onshareshow.md +3 -0
- package/docs/api/player.share.onsharetw.md +3 -0
- package/docs/api/player.share.render.md +3 -0
- package/docs/api/player.share.showshare.md +3 -0
- package/docs/api/player.share.supportedversion.md +3 -0
- package/docs/api/player.share.template.md +3 -0
- package/docs/api/player.share.unbindevents.md +3 -0
- package/docs/api/player.skiptime.attributes.md +3 -0
- package/docs/api/player.skiptime.bindevents.md +3 -0
- package/docs/api/player.skiptime.container.md +3 -0
- package/docs/api/player.skiptime.events.md +3 -0
- package/docs/api/player.skiptime.handlerewindclicks.md +3 -0
- package/docs/api/player.skiptime.md +30 -1
- package/docs/api/player.skiptime.name.md +3 -0
- package/docs/api/player.skiptime.render.md +3 -0
- package/docs/api/player.skiptime.setback.md +3 -0
- package/docs/api/player.skiptime.setforward.md +3 -0
- package/docs/api/player.skiptime.setmidclick.md +3 -0
- package/docs/api/player.skiptime.supportedversion.md +3 -0
- package/docs/api/player.skiptime.template.md +3 -0
- package/docs/api/player.skiptime.togglefullscreen.md +3 -0
- package/docs/api/player.sourcecontroller.md +1 -1
- package/docs/api/player.spinnerevents.md +4 -1
- package/docs/api/player.spinnerthreebounce.hide.md +1 -1
- package/docs/api/player.spinnerthreebounce.md +7 -5
- package/docs/api/player.spinnerthreebounce.show.md +40 -2
- package/docs/api/player.subtitles.md +1 -1
- package/docs/api/player.telemetry.md +1 -1
- package/docs/api/player.telemetrypluginsettings.md +1 -1
- package/docs/api/{player.errorscreen.hide.md → player.telemetrysendfn.md} +6 -6
- package/docs/api/player.thumbnails.md +1 -1
- package/docs/api/player.timeposition.current.md +0 -3
- package/docs/api/player.timeposition.md +2 -5
- package/docs/api/player.timeposition.total.md +0 -3
- package/docs/api/player.timevalue.md +0 -3
- package/docs/api/player.translationkey.md +0 -3
- package/docs/api/player.translationsettings.md +0 -3
- package/docs/api/player.transportpreference.md +2 -7
- package/docs/api/player.volumefade.md +1 -1
- package/lib/Player.d.ts +18 -9
- package/lib/Player.d.ts.map +1 -1
- package/lib/Player.js +19 -14
- package/lib/index.core.d.ts +0 -1
- package/lib/index.core.d.ts.map +1 -1
- package/lib/index.core.js +0 -1
- package/lib/index.d.ts +18 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -1
- 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/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
- package/lib/playback/hls-playback/HlsPlayback.js +1 -1
- package/lib/playback.types.d.ts +8 -7
- package/lib/playback.types.d.ts.map +1 -1
- package/lib/playback.types.js +1 -1
- package/lib/plugins/audio-selector/AudioSelector.d.ts +1 -1
- package/lib/plugins/audio-selector/AudioSelector.js +1 -1
- package/lib/plugins/big-mute-button/BigMuteButton.d.ts +1 -1
- package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -1
- package/lib/plugins/big-mute-button/BigMuteButton.js +1 -2
- package/lib/plugins/bottom-gear/BottomGear.d.ts +2 -2
- package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -1
- package/lib/plugins/bottom-gear/BottomGear.js +1 -1
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.d.ts +1 -1
- package/lib/plugins/clappr-nerd-stats/ClapprNerdStats.js +1 -1
- package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.d.ts.map +1 -1
- package/lib/plugins/clappr-nerd-stats/speedtest/Speedtest.js +8 -8
- package/lib/plugins/clappr-stats/ClapprStats.d.ts +4 -5
- package/lib/plugins/clappr-stats/ClapprStats.d.ts.map +1 -1
- package/lib/plugins/clappr-stats/ClapprStats.js +4 -3
- package/lib/plugins/click-to-pause/ClickToPause.d.ts +1 -1
- package/lib/plugins/click-to-pause/ClickToPause.js +1 -1
- package/lib/plugins/clips/Clips.d.ts +3 -2
- package/lib/plugins/clips/Clips.d.ts.map +1 -1
- package/lib/plugins/clips/Clips.js +1 -1
- package/lib/plugins/context-menu/ContextMenu.d.ts +1 -1
- package/lib/plugins/context-menu/ContextMenu.d.ts.map +1 -1
- package/lib/plugins/context-menu/ContextMenu.js +1 -1
- package/lib/plugins/dvr-controls/DvrControls.d.ts +7 -4
- package/lib/plugins/dvr-controls/DvrControls.d.ts.map +1 -1
- package/lib/plugins/dvr-controls/DvrControls.js +29 -36
- package/lib/plugins/error-screen/ErrorScreen.d.ts +8 -14
- package/lib/plugins/error-screen/ErrorScreen.d.ts.map +1 -1
- package/lib/plugins/error-screen/ErrorScreen.js +1 -1
- package/lib/plugins/favicon/Favicon.d.ts +1 -1
- package/lib/plugins/favicon/Favicon.js +1 -1
- package/lib/plugins/google-analytics/GoogleAnalytics.d.ts +1 -1
- package/lib/plugins/google-analytics/GoogleAnalytics.js +1 -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/kibo/index.d.ts +0 -3
- package/lib/plugins/kibo/index.d.ts.map +1 -1
- package/lib/plugins/kibo/index.js +0 -3
- package/lib/plugins/level-selector/LevelSelector.d.ts +6 -4
- package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -1
- package/lib/plugins/level-selector/LevelSelector.js +2 -4
- package/lib/plugins/logo/Logo.d.ts +1 -1
- package/lib/plugins/logo/Logo.js +1 -1
- package/lib/plugins/media-control/MediaControl.d.ts +11 -5
- package/lib/plugins/media-control/MediaControl.d.ts.map +1 -1
- package/lib/plugins/media-control/MediaControl.js +17 -5
- package/lib/plugins/multi-camera/MultiCamera.d.ts +3 -11
- package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -1
- package/lib/plugins/multi-camera/MultiCamera.js +1 -1
- package/lib/plugins/picture-in-picture/PictureInPicture.d.ts +1 -1
- package/lib/plugins/picture-in-picture/PictureInPicture.js +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.d.ts +1 -1
- package/lib/plugins/playback-rate/PlaybackRate.js +1 -1
- package/lib/plugins/poster/Poster.d.ts +1 -1
- package/lib/plugins/poster/Poster.js +3 -3
- package/lib/plugins/seek-time/SeekTime.d.ts +1 -1
- package/lib/plugins/seek-time/SeekTime.js +1 -1
- package/lib/plugins/share/Share.d.ts +2 -1
- package/lib/plugins/share/Share.d.ts.map +1 -1
- package/lib/plugins/share/Share.js +2 -1
- package/lib/plugins/skip-time/SkipTime.d.ts +2 -1
- package/lib/plugins/skip-time/SkipTime.d.ts.map +1 -1
- package/lib/plugins/skip-time/SkipTime.js +2 -1
- package/lib/plugins/source-controller/SourceController.d.ts +1 -1
- package/lib/plugins/source-controller/SourceController.js +4 -4
- package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts +6 -3
- package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.d.ts.map +1 -1
- package/lib/plugins/spinner-three-bounce/SpinnerThreeBounce.js +6 -3
- package/lib/plugins/subtitles/Subtitles.d.ts +1 -1
- package/lib/plugins/subtitles/Subtitles.js +1 -1
- package/lib/plugins/telemetry/Telemetry.d.ts +2 -3
- package/lib/plugins/telemetry/Telemetry.d.ts.map +1 -1
- package/lib/plugins/telemetry/Telemetry.js +1 -1
- package/lib/plugins/thumbnails/Thumbnails.d.ts +1 -1
- package/lib/plugins/thumbnails/Thumbnails.js +1 -1
- package/lib/plugins/vast-ads/VastAds.d.ts.map +1 -1
- package/lib/plugins/vast-ads/VastAds.js +3 -3
- package/lib/plugins/vast-ads/roll.d.ts +1 -1
- package/lib/plugins/vast-ads/roll.d.ts.map +1 -1
- package/lib/plugins/vast-ads/rollmanager.d.ts +1 -1
- package/lib/plugins/vast-ads/rollmanager.d.ts.map +1 -1
- package/lib/plugins/vast-ads/rollmanager.js +2 -2
- package/lib/plugins/volume-fade/VolumeFade.d.ts +1 -1
- package/lib/plugins/volume-fade/VolumeFade.js +1 -1
- package/lib/testUtils.d.ts +11 -2
- package/lib/testUtils.d.ts.map +1 -1
- package/lib/testUtils.js +22 -3
- package/lib/types.d.ts +38 -27
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +1 -1
- package/lib/utils/types.d.ts +0 -6
- package/lib/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Player.ts +23 -21
- package/src/index.core.ts +0 -1
- package/src/index.plugins.ts +0 -1
- package/src/index.ts +18 -1
- package/src/playback/hls-playback/HlsPlayback.ts +7 -11
- package/src/playback.types.ts +8 -7
- package/src/plugins/audio-selector/AudioSelector.ts +2 -2
- package/src/plugins/big-mute-button/BigMuteButton.ts +2 -3
- package/src/plugins/bottom-gear/BottomGear.ts +2 -2
- package/src/plugins/clappr-nerd-stats/ClapprNerdStats.ts +2 -2
- package/src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts +184 -187
- package/src/plugins/clappr-stats/ClapprStats.ts +5 -4
- package/src/plugins/click-to-pause/ClickToPause.ts +1 -1
- package/src/plugins/clips/Clips.ts +4 -3
- package/src/plugins/context-menu/ContextMenu.ts +1 -3
- package/src/plugins/dvr-controls/DvrControls.ts +34 -45
- package/src/plugins/dvr-controls/__tests__/DvrControls.test.ts +91 -0
- package/src/plugins/dvr-controls/__tests__/__snapshots__/DvrControls.test.ts.snap +43 -0
- package/src/plugins/error-screen/ErrorScreen.ts +10 -17
- package/src/plugins/favicon/Favicon.ts +2 -2
- package/src/plugins/google-analytics/GoogleAnalytics.ts +1 -1
- package/src/plugins/index.ts +0 -1
- package/src/plugins/kibo/index.ts +0 -3
- package/src/plugins/level-selector/LevelSelector.ts +7 -5
- package/src/plugins/logo/Logo.ts +2 -2
- package/src/plugins/media-control/MediaControl.ts +20 -6
- package/src/plugins/multi-camera/MultiCamera.ts +4 -4
- package/src/plugins/picture-in-picture/PictureInPicture.ts +1 -1
- package/src/plugins/playback-rate/PlaybackRate.ts +2 -2
- package/src/plugins/poster/Poster.ts +4 -4
- package/src/plugins/seek-time/SeekTime.ts +2 -2
- package/src/plugins/share/Share.ts +2 -1
- package/src/plugins/skip-time/SkipTime.ts +2 -1
- package/src/plugins/source-controller/SourceController.ts +4 -4
- package/src/plugins/source-controller/__tests__/SourceController.test.ts +2 -2
- package/src/plugins/spinner-three-bounce/SpinnerThreeBounce.ts +6 -3
- package/src/plugins/subtitles/Subtitles.ts +2 -2
- package/src/plugins/telemetry/Telemetry.ts +2 -2
- package/src/plugins/thumbnails/Thumbnails.ts +2 -2
- package/src/plugins/vast-ads/VastAds.ts +5 -4
- package/src/plugins/vast-ads/roll.ts +2 -1
- package/src/plugins/vast-ads/rollmanager.ts +3 -3
- package/src/plugins/volume-fade/VolumeFade.ts +1 -1
- package/src/testUtils.ts +28 -4
- package/src/types.ts +41 -28
- package/src/utils/types.ts +0 -8
- package/temp/player.api.json +680 -786
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.clapprstats.onbitrate.md +0 -52
- package/docs/api/player.errorscreen.attributes.md +0 -17
- package/docs/api/player.errorscreen.name.md +0 -14
- package/docs/api/player.errorscreen.show.md +0 -54
- package/docs/api/player.errorscreen.supportedversion.md +0 -16
- package/docs/api/player.errorscreen.template.md +0 -14
- package/docs/api/player.mediatransport.md +0 -16
- package/docs/api/player.multicamera.getcameraslist.md +0 -18
- package/docs/api/player.multicamera.getcurrentcamera.md +0 -18
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
UICorePlugin,
|
|
3
2
|
Events,
|
|
4
3
|
template,
|
|
5
4
|
$,
|
|
6
|
-
Core,
|
|
7
5
|
Container,
|
|
8
6
|
UIContainerPlugin,
|
|
9
7
|
} from '@clappr/core'
|
|
@@ -30,7 +28,7 @@ export interface ContextMenuPluginSettings {
|
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
/**
|
|
33
|
-
*
|
|
31
|
+
* `PLUGIN` that displays a small context menu when clicked on the player container.
|
|
34
32
|
* @beta
|
|
35
33
|
* @remarks
|
|
36
34
|
* Configuration options - {@link ContextMenuPluginSettings}
|
|
@@ -6,11 +6,13 @@ import { CLAPPR_VERSION } from '../../build.js'
|
|
|
6
6
|
import dvrHTML from '../../../assets/dvr-controls/index.ejs'
|
|
7
7
|
import '../../../assets/dvr-controls/dvr_controls.scss'
|
|
8
8
|
import { trace } from '@gcorevideo/utils'
|
|
9
|
+
import { MediaControl } from '../media-control/MediaControl.js'
|
|
9
10
|
|
|
10
11
|
const T = 'plugins.dvr_controls'
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
+
* `PLUGIN` that adds the DVR controls to the media control UI
|
|
15
|
+
*
|
|
14
16
|
* @beta
|
|
15
17
|
*
|
|
16
18
|
* @remarks
|
|
@@ -18,7 +20,9 @@ const T = 'plugins.dvr_controls'
|
|
|
18
20
|
*
|
|
19
21
|
* - {@link MediaControl}
|
|
20
22
|
*
|
|
21
|
-
* The plugin renders
|
|
23
|
+
* The plugin renders live stream indicator.
|
|
24
|
+
* If DVR is enabled, the indicator shows whether the current position is at the live edge of the stream or not.
|
|
25
|
+
* In the latter case, the indicator can be clicked to seek to the live edge.
|
|
22
26
|
*/
|
|
23
27
|
export class DvrControls extends UICorePlugin {
|
|
24
28
|
private static readonly template = template(dvrHTML)
|
|
@@ -56,15 +60,20 @@ export class DvrControls extends UICorePlugin {
|
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
62
|
|
|
59
|
-
constructor(core: Core) {
|
|
60
|
-
super(core)
|
|
61
|
-
this.settingsUpdate()
|
|
62
|
-
}
|
|
63
|
-
|
|
64
63
|
/**
|
|
65
64
|
* @internal
|
|
66
65
|
*/
|
|
67
66
|
override bindEvents() {
|
|
67
|
+
this.listenTo(this.core, Events.CORE_READY, this.onCoreReady)
|
|
68
|
+
this.listenTo(this.core, Events.CORE_OPTIONS_CHANGE, this.render)
|
|
69
|
+
this.listenTo(
|
|
70
|
+
this.core,
|
|
71
|
+
Events.CORE_ACTIVE_CONTAINER_CHANGED,
|
|
72
|
+
this.bindContainerEvents,
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private onCoreReady() {
|
|
68
77
|
const mediaControl = this.core.getPlugin('media_control')
|
|
69
78
|
assert(mediaControl, 'media_control plugin is required')
|
|
70
79
|
this.listenTo(
|
|
@@ -72,12 +81,7 @@ export class DvrControls extends UICorePlugin {
|
|
|
72
81
|
Events.MEDIACONTROL_RENDERED,
|
|
73
82
|
this.settingsUpdate,
|
|
74
83
|
)
|
|
75
|
-
this.
|
|
76
|
-
this.listenTo(
|
|
77
|
-
this.core,
|
|
78
|
-
Events.CORE_ACTIVE_CONTAINER_CHANGED,
|
|
79
|
-
this.bindContainerEvents,
|
|
80
|
-
)
|
|
84
|
+
this.settingsUpdate()
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
private bindContainerEvents() {
|
|
@@ -93,57 +97,45 @@ export class DvrControls extends UICorePlugin {
|
|
|
93
97
|
)
|
|
94
98
|
}
|
|
95
99
|
|
|
96
|
-
private onDvrChanged(
|
|
100
|
+
private onDvrChanged(dvrInUse: boolean) {
|
|
97
101
|
trace(`${T} onDvrChanged`, {
|
|
98
|
-
|
|
102
|
+
dvrInUse,
|
|
99
103
|
})
|
|
100
104
|
if (this.core.getPlaybackType() !== Playback.LIVE) {
|
|
101
105
|
return
|
|
102
106
|
}
|
|
103
|
-
this.
|
|
104
|
-
this.core.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
this.render()
|
|
108
|
+
const mediaControl = this.core.getPlugin('media_control')
|
|
109
|
+
mediaControl.$el.addClass('live')
|
|
110
|
+
if (dvrInUse) {
|
|
111
|
+
mediaControl.$el
|
|
108
112
|
.addClass('dvr')
|
|
109
113
|
.find(
|
|
114
|
+
// TODO add API, test
|
|
110
115
|
'.media-control-indicator[data-position], .media-control-indicator[data-duration]',
|
|
111
116
|
)
|
|
112
117
|
.hide()
|
|
113
118
|
} else {
|
|
114
|
-
|
|
119
|
+
mediaControl.$el.removeClass('dvr')
|
|
115
120
|
}
|
|
116
121
|
}
|
|
117
122
|
|
|
118
123
|
private click() {
|
|
119
|
-
const mediaControl = this.core.getPlugin('media_control')
|
|
120
124
|
const container = this.core.activeContainer
|
|
121
|
-
|
|
122
125
|
if (!container.isPlaying()) {
|
|
123
126
|
container.play()
|
|
124
127
|
}
|
|
125
|
-
|
|
126
|
-
if (mediaControl.$el.hasClass('dvr')) {
|
|
127
|
-
container.seek(container.getDuration())
|
|
128
|
-
}
|
|
128
|
+
container.seek(container.getDuration())
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
private settingsUpdate() {
|
|
132
|
-
|
|
133
|
-
this.
|
|
134
|
-
this.
|
|
135
|
-
if (this.shouldRender()) {
|
|
136
|
-
this.render()
|
|
137
|
-
this.$el.click(() => this.click())
|
|
138
|
-
}
|
|
139
|
-
this.bindEvents()
|
|
132
|
+
trace(`${T} settingsUpdate`)
|
|
133
|
+
this.core.getPlugin('media_control').$el.removeClass('live')
|
|
134
|
+
this.render()
|
|
140
135
|
}
|
|
141
136
|
|
|
142
137
|
private shouldRender() {
|
|
143
|
-
const useDvrControls =
|
|
144
|
-
this.core.options.useDvrControls === undefined ||
|
|
145
|
-
!!this.core.options.useDvrControls
|
|
146
|
-
|
|
138
|
+
const useDvrControls = this.core.options.useDvrControls !== false
|
|
147
139
|
return useDvrControls && this.core.getPlaybackType() === Playback.LIVE
|
|
148
140
|
}
|
|
149
141
|
|
|
@@ -153,6 +145,7 @@ export class DvrControls extends UICorePlugin {
|
|
|
153
145
|
override render() {
|
|
154
146
|
trace(`${T} render`, {
|
|
155
147
|
dvrEnabled: this.core.activePlayback?.dvrEnabled,
|
|
148
|
+
playbackType: this.core.getPlaybackType(),
|
|
156
149
|
})
|
|
157
150
|
if (!this.shouldRender()) {
|
|
158
151
|
return this
|
|
@@ -163,13 +156,9 @@ export class DvrControls extends UICorePlugin {
|
|
|
163
156
|
backToLive: this.core.i18n.t('back_to_live'),
|
|
164
157
|
}),
|
|
165
158
|
)
|
|
166
|
-
const mediaControl = this.core.getPlugin('media_control')
|
|
167
|
-
assert(mediaControl, 'media_control plugin is required')
|
|
168
|
-
// TODO don't tap into the $el directly
|
|
159
|
+
const mediaControl = this.core.getPlugin('media_control') as MediaControl
|
|
169
160
|
mediaControl.$el.addClass('live')
|
|
170
|
-
mediaControl
|
|
171
|
-
.$('.media-control-left-panel[data-media-control]')
|
|
172
|
-
.append(this.$el)
|
|
161
|
+
mediaControl.getLeftPanel().append(this.$el)
|
|
173
162
|
|
|
174
163
|
return this
|
|
175
164
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import { DvrControls } from '../DvrControls.js'
|
|
3
|
+
import { createMockCore, createMockMediaControl } from '../../../testUtils.js'
|
|
4
|
+
// import { LogTracer, Logger, setTracer } from '@gcorevideo/utils'
|
|
5
|
+
|
|
6
|
+
// setTracer(new LogTracer('DvrControls.test'))
|
|
7
|
+
// Logger.enable('*')
|
|
8
|
+
|
|
9
|
+
describe('DvrControls', () => {
|
|
10
|
+
let core: any
|
|
11
|
+
let mediaControl: any
|
|
12
|
+
let plugins: Record<string, any> = {}
|
|
13
|
+
let dvrControls: DvrControls
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
core = createMockCore()
|
|
16
|
+
mediaControl = createMockMediaControl(core)
|
|
17
|
+
plugins = {
|
|
18
|
+
media_control: mediaControl,
|
|
19
|
+
}
|
|
20
|
+
core.getPlugin.mockImplementation((name: string) => plugins[name])
|
|
21
|
+
dvrControls = new DvrControls(core)
|
|
22
|
+
plugins.dvr_controls = dvrControls
|
|
23
|
+
})
|
|
24
|
+
describe('live stream', () => {
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
core.getPlaybackType.mockReturnValue('live')
|
|
27
|
+
})
|
|
28
|
+
describe.each([
|
|
29
|
+
['no DVR', false, false, false],
|
|
30
|
+
['DVR at live edge', true, false, false],
|
|
31
|
+
['DVR behind live edge', true, true, true],
|
|
32
|
+
])('%s', (_, dvrEnabled, dvrInUse, indicateDvr) => {
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
core.activePlayback.dvrEnabled = dvrEnabled
|
|
35
|
+
core.trigger('core:ready')
|
|
36
|
+
core.trigger('core:active:container:changed')
|
|
37
|
+
if (dvrInUse) {
|
|
38
|
+
core.activeContainer.trigger('container:dvr', true)
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
it('should render', () => {
|
|
42
|
+
expect(dvrControls.el.textContent).toBeTruthy()
|
|
43
|
+
expect(dvrControls.el.innerHTML).toMatchSnapshot()
|
|
44
|
+
})
|
|
45
|
+
it('should render to the media control left panel', () => {
|
|
46
|
+
expect(mediaControl.$el.find('.media-control-left-panel').text()).toContain('live')
|
|
47
|
+
expect(mediaControl.el.innerHTML).toMatchSnapshot()
|
|
48
|
+
})
|
|
49
|
+
it('should indicate live streaming mode', () => {
|
|
50
|
+
expect(mediaControl.$el.hasClass('live')).toBe(true)
|
|
51
|
+
})
|
|
52
|
+
if (indicateDvr) {
|
|
53
|
+
it('should indicate DVR mode', () => {
|
|
54
|
+
expect(mediaControl.$el.hasClass('dvr')).toBe(true)
|
|
55
|
+
})
|
|
56
|
+
} else {
|
|
57
|
+
it('should not indicate DVR mode', () => {
|
|
58
|
+
expect(mediaControl.$el.hasClass('dvr')).toBe(false)
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
describe('when back_to_live button is clicked', () => {
|
|
63
|
+
beforeEach(() => {
|
|
64
|
+
core.activePlayback.dvrEnabled = true
|
|
65
|
+
core.trigger('core:ready')
|
|
66
|
+
core.trigger('core:active:container:changed')
|
|
67
|
+
core.activeContainer.getDuration.mockReturnValue(180)
|
|
68
|
+
core.activeContainer.trigger('container:dvr', true)
|
|
69
|
+
dvrControls.$el.find('.live-button').click()
|
|
70
|
+
})
|
|
71
|
+
it('should call active container play', () => {
|
|
72
|
+
expect(core.activeContainer.play).toHaveBeenCalled()
|
|
73
|
+
})
|
|
74
|
+
it('should seek to live edge', () => {
|
|
75
|
+
expect(core.activeContainer.seek).toHaveBeenCalledWith(180)
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
describe('VOD stream', () => {
|
|
80
|
+
beforeEach(() => {
|
|
81
|
+
core.getPlaybackType.mockReturnValue('vod')
|
|
82
|
+
})
|
|
83
|
+
beforeEach(() => {
|
|
84
|
+
core.trigger('core:ready')
|
|
85
|
+
core.trigger('core:active:container:changed')
|
|
86
|
+
})
|
|
87
|
+
it('should not render', () => {
|
|
88
|
+
expect(dvrControls.el.textContent).toBeFalsy()
|
|
89
|
+
})
|
|
90
|
+
})
|
|
91
|
+
})
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`DvrControls > live stream > DVR at live edge > should render 1`] = `
|
|
4
|
+
"<div class="live-info">live</div>
|
|
5
|
+
<button type="button" class="live-button" aria-label="back_to_live">back_to_live</button>
|
|
6
|
+
"
|
|
7
|
+
`;
|
|
8
|
+
|
|
9
|
+
exports[`DvrControls > live stream > DVR at live edge > should render to the media control left panel 1`] = `
|
|
10
|
+
"<div class="media-control-left-panel" data-media-control=""><div class="dvr-controls" data-dvr-controls=""><div class="live-info">live</div>
|
|
11
|
+
<button type="button" class="live-button" aria-label="back_to_live">back_to_live</button>
|
|
12
|
+
</div></div>
|
|
13
|
+
<div class="media-control-right-panel" data-media-control=""></div>
|
|
14
|
+
<div class="media-control-center-panel" data-media-control=""></div>"
|
|
15
|
+
`;
|
|
16
|
+
|
|
17
|
+
exports[`DvrControls > live stream > DVR behind live edge > should render 1`] = `
|
|
18
|
+
"<div class="live-info">live</div>
|
|
19
|
+
<button type="button" class="live-button" aria-label="back_to_live">back_to_live</button>
|
|
20
|
+
"
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
exports[`DvrControls > live stream > DVR behind live edge > should render to the media control left panel 1`] = `
|
|
24
|
+
"<div class="media-control-left-panel" data-media-control=""><div class="dvr-controls" data-dvr-controls=""><div class="live-info">live</div>
|
|
25
|
+
<button type="button" class="live-button" aria-label="back_to_live">back_to_live</button>
|
|
26
|
+
</div></div>
|
|
27
|
+
<div class="media-control-right-panel" data-media-control=""></div>
|
|
28
|
+
<div class="media-control-center-panel" data-media-control=""></div>"
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
exports[`DvrControls > live stream > no DVR > should render 1`] = `
|
|
32
|
+
"<div class="live-info">live</div>
|
|
33
|
+
<button type="button" class="live-button" aria-label="back_to_live">back_to_live</button>
|
|
34
|
+
"
|
|
35
|
+
`;
|
|
36
|
+
|
|
37
|
+
exports[`DvrControls > live stream > no DVR > should render to the media control left panel 1`] = `
|
|
38
|
+
"<div class="media-control-left-panel" data-media-control=""><div class="dvr-controls" data-dvr-controls=""><div class="live-info">live</div>
|
|
39
|
+
<button type="button" class="live-button" aria-label="back_to_live">back_to_live</button>
|
|
40
|
+
</div></div>
|
|
41
|
+
<div class="media-control-right-panel" data-media-control=""></div>
|
|
42
|
+
<div class="media-control-center-panel" data-media-control=""></div>"
|
|
43
|
+
`;
|
|
@@ -6,21 +6,7 @@ import { CLAPPR_VERSION } from '../../build.js'
|
|
|
6
6
|
import reloadIcon from '../../../assets/icons/old/reload.svg'
|
|
7
7
|
import templateHtml from '../../../assets/error-screen/error_screen.ejs'
|
|
8
8
|
import '../../../assets/error-screen/error_screen.scss'
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
export type ErrorDesc = {
|
|
12
|
-
description: string
|
|
13
|
-
level: string
|
|
14
|
-
code: string
|
|
15
|
-
origin: string
|
|
16
|
-
scope: string
|
|
17
|
-
raw?: string
|
|
18
|
-
UI?: {
|
|
19
|
-
icon?: string
|
|
20
|
-
title: string
|
|
21
|
-
message: string
|
|
22
|
-
}
|
|
23
|
-
}
|
|
9
|
+
import { PlaybackError } from '../../playback.types.js'
|
|
24
10
|
|
|
25
11
|
type ErrorScreenDesc = {
|
|
26
12
|
title: string
|
|
@@ -29,14 +15,21 @@ type ErrorScreenDesc = {
|
|
|
29
15
|
icon?: string
|
|
30
16
|
}
|
|
31
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Configuration options for the {@link ErrorScreen | error screen} plugin.
|
|
20
|
+
* @beta
|
|
21
|
+
*/
|
|
32
22
|
export type ErrorScreenPluginSettings = {
|
|
23
|
+
/**
|
|
24
|
+
* Whether to hide the reload button.
|
|
25
|
+
*/
|
|
33
26
|
noReload?: boolean
|
|
34
27
|
}
|
|
35
28
|
|
|
36
29
|
const T = 'plugins.error_screen'
|
|
37
30
|
|
|
38
31
|
/**
|
|
39
|
-
*
|
|
32
|
+
* `PLUGIN` that displays errors nicely in the overlay on top of the player.
|
|
40
33
|
* @beta
|
|
41
34
|
*/
|
|
42
35
|
export class ErrorScreen extends UICorePlugin {
|
|
@@ -131,7 +124,7 @@ export class ErrorScreen extends UICorePlugin {
|
|
|
131
124
|
}
|
|
132
125
|
}
|
|
133
126
|
|
|
134
|
-
private onError(err:
|
|
127
|
+
private onError(err: PlaybackError) {
|
|
135
128
|
trace(`${T} onError`, { err })
|
|
136
129
|
if (err.UI) {
|
|
137
130
|
if (this.err) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CorePlugin, Events, $, Core, Container } from '@clappr/core';
|
|
2
2
|
|
|
3
3
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
4
|
-
import { ZeptoResult } from '../../
|
|
4
|
+
import { ZeptoResult } from '../../types.js';
|
|
5
5
|
|
|
6
6
|
import playIcon from '../../../assets/icons/new/play.svg';
|
|
7
7
|
import pauseIcon from '../../../assets/icons/new/pause.svg';
|
|
@@ -13,7 +13,7 @@ const FAVICON_SELECTOR = 'link[rel="shortcut icon"]';
|
|
|
13
13
|
// const oldIcon = $(FAVICON_SELECTOR);
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* `PLUGIN` that adds custom favicon to the player's tab.
|
|
17
17
|
* @beta
|
|
18
18
|
*/
|
|
19
19
|
export class Favicon extends CorePlugin {
|
package/src/plugins/index.ts
CHANGED
|
@@ -19,7 +19,6 @@ export * from "./error-screen/ErrorScreen.js";
|
|
|
19
19
|
export * from "./favicon/Favicon.js";
|
|
20
20
|
// _ ga-events
|
|
21
21
|
export * from "./google-analytics/GoogleAnalytics.js";
|
|
22
|
-
export * from "./kibo/index.js";
|
|
23
22
|
export * from "./level-selector/LevelSelector.js";
|
|
24
23
|
export * from "./logo/Logo.js";
|
|
25
24
|
export * from "./media-control/MediaControl.js";
|
|
@@ -4,7 +4,7 @@ import assert from 'assert'
|
|
|
4
4
|
|
|
5
5
|
import { type QualityLevel } from '../../playback.types.js'
|
|
6
6
|
import { CLAPPR_VERSION } from '../../build.js'
|
|
7
|
-
import { ZeptoResult } from '../../
|
|
7
|
+
import { ZeptoResult } from '../../types.js'
|
|
8
8
|
import { TemplateFunction } from '../types.js'
|
|
9
9
|
import { BottomGear } from '../bottom-gear/BottomGear.js'
|
|
10
10
|
|
|
@@ -20,6 +20,10 @@ import { MediaControl, MediaControlEvents } from '../media-control/MediaControl.
|
|
|
20
20
|
const T = 'plugins.level_selector'
|
|
21
21
|
const VERSION = '2.19.4'
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Configuration options for the {@link LevelSelector | level selector} plugin.
|
|
25
|
+
* @beta
|
|
26
|
+
*/
|
|
23
27
|
export interface LevelSelectorPluginSettings {
|
|
24
28
|
/**
|
|
25
29
|
* The maximum resolution to allow in the level selector.
|
|
@@ -36,7 +40,7 @@ export interface LevelSelectorPluginSettings {
|
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
/**
|
|
39
|
-
*
|
|
43
|
+
* `PLUGIN` that provides a UI to select the desired quality level of the playback.
|
|
40
44
|
* @beta
|
|
41
45
|
*
|
|
42
46
|
* @remarks
|
|
@@ -46,9 +50,7 @@ export interface LevelSelectorPluginSettings {
|
|
|
46
50
|
*
|
|
47
51
|
* - {@link BottomGear}
|
|
48
52
|
*
|
|
49
|
-
* The plugin is rendered as an item in the gear menu.
|
|
50
|
-
*
|
|
51
|
-
* When clicked, it shows a list of quality levels to choose from.
|
|
53
|
+
* The plugin is rendered as an item in the gear menu, which, when clicked, shows a list of quality levels to choose from.
|
|
52
54
|
*
|
|
53
55
|
* Configuration options - {@link LevelSelectorPluginSettings}
|
|
54
56
|
*
|
package/src/plugins/logo/Logo.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { UIContainerPlugin, Events, template as t, Container } from '@clappr/cor
|
|
|
2
2
|
|
|
3
3
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
4
4
|
import { calculateSize } from './utils/index.js';
|
|
5
|
-
import { ZeptoResult } from '../../
|
|
5
|
+
import { ZeptoResult } from '../../types.js';
|
|
6
6
|
|
|
7
7
|
import logoHTML from '../../../assets/logo/templates/logo.ejs';
|
|
8
8
|
import '../../../assets/logo/styles/logo.scss';
|
|
@@ -21,7 +21,7 @@ type LogoOptions = {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* `PLUGIN` that adds custom logo to the player.
|
|
25
25
|
* @beta
|
|
26
26
|
*/
|
|
27
27
|
export class Logo extends UIContainerPlugin {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
// This is a derived work from the {@link https://github.com/clappr/clappr-plugins/tree/ffaa9d27005fa5a8a7c243ffc47eb5655b84b371/src/plugins/media_control | Clappr MediaControl plugin}
|
|
2
|
+
// It is redistributed under the terms of the {@link ../../../../../LICENSE | Apache 2.0} license.
|
|
1
3
|
// Copyright 2014 Globo.com Player authors. All rights reserved.
|
|
2
4
|
// Use of this source code is governed by a BSD-style
|
|
3
|
-
// license that can be found in the LICENSE
|
|
5
|
+
// license that can be found in the {@link https://github.com/clappr/clappr-plugins/blob/master/LICENSE | LICENSE}.
|
|
4
6
|
|
|
5
7
|
import assert from 'assert'
|
|
6
8
|
import {
|
|
@@ -20,7 +22,7 @@ import { type TimeProgress } from '../../playback.types.js'
|
|
|
20
22
|
import { Kibo } from '../kibo/index.js'
|
|
21
23
|
|
|
22
24
|
import { CLAPPR_VERSION } from '../../build.js'
|
|
23
|
-
import { ZeptoResult } from '../../
|
|
25
|
+
import { ZeptoResult } from '../../types.js'
|
|
24
26
|
import { getPageX, isFullscreen } from '../utils.js'
|
|
25
27
|
|
|
26
28
|
import '../../../assets/media-control/media-control.scss'
|
|
@@ -88,11 +90,11 @@ type DisabledClickable = {
|
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
/**
|
|
91
|
-
*
|
|
93
|
+
* `PLUGIN` that provides a foundation for developing custom media controls UI.
|
|
92
94
|
* @beta
|
|
93
95
|
* @remarks
|
|
94
96
|
* The methods exposed are to be used by the other plugins that extend the media control UI.
|
|
95
|
-
* The plugin registration should be arranged so that MediaControl is initialized before every other
|
|
97
|
+
* The plugin registration should be arranged so that MediaControl is initialized before every other `PLUGIN` that depends on it.
|
|
96
98
|
* @example
|
|
97
99
|
* ```ts
|
|
98
100
|
* Player.registerPlugin(MediaControl) // <--- This must go first
|
|
@@ -218,7 +220,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
218
220
|
|
|
219
221
|
/**
|
|
220
222
|
* @internal
|
|
221
|
-
* @deprecated
|
|
223
|
+
* @deprecated Use core.activeContainer directly
|
|
222
224
|
*/
|
|
223
225
|
get container() {
|
|
224
226
|
return this.core.activeContainer
|
|
@@ -226,7 +228,7 @@ export class MediaControl extends UICorePlugin {
|
|
|
226
228
|
|
|
227
229
|
/**
|
|
228
230
|
* @internal
|
|
229
|
-
* @deprecated
|
|
231
|
+
* @deprecated Use core.activePlayback directly
|
|
230
232
|
*/
|
|
231
233
|
get playback() {
|
|
232
234
|
return this.core.activePlayback
|
|
@@ -1132,6 +1134,18 @@ export class MediaControl extends UICorePlugin {
|
|
|
1132
1134
|
return this.$el.find('.media-control-right-panel')
|
|
1133
1135
|
}
|
|
1134
1136
|
|
|
1137
|
+
/**
|
|
1138
|
+
* Get the left panel area to append custom elements to
|
|
1139
|
+
* @returns ZeptoSelector of the left panel element
|
|
1140
|
+
*/
|
|
1141
|
+
getLeftPanel() {
|
|
1142
|
+
return this.$el.find('.media-control-left-panel')
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
getCenterPanel() {
|
|
1146
|
+
return this.$el.find('.media-control-center-panel')
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1135
1149
|
private resetIndicators() {
|
|
1136
1150
|
assert.ok(
|
|
1137
1151
|
this.$duration && this.$position,
|
|
@@ -9,7 +9,7 @@ import '../../../assets/multi-camera/style.scss';
|
|
|
9
9
|
import streamsIcon from '../../../assets/icons/old/streams.svg';
|
|
10
10
|
import streamsMomentoIcon from '../../../assets/icons/old/language.svg';
|
|
11
11
|
import streamsWhiteNightsIcon from '../../../assets/icons/old/wn.svg';
|
|
12
|
-
import { ZeptoResult } from '../../
|
|
12
|
+
import { ZeptoResult } from '../../types.js';
|
|
13
13
|
|
|
14
14
|
type MultisourcesMode = 'one_first' | 'only_live' | 'show_all';
|
|
15
15
|
|
|
@@ -26,7 +26,7 @@ const VERSION = '0.0.1';
|
|
|
26
26
|
const T = 'plugins.multicamera';
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* `PLUGIN` that adds support for loading multiple streams and switching between them using the media control UI.
|
|
30
30
|
* @beta
|
|
31
31
|
*/
|
|
32
32
|
export class MultiCamera extends UICorePlugin {
|
|
@@ -381,11 +381,11 @@ export class MultiCamera extends UICorePlugin {
|
|
|
381
381
|
this.toggleContextMenu();
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
-
getCamerasList() {
|
|
384
|
+
private getCamerasList() {
|
|
385
385
|
return this.multicamera;
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
-
getCurrentCamera() {
|
|
388
|
+
private getCurrentCamera() {
|
|
389
389
|
return this.currentCamera;
|
|
390
390
|
}
|
|
391
391
|
|
|
@@ -3,7 +3,7 @@ import { trace } from '@gcorevideo/utils';
|
|
|
3
3
|
import assert from 'assert';
|
|
4
4
|
|
|
5
5
|
import { CLAPPR_VERSION } from '../../build.js';
|
|
6
|
-
import type { ZeptoResult } from '../../
|
|
6
|
+
import type { ZeptoResult } from '../../types.js';
|
|
7
7
|
|
|
8
8
|
import buttonHtml from '../../../assets/playback-rate/button.ejs';
|
|
9
9
|
import listHtml from '../../../assets/playback-rate/list.ejs';
|
|
@@ -35,7 +35,7 @@ const DEFAULT_PLAYBACK_RATE = '1.0';
|
|
|
35
35
|
const T = 'plugins.playback_rate';
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
* PLUGIN that allows changing the playback speed of the video.
|
|
38
|
+
* `PLUGIN` that allows changing the playback speed of the video.
|
|
39
39
|
* @beta
|
|
40
40
|
*
|
|
41
41
|
* @remarks
|
|
@@ -14,17 +14,17 @@ import {
|
|
|
14
14
|
import { trace } from '@gcorevideo/utils'
|
|
15
15
|
|
|
16
16
|
import { CLAPPR_VERSION } from '../../build.js'
|
|
17
|
-
import type { ZeptoResult } from '../../
|
|
17
|
+
import type { ZeptoResult } from '../../types.js'
|
|
18
18
|
|
|
19
19
|
import '../../../assets/poster/poster.scss'
|
|
20
20
|
import posterHTML from '../../../assets/poster/poster.ejs'
|
|
21
21
|
import playIcon from '../../../assets/icons/new/play.svg'
|
|
22
22
|
import { PlaybackError } from '../../playback.types.js'
|
|
23
23
|
|
|
24
|
-
const T = 'plugins.
|
|
24
|
+
const T = 'plugins.poster'
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* `PLUGIN` that displays a poster image in the background and a big play button on top when playback is stopped
|
|
28
28
|
* @beta
|
|
29
29
|
* @remarks
|
|
30
30
|
* When the playback is stopped, media control UI is disabled.
|
|
@@ -65,7 +65,7 @@ export class Poster extends UIContainerPlugin {
|
|
|
65
65
|
* @internal
|
|
66
66
|
*/
|
|
67
67
|
get name() {
|
|
68
|
-
return '
|
|
68
|
+
return 'poster'
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
@@ -9,12 +9,12 @@ import { CLAPPR_VERSION } from '../../build.js';
|
|
|
9
9
|
|
|
10
10
|
import seekTimeHTML from '../../../assets/seek-time/seek-time.html';
|
|
11
11
|
import '../../../assets/seek-time/seek-time.scss';
|
|
12
|
-
import { ZeptoResult } from '../../
|
|
12
|
+
import { ZeptoResult } from '../../types.js';
|
|
13
13
|
|
|
14
14
|
const { formatTime } = Utils;
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* `PLUGIN` that adds a seek time indicator to the media control UI.
|
|
18
18
|
* @beta
|
|
19
19
|
*/
|
|
20
20
|
export class SeekTime extends UICorePlugin {
|
|
@@ -10,7 +10,8 @@ import fbIcon from '../../../assets/icons/old/fb.svg';
|
|
|
10
10
|
import twIcon from '../../../assets/icons/old/twitter.svg';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* `PLUGIN` that adds a share button to the media control UI.
|
|
14
|
+
* @beta
|
|
14
15
|
*/
|
|
15
16
|
export class Share extends UICorePlugin {
|
|
16
17
|
private hide = false;
|