From 495782f5c6ffad7a6c3ccec26887fbd34b032038 Mon Sep 17 00:00:00 2001 From: Harvey Zack Date: Fri, 12 Oct 2018 16:58:58 +0800 Subject: [PATCH] add mse --- docs/index.html | 16 +++ docs/js/artplayer.js | 199 +++++++++++++++++++++++++++++++++++++- docs/js/artplayer.js.map | 2 +- src/index.js | 6 +- src/mse.js | 121 +++++++++++++++++++++++ src/player.js | 22 ++++- src/utils/index.js | 8 ++ src/utils/mediaElement.js | 64 ++++++++++++ src/utils/mimeCodeces.js | 5 + src/utils/mseConfig.js | 58 +++++++++++ src/utils/verification.js | 10 ++ 11 files changed, 504 insertions(+), 7 deletions(-) create mode 100644 src/mse.js create mode 100644 src/utils/mediaElement.js create mode 100644 src/utils/mimeCodeces.js create mode 100644 src/utils/mseConfig.js diff --git a/docs/index.html b/docs/index.html index 18c569149..3b57fe668 100644 --- a/docs/index.html +++ b/docs/index.html @@ -31,6 +31,22 @@ poster: 'http://s2.pstatp.com/cdn/expire-1-M/byted-player-videos/1.0.0/poster.jpg' }); + player.on('video:canplay', event => { + console.log(event); + }); + + player.on('video:play', event => { + console.log(event); + }); + + player.on('video:progress', event => { + console.log(event); + }); + + player.on('video:pause', event => { + console.log(event); + }); + console.log(player); diff --git a/docs/js/artplayer.js b/docs/js/artplayer.js index 0d19d08ff..3e0f884a2 100644 --- a/docs/js/artplayer.js +++ b/docs/js/artplayer.js @@ -220,6 +220,13 @@ function clamp(num, a, b) { return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); } + function request(url) { + return fetch(url).then(function (response) { + return response.arrayBuffer(); + }).catch(function (err) { + throw new ArtPlayerError(err.message); + }); + } function verification(option) { errorHandle(option.container, '\'container\' option is required.'); @@ -231,6 +238,8 @@ errorHandle(typeof option.autoplay === 'boolean', "'autoplay' option require 'boolean' type, but got '".concat(_typeof_1(option.autoplay), "'.")); errorHandle(['none', 'metadata', 'auto'].indexOf(option.preload) > -1, '\'preload\' option require one of \'none、metadata、auto\'.'); errorHandle(typeof option.lang === 'string', "'lang' option require 'string' type, but got '".concat(_typeof_1(option.lang), "'.")); + errorHandle(typeof option.type === 'string', "'type' option require 'string' type, but got '".concat(_typeof_1(option.type), "'.")); + errorHandle(typeof option.mimeCodec === 'string', "'mimeCodec' option require 'string' type, but got '".concat(_typeof_1(option.mimeCodec), "'.")); } function E () { @@ -362,6 +371,12 @@ return I18n; }(); + var mediaElement = { + propertys: ['audioTracks', 'autoplay', 'buffered', 'controller', 'controls', 'crossOrigin', 'currentSrc', 'currentTime', 'defaultMuted', 'defaultPlaybackRate', 'duration', 'ended', 'error', 'loop', 'mediaGroup', 'muted', 'networkState', 'paused', 'playbackRate', 'played', 'preload', 'readyState', 'seekable', 'seeking', 'src', 'startDate', 'textTracks', 'videoTracks', 'volume'], + methods: ['addTextTrack', 'canPlayType', 'load', 'play', 'pause'], + events: ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting'] + }; + var Player = /*#__PURE__*/ function () { @@ -369,7 +384,9 @@ classCallCheck(this, Player); this.art = art; + this.eventFn = this.eventFn.bind(this); this.init(); + this.eventBind(); } createClass(Player, [{ @@ -377,18 +394,191 @@ value: function init() { var option = this.art.option; var $video = this.art.refs.$video; - $video.controls = false; + $video.controls = true; $video.poster = option.poster; $video.volume = clamp(option.volume, 0, 1); $video.autoplay = option.autoplay; $video.preload = option.preload; - $video.src = option.url; + } + }, { + key: "eventBind", + value: function eventBind() { + var _this = this; + + var $video = this.art.refs.$video; + var events = mediaElement.events; + + var _loop = function _loop(index) { + var eventName = events[index]; + $video.addEventListener(eventName, _this.eventFn); + + _this.art.destroyEvents.push(function () { + $video.removeEventListener(eventName, _this.eventFn); + }); + }; + + for (var index = 0; index < events.length; index++) { + _loop(index); + } + } + }, { + key: "eventFn", + value: function eventFn(event) { + this.art.emit("video:".concat(event.type), event); } }]); return Player; }(); + var mimeCodeces = { + mp4: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', + webm: 'video/webm; codecs="vorbis, vp8"', + ts: 'video/mp2t; codecs="avc1.42E01E, mp4a.40.2"' + }; + + var mseConfig = { + instance: { + propertys: ['activeSourceBuffers', 'duration', 'readyState', 'sourceBuffers'], + methods: ['addSourceBuffer', 'endOfStream', 'removeSourceBuffer', 'clearLiveSeekableRange', 'setLiveSeekableRange'], + events: ['sourceclose', 'sourceended', 'sourceopen'] + }, + sourceBuffer: { + propertys: ['mode', 'updating', 'buffered', 'timestampOffset', 'audioTracks', 'videoTracks', 'textTracks', 'appendWindowStart', 'appendWindowEnd', 'trackDefaults'], + methods: ['appendBuffer', 'appendStream', 'abort', 'remove'], + events: ['abort', 'error', 'update', 'updateend', 'updatestart'] + }, + sourceBufferList: { + propertys: ['length'], + events: ['addsourcebuffer', 'removesourcebuffer'] + } + }; + + var Mse = + /*#__PURE__*/ + function () { + function Mse(art) { + classCallCheck(this, Mse); + + this.art = art; + this.setMimeCodec(); + this.mediaSourceEventFn = this.mediaSourceEventFn.bind(this); + this.sourceBufferEventFn = this.sourceBufferEventFn.bind(this); + this.sourceBuffersEventFn = this.sourceBuffersEventFn.bind(this); + this.activeSourceBuffersEventFn = this.activeSourceBuffersEventFn.bind(this); + this.init(); + this.eventBind(); + this.eventStart(); + } + + createClass(Mse, [{ + key: "setMimeCodec", + value: function setMimeCodec() { + var option = this.art.option; + + if (!option.type) { + var urlArr = option.url.trim().toLowerCase().split('.'); + var type = urlArr[urlArr.length - 1]; + errorHandle(Object.keys(mimeCodeces).includes(type), "Can't find video's type from ".concat(option.url)); + option.type = type; + } + + if (!option.mimeCodec) { + var mimeCodec = mimeCodeces[option.type]; + errorHandle(mimeCodec, "Can't find video's mimeCodec from ".concat(option.type)); + option.mimeCodec = mimeCodec; + } + } + }, { + key: "init", + value: function init() { + var _this$art = this.art, + option = _this$art.option, + $video = _this$art.refs.$video; + errorHandle(MediaSource.isTypeSupported(option.mimeCodec), "Unsupported MIME type or codec: ".concat(option.mimeCodec)); + this.mediaSource = new MediaSource(); + $video.src = URL.createObjectURL(this.mediaSource); + this.art.destroyEvents.push(function () { + URL.revokeObjectURL($video.src); + }); + } + }, { + key: "eventBind", + value: function eventBind() { + var _this = this; + + var instance = mseConfig.instance, + sourceBufferList = mseConfig.sourceBufferList; + instance.events.forEach(function (eventName) { + _this.mediaSource.addEventListener(eventName, _this.mediaSourceEventFn); + + _this.art.destroyEvents.push(function () { + _this.mediaSource.removeEventListener(eventName, _this.mediaSourceEventFn); + }); + }); + sourceBufferList.events.forEach(function (eventName) { + _this.mediaSource.sourceBuffers.addEventListener(eventName, _this.sourceBuffersEventFn); + + _this.art.destroyEvents.push(function () { + _this.mediaSource.sourceBuffers.removeEventListener(eventName, _this.sourceBuffersEventFn); + }); + + _this.mediaSource.activeSourceBuffers.addEventListener(eventName, _this.activeSourceBuffersEventFn); + + _this.art.destroyEvents.push(function () { + _this.mediaSource.activeSourceBuffers.removeEventListener(eventName, _this.activeSourceBuffersEventFn); + }); + }); + } + }, { + key: "eventStart", + value: function eventStart() { + var _this2 = this; + + var option = this.art.option; + var sourceBuffer = mseConfig.sourceBuffer; + this.art.on('mediaSource:sourceopen', function () { + _this2.sourceBuffer = _this2.mediaSource.addSourceBuffer(option.mimeCodec); + sourceBuffer.events.forEach(function (eventName) { + _this2.sourceBuffer.addEventListener(eventName, _this2.sourceBufferEventFn); + + _this2.art.destroyEvents.push(function () { + _this2.sourceBuffer.removeEventListener(eventName, _this2.sourceBufferEventFn); + }); + }); + }); + this.art.on('sourceBuffer:updateend', function () { + _this2.mediaSource.endOfStream(); + }); + request(option.url).then(function (response) { + _this2.sourceBuffer.appendBuffer(response); + }); + } + }, { + key: "mediaSourceEventFn", + value: function mediaSourceEventFn(event) { + this.art.emit("mediaSource:".concat(event.type), event); + } + }, { + key: "sourceBufferEventFn", + value: function sourceBufferEventFn(event) { + this.art.emit("sourceBuffer:".concat(event.type), event); + } + }, { + key: "sourceBuffersEventFn", + value: function sourceBuffersEventFn(event) { + this.art.emit("sourceBuffers:".concat(event.type), event); + } + }, { + key: "activeSourceBuffersEventFn", + value: function activeSourceBuffersEventFn(event) { + this.art.emit("activeSourceBuffers:".concat(event.type), event); + } + }]); + + return Mse; + }(); + var Controls = function Controls(_ref) {// var option = _ref.option; @@ -470,6 +660,7 @@ this.template = new Template(this); this.i18n = new I18n(this); this.player = new Player(this); + this.mse = new Mse(this); this.controls = new Controls(this); this.contextmenu = new Contextmenu(this); this.danmaku = new Danmu(this); @@ -484,7 +675,7 @@ key: "destroy", value: function destroy() { this.destroyEvents.forEach(function (event) { - return event.destroy(); + return event(); }); this.refs.container.innerHTML = ''; instances.splice(instances.indexOf(this), 1); @@ -525,6 +716,8 @@ volume: 0.7, autoplay: false, preload: 'auto', + type: '', + mimeCodec: '', lang: navigator.language.toLowerCase() }; } diff --git a/docs/js/artplayer.js.map b/docs/js/artplayer.js.map index 9ac7a70d4..42ad19706 100644 --- a/docs/js/artplayer.js.map +++ b/docs/js/artplayer.js.map @@ -1 +1 @@ -{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../src/utils/ArtPlayerError.js","../../src/utils/index.js","../../src/utils/verification.js","../../node_modules/tiny-emitter/index.js","../../src/template.js","../../src/i18n/zh-CN.js","../../src/i18n/zh-TW.js","../../src/i18n/en.js","../../src/i18n/jp.js","../../src/i18n/index.js","../../src/player.js","../../src/controls/index.js","../../src/contextmenu.js","../../src/danmaku.js","../../src/info.js","../../src/subtitle.js","../../src/events.js","../../src/hotkey.js","../../src/index.js"],"sourcesContent":["function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeFunction = require(\"./isNativeFunction\");\n\nvar construct = require(\"./construct\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;","export default class ArtPlayerError extends Error {\n constructor(message) {\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.name = 'ArtPlayerError';\n }\n}\n","import ArtPlayerError from './ArtPlayerError';\n\nexport function errorHandle(condition, msg) {\n if (!condition) {\n throw new ArtPlayerError(msg);\n }\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n","import { errorHandle } from './index';\n\nexport default function verification(option) {\n errorHandle(\n option.container,\n '\\'container\\' option is required.'\n );\n\n errorHandle(\n option.url,\n '\\'url\\' option is required.'\n );\n\n errorHandle(\n option.container instanceof Element,\n `'container' option require 'Element' type, but got '${typeof option.container}'.`\n );\n\n errorHandle(\n typeof option.url === 'string',\n `'url' option require 'string' type, but got '${typeof option.url}'.`\n );\n\n errorHandle(\n typeof option.poster === 'string',\n `'poster' option require 'string' type, but got '${typeof option.poster}'.`\n );\n\n errorHandle(\n typeof option.volume === 'number',\n `'volume' option require 'number' type, but got '${typeof option.volume}'.`\n );\n\n errorHandle(\n typeof option.autoplay === 'boolean',\n `'autoplay' option require 'boolean' type, but got '${typeof option.autoplay}'.`\n );\n\n errorHandle(\n ['none', 'metadata', 'auto'].indexOf(option.preload) > -1,\n '\\'preload\\' option require one of \\'none、metadata、auto\\'.'\n );\n\n errorHandle(\n typeof option.lang === 'string',\n `'lang' option require 'string' type, but got '${typeof option.lang}'.`\n );\n\n}\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n","export default class Template {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n this.art.refs.$container.innerHTML = `\n
\n \n
\n
\n
\n
\n
\n `;\n this.art.refs.$wrap = this.art.refs.$container.querySelector(\n '.artplayer-wrap'\n );\n this.art.refs.$video = this.art.refs.$container.querySelector(\n '.artplayer-video'\n );\n this.art.refs.$controls = this.art.refs.$container.querySelector(\n '.artplayer-controls'\n );\n this.art.refs.$layers = this.art.refs.$container.querySelector(\n '.artplayer-layers'\n );\n this.art.refs.$loading = this.art.refs.$container.querySelector(\n '.artplayer-loading'\n );\n this.art.refs.$notice = this.art.refs.$container.querySelector(\n '.artplayer-notice'\n );\n }\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import ZHCN from './zh-CN';\nimport ZHTW from './zh-TW';\nimport EN from './en';\nimport JP from './jp';\n\nconst i18nMap = {\n zh: ZHCN,\n 'zh-cn': ZHCN,\n 'zh-tw': ZHTW,\n en: EN,\n jp: JP\n};\n\nexport default class I18n {\n constructor({ option }) {\n this.language = i18nMap[option.lang.toLowerCase()] || i18nMap.en;\n }\n\n get(key) {\n return this.language[key] || key;\n }\n}\n","import { clamp } from './utils';\n\nexport default class Player {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n const { option } = this.art;\n const { $video } = this.art.refs;\n $video.controls = false;\n $video.poster = option.poster;\n $video.volume = clamp(option.volume, 0, 1);\n $video.autoplay = option.autoplay;\n $video.preload = option.preload;\n $video.src = option.url;\n }\n}\n","export default class Controls {\n constructor({ option }) {\n //\n }\n}\n","export default class Contextmenu {\n constructor({ option }) {\n //\n }\n}\n","export default class Danmu {\n constructor({ option }) {\n //\n }\n}\n","export default class Info {\n constructor({ option }) {\n //\n }\n}\n","export default class Captions {\n constructor({ option }) {\n //\n }\n}\n","export default class Events {\n constructor({ option }) {\n //\n }\n}\n","export default class Hotkey {\n constructor({ option }) {\n //\n }\n}\n","import './style/index.scss';\nimport verification from './utils/verification';\nimport Emitter from 'tiny-emitter';\nimport Template from './template';\nimport I18n from './i18n';\nimport Player from './player';\nimport Controls from './controls';\nimport Contextmenu from './contextmenu';\nimport Danmaku from './danmaku';\nimport Info from './info';\nimport Subtitle from './subtitle';\nimport Events from './events';\nimport Hotkey from './hotkey';\n\nlet id = 0;\nexport const instances = [];\n\nclass Artplayer extends Emitter {\n constructor(option) {\n super();\n this.option = Object.assign({}, Artplayer.DEFAULTS, option);\n verification(this.option);\n this.init();\n }\n\n static get version() {\n return '__VERSION__';\n }\n\n static get DEFAULTS() {\n return {\n container: document.querySelector('.artplayer'),\n url: '',\n poster: '',\n volume: 0.7,\n autoplay: false,\n preload: 'auto',\n lang: navigator.language.toLowerCase()\n };\n }\n\n static use(plugin) {\n const installedPlugins = this.plugins || (this.plugins = []);\n if (installedPlugins.indexOf(plugin) > -1) {\n return this;\n }\n\n const args = Array.from(arguments).slice(1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this;\n }\n\n init() {\n this.refs = {\n $container: this.option.container\n };\n\n this.destroyEvents = [];\n\n this.template = new Template(this);\n this.i18n = new I18n(this);\n this.player = new Player(this);\n this.controls = new Controls(this);\n this.contextmenu = new Contextmenu(this);\n this.danmaku = new Danmaku(this);\n this.subtitle = new Subtitle(this);\n this.info = new Info(this);\n this.events = new Events(this);\n this.hotkey = new Hotkey(this);\n\n this.id = id++;\n instances.push(this);\n }\n\n destroy() {\n this.destroyEvents.forEach(event => event.destroy());\n this.refs.container.innerHTML = '';\n instances.splice(instances.indexOf(this), 1);\n }\n}\n\nwindow.Artplayer = Artplayer;\nexport default Artplayer;\n"],"names":["_typeof","ArtPlayerError","message","Error","captureStackTrace","constructor","name","errorHandle","condition","msg","clamp","num","a","b","Math","max","min","verification","option","container","url","Element","poster","volume","autoplay","indexOf","preload","lang","Template","art","init","refs","$container","innerHTML","$wrap","querySelector","$video","$controls","$layers","$loading","$notice","i18nMap","zh","ZHCN","ZHTW","en","EN","jp","JP","I18n","language","toLowerCase","key","Player","controls","src","Controls","Contextmenu","Danmu","Info","Captions","Events","Hotkey","id","instances","Artplayer","Object","assign","DEFAULTS","destroyEvents","template","i18n","player","contextmenu","danmaku","Danmaku","subtitle","Subtitle","info","events","hotkey","push","forEach","event","destroy","splice","plugin","installedPlugins","plugins","args","Array","from","arguments","slice","unshift","install","apply","document","navigator","Emitter","window"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../src/utils/ArtPlayerError.js","../../src/utils/index.js","../../src/utils/verification.js","../../node_modules/tiny-emitter/index.js","../../src/template.js","../../src/i18n/zh-CN.js","../../src/i18n/zh-TW.js","../../src/i18n/en.js","../../src/i18n/jp.js","../../src/i18n/index.js","../../src/utils/mediaElement.js","../../src/player.js","../../src/utils/mimeCodeces.js","../../src/utils/mseConfig.js","../../src/mse.js","../../src/controls/index.js","../../src/contextmenu.js","../../src/danmaku.js","../../src/info.js","../../src/subtitle.js","../../src/events.js","../../src/hotkey.js","../../src/index.js"],"sourcesContent":["function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeFunction = require(\"./isNativeFunction\");\n\nvar construct = require(\"./construct\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;","export default class ArtPlayerError extends Error {\n constructor(message) {\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.name = 'ArtPlayerError';\n }\n}\n","import ArtPlayerError from './ArtPlayerError';\n\nexport function errorHandle(condition, msg) {\n if (!condition) {\n throw new ArtPlayerError(msg);\n }\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n\nexport function request(url) {\n return fetch(url)\n .then(response => response.arrayBuffer())\n .catch(err => {\n throw new ArtPlayerError(err.message);\n });\n}\n","import { errorHandle } from './index';\n\nexport default function verification(option) {\n errorHandle(\n option.container,\n '\\'container\\' option is required.'\n );\n\n errorHandle(\n option.url,\n '\\'url\\' option is required.'\n );\n\n errorHandle(\n option.container instanceof Element,\n `'container' option require 'Element' type, but got '${typeof option.container}'.`\n );\n\n errorHandle(\n typeof option.url === 'string',\n `'url' option require 'string' type, but got '${typeof option.url}'.`\n );\n\n errorHandle(\n typeof option.poster === 'string',\n `'poster' option require 'string' type, but got '${typeof option.poster}'.`\n );\n\n errorHandle(\n typeof option.volume === 'number',\n `'volume' option require 'number' type, but got '${typeof option.volume}'.`\n );\n\n errorHandle(\n typeof option.autoplay === 'boolean',\n `'autoplay' option require 'boolean' type, but got '${typeof option.autoplay}'.`\n );\n\n errorHandle(\n ['none', 'metadata', 'auto'].indexOf(option.preload) > -1,\n '\\'preload\\' option require one of \\'none、metadata、auto\\'.'\n );\n\n errorHandle(\n typeof option.lang === 'string',\n `'lang' option require 'string' type, but got '${typeof option.lang}'.`\n );\n\n errorHandle(\n typeof option.type === 'string',\n `'type' option require 'string' type, but got '${typeof option.type}'.`\n );\n\n errorHandle(\n typeof option.mimeCodec === 'string',\n `'mimeCodec' option require 'string' type, but got '${typeof option.mimeCodec}'.`\n );\n\n}\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n","export default class Template {\n constructor(art) {\n this.art = art;\n this.init();\n }\n\n init() {\n this.art.refs.$container.innerHTML = `\n
\n \n
\n
\n
\n
\n
\n `;\n this.art.refs.$wrap = this.art.refs.$container.querySelector(\n '.artplayer-wrap'\n );\n this.art.refs.$video = this.art.refs.$container.querySelector(\n '.artplayer-video'\n );\n this.art.refs.$controls = this.art.refs.$container.querySelector(\n '.artplayer-controls'\n );\n this.art.refs.$layers = this.art.refs.$container.querySelector(\n '.artplayer-layers'\n );\n this.art.refs.$loading = this.art.refs.$container.querySelector(\n '.artplayer-loading'\n );\n this.art.refs.$notice = this.art.refs.$container.querySelector(\n '.artplayer-notice'\n );\n }\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import ZHCN from './zh-CN';\nimport ZHTW from './zh-TW';\nimport EN from './en';\nimport JP from './jp';\n\nconst i18nMap = {\n zh: ZHCN,\n 'zh-cn': ZHCN,\n 'zh-tw': ZHTW,\n en: EN,\n jp: JP\n};\n\nexport default class I18n {\n constructor({ option }) {\n this.language = i18nMap[option.lang.toLowerCase()] || i18nMap.en;\n }\n\n get(key) {\n return this.language[key] || key;\n }\n}\n","export default {\n propertys: [\n 'audioTracks',\n 'autoplay',\n 'buffered',\n 'controller',\n 'controls',\n 'crossOrigin',\n 'currentSrc',\n 'currentTime',\n 'defaultMuted',\n 'defaultPlaybackRate',\n 'duration',\n 'ended',\n 'error',\n 'loop',\n 'mediaGroup',\n 'muted',\n 'networkState',\n 'paused',\n 'playbackRate',\n 'played',\n 'preload',\n 'readyState',\n 'seekable',\n 'seeking',\n 'src',\n 'startDate',\n 'textTracks',\n 'videoTracks',\n 'volume'\n ],\n methods: [\n 'addTextTrack',\n 'canPlayType',\n 'load',\n 'play',\n 'pause'\n ],\n events: [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ]\n};\n","import { clamp } from './utils';\nimport mediaElement from './utils/mediaElement';\n\nexport default class Player {\n constructor(art) {\n this.art = art;\n this.eventFn = this.eventFn.bind(this);\n this.init();\n this.eventBind();\n }\n\n init() {\n const { option } = this.art;\n const { $video } = this.art.refs;\n $video.controls = true;\n $video.poster = option.poster;\n $video.volume = clamp(option.volume, 0, 1);\n $video.autoplay = option.autoplay;\n $video.preload = option.preload;\n }\n\n eventBind() {\n const { $video } = this.art.refs;\n const { events } = mediaElement;\n for (let index = 0; index < events.length; index++) {\n const eventName = events[index];\n $video.addEventListener(eventName, this.eventFn);\n this.art.destroyEvents.push(() => {\n $video.removeEventListener(eventName, this.eventFn);\n });\n }\n }\n\n eventFn(event) {\n this.art.emit(`video:${event.type}`, event);\n }\n}\n","export default {\n mp4: 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"',\n webm: 'video/webm; codecs=\"vorbis, vp8\"',\n ts: 'video/mp2t; codecs=\"avc1.42E01E, mp4a.40.2\"'\n};\n","export default {\n instance: {\n propertys: [\n 'activeSourceBuffers',\n 'duration',\n 'readyState',\n 'sourceBuffers'\n ],\n methods: [\n 'addSourceBuffer',\n 'endOfStream',\n 'removeSourceBuffer',\n 'clearLiveSeekableRange',\n 'setLiveSeekableRange'\n ],\n events: [\n 'sourceclose',\n 'sourceended',\n 'sourceopen'\n ]\n },\n sourceBuffer: {\n propertys: [\n 'mode',\n 'updating',\n 'buffered',\n 'timestampOffset',\n 'audioTracks',\n 'videoTracks',\n 'textTracks',\n 'appendWindowStart',\n 'appendWindowEnd',\n 'trackDefaults'\n ],\n methods: [\n 'appendBuffer',\n 'appendStream',\n 'abort',\n 'remove'\n ],\n events: [\n 'abort',\n 'error',\n 'update',\n 'updateend',\n 'updatestart'\n ]\n },\n sourceBufferList: {\n propertys: [\n 'length'\n ],\n events: [\n 'addsourcebuffer',\n 'removesourcebuffer'\n ]\n }\n};\n","import { errorHandle, request } from './utils';\nimport mimeCodeces from './utils/mimeCodeces';\nimport mseConfig from './utils/mseConfig';\n\nexport default class Mse {\n constructor(art) {\n this.art = art;\n this.setMimeCodec();\n this.mediaSourceEventFn = this.mediaSourceEventFn.bind(this);\n this.sourceBufferEventFn = this.sourceBufferEventFn.bind(this);\n this.sourceBuffersEventFn = this.sourceBuffersEventFn.bind(this);\n this.activeSourceBuffersEventFn = this.activeSourceBuffersEventFn.bind(this);\n this.init();\n this.eventBind();\n this.eventStart();\n }\n\n setMimeCodec() {\n const { option } = this.art;\n if (!option.type) {\n const urlArr = option.url\n .trim()\n .toLowerCase()\n .split('.');\n const type = urlArr[urlArr.length - 1];\n errorHandle(\n Object.keys(mimeCodeces).includes(type),\n `Can't find video's type from ${option.url}`\n );\n option.type = type;\n }\n\n if (!option.mimeCodec) {\n const mimeCodec = mimeCodeces[option.type];\n errorHandle(\n mimeCodec,\n `Can't find video's mimeCodec from ${option.type}`\n );\n option.mimeCodec = mimeCodec;\n }\n }\n\n init() {\n const {\n option,\n refs: { $video }\n } = this.art;\n errorHandle(\n MediaSource.isTypeSupported(option.mimeCodec),\n `Unsupported MIME type or codec: ${option.mimeCodec}`\n );\n this.mediaSource = new MediaSource();\n $video.src = URL.createObjectURL(this.mediaSource);\n this.art.destroyEvents.push(() => {\n URL.revokeObjectURL($video.src);\n });\n }\n\n eventBind() {\n const { instance, sourceBufferList } = mseConfig;\n\n instance.events.forEach(eventName => {\n this.mediaSource.addEventListener(eventName, this.mediaSourceEventFn);\n this.art.destroyEvents.push(() => {\n this.mediaSource.removeEventListener(eventName, this.mediaSourceEventFn);\n });\n });\n\n sourceBufferList.events.forEach(eventName => {\n this.mediaSource.sourceBuffers.addEventListener(eventName, this.sourceBuffersEventFn);\n this.art.destroyEvents.push(() => {\n this.mediaSource.sourceBuffers.removeEventListener(eventName, this.sourceBuffersEventFn);\n });\n\n this.mediaSource.activeSourceBuffers.addEventListener(eventName, this.activeSourceBuffersEventFn);\n this.art.destroyEvents.push(() => {\n this.mediaSource.activeSourceBuffers.removeEventListener(eventName, this.activeSourceBuffersEventFn);\n });\n });\n }\n\n eventStart() {\n const { option } = this.art;\n const { sourceBuffer } = mseConfig;\n\n this.art.on('mediaSource:sourceopen', () => {\n this.sourceBuffer = this.mediaSource.addSourceBuffer(option.mimeCodec);\n\n sourceBuffer.events.forEach(eventName => {\n this.sourceBuffer.addEventListener(eventName, this.sourceBufferEventFn);\n this.art.destroyEvents.push(() => {\n this.sourceBuffer.removeEventListener(eventName, this.sourceBufferEventFn);\n });\n });\n });\n\n this.art.on('sourceBuffer:updateend', () => {\n this.mediaSource.endOfStream();\n });\n\n request(option.url).then(response => {\n this.sourceBuffer.appendBuffer(response);\n });\n }\n\n mediaSourceEventFn(event) {\n this.art.emit(`mediaSource:${event.type}`, event);\n }\n\n sourceBufferEventFn(event) {\n this.art.emit(`sourceBuffer:${event.type}`, event);\n }\n\n sourceBuffersEventFn(event) {\n this.art.emit(`sourceBuffers:${event.type}`, event);\n }\n\n activeSourceBuffersEventFn(event) {\n this.art.emit(`activeSourceBuffers:${event.type}`, event);\n }\n}\n","export default class Controls {\n constructor({ option }) {\n //\n }\n}\n","export default class Contextmenu {\n constructor({ option }) {\n //\n }\n}\n","export default class Danmu {\n constructor({ option }) {\n //\n }\n}\n","export default class Info {\n constructor({ option }) {\n //\n }\n}\n","export default class Captions {\n constructor({ option }) {\n //\n }\n}\n","export default class Events {\n constructor({ option }) {\n //\n }\n}\n","export default class Hotkey {\n constructor({ option }) {\n //\n }\n}\n","import './style/index.scss';\nimport verification from './utils/verification';\nimport Emitter from 'tiny-emitter';\nimport Template from './template';\nimport I18n from './i18n';\nimport Player from './player';\nimport Mse from './mse';\nimport Controls from './controls';\nimport Contextmenu from './contextmenu';\nimport Danmaku from './danmaku';\nimport Info from './info';\nimport Subtitle from './subtitle';\nimport Events from './events';\nimport Hotkey from './hotkey';\n\nlet id = 0;\nexport const instances = [];\n\nclass Artplayer extends Emitter {\n constructor(option) {\n super();\n this.option = Object.assign({}, Artplayer.DEFAULTS, option);\n verification(this.option);\n this.init();\n }\n\n static get version() {\n return '__VERSION__';\n }\n\n static get DEFAULTS() {\n return {\n container: document.querySelector('.artplayer'),\n url: '',\n poster: '',\n volume: 0.7,\n autoplay: false,\n preload: 'auto',\n type: '',\n mimeCodec: '',\n lang: navigator.language.toLowerCase()\n };\n }\n\n static use(plugin) {\n const installedPlugins = this.plugins || (this.plugins = []);\n if (installedPlugins.indexOf(plugin) > -1) {\n return this;\n }\n\n const args = Array.from(arguments).slice(1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this;\n }\n\n init() {\n this.refs = {\n $container: this.option.container\n };\n\n this.destroyEvents = [];\n\n this.template = new Template(this);\n this.i18n = new I18n(this);\n this.player = new Player(this);\n this.mse = new Mse(this);\n this.controls = new Controls(this);\n this.contextmenu = new Contextmenu(this);\n this.danmaku = new Danmaku(this);\n this.subtitle = new Subtitle(this);\n this.info = new Info(this);\n this.events = new Events(this);\n this.hotkey = new Hotkey(this);\n\n this.id = id++;\n instances.push(this);\n }\n\n destroy() {\n this.destroyEvents.forEach(event => event());\n this.refs.container.innerHTML = '';\n instances.splice(instances.indexOf(this), 1);\n }\n}\n\nwindow.Artplayer = Artplayer;\nexport default Artplayer;\n"],"names":["_typeof","ArtPlayerError","message","Error","captureStackTrace","constructor","name","errorHandle","condition","msg","clamp","num","a","b","Math","max","min","request","url","fetch","then","response","arrayBuffer","catch","err","verification","option","container","Element","poster","volume","autoplay","indexOf","preload","lang","type","mimeCodec","Template","art","init","refs","$container","innerHTML","$wrap","querySelector","$video","$controls","$layers","$loading","$notice","i18nMap","zh","ZHCN","ZHTW","en","EN","jp","JP","I18n","language","toLowerCase","key","propertys","methods","events","Player","eventFn","bind","eventBind","controls","mediaElement","index","eventName","addEventListener","destroyEvents","push","removeEventListener","length","event","emit","mp4","webm","ts","instance","sourceBuffer","sourceBufferList","Mse","setMimeCodec","mediaSourceEventFn","sourceBufferEventFn","sourceBuffersEventFn","activeSourceBuffersEventFn","eventStart","urlArr","trim","split","Object","keys","mimeCodeces","includes","MediaSource","isTypeSupported","mediaSource","src","URL","createObjectURL","revokeObjectURL","mseConfig","forEach","sourceBuffers","activeSourceBuffers","on","addSourceBuffer","endOfStream","appendBuffer","Controls","Contextmenu","Danmu","Info","Captions","Events","Hotkey","id","instances","Artplayer","assign","DEFAULTS","template","i18n","player","mse","contextmenu","danmaku","Danmaku","subtitle","Subtitle","info","hotkey","splice","plugin","installedPlugins","plugins","args","Array","from","arguments","slice","unshift","install","apply","document","navigator","Emitter","window"],"mappings":"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"} \ No newline at end of file diff --git a/src/index.js b/src/index.js index 1fb563842..1f814ae99 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ import Emitter from 'tiny-emitter'; import Template from './template'; import I18n from './i18n'; import Player from './player'; +import Mse from './mse'; import Controls from './controls'; import Contextmenu from './contextmenu'; import Danmaku from './danmaku'; @@ -35,6 +36,8 @@ class Artplayer extends Emitter { volume: 0.7, autoplay: false, preload: 'auto', + type: '', + mimeCodec: '', lang: navigator.language.toLowerCase() }; } @@ -66,6 +69,7 @@ class Artplayer extends Emitter { this.template = new Template(this); this.i18n = new I18n(this); this.player = new Player(this); + this.mse = new Mse(this); this.controls = new Controls(this); this.contextmenu = new Contextmenu(this); this.danmaku = new Danmaku(this); @@ -79,7 +83,7 @@ class Artplayer extends Emitter { } destroy() { - this.destroyEvents.forEach(event => event.destroy()); + this.destroyEvents.forEach(event => event()); this.refs.container.innerHTML = ''; instances.splice(instances.indexOf(this), 1); } diff --git a/src/mse.js b/src/mse.js new file mode 100644 index 000000000..910364ffd --- /dev/null +++ b/src/mse.js @@ -0,0 +1,121 @@ +import { errorHandle, request } from './utils'; +import mimeCodeces from './utils/mimeCodeces'; +import mseConfig from './utils/mseConfig'; + +export default class Mse { + constructor(art) { + this.art = art; + this.setMimeCodec(); + this.mediaSourceEventFn = this.mediaSourceEventFn.bind(this); + this.sourceBufferEventFn = this.sourceBufferEventFn.bind(this); + this.sourceBuffersEventFn = this.sourceBuffersEventFn.bind(this); + this.activeSourceBuffersEventFn = this.activeSourceBuffersEventFn.bind(this); + this.init(); + this.eventBind(); + this.eventStart(); + } + + setMimeCodec() { + const { option } = this.art; + if (!option.type) { + const urlArr = option.url + .trim() + .toLowerCase() + .split('.'); + const type = urlArr[urlArr.length - 1]; + errorHandle( + Object.keys(mimeCodeces).includes(type), + `Can't find video's type from ${option.url}` + ); + option.type = type; + } + + if (!option.mimeCodec) { + const mimeCodec = mimeCodeces[option.type]; + errorHandle( + mimeCodec, + `Can't find video's mimeCodec from ${option.type}` + ); + option.mimeCodec = mimeCodec; + } + } + + init() { + const { + option, + refs: { $video } + } = this.art; + errorHandle( + MediaSource.isTypeSupported(option.mimeCodec), + `Unsupported MIME type or codec: ${option.mimeCodec}` + ); + this.mediaSource = new MediaSource(); + $video.src = URL.createObjectURL(this.mediaSource); + this.art.destroyEvents.push(() => { + URL.revokeObjectURL($video.src); + }); + } + + eventBind() { + const { instance, sourceBufferList } = mseConfig; + + instance.events.forEach(eventName => { + this.mediaSource.addEventListener(eventName, this.mediaSourceEventFn); + this.art.destroyEvents.push(() => { + this.mediaSource.removeEventListener(eventName, this.mediaSourceEventFn); + }); + }); + + sourceBufferList.events.forEach(eventName => { + this.mediaSource.sourceBuffers.addEventListener(eventName, this.sourceBuffersEventFn); + this.art.destroyEvents.push(() => { + this.mediaSource.sourceBuffers.removeEventListener(eventName, this.sourceBuffersEventFn); + }); + + this.mediaSource.activeSourceBuffers.addEventListener(eventName, this.activeSourceBuffersEventFn); + this.art.destroyEvents.push(() => { + this.mediaSource.activeSourceBuffers.removeEventListener(eventName, this.activeSourceBuffersEventFn); + }); + }); + } + + eventStart() { + const { option } = this.art; + const { sourceBuffer } = mseConfig; + + this.art.on('mediaSource:sourceopen', () => { + this.sourceBuffer = this.mediaSource.addSourceBuffer(option.mimeCodec); + + sourceBuffer.events.forEach(eventName => { + this.sourceBuffer.addEventListener(eventName, this.sourceBufferEventFn); + this.art.destroyEvents.push(() => { + this.sourceBuffer.removeEventListener(eventName, this.sourceBufferEventFn); + }); + }); + }); + + this.art.on('sourceBuffer:updateend', () => { + this.mediaSource.endOfStream(); + }); + + request(option.url).then(response => { + this.sourceBuffer.appendBuffer(response); + }); + } + + mediaSourceEventFn(event) { + this.art.emit(`mediaSource:${event.type}`, event); + } + + sourceBufferEventFn(event) { + this.art.emit(`sourceBuffer:${event.type}`, event); + } + + sourceBuffersEventFn(event) { + this.art.emit(`sourceBuffers:${event.type}`, event); + } + + activeSourceBuffersEventFn(event) { + this.art.emit(`activeSourceBuffers:${event.type}`, event); + } +} diff --git a/src/player.js b/src/player.js index 948cf4213..b65b0e330 100644 --- a/src/player.js +++ b/src/player.js @@ -1,19 +1,37 @@ import { clamp } from './utils'; +import mediaElement from './utils/mediaElement'; export default class Player { constructor(art) { this.art = art; + this.eventFn = this.eventFn.bind(this); this.init(); + this.eventBind(); } init() { const { option } = this.art; const { $video } = this.art.refs; - $video.controls = false; + $video.controls = true; $video.poster = option.poster; $video.volume = clamp(option.volume, 0, 1); $video.autoplay = option.autoplay; $video.preload = option.preload; - $video.src = option.url; + } + + eventBind() { + const { $video } = this.art.refs; + const { events } = mediaElement; + for (let index = 0; index < events.length; index++) { + const eventName = events[index]; + $video.addEventListener(eventName, this.eventFn); + this.art.destroyEvents.push(() => { + $video.removeEventListener(eventName, this.eventFn); + }); + } + } + + eventFn(event) { + this.art.emit(`video:${event.type}`, event); } } diff --git a/src/utils/index.js b/src/utils/index.js index c450fa012..af6e7ba30 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -9,3 +9,11 @@ export function errorHandle(condition, msg) { export function clamp(num, a, b) { return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); } + +export function request(url) { + return fetch(url) + .then(response => response.arrayBuffer()) + .catch(err => { + throw new ArtPlayerError(err.message); + }); +} diff --git a/src/utils/mediaElement.js b/src/utils/mediaElement.js new file mode 100644 index 000000000..c81308770 --- /dev/null +++ b/src/utils/mediaElement.js @@ -0,0 +1,64 @@ +export default { + propertys: [ + 'audioTracks', + 'autoplay', + 'buffered', + 'controller', + 'controls', + 'crossOrigin', + 'currentSrc', + 'currentTime', + 'defaultMuted', + 'defaultPlaybackRate', + 'duration', + 'ended', + 'error', + 'loop', + 'mediaGroup', + 'muted', + 'networkState', + 'paused', + 'playbackRate', + 'played', + 'preload', + 'readyState', + 'seekable', + 'seeking', + 'src', + 'startDate', + 'textTracks', + 'videoTracks', + 'volume' + ], + methods: [ + 'addTextTrack', + 'canPlayType', + 'load', + 'play', + 'pause' + ], + events: [ + 'abort', + 'canplay', + 'canplaythrough', + 'durationchange', + 'emptied', + 'ended', + 'error', + 'loadeddata', + 'loadedmetadata', + 'loadstart', + 'pause', + 'play', + 'playing', + 'progress', + 'ratechange', + 'seeked', + 'seeking', + 'stalled', + 'suspend', + 'timeupdate', + 'volumechange', + 'waiting' + ] +}; diff --git a/src/utils/mimeCodeces.js b/src/utils/mimeCodeces.js new file mode 100644 index 000000000..b2d2960b2 --- /dev/null +++ b/src/utils/mimeCodeces.js @@ -0,0 +1,5 @@ +export default { + mp4: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', + webm: 'video/webm; codecs="vorbis, vp8"', + ts: 'video/mp2t; codecs="avc1.42E01E, mp4a.40.2"' +}; diff --git a/src/utils/mseConfig.js b/src/utils/mseConfig.js new file mode 100644 index 000000000..03e64a754 --- /dev/null +++ b/src/utils/mseConfig.js @@ -0,0 +1,58 @@ +export default { + instance: { + propertys: [ + 'activeSourceBuffers', + 'duration', + 'readyState', + 'sourceBuffers' + ], + methods: [ + 'addSourceBuffer', + 'endOfStream', + 'removeSourceBuffer', + 'clearLiveSeekableRange', + 'setLiveSeekableRange' + ], + events: [ + 'sourceclose', + 'sourceended', + 'sourceopen' + ] + }, + sourceBuffer: { + propertys: [ + 'mode', + 'updating', + 'buffered', + 'timestampOffset', + 'audioTracks', + 'videoTracks', + 'textTracks', + 'appendWindowStart', + 'appendWindowEnd', + 'trackDefaults' + ], + methods: [ + 'appendBuffer', + 'appendStream', + 'abort', + 'remove' + ], + events: [ + 'abort', + 'error', + 'update', + 'updateend', + 'updatestart' + ] + }, + sourceBufferList: { + propertys: [ + 'length' + ], + events: [ + 'addsourcebuffer', + 'removesourcebuffer' + ] + } +}; diff --git a/src/utils/verification.js b/src/utils/verification.js index 77c498360..4505a48db 100644 --- a/src/utils/verification.js +++ b/src/utils/verification.js @@ -46,4 +46,14 @@ export default function verification(option) { `'lang' option require 'string' type, but got '${typeof option.lang}'.` ); + errorHandle( + typeof option.type === 'string', + `'type' option require 'string' type, but got '${typeof option.type}'.` + ); + + errorHandle( + typeof option.mimeCodec === 'string', + `'mimeCodec' option require 'string' type, but got '${typeof option.mimeCodec}'.` + ); + }