import { __commonJS } from "./chunk-A5ICIBVI.js"; // node_modules/flv.js/dist/flv.js var require_flv = __commonJS({ "node_modules/flv.js/dist/flv.js"(exports, module) { (function webpackUniversalModuleDefinition(root, factory) { if (typeof exports === "object" && typeof module === "object") module.exports = factory(); else if (typeof define === "function" && define.amd) define([], factory); else if (typeof exports === "object") exports["flvjs"] = factory(); else root["flvjs"] = factory(); })(self, function() { return function() { var __webpack_modules__ = { "./node_modules/es6-promise/dist/es6-promise.js": function(module2, __unused_webpack_exports, __webpack_require__2) { (function(global, factory) { true ? module2.exports = factory() : 0; })(this, function() { "use strict"; function objectOrFunction(x) { var type = typeof x; return x !== null && (type === "object" || type === "function"); } function isFunction(x) { return typeof x === "function"; } var _isArray = void 0; if (Array.isArray) { _isArray = Array.isArray; } else { _isArray = function(x) { return Object.prototype.toString.call(x) === "[object Array]"; }; } var isArray = _isArray; var len = 0; var vertxNext = void 0; var customSchedulerFn = void 0; var asap = function asap2(callback, arg) { queue[len] = callback; queue[len + 1] = arg; len += 2; if (len === 2) { if (customSchedulerFn) { customSchedulerFn(flush); } else { scheduleFlush(); } } }; function setScheduler(scheduleFn) { customSchedulerFn = scheduleFn; } function setAsap(asapFn) { asap = asapFn; } var browserWindow = typeof window !== "undefined" ? window : void 0; var browserGlobal = browserWindow || {}; var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var isNode = typeof self === "undefined" && typeof process !== "undefined" && {}.toString.call(process) === "[object process]"; var isWorker = typeof Uint8ClampedArray !== "undefined" && typeof importScripts !== "undefined" && typeof MessageChannel !== "undefined"; function useNextTick() { return function() { return process.nextTick(flush); }; } function useVertxTimer() { if (typeof vertxNext !== "undefined") { return function() { vertxNext(flush); }; } return useSetTimeout(); } function useMutationObserver() { var iterations = 0; var observer = new BrowserMutationObserver(flush); var node = document.createTextNode(""); observer.observe(node, { characterData: true }); return function() { node.data = iterations = ++iterations % 2; }; } function useMessageChannel() { var channel = new MessageChannel(); channel.port1.onmessage = flush; return function() { return channel.port2.postMessage(0); }; } function useSetTimeout() { var globalSetTimeout = setTimeout; return function() { return globalSetTimeout(flush, 1); }; } var queue = new Array(1e3); function flush() { for (var i = 0; i < len; i += 2) { var callback = queue[i]; var arg = queue[i + 1]; callback(arg); queue[i] = void 0; queue[i + 1] = void 0; } len = 0; } function attemptVertx() { try { var vertx = Function("return this")().require("vertx"); vertxNext = vertx.runOnLoop || vertx.runOnContext; return useVertxTimer(); } catch (e) { return useSetTimeout(); } } var scheduleFlush = void 0; if (isNode) { scheduleFlush = useNextTick(); } else if (BrowserMutationObserver) { scheduleFlush = useMutationObserver(); } else if (isWorker) { scheduleFlush = useMessageChannel(); } else if (browserWindow === void 0 && true) { scheduleFlush = attemptVertx(); } else { scheduleFlush = useSetTimeout(); } function then(onFulfillment, onRejection) { var parent = this; var child = new this.constructor(noop); if (child[PROMISE_ID] === void 0) { makePromise(child); } var _state = parent._state; if (_state) { var callback = arguments[_state - 1]; asap(function() { return invokeCallback(_state, child, callback, parent._result); }); } else { subscribe(parent, child, onFulfillment, onRejection); } return child; } function resolve$1(object) { var Constructor = this; if (object && typeof object === "object" && object.constructor === Constructor) { return object; } var promise = new Constructor(noop); resolve(promise, object); return promise; } var PROMISE_ID = Math.random().toString(36).substring(2); function noop() { } var PENDING = void 0; var FULFILLED = 1; var REJECTED = 2; function selfFulfillment() { return new TypeError("You cannot resolve a promise with itself"); } function cannotReturnOwn() { return new TypeError("A promises callback cannot return that same promise."); } function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { try { then$$1.call(value, fulfillmentHandler, rejectionHandler); } catch (e) { return e; } } function handleForeignThenable(promise, thenable, then$$1) { asap(function(promise2) { var sealed = false; var error = tryThen(then$$1, thenable, function(value) { if (sealed) { return; } sealed = true; if (thenable !== value) { resolve(promise2, value); } else { fulfill(promise2, value); } }, function(reason) { if (sealed) { return; } sealed = true; reject(promise2, reason); }, "Settle: " + (promise2._label || " unknown promise")); if (!sealed && error) { sealed = true; reject(promise2, error); } }, promise); } function handleOwnThenable(promise, thenable) { if (thenable._state === FULFILLED) { fulfill(promise, thenable._result); } else if (thenable._state === REJECTED) { reject(promise, thenable._result); } else { subscribe(thenable, void 0, function(value) { return resolve(promise, value); }, function(reason) { return reject(promise, reason); }); } } function handleMaybeThenable(promise, maybeThenable, then$$1) { if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { handleOwnThenable(promise, maybeThenable); } else { if (then$$1 === void 0) { fulfill(promise, maybeThenable); } else if (isFunction(then$$1)) { handleForeignThenable(promise, maybeThenable, then$$1); } else { fulfill(promise, maybeThenable); } } } function resolve(promise, value) { if (promise === value) { reject(promise, selfFulfillment()); } else if (objectOrFunction(value)) { var then$$1 = void 0; try { then$$1 = value.then; } catch (error) { reject(promise, error); return; } handleMaybeThenable(promise, value, then$$1); } else { fulfill(promise, value); } } function publishRejection(promise) { if (promise._onerror) { promise._onerror(promise._result); } publish(promise); } function fulfill(promise, value) { if (promise._state !== PENDING) { return; } promise._result = value; promise._state = FULFILLED; if (promise._subscribers.length !== 0) { asap(publish, promise); } } function reject(promise, reason) { if (promise._state !== PENDING) { return; } promise._state = REJECTED; promise._result = reason; asap(publishRejection, promise); } function subscribe(parent, child, onFulfillment, onRejection) { var _subscribers = parent._subscribers; var length = _subscribers.length; parent._onerror = null; _subscribers[length] = child; _subscribers[length + FULFILLED] = onFulfillment; _subscribers[length + REJECTED] = onRejection; if (length === 0 && parent._state) { asap(publish, parent); } } function publish(promise) { var subscribers = promise._subscribers; var settled = promise._state; if (subscribers.length === 0) { return; } var child = void 0, callback = void 0, detail = promise._result; for (var i = 0; i < subscribers.length; i += 3) { child = subscribers[i]; callback = subscribers[i + settled]; if (child) { invokeCallback(settled, child, callback, detail); } else { callback(detail); } } promise._subscribers.length = 0; } function invokeCallback(settled, promise, callback, detail) { var hasCallback = isFunction(callback), value = void 0, error = void 0, succeeded = true; if (hasCallback) { try { value = callback(detail); } catch (e) { succeeded = false; error = e; } if (promise === value) { reject(promise, cannotReturnOwn()); return; } } else { value = detail; } if (promise._state !== PENDING) { } else if (hasCallback && succeeded) { resolve(promise, value); } else if (succeeded === false) { reject(promise, error); } else if (settled === FULFILLED) { fulfill(promise, value); } else if (settled === REJECTED) { reject(promise, value); } } function initializePromise(promise, resolver) { try { resolver(function resolvePromise(value) { resolve(promise, value); }, function rejectPromise(reason) { reject(promise, reason); }); } catch (e) { reject(promise, e); } } var id = 0; function nextId() { return id++; } function makePromise(promise) { promise[PROMISE_ID] = id++; promise._state = void 0; promise._result = void 0; promise._subscribers = []; } function validationError() { return new Error("Array Methods must be provided an Array"); } var Enumerator = function() { function Enumerator2(Constructor, input) { this._instanceConstructor = Constructor; this.promise = new Constructor(noop); if (!this.promise[PROMISE_ID]) { makePromise(this.promise); } if (isArray(input)) { this.length = input.length; this._remaining = input.length; this._result = new Array(this.length); if (this.length === 0) { fulfill(this.promise, this._result); } else { this.length = this.length || 0; this._enumerate(input); if (this._remaining === 0) { fulfill(this.promise, this._result); } } } else { reject(this.promise, validationError()); } } Enumerator2.prototype._enumerate = function _enumerate(input) { for (var i = 0; this._state === PENDING && i < input.length; i++) { this._eachEntry(input[i], i); } }; Enumerator2.prototype._eachEntry = function _eachEntry(entry, i) { var c = this._instanceConstructor; var resolve$$1 = c.resolve; if (resolve$$1 === resolve$1) { var _then = void 0; var error = void 0; var didError = false; try { _then = entry.then; } catch (e) { didError = true; error = e; } if (_then === then && entry._state !== PENDING) { this._settledAt(entry._state, i, entry._result); } else if (typeof _then !== "function") { this._remaining--; this._result[i] = entry; } else if (c === Promise$1) { var promise = new c(noop); if (didError) { reject(promise, error); } else { handleMaybeThenable(promise, entry, _then); } this._willSettleAt(promise, i); } else { this._willSettleAt(new c(function(resolve$$12) { return resolve$$12(entry); }), i); } } else { this._willSettleAt(resolve$$1(entry), i); } }; Enumerator2.prototype._settledAt = function _settledAt(state, i, value) { var promise = this.promise; if (promise._state === PENDING) { this._remaining--; if (state === REJECTED) { reject(promise, value); } else { this._result[i] = value; } } if (this._remaining === 0) { fulfill(promise, this._result); } }; Enumerator2.prototype._willSettleAt = function _willSettleAt(promise, i) { var enumerator = this; subscribe(promise, void 0, function(value) { return enumerator._settledAt(FULFILLED, i, value); }, function(reason) { return enumerator._settledAt(REJECTED, i, reason); }); }; return Enumerator2; }(); function all(entries) { return new Enumerator(this, entries).promise; } function race(entries) { var Constructor = this; if (!isArray(entries)) { return new Constructor(function(_, reject2) { return reject2(new TypeError("You must pass an array to race.")); }); } else { return new Constructor(function(resolve2, reject2) { var length = entries.length; for (var i = 0; i < length; i++) { Constructor.resolve(entries[i]).then(resolve2, reject2); } }); } } function reject$1(reason) { var Constructor = this; var promise = new Constructor(noop); reject(promise, reason); return promise; } function needsResolver() { throw new TypeError("You must pass a resolver function as the first argument to the promise constructor"); } function needsNew() { throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); } var Promise$1 = function() { function Promise2(resolver) { this[PROMISE_ID] = nextId(); this._result = this._state = void 0; this._subscribers = []; if (noop !== resolver) { typeof resolver !== "function" && needsResolver(); this instanceof Promise2 ? initializePromise(this, resolver) : needsNew(); } } Promise2.prototype.catch = function _catch(onRejection) { return this.then(null, onRejection); }; Promise2.prototype.finally = function _finally(callback) { var promise = this; var constructor = promise.constructor; if (isFunction(callback)) { return promise.then(function(value) { return constructor.resolve(callback()).then(function() { return value; }); }, function(reason) { return constructor.resolve(callback()).then(function() { throw reason; }); }); } return promise.then(callback, callback); }; return Promise2; }(); Promise$1.prototype.then = then; Promise$1.all = all; Promise$1.race = race; Promise$1.resolve = resolve$1; Promise$1.reject = reject$1; Promise$1._setScheduler = setScheduler; Promise$1._setAsap = setAsap; Promise$1._asap = asap; function polyfill() { var local = void 0; if (typeof __webpack_require__2.g !== "undefined") { local = __webpack_require__2.g; } else if (typeof self !== "undefined") { local = self; } else { try { local = Function("return this")(); } catch (e) { throw new Error("polyfill failed because global object is unavailable in this environment"); } } var P = local.Promise; if (P) { var promiseToString = null; try { promiseToString = Object.prototype.toString.call(P.resolve()); } catch (e) { } if (promiseToString === "[object Promise]" && !P.cast) { return; } } local.Promise = Promise$1; } Promise$1.polyfill = polyfill; Promise$1.Promise = Promise$1; return Promise$1; }); }, "./node_modules/events/events.js": function(module2) { "use strict"; var R = typeof Reflect === "object" ? Reflect : null; var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply2(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; var ReflectOwnKeys; if (R && typeof R.ownKeys === "function") { ReflectOwnKeys = R.ownKeys; } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) { return value !== value; }; function EventEmitter() { EventEmitter.init.call(this); } module2.exports = EventEmitter; module2.exports.once = once; EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = void 0; EventEmitter.prototype._eventsCount = 0; EventEmitter.prototype._maxListeners = void 0; var defaultMaxListeners = 10; function checkListener(listener) { if (typeof listener !== "function") { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } } Object.defineProperty(EventEmitter, "defaultMaxListeners", { enumerable: true, get: function() { return defaultMaxListeners; }, set: function(arg) { if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + "."); } defaultMaxListeners = arg; } }); EventEmitter.init = function() { if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) { this._events = Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || void 0; }; EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + "."); } this._maxListeners = n; return this; }; function _getMaxListeners(that) { if (that._maxListeners === void 0) return EventEmitter.defaultMaxListeners; return that._maxListeners; } EventEmitter.prototype.getMaxListeners = function getMaxListeners() { return _getMaxListeners(this); }; EventEmitter.prototype.emit = function emit(type) { var args = []; for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); var doError = type === "error"; var events = this._events; if (events !== void 0) doError = doError && events.error === void 0; else if (!doError) return false; if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { throw er; } var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : "")); err.context = er; throw err; } var handler = events[type]; if (handler === void 0) return false; if (typeof handler === "function") { ReflectApply(handler, this, args); } else { var len = handler.length; var listeners = arrayClone(handler, len); for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args); } return true; }; function _addListener(target, type, listener, prepend) { var m; var events; var existing; checkListener(listener); events = target._events; if (events === void 0) { events = target._events = Object.create(null); target._eventsCount = 0; } else { if (events.newListener !== void 0) { target.emit("newListener", type, listener.listener ? listener.listener : listener); events = target._events; } existing = events[type]; } if (existing === void 0) { existing = events[type] = listener; ++target._eventsCount; } else { if (typeof existing === "function") { existing = events[type] = prepend ? [listener, existing] : [existing, listener]; } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } m = _getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit"); w.name = "MaxListenersExceededWarning"; w.emitter = target; w.type = type; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter.prototype.addListener = function addListener(type, listener) { return _addListener(this, type, listener, false); }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.prependListener = function prependListener(type, listener) { return _addListener(this, type, listener, true); }; function onceWrapper() { if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; if (arguments.length === 0) return this.listener.call(this.target); return this.listener.apply(this.target, arguments); } } function _onceWrap(target, type, listener) { var state = { fired: false, wrapFn: void 0, target, type, listener }; var wrapped = onceWrapper.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter.prototype.once = function once2(type, listener) { checkListener(listener); this.on(type, _onceWrap(this, type, listener)); return this; }; EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { checkListener(listener); this.prependListener(type, _onceWrap(this, type, listener)); return this; }; EventEmitter.prototype.removeListener = function removeListener(type, listener) { var list, events, position, i, originalListener; checkListener(listener); events = this._events; if (events === void 0) return this; list = events[type]; if (list === void 0) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = Object.create(null); else { delete events[type]; if (events.removeListener) this.emit("removeListener", type, list.listener || listener); } } else if (typeof list !== "function") { position = -1; for (i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { originalListener = list[i].listener; position = i; break; } } if (position < 0) return this; if (position === 0) list.shift(); else { spliceOne(list, position); } if (list.length === 1) events[type] = list[0]; if (events.removeListener !== void 0) this.emit("removeListener", type, originalListener || listener); } return this; }; EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { var listeners, events, i; events = this._events; if (events === void 0) return this; if (events.removeListener === void 0) { if (arguments.length === 0) { this._events = Object.create(null); this._eventsCount = 0; } else if (events[type] !== void 0) { if (--this._eventsCount === 0) this._events = Object.create(null); else delete events[type]; } return this; } if (arguments.length === 0) { var keys = Object.keys(events); var key; for (i = 0; i < keys.length; ++i) { key = keys[i]; if (key === "removeListener") continue; this.removeAllListeners(key); } this.removeAllListeners("removeListener"); this._events = Object.create(null); this._eventsCount = 0; return this; } listeners = events[type]; if (typeof listeners === "function") { this.removeListener(type, listeners); } else if (listeners !== void 0) { for (i = listeners.length - 1; i >= 0; i--) { this.removeListener(type, listeners[i]); } } return this; }; function _listeners(target, type, unwrap) { var events = target._events; if (events === void 0) return []; var evlistener = events[type]; if (evlistener === void 0) return []; if (typeof evlistener === "function") return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter.prototype.listeners = function listeners(type) { return _listeners(this, type, true); }; EventEmitter.prototype.rawListeners = function rawListeners(type) { return _listeners(this, type, false); }; EventEmitter.listenerCount = function(emitter, type) { if (typeof emitter.listenerCount === "function") { return emitter.listenerCount(type); } else { return listenerCount.call(emitter, type); } }; EventEmitter.prototype.listenerCount = listenerCount; function listenerCount(type) { var events = this._events; if (events !== void 0) { var evlistener = events[type]; if (typeof evlistener === "function") { return 1; } else if (evlistener !== void 0) { return evlistener.length; } } return 0; } EventEmitter.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) copy[i] = arr[i]; return copy; } function spliceOne(list, index) { for (; index + 1 < list.length; index++) list[index] = list[index + 1]; list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i = 0; i < ret.length; ++i) { ret[i] = arr[i].listener || arr[i]; } return ret; } function once(emitter, name) { return new Promise(function(resolve, reject) { function errorListener(err) { emitter.removeListener(name, resolver); reject(err); } function resolver() { if (typeof emitter.removeListener === "function") { emitter.removeListener("error", errorListener); } resolve([].slice.call(arguments)); } ; eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== "error") { addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); } }); } function addErrorHandlerIfEventEmitter(emitter, handler, flags) { if (typeof emitter.on === "function") { eventTargetAgnosticAddListener(emitter, "error", handler, flags); } } function eventTargetAgnosticAddListener(emitter, name, listener, flags) { if (typeof emitter.on === "function") { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === "function") { emitter.addEventListener(name, function wrapListener(arg) { if (flags.once) { emitter.removeEventListener(name, wrapListener); } listener(arg); }); } else { throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); } } }, "./node_modules/webworkify-webpack/index.js": function(module2, __unused_webpack_exports, __webpack_require__2) { function webpackBootstrapFunc(modules) { var installedModules = {}; function __nested_webpack_require_164__(moduleId) { if (installedModules[moduleId]) return installedModules[moduleId].exports; var module3 = installedModules[moduleId] = { i: moduleId, l: false, exports: {} }; modules[moduleId].call(module3.exports, module3, module3.exports, __nested_webpack_require_164__); module3.l = true; return module3.exports; } __nested_webpack_require_164__.m = modules; __nested_webpack_require_164__.c = installedModules; __nested_webpack_require_164__.i = function(value) { return value; }; __nested_webpack_require_164__.d = function(exports2, name, getter) { if (!__nested_webpack_require_164__.o(exports2, name)) { Object.defineProperty(exports2, name, { configurable: false, enumerable: true, get: getter }); } }; __nested_webpack_require_164__.r = function(exports2) { Object.defineProperty(exports2, "__esModule", { value: true }); }; __nested_webpack_require_164__.n = function(module3) { var getter = module3 && module3.__esModule ? function getDefault() { return module3["default"]; } : function getModuleExports() { return module3; }; __nested_webpack_require_164__.d(getter, "a", getter); return getter; }; __nested_webpack_require_164__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; __nested_webpack_require_164__.p = "/"; __nested_webpack_require_164__.oe = function(err) { console.error(err); throw err; }; var f = __nested_webpack_require_164__(__nested_webpack_require_164__.s = ENTRY_MODULE); return f.default || f; } var moduleNameReqExp = "[\\.|\\-|\\+|\\w|/|@]+"; var dependencyRegExp = "\\(\\s*(/\\*.*?\\*/)?\\s*.*?(" + moduleNameReqExp + ").*?\\)"; function quoteRegExp(str) { return (str + "").replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&"); } function isNumeric(n) { return !isNaN(1 * n); } function getModuleDependencies(sources, module3, queueName) { var retval = {}; retval[queueName] = []; var fnString = module3.toString(); var wrapperSignature = fnString.match(/^function\s?\w*\(\w+,\s*\w+,\s*(\w+)\)/); if (!wrapperSignature) return retval; var webpackRequireName = wrapperSignature[1]; var re = new RegExp("(\\\\n|\\W)" + quoteRegExp(webpackRequireName) + dependencyRegExp, "g"); var match; while (match = re.exec(fnString)) { if (match[3] === "dll-reference") continue; retval[queueName].push(match[3]); } re = new RegExp("\\(" + quoteRegExp(webpackRequireName) + '\\("(dll-reference\\s(' + moduleNameReqExp + '))"\\)\\)' + dependencyRegExp, "g"); while (match = re.exec(fnString)) { if (!sources[match[2]]) { retval[queueName].push(match[1]); sources[match[2]] = __webpack_require__2(match[1]).m; } retval[match[2]] = retval[match[2]] || []; retval[match[2]].push(match[4]); } var keys = Object.keys(retval); for (var i = 0; i < keys.length; i++) { for (var j = 0; j < retval[keys[i]].length; j++) { if (isNumeric(retval[keys[i]][j])) { retval[keys[i]][j] = 1 * retval[keys[i]][j]; } } } return retval; } function hasValuesInQueues(queues) { var keys = Object.keys(queues); return keys.reduce(function(hasValues, key) { return hasValues || queues[key].length > 0; }, false); } function getRequiredModules(sources, moduleId) { var modulesQueue = { main: [moduleId] }; var requiredModules = { main: [] }; var seenModules = { main: {} }; while (hasValuesInQueues(modulesQueue)) { var queues = Object.keys(modulesQueue); for (var i = 0; i < queues.length; i++) { var queueName = queues[i]; var queue = modulesQueue[queueName]; var moduleToCheck = queue.pop(); seenModules[queueName] = seenModules[queueName] || {}; if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue; seenModules[queueName][moduleToCheck] = true; requiredModules[queueName] = requiredModules[queueName] || []; requiredModules[queueName].push(moduleToCheck); var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName); var newModulesKeys = Object.keys(newModules); for (var j = 0; j < newModulesKeys.length; j++) { modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []; modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]]); } } } return requiredModules; } module2.exports = function(moduleId, options) { options = options || {}; var sources = { main: __webpack_require__2.m }; var requiredModules = options.all ? { main: Object.keys(sources.main) } : getRequiredModules(sources, moduleId); var src = ""; Object.keys(requiredModules).filter(function(m) { return m !== "main"; }).forEach(function(module3) { var entryModule = 0; while (requiredModules[module3][entryModule]) { entryModule++; } requiredModules[module3].push(entryModule); sources[module3][entryModule] = "(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })"; src = src + "var " + module3 + " = (" + webpackBootstrapFunc.toString().replace("ENTRY_MODULE", JSON.stringify(entryModule)) + ")({" + requiredModules[module3].map(function(id) { return "" + JSON.stringify(id) + ": " + sources[module3][id].toString(); }).join(",") + "});\n"; }); src = src + "new ((" + webpackBootstrapFunc.toString().replace("ENTRY_MODULE", JSON.stringify(moduleId)) + ")({" + requiredModules.main.map(function(id) { return "" + JSON.stringify(id) + ": " + sources.main[id].toString(); }).join(",") + "}))(self);"; var blob = new window.Blob([src], { type: "text/javascript" }); if (options.bare) { return blob; } var URL = window.URL || window.webkitURL || window.mozURL || window.msURL; var workerUrl = URL.createObjectURL(blob); var worker = new window.Worker(workerUrl); worker.objectURL = workerUrl; return worker; }; }, "./src/config.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "defaultConfig": function() { return defaultConfig; }, "createDefaultConfig": function() { return createDefaultConfig; } }); var defaultConfig = { enableWorker: false, enableStashBuffer: true, stashInitialSize: void 0, isLive: false, lazyLoad: true, lazyLoadMaxDuration: 3 * 60, lazyLoadRecoverDuration: 30, deferLoadAfterSourceOpen: true, autoCleanupMaxBackwardDuration: 3 * 60, autoCleanupMinBackwardDuration: 2 * 60, statisticsInfoReportInterval: 600, fixAudioTimestampGap: true, accurateSeek: false, seekType: "range", seekParamStart: "bstart", seekParamEnd: "bend", rangeLoadZeroStart: false, customSeekHandler: void 0, reuseRedirectedURL: false, headers: void 0, customLoader: void 0 }; function createDefaultConfig() { return Object.assign({}, defaultConfig); } }, "./src/core/features.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _io_io_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/io/io-controller.js"); var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/config.js"); var Features = function() { function Features2() { } Features2.supportMSEH264Playback = function() { return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'); }; Features2.supportNetworkStreamIO = function() { var ioctl = new _io_io_controller_js__WEBPACK_IMPORTED_MODULE_0__.default({}, (0, _config_js__WEBPACK_IMPORTED_MODULE_1__.createDefaultConfig)()); var loaderType = ioctl.loaderType; ioctl.destroy(); return loaderType == "fetch-stream-loader" || loaderType == "xhr-moz-chunked-loader"; }; Features2.getNetworkLoaderTypeName = function() { var ioctl = new _io_io_controller_js__WEBPACK_IMPORTED_MODULE_0__.default({}, (0, _config_js__WEBPACK_IMPORTED_MODULE_1__.createDefaultConfig)()); var loaderType = ioctl.loaderType; ioctl.destroy(); return loaderType; }; Features2.supportNativeMediaPlayback = function(mimeType) { if (Features2.videoElement == void 0) { Features2.videoElement = window.document.createElement("video"); } var canPlay = Features2.videoElement.canPlayType(mimeType); return canPlay === "probably" || canPlay == "maybe"; }; Features2.getFeatureList = function() { var features = { mseFlvPlayback: false, mseLiveFlvPlayback: false, networkStreamIO: false, networkLoaderName: "", nativeMP4H264Playback: false, nativeWebmVP8Playback: false, nativeWebmVP9Playback: false }; features.mseFlvPlayback = Features2.supportMSEH264Playback(); features.networkStreamIO = Features2.supportNetworkStreamIO(); features.networkLoaderName = Features2.getNetworkLoaderTypeName(); features.mseLiveFlvPlayback = features.mseFlvPlayback && features.networkStreamIO; features.nativeMP4H264Playback = Features2.supportNativeMediaPlayback('video/mp4; codecs="avc1.42001E, mp4a.40.2"'); features.nativeWebmVP8Playback = Features2.supportNativeMediaPlayback('video/webm; codecs="vp8.0, vorbis"'); features.nativeWebmVP9Playback = Features2.supportNativeMediaPlayback('video/webm; codecs="vp9"'); return features; }; return Features2; }(); __webpack_exports__2["default"] = Features; }, "./src/core/media-info.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var MediaInfo = function() { function MediaInfo2() { this.mimeType = null; this.duration = null; this.hasAudio = null; this.hasVideo = null; this.audioCodec = null; this.videoCodec = null; this.audioDataRate = null; this.videoDataRate = null; this.audioSampleRate = null; this.audioChannelCount = null; this.width = null; this.height = null; this.fps = null; this.profile = null; this.level = null; this.refFrames = null; this.chromaFormat = null; this.sarNum = null; this.sarDen = null; this.metadata = null; this.segments = null; this.segmentCount = null; this.hasKeyframesIndex = null; this.keyframesIndex = null; } MediaInfo2.prototype.isComplete = function() { var audioInfoComplete = this.hasAudio === false || this.hasAudio === true && this.audioCodec != null && this.audioSampleRate != null && this.audioChannelCount != null; var videoInfoComplete = this.hasVideo === false || this.hasVideo === true && this.videoCodec != null && this.width != null && this.height != null && this.fps != null && this.profile != null && this.level != null && this.refFrames != null && this.chromaFormat != null && this.sarNum != null && this.sarDen != null; return this.mimeType != null && this.duration != null && this.metadata != null && this.hasKeyframesIndex != null && audioInfoComplete && videoInfoComplete; }; MediaInfo2.prototype.isSeekable = function() { return this.hasKeyframesIndex === true; }; MediaInfo2.prototype.getNearestKeyframe = function(milliseconds) { if (this.keyframesIndex == null) { return null; } var table = this.keyframesIndex; var keyframeIdx = this._search(table.times, milliseconds); return { index: keyframeIdx, milliseconds: table.times[keyframeIdx], fileposition: table.filepositions[keyframeIdx] }; }; MediaInfo2.prototype._search = function(list, value) { var idx = 0; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (value < list[0]) { idx = 0; lbound = ubound + 1; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || value >= list[mid] && value < list[mid + 1]) { idx = mid; break; } else if (list[mid] < value) { lbound = mid + 1; } else { ubound = mid - 1; } } return idx; }; return MediaInfo2; }(); __webpack_exports__2["default"] = MediaInfo; }, "./src/core/media-segment-info.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "SampleInfo": function() { return SampleInfo; }, "MediaSegmentInfo": function() { return MediaSegmentInfo; }, "IDRSampleList": function() { return IDRSampleList; }, "MediaSegmentInfoList": function() { return MediaSegmentInfoList; } }); var SampleInfo = function() { function SampleInfo2(dts, pts, duration, originalDts, isSync) { this.dts = dts; this.pts = pts; this.duration = duration; this.originalDts = originalDts; this.isSyncPoint = isSync; this.fileposition = null; } return SampleInfo2; }(); var MediaSegmentInfo = function() { function MediaSegmentInfo2() { this.beginDts = 0; this.endDts = 0; this.beginPts = 0; this.endPts = 0; this.originalBeginDts = 0; this.originalEndDts = 0; this.syncPoints = []; this.firstSample = null; this.lastSample = null; } MediaSegmentInfo2.prototype.appendSyncPoint = function(sampleInfo) { sampleInfo.isSyncPoint = true; this.syncPoints.push(sampleInfo); }; return MediaSegmentInfo2; }(); var IDRSampleList = function() { function IDRSampleList2() { this._list = []; } IDRSampleList2.prototype.clear = function() { this._list = []; }; IDRSampleList2.prototype.appendArray = function(syncPoints) { var list = this._list; if (syncPoints.length === 0) { return; } if (list.length > 0 && syncPoints[0].originalDts < list[list.length - 1].originalDts) { this.clear(); } Array.prototype.push.apply(list, syncPoints); }; IDRSampleList2.prototype.getLastSyncPointBeforeDts = function(dts) { if (this._list.length == 0) { return null; } var list = this._list; var idx = 0; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (dts < list[0].dts) { idx = 0; lbound = ubound + 1; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || dts >= list[mid].dts && dts < list[mid + 1].dts) { idx = mid; break; } else if (list[mid].dts < dts) { lbound = mid + 1; } else { ubound = mid - 1; } } return this._list[idx]; }; return IDRSampleList2; }(); var MediaSegmentInfoList = function() { function MediaSegmentInfoList2(type) { this._type = type; this._list = []; this._lastAppendLocation = -1; } Object.defineProperty(MediaSegmentInfoList2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(MediaSegmentInfoList2.prototype, "length", { get: function() { return this._list.length; }, enumerable: false, configurable: true }); MediaSegmentInfoList2.prototype.isEmpty = function() { return this._list.length === 0; }; MediaSegmentInfoList2.prototype.clear = function() { this._list = []; this._lastAppendLocation = -1; }; MediaSegmentInfoList2.prototype._searchNearestSegmentBefore = function(originalBeginDts) { var list = this._list; if (list.length === 0) { return -2; } var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; var idx = 0; if (originalBeginDts < list[0].originalBeginDts) { idx = -1; return idx; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || originalBeginDts > list[mid].lastSample.originalDts && originalBeginDts < list[mid + 1].originalBeginDts) { idx = mid; break; } else if (list[mid].originalBeginDts < originalBeginDts) { lbound = mid + 1; } else { ubound = mid - 1; } } return idx; }; MediaSegmentInfoList2.prototype._searchNearestSegmentAfter = function(originalBeginDts) { return this._searchNearestSegmentBefore(originalBeginDts) + 1; }; MediaSegmentInfoList2.prototype.append = function(mediaSegmentInfo) { var list = this._list; var msi = mediaSegmentInfo; var lastAppendIdx = this._lastAppendLocation; var insertIdx = 0; if (lastAppendIdx !== -1 && lastAppendIdx < list.length && msi.originalBeginDts >= list[lastAppendIdx].lastSample.originalDts && (lastAppendIdx === list.length - 1 || lastAppendIdx < list.length - 1 && msi.originalBeginDts < list[lastAppendIdx + 1].originalBeginDts)) { insertIdx = lastAppendIdx + 1; } else { if (list.length > 0) { insertIdx = this._searchNearestSegmentBefore(msi.originalBeginDts) + 1; } } this._lastAppendLocation = insertIdx; this._list.splice(insertIdx, 0, msi); }; MediaSegmentInfoList2.prototype.getLastSegmentBefore = function(originalBeginDts) { var idx = this._searchNearestSegmentBefore(originalBeginDts); if (idx >= 0) { return this._list[idx]; } else { return null; } }; MediaSegmentInfoList2.prototype.getLastSampleBefore = function(originalBeginDts) { var segment = this.getLastSegmentBefore(originalBeginDts); if (segment != null) { return segment.lastSample; } else { return null; } }; MediaSegmentInfoList2.prototype.getLastSyncPointBefore = function(originalBeginDts) { var segmentIdx = this._searchNearestSegmentBefore(originalBeginDts); var syncPoints = this._list[segmentIdx].syncPoints; while (syncPoints.length === 0 && segmentIdx > 0) { segmentIdx--; syncPoints = this._list[segmentIdx].syncPoints; } if (syncPoints.length > 0) { return syncPoints[syncPoints.length - 1]; } else { return null; } }; return MediaSegmentInfoList2; }(); }, "./src/core/mse-controller.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/browser.js"); var _mse_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/core/mse-events.js"); var _media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/media-segment-info.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/utils/exception.js"); var MSEController = function() { function MSEController2(config) { this.TAG = "MSEController"; this._config = config; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); if (this._config.isLive && this._config.autoCleanupSourceBuffer == void 0) { this._config.autoCleanupSourceBuffer = true; } this.e = { onSourceOpen: this._onSourceOpen.bind(this), onSourceEnded: this._onSourceEnded.bind(this), onSourceClose: this._onSourceClose.bind(this), onSourceBufferError: this._onSourceBufferError.bind(this), onSourceBufferUpdateEnd: this._onSourceBufferUpdateEnd.bind(this) }; this._mediaSource = null; this._mediaSourceObjectURL = null; this._mediaElement = null; this._isBufferFull = false; this._hasPendingEos = false; this._requireSetMediaDuration = false; this._pendingMediaDuration = 0; this._pendingSourceBufferInit = []; this._mimeTypes = { video: null, audio: null }; this._sourceBuffers = { video: null, audio: null }; this._lastInitSegments = { video: null, audio: null }; this._pendingSegments = { video: [], audio: [] }; this._pendingRemoveRanges = { video: [], audio: [] }; this._idrList = new _media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.IDRSampleList(); } MSEController2.prototype.destroy = function() { if (this._mediaElement || this._mediaSource) { this.detachMediaElement(); } this.e = null; this._emitter.removeAllListeners(); this._emitter = null; }; MSEController2.prototype.on = function(event, listener) { this._emitter.addListener(event, listener); }; MSEController2.prototype.off = function(event, listener) { this._emitter.removeListener(event, listener); }; MSEController2.prototype.attachMediaElement = function(mediaElement) { if (this._mediaSource) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("MediaSource has been attached to an HTMLMediaElement!"); } var ms = this._mediaSource = new window.MediaSource(); ms.addEventListener("sourceopen", this.e.onSourceOpen); ms.addEventListener("sourceended", this.e.onSourceEnded); ms.addEventListener("sourceclose", this.e.onSourceClose); this._mediaElement = mediaElement; this._mediaSourceObjectURL = window.URL.createObjectURL(this._mediaSource); mediaElement.src = this._mediaSourceObjectURL; }; MSEController2.prototype.detachMediaElement = function() { if (this._mediaSource) { var ms = this._mediaSource; for (var type in this._sourceBuffers) { var ps = this._pendingSegments[type]; ps.splice(0, ps.length); this._pendingSegments[type] = null; this._pendingRemoveRanges[type] = null; this._lastInitSegments[type] = null; var sb = this._sourceBuffers[type]; if (sb) { if (ms.readyState !== "closed") { try { ms.removeSourceBuffer(sb); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); } sb.removeEventListener("error", this.e.onSourceBufferError); sb.removeEventListener("updateend", this.e.onSourceBufferUpdateEnd); } this._mimeTypes[type] = null; this._sourceBuffers[type] = null; } } if (ms.readyState === "open") { try { ms.endOfStream(); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); } } ms.removeEventListener("sourceopen", this.e.onSourceOpen); ms.removeEventListener("sourceended", this.e.onSourceEnded); ms.removeEventListener("sourceclose", this.e.onSourceClose); this._pendingSourceBufferInit = []; this._isBufferFull = false; this._idrList.clear(); this._mediaSource = null; } if (this._mediaElement) { this._mediaElement.src = ""; this._mediaElement.removeAttribute("src"); this._mediaElement = null; } if (this._mediaSourceObjectURL) { window.URL.revokeObjectURL(this._mediaSourceObjectURL); this._mediaSourceObjectURL = null; } }; MSEController2.prototype.appendInitSegment = function(initSegment, deferred) { if (!this._mediaSource || this._mediaSource.readyState !== "open") { this._pendingSourceBufferInit.push(initSegment); this._pendingSegments[initSegment.type].push(initSegment); return; } var is = initSegment; var mimeType = "" + is.container; if (is.codec && is.codec.length > 0) { mimeType += ";codecs=" + is.codec; } var firstInitSegment = false; _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Received Initialization Segment, mimeType: " + mimeType); this._lastInitSegments[is.type] = is; if (mimeType !== this._mimeTypes[is.type]) { if (!this._mimeTypes[is.type]) { firstInitSegment = true; try { var sb = this._sourceBuffers[is.type] = this._mediaSource.addSourceBuffer(mimeType); sb.addEventListener("error", this.e.onSourceBufferError); sb.addEventListener("updateend", this.e.onSourceBufferUpdateEnd); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, { code: error.code, msg: error.message }); return; } } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Notice: " + is.type + " mimeType changed, origin: " + this._mimeTypes[is.type] + ", target: " + mimeType); } this._mimeTypes[is.type] = mimeType; } if (!deferred) { this._pendingSegments[is.type].push(is); } if (!firstInitSegment) { if (this._sourceBuffers[is.type] && !this._sourceBuffers[is.type].updating) { this._doAppendSegments(); } } if (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari && is.container === "audio/mpeg" && is.mediaDuration > 0) { this._requireSetMediaDuration = true; this._pendingMediaDuration = is.mediaDuration / 1e3; this._updateMediaSourceDuration(); } }; MSEController2.prototype.appendMediaSegment = function(mediaSegment) { var ms = mediaSegment; this._pendingSegments[ms.type].push(ms); if (this._config.autoCleanupSourceBuffer && this._needCleanupSourceBuffer()) { this._doCleanupSourceBuffer(); } var sb = this._sourceBuffers[ms.type]; if (sb && !sb.updating && !this._hasPendingRemoveRanges()) { this._doAppendSegments(); } }; MSEController2.prototype.seek = function(seconds) { for (var type in this._sourceBuffers) { if (!this._sourceBuffers[type]) { continue; } var sb = this._sourceBuffers[type]; if (this._mediaSource.readyState === "open") { try { sb.abort(); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); } } this._idrList.clear(); var ps = this._pendingSegments[type]; ps.splice(0, ps.length); if (this._mediaSource.readyState === "closed") { continue; } for (var i = 0; i < sb.buffered.length; i++) { var start = sb.buffered.start(i); var end = sb.buffered.end(i); this._pendingRemoveRanges[type].push({ start, end }); } if (!sb.updating) { this._doRemoveRanges(); } if (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari) { var lastInitSegment = this._lastInitSegments[type]; if (lastInitSegment) { this._pendingSegments[type].push(lastInitSegment); if (!sb.updating) { this._doAppendSegments(); } } } } }; MSEController2.prototype.endOfStream = function() { var ms = this._mediaSource; var sb = this._sourceBuffers; if (!ms || ms.readyState !== "open") { if (ms && ms.readyState === "closed" && this._hasPendingSegments()) { this._hasPendingEos = true; } return; } if (sb.video && sb.video.updating || sb.audio && sb.audio.updating) { this._hasPendingEos = true; } else { this._hasPendingEos = false; ms.endOfStream(); } }; MSEController2.prototype.getNearestKeyframe = function(dts) { return this._idrList.getLastSyncPointBeforeDts(dts); }; MSEController2.prototype._needCleanupSourceBuffer = function() { if (!this._config.autoCleanupSourceBuffer) { return false; } var currentTime = this._mediaElement.currentTime; for (var type in this._sourceBuffers) { var sb = this._sourceBuffers[type]; if (sb) { var buffered = sb.buffered; if (buffered.length >= 1) { if (currentTime - buffered.start(0) >= this._config.autoCleanupMaxBackwardDuration) { return true; } } } } return false; }; MSEController2.prototype._doCleanupSourceBuffer = function() { var currentTime = this._mediaElement.currentTime; for (var type in this._sourceBuffers) { var sb = this._sourceBuffers[type]; if (sb) { var buffered = sb.buffered; var doRemove = false; for (var i = 0; i < buffered.length; i++) { var start = buffered.start(i); var end = buffered.end(i); if (start <= currentTime && currentTime < end + 3) { if (currentTime - start >= this._config.autoCleanupMaxBackwardDuration) { doRemove = true; var removeEnd = currentTime - this._config.autoCleanupMinBackwardDuration; this._pendingRemoveRanges[type].push({ start, end: removeEnd }); } } else if (end < currentTime) { doRemove = true; this._pendingRemoveRanges[type].push({ start, end }); } } if (doRemove && !sb.updating) { this._doRemoveRanges(); } } } }; MSEController2.prototype._updateMediaSourceDuration = function() { var sb = this._sourceBuffers; if (this._mediaElement.readyState === 0 || this._mediaSource.readyState !== "open") { return; } if (sb.video && sb.video.updating || sb.audio && sb.audio.updating) { return; } var current = this._mediaSource.duration; var target = this._pendingMediaDuration; if (target > 0 && (isNaN(current) || target > current)) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Update MediaSource duration from " + current + " to " + target); this._mediaSource.duration = target; } this._requireSetMediaDuration = false; this._pendingMediaDuration = 0; }; MSEController2.prototype._doRemoveRanges = function() { for (var type in this._pendingRemoveRanges) { if (!this._sourceBuffers[type] || this._sourceBuffers[type].updating) { continue; } var sb = this._sourceBuffers[type]; var ranges = this._pendingRemoveRanges[type]; while (ranges.length && !sb.updating) { var range = ranges.shift(); sb.remove(range.start, range.end); } } }; MSEController2.prototype._doAppendSegments = function() { var pendingSegments = this._pendingSegments; for (var type in pendingSegments) { if (!this._sourceBuffers[type] || this._sourceBuffers[type].updating) { continue; } if (pendingSegments[type].length > 0) { var segment = pendingSegments[type].shift(); if (segment.timestampOffset) { var currentOffset = this._sourceBuffers[type].timestampOffset; var targetOffset = segment.timestampOffset / 1e3; var delta = Math.abs(currentOffset - targetOffset); if (delta > 0.1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Update MPEG audio timestampOffset from " + currentOffset + " to " + targetOffset); this._sourceBuffers[type].timestampOffset = targetOffset; } delete segment.timestampOffset; } if (!segment.data || segment.data.byteLength === 0) { continue; } try { this._sourceBuffers[type].appendBuffer(segment.data); this._isBufferFull = false; if (type === "video" && segment.hasOwnProperty("info")) { this._idrList.appendArray(segment.info.syncPoints); } } catch (error) { this._pendingSegments[type].unshift(segment); if (error.code === 22) { if (!this._isBufferFull) { this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.BUFFER_FULL); } this._isBufferFull = true; } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, { code: error.code, msg: error.message }); } } } } }; MSEController2.prototype._onSourceOpen = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MediaSource onSourceOpen"); this._mediaSource.removeEventListener("sourceopen", this.e.onSourceOpen); if (this._pendingSourceBufferInit.length > 0) { var pendings = this._pendingSourceBufferInit; while (pendings.length) { var segment = pendings.shift(); this.appendInitSegment(segment, true); } } if (this._hasPendingSegments()) { this._doAppendSegments(); } this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SOURCE_OPEN); }; MSEController2.prototype._onSourceEnded = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MediaSource onSourceEnded"); }; MSEController2.prototype._onSourceClose = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MediaSource onSourceClose"); if (this._mediaSource && this.e != null) { this._mediaSource.removeEventListener("sourceopen", this.e.onSourceOpen); this._mediaSource.removeEventListener("sourceended", this.e.onSourceEnded); this._mediaSource.removeEventListener("sourceclose", this.e.onSourceClose); } }; MSEController2.prototype._hasPendingSegments = function() { var ps = this._pendingSegments; return ps.video.length > 0 || ps.audio.length > 0; }; MSEController2.prototype._hasPendingRemoveRanges = function() { var prr = this._pendingRemoveRanges; return prr.video.length > 0 || prr.audio.length > 0; }; MSEController2.prototype._onSourceBufferUpdateEnd = function() { if (this._requireSetMediaDuration) { this._updateMediaSourceDuration(); } else if (this._hasPendingRemoveRanges()) { this._doRemoveRanges(); } else if (this._hasPendingSegments()) { this._doAppendSegments(); } else if (this._hasPendingEos) { this.endOfStream(); } this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.UPDATE_END); }; MSEController2.prototype._onSourceBufferError = function(e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "SourceBuffer Error: " + e); }; return MSEController2; }(); __webpack_exports__2["default"] = MSEController; }, "./src/core/mse-events.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var MSEEvents = { ERROR: "error", SOURCE_OPEN: "source_open", UPDATE_END: "update_end", BUFFER_FULL: "buffer_full" }; __webpack_exports__2["default"] = MSEEvents; }, "./src/core/transmuxer.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var webworkify_webpack__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./node_modules/webworkify-webpack/index.js"); var webworkify_webpack__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__2.n(webworkify_webpack__WEBPACK_IMPORTED_MODULE_1__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/logger.js"); var _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/logging-control.js"); var _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/transmuxing-controller.js"); var _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/core/transmuxing-events.js"); var _media_info_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/core/media-info.js"); var Transmuxer = function() { function Transmuxer2(mediaDataSource, config) { this.TAG = "Transmuxer"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); if (config.enableWorker && typeof Worker !== "undefined") { try { this._worker = webworkify_webpack__WEBPACK_IMPORTED_MODULE_1___default()("./src/core/transmuxing-worker.js"); this._workerDestroying = false; this._worker.addEventListener("message", this._onWorkerMessage.bind(this)); this._worker.postMessage({ cmd: "init", param: [mediaDataSource, config] }); this.e = { onLoggingConfigChanged: this._onLoggingConfigChanged.bind(this) }; _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__.default.registerListener(this.e.onLoggingConfigChanged); this._worker.postMessage({ cmd: "logging_config", param: _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__.default.getConfig() }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__.default.e(this.TAG, "Error while initialize transmuxing worker, fallback to inline transmuxing"); this._worker = null; this._controller = new _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_4__.default(mediaDataSource, config); } } else { this._controller = new _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_4__.default(mediaDataSource, config); } if (this._controller) { var ctl = this._controller; ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR, this._onIOError.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR, this._onDemuxError.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT, this._onInitSegment.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT, this._onMediaSegment.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE, this._onLoadingComplete.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF, this._onRecoveredEarlyEof.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO, this._onMediaInfo.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED, this._onMetaDataArrived.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED, this._onScriptDataArrived.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO, this._onStatisticsInfo.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT, this._onRecommendSeekpoint.bind(this)); } } Transmuxer2.prototype.destroy = function() { if (this._worker) { if (!this._workerDestroying) { this._workerDestroying = true; this._worker.postMessage({ cmd: "destroy" }); _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__.default.removeListener(this.e.onLoggingConfigChanged); this.e = null; } } else { this._controller.destroy(); this._controller = null; } this._emitter.removeAllListeners(); this._emitter = null; }; Transmuxer2.prototype.on = function(event, listener) { this._emitter.addListener(event, listener); }; Transmuxer2.prototype.off = function(event, listener) { this._emitter.removeListener(event, listener); }; Transmuxer2.prototype.hasWorker = function() { return this._worker != null; }; Transmuxer2.prototype.open = function() { if (this._worker) { this._worker.postMessage({ cmd: "start" }); } else { this._controller.start(); } }; Transmuxer2.prototype.close = function() { if (this._worker) { this._worker.postMessage({ cmd: "stop" }); } else { this._controller.stop(); } }; Transmuxer2.prototype.seek = function(milliseconds) { if (this._worker) { this._worker.postMessage({ cmd: "seek", param: milliseconds }); } else { this._controller.seek(milliseconds); } }; Transmuxer2.prototype.pause = function() { if (this._worker) { this._worker.postMessage({ cmd: "pause" }); } else { this._controller.pause(); } }; Transmuxer2.prototype.resume = function() { if (this._worker) { this._worker.postMessage({ cmd: "resume" }); } else { this._controller.resume(); } }; Transmuxer2.prototype._onInitSegment = function(type, initSegment) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT, type, initSegment); }); }; Transmuxer2.prototype._onMediaSegment = function(type, mediaSegment) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT, type, mediaSegment); }); }; Transmuxer2.prototype._onLoadingComplete = function() { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE); }); }; Transmuxer2.prototype._onRecoveredEarlyEof = function() { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF); }); }; Transmuxer2.prototype._onMediaInfo = function(mediaInfo) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO, mediaInfo); }); }; Transmuxer2.prototype._onMetaDataArrived = function(metadata) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED, metadata); }); }; Transmuxer2.prototype._onScriptDataArrived = function(data) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED, data); }); }; Transmuxer2.prototype._onStatisticsInfo = function(statisticsInfo) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO, statisticsInfo); }); }; Transmuxer2.prototype._onIOError = function(type, info) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR, type, info); }); }; Transmuxer2.prototype._onDemuxError = function(type, info) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR, type, info); }); }; Transmuxer2.prototype._onRecommendSeekpoint = function(milliseconds) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT, milliseconds); }); }; Transmuxer2.prototype._onLoggingConfigChanged = function(config) { if (this._worker) { this._worker.postMessage({ cmd: "logging_config", param: config }); } }; Transmuxer2.prototype._onWorkerMessage = function(e) { var message = e.data; var data = message.data; if (message.msg === "destroyed" || this._workerDestroying) { this._workerDestroying = false; this._worker.terminate(); this._worker = null; return; } switch (message.msg) { case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT: this._emitter.emit(message.msg, data.type, data.data); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF: this._emitter.emit(message.msg); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO: Object.setPrototypeOf(data, _media_info_js__WEBPACK_IMPORTED_MODULE_6__.default.prototype); this._emitter.emit(message.msg, data); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO: this._emitter.emit(message.msg, data); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR: this._emitter.emit(message.msg, data.type, data.info); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT: this._emitter.emit(message.msg, data); break; case "logcat_callback": _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__.default.emitter.emit("log", data.type, data.logcat); break; default: break; } }; return Transmuxer2; }(); __webpack_exports__2["default"] = Transmuxer; }, "./src/core/transmuxing-controller.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/browser.js"); var _media_info_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/core/media-info.js"); var _demux_flv_demuxer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/demux/flv-demuxer.js"); var _remux_mp4_remuxer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/remux/mp4-remuxer.js"); var _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/demux/demux-errors.js"); var _io_io_controller_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/io/io-controller.js"); var _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/core/transmuxing-events.js"); var TransmuxingController = function() { function TransmuxingController2(mediaDataSource, config) { this.TAG = "TransmuxingController"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); this._config = config; if (!mediaDataSource.segments) { mediaDataSource.segments = [{ duration: mediaDataSource.duration, filesize: mediaDataSource.filesize, url: mediaDataSource.url }]; } if (typeof mediaDataSource.cors !== "boolean") { mediaDataSource.cors = true; } if (typeof mediaDataSource.withCredentials !== "boolean") { mediaDataSource.withCredentials = false; } this._mediaDataSource = mediaDataSource; this._currentSegmentIndex = 0; var totalDuration = 0; this._mediaDataSource.segments.forEach(function(segment) { segment.timestampBase = totalDuration; totalDuration += segment.duration; segment.cors = mediaDataSource.cors; segment.withCredentials = mediaDataSource.withCredentials; if (config.referrerPolicy) { segment.referrerPolicy = config.referrerPolicy; } }); if (!isNaN(totalDuration) && this._mediaDataSource.duration !== totalDuration) { this._mediaDataSource.duration = totalDuration; } this._mediaInfo = null; this._demuxer = null; this._remuxer = null; this._ioctl = null; this._pendingSeekTime = null; this._pendingResolveSeekPoint = null; this._statisticsReporter = null; } TransmuxingController2.prototype.destroy = function() { this._mediaInfo = null; this._mediaDataSource = null; if (this._statisticsReporter) { this._disableStatisticsReporter(); } if (this._ioctl) { this._ioctl.destroy(); this._ioctl = null; } if (this._demuxer) { this._demuxer.destroy(); this._demuxer = null; } if (this._remuxer) { this._remuxer.destroy(); this._remuxer = null; } this._emitter.removeAllListeners(); this._emitter = null; }; TransmuxingController2.prototype.on = function(event, listener) { this._emitter.addListener(event, listener); }; TransmuxingController2.prototype.off = function(event, listener) { this._emitter.removeListener(event, listener); }; TransmuxingController2.prototype.start = function() { this._loadSegment(0); this._enableStatisticsReporter(); }; TransmuxingController2.prototype._loadSegment = function(segmentIndex, optionalFrom) { this._currentSegmentIndex = segmentIndex; var dataSource = this._mediaDataSource.segments[segmentIndex]; var ioctl = this._ioctl = new _io_io_controller_js__WEBPACK_IMPORTED_MODULE_7__.default(dataSource, this._config, segmentIndex); ioctl.onError = this._onIOException.bind(this); ioctl.onSeeked = this._onIOSeeked.bind(this); ioctl.onComplete = this._onIOComplete.bind(this); ioctl.onRedirect = this._onIORedirect.bind(this); ioctl.onRecoveredEarlyEof = this._onIORecoveredEarlyEof.bind(this); if (optionalFrom) { this._demuxer.bindDataSource(this._ioctl); } else { ioctl.onDataArrival = this._onInitChunkArrival.bind(this); } ioctl.open(optionalFrom); }; TransmuxingController2.prototype.stop = function() { this._internalAbort(); this._disableStatisticsReporter(); }; TransmuxingController2.prototype._internalAbort = function() { if (this._ioctl) { this._ioctl.destroy(); this._ioctl = null; } }; TransmuxingController2.prototype.pause = function() { if (this._ioctl && this._ioctl.isWorking()) { this._ioctl.pause(); this._disableStatisticsReporter(); } }; TransmuxingController2.prototype.resume = function() { if (this._ioctl && this._ioctl.isPaused()) { this._ioctl.resume(); this._enableStatisticsReporter(); } }; TransmuxingController2.prototype.seek = function(milliseconds) { if (this._mediaInfo == null || !this._mediaInfo.isSeekable()) { return; } var targetSegmentIndex = this._searchSegmentIndexContains(milliseconds); if (targetSegmentIndex === this._currentSegmentIndex) { var segmentInfo = this._mediaInfo.segments[targetSegmentIndex]; if (segmentInfo == void 0) { this._pendingSeekTime = milliseconds; } else { var keyframe = segmentInfo.getNearestKeyframe(milliseconds); this._remuxer.seek(keyframe.milliseconds); this._ioctl.seek(keyframe.fileposition); this._pendingResolveSeekPoint = keyframe.milliseconds; } } else { var targetSegmentInfo = this._mediaInfo.segments[targetSegmentIndex]; if (targetSegmentInfo == void 0) { this._pendingSeekTime = milliseconds; this._internalAbort(); this._remuxer.seek(); this._remuxer.insertDiscontinuity(); this._loadSegment(targetSegmentIndex); } else { var keyframe = targetSegmentInfo.getNearestKeyframe(milliseconds); this._internalAbort(); this._remuxer.seek(milliseconds); this._remuxer.insertDiscontinuity(); this._demuxer.resetMediaInfo(); this._demuxer.timestampBase = this._mediaDataSource.segments[targetSegmentIndex].timestampBase; this._loadSegment(targetSegmentIndex, keyframe.fileposition); this._pendingResolveSeekPoint = keyframe.milliseconds; this._reportSegmentMediaInfo(targetSegmentIndex); } } this._enableStatisticsReporter(); }; TransmuxingController2.prototype._searchSegmentIndexContains = function(milliseconds) { var segments = this._mediaDataSource.segments; var idx = segments.length - 1; for (var i = 0; i < segments.length; i++) { if (milliseconds < segments[i].timestampBase) { idx = i - 1; break; } } return idx; }; TransmuxingController2.prototype._onInitChunkArrival = function(data, byteStart) { var _this = this; var probeData = null; var consumed = 0; if (byteStart > 0) { this._demuxer.bindDataSource(this._ioctl); this._demuxer.timestampBase = this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase; consumed = this._demuxer.parseChunks(data, byteStart); } else if ((probeData = _demux_flv_demuxer_js__WEBPACK_IMPORTED_MODULE_4__.default.probe(data)).match) { this._demuxer = new _demux_flv_demuxer_js__WEBPACK_IMPORTED_MODULE_4__.default(probeData, this._config); if (!this._remuxer) { this._remuxer = new _remux_mp4_remuxer_js__WEBPACK_IMPORTED_MODULE_5__.default(this._config); } var mds = this._mediaDataSource; if (mds.duration != void 0 && !isNaN(mds.duration)) { this._demuxer.overridedDuration = mds.duration; } if (typeof mds.hasAudio === "boolean") { this._demuxer.overridedHasAudio = mds.hasAudio; } if (typeof mds.hasVideo === "boolean") { this._demuxer.overridedHasVideo = mds.hasVideo; } this._demuxer.timestampBase = mds.segments[this._currentSegmentIndex].timestampBase; this._demuxer.onError = this._onDemuxException.bind(this); this._demuxer.onMediaInfo = this._onMediaInfo.bind(this); this._demuxer.onMetaDataArrived = this._onMetaDataArrived.bind(this); this._demuxer.onScriptDataArrived = this._onScriptDataArrived.bind(this); this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)); this._remuxer.onInitSegment = this._onRemuxerInitSegmentArrival.bind(this); this._remuxer.onMediaSegment = this._onRemuxerMediaSegmentArrival.bind(this); consumed = this._demuxer.parseChunks(data, byteStart); } else { probeData = null; _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "Non-FLV, Unsupported media type!"); Promise.resolve().then(function() { _this._internalAbort(); }); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.DEMUX_ERROR, _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_6__.default.FORMAT_UNSUPPORTED, "Non-FLV, Unsupported media type"); consumed = 0; } return consumed; }; TransmuxingController2.prototype._onMediaInfo = function(mediaInfo) { var _this = this; if (this._mediaInfo == null) { this._mediaInfo = Object.assign({}, mediaInfo); this._mediaInfo.keyframesIndex = null; this._mediaInfo.segments = []; this._mediaInfo.segmentCount = this._mediaDataSource.segments.length; Object.setPrototypeOf(this._mediaInfo, _media_info_js__WEBPACK_IMPORTED_MODULE_3__.default.prototype); } var segmentInfo = Object.assign({}, mediaInfo); Object.setPrototypeOf(segmentInfo, _media_info_js__WEBPACK_IMPORTED_MODULE_3__.default.prototype); this._mediaInfo.segments[this._currentSegmentIndex] = segmentInfo; this._reportSegmentMediaInfo(this._currentSegmentIndex); if (this._pendingSeekTime != null) { Promise.resolve().then(function() { var target = _this._pendingSeekTime; _this._pendingSeekTime = null; _this.seek(target); }); } }; TransmuxingController2.prototype._onMetaDataArrived = function(metadata) { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.METADATA_ARRIVED, metadata); }; TransmuxingController2.prototype._onScriptDataArrived = function(data) { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.SCRIPTDATA_ARRIVED, data); }; TransmuxingController2.prototype._onIOSeeked = function() { this._remuxer.insertDiscontinuity(); }; TransmuxingController2.prototype._onIOComplete = function(extraData) { var segmentIndex = extraData; var nextSegmentIndex = segmentIndex + 1; if (nextSegmentIndex < this._mediaDataSource.segments.length) { this._internalAbort(); this._remuxer.flushStashedSamples(); this._loadSegment(nextSegmentIndex); } else { this._remuxer.flushStashedSamples(); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.LOADING_COMPLETE); this._disableStatisticsReporter(); } }; TransmuxingController2.prototype._onIORedirect = function(redirectedURL) { var segmentIndex = this._ioctl.extraData; this._mediaDataSource.segments[segmentIndex].redirectedURL = redirectedURL; }; TransmuxingController2.prototype._onIORecoveredEarlyEof = function() { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.RECOVERED_EARLY_EOF); }; TransmuxingController2.prototype._onIOException = function(type, info) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "IOException: type = " + type + ", code = " + info.code + ", msg = " + info.msg); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.IO_ERROR, type, info); this._disableStatisticsReporter(); }; TransmuxingController2.prototype._onDemuxException = function(type, info) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "DemuxException: type = " + type + ", info = " + info); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.DEMUX_ERROR, type, info); }; TransmuxingController2.prototype._onRemuxerInitSegmentArrival = function(type, initSegment) { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.INIT_SEGMENT, type, initSegment); }; TransmuxingController2.prototype._onRemuxerMediaSegmentArrival = function(type, mediaSegment) { if (this._pendingSeekTime != null) { return; } this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.MEDIA_SEGMENT, type, mediaSegment); if (this._pendingResolveSeekPoint != null && type === "video") { var syncPoints = mediaSegment.info.syncPoints; var seekpoint = this._pendingResolveSeekPoint; this._pendingResolveSeekPoint = null; if (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari && syncPoints.length > 0 && syncPoints[0].originalDts === seekpoint) { seekpoint = syncPoints[0].pts; } this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.RECOMMEND_SEEKPOINT, seekpoint); } }; TransmuxingController2.prototype._enableStatisticsReporter = function() { if (this._statisticsReporter == null) { this._statisticsReporter = self.setInterval(this._reportStatisticsInfo.bind(this), this._config.statisticsInfoReportInterval); } }; TransmuxingController2.prototype._disableStatisticsReporter = function() { if (this._statisticsReporter) { self.clearInterval(this._statisticsReporter); this._statisticsReporter = null; } }; TransmuxingController2.prototype._reportSegmentMediaInfo = function(segmentIndex) { var segmentInfo = this._mediaInfo.segments[segmentIndex]; var exportInfo = Object.assign({}, segmentInfo); exportInfo.duration = this._mediaInfo.duration; exportInfo.segmentCount = this._mediaInfo.segmentCount; delete exportInfo.segments; delete exportInfo.keyframesIndex; this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.MEDIA_INFO, exportInfo); }; TransmuxingController2.prototype._reportStatisticsInfo = function() { var info = {}; info.url = this._ioctl.currentURL; info.hasRedirect = this._ioctl.hasRedirect; if (info.hasRedirect) { info.redirectedURL = this._ioctl.currentRedirectedURL; } info.speed = this._ioctl.currentSpeed; info.loaderType = this._ioctl.loaderType; info.currentSegmentIndex = this._currentSegmentIndex; info.totalSegmentCount = this._mediaDataSource.segments.length; this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.STATISTICS_INFO, info); }; return TransmuxingController2; }(); __webpack_exports__2["default"] = TransmuxingController; }, "./src/core/transmuxing-events.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var TransmuxingEvents = { IO_ERROR: "io_error", DEMUX_ERROR: "demux_error", INIT_SEGMENT: "init_segment", MEDIA_SEGMENT: "media_segment", LOADING_COMPLETE: "loading_complete", RECOVERED_EARLY_EOF: "recovered_early_eof", MEDIA_INFO: "media_info", METADATA_ARRIVED: "metadata_arrived", SCRIPTDATA_ARRIVED: "scriptdata_arrived", STATISTICS_INFO: "statistics_info", RECOMMEND_SEEKPOINT: "recommend_seekpoint" }; __webpack_exports__2["default"] = TransmuxingEvents; }, "./src/core/transmuxing-worker.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logging-control.js"); var _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/polyfill.js"); var _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/core/transmuxing-controller.js"); var _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/core/transmuxing-events.js"); var TransmuxingWorker = function(self2) { var TAG = "TransmuxingWorker"; var controller = null; var logcatListener = onLogcatCallback.bind(this); _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_1__.default.install(); self2.addEventListener("message", function(e) { switch (e.data.cmd) { case "init": controller = new _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_2__.default(e.data.param[0], e.data.param[1]); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.IO_ERROR, onIOError.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.DEMUX_ERROR, onDemuxError.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.INIT_SEGMENT, onInitSegment.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_SEGMENT, onMediaSegment.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.LOADING_COMPLETE, onLoadingComplete.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOVERED_EARLY_EOF, onRecoveredEarlyEof.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, onMediaInfo.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.METADATA_ARRIVED, onMetaDataArrived.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SCRIPTDATA_ARRIVED, onScriptDataArrived.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, onStatisticsInfo.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOMMEND_SEEKPOINT, onRecommendSeekpoint.bind(this)); break; case "destroy": if (controller) { controller.destroy(); controller = null; } self2.postMessage({ msg: "destroyed" }); break; case "start": controller.start(); break; case "stop": controller.stop(); break; case "seek": controller.seek(e.data.param); break; case "pause": controller.pause(); break; case "resume": controller.resume(); break; case "logging_config": { var config = e.data.param; _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__.default.applyConfig(config); if (config.enableCallback === true) { _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__.default.addLogListener(logcatListener); } else { _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__.default.removeLogListener(logcatListener); } break; } } }); function onInitSegment(type, initSegment) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.INIT_SEGMENT, data: { type, data: initSegment } }; self2.postMessage(obj, [initSegment.data]); } function onMediaSegment(type, mediaSegment) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_SEGMENT, data: { type, data: mediaSegment } }; self2.postMessage(obj, [mediaSegment.data]); } function onLoadingComplete() { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.LOADING_COMPLETE }; self2.postMessage(obj); } function onRecoveredEarlyEof() { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOVERED_EARLY_EOF }; self2.postMessage(obj); } function onMediaInfo(mediaInfo) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, data: mediaInfo }; self2.postMessage(obj); } function onMetaDataArrived(metadata) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.METADATA_ARRIVED, data: metadata }; self2.postMessage(obj); } function onScriptDataArrived(data) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SCRIPTDATA_ARRIVED, data }; self2.postMessage(obj); } function onStatisticsInfo(statInfo) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, data: statInfo }; self2.postMessage(obj); } function onIOError(type, info) { self2.postMessage({ msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.IO_ERROR, data: { type, info } }); } function onDemuxError(type, info) { self2.postMessage({ msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.DEMUX_ERROR, data: { type, info } }); } function onRecommendSeekpoint(milliseconds) { self2.postMessage({ msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOMMEND_SEEKPOINT, data: milliseconds }); } function onLogcatCallback(type, str) { self2.postMessage({ msg: "logcat_callback", data: { type, logcat: str } }); } }; __webpack_exports__2["default"] = TransmuxingWorker; }, "./src/demux/amf-parser.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _utils_utf8_conv_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/utf8-conv.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/exception.js"); var le = function() { var buf = new ArrayBuffer(2); new DataView(buf).setInt16(0, 256, true); return new Int16Array(buf)[0] === 256; }(); var AMF = function() { function AMF2() { } AMF2.parseScriptData = function(arrayBuffer, dataOffset, dataSize) { var data = {}; try { var name_1 = AMF2.parseValue(arrayBuffer, dataOffset, dataSize); var value = AMF2.parseValue(arrayBuffer, dataOffset + name_1.size, dataSize - name_1.size); data[name_1.data] = value.data; } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e("AMF", e.toString()); } return data; }; AMF2.parseObject = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 3) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse ScriptDataObject"); } var name = AMF2.parseString(arrayBuffer, dataOffset, dataSize); var value = AMF2.parseValue(arrayBuffer, dataOffset + name.size, dataSize - name.size); var isObjectEnd = value.objectEnd; return { data: { name: name.data, value: value.data }, size: name.size + value.size, objectEnd: isObjectEnd }; }; AMF2.parseVariable = function(arrayBuffer, dataOffset, dataSize) { return AMF2.parseObject(arrayBuffer, dataOffset, dataSize); }; AMF2.parseString = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 2) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse String"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var length = v.getUint16(0, !le); var str; if (length > 0) { str = (0, _utils_utf8_conv_js__WEBPACK_IMPORTED_MODULE_1__.default)(new Uint8Array(arrayBuffer, dataOffset + 2, length)); } else { str = ""; } return { data: str, size: 2 + length }; }; AMF2.parseLongString = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 4) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse LongString"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var length = v.getUint32(0, !le); var str; if (length > 0) { str = (0, _utils_utf8_conv_js__WEBPACK_IMPORTED_MODULE_1__.default)(new Uint8Array(arrayBuffer, dataOffset + 4, length)); } else { str = ""; } return { data: str, size: 4 + length }; }; AMF2.parseDate = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 10) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data size invalid when parse Date"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var timestamp = v.getFloat64(0, !le); var localTimeOffset = v.getInt16(8, !le); timestamp += localTimeOffset * 60 * 1e3; return { data: new Date(timestamp), size: 8 + 2 }; }; AMF2.parseValue = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 1) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse Value"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var offset = 1; var type = v.getUint8(0); var value; var objectEnd = false; try { switch (type) { case 0: value = v.getFloat64(1, !le); offset += 8; break; case 1: { var b = v.getUint8(1); value = b ? true : false; offset += 1; break; } case 2: { var amfstr = AMF2.parseString(arrayBuffer, dataOffset + 1, dataSize - 1); value = amfstr.data; offset += amfstr.size; break; } case 3: { value = {}; var terminal = 0; if ((v.getUint32(dataSize - 4, !le) & 16777215) === 9) { terminal = 3; } while (offset < dataSize - 4) { var amfobj = AMF2.parseObject(arrayBuffer, dataOffset + offset, dataSize - offset - terminal); if (amfobj.objectEnd) break; value[amfobj.data.name] = amfobj.data.value; offset += amfobj.size; } if (offset <= dataSize - 3) { var marker = v.getUint32(offset - 1, !le) & 16777215; if (marker === 9) { offset += 3; } } break; } case 8: { value = {}; offset += 4; var terminal = 0; if ((v.getUint32(dataSize - 4, !le) & 16777215) === 9) { terminal = 3; } while (offset < dataSize - 8) { var amfvar = AMF2.parseVariable(arrayBuffer, dataOffset + offset, dataSize - offset - terminal); if (amfvar.objectEnd) break; value[amfvar.data.name] = amfvar.data.value; offset += amfvar.size; } if (offset <= dataSize - 3) { var marker = v.getUint32(offset - 1, !le) & 16777215; if (marker === 9) { offset += 3; } } break; } case 9: value = void 0; offset = 1; objectEnd = true; break; case 10: { value = []; var strictArrayLength = v.getUint32(1, !le); offset += 4; for (var i = 0; i < strictArrayLength; i++) { var val = AMF2.parseValue(arrayBuffer, dataOffset + offset, dataSize - offset); value.push(val.data); offset += val.size; } break; } case 11: { var date = AMF2.parseDate(arrayBuffer, dataOffset + 1, dataSize - 1); value = date.data; offset += date.size; break; } case 12: { var amfLongStr = AMF2.parseString(arrayBuffer, dataOffset + 1, dataSize - 1); value = amfLongStr.data; offset += amfLongStr.size; break; } default: offset = dataSize; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w("AMF", "Unsupported AMF value type " + type); } } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e("AMF", e.toString()); } return { data: value, size: offset, objectEnd }; }; return AMF2; }(); __webpack_exports__2["default"] = AMF; }, "./src/demux/demux-errors.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var DemuxErrors = { OK: "OK", FORMAT_ERROR: "FormatError", FORMAT_UNSUPPORTED: "FormatUnsupported", CODEC_UNSUPPORTED: "CodecUnsupported" }; __webpack_exports__2["default"] = DemuxErrors; }, "./src/demux/exp-golomb.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/exception.js"); var ExpGolomb = function() { function ExpGolomb2(uint8array) { this.TAG = "ExpGolomb"; this._buffer = uint8array; this._buffer_index = 0; this._total_bytes = uint8array.byteLength; this._total_bits = uint8array.byteLength * 8; this._current_word = 0; this._current_word_bits_left = 0; } ExpGolomb2.prototype.destroy = function() { this._buffer = null; }; ExpGolomb2.prototype._fillCurrentWord = function() { var buffer_bytes_left = this._total_bytes - this._buffer_index; if (buffer_bytes_left <= 0) throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.IllegalStateException("ExpGolomb: _fillCurrentWord() but no bytes available"); var bytes_read = Math.min(4, buffer_bytes_left); var word = new Uint8Array(4); word.set(this._buffer.subarray(this._buffer_index, this._buffer_index + bytes_read)); this._current_word = new DataView(word.buffer).getUint32(0, false); this._buffer_index += bytes_read; this._current_word_bits_left = bytes_read * 8; }; ExpGolomb2.prototype.readBits = function(bits) { if (bits > 32) throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.InvalidArgumentException("ExpGolomb: readBits() bits exceeded max 32bits!"); if (bits <= this._current_word_bits_left) { var result_1 = this._current_word >>> 32 - bits; this._current_word <<= bits; this._current_word_bits_left -= bits; return result_1; } var result = this._current_word_bits_left ? this._current_word : 0; result = result >>> 32 - this._current_word_bits_left; var bits_need_left = bits - this._current_word_bits_left; this._fillCurrentWord(); var bits_read_next = Math.min(bits_need_left, this._current_word_bits_left); var result2 = this._current_word >>> 32 - bits_read_next; this._current_word <<= bits_read_next; this._current_word_bits_left -= bits_read_next; result = result << bits_read_next | result2; return result; }; ExpGolomb2.prototype.readBool = function() { return this.readBits(1) === 1; }; ExpGolomb2.prototype.readByte = function() { return this.readBits(8); }; ExpGolomb2.prototype._skipLeadingZero = function() { var zero_count; for (zero_count = 0; zero_count < this._current_word_bits_left; zero_count++) { if ((this._current_word & 2147483648 >>> zero_count) !== 0) { this._current_word <<= zero_count; this._current_word_bits_left -= zero_count; return zero_count; } } this._fillCurrentWord(); return zero_count + this._skipLeadingZero(); }; ExpGolomb2.prototype.readUEG = function() { var leading_zeros = this._skipLeadingZero(); return this.readBits(leading_zeros + 1) - 1; }; ExpGolomb2.prototype.readSEG = function() { var value = this.readUEG(); if (value & 1) { return value + 1 >>> 1; } else { return -1 * (value >>> 1); } }; return ExpGolomb2; }(); __webpack_exports__2["default"] = ExpGolomb; }, "./src/demux/flv-demuxer.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _amf_parser_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/demux/amf-parser.js"); var _sps_parser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/demux/sps-parser.js"); var _demux_errors_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/demux/demux-errors.js"); var _core_media_info_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/media-info.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/utils/exception.js"); function Swap16(src) { return src >>> 8 & 255 | (src & 255) << 8; } function Swap32(src) { return (src & 4278190080) >>> 24 | (src & 16711680) >>> 8 | (src & 65280) << 8 | (src & 255) << 24; } function ReadBig32(array, index) { return array[index] << 24 | array[index + 1] << 16 | array[index + 2] << 8 | array[index + 3]; } var FLVDemuxer = function() { function FLVDemuxer2(probeData, config) { this.TAG = "FLVDemuxer"; this._config = config; this._onError = null; this._onMediaInfo = null; this._onMetaDataArrived = null; this._onScriptDataArrived = null; this._onTrackMetadata = null; this._onDataAvailable = null; this._dataOffset = probeData.dataOffset; this._firstParse = true; this._dispatch = false; this._hasAudio = probeData.hasAudioTrack; this._hasVideo = probeData.hasVideoTrack; this._hasAudioFlagOverrided = false; this._hasVideoFlagOverrided = false; this._audioInitialMetadataDispatched = false; this._videoInitialMetadataDispatched = false; this._mediaInfo = new _core_media_info_js__WEBPACK_IMPORTED_MODULE_4__.default(); this._mediaInfo.hasAudio = this._hasAudio; this._mediaInfo.hasVideo = this._hasVideo; this._metadata = null; this._audioMetadata = null; this._videoMetadata = null; this._naluLengthSize = 4; this._timestampBase = 0; this._timescale = 1e3; this._duration = 0; this._durationOverrided = false; this._referenceFrameRate = { fixed: true, fps: 23.976, fps_num: 23976, fps_den: 1e3 }; this._flvSoundRateTable = [5500, 11025, 22050, 44100, 48e3]; this._mpegSamplingRates = [ 96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350 ]; this._mpegAudioV10SampleRateTable = [44100, 48e3, 32e3, 0]; this._mpegAudioV20SampleRateTable = [22050, 24e3, 16e3, 0]; this._mpegAudioV25SampleRateTable = [11025, 12e3, 8e3, 0]; this._mpegAudioL1BitRateTable = [0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1]; this._mpegAudioL2BitRateTable = [0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, -1]; this._mpegAudioL3BitRateTable = [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1]; this._videoTrack = { type: "video", id: 1, sequenceNumber: 0, samples: [], length: 0 }; this._audioTrack = { type: "audio", id: 2, sequenceNumber: 0, samples: [], length: 0 }; this._littleEndian = function() { var buf = new ArrayBuffer(2); new DataView(buf).setInt16(0, 256, true); return new Int16Array(buf)[0] === 256; }(); } FLVDemuxer2.prototype.destroy = function() { this._mediaInfo = null; this._metadata = null; this._audioMetadata = null; this._videoMetadata = null; this._videoTrack = null; this._audioTrack = null; this._onError = null; this._onMediaInfo = null; this._onMetaDataArrived = null; this._onScriptDataArrived = null; this._onTrackMetadata = null; this._onDataAvailable = null; }; FLVDemuxer2.probe = function(buffer) { var data = new Uint8Array(buffer); var mismatch = { match: false }; if (data[0] !== 70 || data[1] !== 76 || data[2] !== 86 || data[3] !== 1) { return mismatch; } var hasAudio = (data[4] & 4) >>> 2 !== 0; var hasVideo = (data[4] & 1) !== 0; var offset = ReadBig32(data, 5); if (offset < 9) { return mismatch; } return { match: true, consumed: offset, dataOffset: offset, hasAudioTrack: hasAudio, hasVideoTrack: hasVideo }; }; FLVDemuxer2.prototype.bindDataSource = function(loader) { loader.onDataArrival = this.parseChunks.bind(this); return this; }; Object.defineProperty(FLVDemuxer2.prototype, "onTrackMetadata", { get: function() { return this._onTrackMetadata; }, set: function(callback) { this._onTrackMetadata = callback; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onMediaInfo", { get: function() { return this._onMediaInfo; }, set: function(callback) { this._onMediaInfo = callback; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onMetaDataArrived", { get: function() { return this._onMetaDataArrived; }, set: function(callback) { this._onMetaDataArrived = callback; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onScriptDataArrived", { get: function() { return this._onScriptDataArrived; }, set: function(callback) { this._onScriptDataArrived = callback; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onError", { get: function() { return this._onError; }, set: function(callback) { this._onError = callback; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onDataAvailable", { get: function() { return this._onDataAvailable; }, set: function(callback) { this._onDataAvailable = callback; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "timestampBase", { get: function() { return this._timestampBase; }, set: function(base) { this._timestampBase = base; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "overridedDuration", { get: function() { return this._duration; }, set: function(duration) { this._durationOverrided = true; this._duration = duration; this._mediaInfo.duration = duration; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "overridedHasAudio", { set: function(hasAudio) { this._hasAudioFlagOverrided = true; this._hasAudio = hasAudio; this._mediaInfo.hasAudio = hasAudio; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "overridedHasVideo", { set: function(hasVideo) { this._hasVideoFlagOverrided = true; this._hasVideo = hasVideo; this._mediaInfo.hasVideo = hasVideo; }, enumerable: false, configurable: true }); FLVDemuxer2.prototype.resetMediaInfo = function() { this._mediaInfo = new _core_media_info_js__WEBPACK_IMPORTED_MODULE_4__.default(); }; FLVDemuxer2.prototype._isInitialMetadataDispatched = function() { if (this._hasAudio && this._hasVideo) { return this._audioInitialMetadataDispatched && this._videoInitialMetadataDispatched; } if (this._hasAudio && !this._hasVideo) { return this._audioInitialMetadataDispatched; } if (!this._hasAudio && this._hasVideo) { return this._videoInitialMetadataDispatched; } return false; }; FLVDemuxer2.prototype.parseChunks = function(chunk, byteStart) { if (!this._onError || !this._onMediaInfo || !this._onTrackMetadata || !this._onDataAvailable) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("Flv: onError & onMediaInfo & onTrackMetadata & onDataAvailable callback must be specified"); } var offset = 0; var le = this._littleEndian; if (byteStart === 0) { if (chunk.byteLength > 13) { var probeData = FLVDemuxer2.probe(chunk); offset = probeData.dataOffset; } else { return 0; } } if (this._firstParse) { this._firstParse = false; if (byteStart + offset !== this._dataOffset) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "First time parsing but chunk byteStart invalid!"); } var v = new DataView(chunk, offset); var prevTagSize0 = v.getUint32(0, !le); if (prevTagSize0 !== 0) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "PrevTagSize0 !== 0 !!!"); } offset += 4; } while (offset < chunk.byteLength) { this._dispatch = true; var v = new DataView(chunk, offset); if (offset + 11 + 4 > chunk.byteLength) { break; } var tagType = v.getUint8(0); var dataSize = v.getUint32(0, !le) & 16777215; if (offset + 11 + dataSize + 4 > chunk.byteLength) { break; } if (tagType !== 8 && tagType !== 9 && tagType !== 18) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Unsupported tag type " + tagType + ", skipped"); offset += 11 + dataSize + 4; continue; } var ts2 = v.getUint8(4); var ts1 = v.getUint8(5); var ts0 = v.getUint8(6); var ts3 = v.getUint8(7); var timestamp = ts0 | ts1 << 8 | ts2 << 16 | ts3 << 24; var streamId = v.getUint32(7, !le) & 16777215; if (streamId !== 0) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Meet tag which has StreamID != 0!"); } var dataOffset = offset + 11; switch (tagType) { case 8: this._parseAudioData(chunk, dataOffset, dataSize, timestamp); break; case 9: this._parseVideoData(chunk, dataOffset, dataSize, timestamp, byteStart + offset); break; case 18: this._parseScriptData(chunk, dataOffset, dataSize); break; } var prevTagSize = v.getUint32(11 + dataSize, !le); if (prevTagSize !== 11 + dataSize) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Invalid PrevTagSize " + prevTagSize); } offset += 11 + dataSize + 4; } if (this._isInitialMetadataDispatched()) { if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) { this._onDataAvailable(this._audioTrack, this._videoTrack); } } return offset; }; FLVDemuxer2.prototype._parseScriptData = function(arrayBuffer, dataOffset, dataSize) { var scriptData = _amf_parser_js__WEBPACK_IMPORTED_MODULE_1__.default.parseScriptData(arrayBuffer, dataOffset, dataSize); if (scriptData.hasOwnProperty("onMetaData")) { if (scriptData.onMetaData == null || typeof scriptData.onMetaData !== "object") { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Invalid onMetaData structure!"); return; } if (this._metadata) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Found another onMetaData tag!"); } this._metadata = scriptData; var onMetaData = this._metadata.onMetaData; if (this._onMetaDataArrived) { this._onMetaDataArrived(Object.assign({}, onMetaData)); } if (typeof onMetaData.hasAudio === "boolean") { if (this._hasAudioFlagOverrided === false) { this._hasAudio = onMetaData.hasAudio; this._mediaInfo.hasAudio = this._hasAudio; } } if (typeof onMetaData.hasVideo === "boolean") { if (this._hasVideoFlagOverrided === false) { this._hasVideo = onMetaData.hasVideo; this._mediaInfo.hasVideo = this._hasVideo; } } if (typeof onMetaData.audiodatarate === "number") { this._mediaInfo.audioDataRate = onMetaData.audiodatarate; } if (typeof onMetaData.videodatarate === "number") { this._mediaInfo.videoDataRate = onMetaData.videodatarate; } if (typeof onMetaData.width === "number") { this._mediaInfo.width = onMetaData.width; } if (typeof onMetaData.height === "number") { this._mediaInfo.height = onMetaData.height; } if (typeof onMetaData.duration === "number") { if (!this._durationOverrided) { var duration = Math.floor(onMetaData.duration * this._timescale); this._duration = duration; this._mediaInfo.duration = duration; } } else { this._mediaInfo.duration = 0; } if (typeof onMetaData.framerate === "number") { var fps_num = Math.floor(onMetaData.framerate * 1e3); if (fps_num > 0) { var fps = fps_num / 1e3; this._referenceFrameRate.fixed = true; this._referenceFrameRate.fps = fps; this._referenceFrameRate.fps_num = fps_num; this._referenceFrameRate.fps_den = 1e3; this._mediaInfo.fps = fps; } } if (typeof onMetaData.keyframes === "object") { this._mediaInfo.hasKeyframesIndex = true; var keyframes = onMetaData.keyframes; this._mediaInfo.keyframesIndex = this._parseKeyframesIndex(keyframes); onMetaData.keyframes = null; } else { this._mediaInfo.hasKeyframesIndex = false; } this._dispatch = false; this._mediaInfo.metadata = onMetaData; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed onMetaData"); if (this._mediaInfo.isComplete()) { this._onMediaInfo(this._mediaInfo); } } if (Object.keys(scriptData).length > 0) { if (this._onScriptDataArrived) { this._onScriptDataArrived(Object.assign({}, scriptData)); } } }; FLVDemuxer2.prototype._parseKeyframesIndex = function(keyframes) { var times = []; var filepositions = []; for (var i = 1; i < keyframes.times.length; i++) { var time = this._timestampBase + Math.floor(keyframes.times[i] * 1e3); times.push(time); filepositions.push(keyframes.filepositions[i]); } return { times, filepositions }; }; FLVDemuxer2.prototype._parseAudioData = function(arrayBuffer, dataOffset, dataSize, tagTimestamp) { if (dataSize <= 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid audio packet, missing SoundData payload!"); return; } if (this._hasAudioFlagOverrided === true && this._hasAudio === false) { return; } var le = this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); var soundSpec = v.getUint8(0); var soundFormat = soundSpec >>> 4; if (soundFormat !== 2 && soundFormat !== 10) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.CODEC_UNSUPPORTED, "Flv: Unsupported audio codec idx: " + soundFormat); return; } var soundRate = 0; var soundRateIndex = (soundSpec & 12) >>> 2; if (soundRateIndex >= 0 && soundRateIndex <= 4) { soundRate = this._flvSoundRateTable[soundRateIndex]; } else { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid audio sample rate idx: " + soundRateIndex); return; } var soundSize = (soundSpec & 2) >>> 1; var soundType = soundSpec & 1; var meta = this._audioMetadata; var track = this._audioTrack; if (!meta) { if (this._hasAudio === false && this._hasAudioFlagOverrided === false) { this._hasAudio = true; this._mediaInfo.hasAudio = true; } meta = this._audioMetadata = {}; meta.type = "audio"; meta.id = track.id; meta.timescale = this._timescale; meta.duration = this._duration; meta.audioSampleRate = soundRate; meta.channelCount = soundType === 0 ? 1 : 2; } if (soundFormat === 10) { var aacData = this._parseAACAudioData(arrayBuffer, dataOffset + 1, dataSize - 1); if (aacData == void 0) { return; } if (aacData.packetType === 0) { if (meta.config) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Found another AudioSpecificConfig!"); } var misc = aacData.data; meta.audioSampleRate = misc.samplingRate; meta.channelCount = misc.channelCount; meta.codec = misc.codec; meta.originalCodec = misc.originalCodec; meta.config = misc.config; meta.refSampleDuration = 1024 / meta.audioSampleRate * meta.timescale; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed AudioSpecificConfig"); if (this._isInitialMetadataDispatched()) { if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) { this._onDataAvailable(this._audioTrack, this._videoTrack); } } else { this._audioInitialMetadataDispatched = true; } this._dispatch = false; this._onTrackMetadata("audio", meta); var mi = this._mediaInfo; mi.audioCodec = meta.originalCodec; mi.audioSampleRate = meta.audioSampleRate; mi.audioChannelCount = meta.channelCount; if (mi.hasVideo) { if (mi.videoCodec != null) { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + "," + mi.audioCodec + '"'; } } else { mi.mimeType = 'video/x-flv; codecs="' + mi.audioCodec + '"'; } if (mi.isComplete()) { this._onMediaInfo(mi); } } else if (aacData.packetType === 1) { var dts = this._timestampBase + tagTimestamp; var aacSample = { unit: aacData.data, length: aacData.data.byteLength, dts, pts: dts }; track.samples.push(aacSample); track.length += aacData.data.length; } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e(this.TAG, "Flv: Unsupported AAC data type " + aacData.packetType); } } else if (soundFormat === 2) { if (!meta.codec) { var misc = this._parseMP3AudioData(arrayBuffer, dataOffset + 1, dataSize - 1, true); if (misc == void 0) { return; } meta.audioSampleRate = misc.samplingRate; meta.channelCount = misc.channelCount; meta.codec = misc.codec; meta.originalCodec = misc.originalCodec; meta.refSampleDuration = 1152 / meta.audioSampleRate * meta.timescale; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed MPEG Audio Frame Header"); this._audioInitialMetadataDispatched = true; this._onTrackMetadata("audio", meta); var mi = this._mediaInfo; mi.audioCodec = meta.codec; mi.audioSampleRate = meta.audioSampleRate; mi.audioChannelCount = meta.channelCount; mi.audioDataRate = misc.bitRate; if (mi.hasVideo) { if (mi.videoCodec != null) { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + "," + mi.audioCodec + '"'; } } else { mi.mimeType = 'video/x-flv; codecs="' + mi.audioCodec + '"'; } if (mi.isComplete()) { this._onMediaInfo(mi); } } var data = this._parseMP3AudioData(arrayBuffer, dataOffset + 1, dataSize - 1, false); if (data == void 0) { return; } var dts = this._timestampBase + tagTimestamp; var mp3Sample = { unit: data, length: data.byteLength, dts, pts: dts }; track.samples.push(mp3Sample); track.length += data.length; } }; FLVDemuxer2.prototype._parseAACAudioData = function(arrayBuffer, dataOffset, dataSize) { if (dataSize <= 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid AAC packet, missing AACPacketType or/and Data!"); return; } var result = {}; var array = new Uint8Array(arrayBuffer, dataOffset, dataSize); result.packetType = array[0]; if (array[0] === 0) { result.data = this._parseAACAudioSpecificConfig(arrayBuffer, dataOffset + 1, dataSize - 1); } else { result.data = array.subarray(1); } return result; }; FLVDemuxer2.prototype._parseAACAudioSpecificConfig = function(arrayBuffer, dataOffset, dataSize) { var array = new Uint8Array(arrayBuffer, dataOffset, dataSize); var config = null; var audioObjectType = 0; var originalAudioObjectType = 0; var audioExtensionObjectType = null; var samplingIndex = 0; var extensionSamplingIndex = null; audioObjectType = originalAudioObjectType = array[0] >>> 3; samplingIndex = (array[0] & 7) << 1 | array[1] >>> 7; if (samplingIndex < 0 || samplingIndex >= this._mpegSamplingRates.length) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: AAC invalid sampling frequency index!"); return; } var samplingFrequence = this._mpegSamplingRates[samplingIndex]; var channelConfig = (array[1] & 120) >>> 3; if (channelConfig < 0 || channelConfig >= 8) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: AAC invalid channel configuration"); return; } if (audioObjectType === 5) { extensionSamplingIndex = (array[1] & 7) << 1 | array[2] >>> 7; audioExtensionObjectType = (array[2] & 124) >>> 2; } var userAgent = self.navigator.userAgent.toLowerCase(); if (userAgent.indexOf("firefox") !== -1) { if (samplingIndex >= 6) { audioObjectType = 5; config = new Array(4); extensionSamplingIndex = samplingIndex - 3; } else { audioObjectType = 2; config = new Array(2); extensionSamplingIndex = samplingIndex; } } else if (userAgent.indexOf("android") !== -1) { audioObjectType = 2; config = new Array(2); extensionSamplingIndex = samplingIndex; } else { audioObjectType = 5; extensionSamplingIndex = samplingIndex; config = new Array(4); if (samplingIndex >= 6) { extensionSamplingIndex = samplingIndex - 3; } else if (channelConfig === 1) { audioObjectType = 2; config = new Array(2); extensionSamplingIndex = samplingIndex; } } config[0] = audioObjectType << 3; config[0] |= (samplingIndex & 15) >>> 1; config[1] = (samplingIndex & 15) << 7; config[1] |= (channelConfig & 15) << 3; if (audioObjectType === 5) { config[1] |= (extensionSamplingIndex & 15) >>> 1; config[2] = (extensionSamplingIndex & 1) << 7; config[2] |= 2 << 2; config[3] = 0; } return { config, samplingRate: samplingFrequence, channelCount: channelConfig, codec: "mp4a.40." + audioObjectType, originalCodec: "mp4a.40." + originalAudioObjectType }; }; FLVDemuxer2.prototype._parseMP3AudioData = function(arrayBuffer, dataOffset, dataSize, requestHeader) { if (dataSize < 4) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid MP3 packet, header missing!"); return; } var le = this._littleEndian; var array = new Uint8Array(arrayBuffer, dataOffset, dataSize); var result = null; if (requestHeader) { if (array[0] !== 255) { return; } var ver = array[1] >>> 3 & 3; var layer = (array[1] & 6) >> 1; var bitrate_index = (array[2] & 240) >>> 4; var sampling_freq_index = (array[2] & 12) >>> 2; var channel_mode = array[3] >>> 6 & 3; var channel_count = channel_mode !== 3 ? 2 : 1; var sample_rate = 0; var bit_rate = 0; var object_type = 34; var codec = "mp3"; switch (ver) { case 0: sample_rate = this._mpegAudioV25SampleRateTable[sampling_freq_index]; break; case 2: sample_rate = this._mpegAudioV20SampleRateTable[sampling_freq_index]; break; case 3: sample_rate = this._mpegAudioV10SampleRateTable[sampling_freq_index]; break; } switch (layer) { case 1: object_type = 34; if (bitrate_index < this._mpegAudioL3BitRateTable.length) { bit_rate = this._mpegAudioL3BitRateTable[bitrate_index]; } break; case 2: object_type = 33; if (bitrate_index < this._mpegAudioL2BitRateTable.length) { bit_rate = this._mpegAudioL2BitRateTable[bitrate_index]; } break; case 3: object_type = 32; if (bitrate_index < this._mpegAudioL1BitRateTable.length) { bit_rate = this._mpegAudioL1BitRateTable[bitrate_index]; } break; } result = { bitRate: bit_rate, samplingRate: sample_rate, channelCount: channel_count, codec, originalCodec: codec }; } else { result = array; } return result; }; FLVDemuxer2.prototype._parseVideoData = function(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition) { if (dataSize <= 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid video packet, missing VideoData payload!"); return; } if (this._hasVideoFlagOverrided === true && this._hasVideo === false) { return; } var spec = new Uint8Array(arrayBuffer, dataOffset, dataSize)[0]; var frameType = (spec & 240) >>> 4; var codecId = spec & 15; if (codecId !== 7) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.CODEC_UNSUPPORTED, "Flv: Unsupported codec in video frame: " + codecId); return; } this._parseAVCVideoPacket(arrayBuffer, dataOffset + 1, dataSize - 1, tagTimestamp, tagPosition, frameType); }; FLVDemuxer2.prototype._parseAVCVideoPacket = function(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition, frameType) { if (dataSize < 4) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime"); return; } var le = this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); var packetType = v.getUint8(0); var cts_unsigned = v.getUint32(0, !le) & 16777215; var cts = cts_unsigned << 8 >> 8; if (packetType === 0) { this._parseAVCDecoderConfigurationRecord(arrayBuffer, dataOffset + 4, dataSize - 4); } else if (packetType === 1) { this._parseAVCVideoData(arrayBuffer, dataOffset + 4, dataSize - 4, tagTimestamp, tagPosition, frameType, cts); } else if (packetType === 2) { } else { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid video packet type " + packetType); return; } }; FLVDemuxer2.prototype._parseAVCDecoderConfigurationRecord = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 7) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid AVCDecoderConfigurationRecord, lack of data!"); return; } var meta = this._videoMetadata; var track = this._videoTrack; var le = this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); if (!meta) { if (this._hasVideo === false && this._hasVideoFlagOverrided === false) { this._hasVideo = true; this._mediaInfo.hasVideo = true; } meta = this._videoMetadata = {}; meta.type = "video"; meta.id = track.id; meta.timescale = this._timescale; meta.duration = this._duration; } else { if (typeof meta.avcc !== "undefined") { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Found another AVCDecoderConfigurationRecord!"); } } var version = v.getUint8(0); var avcProfile = v.getUint8(1); var profileCompatibility = v.getUint8(2); var avcLevel = v.getUint8(3); if (version !== 1 || avcProfile === 0) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid AVCDecoderConfigurationRecord"); return; } this._naluLengthSize = (v.getUint8(4) & 3) + 1; if (this._naluLengthSize !== 3 && this._naluLengthSize !== 4) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Strange NaluLengthSizeMinusOne: " + (this._naluLengthSize - 1)); return; } var spsCount = v.getUint8(5) & 31; if (spsCount === 0) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid AVCDecoderConfigurationRecord: No SPS"); return; } else if (spsCount > 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Strange AVCDecoderConfigurationRecord: SPS Count = " + spsCount); } var offset = 6; for (var i = 0; i < spsCount; i++) { var len = v.getUint16(offset, !le); offset += 2; if (len === 0) { continue; } var sps = new Uint8Array(arrayBuffer, dataOffset + offset, len); offset += len; var config = _sps_parser_js__WEBPACK_IMPORTED_MODULE_2__.default.parseSPS(sps); if (i !== 0) { continue; } meta.codecWidth = config.codec_size.width; meta.codecHeight = config.codec_size.height; meta.presentWidth = config.present_size.width; meta.presentHeight = config.present_size.height; meta.profile = config.profile_string; meta.level = config.level_string; meta.bitDepth = config.bit_depth; meta.chromaFormat = config.chroma_format; meta.sarRatio = config.sar_ratio; meta.frameRate = config.frame_rate; if (config.frame_rate.fixed === false || config.frame_rate.fps_num === 0 || config.frame_rate.fps_den === 0) { meta.frameRate = this._referenceFrameRate; } var fps_den = meta.frameRate.fps_den; var fps_num = meta.frameRate.fps_num; meta.refSampleDuration = meta.timescale * (fps_den / fps_num); var codecArray = sps.subarray(1, 4); var codecString = "avc1."; for (var j = 0; j < 3; j++) { var h = codecArray[j].toString(16); if (h.length < 2) { h = "0" + h; } codecString += h; } meta.codec = codecString; var mi = this._mediaInfo; mi.width = meta.codecWidth; mi.height = meta.codecHeight; mi.fps = meta.frameRate.fps; mi.profile = meta.profile; mi.level = meta.level; mi.refFrames = config.ref_frames; mi.chromaFormat = config.chroma_format_string; mi.sarNum = meta.sarRatio.width; mi.sarDen = meta.sarRatio.height; mi.videoCodec = codecString; if (mi.hasAudio) { if (mi.audioCodec != null) { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + "," + mi.audioCodec + '"'; } } else { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + '"'; } if (mi.isComplete()) { this._onMediaInfo(mi); } } var ppsCount = v.getUint8(offset); if (ppsCount === 0) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid AVCDecoderConfigurationRecord: No PPS"); return; } else if (ppsCount > 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Strange AVCDecoderConfigurationRecord: PPS Count = " + ppsCount); } offset++; for (var i = 0; i < ppsCount; i++) { var len = v.getUint16(offset, !le); offset += 2; if (len === 0) { continue; } offset += len; } meta.avcc = new Uint8Array(dataSize); meta.avcc.set(new Uint8Array(arrayBuffer, dataOffset, dataSize), 0); _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed AVCDecoderConfigurationRecord"); if (this._isInitialMetadataDispatched()) { if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) { this._onDataAvailable(this._audioTrack, this._videoTrack); } } else { this._videoInitialMetadataDispatched = true; } this._dispatch = false; this._onTrackMetadata("video", meta); }; FLVDemuxer2.prototype._parseAVCVideoData = function(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition, frameType, cts) { var le = this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); var units = [], length = 0; var offset = 0; var lengthSize = this._naluLengthSize; var dts = this._timestampBase + tagTimestamp; var keyframe = frameType === 1; while (offset < dataSize) { if (offset + 4 >= dataSize) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Malformed Nalu near timestamp " + dts + ", offset = " + offset + ", dataSize = " + dataSize); break; } var naluSize = v.getUint32(offset, !le); if (lengthSize === 3) { naluSize >>>= 8; } if (naluSize > dataSize - lengthSize) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Malformed Nalus near timestamp " + dts + ", NaluSize > DataSize!"); return; } var unitType = v.getUint8(offset + lengthSize) & 31; if (unitType === 5) { keyframe = true; } var data = new Uint8Array(arrayBuffer, dataOffset + offset, lengthSize + naluSize); var unit = { type: unitType, data }; units.push(unit); length += data.byteLength; offset += lengthSize + naluSize; } if (units.length) { var track = this._videoTrack; var avcSample = { units, length, isKeyframe: keyframe, dts, cts, pts: dts + cts }; if (keyframe) { avcSample.fileposition = tagPosition; } track.samples.push(avcSample); track.length += length; } }; return FLVDemuxer2; }(); __webpack_exports__2["default"] = FLVDemuxer; }, "./src/demux/sps-parser.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _exp_golomb_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/demux/exp-golomb.js"); var SPSParser = function() { function SPSParser2() { } SPSParser2._ebsp2rbsp = function(uint8array) { var src = uint8array; var src_length = src.byteLength; var dst = new Uint8Array(src_length); var dst_idx = 0; for (var i = 0; i < src_length; i++) { if (i >= 2) { if (src[i] === 3 && src[i - 1] === 0 && src[i - 2] === 0) { continue; } } dst[dst_idx] = src[i]; dst_idx++; } return new Uint8Array(dst.buffer, 0, dst_idx); }; SPSParser2.parseSPS = function(uint8array) { var rbsp = SPSParser2._ebsp2rbsp(uint8array); var gb = new _exp_golomb_js__WEBPACK_IMPORTED_MODULE_0__.default(rbsp); gb.readByte(); var profile_idc = gb.readByte(); gb.readByte(); var level_idc = gb.readByte(); gb.readUEG(); var profile_string = SPSParser2.getProfileString(profile_idc); var level_string = SPSParser2.getLevelString(level_idc); var chroma_format_idc = 1; var chroma_format = 420; var chroma_format_table = [0, 420, 422, 444]; var bit_depth = 8; if (profile_idc === 100 || profile_idc === 110 || profile_idc === 122 || profile_idc === 244 || profile_idc === 44 || profile_idc === 83 || profile_idc === 86 || profile_idc === 118 || profile_idc === 128 || profile_idc === 138 || profile_idc === 144) { chroma_format_idc = gb.readUEG(); if (chroma_format_idc === 3) { gb.readBits(1); } if (chroma_format_idc <= 3) { chroma_format = chroma_format_table[chroma_format_idc]; } bit_depth = gb.readUEG() + 8; gb.readUEG(); gb.readBits(1); if (gb.readBool()) { var scaling_list_count = chroma_format_idc !== 3 ? 8 : 12; for (var i = 0; i < scaling_list_count; i++) { if (gb.readBool()) { if (i < 6) { SPSParser2._skipScalingList(gb, 16); } else { SPSParser2._skipScalingList(gb, 64); } } } } } gb.readUEG(); var pic_order_cnt_type = gb.readUEG(); if (pic_order_cnt_type === 0) { gb.readUEG(); } else if (pic_order_cnt_type === 1) { gb.readBits(1); gb.readSEG(); gb.readSEG(); var num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG(); for (var i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) { gb.readSEG(); } } var ref_frames = gb.readUEG(); gb.readBits(1); var pic_width_in_mbs_minus1 = gb.readUEG(); var pic_height_in_map_units_minus1 = gb.readUEG(); var frame_mbs_only_flag = gb.readBits(1); if (frame_mbs_only_flag === 0) { gb.readBits(1); } gb.readBits(1); var frame_crop_left_offset = 0; var frame_crop_right_offset = 0; var frame_crop_top_offset = 0; var frame_crop_bottom_offset = 0; var frame_cropping_flag = gb.readBool(); if (frame_cropping_flag) { frame_crop_left_offset = gb.readUEG(); frame_crop_right_offset = gb.readUEG(); frame_crop_top_offset = gb.readUEG(); frame_crop_bottom_offset = gb.readUEG(); } var sar_width = 1, sar_height = 1; var fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0; var vui_parameters_present_flag = gb.readBool(); if (vui_parameters_present_flag) { if (gb.readBool()) { var aspect_ratio_idc = gb.readByte(); var sar_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]; var sar_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]; if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) { sar_width = sar_w_table[aspect_ratio_idc - 1]; sar_height = sar_h_table[aspect_ratio_idc - 1]; } else if (aspect_ratio_idc === 255) { sar_width = gb.readByte() << 8 | gb.readByte(); sar_height = gb.readByte() << 8 | gb.readByte(); } } if (gb.readBool()) { gb.readBool(); } if (gb.readBool()) { gb.readBits(4); if (gb.readBool()) { gb.readBits(24); } } if (gb.readBool()) { gb.readUEG(); gb.readUEG(); } if (gb.readBool()) { var num_units_in_tick = gb.readBits(32); var time_scale = gb.readBits(32); fps_fixed = gb.readBool(); fps_num = time_scale; fps_den = num_units_in_tick * 2; fps = fps_num / fps_den; } } var sarScale = 1; if (sar_width !== 1 || sar_height !== 1) { sarScale = sar_width / sar_height; } var crop_unit_x = 0, crop_unit_y = 0; if (chroma_format_idc === 0) { crop_unit_x = 1; crop_unit_y = 2 - frame_mbs_only_flag; } else { var sub_wc = chroma_format_idc === 3 ? 1 : 2; var sub_hc = chroma_format_idc === 1 ? 2 : 1; crop_unit_x = sub_wc; crop_unit_y = sub_hc * (2 - frame_mbs_only_flag); } var codec_width = (pic_width_in_mbs_minus1 + 1) * 16; var codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16); codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x; codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y; var present_width = Math.ceil(codec_width * sarScale); gb.destroy(); gb = null; return { profile_string, level_string, bit_depth, ref_frames, chroma_format, chroma_format_string: SPSParser2.getChromaFormatString(chroma_format), frame_rate: { fixed: fps_fixed, fps, fps_den, fps_num }, sar_ratio: { width: sar_width, height: sar_height }, codec_size: { width: codec_width, height: codec_height }, present_size: { width: present_width, height: codec_height } }; }; SPSParser2._skipScalingList = function(gb, count) { var last_scale = 8, next_scale = 8; var delta_scale = 0; for (var i = 0; i < count; i++) { if (next_scale !== 0) { delta_scale = gb.readSEG(); next_scale = (last_scale + delta_scale + 256) % 256; } last_scale = next_scale === 0 ? last_scale : next_scale; } }; SPSParser2.getProfileString = function(profile_idc) { switch (profile_idc) { case 66: return "Baseline"; case 77: return "Main"; case 88: return "Extended"; case 100: return "High"; case 110: return "High10"; case 122: return "High422"; case 244: return "High444"; default: return "Unknown"; } }; SPSParser2.getLevelString = function(level_idc) { return (level_idc / 10).toFixed(1); }; SPSParser2.getChromaFormatString = function(chroma) { switch (chroma) { case 420: return "4:2:0"; case 422: return "4:2:2"; case 444: return "4:4:4"; default: return "Unknown"; } }; return SPSParser2; }(); __webpack_exports__2["default"] = SPSParser; }, "./src/flv.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/polyfill.js"); var _core_features_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/core/features.js"); var _io_loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/io/loader.js"); var _player_flv_player_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/player/flv-player.js"); var _player_native_player_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/player/native-player.js"); var _player_player_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/player/player-events.js"); var _player_player_errors_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/player/player-errors.js"); var _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/utils/logging-control.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/utils/exception.js"); _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_0__.default.install(); function createPlayer(mediaDataSource, optionalConfig) { var mds = mediaDataSource; if (mds == null || typeof mds !== "object") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_8__.InvalidArgumentException("MediaDataSource must be an javascript object!"); } if (!mds.hasOwnProperty("type")) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_8__.InvalidArgumentException("MediaDataSource must has type field to indicate video file type!"); } switch (mds.type) { case "flv": return new _player_flv_player_js__WEBPACK_IMPORTED_MODULE_3__.default(mds, optionalConfig); default: return new _player_native_player_js__WEBPACK_IMPORTED_MODULE_4__.default(mds, optionalConfig); } } function isSupported() { return _core_features_js__WEBPACK_IMPORTED_MODULE_1__.default.supportMSEH264Playback(); } function getFeatureList() { return _core_features_js__WEBPACK_IMPORTED_MODULE_1__.default.getFeatureList(); } var flvjs = {}; flvjs.createPlayer = createPlayer; flvjs.isSupported = isSupported; flvjs.getFeatureList = getFeatureList; flvjs.BaseLoader = _io_loader_js__WEBPACK_IMPORTED_MODULE_2__.BaseLoader; flvjs.LoaderStatus = _io_loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus; flvjs.LoaderErrors = _io_loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors; flvjs.Events = _player_player_events_js__WEBPACK_IMPORTED_MODULE_5__.default; flvjs.ErrorTypes = _player_player_errors_js__WEBPACK_IMPORTED_MODULE_6__.ErrorTypes; flvjs.ErrorDetails = _player_player_errors_js__WEBPACK_IMPORTED_MODULE_6__.ErrorDetails; flvjs.FlvPlayer = _player_flv_player_js__WEBPACK_IMPORTED_MODULE_3__.default; flvjs.NativePlayer = _player_native_player_js__WEBPACK_IMPORTED_MODULE_4__.default; flvjs.LoggingControl = _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_7__.default; Object.defineProperty(flvjs, "version", { enumerable: true, get: function() { return "1.6.2"; } }); __webpack_exports__2["default"] = flvjs; }, "./src/index.js": function(module2, __unused_webpack_exports, __webpack_require__2) { module2.exports = __webpack_require__2("./src/flv.js").default; }, "./src/io/fetch-stream-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/browser.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; return function(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var FetchStreamLoader = function(_super) { __extends(FetchStreamLoader2, _super); function FetchStreamLoader2(seekHandler, config) { var _this = _super.call(this, "fetch-stream-loader") || this; _this.TAG = "FetchStreamLoader"; _this._seekHandler = seekHandler; _this._config = config; _this._needStash = true; _this._requestAbort = false; _this._contentLength = null; _this._receivedLength = 0; return _this; } FetchStreamLoader2.isSupported = function() { try { var isWorkWellEdge = _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.msedge && _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.version.minor >= 15048; var browserNotBlacklisted = _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.msedge ? isWorkWellEdge : true; return self.fetch && self.ReadableStream && browserNotBlacklisted; } catch (e) { return false; } }; FetchStreamLoader2.prototype.destroy = function() { if (this.isWorking()) { this.abort(); } _super.prototype.destroy.call(this); }; FetchStreamLoader2.prototype.open = function(dataSource, range) { var _this = this; this._dataSource = dataSource; this._range = range; var sourceURL = dataSource.url; if (this._config.reuseRedirectedURL && dataSource.redirectedURL != void 0) { sourceURL = dataSource.redirectedURL; } var seekConfig = this._seekHandler.getConfig(sourceURL, range); var headers = new self.Headers(); if (typeof seekConfig.headers === "object") { var configHeaders = seekConfig.headers; for (var key in configHeaders) { if (configHeaders.hasOwnProperty(key)) { headers.append(key, configHeaders[key]); } } } var params = { method: "GET", headers, mode: "cors", cache: "default", referrerPolicy: "no-referrer-when-downgrade" }; if (typeof this._config.headers === "object") { for (var key in this._config.headers) { headers.append(key, this._config.headers[key]); } } if (dataSource.cors === false) { params.mode = "same-origin"; } if (dataSource.withCredentials) { params.credentials = "include"; } if (dataSource.referrerPolicy) { params.referrerPolicy = dataSource.referrerPolicy; } if (self.AbortController) { this._abortController = new self.AbortController(); params.signal = this._abortController.signal; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kConnecting; self.fetch(seekConfig.url, params).then(function(res) { if (_this._requestAbort) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kIdle; res.body.cancel(); return; } if (res.ok && (res.status >= 200 && res.status <= 299)) { if (res.url !== seekConfig.url) { if (_this._onURLRedirect) { var redirectedURL = _this._seekHandler.removeURLParameters(res.url); _this._onURLRedirect(redirectedURL); } } var lengthHeader = res.headers.get("Content-Length"); if (lengthHeader != null) { _this._contentLength = parseInt(lengthHeader); if (_this._contentLength !== 0) { if (_this._onContentLengthKnown) { _this._onContentLengthKnown(_this._contentLength); } } } return _this._pump.call(_this, res.body.getReader()); } else { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; if (_this._onError) { _this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.HTTP_STATUS_CODE_INVALID, { code: res.status, msg: res.statusText }); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException("FetchStreamLoader: Http code invalid, " + res.status + " " + res.statusText); } } }).catch(function(e) { if (_this._abortController && _this._abortController.signal.aborted) { return; } _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; if (_this._onError) { _this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EXCEPTION, { code: -1, msg: e.message }); } else { throw e; } }); }; FetchStreamLoader2.prototype.abort = function() { this._requestAbort = true; if (this._status !== _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kBuffering || !_utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.chrome) { if (this._abortController) { try { this._abortController.abort(); } catch (e) { } } } }; FetchStreamLoader2.prototype._pump = function(reader) { var _this = this; return reader.read().then(function(result) { if (result.done) { if (_this._contentLength !== null && _this._receivedLength < _this._contentLength) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; var type = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EARLY_EOF; var info = { code: -1, msg: "Fetch stream meet Early-EOF" }; if (_this._onError) { _this._onError(type, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException(info.msg); } } else { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; if (_this._onComplete) { _this._onComplete(_this._range.from, _this._range.from + _this._receivedLength - 1); } } } else { if (_this._abortController && _this._abortController.signal.aborted) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; return; } else if (_this._requestAbort === true) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; return reader.cancel(); } _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kBuffering; var chunk = result.value.buffer; var byteStart = _this._range.from + _this._receivedLength; _this._receivedLength += chunk.byteLength; if (_this._onDataArrival) { _this._onDataArrival(chunk, byteStart, _this._receivedLength); } _this._pump(reader); } }).catch(function(e) { if (_this._abortController && _this._abortController.signal.aborted) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; return; } if (e.code === 11 && _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.msedge) { return; } _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; var type = 0; var info = null; if ((e.code === 19 || e.message === "network error") && (_this._contentLength === null || _this._contentLength !== null && _this._receivedLength < _this._contentLength)) { type = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EARLY_EOF; info = { code: e.code, msg: "Fetch stream meet Early-EOF" }; } else { type = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EXCEPTION; info = { code: e.code, msg: e.message }; } if (_this._onError) { _this._onError(type, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException(info.msg); } }); }; return FetchStreamLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_1__.BaseLoader); __webpack_exports__2["default"] = FetchStreamLoader; }, "./src/io/io-controller.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/speed-sampler.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/io/loader.js"); var _fetch_stream_loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/io/fetch-stream-loader.js"); var _xhr_moz_chunked_loader_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/io/xhr-moz-chunked-loader.js"); var _xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/io/xhr-range-loader.js"); var _websocket_loader_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/io/websocket-loader.js"); var _range_seek_handler_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/io/range-seek-handler.js"); var _param_seek_handler_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/io/param-seek-handler.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__2("./src/utils/exception.js"); var IOController = function() { function IOController2(dataSource, config, extraData) { this.TAG = "IOController"; this._config = config; this._extraData = extraData; this._stashInitialSize = 1024 * 384; if (config.stashInitialSize != void 0 && config.stashInitialSize > 0) { this._stashInitialSize = config.stashInitialSize; } this._stashUsed = 0; this._stashSize = this._stashInitialSize; this._bufferSize = 1024 * 1024 * 3; this._stashBuffer = new ArrayBuffer(this._bufferSize); this._stashByteStart = 0; this._enableStash = true; if (config.enableStashBuffer === false) { this._enableStash = false; } this._loader = null; this._loaderClass = null; this._seekHandler = null; this._dataSource = dataSource; this._isWebSocketURL = /wss?:\/\/(.+?)/.test(dataSource.url); this._refTotalLength = dataSource.filesize ? dataSource.filesize : null; this._totalLength = this._refTotalLength; this._fullRequestFlag = false; this._currentRange = null; this._redirectedURL = null; this._speedNormalized = 0; this._speedSampler = new _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__.default(); this._speedNormalizeList = [64, 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096]; this._isEarlyEofReconnecting = false; this._paused = false; this._resumeFrom = 0; this._onDataArrival = null; this._onSeeked = null; this._onError = null; this._onComplete = null; this._onRedirect = null; this._onRecoveredEarlyEof = null; this._selectSeekHandler(); this._selectLoader(); this._createLoader(); } IOController2.prototype.destroy = function() { if (this._loader.isWorking()) { this._loader.abort(); } this._loader.destroy(); this._loader = null; this._loaderClass = null; this._dataSource = null; this._stashBuffer = null; this._stashUsed = this._stashSize = this._bufferSize = this._stashByteStart = 0; this._currentRange = null; this._speedSampler = null; this._isEarlyEofReconnecting = false; this._onDataArrival = null; this._onSeeked = null; this._onError = null; this._onComplete = null; this._onRedirect = null; this._onRecoveredEarlyEof = null; this._extraData = null; }; IOController2.prototype.isWorking = function() { return this._loader && this._loader.isWorking() && !this._paused; }; IOController2.prototype.isPaused = function() { return this._paused; }; Object.defineProperty(IOController2.prototype, "status", { get: function() { return this._loader.status; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "extraData", { get: function() { return this._extraData; }, set: function(data) { this._extraData = data; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onDataArrival", { get: function() { return this._onDataArrival; }, set: function(callback) { this._onDataArrival = callback; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onSeeked", { get: function() { return this._onSeeked; }, set: function(callback) { this._onSeeked = callback; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onError", { get: function() { return this._onError; }, set: function(callback) { this._onError = callback; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onComplete", { get: function() { return this._onComplete; }, set: function(callback) { this._onComplete = callback; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onRedirect", { get: function() { return this._onRedirect; }, set: function(callback) { this._onRedirect = callback; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onRecoveredEarlyEof", { get: function() { return this._onRecoveredEarlyEof; }, set: function(callback) { this._onRecoveredEarlyEof = callback; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "currentURL", { get: function() { return this._dataSource.url; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "hasRedirect", { get: function() { return this._redirectedURL != null || this._dataSource.redirectedURL != void 0; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "currentRedirectedURL", { get: function() { return this._redirectedURL || this._dataSource.redirectedURL; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "currentSpeed", { get: function() { if (this._loaderClass === _xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__.default) { return this._loader.currentSpeed; } return this._speedSampler.lastSecondKBps; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "loaderType", { get: function() { return this._loader.type; }, enumerable: false, configurable: true }); IOController2.prototype._selectSeekHandler = function() { var config = this._config; if (config.seekType === "range") { this._seekHandler = new _range_seek_handler_js__WEBPACK_IMPORTED_MODULE_7__.default(this._config.rangeLoadZeroStart); } else if (config.seekType === "param") { var paramStart = config.seekParamStart || "bstart"; var paramEnd = config.seekParamEnd || "bend"; this._seekHandler = new _param_seek_handler_js__WEBPACK_IMPORTED_MODULE_8__.default(paramStart, paramEnd); } else if (config.seekType === "custom") { if (typeof config.customSeekHandler !== "function") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.InvalidArgumentException("Custom seekType specified in config but invalid customSeekHandler!"); } this._seekHandler = new config.customSeekHandler(); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.InvalidArgumentException("Invalid seekType in config: " + config.seekType); } }; IOController2.prototype._selectLoader = function() { if (this._config.customLoader != null) { this._loaderClass = this._config.customLoader; } else if (this._isWebSocketURL) { this._loaderClass = _websocket_loader_js__WEBPACK_IMPORTED_MODULE_6__.default; } else if (_fetch_stream_loader_js__WEBPACK_IMPORTED_MODULE_3__.default.isSupported()) { this._loaderClass = _fetch_stream_loader_js__WEBPACK_IMPORTED_MODULE_3__.default; } else if (_xhr_moz_chunked_loader_js__WEBPACK_IMPORTED_MODULE_4__.default.isSupported()) { this._loaderClass = _xhr_moz_chunked_loader_js__WEBPACK_IMPORTED_MODULE_4__.default; } else if (_xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__.default.isSupported()) { this._loaderClass = _xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__.default; } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.RuntimeException("Your browser doesn't support xhr with arraybuffer responseType!"); } }; IOController2.prototype._createLoader = function() { this._loader = new this._loaderClass(this._seekHandler, this._config); if (this._loader.needStashBuffer === false) { this._enableStash = false; } this._loader.onContentLengthKnown = this._onContentLengthKnown.bind(this); this._loader.onURLRedirect = this._onURLRedirect.bind(this); this._loader.onDataArrival = this._onLoaderChunkArrival.bind(this); this._loader.onComplete = this._onLoaderComplete.bind(this); this._loader.onError = this._onLoaderError.bind(this); }; IOController2.prototype.open = function(optionalFrom) { this._currentRange = { from: 0, to: -1 }; if (optionalFrom) { this._currentRange.from = optionalFrom; } this._speedSampler.reset(); if (!optionalFrom) { this._fullRequestFlag = true; } this._loader.open(this._dataSource, Object.assign({}, this._currentRange)); }; IOController2.prototype.abort = function() { this._loader.abort(); if (this._paused) { this._paused = false; this._resumeFrom = 0; } }; IOController2.prototype.pause = function() { if (this.isWorking()) { this._loader.abort(); if (this._stashUsed !== 0) { this._resumeFrom = this._stashByteStart; this._currentRange.to = this._stashByteStart - 1; } else { this._resumeFrom = this._currentRange.to + 1; } this._stashUsed = 0; this._stashByteStart = 0; this._paused = true; } }; IOController2.prototype.resume = function() { if (this._paused) { this._paused = false; var bytes = this._resumeFrom; this._resumeFrom = 0; this._internalSeek(bytes, true); } }; IOController2.prototype.seek = function(bytes) { this._paused = false; this._stashUsed = 0; this._stashByteStart = 0; this._internalSeek(bytes, true); }; IOController2.prototype._internalSeek = function(bytes, dropUnconsumed) { if (this._loader.isWorking()) { this._loader.abort(); } this._flushStashBuffer(dropUnconsumed); this._loader.destroy(); this._loader = null; var requestRange = { from: bytes, to: -1 }; this._currentRange = { from: requestRange.from, to: -1 }; this._speedSampler.reset(); this._stashSize = this._stashInitialSize; this._createLoader(); this._loader.open(this._dataSource, requestRange); if (this._onSeeked) { this._onSeeked(); } }; IOController2.prototype.updateUrl = function(url) { if (!url || typeof url !== "string" || url.length === 0) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.InvalidArgumentException("Url must be a non-empty string!"); } this._dataSource.url = url; }; IOController2.prototype._expandBuffer = function(expectedBytes) { var bufferNewSize = this._stashSize; while (bufferNewSize + 1024 * 1024 * 1 < expectedBytes) { bufferNewSize *= 2; } bufferNewSize += 1024 * 1024 * 1; if (bufferNewSize === this._bufferSize) { return; } var newBuffer = new ArrayBuffer(bufferNewSize); if (this._stashUsed > 0) { var stashOldArray = new Uint8Array(this._stashBuffer, 0, this._stashUsed); var stashNewArray = new Uint8Array(newBuffer, 0, bufferNewSize); stashNewArray.set(stashOldArray, 0); } this._stashBuffer = newBuffer; this._bufferSize = bufferNewSize; }; IOController2.prototype._normalizeSpeed = function(input) { var list = this._speedNormalizeList; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (input < list[0]) { return list[0]; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || input >= list[mid] && input < list[mid + 1]) { return list[mid]; } else if (list[mid] < input) { lbound = mid + 1; } else { ubound = mid - 1; } } }; IOController2.prototype._adjustStashSize = function(normalized) { var stashSizeKB = 0; if (this._config.isLive) { stashSizeKB = normalized; } else { if (normalized < 512) { stashSizeKB = normalized; } else if (normalized >= 512 && normalized <= 1024) { stashSizeKB = Math.floor(normalized * 1.5); } else { stashSizeKB = normalized * 2; } } if (stashSizeKB > 8192) { stashSizeKB = 8192; } var bufferSize = stashSizeKB * 1024 + 1024 * 1024 * 1; if (this._bufferSize < bufferSize) { this._expandBuffer(bufferSize); } this._stashSize = stashSizeKB * 1024; }; IOController2.prototype._dispatchChunks = function(chunks, byteStart) { this._currentRange.to = byteStart + chunks.byteLength - 1; return this._onDataArrival(chunks, byteStart); }; IOController2.prototype._onURLRedirect = function(redirectedURL) { this._redirectedURL = redirectedURL; if (this._onRedirect) { this._onRedirect(redirectedURL); } }; IOController2.prototype._onContentLengthKnown = function(contentLength) { if (contentLength && this._fullRequestFlag) { this._totalLength = contentLength; this._fullRequestFlag = false; } }; IOController2.prototype._onLoaderChunkArrival = function(chunk, byteStart, receivedLength) { if (!this._onDataArrival) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.IllegalStateException("IOController: No existing consumer (onDataArrival) callback!"); } if (this._paused) { return; } if (this._isEarlyEofReconnecting) { this._isEarlyEofReconnecting = false; if (this._onRecoveredEarlyEof) { this._onRecoveredEarlyEof(); } } this._speedSampler.addBytes(chunk.byteLength); var KBps = this._speedSampler.lastSecondKBps; if (KBps !== 0) { var normalized = this._normalizeSpeed(KBps); if (this._speedNormalized !== normalized) { this._speedNormalized = normalized; this._adjustStashSize(normalized); } } if (!this._enableStash) { if (this._stashUsed === 0) { var consumed = this._dispatchChunks(chunk, byteStart); if (consumed < chunk.byteLength) { var remain = chunk.byteLength - consumed; if (remain > this._bufferSize) { this._expandBuffer(remain); } var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); stashArray.set(new Uint8Array(chunk, consumed), 0); this._stashUsed += remain; this._stashByteStart = byteStart + consumed; } } else { if (this._stashUsed + chunk.byteLength > this._bufferSize) { this._expandBuffer(this._stashUsed + chunk.byteLength); } var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); stashArray.set(new Uint8Array(chunk), this._stashUsed); this._stashUsed += chunk.byteLength; var consumed = this._dispatchChunks(this._stashBuffer.slice(0, this._stashUsed), this._stashByteStart); if (consumed < this._stashUsed && consumed > 0) { var remainArray = new Uint8Array(this._stashBuffer, consumed); stashArray.set(remainArray, 0); } this._stashUsed -= consumed; this._stashByteStart += consumed; } } else { if (this._stashUsed === 0 && this._stashByteStart === 0) { this._stashByteStart = byteStart; } if (this._stashUsed + chunk.byteLength <= this._stashSize) { var stashArray = new Uint8Array(this._stashBuffer, 0, this._stashSize); stashArray.set(new Uint8Array(chunk), this._stashUsed); this._stashUsed += chunk.byteLength; } else { var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); if (this._stashUsed > 0) { var buffer = this._stashBuffer.slice(0, this._stashUsed); var consumed = this._dispatchChunks(buffer, this._stashByteStart); if (consumed < buffer.byteLength) { if (consumed > 0) { var remainArray = new Uint8Array(buffer, consumed); stashArray.set(remainArray, 0); this._stashUsed = remainArray.byteLength; this._stashByteStart += consumed; } } else { this._stashUsed = 0; this._stashByteStart += consumed; } if (this._stashUsed + chunk.byteLength > this._bufferSize) { this._expandBuffer(this._stashUsed + chunk.byteLength); stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); } stashArray.set(new Uint8Array(chunk), this._stashUsed); this._stashUsed += chunk.byteLength; } else { var consumed = this._dispatchChunks(chunk, byteStart); if (consumed < chunk.byteLength) { var remain = chunk.byteLength - consumed; if (remain > this._bufferSize) { this._expandBuffer(remain); stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); } stashArray.set(new Uint8Array(chunk, consumed), 0); this._stashUsed += remain; this._stashByteStart = byteStart + consumed; } } } } }; IOController2.prototype._flushStashBuffer = function(dropUnconsumed) { if (this._stashUsed > 0) { var buffer = this._stashBuffer.slice(0, this._stashUsed); var consumed = this._dispatchChunks(buffer, this._stashByteStart); var remain = buffer.byteLength - consumed; if (consumed < buffer.byteLength) { if (dropUnconsumed) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, remain + " bytes unconsumed data remain when flush buffer, dropped"); } else { if (consumed > 0) { var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); var remainArray = new Uint8Array(buffer, consumed); stashArray.set(remainArray, 0); this._stashUsed = remainArray.byteLength; this._stashByteStart += consumed; } return 0; } } this._stashUsed = 0; this._stashByteStart = 0; return remain; } return 0; }; IOController2.prototype._onLoaderComplete = function(from, to) { this._flushStashBuffer(true); if (this._onComplete) { this._onComplete(this._extraData); } }; IOController2.prototype._onLoaderError = function(type, data) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e(this.TAG, "Loader error, code = " + data.code + ", msg = " + data.msg); this._flushStashBuffer(false); if (this._isEarlyEofReconnecting) { this._isEarlyEofReconnecting = false; type = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.UNRECOVERABLE_EARLY_EOF; } switch (type) { case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EARLY_EOF: { if (!this._config.isLive) { if (this._totalLength) { var nextFrom = this._currentRange.to + 1; if (nextFrom < this._totalLength) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Connection lost, trying reconnect..."); this._isEarlyEofReconnecting = true; this._internalSeek(nextFrom, false); } return; } } type = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.UNRECOVERABLE_EARLY_EOF; break; } case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.UNRECOVERABLE_EARLY_EOF: case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.CONNECTING_TIMEOUT: case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.HTTP_STATUS_CODE_INVALID: case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EXCEPTION: break; } if (this._onError) { this._onError(type, data); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.RuntimeException("IOException: " + data.msg); } }; return IOController2; }(); __webpack_exports__2["default"] = IOController; }, "./src/io/loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "LoaderStatus": function() { return LoaderStatus; }, "LoaderErrors": function() { return LoaderErrors; }, "BaseLoader": function() { return BaseLoader; } }); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/exception.js"); var LoaderStatus = { kIdle: 0, kConnecting: 1, kBuffering: 2, kError: 3, kComplete: 4 }; var LoaderErrors = { OK: "OK", EXCEPTION: "Exception", HTTP_STATUS_CODE_INVALID: "HttpStatusCodeInvalid", CONNECTING_TIMEOUT: "ConnectingTimeout", EARLY_EOF: "EarlyEof", UNRECOVERABLE_EARLY_EOF: "UnrecoverableEarlyEof" }; var BaseLoader = function() { function BaseLoader2(typeName) { this._type = typeName || "undefined"; this._status = LoaderStatus.kIdle; this._needStash = false; this._onContentLengthKnown = null; this._onURLRedirect = null; this._onDataArrival = null; this._onError = null; this._onComplete = null; } BaseLoader2.prototype.destroy = function() { this._status = LoaderStatus.kIdle; this._onContentLengthKnown = null; this._onURLRedirect = null; this._onDataArrival = null; this._onError = null; this._onComplete = null; }; BaseLoader2.prototype.isWorking = function() { return this._status === LoaderStatus.kConnecting || this._status === LoaderStatus.kBuffering; }; Object.defineProperty(BaseLoader2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "status", { get: function() { return this._status; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "needStashBuffer", { get: function() { return this._needStash; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onContentLengthKnown", { get: function() { return this._onContentLengthKnown; }, set: function(callback) { this._onContentLengthKnown = callback; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onURLRedirect", { get: function() { return this._onURLRedirect; }, set: function(callback) { this._onURLRedirect = callback; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onDataArrival", { get: function() { return this._onDataArrival; }, set: function(callback) { this._onDataArrival = callback; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onError", { get: function() { return this._onError; }, set: function(callback) { this._onError = callback; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onComplete", { get: function() { return this._onComplete; }, set: function(callback) { this._onComplete = callback; }, enumerable: false, configurable: true }); BaseLoader2.prototype.open = function(dataSource, range) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.NotImplementedException("Unimplemented abstract function!"); }; BaseLoader2.prototype.abort = function() { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.NotImplementedException("Unimplemented abstract function!"); }; return BaseLoader2; }(); }, "./src/io/param-seek-handler.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var ParamSeekHandler = function() { function ParamSeekHandler2(paramStart, paramEnd) { this._startName = paramStart; this._endName = paramEnd; } ParamSeekHandler2.prototype.getConfig = function(baseUrl, range) { var url = baseUrl; if (range.from !== 0 || range.to !== -1) { var needAnd = true; if (url.indexOf("?") === -1) { url += "?"; needAnd = false; } if (needAnd) { url += "&"; } url += this._startName + "=" + range.from.toString(); if (range.to !== -1) { url += "&" + this._endName + "=" + range.to.toString(); } } return { url, headers: {} }; }; ParamSeekHandler2.prototype.removeURLParameters = function(seekedURL) { var baseURL = seekedURL.split("?")[0]; var params = void 0; var queryIndex = seekedURL.indexOf("?"); if (queryIndex !== -1) { params = seekedURL.substring(queryIndex + 1); } var resultParams = ""; if (params != void 0 && params.length > 0) { var pairs = params.split("&"); for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split("="); var requireAnd = i > 0; if (pair[0] !== this._startName && pair[0] !== this._endName) { if (requireAnd) { resultParams += "&"; } resultParams += pairs[i]; } } } return resultParams.length === 0 ? baseURL : baseURL + "?" + resultParams; }; return ParamSeekHandler2; }(); __webpack_exports__2["default"] = ParamSeekHandler; }, "./src/io/range-seek-handler.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var RangeSeekHandler = function() { function RangeSeekHandler2(zeroStart) { this._zeroStart = zeroStart || false; } RangeSeekHandler2.prototype.getConfig = function(url, range) { var headers = {}; if (range.from !== 0 || range.to !== -1) { var param = void 0; if (range.to !== -1) { param = "bytes=" + range.from.toString() + "-" + range.to.toString(); } else { param = "bytes=" + range.from.toString() + "-"; } headers["Range"] = param; } else if (this._zeroStart) { headers["Range"] = "bytes=0-"; } return { url, headers }; }; RangeSeekHandler2.prototype.removeURLParameters = function(seekedURL) { return seekedURL; }; return RangeSeekHandler2; }(); __webpack_exports__2["default"] = RangeSeekHandler; }, "./src/io/speed-sampler.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var SpeedSampler = function() { function SpeedSampler2() { this._firstCheckpoint = 0; this._lastCheckpoint = 0; this._intervalBytes = 0; this._totalBytes = 0; this._lastSecondBytes = 0; if (self.performance && self.performance.now) { this._now = self.performance.now.bind(self.performance); } else { this._now = Date.now; } } SpeedSampler2.prototype.reset = function() { this._firstCheckpoint = this._lastCheckpoint = 0; this._totalBytes = this._intervalBytes = 0; this._lastSecondBytes = 0; }; SpeedSampler2.prototype.addBytes = function(bytes) { if (this._firstCheckpoint === 0) { this._firstCheckpoint = this._now(); this._lastCheckpoint = this._firstCheckpoint; this._intervalBytes += bytes; this._totalBytes += bytes; } else if (this._now() - this._lastCheckpoint < 1e3) { this._intervalBytes += bytes; this._totalBytes += bytes; } else { this._lastSecondBytes = this._intervalBytes; this._intervalBytes = bytes; this._totalBytes += bytes; this._lastCheckpoint = this._now(); } }; Object.defineProperty(SpeedSampler2.prototype, "currentKBps", { get: function() { this.addBytes(0); var durationSeconds = (this._now() - this._lastCheckpoint) / 1e3; if (durationSeconds == 0) durationSeconds = 1; return this._intervalBytes / durationSeconds / 1024; }, enumerable: false, configurable: true }); Object.defineProperty(SpeedSampler2.prototype, "lastSecondKBps", { get: function() { this.addBytes(0); if (this._lastSecondBytes !== 0) { return this._lastSecondBytes / 1024; } else { if (this._now() - this._lastCheckpoint >= 500) { return this.currentKBps; } else { return 0; } } }, enumerable: false, configurable: true }); Object.defineProperty(SpeedSampler2.prototype, "averageKBps", { get: function() { var durationSeconds = (this._now() - this._firstCheckpoint) / 1e3; return this._totalBytes / durationSeconds / 1024; }, enumerable: false, configurable: true }); return SpeedSampler2; }(); __webpack_exports__2["default"] = SpeedSampler; }, "./src/io/websocket-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _loader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; return function(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var WebSocketLoader = function(_super) { __extends(WebSocketLoader2, _super); function WebSocketLoader2() { var _this = _super.call(this, "websocket-loader") || this; _this.TAG = "WebSocketLoader"; _this._needStash = true; _this._ws = null; _this._requestAbort = false; _this._receivedLength = 0; return _this; } WebSocketLoader2.isSupported = function() { try { return typeof self.WebSocket !== "undefined"; } catch (e) { return false; } }; WebSocketLoader2.prototype.destroy = function() { if (this._ws) { this.abort(); } _super.prototype.destroy.call(this); }; WebSocketLoader2.prototype.open = function(dataSource) { try { var ws = this._ws = new self.WebSocket(dataSource.url); ws.binaryType = "arraybuffer"; ws.onopen = this._onWebSocketOpen.bind(this); ws.onclose = this._onWebSocketClose.bind(this); ws.onmessage = this._onWebSocketMessage.bind(this); ws.onerror = this._onWebSocketError.bind(this); this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kConnecting; } catch (e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kError; var info = { code: e.code, msg: e.message }; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__.RuntimeException(info.msg); } } }; WebSocketLoader2.prototype.abort = function() { var ws = this._ws; if (ws && (ws.readyState === 0 || ws.readyState === 1)) { this._requestAbort = true; ws.close(); } this._ws = null; this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kComplete; }; WebSocketLoader2.prototype._onWebSocketOpen = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kBuffering; }; WebSocketLoader2.prototype._onWebSocketClose = function(e) { if (this._requestAbort === true) { this._requestAbort = false; return; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kComplete; if (this._onComplete) { this._onComplete(0, this._receivedLength - 1); } }; WebSocketLoader2.prototype._onWebSocketMessage = function(e) { var _this = this; if (e.data instanceof ArrayBuffer) { this._dispatchArrayBuffer(e.data); } else if (e.data instanceof Blob) { var reader_1 = new FileReader(); reader_1.onload = function() { _this._dispatchArrayBuffer(reader_1.result); }; reader_1.readAsArrayBuffer(e.data); } else { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kError; var info = { code: -1, msg: "Unsupported WebSocket message type: " + e.data.constructor.name }; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__.RuntimeException(info.msg); } } }; WebSocketLoader2.prototype._dispatchArrayBuffer = function(arraybuffer) { var chunk = arraybuffer; var byteStart = this._receivedLength; this._receivedLength += chunk.byteLength; if (this._onDataArrival) { this._onDataArrival(chunk, byteStart, this._receivedLength); } }; WebSocketLoader2.prototype._onWebSocketError = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kError; var info = { code: e.code, msg: e.message }; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__.RuntimeException(info.msg); } }; return WebSocketLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_0__.BaseLoader); __webpack_exports__2["default"] = WebSocketLoader; }, "./src/io/xhr-moz-chunked-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; return function(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var MozChunkedLoader = function(_super) { __extends(MozChunkedLoader2, _super); function MozChunkedLoader2(seekHandler, config) { var _this = _super.call(this, "xhr-moz-chunked-loader") || this; _this.TAG = "MozChunkedLoader"; _this._seekHandler = seekHandler; _this._config = config; _this._needStash = true; _this._xhr = null; _this._requestAbort = false; _this._contentLength = null; _this._receivedLength = 0; return _this; } MozChunkedLoader2.isSupported = function() { try { var xhr = new XMLHttpRequest(); xhr.open("GET", "https://example.com", true); xhr.responseType = "moz-chunked-arraybuffer"; return xhr.responseType === "moz-chunked-arraybuffer"; } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w("MozChunkedLoader", e.message); return false; } }; MozChunkedLoader2.prototype.destroy = function() { if (this.isWorking()) { this.abort(); } if (this._xhr) { this._xhr.onreadystatechange = null; this._xhr.onprogress = null; this._xhr.onloadend = null; this._xhr.onerror = null; this._xhr = null; } _super.prototype.destroy.call(this); }; MozChunkedLoader2.prototype.open = function(dataSource, range) { this._dataSource = dataSource; this._range = range; var sourceURL = dataSource.url; if (this._config.reuseRedirectedURL && dataSource.redirectedURL != void 0) { sourceURL = dataSource.redirectedURL; } var seekConfig = this._seekHandler.getConfig(sourceURL, range); this._requestURL = seekConfig.url; var xhr = this._xhr = new XMLHttpRequest(); xhr.open("GET", seekConfig.url, true); xhr.responseType = "moz-chunked-arraybuffer"; xhr.onreadystatechange = this._onReadyStateChange.bind(this); xhr.onprogress = this._onProgress.bind(this); xhr.onloadend = this._onLoadEnd.bind(this); xhr.onerror = this._onXhrError.bind(this); if (dataSource.withCredentials) { xhr.withCredentials = true; } if (typeof seekConfig.headers === "object") { var headers = seekConfig.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } if (typeof this._config.headers === "object") { var headers = this._config.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kConnecting; xhr.send(); }; MozChunkedLoader2.prototype.abort = function() { this._requestAbort = true; if (this._xhr) { this._xhr.abort(); } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; }; MozChunkedLoader2.prototype._onReadyStateChange = function(e) { var xhr = e.target; if (xhr.readyState === 2) { if (xhr.responseURL != void 0 && xhr.responseURL !== this._requestURL) { if (this._onURLRedirect) { var redirectedURL = this._seekHandler.removeURLParameters(xhr.responseURL); this._onURLRedirect(redirectedURL); } } if (xhr.status !== 0 && (xhr.status < 200 || xhr.status > 299)) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.HTTP_STATUS_CODE_INVALID, { code: xhr.status, msg: xhr.statusText }); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException("MozChunkedLoader: Http code invalid, " + xhr.status + " " + xhr.statusText); } } else { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kBuffering; } } }; MozChunkedLoader2.prototype._onProgress = function(e) { if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError) { return; } if (this._contentLength === null) { if (e.total !== null && e.total !== 0) { this._contentLength = e.total; if (this._onContentLengthKnown) { this._onContentLengthKnown(this._contentLength); } } } var chunk = e.target.response; var byteStart = this._range.from + this._receivedLength; this._receivedLength += chunk.byteLength; if (this._onDataArrival) { this._onDataArrival(chunk, byteStart, this._receivedLength); } }; MozChunkedLoader2.prototype._onLoadEnd = function(e) { if (this._requestAbort === true) { this._requestAbort = false; return; } else if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError) { return; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; if (this._onComplete) { this._onComplete(this._range.from, this._range.from + this._receivedLength - 1); } }; MozChunkedLoader2.prototype._onXhrError = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; var type = 0; var info = null; if (this._contentLength && e.loaded < this._contentLength) { type = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EARLY_EOF; info = { code: -1, msg: "Moz-Chunked stream meet Early-Eof" }; } else { type = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EXCEPTION; info = { code: -1, msg: e.constructor.name + " " + e.type }; } if (this._onError) { this._onError(type, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException(info.msg); } }; return MozChunkedLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_1__.BaseLoader); __webpack_exports__2["default"] = MozChunkedLoader; }, "./src/io/xhr-range-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/speed-sampler.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; return function(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var RangeLoader = function(_super) { __extends(RangeLoader2, _super); function RangeLoader2(seekHandler, config) { var _this = _super.call(this, "xhr-range-loader") || this; _this.TAG = "RangeLoader"; _this._seekHandler = seekHandler; _this._config = config; _this._needStash = false; _this._chunkSizeKBList = [ 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 5120, 6144, 7168, 8192 ]; _this._currentChunkSizeKB = 384; _this._currentSpeedNormalized = 0; _this._zeroSpeedChunkCount = 0; _this._xhr = null; _this._speedSampler = new _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__.default(); _this._requestAbort = false; _this._waitForTotalLength = false; _this._totalLengthReceived = false; _this._currentRequestURL = null; _this._currentRedirectedURL = null; _this._currentRequestRange = null; _this._totalLength = null; _this._contentLength = null; _this._receivedLength = 0; _this._lastTimeLoaded = 0; return _this; } RangeLoader2.isSupported = function() { try { var xhr = new XMLHttpRequest(); xhr.open("GET", "https://example.com", true); xhr.responseType = "arraybuffer"; return xhr.responseType === "arraybuffer"; } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w("RangeLoader", e.message); return false; } }; RangeLoader2.prototype.destroy = function() { if (this.isWorking()) { this.abort(); } if (this._xhr) { this._xhr.onreadystatechange = null; this._xhr.onprogress = null; this._xhr.onload = null; this._xhr.onerror = null; this._xhr = null; } _super.prototype.destroy.call(this); }; Object.defineProperty(RangeLoader2.prototype, "currentSpeed", { get: function() { return this._speedSampler.lastSecondKBps; }, enumerable: false, configurable: true }); RangeLoader2.prototype.open = function(dataSource, range) { this._dataSource = dataSource; this._range = range; this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kConnecting; var useRefTotalLength = false; if (this._dataSource.filesize != void 0 && this._dataSource.filesize !== 0) { useRefTotalLength = true; this._totalLength = this._dataSource.filesize; } if (!this._totalLengthReceived && !useRefTotalLength) { this._waitForTotalLength = true; this._internalOpen(this._dataSource, { from: 0, to: -1 }); } else { this._openSubRange(); } }; RangeLoader2.prototype._openSubRange = function() { var chunkSize = this._currentChunkSizeKB * 1024; var from = this._range.from + this._receivedLength; var to = from + chunkSize; if (this._contentLength != null) { if (to - this._range.from >= this._contentLength) { to = this._range.from + this._contentLength - 1; } } this._currentRequestRange = { from, to }; this._internalOpen(this._dataSource, this._currentRequestRange); }; RangeLoader2.prototype._internalOpen = function(dataSource, range) { this._lastTimeLoaded = 0; var sourceURL = dataSource.url; if (this._config.reuseRedirectedURL) { if (this._currentRedirectedURL != void 0) { sourceURL = this._currentRedirectedURL; } else if (dataSource.redirectedURL != void 0) { sourceURL = dataSource.redirectedURL; } } var seekConfig = this._seekHandler.getConfig(sourceURL, range); this._currentRequestURL = seekConfig.url; var xhr = this._xhr = new XMLHttpRequest(); xhr.open("GET", seekConfig.url, true); xhr.responseType = "arraybuffer"; xhr.onreadystatechange = this._onReadyStateChange.bind(this); xhr.onprogress = this._onProgress.bind(this); xhr.onload = this._onLoad.bind(this); xhr.onerror = this._onXhrError.bind(this); if (dataSource.withCredentials) { xhr.withCredentials = true; } if (typeof seekConfig.headers === "object") { var headers = seekConfig.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } if (typeof this._config.headers === "object") { var headers = this._config.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } xhr.send(); }; RangeLoader2.prototype.abort = function() { this._requestAbort = true; this._internalAbort(); this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kComplete; }; RangeLoader2.prototype._internalAbort = function() { if (this._xhr) { this._xhr.onreadystatechange = null; this._xhr.onprogress = null; this._xhr.onload = null; this._xhr.onerror = null; this._xhr.abort(); this._xhr = null; } }; RangeLoader2.prototype._onReadyStateChange = function(e) { var xhr = e.target; if (xhr.readyState === 2) { if (xhr.responseURL != void 0) { var redirectedURL = this._seekHandler.removeURLParameters(xhr.responseURL); if (xhr.responseURL !== this._currentRequestURL && redirectedURL !== this._currentRedirectedURL) { this._currentRedirectedURL = redirectedURL; if (this._onURLRedirect) { this._onURLRedirect(redirectedURL); } } } if (xhr.status >= 200 && xhr.status <= 299) { if (this._waitForTotalLength) { return; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kBuffering; } else { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.HTTP_STATUS_CODE_INVALID, { code: xhr.status, msg: xhr.statusText }); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.RuntimeException("RangeLoader: Http code invalid, " + xhr.status + " " + xhr.statusText); } } } }; RangeLoader2.prototype._onProgress = function(e) { if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError) { return; } if (this._contentLength === null) { var openNextRange = false; if (this._waitForTotalLength) { this._waitForTotalLength = false; this._totalLengthReceived = true; openNextRange = true; var total = e.total; this._internalAbort(); if (total != null & total !== 0) { this._totalLength = total; } } if (this._range.to === -1) { this._contentLength = this._totalLength - this._range.from; } else { this._contentLength = this._range.to - this._range.from + 1; } if (openNextRange) { this._openSubRange(); return; } if (this._onContentLengthKnown) { this._onContentLengthKnown(this._contentLength); } } var delta = e.loaded - this._lastTimeLoaded; this._lastTimeLoaded = e.loaded; this._speedSampler.addBytes(delta); }; RangeLoader2.prototype._normalizeSpeed = function(input) { var list = this._chunkSizeKBList; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (input < list[0]) { return list[0]; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || input >= list[mid] && input < list[mid + 1]) { return list[mid]; } else if (list[mid] < input) { lbound = mid + 1; } else { ubound = mid - 1; } } }; RangeLoader2.prototype._onLoad = function(e) { if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError) { return; } if (this._waitForTotalLength) { this._waitForTotalLength = false; return; } this._lastTimeLoaded = 0; var KBps = this._speedSampler.lastSecondKBps; if (KBps === 0) { this._zeroSpeedChunkCount++; if (this._zeroSpeedChunkCount >= 3) { KBps = this._speedSampler.currentKBps; } } if (KBps !== 0) { var normalized = this._normalizeSpeed(KBps); if (this._currentSpeedNormalized !== normalized) { this._currentSpeedNormalized = normalized; this._currentChunkSizeKB = normalized; } } var chunk = e.target.response; var byteStart = this._range.from + this._receivedLength; this._receivedLength += chunk.byteLength; var reportComplete = false; if (this._contentLength != null && this._receivedLength < this._contentLength) { this._openSubRange(); } else { reportComplete = true; } if (this._onDataArrival) { this._onDataArrival(chunk, byteStart, this._receivedLength); } if (reportComplete) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kComplete; if (this._onComplete) { this._onComplete(this._range.from, this._range.from + this._receivedLength - 1); } } }; RangeLoader2.prototype._onXhrError = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError; var type = 0; var info = null; if (this._contentLength && this._receivedLength > 0 && this._receivedLength < this._contentLength) { type = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EARLY_EOF; info = { code: -1, msg: "RangeLoader meet Early-Eof" }; } else { type = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EXCEPTION; info = { code: -1, msg: e.constructor.name + " " + e.type }; } if (this._onError) { this._onError(type, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.RuntimeException(info.msg); } }; return RangeLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_2__.BaseLoader); __webpack_exports__2["default"] = RangeLoader; }, "./src/player/flv-player.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/browser.js"); var _player_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/player/player-events.js"); var _core_transmuxer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/transmuxer.js"); var _core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/core/transmuxing-events.js"); var _core_mse_controller_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/core/mse-controller.js"); var _core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/core/mse-events.js"); var _player_errors_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/player/player-errors.js"); var _config_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__2("./src/config.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__2("./src/utils/exception.js"); var FlvPlayer = function() { function FlvPlayer2(mediaDataSource, config) { this.TAG = "FlvPlayer"; this._type = "FlvPlayer"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); this._config = (0, _config_js__WEBPACK_IMPORTED_MODULE_9__.createDefaultConfig)(); if (typeof config === "object") { Object.assign(this._config, config); } if (mediaDataSource.type.toLowerCase() !== "flv") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__.InvalidArgumentException("FlvPlayer requires an flv MediaDataSource input!"); } if (mediaDataSource.isLive === true) { this._config.isLive = true; } this.e = { onvLoadedMetadata: this._onvLoadedMetadata.bind(this), onvSeeking: this._onvSeeking.bind(this), onvCanPlay: this._onvCanPlay.bind(this), onvStalled: this._onvStalled.bind(this), onvProgress: this._onvProgress.bind(this) }; if (self.performance && self.performance.now) { this._now = self.performance.now.bind(self.performance); } else { this._now = Date.now; } this._pendingSeekTime = null; this._requestSetTime = false; this._seekpointRecord = null; this._progressChecker = null; this._mediaDataSource = mediaDataSource; this._mediaElement = null; this._msectl = null; this._transmuxer = null; this._mseSourceOpened = false; this._hasPendingLoad = false; this._receivedCanPlay = false; this._mediaInfo = null; this._statisticsInfo = null; var chromeNeedIDRFix = _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.chrome && (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.version.major < 50 || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.version.major === 50 && _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.version.build < 2661); this._alwaysSeekKeyframe = chromeNeedIDRFix || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.msedge || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.msie ? true : false; if (this._alwaysSeekKeyframe) { this._config.accurateSeek = false; } } FlvPlayer2.prototype.destroy = function() { if (this._progressChecker != null) { window.clearInterval(this._progressChecker); this._progressChecker = null; } if (this._transmuxer) { this.unload(); } if (this._mediaElement) { this.detachMediaElement(); } this.e = null; this._mediaDataSource = null; this._emitter.removeAllListeners(); this._emitter = null; }; FlvPlayer2.prototype.on = function(event, listener) { var _this = this; if (event === _player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO) { if (this._mediaInfo != null) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, _this.mediaInfo); }); } } else if (event === _player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO) { if (this._statisticsInfo != null) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, _this.statisticsInfo); }); } } this._emitter.addListener(event, listener); }; FlvPlayer2.prototype.off = function(event, listener) { this._emitter.removeListener(event, listener); }; FlvPlayer2.prototype.attachMediaElement = function(mediaElement) { var _this = this; this._mediaElement = mediaElement; mediaElement.addEventListener("loadedmetadata", this.e.onvLoadedMetadata); mediaElement.addEventListener("seeking", this.e.onvSeeking); mediaElement.addEventListener("canplay", this.e.onvCanPlay); mediaElement.addEventListener("stalled", this.e.onvStalled); mediaElement.addEventListener("progress", this.e.onvProgress); this._msectl = new _core_mse_controller_js__WEBPACK_IMPORTED_MODULE_6__.default(this._config); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.UPDATE_END, this._onmseUpdateEnd.bind(this)); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.BUFFER_FULL, this._onmseBufferFull.bind(this)); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.SOURCE_OPEN, function() { _this._mseSourceOpened = true; if (_this._hasPendingLoad) { _this._hasPendingLoad = false; _this.load(); } }); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.ERROR, function(info) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorTypes.MEDIA_ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorDetails.MEDIA_MSE_ERROR, info); }); this._msectl.attachMediaElement(mediaElement); if (this._pendingSeekTime != null) { try { mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } catch (e) { } } }; FlvPlayer2.prototype.detachMediaElement = function() { if (this._mediaElement) { this._msectl.detachMediaElement(); this._mediaElement.removeEventListener("loadedmetadata", this.e.onvLoadedMetadata); this._mediaElement.removeEventListener("seeking", this.e.onvSeeking); this._mediaElement.removeEventListener("canplay", this.e.onvCanPlay); this._mediaElement.removeEventListener("stalled", this.e.onvStalled); this._mediaElement.removeEventListener("progress", this.e.onvProgress); this._mediaElement = null; } if (this._msectl) { this._msectl.destroy(); this._msectl = null; } }; FlvPlayer2.prototype.load = function() { var _this = this; if (!this._mediaElement) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__.IllegalStateException("HTMLMediaElement must be attached before load()!"); } if (this._transmuxer) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__.IllegalStateException("FlvPlayer.load() has been called, please call unload() first!"); } if (this._hasPendingLoad) { return; } if (this._config.deferLoadAfterSourceOpen && this._mseSourceOpened === false) { this._hasPendingLoad = true; return; } if (this._mediaElement.readyState > 0) { this._requestSetTime = true; this._mediaElement.currentTime = 0; } this._transmuxer = new _core_transmuxer_js__WEBPACK_IMPORTED_MODULE_4__.default(this._mediaDataSource, this._config); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT, function(type, is) { _this._msectl.appendInitSegment(is); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT, function(type, ms) { _this._msectl.appendMediaSegment(ms); if (_this._config.lazyLoad && !_this._config.isLive) { var currentTime = _this._mediaElement.currentTime; if (ms.info.endDts >= (currentTime + _this._config.lazyLoadMaxDuration) * 1e3) { if (_this._progressChecker == null) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(_this.TAG, "Maximum buffering duration exceeded, suspend transmuxing task"); _this._suspendTransmuxer(); } } } }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE, function() { _this._msectl.endOfStream(); _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.LOADING_COMPLETE); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF, function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOVERED_EARLY_EOF); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR, function(detail, info) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorTypes.NETWORK_ERROR, detail, info); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR, function(detail, info) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorTypes.MEDIA_ERROR, detail, { code: -1, msg: info }); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO, function(mediaInfo) { _this._mediaInfo = mediaInfo; _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, Object.assign({}, mediaInfo)); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED, function(metadata) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.METADATA_ARRIVED, metadata); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED, function(data) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SCRIPTDATA_ARRIVED, data); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO, function(statInfo) { _this._statisticsInfo = _this._fillStatisticsInfo(statInfo); _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, Object.assign({}, _this._statisticsInfo)); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT, function(milliseconds) { if (_this._mediaElement && !_this._config.accurateSeek) { _this._requestSetTime = true; _this._mediaElement.currentTime = milliseconds / 1e3; } }); this._transmuxer.open(); }; FlvPlayer2.prototype.unload = function() { if (this._mediaElement) { this._mediaElement.pause(); } if (this._msectl) { this._msectl.seek(0); } if (this._transmuxer) { this._transmuxer.close(); this._transmuxer.destroy(); this._transmuxer = null; } }; FlvPlayer2.prototype.play = function() { return this._mediaElement.play(); }; FlvPlayer2.prototype.pause = function() { this._mediaElement.pause(); }; Object.defineProperty(FlvPlayer2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "buffered", { get: function() { return this._mediaElement.buffered; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "duration", { get: function() { return this._mediaElement.duration; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "volume", { get: function() { return this._mediaElement.volume; }, set: function(value) { this._mediaElement.volume = value; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "muted", { get: function() { return this._mediaElement.muted; }, set: function(muted) { this._mediaElement.muted = muted; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "currentTime", { get: function() { if (this._mediaElement) { return this._mediaElement.currentTime; } return 0; }, set: function(seconds) { if (this._mediaElement) { this._internalSeek(seconds); } else { this._pendingSeekTime = seconds; } }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "mediaInfo", { get: function() { return Object.assign({}, this._mediaInfo); }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "statisticsInfo", { get: function() { if (this._statisticsInfo == null) { this._statisticsInfo = {}; } this._statisticsInfo = this._fillStatisticsInfo(this._statisticsInfo); return Object.assign({}, this._statisticsInfo); }, enumerable: false, configurable: true }); FlvPlayer2.prototype._fillStatisticsInfo = function(statInfo) { statInfo.playerType = this._type; if (!(this._mediaElement instanceof HTMLVideoElement)) { return statInfo; } var hasQualityInfo = true; var decoded = 0; var dropped = 0; if (this._mediaElement.getVideoPlaybackQuality) { var quality = this._mediaElement.getVideoPlaybackQuality(); decoded = quality.totalVideoFrames; dropped = quality.droppedVideoFrames; } else if (this._mediaElement.webkitDecodedFrameCount != void 0) { decoded = this._mediaElement.webkitDecodedFrameCount; dropped = this._mediaElement.webkitDroppedFrameCount; } else { hasQualityInfo = false; } if (hasQualityInfo) { statInfo.decodedFrames = decoded; statInfo.droppedFrames = dropped; } return statInfo; }; FlvPlayer2.prototype._onmseUpdateEnd = function() { if (!this._config.lazyLoad || this._config.isLive) { return; } var buffered = this._mediaElement.buffered; var currentTime = this._mediaElement.currentTime; var currentRangeStart = 0; var currentRangeEnd = 0; for (var i = 0; i < buffered.length; i++) { var start = buffered.start(i); var end = buffered.end(i); if (start <= currentTime && currentTime < end) { currentRangeStart = start; currentRangeEnd = end; break; } } if (currentRangeEnd >= currentTime + this._config.lazyLoadMaxDuration && this._progressChecker == null) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Maximum buffering duration exceeded, suspend transmuxing task"); this._suspendTransmuxer(); } }; FlvPlayer2.prototype._onmseBufferFull = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MSE SourceBuffer is full, suspend transmuxing task"); if (this._progressChecker == null) { this._suspendTransmuxer(); } }; FlvPlayer2.prototype._suspendTransmuxer = function() { if (this._transmuxer) { this._transmuxer.pause(); if (this._progressChecker == null) { this._progressChecker = window.setInterval(this._checkProgressAndResume.bind(this), 1e3); } } }; FlvPlayer2.prototype._checkProgressAndResume = function() { var currentTime = this._mediaElement.currentTime; var buffered = this._mediaElement.buffered; var needResume = false; for (var i = 0; i < buffered.length; i++) { var from = buffered.start(i); var to = buffered.end(i); if (currentTime >= from && currentTime < to) { if (currentTime >= to - this._config.lazyLoadRecoverDuration) { needResume = true; } break; } } if (needResume) { window.clearInterval(this._progressChecker); this._progressChecker = null; if (needResume) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Continue loading from paused position"); this._transmuxer.resume(); } } }; FlvPlayer2.prototype._isTimepointBuffered = function(seconds) { var buffered = this._mediaElement.buffered; for (var i = 0; i < buffered.length; i++) { var from = buffered.start(i); var to = buffered.end(i); if (seconds >= from && seconds < to) { return true; } } return false; }; FlvPlayer2.prototype._internalSeek = function(seconds) { var directSeek = this._isTimepointBuffered(seconds); var directSeekBegin = false; var directSeekBeginTime = 0; if (seconds < 1 && this._mediaElement.buffered.length > 0) { var videoBeginTime = this._mediaElement.buffered.start(0); if (videoBeginTime < 1 && seconds < videoBeginTime || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari) { directSeekBegin = true; directSeekBeginTime = _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari ? 0.1 : videoBeginTime; } } if (directSeekBegin) { this._requestSetTime = true; this._mediaElement.currentTime = directSeekBeginTime; } else if (directSeek) { if (!this._alwaysSeekKeyframe) { this._requestSetTime = true; this._mediaElement.currentTime = seconds; } else { var idr = this._msectl.getNearestKeyframe(Math.floor(seconds * 1e3)); this._requestSetTime = true; if (idr != null) { this._mediaElement.currentTime = idr.dts / 1e3; } else { this._mediaElement.currentTime = seconds; } } if (this._progressChecker != null) { this._checkProgressAndResume(); } } else { if (this._progressChecker != null) { window.clearInterval(this._progressChecker); this._progressChecker = null; } this._msectl.seek(seconds); this._transmuxer.seek(Math.floor(seconds * 1e3)); if (this._config.accurateSeek) { this._requestSetTime = true; this._mediaElement.currentTime = seconds; } } }; FlvPlayer2.prototype._checkAndApplyUnbufferedSeekpoint = function() { if (this._seekpointRecord) { if (this._seekpointRecord.recordTime <= this._now() - 100) { var target = this._mediaElement.currentTime; this._seekpointRecord = null; if (!this._isTimepointBuffered(target)) { if (this._progressChecker != null) { window.clearTimeout(this._progressChecker); this._progressChecker = null; } this._msectl.seek(target); this._transmuxer.seek(Math.floor(target * 1e3)); if (this._config.accurateSeek) { this._requestSetTime = true; this._mediaElement.currentTime = target; } } } else { window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50); } } }; FlvPlayer2.prototype._checkAndResumeStuckPlayback = function(stalled) { var media = this._mediaElement; if (stalled || !this._receivedCanPlay || media.readyState < 2) { var buffered = media.buffered; if (buffered.length > 0 && media.currentTime < buffered.start(0)) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.w(this.TAG, "Playback seems stuck at " + media.currentTime + ", seek to " + buffered.start(0)); this._requestSetTime = true; this._mediaElement.currentTime = buffered.start(0); this._mediaElement.removeEventListener("progress", this.e.onvProgress); } } else { this._mediaElement.removeEventListener("progress", this.e.onvProgress); } }; FlvPlayer2.prototype._onvLoadedMetadata = function(e) { if (this._pendingSeekTime != null) { this._mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } }; FlvPlayer2.prototype._onvSeeking = function(e) { var target = this._mediaElement.currentTime; var buffered = this._mediaElement.buffered; if (this._requestSetTime) { this._requestSetTime = false; return; } if (target < 1 && buffered.length > 0) { var videoBeginTime = buffered.start(0); if (videoBeginTime < 1 && target < videoBeginTime || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari) { this._requestSetTime = true; this._mediaElement.currentTime = _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari ? 0.1 : videoBeginTime; return; } } if (this._isTimepointBuffered(target)) { if (this._alwaysSeekKeyframe) { var idr = this._msectl.getNearestKeyframe(Math.floor(target * 1e3)); if (idr != null) { this._requestSetTime = true; this._mediaElement.currentTime = idr.dts / 1e3; } } if (this._progressChecker != null) { this._checkProgressAndResume(); } return; } this._seekpointRecord = { seekPoint: target, recordTime: this._now() }; window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50); }; FlvPlayer2.prototype._onvCanPlay = function(e) { this._receivedCanPlay = true; this._mediaElement.removeEventListener("canplay", this.e.onvCanPlay); }; FlvPlayer2.prototype._onvStalled = function(e) { this._checkAndResumeStuckPlayback(true); }; FlvPlayer2.prototype._onvProgress = function(e) { this._checkAndResumeStuckPlayback(); }; return FlvPlayer2; }(); __webpack_exports__2["default"] = FlvPlayer; }, "./src/player/native-player.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _player_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/player/player-events.js"); var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/config.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/exception.js"); var NativePlayer = function() { function NativePlayer2(mediaDataSource, config) { this.TAG = "NativePlayer"; this._type = "NativePlayer"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); this._config = (0, _config_js__WEBPACK_IMPORTED_MODULE_2__.createDefaultConfig)(); if (typeof config === "object") { Object.assign(this._config, config); } if (mediaDataSource.type.toLowerCase() === "flv") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.InvalidArgumentException("NativePlayer does't support flv MediaDataSource input!"); } if (mediaDataSource.hasOwnProperty("segments")) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.InvalidArgumentException("NativePlayer(" + mediaDataSource.type + ") doesn't support multipart playback!"); } this.e = { onvLoadedMetadata: this._onvLoadedMetadata.bind(this) }; this._pendingSeekTime = null; this._statisticsReporter = null; this._mediaDataSource = mediaDataSource; this._mediaElement = null; } NativePlayer2.prototype.destroy = function() { if (this._mediaElement) { this.unload(); this.detachMediaElement(); } this.e = null; this._mediaDataSource = null; this._emitter.removeAllListeners(); this._emitter = null; }; NativePlayer2.prototype.on = function(event, listener) { var _this = this; if (event === _player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.MEDIA_INFO) { if (this._mediaElement != null && this._mediaElement.readyState !== 0) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.MEDIA_INFO, _this.mediaInfo); }); } } else if (event === _player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.STATISTICS_INFO) { if (this._mediaElement != null && this._mediaElement.readyState !== 0) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.STATISTICS_INFO, _this.statisticsInfo); }); } } this._emitter.addListener(event, listener); }; NativePlayer2.prototype.off = function(event, listener) { this._emitter.removeListener(event, listener); }; NativePlayer2.prototype.attachMediaElement = function(mediaElement) { this._mediaElement = mediaElement; mediaElement.addEventListener("loadedmetadata", this.e.onvLoadedMetadata); if (this._pendingSeekTime != null) { try { mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } catch (e) { } } }; NativePlayer2.prototype.detachMediaElement = function() { if (this._mediaElement) { this._mediaElement.src = ""; this._mediaElement.removeAttribute("src"); this._mediaElement.removeEventListener("loadedmetadata", this.e.onvLoadedMetadata); this._mediaElement = null; } if (this._statisticsReporter != null) { window.clearInterval(this._statisticsReporter); this._statisticsReporter = null; } }; NativePlayer2.prototype.load = function() { if (!this._mediaElement) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.IllegalStateException("HTMLMediaElement must be attached before load()!"); } this._mediaElement.src = this._mediaDataSource.url; if (this._mediaElement.readyState > 0) { this._mediaElement.currentTime = 0; } this._mediaElement.preload = "auto"; this._mediaElement.load(); this._statisticsReporter = window.setInterval(this._reportStatisticsInfo.bind(this), this._config.statisticsInfoReportInterval); }; NativePlayer2.prototype.unload = function() { if (this._mediaElement) { this._mediaElement.src = ""; this._mediaElement.removeAttribute("src"); } if (this._statisticsReporter != null) { window.clearInterval(this._statisticsReporter); this._statisticsReporter = null; } }; NativePlayer2.prototype.play = function() { return this._mediaElement.play(); }; NativePlayer2.prototype.pause = function() { this._mediaElement.pause(); }; Object.defineProperty(NativePlayer2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "buffered", { get: function() { return this._mediaElement.buffered; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "duration", { get: function() { return this._mediaElement.duration; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "volume", { get: function() { return this._mediaElement.volume; }, set: function(value) { this._mediaElement.volume = value; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "muted", { get: function() { return this._mediaElement.muted; }, set: function(muted) { this._mediaElement.muted = muted; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "currentTime", { get: function() { if (this._mediaElement) { return this._mediaElement.currentTime; } return 0; }, set: function(seconds) { if (this._mediaElement) { this._mediaElement.currentTime = seconds; } else { this._pendingSeekTime = seconds; } }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "mediaInfo", { get: function() { var mediaPrefix = this._mediaElement instanceof HTMLAudioElement ? "audio/" : "video/"; var info = { mimeType: mediaPrefix + this._mediaDataSource.type }; if (this._mediaElement) { info.duration = Math.floor(this._mediaElement.duration * 1e3); if (this._mediaElement instanceof HTMLVideoElement) { info.width = this._mediaElement.videoWidth; info.height = this._mediaElement.videoHeight; } } return info; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "statisticsInfo", { get: function() { var info = { playerType: this._type, url: this._mediaDataSource.url }; if (!(this._mediaElement instanceof HTMLVideoElement)) { return info; } var hasQualityInfo = true; var decoded = 0; var dropped = 0; if (this._mediaElement.getVideoPlaybackQuality) { var quality = this._mediaElement.getVideoPlaybackQuality(); decoded = quality.totalVideoFrames; dropped = quality.droppedVideoFrames; } else if (this._mediaElement.webkitDecodedFrameCount != void 0) { decoded = this._mediaElement.webkitDecodedFrameCount; dropped = this._mediaElement.webkitDroppedFrameCount; } else { hasQualityInfo = false; } if (hasQualityInfo) { info.decodedFrames = decoded; info.droppedFrames = dropped; } return info; }, enumerable: false, configurable: true }); NativePlayer2.prototype._onvLoadedMetadata = function(e) { if (this._pendingSeekTime != null) { this._mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.MEDIA_INFO, this.mediaInfo); }; NativePlayer2.prototype._reportStatisticsInfo = function() { this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.STATISTICS_INFO, this.statisticsInfo); }; return NativePlayer2; }(); __webpack_exports__2["default"] = NativePlayer; }, "./src/player/player-errors.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "ErrorTypes": function() { return ErrorTypes; }, "ErrorDetails": function() { return ErrorDetails; } }); var _io_loader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/io/loader.js"); var _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/demux/demux-errors.js"); var ErrorTypes = { NETWORK_ERROR: "NetworkError", MEDIA_ERROR: "MediaError", OTHER_ERROR: "OtherError" }; var ErrorDetails = { NETWORK_EXCEPTION: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, NETWORK_STATUS_CODE_INVALID: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.HTTP_STATUS_CODE_INVALID, NETWORK_TIMEOUT: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.CONNECTING_TIMEOUT, NETWORK_UNRECOVERABLE_EARLY_EOF: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.UNRECOVERABLE_EARLY_EOF, MEDIA_MSE_ERROR: "MediaMSEError", MEDIA_FORMAT_ERROR: _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__.default.FORMAT_ERROR, MEDIA_FORMAT_UNSUPPORTED: _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__.default.FORMAT_UNSUPPORTED, MEDIA_CODEC_UNSUPPORTED: _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__.default.CODEC_UNSUPPORTED }; }, "./src/player/player-events.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var PlayerEvents = { ERROR: "error", LOADING_COMPLETE: "loading_complete", RECOVERED_EARLY_EOF: "recovered_early_eof", MEDIA_INFO: "media_info", METADATA_ARRIVED: "metadata_arrived", SCRIPTDATA_ARRIVED: "scriptdata_arrived", STATISTICS_INFO: "statistics_info" }; __webpack_exports__2["default"] = PlayerEvents; }, "./src/remux/aac-silent.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var AAC = function() { function AAC2() { } AAC2.getSilentFrame = function(codec, channelCount) { if (codec === "mp4a.40.2") { if (channelCount === 1) { return new Uint8Array([0, 200, 0, 128, 35, 128]); } else if (channelCount === 2) { return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]); } else if (channelCount === 3) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]); } else if (channelCount === 4) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]); } else if (channelCount === 5) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]); } else if (channelCount === 6) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]); } } else { if (channelCount === 1) { return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); } else if (channelCount === 2) { return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); } else if (channelCount === 3) { return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); } } return null; }; return AAC2; }(); __webpack_exports__2["default"] = AAC; }, "./src/remux/mp4-generator.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var MP4 = function() { function MP42() { } MP42.init = function() { MP42.types = { avc1: [], avcC: [], btrt: [], dinf: [], dref: [], esds: [], ftyp: [], hdlr: [], mdat: [], mdhd: [], mdia: [], mfhd: [], minf: [], moof: [], moov: [], mp4a: [], mvex: [], mvhd: [], sdtp: [], stbl: [], stco: [], stsc: [], stsd: [], stsz: [], stts: [], tfdt: [], tfhd: [], traf: [], trak: [], trun: [], trex: [], tkhd: [], vmhd: [], smhd: [], ".mp3": [] }; for (var name_1 in MP42.types) { if (MP42.types.hasOwnProperty(name_1)) { MP42.types[name_1] = [ name_1.charCodeAt(0), name_1.charCodeAt(1), name_1.charCodeAt(2), name_1.charCodeAt(3) ]; } } var constants = MP42.constants = {}; constants.FTYP = new Uint8Array([ 105, 115, 111, 109, 0, 0, 0, 1, 105, 115, 111, 109, 97, 118, 99, 49 ]); constants.STSD_PREFIX = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1 ]); constants.STTS = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); constants.STSC = constants.STCO = constants.STTS; constants.STSZ = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]); constants.HDLR_VIDEO = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0 ]); constants.HDLR_AUDIO = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0 ]); constants.DREF = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1 ]); constants.SMHD = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); constants.VMHD = new Uint8Array([ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ]); }; MP42.box = function(type) { var size = 8; var result = null; var datas = Array.prototype.slice.call(arguments, 1); var arrayCount = datas.length; for (var i = 0; i < arrayCount; i++) { size += datas[i].byteLength; } result = new Uint8Array(size); result[0] = size >>> 24 & 255; result[1] = size >>> 16 & 255; result[2] = size >>> 8 & 255; result[3] = size & 255; result.set(type, 4); var offset = 8; for (var i = 0; i < arrayCount; i++) { result.set(datas[i], offset); offset += datas[i].byteLength; } return result; }; MP42.generateInitSegment = function(meta) { var ftyp = MP42.box(MP42.types.ftyp, MP42.constants.FTYP); var moov = MP42.moov(meta); var result = new Uint8Array(ftyp.byteLength + moov.byteLength); result.set(ftyp, 0); result.set(moov, ftyp.byteLength); return result; }; MP42.moov = function(meta) { var mvhd = MP42.mvhd(meta.timescale, meta.duration); var trak = MP42.trak(meta); var mvex = MP42.mvex(meta); return MP42.box(MP42.types.moov, mvhd, trak, mvex); }; MP42.mvhd = function(timescale, duration) { return MP42.box(MP42.types.mvhd, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, timescale >>> 24 & 255, timescale >>> 16 & 255, timescale >>> 8 & 255, timescale & 255, duration >>> 24 & 255, duration >>> 16 & 255, duration >>> 8 & 255, duration & 255, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255 ])); }; MP42.trak = function(meta) { return MP42.box(MP42.types.trak, MP42.tkhd(meta), MP42.mdia(meta)); }; MP42.tkhd = function(meta) { var trackId = meta.id, duration = meta.duration; var width = meta.presentWidth, height = meta.presentHeight; return MP42.box(MP42.types.tkhd, new Uint8Array([ 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, trackId >>> 24 & 255, trackId >>> 16 & 255, trackId >>> 8 & 255, trackId & 255, 0, 0, 0, 0, duration >>> 24 & 255, duration >>> 16 & 255, duration >>> 8 & 255, duration & 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, width >>> 8 & 255, width & 255, 0, 0, height >>> 8 & 255, height & 255, 0, 0 ])); }; MP42.mdia = function(meta) { return MP42.box(MP42.types.mdia, MP42.mdhd(meta), MP42.hdlr(meta), MP42.minf(meta)); }; MP42.mdhd = function(meta) { var timescale = meta.timescale; var duration = meta.duration; return MP42.box(MP42.types.mdhd, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, timescale >>> 24 & 255, timescale >>> 16 & 255, timescale >>> 8 & 255, timescale & 255, duration >>> 24 & 255, duration >>> 16 & 255, duration >>> 8 & 255, duration & 255, 85, 196, 0, 0 ])); }; MP42.hdlr = function(meta) { var data = null; if (meta.type === "audio") { data = MP42.constants.HDLR_AUDIO; } else { data = MP42.constants.HDLR_VIDEO; } return MP42.box(MP42.types.hdlr, data); }; MP42.minf = function(meta) { var xmhd = null; if (meta.type === "audio") { xmhd = MP42.box(MP42.types.smhd, MP42.constants.SMHD); } else { xmhd = MP42.box(MP42.types.vmhd, MP42.constants.VMHD); } return MP42.box(MP42.types.minf, xmhd, MP42.dinf(), MP42.stbl(meta)); }; MP42.dinf = function() { var result = MP42.box(MP42.types.dinf, MP42.box(MP42.types.dref, MP42.constants.DREF)); return result; }; MP42.stbl = function(meta) { var result = MP42.box(MP42.types.stbl, MP42.stsd(meta), MP42.box(MP42.types.stts, MP42.constants.STTS), MP42.box(MP42.types.stsc, MP42.constants.STSC), MP42.box(MP42.types.stsz, MP42.constants.STSZ), MP42.box(MP42.types.stco, MP42.constants.STCO)); return result; }; MP42.stsd = function(meta) { if (meta.type === "audio") { if (meta.codec === "mp3") { return MP42.box(MP42.types.stsd, MP42.constants.STSD_PREFIX, MP42.mp3(meta)); } return MP42.box(MP42.types.stsd, MP42.constants.STSD_PREFIX, MP42.mp4a(meta)); } else { return MP42.box(MP42.types.stsd, MP42.constants.STSD_PREFIX, MP42.avc1(meta)); } }; MP42.mp3 = function(meta) { var channelCount = meta.channelCount; var sampleRate = meta.audioSampleRate; var data = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, channelCount, 0, 16, 0, 0, 0, 0, sampleRate >>> 8 & 255, sampleRate & 255, 0, 0 ]); return MP42.box(MP42.types[".mp3"], data); }; MP42.mp4a = function(meta) { var channelCount = meta.channelCount; var sampleRate = meta.audioSampleRate; var data = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, channelCount, 0, 16, 0, 0, 0, 0, sampleRate >>> 8 & 255, sampleRate & 255, 0, 0 ]); return MP42.box(MP42.types.mp4a, data, MP42.esds(meta)); }; MP42.esds = function(meta) { var config = meta.config || []; var configSize = config.length; var data = new Uint8Array([ 0, 0, 0, 0, 3, 23 + configSize, 0, 1, 0, 4, 15 + configSize, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5 ].concat([ configSize ]).concat(config).concat([ 6, 1, 2 ])); return MP42.box(MP42.types.esds, data); }; MP42.avc1 = function(meta) { var avcc = meta.avcc; var width = meta.codecWidth, height = meta.codecHeight; var data = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, width >>> 8 & 255, width & 255, height >>> 8 & 255, height & 255, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 10, 120, 113, 113, 47, 102, 108, 118, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 255 ]); return MP42.box(MP42.types.avc1, data, MP42.box(MP42.types.avcC, avcc)); }; MP42.mvex = function(meta) { return MP42.box(MP42.types.mvex, MP42.trex(meta)); }; MP42.trex = function(meta) { var trackId = meta.id; var data = new Uint8Array([ 0, 0, 0, 0, trackId >>> 24 & 255, trackId >>> 16 & 255, trackId >>> 8 & 255, trackId & 255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 ]); return MP42.box(MP42.types.trex, data); }; MP42.moof = function(track, baseMediaDecodeTime) { return MP42.box(MP42.types.moof, MP42.mfhd(track.sequenceNumber), MP42.traf(track, baseMediaDecodeTime)); }; MP42.mfhd = function(sequenceNumber) { var data = new Uint8Array([ 0, 0, 0, 0, sequenceNumber >>> 24 & 255, sequenceNumber >>> 16 & 255, sequenceNumber >>> 8 & 255, sequenceNumber & 255 ]); return MP42.box(MP42.types.mfhd, data); }; MP42.traf = function(track, baseMediaDecodeTime) { var trackId = track.id; var tfhd = MP42.box(MP42.types.tfhd, new Uint8Array([ 0, 0, 0, 0, trackId >>> 24 & 255, trackId >>> 16 & 255, trackId >>> 8 & 255, trackId & 255 ])); var tfdt = MP42.box(MP42.types.tfdt, new Uint8Array([ 0, 0, 0, 0, baseMediaDecodeTime >>> 24 & 255, baseMediaDecodeTime >>> 16 & 255, baseMediaDecodeTime >>> 8 & 255, baseMediaDecodeTime & 255 ])); var sdtp = MP42.sdtp(track); var trun = MP42.trun(track, sdtp.byteLength + 16 + 16 + 8 + 16 + 8 + 8); return MP42.box(MP42.types.traf, tfhd, tfdt, trun, sdtp); }; MP42.sdtp = function(track) { var samples = track.samples || []; var sampleCount = samples.length; var data = new Uint8Array(4 + sampleCount); for (var i = 0; i < sampleCount; i++) { var flags = samples[i].flags; data[i + 4] = flags.isLeading << 6 | flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy; } return MP42.box(MP42.types.sdtp, data); }; MP42.trun = function(track, offset) { var samples = track.samples || []; var sampleCount = samples.length; var dataSize = 12 + 16 * sampleCount; var data = new Uint8Array(dataSize); offset += 8 + dataSize; data.set([ 0, 0, 15, 1, sampleCount >>> 24 & 255, sampleCount >>> 16 & 255, sampleCount >>> 8 & 255, sampleCount & 255, offset >>> 24 & 255, offset >>> 16 & 255, offset >>> 8 & 255, offset & 255 ], 0); for (var i = 0; i < sampleCount; i++) { var duration = samples[i].duration; var size = samples[i].size; var flags = samples[i].flags; var cts = samples[i].cts; data.set([ duration >>> 24 & 255, duration >>> 16 & 255, duration >>> 8 & 255, duration & 255, size >>> 24 & 255, size >>> 16 & 255, size >>> 8 & 255, size & 255, flags.isLeading << 2 | flags.dependsOn, flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.isNonSync, 0, 0, cts >>> 24 & 255, cts >>> 16 & 255, cts >>> 8 & 255, cts & 255 ], 12 + 16 * i); } return MP42.box(MP42.types.trun, data); }; MP42.mdat = function(data) { return MP42.box(MP42.types.mdat, data); }; return MP42; }(); MP4.init(); __webpack_exports__2["default"] = MP4; }, "./src/remux/mp4-remuxer.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/remux/mp4-generator.js"); var _aac_silent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/remux/aac-silent.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/browser.js"); var _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/media-segment-info.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/utils/exception.js"); var MP4Remuxer = function() { function MP4Remuxer2(config) { this.TAG = "MP4Remuxer"; this._config = config; this._isLive = config.isLive === true ? true : false; this._dtsBase = -1; this._dtsBaseInited = false; this._audioDtsBase = Infinity; this._videoDtsBase = Infinity; this._audioNextDts = void 0; this._videoNextDts = void 0; this._audioStashedLastSample = null; this._videoStashedLastSample = null; this._audioMeta = null; this._videoMeta = null; this._audioSegmentInfoList = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfoList("audio"); this._videoSegmentInfoList = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfoList("video"); this._onInitSegment = null; this._onMediaSegment = null; this._forceFirstIDR = _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.chrome && (_utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.version.major < 50 || _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.version.major === 50 && _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.version.build < 2661) ? true : false; this._fillSilentAfterSeek = _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.msedge || _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.msie; this._mp3UseMpegAudio = !_utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.firefox; this._fillAudioTimestampGap = this._config.fixAudioTimestampGap; } MP4Remuxer2.prototype.destroy = function() { this._dtsBase = -1; this._dtsBaseInited = false; this._audioMeta = null; this._videoMeta = null; this._audioSegmentInfoList.clear(); this._audioSegmentInfoList = null; this._videoSegmentInfoList.clear(); this._videoSegmentInfoList = null; this._onInitSegment = null; this._onMediaSegment = null; }; MP4Remuxer2.prototype.bindDataSource = function(producer) { producer.onDataAvailable = this.remux.bind(this); producer.onTrackMetadata = this._onTrackMetadataReceived.bind(this); return this; }; Object.defineProperty(MP4Remuxer2.prototype, "onInitSegment", { get: function() { return this._onInitSegment; }, set: function(callback) { this._onInitSegment = callback; }, enumerable: false, configurable: true }); Object.defineProperty(MP4Remuxer2.prototype, "onMediaSegment", { get: function() { return this._onMediaSegment; }, set: function(callback) { this._onMediaSegment = callback; }, enumerable: false, configurable: true }); MP4Remuxer2.prototype.insertDiscontinuity = function() { this._audioNextDts = this._videoNextDts = void 0; }; MP4Remuxer2.prototype.seek = function(originalDts) { this._audioStashedLastSample = null; this._videoStashedLastSample = null; this._videoSegmentInfoList.clear(); this._audioSegmentInfoList.clear(); }; MP4Remuxer2.prototype.remux = function(audioTrack, videoTrack) { if (!this._onMediaSegment) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("MP4Remuxer: onMediaSegment callback must be specificed!"); } if (!this._dtsBaseInited) { this._calculateDtsBase(audioTrack, videoTrack); } this._remuxVideo(videoTrack); this._remuxAudio(audioTrack); }; MP4Remuxer2.prototype._onTrackMetadataReceived = function(type, metadata) { var metabox = null; var container = "mp4"; var codec = metadata.codec; if (type === "audio") { this._audioMeta = metadata; if (metadata.codec === "mp3" && this._mp3UseMpegAudio) { container = "mpeg"; codec = ""; metabox = new Uint8Array(); } else { metabox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.generateInitSegment(metadata); } } else if (type === "video") { this._videoMeta = metadata; metabox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.generateInitSegment(metadata); } else { return; } if (!this._onInitSegment) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("MP4Remuxer: onInitSegment callback must be specified!"); } this._onInitSegment(type, { type, data: metabox.buffer, codec, container: type + "/" + container, mediaDuration: metadata.duration }); }; MP4Remuxer2.prototype._calculateDtsBase = function(audioTrack, videoTrack) { if (this._dtsBaseInited) { return; } if (audioTrack.samples && audioTrack.samples.length) { this._audioDtsBase = audioTrack.samples[0].dts; } if (videoTrack.samples && videoTrack.samples.length) { this._videoDtsBase = videoTrack.samples[0].dts; } this._dtsBase = Math.min(this._audioDtsBase, this._videoDtsBase); this._dtsBaseInited = true; }; MP4Remuxer2.prototype.flushStashedSamples = function() { var videoSample = this._videoStashedLastSample; var audioSample = this._audioStashedLastSample; var videoTrack = { type: "video", id: 1, sequenceNumber: 0, samples: [], length: 0 }; if (videoSample != null) { videoTrack.samples.push(videoSample); videoTrack.length = videoSample.length; } var audioTrack = { type: "audio", id: 2, sequenceNumber: 0, samples: [], length: 0 }; if (audioSample != null) { audioTrack.samples.push(audioSample); audioTrack.length = audioSample.length; } this._videoStashedLastSample = null; this._audioStashedLastSample = null; this._remuxVideo(videoTrack, true); this._remuxAudio(audioTrack, true); }; MP4Remuxer2.prototype._remuxAudio = function(audioTrack, force) { if (this._audioMeta == null) { return; } var track = audioTrack; var samples = track.samples; var dtsCorrection = void 0; var firstDts = -1, lastDts = -1, lastPts = -1; var refSampleDuration = this._audioMeta.refSampleDuration; var mpegRawTrack = this._audioMeta.codec === "mp3" && this._mp3UseMpegAudio; var firstSegmentAfterSeek = this._dtsBaseInited && this._audioNextDts === void 0; var insertPrefixSilentFrame = false; if (!samples || samples.length === 0) { return; } if (samples.length === 1 && !force) { return; } var offset = 0; var mdatbox = null; var mdatBytes = 0; if (mpegRawTrack) { offset = 0; mdatBytes = track.length; } else { offset = 8; mdatBytes = 8 + track.length; } var lastSample = null; if (samples.length > 1) { lastSample = samples.pop(); mdatBytes -= lastSample.length; } if (this._audioStashedLastSample != null) { var sample = this._audioStashedLastSample; this._audioStashedLastSample = null; samples.unshift(sample); mdatBytes += sample.length; } if (lastSample != null) { this._audioStashedLastSample = lastSample; } var firstSampleOriginalDts = samples[0].dts - this._dtsBase; if (this._audioNextDts) { dtsCorrection = firstSampleOriginalDts - this._audioNextDts; } else { if (this._audioSegmentInfoList.isEmpty()) { dtsCorrection = 0; if (this._fillSilentAfterSeek && !this._videoSegmentInfoList.isEmpty()) { if (this._audioMeta.originalCodec !== "mp3") { insertPrefixSilentFrame = true; } } } else { var lastSample_1 = this._audioSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts); if (lastSample_1 != null) { var distance = firstSampleOriginalDts - (lastSample_1.originalDts + lastSample_1.duration); if (distance <= 3) { distance = 0; } var expectedDts = lastSample_1.dts + lastSample_1.duration + distance; dtsCorrection = firstSampleOriginalDts - expectedDts; } else { dtsCorrection = 0; } } } if (insertPrefixSilentFrame) { var firstSampleDts = firstSampleOriginalDts - dtsCorrection; var videoSegment = this._videoSegmentInfoList.getLastSegmentBefore(firstSampleOriginalDts); if (videoSegment != null && videoSegment.beginDts < firstSampleDts) { var silentUnit = _aac_silent_js__WEBPACK_IMPORTED_MODULE_2__.default.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount); if (silentUnit) { var dts = videoSegment.beginDts; var silentFrameDuration = firstSampleDts - videoSegment.beginDts; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "InsertPrefixSilentAudio: dts: " + dts + ", duration: " + silentFrameDuration); samples.unshift({ unit: silentUnit, dts, pts: dts }); mdatBytes += silentUnit.byteLength; } } else { insertPrefixSilentFrame = false; } } var mp4Samples = []; for (var i = 0; i < samples.length; i++) { var sample = samples[i]; var unit = sample.unit; var originalDts = sample.dts - this._dtsBase; var dts = originalDts; var needFillSilentFrames = false; var silentFrames = null; var sampleDuration = 0; if (originalDts < -1e-3) { continue; } if (this._audioMeta.codec !== "mp3") { var curRefDts = originalDts; var maxAudioFramesDrift = 3; if (this._audioNextDts) { curRefDts = this._audioNextDts; } dtsCorrection = originalDts - curRefDts; if (dtsCorrection <= -maxAudioFramesDrift * refSampleDuration) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Dropping 1 audio frame (originalDts: " + originalDts + " ms ,curRefDts: " + curRefDts + " ms) due to dtsCorrection: " + dtsCorrection + " ms overlap."); continue; } else if (dtsCorrection >= maxAudioFramesDrift * refSampleDuration && this._fillAudioTimestampGap && !_utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.safari) { needFillSilentFrames = true; var frameCount = Math.floor(dtsCorrection / refSampleDuration); _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\n" + ("originalDts: " + originalDts + " ms, curRefDts: " + curRefDts + " ms, ") + ("dtsCorrection: " + Math.round(dtsCorrection) + " ms, generate: " + frameCount + " frames")); dts = Math.floor(curRefDts); sampleDuration = Math.floor(curRefDts + refSampleDuration) - dts; var silentUnit = _aac_silent_js__WEBPACK_IMPORTED_MODULE_2__.default.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount); if (silentUnit == null) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Unable to generate silent frame for " + (this._audioMeta.originalCodec + " with " + this._audioMeta.channelCount + " channels, repeat last frame")); silentUnit = unit; } silentFrames = []; for (var j = 0; j < frameCount; j++) { curRefDts = curRefDts + refSampleDuration; var intDts = Math.floor(curRefDts); var intDuration = Math.floor(curRefDts + refSampleDuration) - intDts; var frame = { dts: intDts, pts: intDts, cts: 0, unit: silentUnit, size: silentUnit.byteLength, duration: intDuration, originalDts, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0 } }; silentFrames.push(frame); mdatBytes += frame.size; ; } this._audioNextDts = curRefDts + refSampleDuration; } else { dts = Math.floor(curRefDts); sampleDuration = Math.floor(curRefDts + refSampleDuration) - dts; this._audioNextDts = curRefDts + refSampleDuration; } } else { dts = originalDts - dtsCorrection; if (i !== samples.length - 1) { var nextDts = samples[i + 1].dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else { if (lastSample != null) { var nextDts = lastSample.dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else if (mp4Samples.length >= 1) { sampleDuration = mp4Samples[mp4Samples.length - 1].duration; } else { sampleDuration = Math.floor(refSampleDuration); } } this._audioNextDts = dts + sampleDuration; } if (firstDts === -1) { firstDts = dts; } mp4Samples.push({ dts, pts: dts, cts: 0, unit: sample.unit, size: sample.unit.byteLength, duration: sampleDuration, originalDts, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0 } }); if (needFillSilentFrames) { mp4Samples.push.apply(mp4Samples, silentFrames); } } if (mp4Samples.length === 0) { track.samples = []; track.length = 0; return; } if (mpegRawTrack) { mdatbox = new Uint8Array(mdatBytes); } else { mdatbox = new Uint8Array(mdatBytes); mdatbox[0] = mdatBytes >>> 24 & 255; mdatbox[1] = mdatBytes >>> 16 & 255; mdatbox[2] = mdatBytes >>> 8 & 255; mdatbox[3] = mdatBytes & 255; mdatbox.set(_mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.types.mdat, 4); } for (var i = 0; i < mp4Samples.length; i++) { var unit = mp4Samples[i].unit; mdatbox.set(unit, offset); offset += unit.byteLength; } var latest = mp4Samples[mp4Samples.length - 1]; lastDts = latest.dts + latest.duration; var info = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfo(); info.beginDts = firstDts; info.endDts = lastDts; info.beginPts = firstDts; info.endPts = lastDts; info.originalBeginDts = mp4Samples[0].originalDts; info.originalEndDts = latest.originalDts + latest.duration; info.firstSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(mp4Samples[0].dts, mp4Samples[0].pts, mp4Samples[0].duration, mp4Samples[0].originalDts, false); info.lastSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(latest.dts, latest.pts, latest.duration, latest.originalDts, false); if (!this._isLive) { this._audioSegmentInfoList.append(info); } track.samples = mp4Samples; track.sequenceNumber++; var moofbox = null; if (mpegRawTrack) { moofbox = new Uint8Array(); } else { moofbox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.moof(track, firstDts); } track.samples = []; track.length = 0; var segment = { type: "audio", data: this._mergeBoxes(moofbox, mdatbox).buffer, sampleCount: mp4Samples.length, info }; if (mpegRawTrack && firstSegmentAfterSeek) { segment.timestampOffset = firstDts; } this._onMediaSegment("audio", segment); }; MP4Remuxer2.prototype._remuxVideo = function(videoTrack, force) { if (this._videoMeta == null) { return; } var track = videoTrack; var samples = track.samples; var dtsCorrection = void 0; var firstDts = -1, lastDts = -1; var firstPts = -1, lastPts = -1; if (!samples || samples.length === 0) { return; } if (samples.length === 1 && !force) { return; } var offset = 8; var mdatbox = null; var mdatBytes = 8 + videoTrack.length; var lastSample = null; if (samples.length > 1) { lastSample = samples.pop(); mdatBytes -= lastSample.length; } if (this._videoStashedLastSample != null) { var sample = this._videoStashedLastSample; this._videoStashedLastSample = null; samples.unshift(sample); mdatBytes += sample.length; } if (lastSample != null) { this._videoStashedLastSample = lastSample; } var firstSampleOriginalDts = samples[0].dts - this._dtsBase; if (this._videoNextDts) { dtsCorrection = firstSampleOriginalDts - this._videoNextDts; } else { if (this._videoSegmentInfoList.isEmpty()) { dtsCorrection = 0; } else { var lastSample_2 = this._videoSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts); if (lastSample_2 != null) { var distance = firstSampleOriginalDts - (lastSample_2.originalDts + lastSample_2.duration); if (distance <= 3) { distance = 0; } var expectedDts = lastSample_2.dts + lastSample_2.duration + distance; dtsCorrection = firstSampleOriginalDts - expectedDts; } else { dtsCorrection = 0; } } } var info = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfo(); var mp4Samples = []; for (var i = 0; i < samples.length; i++) { var sample = samples[i]; var originalDts = sample.dts - this._dtsBase; var isKeyframe = sample.isKeyframe; var dts = originalDts - dtsCorrection; var cts = sample.cts; var pts = dts + cts; if (firstDts === -1) { firstDts = dts; firstPts = pts; } var sampleDuration = 0; if (i !== samples.length - 1) { var nextDts = samples[i + 1].dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else { if (lastSample != null) { var nextDts = lastSample.dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else if (mp4Samples.length >= 1) { sampleDuration = mp4Samples[mp4Samples.length - 1].duration; } else { sampleDuration = Math.floor(this._videoMeta.refSampleDuration); } } if (isKeyframe) { var syncPoint = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(dts, pts, sampleDuration, sample.dts, true); syncPoint.fileposition = sample.fileposition; info.appendSyncPoint(syncPoint); } mp4Samples.push({ dts, pts, cts, units: sample.units, size: sample.length, isKeyframe, duration: sampleDuration, originalDts, flags: { isLeading: 0, dependsOn: isKeyframe ? 2 : 1, isDependedOn: isKeyframe ? 1 : 0, hasRedundancy: 0, isNonSync: isKeyframe ? 0 : 1 } }); } mdatbox = new Uint8Array(mdatBytes); mdatbox[0] = mdatBytes >>> 24 & 255; mdatbox[1] = mdatBytes >>> 16 & 255; mdatbox[2] = mdatBytes >>> 8 & 255; mdatbox[3] = mdatBytes & 255; mdatbox.set(_mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.types.mdat, 4); for (var i = 0; i < mp4Samples.length; i++) { var units = mp4Samples[i].units; while (units.length) { var unit = units.shift(); var data = unit.data; mdatbox.set(data, offset); offset += data.byteLength; } } var latest = mp4Samples[mp4Samples.length - 1]; lastDts = latest.dts + latest.duration; lastPts = latest.pts + latest.duration; this._videoNextDts = lastDts; info.beginDts = firstDts; info.endDts = lastDts; info.beginPts = firstPts; info.endPts = lastPts; info.originalBeginDts = mp4Samples[0].originalDts; info.originalEndDts = latest.originalDts + latest.duration; info.firstSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(mp4Samples[0].dts, mp4Samples[0].pts, mp4Samples[0].duration, mp4Samples[0].originalDts, mp4Samples[0].isKeyframe); info.lastSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(latest.dts, latest.pts, latest.duration, latest.originalDts, latest.isKeyframe); if (!this._isLive) { this._videoSegmentInfoList.append(info); } track.samples = mp4Samples; track.sequenceNumber++; if (this._forceFirstIDR) { var flags = mp4Samples[0].flags; flags.dependsOn = 2; flags.isNonSync = 0; } var moofbox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.moof(track, firstDts); track.samples = []; track.length = 0; this._onMediaSegment("video", { type: "video", data: this._mergeBoxes(moofbox, mdatbox).buffer, sampleCount: mp4Samples.length, info }); }; MP4Remuxer2.prototype._mergeBoxes = function(moof, mdat) { var result = new Uint8Array(moof.byteLength + mdat.byteLength); result.set(moof, 0); result.set(mdat, moof.byteLength); return result; }; return MP4Remuxer2; }(); __webpack_exports__2["default"] = MP4Remuxer; }, "./src/utils/browser.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var Browser = {}; function detect() { var ua = self.navigator.userAgent.toLowerCase(); var match = /(edge)\/([\w.]+)/.exec(ua) || /(opr)[\/]([\w.]+)/.exec(ua) || /(chrome)[ \/]([\w.]+)/.exec(ua) || /(iemobile)[\/]([\w.]+)/.exec(ua) || /(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec(ua) || ua.indexOf("compatible") < 0 && /(firefox)[ \/]([\w.]+)/.exec(ua) || []; var platform_match = /(ipad)/.exec(ua) || /(ipod)/.exec(ua) || /(windows phone)/.exec(ua) || /(iphone)/.exec(ua) || /(kindle)/.exec(ua) || /(android)/.exec(ua) || /(windows)/.exec(ua) || /(mac)/.exec(ua) || /(linux)/.exec(ua) || /(cros)/.exec(ua) || []; var matched = { browser: match[5] || match[3] || match[1] || "", version: match[2] || match[4] || "0", majorVersion: match[4] || match[2] || "0", platform: platform_match[0] || "" }; var browser = {}; if (matched.browser) { browser[matched.browser] = true; var versionArray = matched.majorVersion.split("."); browser.version = { major: parseInt(matched.majorVersion, 10), string: matched.version }; if (versionArray.length > 1) { browser.version.minor = parseInt(versionArray[1], 10); } if (versionArray.length > 2) { browser.version.build = parseInt(versionArray[2], 10); } } if (matched.platform) { browser[matched.platform] = true; } if (browser.chrome || browser.opr || browser.safari) { browser.webkit = true; } if (browser.rv || browser.iemobile) { if (browser.rv) { delete browser.rv; } var msie = "msie"; matched.browser = msie; browser[msie] = true; } if (browser.edge) { delete browser.edge; var msedge = "msedge"; matched.browser = msedge; browser[msedge] = true; } if (browser.opr) { var opera = "opera"; matched.browser = opera; browser[opera] = true; } if (browser.safari && browser.android) { var android = "android"; matched.browser = android; browser[android] = true; } browser.name = matched.browser; browser.platform = matched.platform; for (var key in Browser) { if (Browser.hasOwnProperty(key)) { delete Browser[key]; } } Object.assign(Browser, browser); } detect(); __webpack_exports__2["default"] = Browser; }, "./src/utils/exception.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "RuntimeException": function() { return RuntimeException; }, "IllegalStateException": function() { return IllegalStateException; }, "InvalidArgumentException": function() { return InvalidArgumentException; }, "NotImplementedException": function() { return NotImplementedException; } }); var __extends = function() { var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; return function(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var RuntimeException = function() { function RuntimeException2(message) { this._message = message; } Object.defineProperty(RuntimeException2.prototype, "name", { get: function() { return "RuntimeException"; }, enumerable: false, configurable: true }); Object.defineProperty(RuntimeException2.prototype, "message", { get: function() { return this._message; }, enumerable: false, configurable: true }); RuntimeException2.prototype.toString = function() { return this.name + ": " + this.message; }; return RuntimeException2; }(); var IllegalStateException = function(_super) { __extends(IllegalStateException2, _super); function IllegalStateException2(message) { return _super.call(this, message) || this; } Object.defineProperty(IllegalStateException2.prototype, "name", { get: function() { return "IllegalStateException"; }, enumerable: false, configurable: true }); return IllegalStateException2; }(RuntimeException); var InvalidArgumentException = function(_super) { __extends(InvalidArgumentException2, _super); function InvalidArgumentException2(message) { return _super.call(this, message) || this; } Object.defineProperty(InvalidArgumentException2.prototype, "name", { get: function() { return "InvalidArgumentException"; }, enumerable: false, configurable: true }); return InvalidArgumentException2; }(RuntimeException); var NotImplementedException = function(_super) { __extends(NotImplementedException2, _super); function NotImplementedException2(message) { return _super.call(this, message) || this; } Object.defineProperty(NotImplementedException2.prototype, "name", { get: function() { return "NotImplementedException"; }, enumerable: false, configurable: true }); return NotImplementedException2; }(RuntimeException); }, "./src/utils/logger.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var Log = function() { function Log2() { } Log2.e = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "error", str); } if (!Log2.ENABLE_ERROR) { return; } if (console.error) { console.error(str); } else if (console.warn) { console.warn(str); } else { console.log(str); } }; Log2.i = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "info", str); } if (!Log2.ENABLE_INFO) { return; } if (console.info) { console.info(str); } else { console.log(str); } }; Log2.w = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "warn", str); } if (!Log2.ENABLE_WARN) { return; } if (console.warn) { console.warn(str); } else { console.log(str); } }; Log2.d = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "debug", str); } if (!Log2.ENABLE_DEBUG) { return; } if (console.debug) { console.debug(str); } else { console.log(str); } }; Log2.v = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "verbose", str); } if (!Log2.ENABLE_VERBOSE) { return; } console.log(str); }; return Log2; }(); Log.GLOBAL_TAG = "flv.js"; Log.FORCE_GLOBAL_TAG = false; Log.ENABLE_ERROR = true; Log.ENABLE_INFO = true; Log.ENABLE_WARN = true; Log.ENABLE_DEBUG = true; Log.ENABLE_VERBOSE = true; Log.ENABLE_CALLBACK = false; Log.emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); __webpack_exports__2["default"] = Log; }, "./src/utils/logging-control.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var LoggingControl = function() { function LoggingControl2() { } Object.defineProperty(LoggingControl2, "forceGlobalTag", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "globalTag", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG; }, set: function(tag) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG = tag; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableAll", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableDebug", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableVerbose", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableInfo", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableWarn", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableError", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); LoggingControl2.getConfig = function() { return { globalTag: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG, forceGlobalTag: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG, enableVerbose: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE, enableDebug: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG, enableInfo: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO, enableWarn: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN, enableError: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR, enableCallback: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK }; }; LoggingControl2.applyConfig = function(config) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG = config.globalTag; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG = config.forceGlobalTag; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE = config.enableVerbose; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG = config.enableDebug; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO = config.enableInfo; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN = config.enableWarn; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR = config.enableError; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK = config.enableCallback; }; LoggingControl2._notifyChange = function() { var emitter = LoggingControl2.emitter; if (emitter.listenerCount("change") > 0) { var config = LoggingControl2.getConfig(); emitter.emit("change", config); } }; LoggingControl2.registerListener = function(listener) { LoggingControl2.emitter.addListener("change", listener); }; LoggingControl2.removeListener = function(listener) { LoggingControl2.emitter.removeListener("change", listener); }; LoggingControl2.addLogListener = function(listener) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.addListener("log", listener); if (_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.listenerCount("log") > 0) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK = true; LoggingControl2._notifyChange(); } }; LoggingControl2.removeLogListener = function(listener) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.removeListener("log", listener); if (_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.listenerCount("log") === 0) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK = false; LoggingControl2._notifyChange(); } }; return LoggingControl2; }(); LoggingControl.emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); __webpack_exports__2["default"] = LoggingControl; }, "./src/utils/polyfill.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); var Polyfill = function() { function Polyfill2() { } Polyfill2.install = function() { Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) { obj.__proto__ = proto; return obj; }; Object.assign = Object.assign || function(target) { if (target === void 0 || target === null) { throw new TypeError("Cannot convert undefined or null to object"); } var output = Object(target); for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; if (source !== void 0 && source !== null) { for (var key in source) { if (source.hasOwnProperty(key)) { output[key] = source[key]; } } } } return output; }; if (typeof self.Promise !== "function") { __webpack_require__2("./node_modules/es6-promise/dist/es6-promise.js").polyfill(); } }; return Polyfill2; }(); Polyfill.install(); __webpack_exports__2["default"] = Polyfill; }, "./src/utils/utf8-conv.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { "use strict"; __webpack_require__2.r(__webpack_exports__2); function checkContinuation(uint8array, start, checkLength) { var array = uint8array; if (start + checkLength < array.length) { while (checkLength--) { if ((array[++start] & 192) !== 128) return false; } return true; } else { return false; } } function decodeUTF8(uint8array) { var out = []; var input = uint8array; var i = 0; var length = uint8array.length; while (i < length) { if (input[i] < 128) { out.push(String.fromCharCode(input[i])); ++i; continue; } else if (input[i] < 192) { } else if (input[i] < 224) { if (checkContinuation(input, i, 1)) { var ucs4 = (input[i] & 31) << 6 | input[i + 1] & 63; if (ucs4 >= 128) { out.push(String.fromCharCode(ucs4 & 65535)); i += 2; continue; } } } else if (input[i] < 240) { if (checkContinuation(input, i, 2)) { var ucs4 = (input[i] & 15) << 12 | (input[i + 1] & 63) << 6 | input[i + 2] & 63; if (ucs4 >= 2048 && (ucs4 & 63488) !== 55296) { out.push(String.fromCharCode(ucs4 & 65535)); i += 3; continue; } } } else if (input[i] < 248) { if (checkContinuation(input, i, 3)) { var ucs4 = (input[i] & 7) << 18 | (input[i + 1] & 63) << 12 | (input[i + 2] & 63) << 6 | input[i + 3] & 63; if (ucs4 > 65536 && ucs4 < 1114112) { ucs4 -= 65536; out.push(String.fromCharCode(ucs4 >>> 10 | 55296)); out.push(String.fromCharCode(ucs4 & 1023 | 56320)); i += 4; continue; } } } out.push(String.fromCharCode(65533)); ++i; } return out.join(""); } __webpack_exports__2["default"] = decodeUTF8; } }; var __webpack_module_cache__ = {}; function __webpack_require__(moduleId) { var cachedModule = __webpack_module_cache__[moduleId]; if (cachedModule !== void 0) { return cachedModule.exports; } var module2 = __webpack_module_cache__[moduleId] = { exports: {} }; __webpack_modules__[moduleId].call(module2.exports, module2, module2.exports, __webpack_require__); return module2.exports; } __webpack_require__.m = __webpack_modules__; !function() { __webpack_require__.n = function(module2) { var getter = module2 && module2.__esModule ? function() { return module2["default"]; } : function() { return module2; }; __webpack_require__.d(getter, { a: getter }); return getter; }; }(); !function() { __webpack_require__.d = function(exports2, definition) { for (var key in definition) { if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports2, key)) { Object.defineProperty(exports2, key, { enumerable: true, get: definition[key] }); } } }; }(); !function() { __webpack_require__.g = function() { if (typeof globalThis === "object") return globalThis; try { return this || new Function("return this")(); } catch (e) { if (typeof window === "object") return window; } }(); }(); !function() { __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }; }(); !function() { __webpack_require__.r = function(exports2) { if (typeof Symbol !== "undefined" && Symbol.toStringTag) { Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" }); } Object.defineProperty(exports2, "__esModule", { value: true }); }; }(); var __webpack_exports__ = __webpack_require__("./src/index.js"); return __webpack_exports__; }(); }); } }); // dep:flv_js var flv_js_default = require_flv(); export { flv_js_default as default }; /*! * @overview es6-promise - a tiny implementation of Promises/A+. * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) * @license Licensed under MIT license * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version v4.2.8+1e68dce6 */ //# sourceMappingURL=flv_js.js.map