diff --git a/CHANGELOG.md b/CHANGELOG.md index e9a0e2b2..282986ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v2.1.1](https://github.com/CookPete/react-player/compare/v2.1.0...v2.1.1) + +> 31 May 2020 + +- Correct typings for onReady [`#884`](https://github.com/CookPete/react-player/issues/884) +- Add webpackChunkName to dynamic imports [`#899`](https://github.com/CookPete/react-player/issues/899) +- Add patreon info to readme [`c4c597f`](https://github.com/CookPete/react-player/commit/c4c597f8e4c16ca3de2314fe9de45e363e3fd71b) + #### [v2.1.0](https://github.com/CookPete/react-player/compare/v2.0.1...v2.1.0) > 23 May 2020 diff --git a/dist/ReactPlayer.js.map b/dist/ReactPlayer.js.map index 883495b1..896461f0 100644 --- a/dist/ReactPlayer.js.map +++ b/dist/ReactPlayer.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ReactPlayer/webpack/bootstrap","webpack://ReactPlayer/external \"React\"","webpack://ReactPlayer/./src/utils.js","webpack://ReactPlayer/./src/patterns.js","webpack://ReactPlayer/./node_modules/prop-types/index.js","webpack://ReactPlayer/./node_modules/react-fast-compare/index.js","webpack://ReactPlayer/./node_modules/deepmerge/dist/cjs.js","webpack://ReactPlayer/./node_modules/load-script/index.js","webpack://ReactPlayer/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://ReactPlayer/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://ReactPlayer/./node_modules/memoize-one/dist/memoize-one.esm.js","webpack://ReactPlayer/./src/props.js","webpack://ReactPlayer/./src/players/index.js","webpack://ReactPlayer/./src/Player.js","webpack://ReactPlayer/./src/ReactPlayer.js","webpack://ReactPlayer/./src/Preview.js","webpack://ReactPlayer/./src/players/YouTube.js","webpack://ReactPlayer/./src/players/SoundCloud.js","webpack://ReactPlayer/./src/players/Vimeo.js","webpack://ReactPlayer/./src/players/Facebook.js","webpack://ReactPlayer/./src/players/Streamable.js","webpack://ReactPlayer/./src/players/Wistia.js","webpack://ReactPlayer/./src/players/Twitch.js","webpack://ReactPlayer/./src/players/DailyMotion.js","webpack://ReactPlayer/./src/players/Mixcloud.js","webpack://ReactPlayer/./src/players/Vidyard.js","webpack://ReactPlayer/./src/players/FilePlayer.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","0","__webpack_require__","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","oe","err","console","error","jsonpArray","window","oldJsonpFunction","slice","s","React","MATCH_START_QUERY","MATCH_END_QUERY","MATCH_START_STAMP","MATCH_NUMERIC","parseTimeParam","url","pattern","match","stamp","seconds","array","exec","count","period","parseInt","parseTimeString","test","parseStartTime","parseEndTime","randomString","Math","random","toString","substr","queryString","keys","map","join","requests","getSDK","sdkGlobal","sdkReady","isLoaded","fetchScript","loadScript","reject","onLoaded","sdk","forEach","request","previousOnReady","omit","arrays","omitKeys","concat","output","indexOf","callPlayer","method","this","player","message","constructor","displayName","warn","args","isMediaStream","MediaStream","supportsWebKitPresentationMode","video","document","createElement","notMobile","navigator","userAgent","webkitSupportsPresentationMode","webkitSetPresentationMode","MATCH_URL_YOUTUBE","MATCH_URL_SOUNDCLOUD","MATCH_URL_VIMEO","MATCH_URL_FACEBOOK","MATCH_URL_STREAMABLE","MATCH_URL_WISTIA","MATCH_URL_TWITCH_VIDEO","MATCH_URL_TWITCH_CHANNEL","MATCH_URL_DAILYMOTION","MATCH_URL_MIXCLOUD","MATCH_URL_VIDYARD","AUDIO_EXTENSIONS","VIDEO_EXTENSIONS","HLS_EXTENSIONS","DASH_EXTENSIONS","require","hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","a","b","equal","it","Array","isArray","size","entries","next","done","has","isView","RegExp","source","flags","valueOf","$$typeof","isMergeableObject","isNonNullObject","stringValue","REACT_ELEMENT_TYPE","isReactElement","isSpecial","for","cloneUnlessOtherwiseSpecified","options","clone","deepmerge","val","defaultArrayMerge","target","element","getKeys","getOwnPropertySymbols","filter","symbol","propertyIsEnumerable","getEnumerableOwnPropertySymbols","propertyIsOnObject","_","mergeObject","destination","propertyIsUnsafe","customMerge","getMergeFunction","arrayMerge","sourceIsArray","all","Error","reduce","prev","deepmerge_1","stdOnEnd","script","cb","onload","onerror","src","ieOnEnd","onreadystatechange","readyState","opts","head","getElementsByTagName","type","charset","async","attrs","attr","setAttribute","setAttributes","text","appendChild","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bool","func","number","string","any","arrayOf","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","areInputsEqual","newInputs","lastInputs","memoizeOne","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","arguments","apply","propTypes","playing","loop","controls","volume","muted","playbackRate","width","height","style","progressInterval","playsinline","pip","light","playIcon","wrapper","render","config","soundcloud","youtube","playerVars","embedOptions","onUnstarted","facebook","appId","version","playerId","dailymotion","params","vimeo","playerOptions","file","attributes","tracks","forceVideo","forceAudio","forceHLS","forceDASH","hlsOptions","hlsVersion","dashVersion","wistia","mixcloud","twitch","vidyard","onReady","onStart","onPlay","onPause","onBuffer","onBufferEnd","onEnded","onError","onDuration","onSeek","onProgress","onEnablePIP","onDisablePIP","noop","defaultProps","visual","buying","liking","download","sharing","show_comments","show_playcount","showinfo","rel","iv_load_policy","modestbranding","api","autopause","byline","portrait","title","hide_cover","canPlayFile","item","canPlay","lazyPlayer","lazy","canEnablePIP","pictureInPictureEnabled","Player","load","progress","isReady","playedSeconds","getCurrentTime","loadedSeconds","getSecondsLoaded","duration","getDuration","played","loaded","prevPlayed","prevLoaded","progressTimeout","setTimeout","progressFrequency","mounted","isLoading","setVolume","loadOnReady","play","handleDurationCheck","isPlaying","startOnPlay","setPlaybackRate","seekOnPlay","seekTo","activePlayer","loopOnEnded","clearTimeout","durationCheckTimeout","onDurationCalled","stop","disablePIP","prevProps","forceLoad","pause","enablePIP","mute","unmute","setLoop","amount","onMount","handlePlayerMount","handleReady","handlePlay","handlePause","handleEnded","handleLoaded","handleError","Component","Preview","IS_BROWSER","SUPPORTED_PROPS","UniversalSuspense","Suspense","customPlayers","ReactPlayer","showPreview","setState","getInternalPlayer","fraction","memoize","players","merge","getActivePlayer","getConfig","ref","references","nextProps","nextState","state","onClick","handleClickPreview","Wrapper","getAttributes","fallback","renderPreview","renderActivePlayer","image","fetchImage","fetch","then","response","json","thumbnail_url","replace","flexCenter","display","alignItems","justifyContent","styles","preview","backgroundImage","undefined","backgroundSize","backgroundPosition","cursor","shadow","background","borderRadius","borderStyle","borderWidth","borderColor","marginLeft","defaultPlayIcon","className","tabIndex","onKeyPress","handleKeyPress","MATCH_PLAYLIST","MATCH_USER_UPLOADS","MATCH_NOCOOKIE","parsePlaylist","listType","list","YouTube","event","PlayerState","UNSTARTED","PLAYING","PAUSED","BUFFERING","ENDED","CUED","isPlaylist","start","container","id","loadPlaylist","cueVideoById","videoId","startSeconds","endSeconds","end","YT","autoplay","origin","events","onStateChange","host","body","contains","rate","SoundCloud","iframe","SC","Widget","Events","PLAY","PLAY_PROGRESS","PAUSE","FINISH","ERROR","currentTime","currentPosition","fractionLoaded","loadedProgress","callback","encodeURIComponent","frameBorder","allow","Vimeo","ready","querySelector","on","refreshDuration","secondsLoaded","promise","overflow","SDK_URL","Facebook","FB","XFBML","parse","init","xfbml","Event","subscribe","msg","playerID","instance","getElementById","visibility","data-href","data-autoplay","data-allowfullscreen","data-controls","Streamable","playerjs","percent","scrolling","allowFullScreen","Wistia","_wq","getID","autoPlay","silentAutoPlay","controlsVisibleOnLoad","unbind","Twitch","isChannel","setChannel","setVideo","channel","READY","ONLINE","OFFLINE","addEventListener","DailyMotion","DM","apiready","seeked","video_end","durationchange","onDurationChange","waiting","bufferedTime","Mixcloud","PlayerWidget","ended","query","feed","Vidyard","addReadyListener","renderPlayer","uuid","getPlayerMetadata","meta","length_in_seconds","VidyardV4","destroyPlayer","IOS","MSStream","MATCH_DROPBOX_URL","FilePlayer","webkitPresentationMode","index","track","prevPlayer","addListeners","shouldUseAudio","removeListeners","hls","destroy","onPresentationModeChange","removeEventListener","poster","dash","reset","shouldUseHLS","Hls","loadSource","attachMedia","shouldUseDASH","dashjs","MediaPlayer","initialize","getDebug","setLogToBrowserConsole","srcObject","URL","createObjectURL","removeAttribute","requestPictureInPicture","pictureInPictureElement","exitPictureInPicture","seekable","Infinity","buffered","useHLS","useDASH","getSource","preload","renderSourceElement","renderTrack"],"mappings":"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","file":"ReactPlayer.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + chunkId + \".ReactPlayer.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonpReactPlayer\"] = window[\"webpackJsonpReactPlayer\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 9);\n","module.exports = React;","import loadScript from 'load-script'\nimport merge from 'deepmerge'\n\nconst MATCH_START_QUERY = /[?&#](?:start|t)=([0-9hms]+)/\nconst MATCH_END_QUERY = /[?&#]end=([0-9hms]+)/\nconst MATCH_START_STAMP = /(\\d+)(h|m|s)/g\nconst MATCH_NUMERIC = /^\\d+$/\n\n// Parse YouTube URL for a start time param, ie ?t=1h14m30s\n// and return the start time in seconds\nfunction parseTimeParam (url, pattern) {\n const match = url.match(pattern)\n if (match) {\n const stamp = match[1]\n if (stamp.match(MATCH_START_STAMP)) {\n return parseTimeString(stamp)\n }\n if (MATCH_NUMERIC.test(stamp)) {\n return parseInt(stamp)\n }\n }\n return undefined\n}\n\nfunction parseTimeString (stamp) {\n let seconds = 0\n let array = MATCH_START_STAMP.exec(stamp)\n while (array !== null) {\n const [, count, period] = array\n if (period === 'h') seconds += parseInt(count, 10) * 60 * 60\n if (period === 'm') seconds += parseInt(count, 10) * 60\n if (period === 's') seconds += parseInt(count, 10)\n array = MATCH_START_STAMP.exec(stamp)\n }\n return seconds\n}\n\nexport function parseStartTime (url) {\n return parseTimeParam(url, MATCH_START_QUERY)\n}\n\nexport function parseEndTime (url) {\n return parseTimeParam(url, MATCH_END_QUERY)\n}\n\n// http://stackoverflow.com/a/38622545\nexport function randomString () {\n return Math.random().toString(36).substr(2, 5)\n}\n\nexport function queryString (object) {\n return Object\n .keys(object)\n .map(key => `${key}=${object[key]}`)\n .join('&')\n}\n\n// Util function to load an external SDK\n// or return the SDK if it is already loaded\nconst requests = {}\nexport function getSDK (url, sdkGlobal, sdkReady = null, isLoaded = () => true, fetchScript = loadScript) {\n if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {\n return Promise.resolve(window[sdkGlobal])\n }\n return new Promise((resolve, reject) => {\n // If we are already loading the SDK, add the resolve and reject\n // functions to the existing array of requests\n if (requests[url]) {\n requests[url].push({ resolve, reject })\n return\n }\n requests[url] = [{ resolve, reject }]\n const onLoaded = sdk => {\n // When loaded, resolve all pending request promises\n requests[url].forEach(request => request.resolve(sdk))\n }\n if (sdkReady) {\n const previousOnReady = window[sdkReady]\n window[sdkReady] = function () {\n if (previousOnReady) previousOnReady()\n onLoaded(window[sdkGlobal])\n }\n }\n fetchScript(url, err => {\n if (err) {\n // Loading the SDK failed – reject all requests and\n // reset the array of requests for this SDK\n requests[url].forEach(request => request.reject(err))\n requests[url] = null\n } else if (!sdkReady) {\n onLoaded(window[sdkGlobal])\n }\n })\n })\n}\n\nexport function getConfig (props, defaultProps) {\n return merge(defaultProps.config, props.config)\n}\n\nexport function omit (object, ...arrays) {\n const omitKeys = [].concat(...arrays)\n const output = {}\n const keys = Object.keys(object)\n for (const key of keys) {\n if (omitKeys.indexOf(key) === -1) {\n output[key] = object[key]\n }\n }\n return output\n}\n\nexport function callPlayer (method, ...args) {\n // Util method for calling a method on this.player\n // but guard against errors and console.warn instead\n if (!this.player || !this.player[method]) {\n let message = `ReactPlayer: ${this.constructor.displayName} player could not call %c${method}%c – `\n if (!this.player) {\n message += 'The player was not available'\n } else if (!this.player[method]) {\n message += 'The method was not available'\n }\n console.warn(message, 'font-weight: bold', '')\n return null\n }\n return this.player[method](...args)\n}\n\nexport function isMediaStream (url) {\n return (\n typeof window !== 'undefined' &&\n typeof window.MediaStream !== 'undefined' &&\n url instanceof window.MediaStream\n )\n}\n\nexport function supportsWebKitPresentationMode (video = document.createElement('video')) {\n // Check if Safari supports PiP, and is not on mobile (other than iPad)\n // iPhone safari appears to \"support\" PiP through the check, however PiP does not function\n const notMobile = /iPhone|iPod/.test(navigator.userAgent) === false\n return video.webkitSupportsPresentationMode && typeof video.webkitSetPresentationMode === 'function' && notMobile\n}\n","export const MATCH_URL_YOUTUBE = /(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})|youtube\\.com\\/playlist\\?list=|youtube\\.com\\/user\\//\nexport const MATCH_URL_SOUNDCLOUD = /(?:soundcloud\\.com|snd\\.sc)\\/[^.]+$/\nexport const MATCH_URL_VIMEO = /vimeo\\.com\\/.+/\nexport const MATCH_URL_FACEBOOK = /^https?:\\/\\/(www\\.)?facebook\\.com.*\\/(video(s)?|watch|story)(\\.php?|\\/).+$/\nexport const MATCH_URL_STREAMABLE = /streamable\\.com\\/([a-z0-9]+)$/\nexport const MATCH_URL_WISTIA = /(?:wistia\\.com|wi\\.st)\\/(?:medias|embed)\\/(.*)$/\nexport const MATCH_URL_TWITCH_VIDEO = /(?:www\\.|go\\.)?twitch\\.tv\\/videos\\/(\\d+)($|\\?)/\nexport const MATCH_URL_TWITCH_CHANNEL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+)($|\\?)/\nexport const MATCH_URL_DAILYMOTION = /^(?:(?:https?):)?(?:\\/\\/)?(?:www\\.)?(?:(?:dailymotion\\.com(?:\\/embed)?\\/video)|dai\\.ly)\\/([a-zA-Z0-9]+)(?:_[\\w_-]+)?$/\nexport const MATCH_URL_MIXCLOUD = /mixcloud\\.com\\/([^/]+\\/[^/]+)/\nexport const MATCH_URL_VIDYARD = /vidyard.com\\/(?:watch\\/)?([a-zA-Z0-9-]+)/\nexport const AUDIO_EXTENSIONS = /\\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i\nexport const VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)($|\\?)/i\nexport const HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i\nexport const DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function';\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React\n for (i = length; i-- !== 0;) {\n if (keys[i] === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of a react element\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","\nmodule.exports = function load (src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0]\n var script = document.createElement('script')\n\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n opts = opts || {}\n cb = cb || function() {}\n\n script.type = opts.type || 'text/javascript'\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true\n script.src = src\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs)\n }\n\n if (opts.text) {\n script.text = '' + opts.text\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd\n onend(script, cb)\n\n // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script)\n}\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd (script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null\n cb(null, script)\n }\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null\n cb(new Error('Failed to load ' + this.src), script)\n }\n}\n\nfunction ieOnEnd (script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return\n this.onreadystatechange = null\n cb(null, script) // there is no way to catch loading errors in IE8\n }\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","function areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (newInputs[i] !== lastInputs[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import PropTypes from 'prop-types'\n\nconst { string, bool, number, array, oneOfType, shape, object, func, node } = PropTypes\n\nexport const propTypes = {\n url: oneOfType([string, array, object]),\n playing: bool,\n loop: bool,\n controls: bool,\n volume: number,\n muted: bool,\n playbackRate: number,\n width: oneOfType([string, number]),\n height: oneOfType([string, number]),\n style: object,\n progressInterval: number,\n playsinline: bool,\n pip: bool,\n light: oneOfType([bool, string]),\n playIcon: node,\n wrapper: oneOfType([\n string,\n func,\n shape({ render: func.isRequired })\n ]),\n config: shape({\n soundcloud: shape({\n options: object\n }),\n youtube: shape({\n playerVars: object,\n embedOptions: object,\n onUnstarted: func\n }),\n facebook: shape({\n appId: string,\n version: string,\n playerId: string\n }),\n dailymotion: shape({\n params: object\n }),\n vimeo: shape({\n playerOptions: object\n }),\n file: shape({\n attributes: object,\n tracks: array,\n forceVideo: bool,\n forceAudio: bool,\n forceHLS: bool,\n forceDASH: bool,\n hlsOptions: object,\n hlsVersion: string,\n dashVersion: string\n }),\n wistia: shape({\n options: object\n }),\n mixcloud: shape({\n options: object\n }),\n twitch: shape({\n options: object,\n playerId: string\n }),\n vidyard: shape({\n options: object\n })\n }),\n onReady: func,\n onStart: func,\n onPlay: func,\n onPause: func,\n onBuffer: func,\n onBufferEnd: func,\n onEnded: func,\n onError: func,\n onDuration: func,\n onSeek: func,\n onProgress: func,\n onEnablePIP: func,\n onDisablePIP: func\n}\n\nconst noop = () => {}\n\nexport const defaultProps = {\n playing: false,\n loop: false,\n controls: false,\n volume: null,\n muted: false,\n playbackRate: 1,\n width: '640px',\n height: '360px',\n style: {},\n progressInterval: 1000,\n playsinline: false,\n pip: false,\n light: false,\n wrapper: 'div',\n config: {\n soundcloud: {\n options: {\n visual: true, // Undocumented, but makes player fill container and look better\n buying: false,\n liking: false,\n download: false,\n sharing: false,\n show_comments: false,\n show_playcount: false\n }\n },\n youtube: {\n playerVars: {\n playsinline: 1,\n showinfo: 0,\n rel: 0,\n iv_load_policy: 3,\n modestbranding: 1\n },\n embedOptions: {},\n onUnstarted: noop\n },\n facebook: {\n appId: '1309697205772819',\n version: 'v3.3',\n playerId: null\n },\n dailymotion: {\n params: {\n api: 1,\n 'endscreen-enable': false\n }\n },\n vimeo: {\n playerOptions: {\n autopause: false,\n byline: false,\n portrait: false,\n title: false\n }\n },\n file: {\n attributes: {},\n tracks: [],\n forceVideo: false,\n forceAudio: false,\n forceHLS: false,\n forceDASH: false,\n hlsOptions: {},\n hlsVersion: '0.13.1',\n dashVersion: '2.9.2'\n },\n wistia: {\n options: {}\n },\n mixcloud: {\n options: {\n hide_cover: 1\n }\n },\n twitch: {\n options: {},\n playerId: null\n },\n vidyard: {\n options: {}\n }\n },\n onReady: noop,\n onStart: noop,\n onPlay: noop,\n onPause: noop,\n onBuffer: noop,\n onBufferEnd: noop,\n onEnded: noop,\n onError: noop,\n onDuration: noop,\n onSeek: noop,\n onProgress: noop,\n onEnablePIP: noop,\n onDisablePIP: noop\n}\n","import { lazy } from 'react'\nimport { isMediaStream, supportsWebKitPresentationMode } from '../utils'\n\nimport {\n MATCH_URL_YOUTUBE,\n MATCH_URL_SOUNDCLOUD,\n MATCH_URL_VIMEO,\n MATCH_URL_FACEBOOK,\n MATCH_URL_STREAMABLE,\n MATCH_URL_WISTIA,\n MATCH_URL_TWITCH_VIDEO,\n MATCH_URL_TWITCH_CHANNEL,\n MATCH_URL_DAILYMOTION,\n MATCH_URL_MIXCLOUD,\n MATCH_URL_VIDYARD,\n AUDIO_EXTENSIONS,\n VIDEO_EXTENSIONS,\n HLS_EXTENSIONS,\n DASH_EXTENSIONS\n} from '../patterns'\n\nconst canPlayFile = url => {\n if (url instanceof Array) {\n for (const item of url) {\n if (typeof item === 'string' && canPlayFile(item)) {\n return true\n }\n if (canPlayFile(item.src)) {\n return true\n }\n }\n return false\n }\n if (isMediaStream(url)) {\n return true\n }\n return (\n AUDIO_EXTENSIONS.test(url) ||\n VIDEO_EXTENSIONS.test(url) ||\n HLS_EXTENSIONS.test(url) ||\n DASH_EXTENSIONS.test(url)\n )\n}\n\nexport default [\n {\n key: 'youtube',\n canPlay: url => MATCH_URL_YOUTUBE.test(url),\n lazyPlayer: lazy(() => import('./YouTube'))\n },\n {\n key: 'soundcloud',\n canPlay: url => MATCH_URL_SOUNDCLOUD.test(url) && !AUDIO_EXTENSIONS.test(url),\n lazyPlayer: lazy(() => import('./SoundCloud'))\n },\n {\n key: 'vimeo',\n canPlay: url => MATCH_URL_VIMEO.test(url) && !VIDEO_EXTENSIONS.test(url) && !HLS_EXTENSIONS.test(url),\n lazyPlayer: lazy(() => import('./Vimeo'))\n },\n {\n key: 'facebook',\n canPlay: url => MATCH_URL_FACEBOOK.test(url),\n lazyPlayer: lazy(() => import('./Facebook'))\n },\n {\n key: 'streamable',\n canPlay: url => MATCH_URL_STREAMABLE.test(url),\n lazyPlayer: lazy(() => import('./Streamable'))\n },\n {\n key: 'wistia',\n canPlay: url => MATCH_URL_WISTIA.test(url),\n lazyPlayer: lazy(() => import('./Wistia'))\n },\n {\n key: 'twitch',\n canPlay: url => MATCH_URL_TWITCH_VIDEO.test(url) || MATCH_URL_TWITCH_CHANNEL.test(url),\n lazyPlayer: lazy(() => import('./Twitch'))\n },\n {\n key: 'dailymotion',\n canPlay: url => MATCH_URL_DAILYMOTION.test(url),\n lazyPlayer: lazy(() => import('./DailyMotion'))\n },\n {\n key: 'mixcloud',\n canPlay: url => MATCH_URL_MIXCLOUD.test(url),\n lazyPlayer: lazy(() => import('./Mixcloud'))\n },\n {\n key: 'vidyard',\n canPlay: url => MATCH_URL_VIDYARD.test(url),\n lazyPlayer: lazy(() => import('./Vidyard'))\n },\n {\n key: 'file',\n canPlay: canPlayFile,\n canEnablePIP: url => {\n return canPlayFile(url) && (document.pictureInPictureEnabled || supportsWebKitPresentationMode()) && !AUDIO_EXTENSIONS.test(url)\n },\n lazyPlayer: lazy(() => import('./FilePlayer'))\n }\n]\n","import React, { Component } from 'react'\nimport isEqual from 'react-fast-compare'\n\nimport { propTypes, defaultProps } from './props'\n\nconst SEEK_ON_PLAY_EXPIRY = 5000\n\nexport default class Player extends Component {\n static displayName = 'Player'\n static propTypes = propTypes\n static defaultProps = defaultProps\n\n mounted = false\n isReady = false\n isPlaying = false // Track playing state internally to prevent bugs\n isLoading = true // Use isLoading to prevent onPause when switching URL\n loadOnReady = null\n startOnPlay = true\n seekOnPlay = null\n onDurationCalled = false\n\n componentDidMount () {\n this.mounted = true\n }\n\n componentWillUnmount () {\n clearTimeout(this.progressTimeout)\n clearTimeout(this.durationCheckTimeout)\n if (this.isReady) {\n this.player.stop()\n\n if (this.player.disablePIP) {\n this.player.disablePIP()\n }\n }\n this.mounted = false\n }\n\n componentDidUpdate (prevProps) {\n // Invoke player methods based on changed props\n const { url, playing, volume, muted, playbackRate, pip, loop, activePlayer } = this.props\n if (!isEqual(prevProps.url, url)) {\n if (this.isLoading && !activePlayer.forceLoad) {\n console.warn(`ReactPlayer: the attempt to load ${url} is being deferred until the player has loaded`)\n this.loadOnReady = url\n return\n }\n this.isLoading = true\n this.startOnPlay = true\n this.onDurationCalled = false\n this.player.load(url, this.isReady)\n }\n if (!prevProps.playing && playing && !this.isPlaying) {\n this.player.play()\n }\n if (prevProps.playing && !playing && this.isPlaying) {\n this.player.pause()\n }\n if (!prevProps.pip && pip && this.player.enablePIP) {\n this.player.enablePIP()\n }\n if (prevProps.pip && !pip && this.player.disablePIP) {\n this.player.disablePIP()\n }\n if (prevProps.volume !== volume && volume !== null) {\n this.player.setVolume(volume)\n }\n if (prevProps.muted !== muted) {\n if (muted) {\n this.player.mute()\n } else {\n this.player.unmute()\n if (volume !== null) {\n // Set volume next tick to fix a bug with DailyMotion\n setTimeout(() => this.player.setVolume(volume))\n }\n }\n }\n if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(playbackRate)\n }\n if (prevProps.loop !== loop && this.player.setLoop) {\n this.player.setLoop(loop)\n }\n }\n\n handlePlayerMount = player => {\n this.player = player\n this.player.load(this.props.url)\n this.progress()\n }\n\n getDuration () {\n if (!this.isReady) return null\n return this.player.getDuration()\n }\n\n getCurrentTime () {\n if (!this.isReady) return null\n return this.player.getCurrentTime()\n }\n\n getSecondsLoaded () {\n if (!this.isReady) return null\n return this.player.getSecondsLoaded()\n }\n\n getInternalPlayer = (key) => {\n if (!this.player) return null\n return this.player[key]\n }\n\n progress = () => {\n if (this.props.url && this.player && this.isReady) {\n const playedSeconds = this.getCurrentTime() || 0\n const loadedSeconds = this.getSecondsLoaded()\n const duration = this.getDuration()\n if (duration) {\n const progress = {\n playedSeconds,\n played: playedSeconds / duration\n }\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds\n progress.loaded = loadedSeconds / duration\n }\n // Only call onProgress if values have changed\n if (progress.playedSeconds !== this.prevPlayed || progress.loadedSeconds !== this.prevLoaded) {\n this.props.onProgress(progress)\n }\n this.prevPlayed = progress.playedSeconds\n this.prevLoaded = progress.loadedSeconds\n }\n }\n this.progressTimeout = setTimeout(this.progress, this.props.progressFrequency || this.props.progressInterval)\n }\n\n seekTo (amount, type) {\n // When seeking before player is ready, store value and seek later\n if (!this.isReady && amount !== 0) {\n this.seekOnPlay = amount\n setTimeout(() => { this.seekOnPlay = null }, SEEK_ON_PLAY_EXPIRY)\n return\n }\n const isFraction = !type ? (amount > 0 && amount < 1) : type === 'fraction'\n if (isFraction) {\n // Convert fraction to seconds based on duration\n const duration = this.player.getDuration()\n if (!duration) {\n console.warn('ReactPlayer: could not seek using fraction – duration not yet available')\n return\n }\n this.player.seekTo(duration * amount)\n return\n }\n this.player.seekTo(amount)\n }\n\n handleReady = () => {\n if (!this.mounted) return\n this.isReady = true\n this.isLoading = false\n const { onReady, playing, volume, muted } = this.props\n onReady()\n if (!muted && volume !== null) {\n this.player.setVolume(volume)\n }\n if (this.loadOnReady) {\n this.player.load(this.loadOnReady, true)\n this.loadOnReady = null\n } else if (playing) {\n this.player.play()\n }\n this.handleDurationCheck()\n }\n\n handlePlay = () => {\n this.isPlaying = true\n this.isLoading = false\n const { onStart, onPlay, playbackRate } = this.props\n if (this.startOnPlay) {\n if (this.player.setPlaybackRate && playbackRate !== 1) {\n this.player.setPlaybackRate(playbackRate)\n }\n onStart()\n this.startOnPlay = false\n }\n onPlay()\n if (this.seekOnPlay) {\n this.seekTo(this.seekOnPlay)\n this.seekOnPlay = null\n }\n this.handleDurationCheck()\n }\n\n handlePause = (e) => {\n this.isPlaying = false\n if (!this.isLoading) {\n this.props.onPause(e)\n }\n }\n\n handleEnded = () => {\n const { activePlayer, loop, onEnded } = this.props\n if (activePlayer.loopOnEnded && loop) {\n this.seekTo(0)\n }\n if (!loop) {\n this.isPlaying = false\n onEnded()\n }\n }\n\n handleError = (...args) => {\n this.isLoading = false\n this.props.onError(...args)\n }\n\n handleDurationCheck = () => {\n clearTimeout(this.durationCheckTimeout)\n const duration = this.getDuration()\n if (duration) {\n if (!this.onDurationCalled) {\n this.props.onDuration(duration)\n this.onDurationCalled = true\n }\n } else {\n this.durationCheckTimeout = setTimeout(this.handleDurationCheck, 100)\n }\n }\n\n handleLoaded = () => {\n // Sometimes we know loading has stopped but onReady/onPlay are never called\n // so this provides a way for players to avoid getting stuck\n this.isLoading = false\n }\n\n render () {\n const Player = this.props.activePlayer\n if (!Player) {\n return null\n }\n return (\n \n )\n }\n}\n","import React, { Component, Suspense, lazy } from 'react'\nimport merge from 'deepmerge'\nimport memoize from 'memoize-one'\nimport isEqual from 'react-fast-compare'\n\nimport { propTypes, defaultProps } from './props'\nimport { omit } from './utils'\nimport players from './players'\nimport Player from './Player'\n\nconst Preview = lazy(() => import('./Preview'))\n\nconst IS_BROWSER = typeof window !== 'undefined' && window.document\nconst SUPPORTED_PROPS = Object.keys(propTypes)\n\n// Return null when rendering on the server\n// as Suspense is not supported yet\nconst UniversalSuspense = IS_BROWSER ? Suspense : () => null\n\nconst customPlayers = []\n\nexport default class ReactPlayer extends Component {\n static displayName = 'ReactPlayer'\n static propTypes = propTypes\n static defaultProps = defaultProps\n static addCustomPlayer = player => { customPlayers.push(player) }\n static removeCustomPlayers = () => { customPlayers.length = 0 }\n\n static canPlay = url => {\n for (const Player of [...customPlayers, ...players]) {\n if (Player.canPlay(url)) {\n return true\n }\n }\n return false\n }\n\n static canEnablePIP = url => {\n for (const Player of [...customPlayers, ...players]) {\n if (Player.canEnablePIP && Player.canEnablePIP(url)) {\n return true\n }\n }\n return false\n }\n\n state = {\n showPreview: !!this.props.light\n }\n\n // Use references, as refs is used by React\n references = {\n wrapper: wrapper => { this.wrapper = wrapper },\n player: player => { this.player = player }\n }\n\n shouldComponentUpdate (nextProps, nextState) {\n return !isEqual(this.props, nextProps) || !isEqual(this.state, nextState)\n }\n\n componentDidUpdate (prevProps) {\n const { light } = this.props\n if (!prevProps.light && light) {\n this.setState({ showPreview: true })\n }\n if (prevProps.light && !light) {\n this.setState({ showPreview: false })\n }\n }\n\n handleClickPreview = () => {\n this.setState({ showPreview: false })\n }\n\n showPreview = () => {\n this.setState({ showPreview: true })\n }\n\n getDuration = () => {\n if (!this.player) return null\n return this.player.getDuration()\n }\n\n getCurrentTime = () => {\n if (!this.player) return null\n return this.player.getCurrentTime()\n }\n\n getSecondsLoaded = () => {\n if (!this.player) return null\n return this.player.getSecondsLoaded()\n }\n\n getInternalPlayer = (key = 'player') => {\n if (!this.player) return null\n return this.player.getInternalPlayer(key)\n }\n\n seekTo = (fraction, type) => {\n if (!this.player) return null\n this.player.seekTo(fraction, type)\n }\n\n handleReady = () => {\n this.props.onReady(this)\n }\n\n getActivePlayer = memoize(url => {\n for (const player of [...customPlayers, ...players]) {\n if (player.canPlay(url)) {\n return player\n }\n }\n // Fall back to FilePlayer if nothing else can play the URL\n return players[players.length - 1]\n })\n\n getConfig = memoize((url, key) => {\n const { config } = this.props\n return merge.all([\n defaultProps.config,\n defaultProps.config[key] || {},\n config,\n config[key] || {}\n ])\n })\n\n getAttributes = memoize(url => {\n return omit(this.props, SUPPORTED_PROPS)\n })\n\n renderPreview (url) {\n if (!url) return null\n const { light, playIcon } = this.props\n return (\n \n )\n }\n\n renderActivePlayer = url => {\n if (!url) return null\n const player = this.getActivePlayer(url)\n const config = this.getConfig(url, player.key)\n return (\n \n )\n }\n\n render () {\n const { url, style, width, height, wrapper: Wrapper } = this.props\n const { showPreview } = this.state\n const attributes = this.getAttributes(url)\n return (\n \n \n {showPreview\n ? this.renderPreview(url)\n : this.renderActivePlayer(url)}\n \n \n )\n }\n}\n","import React, { Component } from 'react'\n\nconst ICON_SIZE = '64px'\n\nexport default class Preview extends Component {\n mounted = false\n state = {\n image: null\n }\n\n componentDidMount () {\n this.mounted = true\n this.fetchImage(this.props)\n }\n\n componentDidUpdate (prevProps) {\n const { url, light } = this.props\n if (prevProps.url !== url || prevProps.light !== light) {\n this.fetchImage(this.props)\n }\n }\n\n componentWillUnmount () {\n this.mounted = false\n }\n\n fetchImage ({ url, light }) {\n if (typeof light === 'string') {\n this.setState({ image: light })\n return\n }\n this.setState({ image: null })\n return window.fetch(`https://noembed.com/embed?url=${url}`)\n .then(response => response.json())\n .then(data => {\n if (data.thumbnail_url && this.mounted) {\n const image = data.thumbnail_url.replace('height=100', 'height=480')\n this.setState({ image })\n }\n })\n }\n\n handleKeyPress = e => {\n if (e.key === 'Enter' || e.key === ' ') {\n this.props.onClick()\n }\n }\n\n render () {\n const { onClick, playIcon } = this.props\n const { image } = this.state\n const flexCenter = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }\n const styles = {\n preview: {\n width: '100%',\n height: '100%',\n backgroundImage: image ? `url(${image})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n cursor: 'pointer',\n ...flexCenter\n },\n shadow: {\n background: 'radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)',\n borderRadius: ICON_SIZE,\n width: ICON_SIZE,\n height: ICON_SIZE,\n ...flexCenter\n },\n playIcon: {\n borderStyle: 'solid',\n borderWidth: '16px 0 16px 26px',\n borderColor: 'transparent transparent transparent white',\n marginLeft: '7px'\n }\n }\n const defaultPlayIcon = (\n
\n
\n
\n )\n return (\n \n {playIcon || defaultPlayIcon}\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, parseStartTime, parseEndTime } from '../utils'\nimport { MATCH_URL_YOUTUBE } from '../patterns'\n\nconst SDK_URL = 'https://www.youtube.com/iframe_api'\nconst SDK_GLOBAL = 'YT'\nconst SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady'\nconst MATCH_PLAYLIST = /list=([a-zA-Z0-9_-]+)/\nconst MATCH_USER_UPLOADS = /user\\/([a-zA-Z0-9_-]+)\\/?/\nconst MATCH_NOCOOKIE = /youtube-nocookie\\.com/\nconst NOCOOKIE_HOST = 'https://www.youtube-nocookie.com'\n\nfunction parsePlaylist (url) {\n if (MATCH_PLAYLIST.test(url)) {\n const [, playlistId] = url.match(MATCH_PLAYLIST)\n return {\n listType: 'playlist',\n list: playlistId\n }\n } else if (MATCH_USER_UPLOADS.test(url)) {\n const [, username] = url.match(MATCH_USER_UPLOADS)\n return {\n listType: 'user_uploads',\n list: username\n }\n }\n return {}\n}\n\nexport default class YouTube extends Component {\n static displayName = 'YouTube'\n callPlayer = callPlayer\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url, isReady) {\n const { playing, muted, playsinline, controls, loop, config, onError } = this.props\n const { playerVars, embedOptions } = config\n const id = url && url.match(MATCH_URL_YOUTUBE)[1]\n if (isReady) {\n if (MATCH_PLAYLIST.test(url) || MATCH_USER_UPLOADS.test(url)) {\n this.player.loadPlaylist(parsePlaylist(url))\n return\n }\n this.player.cueVideoById({\n videoId: id,\n startSeconds: parseStartTime(url) || playerVars.start,\n endSeconds: parseEndTime(url) || playerVars.end\n })\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, YT => YT.loaded).then(YT => {\n if (!this.container) return\n this.player = new YT.Player(this.container, {\n width: '100%',\n height: '100%',\n videoId: id,\n playerVars: {\n autoplay: playing ? 1 : 0,\n mute: muted ? 1 : 0,\n controls: controls ? 1 : 0,\n start: parseStartTime(url),\n end: parseEndTime(url),\n origin: window.location.origin,\n playsinline: playsinline,\n ...parsePlaylist(url),\n ...playerVars\n },\n events: {\n onReady: () => {\n if (loop) {\n this.player.setLoop(true) // Enable playlist looping\n }\n this.props.onReady()\n },\n onStateChange: this.onStateChange,\n onError: event => onError(event.data)\n },\n host: MATCH_NOCOOKIE.test(url) ? NOCOOKIE_HOST : undefined,\n ...embedOptions\n })\n }, onError)\n }\n\n onStateChange = (event) => {\n const { data } = event\n const { onPlay, onPause, onBuffer, onBufferEnd, onEnded, onReady, loop, config: { playerVars, onUnstarted } } = this.props\n const { UNSTARTED, PLAYING, PAUSED, BUFFERING, ENDED, CUED } = window[SDK_GLOBAL].PlayerState\n if (data === UNSTARTED) onUnstarted()\n if (data === PLAYING) {\n onPlay()\n onBufferEnd()\n }\n if (data === PAUSED) onPause()\n if (data === BUFFERING) onBuffer()\n if (data === ENDED) {\n const isPlaylist = !!this.callPlayer('getPlaylist')\n // Only loop manually if not playing a playlist\n if (loop && !isPlaylist) {\n if (playerVars.start) {\n this.seekTo(playerVars.start)\n } else {\n this.play()\n }\n }\n onEnded()\n }\n if (data === CUED) onReady()\n }\n\n play () {\n this.callPlayer('playVideo')\n }\n\n pause () {\n this.callPlayer('pauseVideo')\n }\n\n stop () {\n if (!document.body.contains(this.callPlayer('getIframe'))) return\n this.callPlayer('stopVideo')\n }\n\n seekTo (amount) {\n this.callPlayer('seekTo', amount)\n if (!this.props.playing) {\n this.pause()\n }\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction * 100)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unMute')\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('setPlaybackRate', rate)\n }\n\n setLoop (loop) {\n this.callPlayer('setLoop', loop)\n }\n\n getDuration () {\n return this.callPlayer('getDuration')\n }\n\n getCurrentTime () {\n return this.callPlayer('getCurrentTime')\n }\n\n getSecondsLoaded () {\n return this.callPlayer('getVideoLoadedFraction') * this.getDuration()\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n
\n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\n\nconst SDK_URL = 'https://w.soundcloud.com/player/api.js'\nconst SDK_GLOBAL = 'SC'\n\nexport default class SoundCloud extends Component {\n static displayName = 'SoundCloud'\n static loopOnEnded = true\n callPlayer = callPlayer\n duration = null\n currentTime = null\n fractionLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url, isReady) {\n getSDK(SDK_URL, SDK_GLOBAL).then(SC => {\n if (!this.iframe) return\n const { PLAY, PLAY_PROGRESS, PAUSE, FINISH, ERROR } = SC.Widget.Events\n if (!isReady) {\n this.player = SC.Widget(this.iframe)\n this.player.bind(PLAY, this.props.onPlay)\n this.player.bind(PAUSE, () => {\n const remaining = this.duration - this.currentTime\n if (remaining < 0.05) {\n // Prevent onPause firing right before onEnded\n return\n }\n this.props.onPause()\n })\n this.player.bind(PLAY_PROGRESS, e => {\n this.currentTime = e.currentPosition / 1000\n this.fractionLoaded = e.loadedProgress\n })\n this.player.bind(FINISH, () => this.props.onEnded())\n this.player.bind(ERROR, e => this.props.onError(e))\n }\n this.player.load(url, {\n ...this.props.config.options,\n callback: () => {\n this.player.getDuration(duration => {\n this.duration = duration / 1000\n this.props.onReady()\n })\n }\n })\n })\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seekTo', seconds * 1000)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction * 100)\n }\n\n mute = () => {\n this.setVolume(0)\n }\n\n unmute = () => {\n if (this.props.volume !== null) {\n this.setVolume(this.props.volume)\n }\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return this.fractionLoaded * this.duration\n }\n\n ref = iframe => {\n this.iframe = iframe\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\n\nconst SDK_URL = 'https://player.vimeo.com/api/player.js'\nconst SDK_GLOBAL = 'Vimeo'\n\nexport default class Vimeo extends Component {\n static displayName = 'Vimeo'\n static forceLoad = true // Prevent checking isLoading when URL changes\n callPlayer = callPlayer\n duration = null\n currentTime = null\n secondsLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n this.duration = null\n getSDK(SDK_URL, SDK_GLOBAL).then(Vimeo => {\n if (!this.container) return\n this.player = new Vimeo.Player(this.container, {\n url,\n autoplay: this.props.playing,\n muted: this.props.muted,\n loop: this.props.loop,\n playsinline: this.props.playsinline,\n controls: this.props.controls,\n ...this.props.config.playerOptions\n })\n this.player.ready().then(() => {\n const iframe = this.container.querySelector('iframe')\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n }).catch(this.props.onError)\n this.player.on('loaded', () => {\n this.props.onReady()\n this.refreshDuration()\n })\n this.player.on('play', () => {\n this.props.onPlay()\n this.refreshDuration()\n })\n this.player.on('pause', this.props.onPause)\n this.player.on('seeked', e => this.props.onSeek(e.seconds))\n this.player.on('ended', this.props.onEnded)\n this.player.on('error', this.props.onError)\n this.player.on('timeupdate', ({ seconds }) => {\n this.currentTime = seconds\n })\n this.player.on('progress', ({ seconds }) => {\n this.secondsLoaded = seconds\n })\n }, this.props.onError)\n }\n\n refreshDuration () {\n this.player.getDuration().then(duration => {\n this.duration = duration\n })\n }\n\n play () {\n const promise = this.callPlayer('play')\n if (promise) {\n promise.catch(this.props.onError)\n }\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n this.callPlayer('unload')\n }\n\n seekTo (seconds) {\n this.callPlayer('setCurrentTime', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n setLoop (loop) {\n this.callPlayer('setLoop', loop)\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('setPlaybackRate', rate)\n }\n\n mute = () => {\n this.setVolume(0)\n }\n\n unmute = () => {\n if (this.props.volume !== null) {\n this.setVolume(this.props.volume)\n }\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return this.secondsLoaded\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n display\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, randomString } from '../utils'\n\nconst SDK_URL = 'https://connect.facebook.net/en_US/sdk.js'\nconst SDK_GLOBAL = 'FB'\nconst SDK_GLOBAL_READY = 'fbAsyncInit'\nconst PLAYER_ID_PREFIX = 'facebook-player-'\n\nexport default class Facebook extends Component {\n static displayName = 'Facebook'\n static loopOnEnded = true\n callPlayer = callPlayer\n playerID = this.props.config.playerId || `${PLAYER_ID_PREFIX}${randomString()}`\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url, isReady) {\n if (isReady) {\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => FB.XFBML.parse())\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => {\n FB.init({\n appId: this.props.config.appId,\n xfbml: true,\n version: this.props.config.version\n })\n FB.Event.subscribe('xfbml.render', msg => {\n // Here we know the SDK has loaded, even if onReady/onPlay\n // is not called due to a video that cannot be embedded\n this.props.onLoaded()\n })\n FB.Event.subscribe('xfbml.ready', msg => {\n if (msg.type === 'video' && msg.id === this.playerID) {\n this.player = msg.instance\n this.player.subscribe('startedPlaying', this.props.onPlay)\n this.player.subscribe('paused', this.props.onPause)\n this.player.subscribe('finishedPlaying', this.props.onEnded)\n this.player.subscribe('startedBuffering', this.props.onBuffer)\n this.player.subscribe('finishedBuffering', this.props.onBufferEnd)\n this.player.subscribe('error', this.props.onError)\n if (!this.props.muted) {\n // Player is muted by default\n this.callPlayer('unmute')\n }\n this.props.onReady()\n\n // For some reason Facebook have added `visibility: hidden`\n // to the iframe when autoplay fails, so here we set it back\n document.getElementById(this.playerID).querySelector('iframe').style.visibility = 'visible'\n }\n })\n })\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unmute')\n }\n\n getDuration () {\n return this.callPlayer('getDuration')\n }\n\n getCurrentTime () {\n return this.callPlayer('getCurrentPosition')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n render () {\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { MATCH_URL_STREAMABLE } from '../patterns'\n\nconst SDK_URL = 'https://cdn.embed.ly/player-0.1.0.min.js'\nconst SDK_GLOBAL = 'playerjs'\n\nexport default class Streamable extends Component {\n static displayName = 'Streamable'\n callPlayer = callPlayer\n duration = null\n currentTime = null\n secondsLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n getSDK(SDK_URL, SDK_GLOBAL).then(playerjs => {\n if (!this.iframe) return\n this.player = new playerjs.Player(this.iframe)\n this.player.setLoop(this.props.loop)\n this.player.on('ready', this.props.onReady)\n this.player.on('play', this.props.onPlay)\n this.player.on('pause', this.props.onPause)\n this.player.on('seeked', this.props.onSeek)\n this.player.on('ended', this.props.onEnded)\n this.player.on('error', this.props.onError)\n this.player.on('timeupdate', ({ duration, seconds }) => {\n this.duration = duration\n this.currentTime = seconds\n })\n this.player.on('buffered', ({ percent }) => {\n if (this.duration) {\n this.secondsLoaded = this.duration * percent\n }\n })\n if (this.props.muted) {\n this.player.mute()\n }\n }, this.props.onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('setCurrentTime', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction * 100)\n }\n\n setLoop (loop) {\n this.callPlayer('setLoop', loop)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unmute')\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return this.secondsLoaded\n }\n\n ref = iframe => {\n this.iframe = iframe\n }\n\n render () {\n const id = this.props.url.match(MATCH_URL_STREAMABLE)[1]\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { MATCH_URL_WISTIA } from '../patterns'\n\nconst SDK_URL = 'https://fast.wistia.com/assets/external/E-v1.js'\nconst SDK_GLOBAL = 'Wistia'\n\nexport default class Wistia extends Component {\n static displayName = 'Wistia'\n static loopOnEnded = true\n callPlayer = callPlayer\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n getID (url) {\n return url && url.match(MATCH_URL_WISTIA)[1]\n }\n\n load (url) {\n const { playing, muted, controls, onReady, config, onError } = this.props\n getSDK(SDK_URL, SDK_GLOBAL).then(() => {\n window._wq = window._wq || []\n window._wq.push({\n id: this.getID(url),\n options: {\n autoPlay: playing,\n silentAutoPlay: 'allow',\n muted: muted,\n controlsVisibleOnLoad: controls,\n ...config.options\n },\n onReady: player => {\n this.player = player\n this.unbind()\n this.player.bind('play', this.onPlay)\n this.player.bind('pause', this.onPause)\n this.player.bind('seek', this.onSeek)\n this.player.bind('end', this.onEnded)\n onReady()\n }\n })\n }, onError)\n }\n\n unbind () {\n this.player.unbind('play', this.onPlay)\n this.player.unbind('pause', this.onPause)\n this.player.unbind('seek', this.onSeek)\n this.player.unbind('end', this.onEnded)\n }\n\n // Proxy methods to prevent listener leaks\n onPlay = (...args) => this.props.onPlay(...args)\n onPause = (...args) => this.props.onPause(...args)\n onSeek = (...args) => this.props.onSeek(...args)\n onEnded = (...args) => this.props.onEnded(...args)\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n this.unbind()\n this.callPlayer('remove')\n }\n\n seekTo (seconds) {\n this.callPlayer('time', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('volume', fraction)\n }\n\n mute = () => {\n this.callPlayer('mute')\n }\n\n unmute = () => {\n this.callPlayer('unmute')\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('playbackRate', rate)\n }\n\n getDuration () {\n return this.callPlayer('duration')\n }\n\n getCurrentTime () {\n return this.callPlayer('time')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n render () {\n const id = this.getID(this.props.url)\n const className = `wistia_embed wistia_async_${id}`\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, randomString } from '../utils'\nimport { MATCH_URL_TWITCH_CHANNEL, MATCH_URL_TWITCH_VIDEO } from '../patterns'\n\nconst SDK_URL = 'https://player.twitch.tv/js/embed/v1.js'\nconst SDK_GLOBAL = 'Twitch'\nconst PLAYER_ID_PREFIX = 'twitch-player-'\n\nexport default class Twitch extends Component {\n static displayName = 'Twitch'\n static loopOnEnded = true\n callPlayer = callPlayer\n playerID = this.props.config.playerId || `${PLAYER_ID_PREFIX}${randomString()}`\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url, isReady) {\n const { playsinline, onError, config, controls } = this.props\n const isChannel = MATCH_URL_TWITCH_CHANNEL.test(url)\n const id = isChannel ? url.match(MATCH_URL_TWITCH_CHANNEL)[1] : url.match(MATCH_URL_TWITCH_VIDEO)[1]\n if (isReady) {\n if (isChannel) {\n this.player.setChannel(id)\n } else {\n this.player.setVideo('v' + id)\n }\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL).then(Twitch => {\n this.player = new Twitch.Player(this.playerID, {\n video: isChannel ? '' : id,\n channel: isChannel ? id : '',\n height: '100%',\n width: '100%',\n playsinline: playsinline,\n autoplay: this.props.playing,\n muted: this.props.muted,\n // https://github.com/CookPete/react-player/issues/733#issuecomment-549085859\n controls: isChannel ? true : controls,\n ...config.options\n })\n const { READY, PLAYING, PAUSE, ENDED, ONLINE, OFFLINE } = Twitch.Player\n this.player.addEventListener(READY, this.props.onReady)\n this.player.addEventListener(PLAYING, this.props.onPlay)\n this.player.addEventListener(PAUSE, this.props.onPause)\n this.player.addEventListener(ENDED, this.props.onEnded)\n\n // Prevent weird isLoading behaviour when streams are offline\n this.player.addEventListener(ONLINE, this.props.onLoaded)\n this.player.addEventListener(OFFLINE, this.props.onLoaded)\n }, onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n this.callPlayer('pause')\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.callPlayer('setMuted', true)\n }\n\n unmute = () => {\n this.callPlayer('setMuted', false)\n }\n\n getDuration () {\n return this.callPlayer('getDuration')\n }\n\n getCurrentTime () {\n return this.callPlayer('getCurrentTime')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n render () {\n const style = {\n width: '100%',\n height: '100%'\n }\n return (\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, parseStartTime } from '../utils'\nimport { MATCH_URL_DAILYMOTION } from '../patterns'\n\nconst SDK_URL = 'https://api.dmcdn.net/all.js'\nconst SDK_GLOBAL = 'DM'\nconst SDK_GLOBAL_READY = 'dmAsyncInit'\n\nexport default class DailyMotion extends Component {\n static displayName = 'DailyMotion'\n static loopOnEnded = true\n callPlayer = callPlayer\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n const { controls, config, onError, playing } = this.props\n const [, id] = url.match(MATCH_URL_DAILYMOTION)\n if (this.player) {\n this.player.load(id, {\n start: parseStartTime(url),\n autoplay: playing\n })\n return\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, DM => DM.player).then(DM => {\n if (!this.container) return\n const Player = DM.player\n this.player = new Player(this.container, {\n width: '100%',\n height: '100%',\n video: id,\n params: {\n controls: controls,\n autoplay: this.props.playing,\n mute: this.props.muted,\n start: parseStartTime(url),\n origin: window.location.origin,\n ...config.params\n },\n events: {\n apiready: this.props.onReady,\n seeked: () => this.props.onSeek(this.player.currentTime),\n video_end: this.props.onEnded,\n durationchange: this.onDurationChange,\n pause: this.props.onPause,\n playing: this.props.onPlay,\n waiting: this.props.onBuffer,\n error: event => onError(event)\n }\n })\n }, onError)\n }\n\n onDurationChange = () => {\n const duration = this.getDuration()\n this.props.onDuration(duration)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.callPlayer('setMuted', true)\n }\n\n unmute = () => {\n this.callPlayer('setMuted', false)\n }\n\n getDuration () {\n return this.player.duration || null\n }\n\n getCurrentTime () {\n return this.player.currentTime\n }\n\n getSecondsLoaded () {\n return this.player.bufferedTime\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n
\n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK, queryString } from '../utils'\nimport { MATCH_URL_MIXCLOUD } from '../patterns'\n\nconst SDK_URL = 'https://widget.mixcloud.com/media/js/widgetApi.js'\nconst SDK_GLOBAL = 'Mixcloud'\n\nexport default class Mixcloud extends Component {\n static displayName = 'Mixcloud'\n static loopOnEnded = true\n callPlayer = callPlayer\n duration = null\n currentTime = null\n secondsLoaded = null\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n getSDK(SDK_URL, SDK_GLOBAL).then(Mixcloud => {\n this.player = Mixcloud.PlayerWidget(this.iframe)\n this.player.ready.then(() => {\n this.player.events.play.on(this.props.onPlay)\n this.player.events.pause.on(this.props.onPause)\n this.player.events.ended.on(this.props.onEnded)\n this.player.events.error.on(this.props.error)\n this.player.events.progress.on((seconds, duration) => {\n this.currentTime = seconds\n this.duration = duration\n })\n this.props.onReady()\n })\n }, this.props.onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n // Nothing to do\n }\n\n seekTo (seconds) {\n this.callPlayer('seek', seconds)\n }\n\n setVolume (fraction) {\n // No volume support\n }\n\n mute = () => {\n // No volume support\n }\n\n unmute = () => {\n // No volume support\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.currentTime\n }\n\n getSecondsLoaded () {\n return null\n }\n\n ref = iframe => {\n this.iframe = iframe\n }\n\n render () {\n const { url, config } = this.props\n const id = url.match(MATCH_URL_MIXCLOUD)[1]\n const style = {\n width: '100%',\n height: '100%'\n }\n const query = queryString({\n ...config.options,\n feed: `/${id}/`\n })\n // We have to give the iframe a key here to prevent a\n // weird dialog appearing when loading a new track\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { callPlayer, getSDK } from '../utils'\nimport { MATCH_URL_VIDYARD } from '../patterns'\n\nconst SDK_URL = 'https://play.vidyard.com/embed/v4.js'\nconst SDK_GLOBAL = 'VidyardV4'\nconst SDK_GLOBAL_READY = 'onVidyardAPI'\n\nexport default class Vidyard extends Component {\n static displayName = 'Vidyard'\n callPlayer = callPlayer\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n }\n\n load (url) {\n const { playing, config, onError, onDuration } = this.props\n const id = url && url.match(MATCH_URL_VIDYARD)[1]\n if (this.player) {\n this.stop()\n }\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(Vidyard => {\n if (!this.container) return\n Vidyard.api.addReadyListener((data, player) => {\n this.player = player\n this.player.on('ready', this.props.onReady)\n this.player.on('play', this.props.onPlay)\n this.player.on('pause', this.props.onPause)\n this.player.on('seek', this.props.onSeek)\n this.player.on('playerComplete', this.props.onEnded)\n }, id)\n Vidyard.api.renderPlayer({\n uuid: id,\n container: this.container,\n autoplay: playing ? 1 : 0,\n ...config.options\n })\n Vidyard.api.getPlayerMetadata(id).then(meta => {\n this.duration = meta.length_in_seconds\n onDuration(meta.length_in_seconds)\n })\n }, onError)\n }\n\n play () {\n this.callPlayer('play')\n }\n\n pause () {\n this.callPlayer('pause')\n }\n\n stop () {\n window.VidyardV4.api.destroyPlayer(this.player)\n }\n\n seekTo (amount) {\n this.callPlayer('seek', amount)\n }\n\n setVolume (fraction) {\n this.callPlayer('setVolume', fraction)\n }\n\n mute = () => {\n this.setVolume(0)\n }\n\n unmute = () => {\n if (this.props.volume !== null) {\n this.setVolume(this.props.volume)\n }\n }\n\n setPlaybackRate (rate) {\n this.callPlayer('setPlaybackSpeed', rate)\n }\n\n getDuration () {\n return this.duration\n }\n\n getCurrentTime () {\n return this.callPlayer('currentTime')\n }\n\n getSecondsLoaded () {\n return null\n }\n\n ref = container => {\n this.container = container\n }\n\n render () {\n const { display } = this.props\n const style = {\n width: '100%',\n height: '100%',\n display\n }\n return (\n
\n
\n
\n )\n }\n}\n","import React, { Component } from 'react'\n\nimport { getSDK, isMediaStream, supportsWebKitPresentationMode } from '../utils'\nimport { AUDIO_EXTENSIONS, HLS_EXTENSIONS, DASH_EXTENSIONS } from '../patterns'\n\nconst IOS = typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream\nconst HLS_SDK_URL = 'https://cdn.jsdelivr.net/npm/hls.js@VERSION/dist/hls.min.js'\nconst HLS_GLOBAL = 'Hls'\nconst DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/VERSION/dash.all.min.js'\nconst DASH_GLOBAL = 'dashjs'\nconst MATCH_DROPBOX_URL = /www\\.dropbox\\.com\\/.+/\n\nexport default class FilePlayer extends Component {\n static displayName = 'FilePlayer'\n\n componentDidMount () {\n this.props.onMount && this.props.onMount(this)\n this.addListeners(this.player)\n if (IOS) {\n this.player.load()\n }\n }\n\n componentDidUpdate (prevProps) {\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {\n this.removeListeners(this.prevPlayer)\n this.addListeners(this.player)\n }\n }\n\n componentWillUnmount () {\n this.removeListeners(this.player)\n if (this.hls) {\n this.hls.destroy()\n }\n }\n\n addListeners (player) {\n const { playsinline } = this.props\n player.addEventListener('canplay', this.onReady)\n player.addEventListener('play', this.onPlay)\n player.addEventListener('waiting', this.onBuffer)\n player.addEventListener('playing', this.onBufferEnd)\n player.addEventListener('pause', this.onPause)\n player.addEventListener('seeked', this.onSeek)\n player.addEventListener('ended', this.onEnded)\n player.addEventListener('error', this.onError)\n player.addEventListener('enterpictureinpicture', this.onEnablePIP)\n player.addEventListener('leavepictureinpicture', this.onDisablePIP)\n player.addEventListener('webkitpresentationmodechanged', this.onPresentationModeChange)\n if (playsinline) {\n player.setAttribute('playsinline', '')\n player.setAttribute('webkit-playsinline', '')\n player.setAttribute('x5-playsinline', '')\n }\n }\n\n removeListeners (player) {\n player.removeEventListener('canplay', this.onReady)\n player.removeEventListener('play', this.onPlay)\n player.removeEventListener('waiting', this.onBuffer)\n player.removeEventListener('playing', this.onBufferEnd)\n player.removeEventListener('pause', this.onPause)\n player.removeEventListener('seeked', this.onSeek)\n player.removeEventListener('ended', this.onEnded)\n player.removeEventListener('error', this.onError)\n player.removeEventListener('enterpictureinpicture', this.onEnablePIP)\n player.removeEventListener('leavepictureinpicture', this.onDisablePIP)\n player.removeEventListener('webkitpresentationmodechanged', this.onPresentationModeChange)\n }\n\n // Proxy methods to prevent listener leaks\n onReady = (...args) => this.props.onReady(...args)\n onPlay = (...args) => this.props.onPlay(...args)\n onBuffer = (...args) => this.props.onBuffer(...args)\n onBufferEnd = (...args) => this.props.onBufferEnd(...args)\n onPause = (...args) => this.props.onPause(...args)\n onEnded = (...args) => this.props.onEnded(...args)\n onError = (...args) => this.props.onError(...args)\n onEnablePIP = (...args) => this.props.onEnablePIP(...args)\n\n onDisablePIP = e => {\n const { onDisablePIP, playing } = this.props\n onDisablePIP(e)\n if (playing) {\n this.play()\n }\n }\n\n onPresentationModeChange = e => {\n if (this.player && supportsWebKitPresentationMode(this.player)) {\n const { webkitPresentationMode } = this.player\n if (webkitPresentationMode === 'picture-in-picture') {\n this.onEnablePIP(e)\n } else if (webkitPresentationMode === 'inline') {\n this.onDisablePIP(e)\n }\n }\n }\n\n onSeek = e => {\n this.props.onSeek(e.target.currentTime)\n }\n\n shouldUseAudio (props) {\n if (props.config.forceVideo) {\n return false\n }\n if (props.config.attributes.poster) {\n return false // Use