@capgo/capacitor-video-player 7.1.3 → 7.2.0
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/README.md +0 -25
- package/android/src/main/java/com/capgo/videoplayer/VideoPlayer.java +0 -4
- package/android/src/main/java/com/capgo/videoplayer/VideoPlayerPlugin.java +1 -10
- package/dist/docs.json +0 -35
- package/dist/esm/definitions.d.ts +0 -5
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +1 -2
- package/dist/esm/web.js +0 -3
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +0 -3
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +0 -3
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/VideoPlayerPlugin/FullscreenVideoPlayer.swift +239 -0
- package/ios/Sources/VideoPlayerPlugin/VideoPlayerPlugin.swift +465 -9
- package/package.json +1 -1
- package/ios/Sources/VideoPlayerPlugin/VideoPlayer.swift +0 -8
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web-utils/video-types.js","esm/web-utils/videoplayer.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst VideoPlayer = registerPlugin('VideoPlayer', {\n web: () => import('./web').then((m) => new m.VideoPlayerWeb()),\n});\nexport * from './definitions';\nexport { VideoPlayer };\n//# sourceMappingURL=index.js.map","export const possibleQueryParameterExtensions = ['file', 'extension', 'filetype', 'type', 'ext'];\nexport const videoTypes = {\n mp4: 'video/mp4',\n webm: 'video/mp4',\n cmaf: 'video/mp4',\n cmfv: 'video/mp4',\n m3u8: 'application/x-mpegURL',\n};\n//# sourceMappingURL=video-types.js.map","import Hls from 'hls.js';\nimport { videoTypes, possibleQueryParameterExtensions } from './video-types';\nexport class VideoPlayer {\n constructor(mode, url, playerId, rate, exitOnEnd, loopOnEnd, container, zIndex, width, height) {\n this.pipMode = false;\n this._videoType = null;\n this._videoContainer = null;\n this._firstReadyToPlay = true;\n this._isEnded = false;\n this._videoRate = 1.0;\n this._videoExitOnEnd = true;\n this._videoLoopOnEnd = false;\n this._url = url;\n this._container = container;\n this._mode = mode;\n this._width = width ? width : 320;\n this._height = height ? height : 180;\n this._mode = mode;\n this._videoRate = rate;\n this._zIndex = zIndex ? zIndex : 1;\n this._playerId = playerId;\n this._videoExitOnEnd = exitOnEnd;\n this._videoLoopOnEnd = loopOnEnd;\n }\n async initialize() {\n // get the video type\n const urlVideoType = this._getVideoType();\n if (urlVideoType) {\n // style the container\n if (this._mode === 'fullscreen') {\n this._container.style.position = 'absolute';\n this._container.style.width = '100vw';\n this._container.style.height = '100vh';\n }\n if (this._mode === 'embedded') {\n this._container.style.position = 'relative';\n this._container.style.width = this._width.toString() + 'px';\n this._container.style.height = this._height.toString() + 'px';\n }\n this._container.style.left = '0';\n this._container.style.top = '0';\n this._container.style.display = 'flex';\n this._container.style.alignItems = 'center';\n this._container.style.justifyContent = 'center';\n this._container.style.backgroundColor = '#000000';\n this._container.style.zIndex = this._zIndex.toString();\n const width = this._mode === 'fullscreen' ? window.innerWidth /*this._container.offsetWidth*/ : this._width;\n const height = this._mode === 'fullscreen' ? window.innerHeight /*this._container.offsetHeight*/ : this._height;\n const xmlns = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(xmlns, 'svg');\n svg.setAttributeNS(null, 'width', width.toString());\n svg.setAttributeNS(null, 'height', height.toString());\n const viewbox = '0 0 ' + width.toString() + ' ' + height.toString();\n svg.setAttributeNS(null, 'viewBox', viewbox);\n svg.style.zIndex = (this._zIndex + 1).toString();\n const rect = document.createElementNS(xmlns, 'rect');\n rect.setAttributeNS(null, 'x', '0');\n rect.setAttributeNS(null, 'y', '0');\n rect.setAttributeNS(null, 'width', width.toString());\n rect.setAttributeNS(null, 'height', height.toString());\n rect.setAttributeNS(null, 'fill', '#000000');\n svg.appendChild(rect);\n this._container.appendChild(svg);\n const heightVideo = (width * this._height) / this._width;\n this._videoContainer = document.createElement('div');\n this._videoContainer.style.position = 'absolute';\n this._videoContainer.style.left = '0';\n this._videoContainer.style.width = width.toString() + 'px';\n this._videoContainer.style.height = heightVideo.toString() + 'px';\n this._videoContainer.style.zIndex = (this._zIndex + 2).toString();\n this._container.appendChild(this._videoContainer);\n /* Create Video Element */\n const isCreated = await this.createVideoElement(width, heightVideo);\n if (!isCreated) {\n this._createEvent('Exit', this._playerId, 'Video Error: failed to create the Video Element');\n }\n }\n else {\n this._createEvent('Exit', this._playerId, 'Url Error: type not supported');\n }\n return;\n }\n async createVideoElement(width, height) {\n this.videoEl = document.createElement('video');\n this.videoEl.controls = true;\n this.videoEl.style.zIndex = (this._zIndex + 3).toString();\n this.videoEl.style.width = `${width.toString()}px`;\n this.videoEl.style.height = `${height.toString()}px`;\n this.videoEl.playbackRate = this._videoRate;\n this._videoContainer.appendChild(this.videoEl);\n // set the player\n const isSet = await this._setPlayer();\n if (isSet) {\n this.videoEl.onended = async () => {\n this._isEnded = true;\n this.isPlaying = false;\n if (this.videoEl) {\n this.videoEl.currentTime = 0;\n }\n if (this._videoExitOnEnd) {\n if (this._mode === 'fullscreen') {\n this._closeFullscreen();\n }\n this._createEvent('Ended', this._playerId);\n }\n else {\n if (this._videoLoopOnEnd && this.videoEl != null) {\n await this.videoEl.play();\n }\n }\n };\n this.videoEl.oncanplay = async () => {\n if (this._firstReadyToPlay) {\n this._createEvent('Ready', this._playerId);\n if (this.videoEl != null) {\n this.videoEl.muted = false;\n if (this._mode === 'fullscreen')\n await this.videoEl.play();\n this._firstReadyToPlay = false;\n }\n }\n };\n this.videoEl.onplay = () => {\n this.isPlaying = true;\n if (this._firstReadyToPlay)\n this._firstReadyToPlay = false;\n this._createEvent('Play', this._playerId);\n };\n this.videoEl.onplaying = () => {\n this._createEvent('Playing', this._playerId);\n };\n this.videoEl.onpause = () => {\n this.isPlaying = false;\n this._createEvent('Pause', this._playerId);\n };\n if (this._mode === 'fullscreen') {\n // create the video player exit button\n const exitEl = document.createElement('button');\n exitEl.textContent = 'X';\n exitEl.style.position = 'absolute';\n exitEl.style.left = '1%';\n exitEl.style.top = '5%';\n exitEl.style.width = '5vmin';\n exitEl.style.padding = '0.5%';\n exitEl.style.fontSize = '1.2rem';\n exitEl.style.background = 'rgba(51,51,51,.4)';\n exitEl.style.color = '#fff';\n exitEl.style.visibility = 'hidden';\n exitEl.style.zIndex = (this._zIndex + 4).toString();\n exitEl.style.border = '1px solid rgba(51,51,51,.4)';\n exitEl.style.borderRadius = '20px';\n this._videoContainer.onclick = async () => {\n this._initial = await this._doHide(exitEl, 3000);\n };\n this._videoContainer.ontouchstart = async () => {\n this._initial = await this._doHide(exitEl, 3000);\n };\n this._videoContainer.onmousemove = async () => {\n this._initial = await this._doHide(exitEl, 3000);\n };\n exitEl.onclick = () => {\n this._createEvent('Exit', this._playerId);\n };\n exitEl.ontouchstart = () => {\n this._createEvent('Exit', this._playerId);\n };\n this._videoContainer.appendChild(exitEl);\n this._initial = await this._doHide(exitEl, 3000);\n this._goFullscreen();\n }\n }\n return isSet;\n }\n async _goFullscreen() {\n if (this._container.mozRequestFullScreen) {\n /* Firefox */\n this._container.mozRequestFullScreen();\n }\n else if (this._container.webkitRequestFullscreen) {\n /* Chrome, Safari & Opera */\n this._container.webkitRequestFullscreen();\n }\n else if (this._container.msRequestFullscreen) {\n /* IE/Edge */\n this._container.msRequestFullscreen();\n }\n else if (this._container.requestFullscreen) {\n this._container.requestFullscreen();\n }\n return;\n }\n async _setPlayer() {\n return new Promise((resolve) => {\n if (this.videoEl != null) {\n if (Hls.isSupported() && this._videoType === 'application/x-mpegURL') {\n const hls = new Hls();\n hls.loadSource(this._url);\n hls.attachMedia(this.videoEl);\n hls.once(Hls.Events.FRAG_PARSED, () => {\n if (this.videoEl != null) {\n this.videoEl.muted = true;\n this.videoEl.crossOrigin = 'anonymous';\n resolve(true);\n }\n else {\n resolve(false);\n }\n });\n }\n else if (this._videoType === 'video/mp4') {\n // CMAF (fMP4) && MP4\n this.videoEl.src = this._url;\n if (this._url.substring(0, 5) != 'https' && this._url.substring(0, 4) === 'http')\n this.videoEl.crossOrigin = 'anonymous';\n if (this._url.substring(0, 5) === 'https' || this._url.substring(0, 4) === 'http')\n this.videoEl.muted = true;\n resolve(true);\n }\n else {\n // Not Supported\n resolve(false);\n }\n this.videoEl.addEventListener('enterpictureinpicture', (event) => {\n this.pipWindow = event.pictureInPictureWindow;\n this.pipMode = true;\n this._closeFullscreen();\n });\n this.videoEl.addEventListener('leavepictureinpicture', () => {\n this.pipMode = false;\n if (!this._isEnded) {\n this._goFullscreen();\n if (this.videoEl != null)\n this.videoEl.play();\n }\n });\n }\n else {\n resolve(false);\n }\n });\n }\n _getVideoType() {\n const sUrl = this._url ? this._url : '';\n if (sUrl != null && sUrl.length > 0) {\n Object.entries(videoTypes).forEach(([extension, mimeType]) => {\n // we search for dot + extension (e.g. `.mp4`) for URLs that have the extension in the filename\n // e.g. https://vimeo.com/?file=my-video.mp4\n const hasDotExtension = sUrl.match(new RegExp(`.(${extension})`, 'i'));\n if (hasDotExtension) {\n return (this._videoType = mimeType);\n }\n // we search for the extension (e.g. `m3u8`) for URLs that might have the extension as a query parameter\n // e.g. https://youtube.com/?v=7894289374&type=m3u8\n const hasExtensionInUrl = sUrl.match(new RegExp(`(${extension})`, 'i'));\n if (hasExtensionInUrl) {\n return (this._videoType = mimeType);\n }\n });\n // we check for not supported extensions for URLs that have the extension in the filename\n // e.g. https://vimeo.com/?file=not-supported-extension-video.mkv\n const hasNotSupportedDotExtension = sUrl.match(/\\.(.*)/i);\n if (hasNotSupportedDotExtension) {\n return (this._videoType = null);\n }\n // we check for not supported extensions for URLs that might have the extension as a query parameter\n // e.g. https://youtube.com/?v=3982748927&filetype=mkv\n const hasNotSupportedExtensionInUrl = sUrl.match(new RegExp(`(${possibleQueryParameterExtensions.join('|')})=+(.*)&?(?=&|$))`, 'i'));\n if (hasNotSupportedExtensionInUrl) {\n return (this._videoType = null);\n }\n // No extension found, then we assume it's 'mp4' (Match case for '')\n return 'video/mp4';\n }\n // URL was not defined, we return null\n return null;\n }\n async _doHide(exitEl, duration) {\n clearTimeout(this._initial);\n exitEl.style.visibility = 'visible';\n const initial = setTimeout(() => {\n exitEl.style.visibility = 'hidden';\n }, duration);\n return initial;\n }\n _createEvent(ev, playerId, msg) {\n const message = msg ? msg : null;\n let event;\n if (message != null) {\n event = new CustomEvent(`videoPlayer${ev}`, {\n detail: { fromPlayerId: playerId, message: message },\n });\n }\n else {\n const currentTime = this.videoEl ? this.videoEl.currentTime : 0;\n event = new CustomEvent(`videoPlayer${ev}`, {\n detail: { fromPlayerId: playerId, currentTime: currentTime },\n });\n }\n document.dispatchEvent(event);\n }\n _closeFullscreen() {\n const mydoc = document;\n const isInFullScreen = (mydoc.fullscreenElement && mydoc.fullscreenElement !== null) ||\n (mydoc.webkitFullscreenElement && mydoc.webkitFullscreenElement !== null) ||\n (mydoc.mozFullScreenElement && mydoc.mozFullScreenElement !== null) ||\n (mydoc.msFullscreenElement && mydoc.msFullscreenElement !== null);\n if (isInFullScreen) {\n if (mydoc.mozCancelFullScreen) {\n mydoc.mozCancelFullScreen();\n }\n else if (mydoc.webkitExitFullscreen) {\n mydoc.webkitExitFullscreen();\n }\n else if (mydoc.msExitFullscreen) {\n mydoc.msExitFullscreen();\n }\n else if (mydoc.exitFullscreen) {\n mydoc.exitFullscreen();\n }\n }\n }\n}\n//# sourceMappingURL=videoplayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { VideoPlayer } from './web-utils/videoplayer';\nexport class VideoPlayerWeb extends WebPlugin {\n constructor() {\n super();\n this._players = [];\n this.addListeners();\n }\n async echo(options) {\n return Promise.resolve({ result: true, method: 'echo', value: options });\n }\n /**\n * Player initialization\n *\n * @param options\n */\n async initPlayer(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a capVideoPlayerOptions object',\n });\n }\n this.mode = options.mode ? options.mode : '';\n if (this.mode == null || this.mode.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Mode (fullscreen/embedded)',\n });\n }\n if (this.mode === 'fullscreen' || this.mode === 'embedded') {\n const url = options.url ? options.url : '';\n if (url == null || url.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Video Url',\n });\n }\n if (url == 'internal') {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Internal Videos not supported on Web Platform',\n });\n }\n const playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Player Id',\n });\n }\n const rate = options.rate ? options.rate : 1.0;\n let exitOnEnd = true;\n if (Object.keys(options).includes('exitOnEnd')) {\n const exitRet = options.exitOnEnd;\n exitOnEnd = exitRet != null ? exitRet : true;\n }\n let loopOnEnd = false;\n if (Object.keys(options).includes('loopOnEnd') && !exitOnEnd) {\n const loopRet = options.loopOnEnd;\n loopOnEnd = loopRet != null ? loopRet : false;\n }\n const componentTag = options.componentTag ? options.componentTag : '';\n if (componentTag == null || componentTag.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Component Tag',\n });\n }\n let playerSize = null;\n if (this.mode === 'embedded') {\n playerSize = this.checkSize(options);\n }\n const result = await this._initializeVideoPlayer(url, playerId, this.mode, rate, exitOnEnd, loopOnEnd, componentTag, playerSize);\n return Promise.resolve({ result: result });\n }\n else {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Mode either fullscreen or embedded)',\n });\n }\n }\n /**\n * Return if a given playerId is playing\n *\n * @param options\n */\n async isPlaying(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'isPlaying',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const playing = this._players[playerId].isPlaying;\n return Promise.resolve({\n method: 'isPlaying',\n result: true,\n value: playing,\n });\n }\n else {\n return Promise.resolve({\n method: 'isPlaying',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Play the current video from a given playerId\n *\n * @param options\n */\n async play(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'play',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n await this._players[playerId].videoEl.play();\n return Promise.resolve({ method: 'play', result: true, value: true });\n }\n else {\n return Promise.resolve({\n method: 'play',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Pause the current video from a given playerId\n *\n * @param options\n */\n async pause(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'pause',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n if (this._players[playerId].isPlaying)\n await this._players[playerId].videoEl.pause();\n return Promise.resolve({ method: 'pause', result: true, value: true });\n }\n else {\n return Promise.resolve({\n method: 'pause',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the duration of the current video from a given playerId\n *\n * @param options\n */\n async getDuration(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getDuration',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const duration = this._players[playerId].videoEl.duration;\n return Promise.resolve({\n method: 'getDuration',\n result: true,\n value: duration,\n });\n }\n else {\n return Promise.resolve({\n method: 'getDuration',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the rate of the current video from a given playerId\n *\n * @param options\n */\n async setRate(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setRate',\n message: 'Must provide a capVideoRateOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n const rateList = [0.25, 0.5, 0.75, 1.0, 2.0, 4.0];\n const rate = options.rate && rateList.includes(options.rate) ? options.rate : 1.0;\n if (this._players[playerId]) {\n this._players[playerId].videoEl.playbackRate = rate;\n return Promise.resolve({\n method: 'setRate',\n result: true,\n value: rate,\n });\n }\n else {\n return Promise.resolve({\n method: 'setRate',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the volume of the current video from a given playerId\n *\n * @param options\n */\n async getRate(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getRate',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const rate = this._players[playerId].videoEl.playbackRate;\n return Promise.resolve({\n method: 'getRate',\n result: true,\n value: rate,\n });\n }\n else {\n return Promise.resolve({\n method: 'getRate',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the volume of the current video from a given playerId\n *\n * @param options\n */\n async setVolume(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setVolume',\n message: 'Must provide a capVideoVolumeOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n const volume = options.volume ? options.volume : 0.5;\n if (this._players[playerId]) {\n this._players[playerId].videoEl.volume = volume;\n return Promise.resolve({\n method: 'setVolume',\n result: true,\n value: volume,\n });\n }\n else {\n return Promise.resolve({\n method: 'setVolume',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the volume of the current video from a given playerId\n *\n * @param options\n */\n async getVolume(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getVolume',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const volume = this._players[playerId].videoEl.volume;\n return Promise.resolve({\n method: 'getVolume',\n result: true,\n value: volume,\n });\n }\n else {\n return Promise.resolve({\n method: 'getVolume',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the muted property of the current video from a given playerId\n *\n * @param options\n */\n async setMuted(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setMuted',\n message: 'Must provide a capVideoMutedOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n const muted = options.muted ? options.muted : false;\n if (this._players[playerId]) {\n this._players[playerId].videoEl.muted = muted;\n return Promise.resolve({\n method: 'setMuted',\n result: true,\n value: muted,\n });\n }\n else {\n return Promise.resolve({\n method: 'setMuted',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the muted property of the current video from a given playerId\n *\n * @param options\n */\n async getMuted(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getMuted',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const muted = this._players[playerId].videoEl.muted;\n return Promise.resolve({\n method: 'getMuted',\n result: true,\n value: muted,\n });\n }\n else {\n return Promise.resolve({\n method: 'getMuted',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the current time of the current video from a given playerId\n *\n * @param options\n */\n async setCurrentTime(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setCurrentTime',\n message: 'Must provide a capVideoTimeOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n let seekTime = options.seektime ? options.seektime : 0;\n if (this._players[playerId]) {\n const duration = this._players[playerId].videoEl.duration;\n seekTime = seekTime <= duration && seekTime >= 0 ? seekTime : duration / 2;\n this._players[playerId].videoEl.currentTime = seekTime;\n return Promise.resolve({\n method: 'setCurrentTime',\n result: true,\n value: seekTime,\n });\n }\n else {\n return Promise.resolve({\n method: 'setCurrentTime',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the current time of the current video from a given playerId\n *\n * @param options\n */\n async getCurrentTime(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getCurrentTime',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const seekTime = this._players[playerId].videoEl.currentTime;\n return Promise.resolve({\n method: 'getCurrentTime',\n result: true,\n value: seekTime,\n });\n }\n else {\n return Promise.resolve({\n method: 'getCurrentTime',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the current time of the current video from a given playerId\n *\n */\n async stopAllPlayers() {\n for (const i in this._players) {\n if (this._players[i].pipMode) {\n const doc = document;\n if (doc.pictureInPictureElement) {\n await doc.exitPictureInPicture();\n }\n }\n if (!this._players[i].videoEl.paused)\n this._players[i].videoEl.pause();\n }\n return Promise.resolve({\n method: 'stopAllPlayers',\n result: true,\n value: true,\n });\n }\n /**\n * Show controller\n *\n */\n async showController() {\n return Promise.resolve({\n method: 'showController',\n result: true,\n value: true,\n });\n }\n /**\n * isControllerIsFullyVisible\n *\n */\n async isControllerIsFullyVisible() {\n return Promise.resolve({\n method: 'isControllerIsFullyVisible',\n result: true,\n value: true,\n });\n }\n /**\n * Exit the current player\n *\n */\n async exitPlayer() {\n return Promise.resolve({\n method: 'exitPlayer',\n result: true,\n value: true,\n });\n }\n checkSize(options) {\n const playerSize = {\n width: options.width ? options.width : 320,\n height: options.height ? options.height : 180,\n };\n const ratio = playerSize.height / playerSize.width;\n if (playerSize.width > window.innerWidth) {\n playerSize.width = window.innerWidth;\n playerSize.height = Math.floor(playerSize.width * ratio);\n }\n if (playerSize.height > window.innerHeight) {\n playerSize.height = window.innerHeight;\n playerSize.width = Math.floor(playerSize.height / ratio);\n }\n return playerSize;\n }\n async _initializeVideoPlayer(url, playerId, mode, rate, exitOnEnd, loopOnEnd, componentTag, playerSize) {\n const videoURL = url ? (url.indexOf('%2F') == -1 ? encodeURI(url) : url) : null;\n if (videoURL === null)\n return Promise.resolve(false);\n this.videoContainer = await this._getContainerElement(playerId, componentTag);\n if (this.videoContainer === null)\n return Promise.resolve({\n method: 'initPlayer',\n result: false,\n message: 'componentTag or divContainerElement must be provided',\n });\n if (mode === 'embedded' && playerSize == null)\n return Promise.resolve({\n method: 'initPlayer',\n result: false,\n message: 'playerSize must be defined in embedded mode',\n });\n if (mode === 'embedded') {\n this._players[playerId] = new VideoPlayer('embedded', videoURL, playerId, rate, exitOnEnd, loopOnEnd, this.videoContainer, 2, playerSize.width, playerSize.height);\n await this._players[playerId].initialize();\n }\n else if (mode === 'fullscreen') {\n this._players['fullscreen'] = new VideoPlayer('fullscreen', videoURL, 'fullscreen', rate, exitOnEnd, loopOnEnd, this.videoContainer, 99995);\n await this._players['fullscreen'].initialize();\n }\n else {\n return Promise.resolve({\n method: 'initPlayer',\n result: false,\n message: 'mode not supported',\n });\n }\n return Promise.resolve({ method: 'initPlayer', result: true, value: true });\n }\n async _getContainerElement(playerId, componentTag) {\n const videoContainer = document.createElement('div');\n videoContainer.id = `vc_${playerId}`;\n if (componentTag != null && componentTag.length > 0) {\n const cmpTagEl = document.querySelector(`${componentTag}`);\n if (cmpTagEl === null)\n return Promise.resolve(null);\n let container = null;\n const shadowRoot = cmpTagEl.shadowRoot ? cmpTagEl.shadowRoot : null;\n if (shadowRoot != null) {\n container = shadowRoot.querySelector(`[id='${playerId}']`);\n }\n else {\n container = cmpTagEl.querySelector(`[id='${playerId}']`);\n }\n if (container != null)\n container.appendChild(videoContainer);\n return Promise.resolve(videoContainer);\n }\n else {\n return Promise.resolve(null);\n }\n }\n handlePlayerPlay(data) {\n this.notifyListeners('jeepCapVideoPlayerPlay', data);\n }\n handlePlayerPause(data) {\n this.notifyListeners('jeepCapVideoPlayerPause', data);\n }\n handlePlayerEnded(data) {\n var _a;\n if (this.mode === 'fullscreen') {\n (_a = this.videoContainer) === null || _a === void 0 ? void 0 : _a.remove();\n }\n this.removeListeners();\n this.notifyListeners('jeepCapVideoPlayerEnded', data);\n }\n handlePlayerExit() {\n var _a;\n if (this.mode === 'fullscreen') {\n (_a = this.videoContainer) === null || _a === void 0 ? void 0 : _a.remove();\n }\n const retData = { dismiss: true };\n this.removeListeners();\n this.notifyListeners('jeepCapVideoPlayerExit', retData);\n }\n handlePlayerReady(data) {\n this.notifyListeners('jeepCapVideoPlayerReady', data);\n }\n addListeners() {\n document.addEventListener('videoPlayerPlay', (ev) => {\n this.handlePlayerPlay(ev.detail);\n }, false);\n document.addEventListener('videoPlayerPause', (ev) => {\n this.handlePlayerPause(ev.detail);\n }, false);\n document.addEventListener('videoPlayerEnded', (ev) => {\n this.handlePlayerEnded(ev.detail);\n }, false);\n document.addEventListener('videoPlayerReady', (ev) => {\n this.handlePlayerReady(ev.detail);\n }, false);\n document.addEventListener('videoPlayerExit', () => {\n this.handlePlayerExit();\n }, false);\n }\n removeListeners() {\n document.removeEventListener('videoPlayerPlay', (ev) => {\n this.handlePlayerPlay(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerPause', (ev) => {\n this.handlePlayerPause(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerEnded', (ev) => {\n this.handlePlayerEnded(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerReady', (ev) => {\n this.handlePlayerReady(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerExit', () => {\n this.handlePlayerExit();\n }, false);\n }\n async getPluginVersion() {\n return { version: 'web' };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["VideoPlayer","registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web-utils/video-types.js","esm/web-utils/videoplayer.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst VideoPlayer = registerPlugin('VideoPlayer', {\n web: () => import('./web').then((m) => new m.VideoPlayerWeb()),\n});\nexport * from './definitions';\nexport { VideoPlayer };\n//# sourceMappingURL=index.js.map","export const possibleQueryParameterExtensions = ['file', 'extension', 'filetype', 'type', 'ext'];\nexport const videoTypes = {\n mp4: 'video/mp4',\n webm: 'video/mp4',\n cmaf: 'video/mp4',\n cmfv: 'video/mp4',\n m3u8: 'application/x-mpegURL',\n};\n//# sourceMappingURL=video-types.js.map","import Hls from 'hls.js';\nimport { videoTypes, possibleQueryParameterExtensions } from './video-types';\nexport class VideoPlayer {\n constructor(mode, url, playerId, rate, exitOnEnd, loopOnEnd, container, zIndex, width, height) {\n this.pipMode = false;\n this._videoType = null;\n this._videoContainer = null;\n this._firstReadyToPlay = true;\n this._isEnded = false;\n this._videoRate = 1.0;\n this._videoExitOnEnd = true;\n this._videoLoopOnEnd = false;\n this._url = url;\n this._container = container;\n this._mode = mode;\n this._width = width ? width : 320;\n this._height = height ? height : 180;\n this._mode = mode;\n this._videoRate = rate;\n this._zIndex = zIndex ? zIndex : 1;\n this._playerId = playerId;\n this._videoExitOnEnd = exitOnEnd;\n this._videoLoopOnEnd = loopOnEnd;\n }\n async initialize() {\n // get the video type\n const urlVideoType = this._getVideoType();\n if (urlVideoType) {\n // style the container\n if (this._mode === 'fullscreen') {\n this._container.style.position = 'absolute';\n this._container.style.width = '100vw';\n this._container.style.height = '100vh';\n }\n if (this._mode === 'embedded') {\n this._container.style.position = 'relative';\n this._container.style.width = this._width.toString() + 'px';\n this._container.style.height = this._height.toString() + 'px';\n }\n this._container.style.left = '0';\n this._container.style.top = '0';\n this._container.style.display = 'flex';\n this._container.style.alignItems = 'center';\n this._container.style.justifyContent = 'center';\n this._container.style.backgroundColor = '#000000';\n this._container.style.zIndex = this._zIndex.toString();\n const width = this._mode === 'fullscreen' ? window.innerWidth /*this._container.offsetWidth*/ : this._width;\n const height = this._mode === 'fullscreen' ? window.innerHeight /*this._container.offsetHeight*/ : this._height;\n const xmlns = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(xmlns, 'svg');\n svg.setAttributeNS(null, 'width', width.toString());\n svg.setAttributeNS(null, 'height', height.toString());\n const viewbox = '0 0 ' + width.toString() + ' ' + height.toString();\n svg.setAttributeNS(null, 'viewBox', viewbox);\n svg.style.zIndex = (this._zIndex + 1).toString();\n const rect = document.createElementNS(xmlns, 'rect');\n rect.setAttributeNS(null, 'x', '0');\n rect.setAttributeNS(null, 'y', '0');\n rect.setAttributeNS(null, 'width', width.toString());\n rect.setAttributeNS(null, 'height', height.toString());\n rect.setAttributeNS(null, 'fill', '#000000');\n svg.appendChild(rect);\n this._container.appendChild(svg);\n const heightVideo = (width * this._height) / this._width;\n this._videoContainer = document.createElement('div');\n this._videoContainer.style.position = 'absolute';\n this._videoContainer.style.left = '0';\n this._videoContainer.style.width = width.toString() + 'px';\n this._videoContainer.style.height = heightVideo.toString() + 'px';\n this._videoContainer.style.zIndex = (this._zIndex + 2).toString();\n this._container.appendChild(this._videoContainer);\n /* Create Video Element */\n const isCreated = await this.createVideoElement(width, heightVideo);\n if (!isCreated) {\n this._createEvent('Exit', this._playerId, 'Video Error: failed to create the Video Element');\n }\n }\n else {\n this._createEvent('Exit', this._playerId, 'Url Error: type not supported');\n }\n return;\n }\n async createVideoElement(width, height) {\n this.videoEl = document.createElement('video');\n this.videoEl.controls = true;\n this.videoEl.style.zIndex = (this._zIndex + 3).toString();\n this.videoEl.style.width = `${width.toString()}px`;\n this.videoEl.style.height = `${height.toString()}px`;\n this.videoEl.playbackRate = this._videoRate;\n this._videoContainer.appendChild(this.videoEl);\n // set the player\n const isSet = await this._setPlayer();\n if (isSet) {\n this.videoEl.onended = async () => {\n this._isEnded = true;\n this.isPlaying = false;\n if (this.videoEl) {\n this.videoEl.currentTime = 0;\n }\n if (this._videoExitOnEnd) {\n if (this._mode === 'fullscreen') {\n this._closeFullscreen();\n }\n this._createEvent('Ended', this._playerId);\n }\n else {\n if (this._videoLoopOnEnd && this.videoEl != null) {\n await this.videoEl.play();\n }\n }\n };\n this.videoEl.oncanplay = async () => {\n if (this._firstReadyToPlay) {\n this._createEvent('Ready', this._playerId);\n if (this.videoEl != null) {\n this.videoEl.muted = false;\n if (this._mode === 'fullscreen')\n await this.videoEl.play();\n this._firstReadyToPlay = false;\n }\n }\n };\n this.videoEl.onplay = () => {\n this.isPlaying = true;\n if (this._firstReadyToPlay)\n this._firstReadyToPlay = false;\n this._createEvent('Play', this._playerId);\n };\n this.videoEl.onplaying = () => {\n this._createEvent('Playing', this._playerId);\n };\n this.videoEl.onpause = () => {\n this.isPlaying = false;\n this._createEvent('Pause', this._playerId);\n };\n if (this._mode === 'fullscreen') {\n // create the video player exit button\n const exitEl = document.createElement('button');\n exitEl.textContent = 'X';\n exitEl.style.position = 'absolute';\n exitEl.style.left = '1%';\n exitEl.style.top = '5%';\n exitEl.style.width = '5vmin';\n exitEl.style.padding = '0.5%';\n exitEl.style.fontSize = '1.2rem';\n exitEl.style.background = 'rgba(51,51,51,.4)';\n exitEl.style.color = '#fff';\n exitEl.style.visibility = 'hidden';\n exitEl.style.zIndex = (this._zIndex + 4).toString();\n exitEl.style.border = '1px solid rgba(51,51,51,.4)';\n exitEl.style.borderRadius = '20px';\n this._videoContainer.onclick = async () => {\n this._initial = await this._doHide(exitEl, 3000);\n };\n this._videoContainer.ontouchstart = async () => {\n this._initial = await this._doHide(exitEl, 3000);\n };\n this._videoContainer.onmousemove = async () => {\n this._initial = await this._doHide(exitEl, 3000);\n };\n exitEl.onclick = () => {\n this._createEvent('Exit', this._playerId);\n };\n exitEl.ontouchstart = () => {\n this._createEvent('Exit', this._playerId);\n };\n this._videoContainer.appendChild(exitEl);\n this._initial = await this._doHide(exitEl, 3000);\n this._goFullscreen();\n }\n }\n return isSet;\n }\n async _goFullscreen() {\n if (this._container.mozRequestFullScreen) {\n /* Firefox */\n this._container.mozRequestFullScreen();\n }\n else if (this._container.webkitRequestFullscreen) {\n /* Chrome, Safari & Opera */\n this._container.webkitRequestFullscreen();\n }\n else if (this._container.msRequestFullscreen) {\n /* IE/Edge */\n this._container.msRequestFullscreen();\n }\n else if (this._container.requestFullscreen) {\n this._container.requestFullscreen();\n }\n return;\n }\n async _setPlayer() {\n return new Promise((resolve) => {\n if (this.videoEl != null) {\n if (Hls.isSupported() && this._videoType === 'application/x-mpegURL') {\n const hls = new Hls();\n hls.loadSource(this._url);\n hls.attachMedia(this.videoEl);\n hls.once(Hls.Events.FRAG_PARSED, () => {\n if (this.videoEl != null) {\n this.videoEl.muted = true;\n this.videoEl.crossOrigin = 'anonymous';\n resolve(true);\n }\n else {\n resolve(false);\n }\n });\n }\n else if (this._videoType === 'video/mp4') {\n // CMAF (fMP4) && MP4\n this.videoEl.src = this._url;\n if (this._url.substring(0, 5) != 'https' && this._url.substring(0, 4) === 'http')\n this.videoEl.crossOrigin = 'anonymous';\n if (this._url.substring(0, 5) === 'https' || this._url.substring(0, 4) === 'http')\n this.videoEl.muted = true;\n resolve(true);\n }\n else {\n // Not Supported\n resolve(false);\n }\n this.videoEl.addEventListener('enterpictureinpicture', (event) => {\n this.pipWindow = event.pictureInPictureWindow;\n this.pipMode = true;\n this._closeFullscreen();\n });\n this.videoEl.addEventListener('leavepictureinpicture', () => {\n this.pipMode = false;\n if (!this._isEnded) {\n this._goFullscreen();\n if (this.videoEl != null)\n this.videoEl.play();\n }\n });\n }\n else {\n resolve(false);\n }\n });\n }\n _getVideoType() {\n const sUrl = this._url ? this._url : '';\n if (sUrl != null && sUrl.length > 0) {\n Object.entries(videoTypes).forEach(([extension, mimeType]) => {\n // we search for dot + extension (e.g. `.mp4`) for URLs that have the extension in the filename\n // e.g. https://vimeo.com/?file=my-video.mp4\n const hasDotExtension = sUrl.match(new RegExp(`.(${extension})`, 'i'));\n if (hasDotExtension) {\n return (this._videoType = mimeType);\n }\n // we search for the extension (e.g. `m3u8`) for URLs that might have the extension as a query parameter\n // e.g. https://youtube.com/?v=7894289374&type=m3u8\n const hasExtensionInUrl = sUrl.match(new RegExp(`(${extension})`, 'i'));\n if (hasExtensionInUrl) {\n return (this._videoType = mimeType);\n }\n });\n // we check for not supported extensions for URLs that have the extension in the filename\n // e.g. https://vimeo.com/?file=not-supported-extension-video.mkv\n const hasNotSupportedDotExtension = sUrl.match(/\\.(.*)/i);\n if (hasNotSupportedDotExtension) {\n return (this._videoType = null);\n }\n // we check for not supported extensions for URLs that might have the extension as a query parameter\n // e.g. https://youtube.com/?v=3982748927&filetype=mkv\n const hasNotSupportedExtensionInUrl = sUrl.match(new RegExp(`(${possibleQueryParameterExtensions.join('|')})=+(.*)&?(?=&|$))`, 'i'));\n if (hasNotSupportedExtensionInUrl) {\n return (this._videoType = null);\n }\n // No extension found, then we assume it's 'mp4' (Match case for '')\n return 'video/mp4';\n }\n // URL was not defined, we return null\n return null;\n }\n async _doHide(exitEl, duration) {\n clearTimeout(this._initial);\n exitEl.style.visibility = 'visible';\n const initial = setTimeout(() => {\n exitEl.style.visibility = 'hidden';\n }, duration);\n return initial;\n }\n _createEvent(ev, playerId, msg) {\n const message = msg ? msg : null;\n let event;\n if (message != null) {\n event = new CustomEvent(`videoPlayer${ev}`, {\n detail: { fromPlayerId: playerId, message: message },\n });\n }\n else {\n const currentTime = this.videoEl ? this.videoEl.currentTime : 0;\n event = new CustomEvent(`videoPlayer${ev}`, {\n detail: { fromPlayerId: playerId, currentTime: currentTime },\n });\n }\n document.dispatchEvent(event);\n }\n _closeFullscreen() {\n const mydoc = document;\n const isInFullScreen = (mydoc.fullscreenElement && mydoc.fullscreenElement !== null) ||\n (mydoc.webkitFullscreenElement && mydoc.webkitFullscreenElement !== null) ||\n (mydoc.mozFullScreenElement && mydoc.mozFullScreenElement !== null) ||\n (mydoc.msFullscreenElement && mydoc.msFullscreenElement !== null);\n if (isInFullScreen) {\n if (mydoc.mozCancelFullScreen) {\n mydoc.mozCancelFullScreen();\n }\n else if (mydoc.webkitExitFullscreen) {\n mydoc.webkitExitFullscreen();\n }\n else if (mydoc.msExitFullscreen) {\n mydoc.msExitFullscreen();\n }\n else if (mydoc.exitFullscreen) {\n mydoc.exitFullscreen();\n }\n }\n }\n}\n//# sourceMappingURL=videoplayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { VideoPlayer } from './web-utils/videoplayer';\nexport class VideoPlayerWeb extends WebPlugin {\n constructor() {\n super();\n this._players = [];\n this.addListeners();\n }\n /**\n * Player initialization\n *\n * @param options\n */\n async initPlayer(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a capVideoPlayerOptions object',\n });\n }\n this.mode = options.mode ? options.mode : '';\n if (this.mode == null || this.mode.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Mode (fullscreen/embedded)',\n });\n }\n if (this.mode === 'fullscreen' || this.mode === 'embedded') {\n const url = options.url ? options.url : '';\n if (url == null || url.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Video Url',\n });\n }\n if (url == 'internal') {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Internal Videos not supported on Web Platform',\n });\n }\n const playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Player Id',\n });\n }\n const rate = options.rate ? options.rate : 1.0;\n let exitOnEnd = true;\n if (Object.keys(options).includes('exitOnEnd')) {\n const exitRet = options.exitOnEnd;\n exitOnEnd = exitRet != null ? exitRet : true;\n }\n let loopOnEnd = false;\n if (Object.keys(options).includes('loopOnEnd') && !exitOnEnd) {\n const loopRet = options.loopOnEnd;\n loopOnEnd = loopRet != null ? loopRet : false;\n }\n const componentTag = options.componentTag ? options.componentTag : '';\n if (componentTag == null || componentTag.length === 0) {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Component Tag',\n });\n }\n let playerSize = null;\n if (this.mode === 'embedded') {\n playerSize = this.checkSize(options);\n }\n const result = await this._initializeVideoPlayer(url, playerId, this.mode, rate, exitOnEnd, loopOnEnd, componentTag, playerSize);\n return Promise.resolve({ result: result });\n }\n else {\n return Promise.resolve({\n result: false,\n method: 'initPlayer',\n message: 'Must provide a Mode either fullscreen or embedded)',\n });\n }\n }\n /**\n * Return if a given playerId is playing\n *\n * @param options\n */\n async isPlaying(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'isPlaying',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const playing = this._players[playerId].isPlaying;\n return Promise.resolve({\n method: 'isPlaying',\n result: true,\n value: playing,\n });\n }\n else {\n return Promise.resolve({\n method: 'isPlaying',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Play the current video from a given playerId\n *\n * @param options\n */\n async play(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'play',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n await this._players[playerId].videoEl.play();\n return Promise.resolve({ method: 'play', result: true, value: true });\n }\n else {\n return Promise.resolve({\n method: 'play',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Pause the current video from a given playerId\n *\n * @param options\n */\n async pause(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'pause',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n if (this._players[playerId].isPlaying)\n await this._players[playerId].videoEl.pause();\n return Promise.resolve({ method: 'pause', result: true, value: true });\n }\n else {\n return Promise.resolve({\n method: 'pause',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the duration of the current video from a given playerId\n *\n * @param options\n */\n async getDuration(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getDuration',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const duration = this._players[playerId].videoEl.duration;\n return Promise.resolve({\n method: 'getDuration',\n result: true,\n value: duration,\n });\n }\n else {\n return Promise.resolve({\n method: 'getDuration',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the rate of the current video from a given playerId\n *\n * @param options\n */\n async setRate(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setRate',\n message: 'Must provide a capVideoRateOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n const rateList = [0.25, 0.5, 0.75, 1.0, 2.0, 4.0];\n const rate = options.rate && rateList.includes(options.rate) ? options.rate : 1.0;\n if (this._players[playerId]) {\n this._players[playerId].videoEl.playbackRate = rate;\n return Promise.resolve({\n method: 'setRate',\n result: true,\n value: rate,\n });\n }\n else {\n return Promise.resolve({\n method: 'setRate',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the volume of the current video from a given playerId\n *\n * @param options\n */\n async getRate(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getRate',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const rate = this._players[playerId].videoEl.playbackRate;\n return Promise.resolve({\n method: 'getRate',\n result: true,\n value: rate,\n });\n }\n else {\n return Promise.resolve({\n method: 'getRate',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the volume of the current video from a given playerId\n *\n * @param options\n */\n async setVolume(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setVolume',\n message: 'Must provide a capVideoVolumeOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n const volume = options.volume ? options.volume : 0.5;\n if (this._players[playerId]) {\n this._players[playerId].videoEl.volume = volume;\n return Promise.resolve({\n method: 'setVolume',\n result: true,\n value: volume,\n });\n }\n else {\n return Promise.resolve({\n method: 'setVolume',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the volume of the current video from a given playerId\n *\n * @param options\n */\n async getVolume(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getVolume',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const volume = this._players[playerId].videoEl.volume;\n return Promise.resolve({\n method: 'getVolume',\n result: true,\n value: volume,\n });\n }\n else {\n return Promise.resolve({\n method: 'getVolume',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the muted property of the current video from a given playerId\n *\n * @param options\n */\n async setMuted(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setMuted',\n message: 'Must provide a capVideoMutedOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n const muted = options.muted ? options.muted : false;\n if (this._players[playerId]) {\n this._players[playerId].videoEl.muted = muted;\n return Promise.resolve({\n method: 'setMuted',\n result: true,\n value: muted,\n });\n }\n else {\n return Promise.resolve({\n method: 'setMuted',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the muted property of the current video from a given playerId\n *\n * @param options\n */\n async getMuted(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getMuted',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const muted = this._players[playerId].videoEl.muted;\n return Promise.resolve({\n method: 'getMuted',\n result: true,\n value: muted,\n });\n }\n else {\n return Promise.resolve({\n method: 'getMuted',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Set the current time of the current video from a given playerId\n *\n * @param options\n */\n async setCurrentTime(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'setCurrentTime',\n message: 'Must provide a capVideoTimeOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n let seekTime = options.seektime ? options.seektime : 0;\n if (this._players[playerId]) {\n const duration = this._players[playerId].videoEl.duration;\n seekTime = seekTime <= duration && seekTime >= 0 ? seekTime : duration / 2;\n this._players[playerId].videoEl.currentTime = seekTime;\n return Promise.resolve({\n method: 'setCurrentTime',\n result: true,\n value: seekTime,\n });\n }\n else {\n return Promise.resolve({\n method: 'setCurrentTime',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the current time of the current video from a given playerId\n *\n * @param options\n */\n async getCurrentTime(options) {\n if (options == null) {\n return Promise.resolve({\n result: false,\n method: 'getCurrentTime',\n message: 'Must provide a capVideoPlayerIdOptions object',\n });\n }\n let playerId = options.playerId ? options.playerId : '';\n if (playerId == null || playerId.length === 0) {\n playerId = 'fullscreen';\n }\n if (this._players[playerId]) {\n const seekTime = this._players[playerId].videoEl.currentTime;\n return Promise.resolve({\n method: 'getCurrentTime',\n result: true,\n value: seekTime,\n });\n }\n else {\n return Promise.resolve({\n method: 'getCurrentTime',\n result: false,\n message: 'Given PlayerId does not exist)',\n });\n }\n }\n /**\n * Get the current time of the current video from a given playerId\n *\n */\n async stopAllPlayers() {\n for (const i in this._players) {\n if (this._players[i].pipMode) {\n const doc = document;\n if (doc.pictureInPictureElement) {\n await doc.exitPictureInPicture();\n }\n }\n if (!this._players[i].videoEl.paused)\n this._players[i].videoEl.pause();\n }\n return Promise.resolve({\n method: 'stopAllPlayers',\n result: true,\n value: true,\n });\n }\n /**\n * Show controller\n *\n */\n async showController() {\n return Promise.resolve({\n method: 'showController',\n result: true,\n value: true,\n });\n }\n /**\n * isControllerIsFullyVisible\n *\n */\n async isControllerIsFullyVisible() {\n return Promise.resolve({\n method: 'isControllerIsFullyVisible',\n result: true,\n value: true,\n });\n }\n /**\n * Exit the current player\n *\n */\n async exitPlayer() {\n return Promise.resolve({\n method: 'exitPlayer',\n result: true,\n value: true,\n });\n }\n checkSize(options) {\n const playerSize = {\n width: options.width ? options.width : 320,\n height: options.height ? options.height : 180,\n };\n const ratio = playerSize.height / playerSize.width;\n if (playerSize.width > window.innerWidth) {\n playerSize.width = window.innerWidth;\n playerSize.height = Math.floor(playerSize.width * ratio);\n }\n if (playerSize.height > window.innerHeight) {\n playerSize.height = window.innerHeight;\n playerSize.width = Math.floor(playerSize.height / ratio);\n }\n return playerSize;\n }\n async _initializeVideoPlayer(url, playerId, mode, rate, exitOnEnd, loopOnEnd, componentTag, playerSize) {\n const videoURL = url ? (url.indexOf('%2F') == -1 ? encodeURI(url) : url) : null;\n if (videoURL === null)\n return Promise.resolve(false);\n this.videoContainer = await this._getContainerElement(playerId, componentTag);\n if (this.videoContainer === null)\n return Promise.resolve({\n method: 'initPlayer',\n result: false,\n message: 'componentTag or divContainerElement must be provided',\n });\n if (mode === 'embedded' && playerSize == null)\n return Promise.resolve({\n method: 'initPlayer',\n result: false,\n message: 'playerSize must be defined in embedded mode',\n });\n if (mode === 'embedded') {\n this._players[playerId] = new VideoPlayer('embedded', videoURL, playerId, rate, exitOnEnd, loopOnEnd, this.videoContainer, 2, playerSize.width, playerSize.height);\n await this._players[playerId].initialize();\n }\n else if (mode === 'fullscreen') {\n this._players['fullscreen'] = new VideoPlayer('fullscreen', videoURL, 'fullscreen', rate, exitOnEnd, loopOnEnd, this.videoContainer, 99995);\n await this._players['fullscreen'].initialize();\n }\n else {\n return Promise.resolve({\n method: 'initPlayer',\n result: false,\n message: 'mode not supported',\n });\n }\n return Promise.resolve({ method: 'initPlayer', result: true, value: true });\n }\n async _getContainerElement(playerId, componentTag) {\n const videoContainer = document.createElement('div');\n videoContainer.id = `vc_${playerId}`;\n if (componentTag != null && componentTag.length > 0) {\n const cmpTagEl = document.querySelector(`${componentTag}`);\n if (cmpTagEl === null)\n return Promise.resolve(null);\n let container = null;\n const shadowRoot = cmpTagEl.shadowRoot ? cmpTagEl.shadowRoot : null;\n if (shadowRoot != null) {\n container = shadowRoot.querySelector(`[id='${playerId}']`);\n }\n else {\n container = cmpTagEl.querySelector(`[id='${playerId}']`);\n }\n if (container != null)\n container.appendChild(videoContainer);\n return Promise.resolve(videoContainer);\n }\n else {\n return Promise.resolve(null);\n }\n }\n handlePlayerPlay(data) {\n this.notifyListeners('jeepCapVideoPlayerPlay', data);\n }\n handlePlayerPause(data) {\n this.notifyListeners('jeepCapVideoPlayerPause', data);\n }\n handlePlayerEnded(data) {\n var _a;\n if (this.mode === 'fullscreen') {\n (_a = this.videoContainer) === null || _a === void 0 ? void 0 : _a.remove();\n }\n this.removeListeners();\n this.notifyListeners('jeepCapVideoPlayerEnded', data);\n }\n handlePlayerExit() {\n var _a;\n if (this.mode === 'fullscreen') {\n (_a = this.videoContainer) === null || _a === void 0 ? void 0 : _a.remove();\n }\n const retData = { dismiss: true };\n this.removeListeners();\n this.notifyListeners('jeepCapVideoPlayerExit', retData);\n }\n handlePlayerReady(data) {\n this.notifyListeners('jeepCapVideoPlayerReady', data);\n }\n addListeners() {\n document.addEventListener('videoPlayerPlay', (ev) => {\n this.handlePlayerPlay(ev.detail);\n }, false);\n document.addEventListener('videoPlayerPause', (ev) => {\n this.handlePlayerPause(ev.detail);\n }, false);\n document.addEventListener('videoPlayerEnded', (ev) => {\n this.handlePlayerEnded(ev.detail);\n }, false);\n document.addEventListener('videoPlayerReady', (ev) => {\n this.handlePlayerReady(ev.detail);\n }, false);\n document.addEventListener('videoPlayerExit', () => {\n this.handlePlayerExit();\n }, false);\n }\n removeListeners() {\n document.removeEventListener('videoPlayerPlay', (ev) => {\n this.handlePlayerPlay(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerPause', (ev) => {\n this.handlePlayerPause(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerEnded', (ev) => {\n this.handlePlayerEnded(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerReady', (ev) => {\n this.handlePlayerReady(ev.detail);\n }, false);\n document.removeEventListener('videoPlayerExit', () => {\n this.handlePlayerExit();\n }, false);\n }\n async getPluginVersion() {\n return { version: 'web' };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["VideoPlayer","registerPlugin","WebPlugin"],"mappings":"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"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import AVKit
|
|
3
|
+
import AVFoundation
|
|
4
|
+
import UIKit
|
|
5
|
+
|
|
6
|
+
class FullscreenVideoPlayer: NSObject {
|
|
7
|
+
private var player: AVPlayer?
|
|
8
|
+
private var playerViewController: AVPlayerViewController?
|
|
9
|
+
private var playerItem: AVPlayerItem?
|
|
10
|
+
private var playerId: String
|
|
11
|
+
private var videoUrl: String
|
|
12
|
+
private var exitOnEnd: Bool
|
|
13
|
+
private var loopOnEnd: Bool
|
|
14
|
+
private var pipEnabled: Bool
|
|
15
|
+
private var showControls: Bool
|
|
16
|
+
private var rate: Float
|
|
17
|
+
private var timeObserver: Any?
|
|
18
|
+
private var onPlay: (() -> Void)?
|
|
19
|
+
private var onPause: (() -> Void)?
|
|
20
|
+
private var onReady: (() -> Void)?
|
|
21
|
+
private var onEnd: (() -> Void)?
|
|
22
|
+
private var onExit: ((Double) -> Void)?
|
|
23
|
+
|
|
24
|
+
init(playerId: String, url: String, rate: Float, exitOnEnd: Bool, loopOnEnd: Bool, pipEnabled: Bool, showControls: Bool) {
|
|
25
|
+
self.playerId = playerId
|
|
26
|
+
self.videoUrl = url
|
|
27
|
+
self.rate = rate
|
|
28
|
+
self.exitOnEnd = exitOnEnd
|
|
29
|
+
self.loopOnEnd = loopOnEnd
|
|
30
|
+
self.pipEnabled = pipEnabled
|
|
31
|
+
self.showControls = showControls
|
|
32
|
+
super.init()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
func setupPlayer() {
|
|
36
|
+
guard let url = URL(string: videoUrl) else {
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Create player item with asset
|
|
41
|
+
let asset = AVAsset(url: url)
|
|
42
|
+
playerItem = AVPlayerItem(asset: asset)
|
|
43
|
+
|
|
44
|
+
// Create player
|
|
45
|
+
player = AVPlayer(playerItem: playerItem)
|
|
46
|
+
player?.rate = rate
|
|
47
|
+
|
|
48
|
+
// Create player view controller
|
|
49
|
+
playerViewController = AVPlayerViewController()
|
|
50
|
+
playerViewController?.player = player
|
|
51
|
+
playerViewController?.showsPlaybackControls = showControls
|
|
52
|
+
|
|
53
|
+
// Picture in Picture support
|
|
54
|
+
if #available(iOS 14.2, *) {
|
|
55
|
+
playerViewController?.allowsPictureInPicturePlayback = pipEnabled
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Setup observers
|
|
59
|
+
setupObservers()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private func setupObservers() {
|
|
63
|
+
guard let player = player else { return }
|
|
64
|
+
|
|
65
|
+
// Observe player status
|
|
66
|
+
playerItem?.addObserver(self, forKeyPath: "status", options: [.new], context: nil)
|
|
67
|
+
|
|
68
|
+
// Observe playback end
|
|
69
|
+
NotificationCenter.default.addObserver(
|
|
70
|
+
self,
|
|
71
|
+
selector: #selector(playerDidFinishPlaying),
|
|
72
|
+
name: .AVPlayerItemDidPlayToEndTime,
|
|
73
|
+
object: playerItem
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
// Observe time updates
|
|
77
|
+
let interval = CMTime(seconds: 0.5, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
|
|
78
|
+
timeObserver = player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { _ in
|
|
79
|
+
// Can be used for progress updates
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Observe rate changes (play/pause)
|
|
83
|
+
player.addObserver(self, forKeyPath: "rate", options: [.new, .old], context: nil)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
|
|
87
|
+
if keyPath == "status" {
|
|
88
|
+
if let item = object as? AVPlayerItem {
|
|
89
|
+
if item.status == .readyToPlay {
|
|
90
|
+
onReady?()
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} else if keyPath == "rate" {
|
|
94
|
+
if let newRate = change?[.newKey] as? Float,
|
|
95
|
+
let oldRate = change?[.oldKey] as? Float {
|
|
96
|
+
if newRate > 0 && oldRate == 0 {
|
|
97
|
+
onPlay?()
|
|
98
|
+
} else if newRate == 0 && oldRate > 0 {
|
|
99
|
+
onPause?()
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@objc private func playerDidFinishPlaying() {
|
|
106
|
+
if loopOnEnd {
|
|
107
|
+
player?.seek(to: .zero)
|
|
108
|
+
player?.play()
|
|
109
|
+
} else if exitOnEnd {
|
|
110
|
+
onEnd?()
|
|
111
|
+
dismiss()
|
|
112
|
+
} else {
|
|
113
|
+
onEnd?()
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
func present(on viewController: UIViewController, completion: @escaping () -> Void) {
|
|
118
|
+
guard let playerVC = playerViewController else {
|
|
119
|
+
completion()
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
viewController.present(playerVC, animated: true) {
|
|
124
|
+
self.player?.play()
|
|
125
|
+
completion()
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
func dismiss() {
|
|
130
|
+
let currentTime = getCurrentTime()
|
|
131
|
+
playerViewController?.dismiss(animated: true) { [weak self] in
|
|
132
|
+
self?.cleanup()
|
|
133
|
+
self?.onExit?(currentTime)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private func cleanup() {
|
|
138
|
+
if let observer = timeObserver {
|
|
139
|
+
player?.removeObserver(self, forKeyPath: "rate")
|
|
140
|
+
player?.removeTimeObserver(observer)
|
|
141
|
+
timeObserver = nil
|
|
142
|
+
}
|
|
143
|
+
playerItem?.removeObserver(self, forKeyPath: "status")
|
|
144
|
+
NotificationCenter.default.removeObserver(self)
|
|
145
|
+
player?.pause()
|
|
146
|
+
player = nil
|
|
147
|
+
playerItem = nil
|
|
148
|
+
playerViewController = nil
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// MARK: - Playback Control
|
|
152
|
+
|
|
153
|
+
func play() {
|
|
154
|
+
player?.play()
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
func pause() {
|
|
158
|
+
player?.pause()
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
func isPlaying() -> Bool {
|
|
162
|
+
guard let player = player else { return false }
|
|
163
|
+
return player.rate > 0
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
func getDuration() -> Double {
|
|
167
|
+
guard let duration = playerItem?.duration else { return 0 }
|
|
168
|
+
return CMTimeGetSeconds(duration)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
func getCurrentTime() -> Double {
|
|
172
|
+
guard let currentTime = player?.currentTime() else { return 0 }
|
|
173
|
+
return CMTimeGetSeconds(currentTime)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
func setCurrentTime(_ time: Double) {
|
|
177
|
+
let cmTime = CMTime(seconds: time, preferredTimescale: 600)
|
|
178
|
+
player?.seek(to: cmTime)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
func getVolume() -> Float {
|
|
182
|
+
return player?.volume ?? 0
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
func setVolume(_ volume: Float) {
|
|
186
|
+
player?.volume = volume
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
func getMuted() -> Bool {
|
|
190
|
+
return player?.isMuted ?? false
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
func setMuted(_ muted: Bool) {
|
|
194
|
+
player?.isMuted = muted
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
func getRate() -> Float {
|
|
198
|
+
return player?.rate ?? 0
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
func setRate(_ rate: Float) {
|
|
202
|
+
player?.rate = rate
|
|
203
|
+
self.rate = rate
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
func showController() {
|
|
207
|
+
playerViewController?.showsPlaybackControls = true
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
func isControllerVisible() -> Bool {
|
|
211
|
+
return playerViewController?.showsPlaybackControls ?? false
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// MARK: - Callbacks
|
|
215
|
+
|
|
216
|
+
func setOnPlay(_ callback: @escaping () -> Void) {
|
|
217
|
+
self.onPlay = callback
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
func setOnPause(_ callback: @escaping () -> Void) {
|
|
221
|
+
self.onPause = callback
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
func setOnReady(_ callback: @escaping () -> Void) {
|
|
225
|
+
self.onReady = callback
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
func setOnEnd(_ callback: @escaping () -> Void) {
|
|
229
|
+
self.onEnd = callback
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
func setOnExit(_ callback: @escaping (Double) -> Void) {
|
|
233
|
+
self.onExit = callback
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
deinit {
|
|
237
|
+
cleanup()
|
|
238
|
+
}
|
|
239
|
+
}
|