AutorÃa | Ultima modificación | Ver Log |
{"version":3,"file":"videojs-ogvjs-lazy.min.js","sources":["../src/videojs-ogvjs-lazy.js"],"sourcesContent":["/**\n * videojs-ogvjs\n * @version 1.0.0\n * @copyright 2023 Huong Nguyen <huongnv13@gmail.com>\n * @license MIT\n */\ndefine(['media_videojs/video-lazy', './local/ogv/ogv'], (function (videojs, ogv) { 'use strict';\n\n\t// We can access public classes either as ogv.OGVPlayer or just OGVPlayer.\n\t// But ogv.OGVPlayer will make the lint tools happier.\n\tconst OGVCompat = ogv.OGVCompat;\n\tconst OGVLoader = ogv.OGVLoader;\n\tconst OGVPlayer = ogv.OGVPlayer;\n\tconst Tech = videojs.getComponent('Tech');\n\n\tconst androidOS = 'Android';\n\tconst iPhoneOS = 'iPhoneOS';\n\tconst iPadOS = 'iPadOS';\n\tconst otherOS = 'Other';\n\n\t/**\n\t * Object.defineProperty but \"lazy\", which means that the value is only set after\n\t * it retrieved the first time, rather than being set right away.\n\t *\n\t * @param {Object} obj the object to set the property on.\n\t * @param {string} key the key for the property
to set.\n\t * @param {Function} getValue the function used to get the value when it is needed.\n\t * @param {boolean} setter whether a setter should be allowed or not.\n\t */\n\tconst defineLazyProperty = (obj, key, getValue, setter = true) => {\n\t\tconst set = (value) => {\n\t\t\tObject.defineProperty(obj, key, {value, enumerable: true, writable: true});\n\t\t};\n\n\t\tconst options = {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget() {\n\t\t\t\tconst value = getValue();\n\n\t\t\t\tset(value);\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\n\t\tif (setter) {\n\t\t\toptions.set = set;\n\t\t}\n\n\t\treturn Object.defineProperty(obj, key, options);\n\t};\n\n\t/**\n\t * Get the device's OS.\n\t *\n\t * @return {string} Device's OS.\n\t */\n\tconst getDeviceOS = () => {\n\t\t/* global navigator */\n\t\tconst ua = navigator.userAgent;\n\n\t\tif (/android/i.test(ua)) {\n\t\t\treturn androidOS;\n\t\t} else if (/iPad|iPhone|iPod/.test(ua)) {\n\t\t\treturn iPhoneOS;\n\t\t} else if ((navigator.platform ===
'MacIntel' && navigator.maxTouchPoints > 1)) {\n\t\t\treturn iPadOS;\n\t\t}\n\t\treturn otherOS;\n\t};\n\n\t/**\n\t * OgvJS Media Controller - Wrapper for ogv.js Media API\n\t *\n\t * @mixes Tech~SourceHandlerAdditions\n\t * @extends Tech\n\t */\n\tclass OgvJS extends Tech {\n\n\t\t/**\n\t\t * Create an instance of this Tech.\n\t\t *\n\t\t * @param {Object} [options] The key/value store of player options.\n\t\t * @param {Component~ReadyCallback} ready Callback function to call when the `OgvJS` Tech is ready.\n\t\t */\n\t\tconstructor(options, ready) {\n\t\t\tsuper(options, ready);\n\n\t\t\tthis.el_.src = options.source.src;\n\t\t\tOgvJS.setIfAvailable(this.el_, 'autoplay', options.autoplay);\n\t\t\tOgvJS.setIfAvailable(this.el_, 'loop', options.loop);\n\t\t\tOgvJS.setIfAvailable(this.el_, 'poster', options.poster);\n\t\t\tOgvJS.setIfAvailable(this.el_, 'preload', options.preload);\n\n\t\t\tthis.on('loadedmetadata', () => {\n\t\t\t\tif (getDeviceOS() === iPhoneOS) {\n\t\t\t\t\t// iPhoneOS add some inline sty
les to the canvas, we need to remove it.\n\t\t\t\t\tconst canvas = this.el_.getElementsByTagName('canvas')[0];\n\n\t\t\t\t\tcanvas.style.removeProperty('width');\n\t\t\t\t\tcanvas.style.removeProperty('margin');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.triggerReady();\n\t\t}\n\n\t\t/**\n\t\t * Create the 'OgvJS' Tech's DOM element.\n\t\t *\n\t\t * @return {Element} The element that gets created.\n\t\t */\n\t\tcreateEl() {\n\t\t\tconst options = this.options_;\n\n\t\t\tif (options.base) {\n\t\t\t\tOGVLoader.base = options.base;\n\t\t\t} else {\n\t\t\t\tthrow new Error('Please specify the base for the ogv.js library');\n\t\t\t}\n\n\t\t\tconst el = new OGVPlayer(options);\n\n\t\t\tel.className += ' vjs-tech';\n\t\t\toptions.tag = el;\n\n\t\t\treturn el;\n\t\t}\n\n\t\t/**\n\t\t * Start playback\n\t\t *\n\t\t * @method play\n\t\t */\n\t\tplay() {\n\t\t\tthis.el_.play();\n\t\t}\n\n\t\t/**\n\t\t * Get the current playback speed.\n\t\t *\n\t\t * @return {number}\n\t\t * @method playbackRate\n\t\t */\n\t\tplaybackRate() {
\n\t\t\treturn this.el_.playbackRate || 1;\n\t\t}\n\n\t\t/**\n\t\t * Set the playback speed.\n\t\t *\n\t\t * @param {number} val Speed for the player to play.\n\t\t * @method setPlaybackRate\n\t\t */\n\t\tsetPlaybackRate(val) {\n\t\t\tif (this.el_.hasOwnProperty('playbackRate')) {\n\t\t\t\tthis.el_.playbackRate = val;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a TimeRanges object that represents the ranges of the media resource that the user agent has played.\n\t\t *\n\t\t * @return {TimeRangeObject} the range of points on the media timeline that has been reached through normal playback\n\t\t */\n\t\tplayed() {\n\t\t\treturn this.el_.played;\n\t\t}\n\n\t\t/**\n\t\t * Pause playback\n\t\t *\n\t\t * @method pause\n\t\t */\n\t\tpause() {\n\t\t\tthis.el_.pause();\n\t\t}\n\n\t\t/**\n\t\t * Is the player paused or not.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @method paused\n\t\t */\n\t\tpaused() {\n\t\t\treturn this.el_.paused;\n\t\t}\n\n\t\t/**\n\t\t * Get current playing time.\n\t\t *\n\t\t * @return {number}\
n\t\t * @method currentTime\n\t\t */\n\t\tcurrentTime() {\n\t\t\treturn this.el_.currentTime;\n\t\t}\n\n\t\t/**\n\t\t * Set current playing time.\n\t\t *\n\t\t * @param {number} seconds Current time of audio/video.\n\t\t * @method setCurrentTime\n\t\t */\n\t\tsetCurrentTime(seconds) {\n\t\t\ttry {\n\t\t\t\tthis.el_.currentTime = seconds;\n\t\t\t} catch (e) {\n\t\t\t\tvideojs.log(e, 'Media is not ready. (Video.JS)');\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Get media's duration.\n\t\t *\n\t\t * @return {number}\n\t\t * @method duration\n\t\t */\n\t\tduration() {\n\t\t\tif (this.el_.duration && this.el_.duration !== Infinity) {\n\t\t\t\treturn this.el_.duration;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\t/**\n\t\t * Get a TimeRange object that represents the intersection\n\t\t * of the time ranges for which the user agent has all\n\t\t * relevant media.\n\t\t *\n\t\t * @return {TimeRangeObject}\n\t\t * @method buffered\n\t\t */\n\t\tbuffered() {\n\t\t\treturn this.el_.buffered;\n\t\t}\n\n\t\t/**\n\t\t * Get current v
olume level.\n\t\t *\n\t\t * @return {number}\n\t\t * @method volume\n\t\t */\n\t\tvolume() {\n\t\t\treturn this.el_.hasOwnProperty('volume') ? this.el_.volume : 1;\n\t\t}\n\n\t\t/**\n\t\t * Set current playing volume level.\n\t\t *\n\t\t * @param {number} percentAsDecimal Volume percent as a decimal.\n\t\t * @method setVolume\n\t\t */\n\t\tsetVolume(percentAsDecimal) {\n\t\t\t// Apple does not allow iOS and iPadOS devices to set the volume on UI.\n\t\t\tif (getDeviceOS() !== iPhoneOS && getDeviceOS() !== iPadOS && this.el_.hasOwnProperty('volume')) {\n\t\t\t\tthis.el_.volume = percentAsDecimal;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Is the player muted or not.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @method muted\n\t\t */\n\t\tmuted() {\n\t\t\treturn this.el_.muted;\n\t\t}\n\n\t\t/**\n\t\t * Mute the player.\n\t\t *\n\t\t * @param {boolean} muted True to mute the player.\n\t\t */\n\t\tsetMuted(muted) {\n\t\t\tthis.el_.muted = !!muted;\n\t\t}\n\n\t\t/**\n\t\t * Is the player muted by default or not.\n\t\t *\n\
t\t * @return {boolean}\n\t\t * @method defaultMuted\n\t\t */\n\t\tdefaultMuted() {\n\t\t\treturn this.el_.defaultMuted || false;\n\t\t}\n\n\t\t/**\n\t\t * Get the player width.\n\t\t *\n\t\t * @return {number}\n\t\t * @method width\n\t\t */\n\t\twidth() {\n\t\t\treturn this.el_.offsetWidth;\n\t\t}\n\n\t\t/**\n\t\t * Get the player height.\n\t\t *\n\t\t * @return {number}\n\t\t * @method height\n\t\t */\n\t\theight() {\n\t\t\treturn this.el_.offsetHeight;\n\t\t}\n\n\t\t/**\n\t\t * Get the video width.\n\t\t *\n\t\t * @return {number}\n\t\t * @method videoWidth\n\t\t */\n\t\tvideoWidth() {\n\t\t\treturn this.el_.videoWidth;\n\t\t}\n\n\t\t/**\n\t\t * Get the video height.\n\t\t *\n\t\t * @return {number}\n\t\t * @method videoHeight\n\t\t */\n\t\tvideoHeight() {\n\t\t\treturn this.el_.videoHeight;\n\t\t}\n\n\t\t/**\n\t\t * Get/set media source.\n\t\t *\n\t\t * @param {Object=} src Source object\n\t\t * @return {Object}\n\t\t * @method src\n\t\t */\n\t\tsrc(src) {\n\t\t\tif (typeof src === 'undefined') {\n\t\t\t
\treturn this.el_.src;\n\t\t\t}\n\t\t\tthis.el_.src = src;\n\t\t}\n\n\t\t/**\n\t\t * Load the media into the player.\n\t\t *\n\t\t * @method load\n\t\t */\n\t\tload() {\n\t\t\tthis.el_.load();\n\t\t}\n\n\t\t/**\n\t\t * Get current media source.\n\t\t *\n\t\t * @return {Object}\n\t\t * @method currentSrc\n\t\t */\n\t\tcurrentSrc() {\n\t\t\tif (this.currentSource_) {\n\t\t\t\treturn this.currentSource_.src;\n\t\t\t}\n\t\t\treturn this.el_.currentSrc;\n\t\t}\n\n\t\t/**\n\t\t * Get media poster URL.\n\t\t *\n\t\t * @return {string}\n\t\t * @method poster\n\t\t */\n\t\tposter() {\n\t\t\treturn this.el_.poster;\n\t\t}\n\n\t\t/**\n\t\t * Set media poster URL.\n\t\t *\n\t\t * @param {string} url the poster image's url.\n\t\t * @method\n\t\t */\n\t\tsetPoster(url) {\n\t\t\tthis.el_.poster = url;\n\t\t}\n\n\t\t/**\n\t\t * Is the media preloaded or not.\n\t\t *\n\t\t * @return {string}\n\t\t * @method preload\n\t\t */\n\t\tpreload() {\n\t\t\treturn this.el_.preload || 'none';\n\t\t}\n\n\t\t/**\n\t\t * Set the media pre
load method.\n\t\t *\n\t\t * @param {string} val Value for preload attribute.\n\t\t * @method setPreload\n\t\t */\n\t\tsetPreload(val) {\n\t\t\tif (this.el_.hasOwnProperty('preload')) {\n\t\t\t\tthis.el_.preload = val;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Is the media auto-played or not.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @method autoplay\n\t\t */\n\t\tautoplay() {\n\t\t\treturn this.el_.autoplay || false;\n\t\t}\n\n\t\t/**\n\t\t * Set media autoplay method.\n\t\t *\n\t\t * @param {boolean} val Value for autoplay attribute.\n\t\t * @method setAutoplay\n\t\t */\n\t\tsetAutoplay(val) {\n\t\t\tif (this.el_.hasOwnProperty('autoplay')) {\n\t\t\t\tthis.el_.autoplay = !!val;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Does the media has controls or not.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @method controls\n\t\t */\n\t\tcontrols() {\n\t\t\treturn this.el_.controls || false;\n\t\t}\n\n\t\t/**\n\t\t * Set the media controls method.\n\t\t *\n\t\t * @param {boolean} val Value for controls attribute.\n\t\t * @method se
tControls\n\t\t */\n\t\tsetControls(val) {\n\t\t\tif (this.el_.hasOwnProperty('controls')) {\n\t\t\t\tthis.el_.controls = !!val;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Is the media looped or not.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @method loop\n\t\t */\n\t\tloop() {\n\t\t\treturn this.el_.loop || false;\n\t\t}\n\n\t\t/**\n\t\t * Set the media loop method.\n\t\t *\n\t\t * @param {boolean} val Value for loop attribute.\n\t\t * @method setLoop\n\t\t */\n\t\tsetLoop(val) {\n\t\t\tif (this.el_.hasOwnProperty('loop')) {\n\t\t\t\tthis.el_.loop = !!val;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Get a TimeRanges object that represents the\n\t\t * ranges of the media resource to which it is possible\n\t\t * for the user agent to seek.\n\t\t *\n\t\t * @return {TimeRangeObject}\n\t\t * @method seekable\n\t\t */\n\t\tseekable() {\n\t\t\treturn this.el_.seekable;\n\t\t}\n\n\t\t/**\n\t\t * Is player in the \"seeking\" state or not.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @method seeking\n\t\t */\n\t\tseeking() {\n\t\t\tretur
n this.el_.seeking;\n\t\t}\n\n\t\t/**\n\t\t * Is the media ended or not.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @method ended\n\t\t */\n\t\tended() {\n\t\t\treturn this.el_.ended;\n\t\t}\n\n\t\t/**\n\t\t * Get the current state of network activity\n\t\t * NETWORK_EMPTY (numeric value 0)\n\t\t * NETWORK_IDLE (numeric value 1)\n\t\t * NETWORK_LOADING (numeric value 2)\n\t\t * NETWORK_NO_SOURCE (numeric value 3)\n\t\t *\n\t\t * @return {number}\n\t\t * @method networkState\n\t\t */\n\t\tnetworkState() {\n\t\t\treturn this.el_.networkState;\n\t\t}\n\n\t\t/**\n\t\t * Get the current state of the player.\n\t\t * HAVE_NOTHING (numeric value 0)\n\t\t * HAVE_METADATA (numeric value 1)\n\t\t * HAVE_CURRENT_DATA (numeric value 2)\n\t\t * HAVE_FUTURE_DATA (numeric value 3)\n\t\t * HAVE_ENOUGH_DATA (numeric value 4)\n\t\t *\n\t\t * @return {number}\n\t\t * @method readyState\n\t\t */\n\t\treadyState() {\n\t\t\treturn this.el_.readyState;\n\t\t}\n\n\t\t/**\n\t\t * Does the player support native fullscreen mode or not.
(Mobile devices)\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsupportsFullScreen() {\n\t\t\t// iOS devices have some problem with HTML5 fullscreen api so we need to fallback to fullWindow mode.\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * Get media player error.\n\t\t *\n\t\t * @return {string}\n\t\t * @method error\n\t\t */\n\t\terror() {\n\t\t\treturn this.el_.error;\n\t\t}\n\n\t}\n\n\t/**\n\t * List of available events of the media player.\n\t *\n\t * @private\n\t * @type {Array}\n\t */\n\tOgvJS.Events = [\n\t\t'loadstart',\n\t\t'suspend',\n\t\t'abort',\n\t\t'error',\n\t\t'emptied',\n\t\t'stalled',\n\t\t'loadedmetadata',\n\t\t'loadeddata',\n\t\t'canplay',\n\t\t'canplaythrough',\n\t\t'playing',\n\t\t'waiting',\n\t\t'seeking',\n\t\t'seeked',\n\t\t'ended',\n\t\t'durationchange',\n\t\t'timeupdate',\n\t\t'progress',\n\t\t'play',\n\t\t'pause',\n\t\t'ratechange',\n\t\t'resize',\n\t\t'volumechange'\n\t];\n\n\t/**\n\t * Set the value for the player is it has that property.\n\t *\n\t * @param {Element} el\n\t
* @param {string} name\n\t * @param value\n\t */\n\tOgvJS.setIfAvailable = (el, name, value) => {\n\t\tif (el.hasOwnProperty(name)) {\n\t\t\tel[name] = value;\n\t\t}\n\t};\n\n\t/**\n\t * Check if browser/device is supported by Ogv.JS.\n\t *\n\t * @return {boolean}\n\t */\n\tOgvJS.isSupported = () => {\n\t\treturn OGVCompat.supported('OGVPlayer');\n\t};\n\n\t/**\n\t * Check if the tech can support the given type.\n\t *\n\t * @param {string} type The mimetype to check\n\t * @return {string} 'probably', 'maybe', or '' (empty string)\n\t */\n\tOgvJS.canPlayType = (type) => {\n\t\treturn (type.indexOf('/ogg') !== -1 || type.indexOf('/webm')) ? 'maybe' : '';\n\t};\n\n\t/**\n\t * Check if the tech can support the given source\n\t *\n\t * @param srcObj The source object\n\t * @return {string} The options passed to the tech\n\t */\n\tOgvJS.canPlaySource = (srcObj) => {\n\t\treturn OgvJS.canPlayType(srcObj.type);\n\t};\n\n\t/**\n\t * Check if the volume can be changed in this browser/device.\n\t * Volume cannot be cha
nged in a lot of mobile devices.\n\t * Specifically, it can't be changed on iOS and iPadOS.\n\t *\n\t * @return {boolean} True if volume can be controlled.\n\t */\n\tOgvJS.canControlVolume = () => {\n\t\tif (getDeviceOS() === iPhoneOS || getDeviceOS() === iPadOS) {\n\t\t\treturn false;\n\t\t}\n\t\tconst p = new OGVPlayer();\n\n\t\treturn p.hasOwnProperty('volume');\n\t};\n\n\t/**\n\t * Check if the volume can be muted in this browser/device.\n\t *\n\t * @return {boolean} True if volume can be muted.\n\t */\n\tOgvJS.canMuteVolume = () => {\n\t\treturn true;\n\t};\n\n\t/**\n\t * Check if the playback rate can be changed in this browser/device.\n\t *\n\t * @return {boolean} True if playback rate can be controlled.\n\t */\n\tOgvJS.canControlPlaybackRate = () => {\n\t\treturn true;\n\t};\n\n\t/**\n\t * Check to see if native 'TextTracks' are supported by this browser/device.\n\t *\n\t * @return {boolean} True if native 'TextTracks' are supported.\n\t */\n\tOgvJS.supportsNativeTextTracks = () => {\n\t\treturn fals
e;\n\t};\n\n\t/**\n\t * Check if the fullscreen resize is supported by this browser/device.\n\t *\n\t * @return {boolean} True if the fullscreen resize is supported.\n\t */\n\tOgvJS.supportsFullscreenResize = () => {\n\t\treturn true;\n\t};\n\n\t/**\n\t * Check if the progress events is supported by this browser/device.\n\t *\n\t * @return {boolean} True if the progress events is supported.\n\t */\n\tOgvJS.supportsProgressEvents = () => {\n\t\treturn true;\n\t};\n\n\t/**\n\t * Check if the time update events is supported by this browser/device.\n\t *\n\t * @return {boolean} True if the time update events is supported.\n\t */\n\tOgvJS.supportsTimeupdateEvents = () => {\n\t\treturn true;\n\t};\n\n\t/**\n\t * Boolean indicating whether the 'OgvJS' tech supports volume control.\n\t *\n\t * @type {boolean}\n\t * @default {@link OgvJS.canControlVolume}\n\t */\n\t/**\n\t * Boolean indicating whether the 'OgvJS' tech supports muting volume.\n\t *\n\t * @type {boolean}\n\t * @default {@link OgvJS.canMuteVolume}\n\t *
/\n\t/**\n\t * Boolean indicating whether the 'OgvJS' tech supports changing the speed at which the media plays.\n\t * Examples:\n\t * - Set player to play 2x (twice) as fast.\n\t * - Set player to play 0.5x (half) as fast.\n\t *\n\t * @type {boolean}\n\t * @default {@link OgvJS.canControlPlaybackRate}\n\t */\n\t/**\n\t * Boolean indicating whether the 'OgvJS' tech currently supports native 'TextTracks'.\n\t *\n\t * @type {boolean}\n\t * @default {@link OgvJS.supportsNativeTextTracks}\n\t */\n\t/**\n\t * Boolean indicating whether the 'OgvJS' tech currently supports fullscreen resize.\n\t *\n\t * @type {boolean}\n\t * @default {@link OgvJS.supportsFullscreenResize}\n\t */\n\t/**\n\t * Boolean indicating whether the 'OgvJS' tech currently supports progress events.\n\t *\n\t * @type {boolean}\n\t * @default {@link OgvJS.supportsProgressEvents}\n\t */\n\t/**\n\t * Boolean indicating whether the 'OgvJS' tech currently supports time update events.\n\t *\n\t * @type {boolean}\n\t * @default {@link OgvJS.suppor
tsTimeupdateEvents}\n\t */\n\t[\n\t\t['featuresVolumeControl', 'canControlVolume'],\n\t\t['featuresMuteControl', 'canMuteVolume'],\n\t\t['featuresPlaybackRate', 'canControlPlaybackRate'],\n\t\t['featuresNativeTextTracks', 'supportsNativeTextTracks'],\n\t\t['featuresFullscreenResize', 'supportsFullscreenResize'],\n\t\t['featuresProgressEvents', 'supportsProgressEvents'],\n\t\t['featuresTimeupdateEvents', 'supportsTimeupdateEvents']\n\t].forEach(([key, fn]) => {\n\t\tdefineLazyProperty(OgvJS.prototype, key, () => OgvJS[fn](), true);\n\t});\n\n\tTech.registerTech('OgvJS', OgvJS);\n\n\treturn OgvJS;\n\n}));\n"],"names":["define","videojs","ogv","OGVCompat","OGVLoader","OGVPlayer","Tech","getComponent","getDeviceOS","ua","navigator","userAgent","test","platform","maxTouchPoints","OgvJS","constructor","options","ready","el_","src","source","setIfAvailable","this","autoplay","loop","poster","preload","on","canvas","getElementsByTagName","style","removeProperty","triggerReady","createEl","options_","base","Error","e
l","className","tag","play","playbackRate","setPlaybackRate","val","hasOwnProperty","played","pause","paused","currentTime","setCurrentTime","seconds","e","log","duration","Infinity","buffered","volume","setVolume","percentAsDecimal","muted","setMuted","defaultMuted","width","offsetWidth","height","offsetHeight","videoWidth","videoHeight","load","currentSrc","currentSource_","setPoster","url","setPreload","setAutoplay","controls","setControls","setLoop","seekable","seeking","ended","networkState","readyState","supportsFullScreen","error","Events","name","value","isSupported","supported","canPlayType","type","indexOf","canPlaySource","srcObj","canControlVolume","canMuteVolume","canControlPlaybackRate","supportsNativeTextTracks","supportsFullscreenResize","supportsProgressEvents","supportsTimeupdateEvents","forEach","_ref","key","fn","obj","getValue","set","Object","defineProperty","enumerable","writable","configurable","get","defineLazyProperty","prototype","registerTech"],"mappings":";;;;;;AAMAA,0CAAO,CAAC,2
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"}