Created
February 8, 2022 17:20
-
-
Save Valinwolf/7431807e975c46ca83974100f6310266 to your computer and use it in GitHub Desktop.
Owncast Recordings System
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/var/www/somewhere/auth.php | |
<?php | |
if($_POST['name']=="YOUR_STREAM_KEY") { | |
http_response_code(200); | |
exit(); | |
} else { | |
http_response_code(401); | |
exit(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/var/www/somewhere/flv.min.js | |
#courtesy of https://github.com/Bilibili/flv.js/ | |
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.flvjs=f()}})(function(){var define,module,exports;return(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a){return a(o,!0)}if(i){return i(o,!0)}var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o+=1){s(r[o])}return s})({1:[function(_dereq_,module,exports){(function(process,global){(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory():typeof define==='function'&&define.amd?define(factory):(global.ES6Promise=factory())}(this,(function(){'use strict';function objectOrFunction(x){return typeof x==='function'||typeof x==='object'&&x!==null}function isFunction(x){return typeof x==='function'}var _isArray=undefined;if(!Array.isArray){_isArray=function(x){return Object.prototype.toString.call(x)==='[object Array]'}}else{_isArray=Array.isArray}var isArray=_isArray;var len=0;var vertxNext=undefined;var customSchedulerFn=undefined;var asap=function asap(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:undefined;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=[1000];function flush(){for(var i=0;i<len;i+=2){var callback=queue[i];var arg=queue[i+1];callback(arg);queue[i]=undefined;queue[i+1]=undefined}len=0}function attemptVertx(){try{var r=_dereq_;var vertx=r('vertx');vertxNext=vertx.runOnLoop||vertx.runOnContext;return useVertxTimer()}catch(e){return useSetTimeout()}}var scheduleFlush=undefined;if(isNode){scheduleFlush=useNextTick()}else if(BrowserMutationObserver){scheduleFlush=useMutationObserver()}else if(isWorker){scheduleFlush=useMessageChannel()}else if(browserWindow===undefined&&typeof _dereq_==='function'){scheduleFlush=attemptVertx()}else{scheduleFlush=useSetTimeout()}function then(onFulfillment,onRejection){var _arguments=arguments;var parent=this;var child=new this.constructor(noop);if(child[PROMISE_ID]===undefined){makePromise(child)}var _state=parent._state;if(_state){(function(){var callback=_arguments[_state-1];asap(function(){return invokeCallback(_state,child,callback,parent._result)})})()}else{subscribe(parent,child,onFulfillment,onRejection)}return child}function resolve(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(16);function noop(){}var PENDING=void 0;var FULFILLED=1;var REJECTED=2;var GET_THEN_ERROR=new ErrorObject();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 getThen(promise){try{return promise.then}catch(error){GET_THEN_ERROR.error=error;return GET_THEN_ERROR}}function tryThen(then,value,fulfillmentHandler,rejectionHandler){try{then.call(value,fulfillmentHandler,rejectionHandler)}catch(e){return e}}function handleForeignThenable(promise,thenable,then){asap(function(promise){var sealed=false;var error=tryThen(then,thenable,function(value){if(sealed){return}sealed=true;if(thenable!==value){_resolve(promise,value)}else{fulfill(promise,value)}},function(reason){if(sealed){return}sealed=true;_reject(promise,reason)},'Settle: '+(promise._label||' unknown promise'));if(!sealed&&error){sealed=true;_reject(promise,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,undefined,function(value){return _resolve(promise,value)},function(reason){return _reject(promise,reason)})}}function handleMaybeThenable(promise,maybeThenable,then$$){if(maybeThenable.constructor===promise.constructor&&then$$===then&&maybeThenable.constructor.resolve===resolve){handleOwnThenable(promise,maybeThenable)}else{if(then$$===GET_THEN_ERROR){_reject(promise,GET_THEN_ERROR.error);GET_THEN_ERROR.error=null}else if(then$$===undefined){fulfill(promise,maybeThenable)}else if(isFunction(then$$)){handleForeignThenable(promise,maybeThenable,then$$)}else{fulfill(promise,maybeThenable)}}}function _resolve(promise,value){if(promise===value){_reject(promise,selfFulfillment())}else if(objectOrFunction(value)){handleMaybeThenable(promise,value,getThen(value))}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=undefined,callback=undefined,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 ErrorObject(){this.error=null}var TRY_CATCH_ERROR=new ErrorObject();function tryCatch(callback,detail){try{return callback(detail)}catch(e){TRY_CATCH_ERROR.error=e;return TRY_CATCH_ERROR}}function invokeCallback(settled,promise,callback,detail){var hasCallback=isFunction(callback),value=undefined,error=undefined,succeeded=undefined,failed=undefined;if(hasCallback){value=tryCatch(callback,detail);if(value===TRY_CATCH_ERROR){failed=true;error=value.error;value.error=null}else{succeeded=true}if(promise===value){_reject(promise,cannotReturnOwn());return}}else{value=detail;succeeded=true}if(promise._state!==PENDING){}else if(hasCallback&&succeeded){_resolve(promise,value)}else if(failed){_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=undefined;promise._result=undefined;promise._subscribers=[]}function Enumerator(Constructor,input){this._instanceConstructor=Constructor;this.promise=new Constructor(noop);if(!this.promise[PROMISE_ID]){makePromise(this.promise)}if(isArray(input)){this._input=input;this.length=input.length;this._remaining=input.length;this._result=[this.length];if(this.length===0){fulfill(this.promise,this._result)}else{this.length=this.length||0;this._enumerate();if(this._remaining===0){fulfill(this.promise,this._result)}}}else{_reject(this.promise,validationError())}}function validationError(){return new Error('Array Methods must be provided an Array')};Enumerator.prototype._enumerate=function(){var length=this.length;var _input=this._input;for(var i=0;this._state===PENDING&&i<length;i+=1){this._eachEntry(_input[i],i)}};Enumerator.prototype._eachEntry=function(entry,i){var c=this._instanceConstructor;var resolve$$=c.resolve;if(resolve$$===resolve){var _then=getThen(entry);if(_then===then&&entry._state!==PENDING){this._settledAt(entry._state,i,entry._result)}else if(typeof _then!=='function'){this._remaining-=1;this._result[i]=entry}else if(c===Promise){var promise=new c(noop);handleMaybeThenable(promise,entry,_then);this._willSettleAt(promise,i)}else{this._willSettleAt(new c(function(resolve$$){return resolve$$(entry)}),i)}}else{this._willSettleAt(resolve$$(entry),i)}};Enumerator.prototype._settledAt=function(state,i,value){var promise=this.promise;if(promise._state===PENDING){this._remaining-=1;if(state===REJECTED){_reject(promise,value)}else{this._result[i]=value}}if(this._remaining===0){fulfill(promise,this._result)}};Enumerator.prototype._willSettleAt=function(promise,i){var enumerator=this;subscribe(promise,undefined,function(value){return enumerator._settledAt(FULFILLED,i,value)},function(reason){return enumerator._settledAt(REJECTED,i,reason)})};function all(entries){return new Enumerator(this,entries).promise}function race(entries){var Constructor=this;if(!isArray(entries)){return new Constructor(function(_,reject){return reject(new TypeError('You must pass an array to race.'))})}else{return new Constructor(function(resolve,reject){var length=entries.length;for(var i=0;i<length;i+=1){Constructor.resolve(entries[i]).then(resolve,reject)}})}}function reject(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.")}function Promise(resolver){this[PROMISE_ID]=nextId();this._result=this._state=undefined;this._subscribers=[];if(noop!==resolver){typeof resolver!=='function'&&needsResolver();this instanceof Promise?initializePromise(this,resolver):needsNew()}}Promise.all=all;Promise.race=race;Promise.resolve=resolve;Promise.reject=reject;Promise._setScheduler=setScheduler;Promise._setAsap=setAsap;Promise._asap=asap;Promise.prototype={constructor:Promise,then:then,'catch':function _catch(onRejection){return this.then(null,onRejection)}};function polyfill(){var local=undefined;if(typeof global!=='undefined'){local=global}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}Promise.polyfill=polyfill;Promise.Promise=Promise;return Promise})))}).call(this,_dereq_('_process'),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"_process":3}],2:[function(_dereq_,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n)){throw TypeError('n must be a positive number')}this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events){this._events={}}if(type==='error'){if(!this._events.error||(isObject(this._events.error)&&!this._events.error.length)){er=arguments[1];if(er instanceof Error){throw er;}else{var err=new Error('Uncaught, unspecified "error" event. ('+er+')');err.context=er;throw err}}}handler=this._events[type];if(isUndefined(handler)){return false}if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:args=Array.prototype.slice.call(arguments,1);handler.apply(this,args)}}else if(isObject(handler)){args=Array.prototype.slice.call(arguments,1);listeners=handler.slice();len=listeners.length;for(i=0;i<len;i+=1){listeners[i].apply(this,args)}}return true};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener)){throw TypeError('listener must be a function')}if(!this._events){this._events={}}if(this._events.newListener){this.emit('newListener',type,isFunction(listener.listener)?listener.listener:listener)}if(!this._events[type]){this._events[type]=listener}else if(isObject(this._events[type])){this._events[type].push(listener)}else{this._events[type]=[this._events[type],listener]}if(isObject(this._events[type])&&!this._events[type].warned){if(!isUndefined(this._maxListeners)){m=this._maxListeners}else{m=EventEmitter.defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error('(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.',this._events[type].length);if(typeof console.trace==='function'){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener)){throw TypeError('listener must be a function')}var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener)){throw TypeError('listener must be a function')}if(!this._events||!this._events[type]){return this}list=this._events[type];length=list.length;position=-1;if(list===listener||(isFunction(list.listener)&&list.listener===listener)){delete this._events[type];if(this._events.removeListener){this.emit('removeListener',type,listener)}}else if(isObject(list)){for(i=length;i-- >0;){if(list[i]===listener||(list[i].listener&&list[i].listener===listener)){position=i;break}}if(position<0){return this}if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener){this.emit('removeListener',type,listener)}}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events){return this}if(!this._events.removeListener){if(arguments.length===0){this._events={}}else if(this._events[type]){delete this._events[type]}return this}if(arguments.length===0){for(key in this._events){if(key==='removeListener'){continue}this.removeAllListeners(key)}this.removeAllListeners('removeListener');this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else if(listeners){while(listeners.length){this.removeListener(type,listeners[listeners.length-1])}}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type]){ret=[]}else if(isFunction(this._events[type])){ret=[this._events[type]]}else{ret=this._events[type].slice()}return ret};EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener)){return 1}else if(evlistener){return evlistener.length}}return 0};EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type)};function isFunction(arg){return typeof arg==='function'}function isNumber(arg){return typeof arg==='number'}function isObject(arg){return typeof arg==='object'&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],3:[function(_dereq_,module,exports){var process=module.exports={};var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error('setTimeout has not been defined')}function defaultClearTimeout(){throw new Error('clearTimeout has not been defined')}(function(){try{if(typeof setTimeout==='function'){cachedSetTimeout=setTimeout}else{cachedSetTimeout=defaultSetTimout}}catch(e){cachedSetTimeout=defaultSetTimout}try{if(typeof clearTimeout==='function'){cachedClearTimeout=clearTimeout}else{cachedClearTimeout=defaultClearTimeout}}catch(e){cachedClearTimeout=defaultClearTimeout}}());function runTimeout(fun){if(cachedSetTimeout===setTimeout){return setTimeout(fun,0)}if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0)}try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){return clearTimeout(marker)}if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker)}try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;runClearTimeout(timeout)}process.nextTick=function(fun){var args=[arguments.length-1];if(arguments.length>1){for(var i=1;i<arguments.length;i+=1){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title='browser';process.browser=true;process.env={};process.argv=[];process.version='';process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.prependListener=noop;process.prependOnceListener=noop;process.listeners=function(name){return[]};process.binding=function(name){throw new Error('process.binding is not supported')};process.cwd=function(){return '/'};process.chdir=function(dir){throw new Error('process.chdir is not supported')};process.umask=function(){return 0}},{}],4:[function(_dereq_,module,exports){var bundleFn=arguments[3];var sources=arguments[4];var cache=arguments[5];var stringify=JSON.stringify;module.exports=function(fn,options){var wkey;var cacheKeys=Object.keys(cache);for(var i=0,l=cacheKeys.length;i<l;i+=1){var key=cacheKeys[i];var exp=cache[key].exports;if(exp===fn||exp&&exp.default===fn){wkey=key;break}}if(!wkey){wkey=Math.floor(Math.pow(16,8)*Math.random()).toString(16);var wcache={};for(var i=0,l=cacheKeys.length;i<l;i+=1){var key=cacheKeys[i];wcache[key]=key}sources[wkey]=[Function(['require','module','exports'],'('+fn+')(self)'),wcache]}var skey=Math.floor(Math.pow(16,8)*Math.random()).toString(16);var scache={};scache[wkey]=wkey;sources[skey]=[Function(['require'],('var f = require('+stringify(wkey)+');(f.default ? f.default : f)(self);')),scache];var workerSources={};resolveSources(skey);function resolveSources(key){workerSources[key]=true;for(var depPath in sources[key][1]){var depKey=sources[key][1][depPath];if(!workerSources[depKey]){resolveSources(depKey)}}}var src='('+bundleFn+')({'+Object.keys(workerSources).map(function(key){return stringify(key)+':['+sources[key][0]+','+stringify(sources[key][1])+']'}).join(',')+'},{},['+stringify(skey)+'])';var URL=window.URL||window.webkitURL||window.mozURL||window.msURL;var blob=new Blob([src],{type:'text/javascript'});if(options&&options.bare){return blob}var workerUrl=URL.createObjectURL(blob);var worker=new Worker(workerUrl);worker.objectURL=workerUrl;return worker}},{}],5:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.createDefaultConfig=createDefaultConfig;var defaultConfig=exports.defaultConfig={enableWorker:false,enableStashBuffer:true,stashInitialSize:undefined,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:undefined,reuseRedirectedURL:false };function createDefaultConfig(){return Object.assign({},defaultConfig)}},{}],6:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _ioController=_dereq_('../io/io-controller.js');var _ioController2=_interopRequireDefault(_ioController);var _config=_dereq_('../config.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var Features=function(){function Features(){_classCallCheck(this,Features)}_createClass(Features,null,[{key:'supportMSEH264Playback',value:function supportMSEH264Playback(){return window.MediaSource&&window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')}},{key:'supportNetworkStreamIO',value:function supportNetworkStreamIO(){var ioctl=new _ioController2.default({},(0,_config.createDefaultConfig)());var loaderType=ioctl.loaderType;ioctl.destroy();return loaderType=='fetch-stream-loader'||loaderType=='xhr-moz-chunked-loader'}},{key:'getNetworkLoaderTypeName',value:function getNetworkLoaderTypeName(){var ioctl=new _ioController2.default({},(0,_config.createDefaultConfig)());var loaderType=ioctl.loaderType;ioctl.destroy();return loaderType}},{key:'supportNativeMediaPlayback',value:function supportNativeMediaPlayback(mimeType){if(Features.videoElement==undefined){Features.videoElement=window.document.createElement('video')}var canPlay=Features.videoElement.canPlayType(mimeType);return canPlay==='probably'||canPlay=='maybe'}},{key:'getFeatureList',value:function getFeatureList(){var features={mseFlvPlayback:false,mseLiveFlvPlayback:false,networkStreamIO:false,networkLoaderName:'',nativeMP4H264Playback:false,nativeWebmVP8Playback:false,nativeWebmVP9Playback:false};features.mseFlvPlayback=Features.supportMSEH264Playback();features.networkStreamIO=Features.supportNetworkStreamIO();features.networkLoaderName=Features.getNetworkLoaderTypeName();features.mseLiveFlvPlayback=features.mseFlvPlayback&&features.networkStreamIO;features.nativeMP4H264Playback=Features.supportNativeMediaPlayback('video/mp4; codecs="avc1.42001E, mp4a.40.2"');features.nativeWebmVP8Playback=Features.supportNativeMediaPlayback('video/webm; codecs="vp8.0, vorbis"');features.nativeWebmVP9Playback=Features.supportNativeMediaPlayback('video/webm; codecs="vp9"');return features}}]);return Features}();exports.default=Features},{"../config.js":5,"../io/io-controller.js":23}],7:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var MediaInfo=function(){function MediaInfo(){_classCallCheck(this,MediaInfo);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}_createClass(MediaInfo,[{key:"isComplete",value:function isComplete(){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}},{key:"isSeekable",value:function isSeekable(){return this.hasKeyframesIndex===true}},{key:"getNearestKeyframe",value:function getNearestKeyframe(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]}}},{key:"_search",value:function _search(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 MediaInfo}();exports.default=MediaInfo},{}],8:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var SampleInfo=exports.SampleInfo=function SampleInfo(dts,pts,duration,originalDts,isSync){_classCallCheck(this,SampleInfo);this.dts=dts;this.pts=pts;this.duration=duration;this.originalDts=originalDts;this.isSyncPoint=isSync;this.fileposition=null};var MediaSegmentInfo=exports.MediaSegmentInfo=function(){function MediaSegmentInfo(){_classCallCheck(this,MediaSegmentInfo);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;}_createClass(MediaSegmentInfo,[{key:"appendSyncPoint",value:function appendSyncPoint(sampleInfo){sampleInfo.isSyncPoint=true;this.syncPoints.push(sampleInfo)}}]);return MediaSegmentInfo}();var IDRSampleList=exports.IDRSampleList=function(){function IDRSampleList(){_classCallCheck(this,IDRSampleList);this._list=[]}_createClass(IDRSampleList,[{key:"clear",value:function clear(){this._list=[]}},{key:"appendArray",value:function appendArray(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)}},{key:"getLastSyncPointBeforeDts",value:function getLastSyncPointBeforeDts(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 IDRSampleList}();var MediaSegmentInfoList=exports.MediaSegmentInfoList=function(){function MediaSegmentInfoList(type){_classCallCheck(this,MediaSegmentInfoList);this._type=type;this._list=[];this._lastAppendLocation=-1;}_createClass(MediaSegmentInfoList,[{key:"isEmpty",value:function isEmpty(){return this._list.length===0}},{key:"clear",value:function clear(){this._list=[];this._lastAppendLocation=-1}},{key:"_searchNearestSegmentBefore",value:function _searchNearestSegmentBefore(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}},{key:"_searchNearestSegmentAfter",value:function _searchNearestSegmentAfter(originalBeginDts){return this._searchNearestSegmentBefore(originalBeginDts)+1}},{key:"append",value:function append(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)}},{key:"getLastSegmentBefore",value:function getLastSegmentBefore(originalBeginDts){var idx=this._searchNearestSegmentBefore(originalBeginDts);if(idx>=0){return this._list[idx]}else{return null}}},{key:"getLastSampleBefore",value:function getLastSampleBefore(originalBeginDts){var segment=this.getLastSegmentBefore(originalBeginDts);if(segment!=null){return segment.lastSample}else{return null}}},{key:"getLastSyncPointBefore",value:function getLastSyncPointBefore(originalBeginDts){var segmentIdx=this._searchNearestSegmentBefore(originalBeginDts);var syncPoints=this._list[segmentIdx].syncPoints;while(syncPoints.length===0&&segmentIdx>0){segmentIdx-=1;syncPoints=this._list[segmentIdx].syncPoints}if(syncPoints.length>0){return syncPoints[syncPoints.length-1]}else{return null}}},{key:"type",get:function get(){return this._type}},{key:"length",get:function get(){return this._list.length}}]);return MediaSegmentInfoList}()},{}],9:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _events=_dereq_('events');var _events2=_interopRequireDefault(_events);var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _browser=_dereq_('../utils/browser.js');var _browser2=_interopRequireDefault(_browser);var _mseEvents=_dereq_('./mse-events.js');var _mseEvents2=_interopRequireDefault(_mseEvents);var _mediaSegmentInfo=_dereq_('./media-segment-info.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var MSEController=function(){function MSEController(config){_classCallCheck(this,MSEController);this.TAG='MSEController';this._config=config;this._emitter=new _events2.default();if(this._config.isLive&&this._config.autoCleanupSourceBuffer==undefined){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 _mediaSegmentInfo.IDRSampleList()}_createClass(MSEController,[{key:'destroy',value:function destroy(){if(this._mediaElement||this._mediaSource){this.detachMediaElement()}this.e=null;this._emitter.removeAllListeners();this._emitter=null}},{key:'on',value:function on(event,listener){this._emitter.addListener(event,listener)}},{key:'off',value:function off(event,listener){this._emitter.removeListener(event,listener)}},{key:'attachMediaElement',value:function attachMediaElement(mediaElement){if(this._mediaSource){throw new _exception.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}},{key:'detachMediaElement',value:function detachMediaElement(){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'){ms.removeSourceBuffer(sb);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){_logger2.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}}},{key:'appendInitSegment',value:function appendInitSegment(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;_logger2.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){_logger2.default.e(this.TAG,error.message);this._emitter.emit(_mseEvents2.default.ERROR,{code:error.code,msg:error.message});return}}else{_logger2.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(_browser2.default.safari&&is.container==='audio/mpeg'&&is.mediaDuration>0){this._requireSetMediaDuration=true;this._pendingMediaDuration=is.mediaDuration/1000;this._updateMediaSourceDuration()}}},{key:'appendMediaSegment',value:function appendMediaSegment(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()}}},{key:'seek',value:function seek(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){_logger2.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+=1){var start=sb.buffered.start(i);var end=sb.buffered.end(i);this._pendingRemoveRanges[type].push({start:start,end:end})}if(!sb.updating){this._doRemoveRanges()}if(_browser2.default.safari){var lastInitSegment=this._lastInitSegments[type];if(lastInitSegment){this._pendingSegments[type].push(lastInitSegment);if(!sb.updating){this._doAppendSegments()}}}}}},{key:'endOfStream',value:function endOfStream(){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()}}},{key:'getNearestKeyframe',value:function getNearestKeyframe(dts){return this._idrList.getLastSyncPointBeforeDts(dts)}},{key:'_needCleanupSourceBuffer',value:function _needCleanupSourceBuffer(){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}},{key:'_doCleanupSourceBuffer',value:function _doCleanupSourceBuffer(){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+=1){var start=buffered.start(i);var end=buffered.end(i);if(start<=currentTime&¤tTime<end+3){if(currentTime-start>=this._config.autoCleanupMaxBackwardDuration){doRemove=true;var removeEnd=currentTime-this._config.autoCleanupMinBackwardDuration;this._pendingRemoveRanges[type].push({start:start,end:removeEnd})}}else if(end<currentTime){doRemove=true;this._pendingRemoveRanges[type].push({start:start,end:end})}}if(doRemove&&!sb.updating){this._doRemoveRanges()}}}}},{key:'_updateMediaSourceDuration',value:function _updateMediaSourceDuration(){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)){_logger2.default.v(this.TAG,'Update MediaSource duration from '+current+' to '+target);this._mediaSource.duration=target}this._requireSetMediaDuration=false;this._pendingMediaDuration=0}},{key:'_doRemoveRanges',value:function _doRemoveRanges(){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)}}}},{key:'_doAppendSegments',value:function _doAppendSegments(){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/1000;var delta=Math.abs(currentOffset-targetOffset);if(delta>0.1){_logger2.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(_mseEvents2.default.BUFFER_FULL)}this._isBufferFull=true}else{_logger2.default.e(this.TAG,error.message);this._emitter.emit(_mseEvents2.default.ERROR,{code:error.code,msg:error.message})}}}}}},{key:'_onSourceOpen',value:function _onSourceOpen(){_logger2.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(_mseEvents2.default.SOURCE_OPEN)}},{key:'_onSourceEnded',value:function _onSourceEnded(){_logger2.default.v(this.TAG,'MediaSource onSourceEnded')}},{key:'_onSourceClose',value:function _onSourceClose(){_logger2.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)}}},{key:'_hasPendingSegments',value:function _hasPendingSegments(){var ps=this._pendingSegments;return ps.video.length>0||ps.audio.length>0}},{key:'_hasPendingRemoveRanges',value:function _hasPendingRemoveRanges(){var prr=this._pendingRemoveRanges;return prr.video.length>0||prr.audio.length>0}},{key:'_onSourceBufferUpdateEnd',value:function _onSourceBufferUpdateEnd(){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(_mseEvents2.default.UPDATE_END)}},{key:'_onSourceBufferError',value:function _onSourceBufferError(e){_logger2.default.e(this.TAG,'SourceBuffer Error: '+e);}}]);return MSEController}();exports.default=MSEController},{"../utils/browser.js":39,"../utils/exception.js":40,"../utils/logger.js":41,"./media-segment-info.js":8,"./mse-events.js":10,"events":2}],10:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var MSEEvents={ERROR:'error',SOURCE_OPEN:'source_open',UPDATE_END:'update_end',BUFFER_FULL:'buffer_full'};exports.default=MSEEvents},{}],11:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _events=_dereq_('events');var _events2=_interopRequireDefault(_events);var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _loggingControl=_dereq_('../utils/logging-control.js');var _loggingControl2=_interopRequireDefault(_loggingControl);var _transmuxingController=_dereq_('./transmuxing-controller.js');var _transmuxingController2=_interopRequireDefault(_transmuxingController);var _transmuxingEvents=_dereq_('./transmuxing-events.js');var _transmuxingEvents2=_interopRequireDefault(_transmuxingEvents);var _transmuxingWorker=_dereq_('./transmuxing-worker.js');var _transmuxingWorker2=_interopRequireDefault(_transmuxingWorker);var _mediaInfo=_dereq_('./media-info.js');var _mediaInfo2=_interopRequireDefault(_mediaInfo);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var Transmuxer=function(){function Transmuxer(mediaDataSource,config){_classCallCheck(this,Transmuxer);this.TAG='Transmuxer';this._emitter=new _events2.default();if(config.enableWorker&&typeof Worker!=='undefined'){try{var work=_dereq_('webworkify');this._worker=work(_transmuxingWorker2.default);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)};_loggingControl2.default.registerListener(this.e.onLoggingConfigChanged);this._worker.postMessage({cmd:'logging_config',param:_loggingControl2.default.getConfig()})}catch(error){_logger2.default.e(this.TAG,'Error while initialize transmuxing worker, fallback to inline transmuxing');this._worker=null;this._controller=new _transmuxingController2.default(mediaDataSource,config)}}else{this._controller=new _transmuxingController2.default(mediaDataSource,config)}if(this._controller){var ctl=this._controller;ctl.on(_transmuxingEvents2.default.IO_ERROR,this._onIOError.bind(this));ctl.on(_transmuxingEvents2.default.DEMUX_ERROR,this._onDemuxError.bind(this));ctl.on(_transmuxingEvents2.default.INIT_SEGMENT,this._onInitSegment.bind(this));ctl.on(_transmuxingEvents2.default.MEDIA_SEGMENT,this._onMediaSegment.bind(this));ctl.on(_transmuxingEvents2.default.LOADING_COMPLETE,this._onLoadingComplete.bind(this));ctl.on(_transmuxingEvents2.default.RECOVERED_EARLY_EOF,this._onRecoveredEarlyEof.bind(this));ctl.on(_transmuxingEvents2.default.MEDIA_INFO,this._onMediaInfo.bind(this));ctl.on(_transmuxingEvents2.default.STATISTICS_INFO,this._onStatisticsInfo.bind(this));ctl.on(_transmuxingEvents2.default.RECOMMEND_SEEKPOINT,this._onRecommendSeekpoint.bind(this))}}_createClass(Transmuxer,[{key:'destroy',value:function destroy(){if(this._worker){if(!this._workerDestroying){this._workerDestroying=true;this._worker.postMessage({cmd:'destroy'});_loggingControl2.default.removeListener(this.e.onLoggingConfigChanged);this.e=null}}else{this._controller.destroy();this._controller=null}this._emitter.removeAllListeners();this._emitter=null}},{key:'on',value:function on(event,listener){this._emitter.addListener(event,listener)}},{key:'off',value:function off(event,listener){this._emitter.removeListener(event,listener)}},{key:'hasWorker',value:function hasWorker(){return this._worker!=null}},{key:'open',value:function open(){if(this._worker){this._worker.postMessage({cmd:'start'})}else{this._controller.start()}}},{key:'close',value:function close(){if(this._worker){this._worker.postMessage({cmd:'stop'})}else{this._controller.stop()}}},{key:'seek',value:function seek(milliseconds){if(this._worker){this._worker.postMessage({cmd:'seek',param:milliseconds})}else{this._controller.seek(milliseconds)}}},{key:'pause',value:function pause(){if(this._worker){this._worker.postMessage({cmd:'pause'})}else{this._controller.pause()}}},{key:'resume',value:function resume(){if(this._worker){this._worker.postMessage({cmd:'resume'})}else{this._controller.resume()}}},{key:'_onInitSegment',value:function _onInitSegment(type,initSegment){var _this=this;Promise.resolve().then(function(){_this._emitter.emit(_transmuxingEvents2.default.INIT_SEGMENT,type,initSegment)})}},{key:'_onMediaSegment',value:function _onMediaSegment(type,mediaSegment){var _this2=this;Promise.resolve().then(function(){_this2._emitter.emit(_transmuxingEvents2.default.MEDIA_SEGMENT,type,mediaSegment)})}},{key:'_onLoadingComplete',value:function _onLoadingComplete(){var _this3=this;Promise.resolve().then(function(){_this3._emitter.emit(_transmuxingEvents2.default.LOADING_COMPLETE)})}},{key:'_onRecoveredEarlyEof',value:function _onRecoveredEarlyEof(){var _this4=this;Promise.resolve().then(function(){_this4._emitter.emit(_transmuxingEvents2.default.RECOVERED_EARLY_EOF)})}},{key:'_onMediaInfo',value:function _onMediaInfo(mediaInfo){var _this5=this;Promise.resolve().then(function(){_this5._emitter.emit(_transmuxingEvents2.default.MEDIA_INFO,mediaInfo)})}},{key:'_onStatisticsInfo',value:function _onStatisticsInfo(statisticsInfo){var _this6=this;Promise.resolve().then(function(){_this6._emitter.emit(_transmuxingEvents2.default.STATISTICS_INFO,statisticsInfo)})}},{key:'_onIOError',value:function _onIOError(type,info){var _this7=this;Promise.resolve().then(function(){_this7._emitter.emit(_transmuxingEvents2.default.IO_ERROR,type,info)})}},{key:'_onDemuxError',value:function _onDemuxError(type,info){var _this8=this;Promise.resolve().then(function(){_this8._emitter.emit(_transmuxingEvents2.default.DEMUX_ERROR,type,info)})}},{key:'_onRecommendSeekpoint',value:function _onRecommendSeekpoint(milliseconds){var _this9=this;Promise.resolve().then(function(){_this9._emitter.emit(_transmuxingEvents2.default.RECOMMEND_SEEKPOINT,milliseconds)})}},{key:'_onLoggingConfigChanged',value:function _onLoggingConfigChanged(config){if(this._worker){this._worker.postMessage({cmd:'logging_config',param:config})}}},{key:'_onWorkerMessage',value:function _onWorkerMessage(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 _transmuxingEvents2.default.INIT_SEGMENT:case _transmuxingEvents2.default.MEDIA_SEGMENT:this._emitter.emit(message.msg,data.type,data.data);break;case _transmuxingEvents2.default.LOADING_COMPLETE:case _transmuxingEvents2.default.RECOVERED_EARLY_EOF:this._emitter.emit(message.msg);break;case _transmuxingEvents2.default.MEDIA_INFO:Object.setPrototypeOf(data,_mediaInfo2.default.prototype);this._emitter.emit(message.msg,data);break;case _transmuxingEvents2.default.STATISTICS_INFO:this._emitter.emit(message.msg,data);break;case _transmuxingEvents2.default.IO_ERROR:case _transmuxingEvents2.default.DEMUX_ERROR:this._emitter.emit(message.msg,data.type,data.info);break;case _transmuxingEvents2.default.RECOMMEND_SEEKPOINT:this._emitter.emit(message.msg,data);break;case 'logcat_callback':_logger2.default.emitter.emit('log',data.type,data.logcat);break;default:break}}}]);return Transmuxer}();exports.default=Transmuxer},{"../utils/logger.js":41,"../utils/logging-control.js":42,"./media-info.js":7,"./transmuxing-controller.js":12,"./transmuxing-events.js":13,"./transmuxing-worker.js":14,"events":2,"webworkify":4}],12:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _events=_dereq_('events');var _events2=_interopRequireDefault(_events);var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _browser=_dereq_('../utils/browser.js');var _browser2=_interopRequireDefault(_browser);var _mediaInfo=_dereq_('./media-info.js');var _mediaInfo2=_interopRequireDefault(_mediaInfo);var _flvDemuxer=_dereq_('../demux/flv-demuxer.js');var _flvDemuxer2=_interopRequireDefault(_flvDemuxer);var _mp4Remuxer=_dereq_('../remux/mp4-remuxer.js');var _mp4Remuxer2=_interopRequireDefault(_mp4Remuxer);var _demuxErrors=_dereq_('../demux/demux-errors.js');var _demuxErrors2=_interopRequireDefault(_demuxErrors);var _ioController=_dereq_('../io/io-controller.js');var _ioController2=_interopRequireDefault(_ioController);var _transmuxingEvents=_dereq_('./transmuxing-events.js');var _transmuxingEvents2=_interopRequireDefault(_transmuxingEvents);var _loader=_dereq_('../io/loader.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var TransmuxingController=function(){function TransmuxingController(mediaDataSource,config){_classCallCheck(this,TransmuxingController);this.TAG='TransmuxingController';this._emitter=new _events2.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}_createClass(TransmuxingController,[{key:'destroy',value:function destroy(){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}},{key:'on',value:function on(event,listener){this._emitter.addListener(event,listener)}},{key:'off',value:function off(event,listener){this._emitter.removeListener(event,listener)}},{key:'start',value:function start(){this._loadSegment(0);this._enableStatisticsReporter()}},{key:'_loadSegment',value:function _loadSegment(segmentIndex,optionalFrom){this._currentSegmentIndex=segmentIndex;var dataSource=this._mediaDataSource.segments[segmentIndex];var ioctl=this._ioctl=new _ioController2.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)}},{key:'stop',value:function stop(){this._internalAbort();this._disableStatisticsReporter()}},{key:'_internalAbort',value:function _internalAbort(){if(this._ioctl){this._ioctl.destroy();this._ioctl=null}}},{key:'pause',value:function pause(){if(this._ioctl&&this._ioctl.isWorking()){this._ioctl.pause();this._disableStatisticsReporter()}}},{key:'resume',value:function resume(){if(this._ioctl&&this._ioctl.isPaused()){this._ioctl.resume();this._enableStatisticsReporter()}}},{key:'seek',value:function seek(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==undefined){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==undefined){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()}},{key:'_searchSegmentIndexContains',value:function _searchSegmentIndexContains(milliseconds){var segments=this._mediaDataSource.segments;var idx=segments.length-1;for(var i=0;i<segments.length;i+=1){if(milliseconds<segments[i].timestampBase){idx=i-1;break}}return idx}},{key:'_onInitChunkArrival',value:function _onInitChunkArrival(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=_flvDemuxer2.default.probe(data)).match){this._demuxer=new _flvDemuxer2.default(probeData,this._config);if(!this._remuxer){this._remuxer=new _mp4Remuxer2.default(this._config)}var mds=this._mediaDataSource;if(mds.duration!=undefined&&!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._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;_logger2.default.e(this.TAG,'Non-FLV, Unsupported media type!');Promise.resolve().then(function(){_this._internalAbort()});this._emitter.emit(_transmuxingEvents2.default.DEMUX_ERROR,_demuxErrors2.default.FORMAT_UNSUPPORTED,'Non-FLV, Unsupported media type');consumed=0}return consumed}},{key:'_onMediaInfo',value:function _onMediaInfo(mediaInfo){var _this2=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,_mediaInfo2.default.prototype)}var segmentInfo=Object.assign({},mediaInfo);Object.setPrototypeOf(segmentInfo,_mediaInfo2.default.prototype);this._mediaInfo.segments[this._currentSegmentIndex]=segmentInfo;this._reportSegmentMediaInfo(this._currentSegmentIndex);if(this._pendingSeekTime!=null){Promise.resolve().then(function(){var target=_this2._pendingSeekTime;_this2._pendingSeekTime=null;_this2.seek(target)})}}},{key:'_onIOSeeked',value:function _onIOSeeked(){this._remuxer.insertDiscontinuity()}},{key:'_onIOComplete',value:function _onIOComplete(extraData){var segmentIndex=extraData;var nextSegmentIndex=segmentIndex+1;if(nextSegmentIndex<this._mediaDataSource.segments.length){this._internalAbort();this._loadSegment(nextSegmentIndex)}else{this._remuxer.flushStashedSamples();this._emitter.emit(_transmuxingEvents2.default.LOADING_COMPLETE);this._disableStatisticsReporter()}}},{key:'_onIORedirect',value:function _onIORedirect(redirectedURL){var segmentIndex=this._ioctl.extraData;this._mediaDataSource.segments[segmentIndex].redirectedURL=redirectedURL}},{key:'_onIORecoveredEarlyEof',value:function _onIORecoveredEarlyEof(){this._emitter.emit(_transmuxingEvents2.default.RECOVERED_EARLY_EOF)}},{key:'_onIOException',value:function _onIOException(type,info){_logger2.default.e(this.TAG,'IOException: type = '+type+', code = '+info.code+', msg = '+info.msg);this._emitter.emit(_transmuxingEvents2.default.IO_ERROR,type,info);this._disableStatisticsReporter()}},{key:'_onDemuxException',value:function _onDemuxException(type,info){_logger2.default.e(this.TAG,'DemuxException: type = '+type+', info = '+info);this._emitter.emit(_transmuxingEvents2.default.DEMUX_ERROR,type,info)}},{key:'_onRemuxerInitSegmentArrival',value:function _onRemuxerInitSegmentArrival(type,initSegment){this._emitter.emit(_transmuxingEvents2.default.INIT_SEGMENT,type,initSegment)}},{key:'_onRemuxerMediaSegmentArrival',value:function _onRemuxerMediaSegmentArrival(type,mediaSegment){if(this._pendingSeekTime!=null){return}this._emitter.emit(_transmuxingEvents2.default.MEDIA_SEGMENT,type,mediaSegment);if(this._pendingResolveSeekPoint!=null&&type==='video'){var syncPoints=mediaSegment.info.syncPoints;var seekpoint=this._pendingResolveSeekPoint;this._pendingResolveSeekPoint=null;if(_browser2.default.safari&&syncPoints.length>0&&syncPoints[0].originalDts===seekpoint){seekpoint=syncPoints[0].pts}this._emitter.emit(_transmuxingEvents2.default.RECOMMEND_SEEKPOINT,seekpoint)}}},{key:'_enableStatisticsReporter',value:function _enableStatisticsReporter(){if(this._statisticsReporter==null){this._statisticsReporter=self.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval)}}},{key:'_disableStatisticsReporter',value:function _disableStatisticsReporter(){if(this._statisticsReporter){self.clearInterval(this._statisticsReporter);this._statisticsReporter=null}}},{key:'_reportSegmentMediaInfo',value:function _reportSegmentMediaInfo(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(_transmuxingEvents2.default.MEDIA_INFO,exportInfo)}},{key:'_reportStatisticsInfo',value:function _reportStatisticsInfo(){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(_transmuxingEvents2.default.STATISTICS_INFO,info)}}]);return TransmuxingController}();exports.default=TransmuxingController},{"../demux/demux-errors.js":16,"../demux/flv-demuxer.js":18,"../io/io-controller.js":23,"../io/loader.js":24,"../remux/mp4-remuxer.js":38,"../utils/browser.js":39,"../utils/logger.js":41,"./media-info.js":7,"./transmuxing-events.js":13,"events":2}],13:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});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',STATISTICS_INFO:'statistics_info',RECOMMEND_SEEKPOINT:'recommend_seekpoint'};exports.default=TransmuxingEvents},{}],14:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _loggingControl=_dereq_('../utils/logging-control.js');var _loggingControl2=_interopRequireDefault(_loggingControl);var _polyfill=_dereq_('../utils/polyfill.js');var _polyfill2=_interopRequireDefault(_polyfill);var _transmuxingController=_dereq_('./transmuxing-controller.js');var _transmuxingController2=_interopRequireDefault(_transmuxingController);var _transmuxingEvents=_dereq_('./transmuxing-events.js');var _transmuxingEvents2=_interopRequireDefault(_transmuxingEvents);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var TransmuxingWorker=function TransmuxingWorker(self){var TAG='TransmuxingWorker';var controller=null;var logcatListener=onLogcatCallback.bind(this);_polyfill2.default.install();self.addEventListener('message',function(e){switch(e.data.cmd){case 'init':controller=new _transmuxingController2.default(e.data.param[0],e.data.param[1]);controller.on(_transmuxingEvents2.default.IO_ERROR,onIOError.bind(this));controller.on(_transmuxingEvents2.default.DEMUX_ERROR,onDemuxError.bind(this));controller.on(_transmuxingEvents2.default.INIT_SEGMENT,onInitSegment.bind(this));controller.on(_transmuxingEvents2.default.MEDIA_SEGMENT,onMediaSegment.bind(this));controller.on(_transmuxingEvents2.default.LOADING_COMPLETE,onLoadingComplete.bind(this));controller.on(_transmuxingEvents2.default.RECOVERED_EARLY_EOF,onRecoveredEarlyEof.bind(this));controller.on(_transmuxingEvents2.default.MEDIA_INFO,onMediaInfo.bind(this));controller.on(_transmuxingEvents2.default.STATISTICS_INFO,onStatisticsInfo.bind(this));controller.on(_transmuxingEvents2.default.RECOMMEND_SEEKPOINT,onRecommendSeekpoint.bind(this));break;case 'destroy':if(controller){controller.destroy();controller=null}self.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;_loggingControl2.default.applyConfig(config);if(config.enableCallback===true){_loggingControl2.default.addLogListener(logcatListener)}else{_loggingControl2.default.removeLogListener(logcatListener)}break}}});function onInitSegment(type,initSegment){var obj={msg:_transmuxingEvents2.default.INIT_SEGMENT,data:{type:type,data:initSegment}};self.postMessage(obj,[initSegment.data]);}function onMediaSegment(type,mediaSegment){var obj={msg:_transmuxingEvents2.default.MEDIA_SEGMENT,data:{type:type,data:mediaSegment}};self.postMessage(obj,[mediaSegment.data]);}function onLoadingComplete(){var obj={msg:_transmuxingEvents2.default.LOADING_COMPLETE};self.postMessage(obj)}function onRecoveredEarlyEof(){var obj={msg:_transmuxingEvents2.default.RECOVERED_EARLY_EOF};self.postMessage(obj)}function onMediaInfo(mediaInfo){var obj={msg:_transmuxingEvents2.default.MEDIA_INFO,data:mediaInfo};self.postMessage(obj)}function onStatisticsInfo(statInfo){var obj={msg:_transmuxingEvents2.default.STATISTICS_INFO,data:statInfo};self.postMessage(obj)}function onIOError(type,info){self.postMessage({msg:_transmuxingEvents2.default.IO_ERROR,data:{type:type,info:info}})}function onDemuxError(type,info){self.postMessage({msg:_transmuxingEvents2.default.DEMUX_ERROR,data:{type:type,info:info}})}function onRecommendSeekpoint(milliseconds){self.postMessage({msg:_transmuxingEvents2.default.RECOMMEND_SEEKPOINT,data:milliseconds})}function onLogcatCallback(type,str){self.postMessage({msg:'logcat_callback',data:{type:type,logcat:str}})}};exports.default=TransmuxingWorker},{"../utils/logger.js":41,"../utils/logging-control.js":42,"../utils/polyfill.js":43,"./transmuxing-controller.js":12,"./transmuxing-events.js":13}],15:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _utf8Conv=_dereq_('../utils/utf8-conv.js');var _utf8Conv2=_interopRequireDefault(_utf8Conv);var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}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 AMF(){_classCallCheck(this,AMF)}_createClass(AMF,null,[{key:'parseScriptData',value:function parseScriptData(arrayBuffer,dataOffset,dataSize){var data={};try{var name=AMF.parseValue(arrayBuffer,dataOffset,dataSize);var value=AMF.parseValue(arrayBuffer,dataOffset+name.size,dataSize-name.size);data[name.data]=value.data}catch(e){_logger2.default.e('AMF',e.toString())}return data}},{key:'parseObject',value:function parseObject(arrayBuffer,dataOffset,dataSize){if(dataSize<3){throw new _exception.IllegalStateException('Data not enough when parse ScriptDataObject')}var name=AMF.parseString(arrayBuffer,dataOffset,dataSize);var value=AMF.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}}},{key:'parseVariable',value:function parseVariable(arrayBuffer,dataOffset,dataSize){return AMF.parseObject(arrayBuffer,dataOffset,dataSize)}},{key:'parseString',value:function parseString(arrayBuffer,dataOffset,dataSize){if(dataSize<2){throw new _exception.IllegalStateException('Data not enough when parse String')}var v=new DataView(arrayBuffer,dataOffset,dataSize);var length=v.getUint16(0,!le);var str=void 0;if(length>0){str=(0,_utf8Conv2.default)(new Uint8Array(arrayBuffer,dataOffset+2,length))}else{str=''}return{data:str,size:2+length}}},{key:'parseLongString',value:function parseLongString(arrayBuffer,dataOffset,dataSize){if(dataSize<4){throw new _exception.IllegalStateException('Data not enough when parse LongString')}var v=new DataView(arrayBuffer,dataOffset,dataSize);var length=v.getUint32(0,!le);var str=void 0;if(length>0){str=(0,_utf8Conv2.default)(new Uint8Array(arrayBuffer,dataOffset+4,length))}else{str=''}return{data:str,size:4+length}}},{key:'parseDate',value:function parseDate(arrayBuffer,dataOffset,dataSize){if(dataSize<10){throw new _exception.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*1000;return{data:new Date(timestamp),size:8+2}}},{key:'parseValue',value:function parseValue(arrayBuffer,dataOffset,dataSize){if(dataSize<1){throw new _exception.IllegalStateException('Data not enough when parse Value')}var v=new DataView(arrayBuffer,dataOffset,dataSize);var offset=1;var type=v.getUint8(0);var value=void 0;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=AMF.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)&0x00FFFFFF)===9){terminal=3}while(offset<dataSize-4){var amfobj=AMF.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)&0x00FFFFFF;if(marker===9){offset+=3}}break}case 8:{value={};offset+=4;var _terminal=0;if((v.getUint32(dataSize-4,!le)&0x00FFFFFF)===9){_terminal=3}while(offset<dataSize-8){var amfvar=AMF.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)&0x00FFFFFF;if(_marker===9){offset+=3}}break}case 9:value=undefined;offset=1;objectEnd=true;break;case 10:{value=[];var strictArrayLength=v.getUint32(1,!le);offset+=4;for(var i=0;i<strictArrayLength;i+=1){var val=AMF.parseValue(arrayBuffer,dataOffset+offset,dataSize-offset);value.push(val.data);offset+=val.size}break}case 11:{var date=AMF.parseDate(arrayBuffer,dataOffset+1,dataSize-1);value=date.data;offset+=date.size;break}case 12:{var amfLongStr=AMF.parseString(arrayBuffer,dataOffset+1,dataSize-1);value=amfLongStr.data;offset+=amfLongStr.size;break}default:offset=dataSize;_logger2.default.w('AMF','Unsupported AMF value type '+type)}}catch(e){_logger2.default.e('AMF',e.toString())}return{data:value,size:offset,objectEnd:objectEnd}}}]);return AMF}();exports.default=AMF},{"../utils/exception.js":40,"../utils/logger.js":41,"../utils/utf8-conv.js":44}],16:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var DemuxErrors={OK:'OK',FORMAT_ERROR:'FormatError',FORMAT_UNSUPPORTED:'FormatUnsupported',CODEC_UNSUPPORTED:'CodecUnsupported'};exports.default=DemuxErrors},{}],17:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _exception=_dereq_('../utils/exception.js');function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var ExpGolomb=function(){function ExpGolomb(uint8array){_classCallCheck(this,ExpGolomb);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}_createClass(ExpGolomb,[{key:'destroy',value:function destroy(){this._buffer=null}},{key:'_fillCurrentWord',value:function _fillCurrentWord(){var buffer_bytes_left=this._total_bytes-this._buffer_index;if(buffer_bytes_left<=0){throw new _exception.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}},{key:'readBits',value:function readBits(bits){if(bits>32){throw new _exception.InvalidArgumentException('ExpGolomb: readBits() bits exceeded max 32bits!')}if(bits<=this._current_word_bits_left){var _result=this._current_word>>>32-bits;this._current_word<<=bits;this._current_word_bits_left-=bits;return _result}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}},{key:'readBool',value:function readBool(){return this.readBits(1)===1}},{key:'readByte',value:function readByte(){return this.readBits(8)}},{key:'_skipLeadingZero',value:function _skipLeadingZero(){var zero_count=void 0;for(zero_count=0;zero_count<this._current_word_bits_left;zero_count+=1){if(0!==(this._current_word&0x80000000>>>zero_count)){this._current_word<<=zero_count;this._current_word_bits_left-=zero_count;return zero_count}}this._fillCurrentWord();return zero_count+this._skipLeadingZero()}},{key:'readUEG',value:function readUEG(){var leading_zeros=this._skipLeadingZero();return this.readBits(leading_zeros+1)-1}},{key:'readSEG',value:function readSEG(){var value=this.readUEG();if(value&0x01){return value+1>>>1}else{return -1*(value>>>1)}}}]);return ExpGolomb}();exports.default=ExpGolomb},{"../utils/exception.js":40}],18:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _amfParser=_dereq_('./amf-parser.js');var _amfParser2=_interopRequireDefault(_amfParser);var _spsParser=_dereq_('./sps-parser.js');var _spsParser2=_interopRequireDefault(_spsParser);var _demuxErrors=_dereq_('./demux-errors.js');var _demuxErrors2=_interopRequireDefault(_demuxErrors);var _mediaInfo=_dereq_('../core/media-info.js');var _mediaInfo2=_interopRequireDefault(_mediaInfo);var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function Swap16(src){return src>>>8&0xFF|(src&0xFF)<<8}function Swap32(src){return(src&0xFF000000)>>>24|(src&0x00FF0000)>>>8|(src&0x0000FF00)<<8|(src&0x000000FF)<<24}function ReadBig32(array,index){return array[index]<<24|array[index+1]<<16|array[index+2]<<8|array[index+3]}var FLVDemuxer=function(){function FLVDemuxer(probeData,config){_classCallCheck(this,FLVDemuxer);this.TAG='FLVDemuxer';this._config=config;this._onError=null;this._onMediaInfo=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 _mediaInfo2.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=1000;this._duration=0;this._durationOverrided=false;this._referenceFrameRate={fixed:true,fps:23.976,fps_num:23976,fps_den:1000};this._flvSoundRateTable=[5500,11025,22050,44100,48000];this._mpegSamplingRates=[96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,7350];this._mpegAudioV10SampleRateTable=[44100,48000,32000,0];this._mpegAudioV20SampleRateTable=[22050,24000,16000,0];this._mpegAudioV25SampleRateTable=[11025,12000,8000,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;}()}_createClass(FLVDemuxer,[{key:'destroy',value:function destroy(){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._onTrackMetadata=null;this._onDataAvailable=null}},{key:'bindDataSource',value:function bindDataSource(loader){loader.onDataArrival=this.parseChunks.bind(this);return this}},{key:'resetMediaInfo',value:function resetMediaInfo(){this._mediaInfo=new _mediaInfo2.default()}},{key:'_isInitialMetadataDispatched',value:function _isInitialMetadataDispatched(){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}},{key:'parseChunks',value:function parseChunks(chunk,byteStart){if(!this._onError||!this._onMediaInfo||!this._onTrackMetadata||!this._onDataAvailable){throw new _exception.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=FLVDemuxer.probe(chunk);offset=probeData.dataOffset}else{return 0}}if(this._firstParse){this._firstParse=false;if(byteStart+offset!==this._dataOffset){_logger2.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){_logger2.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)&0x00FFFFFF;if(offset+11+dataSize+4>chunk.byteLength){break}if(tagType!==8&&tagType!==9&&tagType!==18){_logger2.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)&0x00FFFFFF;if(streamId!==0){_logger2.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){_logger2.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;}},{key:'_parseScriptData',value:function _parseScriptData(arrayBuffer,dataOffset,dataSize){var scriptData=_amfParser2.default.parseScriptData(arrayBuffer,dataOffset,dataSize);if(scriptData.hasOwnProperty('onMetaData')){if(scriptData.onMetaData==null||_typeof(scriptData.onMetaData)!=='object'){_logger2.default.w(this.TAG,'Invalid onMetaData structure!');return}if(this._metadata){_logger2.default.w(this.TAG,'Found another onMetaData tag!')}this._metadata=scriptData;var onMetaData=this._metadata.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*1000);if(fps_num>0){var fps=fps_num/1000;this._referenceFrameRate.fixed=true;this._referenceFrameRate.fps=fps;this._referenceFrameRate.fps_num=fps_num;this._referenceFrameRate.fps_den=1000;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;_logger2.default.v(this.TAG,'Parsed onMetaData');if(this._mediaInfo.isComplete()){this._onMediaInfo(this._mediaInfo)}}}},{key:'_parseKeyframesIndex',value:function _parseKeyframesIndex(keyframes){var times=[];var filepositions=[];for(var i=1;i<keyframes.times.length;i+=1){var time=this._timestampBase+Math.floor(keyframes.times[i]*1000);times.push(time);filepositions.push(keyframes.filepositions[i])}return{times:times,filepositions:filepositions}}},{key:'_parseAudioData',value:function _parseAudioData(arrayBuffer,dataOffset,dataSize,tagTimestamp){if(dataSize<=1){_logger2.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(_demuxErrors2.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(_demuxErrors2.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==undefined){return}if(aacData.packetType===0){if(meta.config){_logger2.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;_logger2.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:dts,pts:dts};track.samples.push(aacSample);track.length+=aacData.data.length}else{_logger2.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==undefined){return}meta.audioSampleRate=_misc.samplingRate;meta.channelCount=_misc.channelCount;meta.codec=_misc.codec;meta.originalCodec=_misc.originalCodec;meta.refSampleDuration=1152/meta.audioSampleRate*meta.timescale;_logger2.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==undefined){return}var _dts=this._timestampBase+tagTimestamp;var mp3Sample={unit:data,length:data.byteLength,dts:_dts,pts:_dts};track.samples.push(mp3Sample);track.length+=data.length}}},{key:'_parseAACAudioData',value:function _parseAACAudioData(arrayBuffer,dataOffset,dataSize){if(dataSize<=1){_logger2.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}},{key:'_parseAACAudioSpecificConfig',value:function _parseAACAudioSpecificConfig(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]&0x07)<<1|array[1]>>>7;if(samplingIndex<0||samplingIndex>=this._mpegSamplingRates.length){this._onError(_demuxErrors2.default.FORMAT_ERROR,'Flv: AAC invalid sampling frequency index!');return}var samplingFrequence=this._mpegSamplingRates[samplingIndex];var channelConfig=(array[1]&0x78)>>>3;if(channelConfig<0||channelConfig>=8){this._onError(_demuxErrors2.default.FORMAT_ERROR,'Flv: AAC invalid channel configuration');return}if(audioObjectType===5){extensionSamplingIndex=(array[1]&0x07)<<1|array[2]>>>7;audioExtensionObjectType=(array[2]&0x7C)>>>2}var userAgent=self.navigator.userAgent.toLowerCase();if(userAgent.indexOf('firefox')!==-1){if(samplingIndex>=6){audioObjectType=5;config=[,,,];extensionSamplingIndex=samplingIndex-3}else{audioObjectType=2;config=[,];extensionSamplingIndex=samplingIndex}}else if(userAgent.indexOf('android')!==-1){audioObjectType=2;config=[,];extensionSamplingIndex=samplingIndex}else{audioObjectType=5;extensionSamplingIndex=samplingIndex;config=[,,,];if(samplingIndex>=6){extensionSamplingIndex=samplingIndex-3}else if(channelConfig===1){audioObjectType=2;config=[,];extensionSamplingIndex=samplingIndex}}config[0]=audioObjectType<<3;config[0]|=(samplingIndex&0x0F)>>>1;config[1]=(samplingIndex&0x0F)<<7;config[1]|=(channelConfig&0x0F)<<3;if(audioObjectType===5){config[1]|=(extensionSamplingIndex&0x0F)>>>1;config[2]=(extensionSamplingIndex&0x01)<<7;config[2]|=2<<2;config[3]=0}return{config:config,samplingRate:samplingFrequence,channelCount:channelConfig,codec:'mp4a.40.'+audioObjectType,originalCodec:'mp4a.40.'+originalAudioObjectType}}},{key:'_parseMP3AudioData',value:function _parseMP3AudioData(arrayBuffer,dataOffset,dataSize,requestHeader){if(dataSize<4){_logger2.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]!==0xFF){return}var ver=array[1]>>>3&0x03;var layer=(array[1]&0x06)>>1;var bitrate_index=(array[2]&0xF0)>>>4;var sampling_freq_index=(array[2]&0x0C)>>>2;var channel_mode=array[3]>>>6&0x03;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:codec,originalCodec:codec}}else{result=array}return result}},{key:'_parseVideoData',value:function _parseVideoData(arrayBuffer,dataOffset,dataSize,tagTimestamp,tagPosition){if(dataSize<=1){_logger2.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(_demuxErrors2.default.CODEC_UNSUPPORTED,'Flv: Unsupported codec in video frame: '+codecId);return}this._parseAVCVideoPacket(arrayBuffer,dataOffset+1,dataSize-1,tagTimestamp,tagPosition,frameType)}},{key:'_parseAVCVideoPacket',value:function _parseAVCVideoPacket(arrayBuffer,dataOffset,dataSize,tagTimestamp,tagPosition,frameType){if(dataSize<4){_logger2.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)&0x00FFFFFF;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(_demuxErrors2.default.FORMAT_ERROR,'Flv: Invalid video packet type '+packetType);return}}},{key:'_parseAVCDecoderConfigurationRecord',value:function _parseAVCDecoderConfigurationRecord(arrayBuffer,dataOffset,dataSize){if(dataSize<7){_logger2.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'){_logger2.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(_demuxErrors2.default.FORMAT_ERROR,'Flv: Invalid AVCDecoderConfigurationRecord');return}this._naluLengthSize=(v.getUint8(4)&3)+1;if(this._naluLengthSize!==3&&this._naluLengthSize!==4){this._onError(_demuxErrors2.default.FORMAT_ERROR,'Flv: Strange NaluLengthSizeMinusOne: '+(this._naluLengthSize-1));return}var spsCount=v.getUint8(5)&31;if(spsCount===0){this._onError(_demuxErrors2.default.FORMAT_ERROR,'Flv: Invalid AVCDecoderConfigurationRecord: No SPS');return}else if(spsCount>1){_logger2.default.w(this.TAG,'Flv: Strange AVCDecoderConfigurationRecord: SPS Count = '+spsCount)}var offset=6;for(var i=0;i<spsCount;i+=1){var len=v.getUint16(offset,!le);offset+=2;if(len===0){continue}var sps=new Uint8Array(arrayBuffer,dataOffset+offset,len);offset+=len;var config=_spsParser2.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+=1){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(_demuxErrors2.default.FORMAT_ERROR,'Flv: Invalid AVCDecoderConfigurationRecord: No PPS');return}else if(ppsCount>1){_logger2.default.w(this.TAG,'Flv: Strange AVCDecoderConfigurationRecord: PPS Count = '+ppsCount)}offset+=1;for(var _i=0;_i<ppsCount;_i+=1){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);_logger2.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)}},{key:'_parseAVCVideoData',value:function _parseAVCVideoData(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){_logger2.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){_logger2.default.w(this.TAG,'Malformed Nalus near timestamp '+dts+', NaluSize > DataSize!');return}var unitType=v.getUint8(offset+lengthSize)&0x1F;if(unitType===5){keyframe=true}var data=new Uint8Array(arrayBuffer,dataOffset+offset,lengthSize+naluSize);var unit={type:unitType,data:data};units.push(unit);length+=data.byteLength;offset+=lengthSize+naluSize}if(units.length){var track=this._videoTrack;var avcSample={units:units,length:length,isKeyframe:keyframe,dts:dts,cts:cts,pts:dts+cts};if(keyframe){avcSample.fileposition=tagPosition}track.samples.push(avcSample);track.length+=length}}},{key:'onTrackMetadata',get:function get(){return this._onTrackMetadata},set:function set(callback){this._onTrackMetadata=callback}},{key:'onMediaInfo',get:function get(){return this._onMediaInfo},set:function set(callback){this._onMediaInfo=callback}},{key:'onError',get:function get(){return this._onError},set:function set(callback){this._onError=callback}},{key:'onDataAvailable',get:function get(){return this._onDataAvailable},set:function set(callback){this._onDataAvailable=callback}},{key:'timestampBase',get:function get(){return this._timestampBase},set:function set(base){this._timestampBase=base}},{key:'overridedDuration',get:function get(){return this._duration},set:function set(duration){this._durationOverrided=true;this._duration=duration;this._mediaInfo.duration=duration}},{key:'overridedHasAudio',set:function set(hasAudio){this._hasAudioFlagOverrided=true;this._hasAudio=hasAudio;this._mediaInfo.hasAudio=hasAudio}},{key:'overridedHasVideo',set:function set(hasVideo){this._hasVideoFlagOverrided=true;this._hasVideo=hasVideo;this._mediaInfo.hasVideo=hasVideo}}],[{key:'probe',value:function probe(buffer){var data=new Uint8Array(buffer);var mismatch={match:false};if(data[0]!==0x46||data[1]!==0x4C||data[2]!==0x56||data[3]!==0x01){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}}}]);return FLVDemuxer}();exports.default=FLVDemuxer},{"../core/media-info.js":7,"../utils/exception.js":40,"../utils/logger.js":41,"./amf-parser.js":15,"./demux-errors.js":16,"./sps-parser.js":19}],19:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _expGolomb=_dereq_('./exp-golomb.js');var _expGolomb2=_interopRequireDefault(_expGolomb);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var SPSParser=function(){function SPSParser(){_classCallCheck(this,SPSParser)}_createClass(SPSParser,null,[{key:'_ebsp2rbsp',value:function _ebsp2rbsp(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+=1){if(i>=2){if(src[i]===0x03&&src[i-1]===0x00&&src[i-2]===0x00){continue}}dst[dst_idx]=src[i];dst_idx+=1}return new Uint8Array(dst.buffer,0,dst_idx)}},{key:'parseSPS',value:function parseSPS(uint8array){var rbsp=SPSParser._ebsp2rbsp(uint8array);var gb=new _expGolomb2.default(rbsp);gb.readByte();var profile_idc=gb.readByte();gb.readByte();var level_idc=gb.readByte();gb.readUEG();var profile_string=SPSParser.getProfileString(profile_idc);var level_string=SPSParser.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+=1){if(gb.readBool()){if(i<6){SPSParser._skipScalingList(gb,16)}else{SPSParser._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+=1){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:profile_string,level_string:level_string,bit_depth:bit_depth,ref_frames:ref_frames,chroma_format:chroma_format,chroma_format_string:SPSParser.getChromaFormatString(chroma_format),frame_rate:{fixed:fps_fixed,fps:fps,fps_den:fps_den,fps_num: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}}}},{key:'_skipScalingList',value:function _skipScalingList(gb,count){var last_scale=8,next_scale=8;var delta_scale=0;for(var i=0;i<count;i+=1){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}}},{key:'getProfileString',value:function getProfileString(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'}}},{key:'getLevelString',value:function getLevelString(level_idc){return(level_idc/10).toFixed(1)}},{key:'getChromaFormatString',value:function getChromaFormatString(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 SPSParser}();exports.default=SPSParser},{"./exp-golomb.js":17}],20:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _polyfill=_dereq_('./utils/polyfill.js');var _polyfill2=_interopRequireDefault(_polyfill);var _features=_dereq_('./core/features.js');var _features2=_interopRequireDefault(_features);var _flvPlayer=_dereq_('./player/flv-player.js');var _flvPlayer2=_interopRequireDefault(_flvPlayer);var _nativePlayer=_dereq_('./player/native-player.js');var _nativePlayer2=_interopRequireDefault(_nativePlayer);var _playerEvents=_dereq_('./player/player-events.js');var _playerEvents2=_interopRequireDefault(_playerEvents);var _playerErrors=_dereq_('./player/player-errors.js');var _loggingControl=_dereq_('./utils/logging-control.js');var _loggingControl2=_interopRequireDefault(_loggingControl);var _exception=_dereq_('./utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}_polyfill2.default.install();function createPlayer(mediaDataSource,optionalConfig){var mds=mediaDataSource;if(mds==null||(typeof mds==='undefined'?'undefined':_typeof(mds))!=='object'){throw new _exception.InvalidArgumentException('MediaDataSource must be an javascript object!')}if(!mds.hasOwnProperty('type')){throw new _exception.InvalidArgumentException('MediaDataSource must has type field to indicate video file type!')}switch(mds.type){case 'flv':return new _flvPlayer2.default(mds,optionalConfig);default:return new _nativePlayer2.default(mds,optionalConfig)}}function isSupported(){return _features2.default.supportMSEH264Playback()}function getFeatureList(){return _features2.default.getFeatureList()}var flvjs={};flvjs.createPlayer=createPlayer;flvjs.isSupported=isSupported;flvjs.getFeatureList=getFeatureList;flvjs.Events=_playerEvents2.default;flvjs.ErrorTypes=_playerErrors.ErrorTypes;flvjs.ErrorDetails=_playerErrors.ErrorDetails;flvjs.FlvPlayer=_flvPlayer2.default;flvjs.NativePlayer=_nativePlayer2.default;flvjs.LoggingControl=_loggingControl2.default;Object.defineProperty(flvjs,'version',{enumerable:true,get:function get(){return '1.4.0'}});exports.default=flvjs},{"./core/features.js":6,"./player/flv-player.js":32,"./player/native-player.js":33,"./player/player-errors.js":34,"./player/player-events.js":35,"./utils/exception.js":40,"./utils/logging-control.js":42,"./utils/polyfill.js":43}],21:[function(_dereq_,module,exports){'use strict';module.exports=_dereq_('./flv.js').default},{"./flv.js":20}],22:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _get=function get(object,property,receiver){if(object===null){object=Function.prototype}var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined}else{return get(parent,property,receiver)}}else if("value"in desc){return desc.value}else{var getter=desc.get;if(getter===undefined){return undefined}return getter.call(receiver)}};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _browser=_dereq_('../utils/browser.js');var _browser2=_interopRequireDefault(_browser);var _loader=_dereq_('./loader.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass){Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}}var FetchStreamLoader=function(_BaseLoader){_inherits(FetchStreamLoader,_BaseLoader);_createClass(FetchStreamLoader,null,[{key:'isSupported',value:function isSupported(){try{var isWorkWellEdge=_browser2.default.msedge&&_browser2.default.version.minor>=15048;var browserNotBlacklisted=_browser2.default.msedge?isWorkWellEdge:true;return self.fetch&&self.ReadableStream&&browserNotBlacklisted}catch(e){return false}}}]);function FetchStreamLoader(seekHandler,config){_classCallCheck(this,FetchStreamLoader);var _this=_possibleConstructorReturn(this,(FetchStreamLoader.__proto__||Object.getPrototypeOf(FetchStreamLoader)).call(this,'fetch-stream-loader'));_this.TAG='FetchStreamLoader';_this._seekHandler=seekHandler;_this._config=config;_this._needStash=true;_this._requestAbort=false;_this._contentLength=null;_this._receivedLength=0;return _this}_createClass(FetchStreamLoader,[{key:'destroy',value:function destroy(){if(this.isWorking()){this.abort()}_get(FetchStreamLoader.prototype.__proto__||Object.getPrototypeOf(FetchStreamLoader.prototype),'destroy',this).call(this)}},{key:'open',value:function open(dataSource,range){var _this2=this;this._dataSource=dataSource;this._range=range;var sourceURL=dataSource.url;if(this._config.reuseRedirectedURL&&dataSource.redirectedURL!=undefined){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:headers,mode:'cors',cache:'default',referrerPolicy:'no-referrer-when-downgrade'};if(dataSource.cors===false){params.mode='same-origin'}if(dataSource.withCredentials){params.credentials='include'}if(dataSource.referrerPolicy){params.referrerPolicy=dataSource.referrerPolicy}this._status=_loader.LoaderStatus.kConnecting;self.fetch(seekConfig.url,params).then(function(res){if(_this2._requestAbort){_this2._requestAbort=false;_this2._status=_loader.LoaderStatus.kIdle;return}if(res.ok&&res.status>=200&&res.status<=299){if(res.url!==seekConfig.url){if(_this2._onURLRedirect){var redirectedURL=_this2._seekHandler.removeURLParameters(res.url);_this2._onURLRedirect(redirectedURL)}}var lengthHeader=res.headers.get('Content-Length');if(lengthHeader!=null){_this2._contentLength=parseInt(lengthHeader);if(_this2._contentLength!==0){if(_this2._onContentLengthKnown){_this2._onContentLengthKnown(_this2._contentLength)}}}return _this2._pump.call(_this2,res.body.getReader())}else{_this2._status=_loader.LoaderStatus.kError;if(_this2._onError){_this2._onError(_loader.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:res.status,msg:res.statusText})}else{throw new _exception.RuntimeException('FetchStreamLoader: Http code invalid, '+res.status+' '+res.statusText)}}}).catch(function(e){_this2._status=_loader.LoaderStatus.kError;if(_this2._onError){_this2._onError(_loader.LoaderErrors.EXCEPTION,{code:-1,msg:e.message})}else{throw e}})}},{key:'abort',value:function abort(){this._requestAbort=true}},{key:'_pump',value:function _pump(reader){var _this3=this;return reader.read().then(function(result){if(result.done){_this3._status=_loader.LoaderStatus.kComplete;if(_this3._onComplete){_this3._onComplete(_this3._range.from,_this3._range.from+_this3._receivedLength-1)}}else{if(_this3._requestAbort===true){_this3._requestAbort=false;_this3._status=_loader.LoaderStatus.kComplete;return reader.cancel()}_this3._status=_loader.LoaderStatus.kBuffering;var chunk=result.value.buffer;var byteStart=_this3._range.from+_this3._receivedLength;_this3._receivedLength+=chunk.byteLength;if(_this3._onDataArrival){_this3._onDataArrival(chunk,byteStart,_this3._receivedLength)}_this3._pump(reader)}}).catch(function(e){if(e.code===11&&_browser2.default.msedge){return}_this3._status=_loader.LoaderStatus.kError;var type=0;var info=null;if((e.code===19||e.message==='network error')&&(_this3._contentLength===null||_this3._contentLength!==null&&_this3._receivedLength<_this3._contentLength)){type=_loader.LoaderErrors.EARLY_EOF;info={code:e.code,msg:'Fetch stream meet Early-EOF'}}else{type=_loader.LoaderErrors.EXCEPTION;info={code:e.code,msg:e.message}}if(_this3._onError){_this3._onError(type,info)}else{throw new _exception.RuntimeException(info.msg)}})}}]);return FetchStreamLoader}(_loader.BaseLoader);exports.default=FetchStreamLoader},{"../utils/browser.js":39,"../utils/exception.js":40,"../utils/logger.js":41,"./loader.js":24}],23:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _speedSampler=_dereq_('./speed-sampler.js');var _speedSampler2=_interopRequireDefault(_speedSampler);var _loader=_dereq_('./loader.js');var _fetchStreamLoader=_dereq_('./fetch-stream-loader.js');var _fetchStreamLoader2=_interopRequireDefault(_fetchStreamLoader);var _xhrMozChunkedLoader=_dereq_('./xhr-moz-chunked-loader.js');var _xhrMozChunkedLoader2=_interopRequireDefault(_xhrMozChunkedLoader);var _xhrMsstreamLoader=_dereq_('./xhr-msstream-loader.js');var _xhrMsstreamLoader2=_interopRequireDefault(_xhrMsstreamLoader);var _xhrRangeLoader=_dereq_('./xhr-range-loader.js');var _xhrRangeLoader2=_interopRequireDefault(_xhrRangeLoader);var _websocketLoader=_dereq_('./websocket-loader.js');var _websocketLoader2=_interopRequireDefault(_websocketLoader);var _rangeSeekHandler=_dereq_('./range-seek-handler.js');var _rangeSeekHandler2=_interopRequireDefault(_rangeSeekHandler);var _paramSeekHandler=_dereq_('./param-seek-handler.js');var _paramSeekHandler2=_interopRequireDefault(_paramSeekHandler);var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var IOController=function(){function IOController(dataSource,config,extraData){_classCallCheck(this,IOController);this.TAG='IOController';this._config=config;this._extraData=extraData;this._stashInitialSize=1024*384;if(config.stashInitialSize!=undefined&&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 _speedSampler2.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()}_createClass(IOController,[{key:'destroy',value:function destroy(){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}},{key:'isWorking',value:function isWorking(){return this._loader&&this._loader.isWorking()&&!this._paused}},{key:'isPaused',value:function isPaused(){return this._paused}},{key:'_selectSeekHandler',value:function _selectSeekHandler(){var config=this._config;if(config.seekType==='range'){this._seekHandler=new _rangeSeekHandler2.default(this._config.rangeLoadZeroStart)}else if(config.seekType==='param'){var paramStart=config.seekParamStart||'bstart';var paramEnd=config.seekParamEnd||'bend';this._seekHandler=new _paramSeekHandler2.default(paramStart,paramEnd)}else if(config.seekType==='custom'){if(typeof config.customSeekHandler!=='function'){throw new _exception.InvalidArgumentException('Custom seekType specified in config but invalid customSeekHandler!')}this._seekHandler=new config.customSeekHandler()}else{throw new _exception.InvalidArgumentException('Invalid seekType in config: '+config.seekType)}}},{key:'_selectLoader',value:function _selectLoader(){if(this._isWebSocketURL){this._loaderClass=_websocketLoader2.default}else if(_fetchStreamLoader2.default.isSupported()){this._loaderClass=_fetchStreamLoader2.default}else if(_xhrMozChunkedLoader2.default.isSupported()){this._loaderClass=_xhrMozChunkedLoader2.default}else if(_xhrRangeLoader2.default.isSupported()){this._loaderClass=_xhrRangeLoader2.default}else{throw new _exception.RuntimeException('Your browser doesn\'t support xhr with arraybuffer responseType!')}}},{key:'_createLoader',value:function _createLoader(){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)}},{key:'open',value:function open(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))}},{key:'abort',value:function abort(){this._loader.abort();if(this._paused){this._paused=false;this._resumeFrom=0}}},{key:'pause',value:function pause(){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}}},{key:'resume',value:function resume(){if(this._paused){this._paused=false;var bytes=this._resumeFrom;this._resumeFrom=0;this._internalSeek(bytes,true)}}},{key:'seek',value:function seek(bytes){this._paused=false;this._stashUsed=0;this._stashByteStart=0;this._internalSeek(bytes,true)}},{key:'_internalSeek',value:function _internalSeek(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()}}},{key:'updateUrl',value:function updateUrl(url){if(!url||typeof url!=='string'||url.length===0){throw new _exception.InvalidArgumentException('Url must be a non-empty string!')}this._dataSource.url=url;}},{key:'_expandBuffer',value:function _expandBuffer(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}},{key:'_normalizeSpeed',value:function _normalizeSpeed(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}}}},{key:'_adjustStashSize',value:function _adjustStashSize(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}},{key:'_dispatchChunks',value:function _dispatchChunks(chunks,byteStart){this._currentRange.to=byteStart+chunks.byteLength-1;return this._onDataArrival(chunks,byteStart)}},{key:'_onURLRedirect',value:function _onURLRedirect(redirectedURL){this._redirectedURL=redirectedURL;if(this._onRedirect){this._onRedirect(redirectedURL)}}},{key:'_onContentLengthKnown',value:function _onContentLengthKnown(contentLength){if(contentLength&&this._fullRequestFlag){this._totalLength=contentLength;this._fullRequestFlag=false}}},{key:'_onLoaderChunkArrival',value:function _onLoaderChunkArrival(chunk,byteStart,receivedLength){if(!this._onDataArrival){throw new _exception.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 _stashArray2=new Uint8Array(this._stashBuffer,0,this._stashSize);_stashArray2.set(new Uint8Array(chunk),this._stashUsed);this._stashUsed+=chunk.byteLength}else{var _stashArray3=new Uint8Array(this._stashBuffer,0,this._bufferSize);if(this._stashUsed>0){var buffer=this._stashBuffer.slice(0,this._stashUsed);var _consumed2=this._dispatchChunks(buffer,this._stashByteStart);if(_consumed2<buffer.byteLength){if(_consumed2>0){var _remainArray=new Uint8Array(buffer,_consumed2);_stashArray3.set(_remainArray,0);this._stashUsed=_remainArray.byteLength;this._stashByteStart+=_consumed2}}else{this._stashUsed=0;this._stashByteStart+=_consumed2}if(this._stashUsed+chunk.byteLength>this._bufferSize){this._expandBuffer(this._stashUsed+chunk.byteLength);_stashArray3=new Uint8Array(this._stashBuffer,0,this._bufferSize)}_stashArray3.set(new Uint8Array(chunk),this._stashUsed);this._stashUsed+=chunk.byteLength}else{var _consumed3=this._dispatchChunks(chunk,byteStart);if(_consumed3<chunk.byteLength){var _remain=chunk.byteLength-_consumed3;if(_remain>this._bufferSize){this._expandBuffer(_remain);_stashArray3=new Uint8Array(this._stashBuffer,0,this._bufferSize)}_stashArray3.set(new Uint8Array(chunk,_consumed3),0);this._stashUsed+=_remain;this._stashByteStart=byteStart+_consumed3}}}}}},{key:'_flushStashBuffer',value:function _flushStashBuffer(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){_logger2.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}},{key:'_onLoaderComplete',value:function _onLoaderComplete(from,to){this._flushStashBuffer(true);if(this._onComplete){this._onComplete(this._extraData)}}},{key:'_onLoaderError',value:function _onLoaderError(type,data){_logger2.default.e(this.TAG,'Loader error, code = '+data.code+', msg = '+data.msg);this._flushStashBuffer(false);if(this._isEarlyEofReconnecting){this._isEarlyEofReconnecting=false;type=_loader.LoaderErrors.UNRECOVERABLE_EARLY_EOF}switch(type){case _loader.LoaderErrors.EARLY_EOF:{if(!this._config.isLive){if(this._totalLength){var nextFrom=this._currentRange.to+1;if(nextFrom<this._totalLength){_logger2.default.w(this.TAG,'Connection lost, trying reconnect...');this._isEarlyEofReconnecting=true;this._internalSeek(nextFrom,false)}return}}type=_loader.LoaderErrors.UNRECOVERABLE_EARLY_EOF;break}case _loader.LoaderErrors.UNRECOVERABLE_EARLY_EOF:case _loader.LoaderErrors.CONNECTING_TIMEOUT:case _loader.LoaderErrors.HTTP_STATUS_CODE_INVALID:case _loader.LoaderErrors.EXCEPTION:break}if(this._onError){this._onError(type,data)}else{throw new _exception.RuntimeException('IOException: '+data.msg)}}},{key:'status',get:function get(){return this._loader.status}},{key:'extraData',get:function get(){return this._extraData},set:function set(data){this._extraData=data}},{key:'onDataArrival',get:function get(){return this._onDataArrival},set:function set(callback){this._onDataArrival=callback}},{key:'onSeeked',get:function get(){return this._onSeeked},set:function set(callback){this._onSeeked=callback}},{key:'onError',get:function get(){return this._onError},set:function set(callback){this._onError=callback}},{key:'onComplete',get:function get(){return this._onComplete},set:function set(callback){this._onComplete=callback}},{key:'onRedirect',get:function get(){return this._onRedirect},set:function set(callback){this._onRedirect=callback}},{key:'onRecoveredEarlyEof',get:function get(){return this._onRecoveredEarlyEof},set:function set(callback){this._onRecoveredEarlyEof=callback}},{key:'currentURL',get:function get(){return this._dataSource.url}},{key:'hasRedirect',get:function get(){return this._redirectedURL!=null||this._dataSource.redirectedURL!=undefined}},{key:'currentRedirectedURL',get:function get(){return this._redirectedURL||this._dataSource.redirectedURL}},{key:'currentSpeed',get:function get(){if(this._loaderClass===_xhrRangeLoader2.default){return this._loader.currentSpeed}return this._speedSampler.lastSecondKBps}},{key:'loaderType',get:function get(){return this._loader.type}}]);return IOController}();exports.default=IOController},{"../utils/exception.js":40,"../utils/logger.js":41,"./fetch-stream-loader.js":22,"./loader.js":24,"./param-seek-handler.js":25,"./range-seek-handler.js":26,"./speed-sampler.js":27,"./websocket-loader.js":28,"./xhr-moz-chunked-loader.js":29,"./xhr-msstream-loader.js":30,"./xhr-range-loader.js":31}],24:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.BaseLoader=exports.LoaderErrors=exports.LoaderStatus=undefined;var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _exception=_dereq_('../utils/exception.js');function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var LoaderStatus=exports.LoaderStatus={kIdle:0,kConnecting:1,kBuffering:2,kError:3,kComplete:4};var LoaderErrors=exports.LoaderErrors={OK:'OK',EXCEPTION:'Exception',HTTP_STATUS_CODE_INVALID:'HttpStatusCodeInvalid',CONNECTING_TIMEOUT:'ConnectingTimeout',EARLY_EOF:'EarlyEof',UNRECOVERABLE_EARLY_EOF:'UnrecoverableEarlyEof'};var BaseLoader=exports.BaseLoader=function(){function BaseLoader(typeName){_classCallCheck(this,BaseLoader);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}_createClass(BaseLoader,[{key:'destroy',value:function destroy(){this._status=LoaderStatus.kIdle;this._onContentLengthKnown=null;this._onURLRedirect=null;this._onDataArrival=null;this._onError=null;this._onComplete=null}},{key:'isWorking',value:function isWorking(){return this._status===LoaderStatus.kConnecting||this._status===LoaderStatus.kBuffering}},{key:'open',value:function open(dataSource,range){throw new _exception.NotImplementedException('Unimplemented abstract function!')}},{key:'abort',value:function abort(){throw new _exception.NotImplementedException('Unimplemented abstract function!')}},{key:'type',get:function get(){return this._type}},{key:'status',get:function get(){return this._status}},{key:'needStashBuffer',get:function get(){return this._needStash}},{key:'onContentLengthKnown',get:function get(){return this._onContentLengthKnown},set:function set(callback){this._onContentLengthKnown=callback}},{key:'onURLRedirect',get:function get(){return this._onURLRedirect},set:function set(callback){this._onURLRedirect=callback}},{key:'onDataArrival',get:function get(){return this._onDataArrival},set:function set(callback){this._onDataArrival=callback}},{key:'onError',get:function get(){return this._onError},set:function set(callback){this._onError=callback}},{key:'onComplete',get:function get(){return this._onComplete},set:function set(callback){this._onComplete=callback}}]);return BaseLoader}()},{"../utils/exception.js":40}],25:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var ParamSeekHandler=function(){function ParamSeekHandler(paramStart,paramEnd){_classCallCheck(this,ParamSeekHandler);this._startName=paramStart;this._endName=paramEnd}_createClass(ParamSeekHandler,[{key:'getConfig',value:function getConfig(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:url,headers:{}}}},{key:'removeURLParameters',value:function removeURLParameters(seekedURL){var baseURL=seekedURL.split('?')[0];var params=undefined;var queryIndex=seekedURL.indexOf('?');if(queryIndex!==-1){params=seekedURL.substring(queryIndex+1)}var resultParams='';if(params!=undefined&¶ms.length>0){var pairs=params.split('&');for(var i=0;i<pairs.length;i+=1){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 ParamSeekHandler}();exports.default=ParamSeekHandler},{}],26:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var RangeSeekHandler=function(){function RangeSeekHandler(zeroStart){_classCallCheck(this,RangeSeekHandler);this._zeroStart=zeroStart||false}_createClass(RangeSeekHandler,[{key:'getConfig',value:function getConfig(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:url,headers:headers}}},{key:'removeURLParameters',value:function removeURLParameters(seekedURL){return seekedURL}}]);return RangeSeekHandler}();exports.default=RangeSeekHandler},{}],27:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var SpeedSampler=function(){function SpeedSampler(){_classCallCheck(this,SpeedSampler);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}}_createClass(SpeedSampler,[{key:"reset",value:function reset(){this._firstCheckpoint=this._lastCheckpoint=0;this._totalBytes=this._intervalBytes=0;this._lastSecondBytes=0}},{key:"addBytes",value:function addBytes(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<1000){this._intervalBytes+=bytes;this._totalBytes+=bytes}else{this._lastSecondBytes=this._intervalBytes;this._intervalBytes=bytes;this._totalBytes+=bytes;this._lastCheckpoint=this._now()}}},{key:"currentKBps",get:function get(){this.addBytes(0);var durationSeconds=(this._now()-this._lastCheckpoint)/1000;if(durationSeconds==0){durationSeconds=1}return this._intervalBytes/durationSeconds/1024}},{key:"lastSecondKBps",get:function get(){this.addBytes(0);if(this._lastSecondBytes!==0){return this._lastSecondBytes/1024}else{if(this._now()-this._lastCheckpoint>=500){return this.currentKBps}else{return 0}}}},{key:"averageKBps",get:function get(){var durationSeconds=(this._now()-this._firstCheckpoint)/1000;return this._totalBytes/durationSeconds/1024}}]);return SpeedSampler}();exports.default=SpeedSampler},{}],28:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _get=function get(object,property,receiver){if(object===null){object=Function.prototype}var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined}else{return get(parent,property,receiver)}}else if("value"in desc){return desc.value}else{var getter=desc.get;if(getter===undefined){return undefined}return getter.call(receiver)}};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _loader=_dereq_('./loader.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass){Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}}var WebSocketLoader=function(_BaseLoader){_inherits(WebSocketLoader,_BaseLoader);_createClass(WebSocketLoader,null,[{key:'isSupported',value:function isSupported(){try{return typeof self.WebSocket!=='undefined'}catch(e){return false}}}]);function WebSocketLoader(){_classCallCheck(this,WebSocketLoader);var _this=_possibleConstructorReturn(this,(WebSocketLoader.__proto__||Object.getPrototypeOf(WebSocketLoader)).call(this,'websocket-loader'));_this.TAG='WebSocketLoader';_this._needStash=true;_this._ws=null;_this._requestAbort=false;_this._receivedLength=0;return _this}_createClass(WebSocketLoader,[{key:'destroy',value:function destroy(){if(this._ws){this.abort()}_get(WebSocketLoader.prototype.__proto__||Object.getPrototypeOf(WebSocketLoader.prototype),'destroy',this).call(this)}},{key:'open',value:function open(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.LoaderStatus.kConnecting}catch(e){this._status=_loader.LoaderStatus.kError;var info={code:e.code,msg:e.message};if(this._onError){this._onError(_loader.LoaderErrors.EXCEPTION,info)}else{throw new _exception.RuntimeException(info.msg)}}}},{key:'abort',value:function abort(){var ws=this._ws;if(ws&&(ws.readyState===0||ws.readyState===1)){this._requestAbort=true;ws.close()}this._ws=null;this._status=_loader.LoaderStatus.kComplete}},{key:'_onWebSocketOpen',value:function _onWebSocketOpen(e){this._status=_loader.LoaderStatus.kBuffering}},{key:'_onWebSocketClose',value:function _onWebSocketClose(e){if(this._requestAbort===true){this._requestAbort=false;return}this._status=_loader.LoaderStatus.kComplete;if(this._onComplete){this._onComplete(0,this._receivedLength-1)}}},{key:'_onWebSocketMessage',value:function _onWebSocketMessage(e){var _this2=this;if(e.data instanceof ArrayBuffer){this._dispatchArrayBuffer(e.data)}else if(e.data instanceof Blob){var reader=new FileReader();reader.onload=function(){_this2._dispatchArrayBuffer(reader.result)};reader.readAsArrayBuffer(e.data)}else{this._status=_loader.LoaderStatus.kError;var info={code:-1,msg:'Unsupported WebSocket message type: '+e.data.constructor.name};if(this._onError){this._onError(_loader.LoaderErrors.EXCEPTION,info)}else{throw new _exception.RuntimeException(info.msg)}}}},{key:'_dispatchArrayBuffer',value:function _dispatchArrayBuffer(arraybuffer){var chunk=arraybuffer;var byteStart=this._receivedLength;this._receivedLength+=chunk.byteLength;if(this._onDataArrival){this._onDataArrival(chunk,byteStart,this._receivedLength)}}},{key:'_onWebSocketError',value:function _onWebSocketError(e){this._status=_loader.LoaderStatus.kError;var info={code:e.code,msg:e.message};if(this._onError){this._onError(_loader.LoaderErrors.EXCEPTION,info)}else{throw new _exception.RuntimeException(info.msg)}}}]);return WebSocketLoader}(_loader.BaseLoader);exports.default=WebSocketLoader},{"../utils/exception.js":40,"../utils/logger.js":41,"./loader.js":24}],29:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _get=function get(object,property,receiver){if(object===null){object=Function.prototype}var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined}else{return get(parent,property,receiver)}}else if("value"in desc){return desc.value}else{var getter=desc.get;if(getter===undefined){return undefined}return getter.call(receiver)}};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _loader=_dereq_('./loader.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass){Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}}var MozChunkedLoader=function(_BaseLoader){_inherits(MozChunkedLoader,_BaseLoader);_createClass(MozChunkedLoader,null,[{key:'isSupported',value:function isSupported(){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){_logger2.default.w('MozChunkedLoader',e.message);return false}}}]);function MozChunkedLoader(seekHandler,config){_classCallCheck(this,MozChunkedLoader);var _this=_possibleConstructorReturn(this,(MozChunkedLoader.__proto__||Object.getPrototypeOf(MozChunkedLoader)).call(this,'xhr-moz-chunked-loader'));_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}_createClass(MozChunkedLoader,[{key:'destroy',value:function destroy(){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}_get(MozChunkedLoader.prototype.__proto__||Object.getPrototypeOf(MozChunkedLoader.prototype),'destroy',this).call(this)}},{key:'open',value:function open(dataSource,range){this._dataSource=dataSource;this._range=range;var sourceURL=dataSource.url;if(this._config.reuseRedirectedURL&&dataSource.redirectedURL!=undefined){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])}}}this._status=_loader.LoaderStatus.kConnecting;xhr.send()}},{key:'abort',value:function abort(){this._requestAbort=true;if(this._xhr){this._xhr.abort()}this._status=_loader.LoaderStatus.kComplete}},{key:'_onReadyStateChange',value:function _onReadyStateChange(e){var xhr=e.target;if(xhr.readyState===2){if(xhr.responseURL!=undefined&&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.LoaderStatus.kError;if(this._onError){this._onError(_loader.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:xhr.status,msg:xhr.statusText})}else{throw new _exception.RuntimeException('MozChunkedLoader: Http code invalid, '+xhr.status+' '+xhr.statusText)}}else{this._status=_loader.LoaderStatus.kBuffering}}}},{key:'_onProgress',value:function _onProgress(e){if(this._status===_loader.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)}}},{key:'_onLoadEnd',value:function _onLoadEnd(e){if(this._requestAbort===true){this._requestAbort=false;return}else if(this._status===_loader.LoaderStatus.kError){return}this._status=_loader.LoaderStatus.kComplete;if(this._onComplete){this._onComplete(this._range.from,this._range.from+this._receivedLength-1)}}},{key:'_onXhrError',value:function _onXhrError(e){this._status=_loader.LoaderStatus.kError;var type=0;var info=null;if(this._contentLength&&e.loaded<this._contentLength){type=_loader.LoaderErrors.EARLY_EOF;info={code:-1,msg:'Moz-Chunked stream meet Early-Eof'}}else{type=_loader.LoaderErrors.EXCEPTION;info={code:-1,msg:e.constructor.name+' '+e.type}}if(this._onError){this._onError(type,info)}else{throw new _exception.RuntimeException(info.msg)}}}]);return MozChunkedLoader}(_loader.BaseLoader);exports.default=MozChunkedLoader},{"../utils/exception.js":40,"../utils/logger.js":41,"./loader.js":24}],30:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _get=function get(object,property,receiver){if(object===null){object=Function.prototype}var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined}else{return get(parent,property,receiver)}}else if("value"in desc){return desc.value}else{var getter=desc.get;if(getter===undefined){return undefined}return getter.call(receiver)}};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _loader=_dereq_('./loader.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass){Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}}var MSStreamLoader=function(_BaseLoader){_inherits(MSStreamLoader,_BaseLoader);_createClass(MSStreamLoader,null,[{key:'isSupported',value:function isSupported(){try{if(typeof self.MSStream==='undefined'||typeof self.MSStreamReader==='undefined'){return false}var xhr=new XMLHttpRequest();xhr.open('GET','https://example.com',true);xhr.responseType='ms-stream';return xhr.responseType==='ms-stream'}catch(e){_logger2.default.w('MSStreamLoader',e.message);return false}}}]);function MSStreamLoader(seekHandler,config){_classCallCheck(this,MSStreamLoader);var _this=_possibleConstructorReturn(this,(MSStreamLoader.__proto__||Object.getPrototypeOf(MSStreamLoader)).call(this,'xhr-msstream-loader'));_this.TAG='MSStreamLoader';_this._seekHandler=seekHandler;_this._config=config;_this._needStash=true;_this._xhr=null;_this._reader=null;_this._totalRange=null;_this._currentRange=null;_this._currentRequestURL=null;_this._currentRedirectedURL=null;_this._contentLength=null;_this._receivedLength=0;_this._bufferLimit=16*1024*1024;_this._lastTimeBufferSize=0;_this._isReconnecting=false;return _this}_createClass(MSStreamLoader,[{key:'destroy',value:function destroy(){if(this.isWorking()){this.abort()}if(this._reader){this._reader.onprogress=null;this._reader.onload=null;this._reader.onerror=null;this._reader=null}if(this._xhr){this._xhr.onreadystatechange=null;this._xhr=null}_get(MSStreamLoader.prototype.__proto__||Object.getPrototypeOf(MSStreamLoader.prototype),'destroy',this).call(this)}},{key:'open',value:function open(dataSource,range){this._internalOpen(dataSource,range,false)}},{key:'_internalOpen',value:function _internalOpen(dataSource,range,isSubrange){this._dataSource=dataSource;if(!isSubrange){this._totalRange=range}else{this._currentRange=range}var sourceURL=dataSource.url;if(this._config.reuseRedirectedURL){if(this._currentRedirectedURL!=undefined){sourceURL=this._currentRedirectedURL}else if(dataSource.redirectedURL!=undefined){sourceURL=dataSource.redirectedURL}}var seekConfig=this._seekHandler.getConfig(sourceURL,range);this._currentRequestURL=seekConfig.url;var reader=this._reader=new self.MSStreamReader();reader.onprogress=this._msrOnProgress.bind(this);reader.onload=this._msrOnLoad.bind(this);reader.onerror=this._msrOnError.bind(this);var xhr=this._xhr=new XMLHttpRequest();xhr.open('GET',seekConfig.url,true);xhr.responseType='ms-stream';xhr.onreadystatechange=this._xhrOnReadyStateChange.bind(this);xhr.onerror=this._xhrOnError.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(this._isReconnecting){this._isReconnecting=false}else{this._status=_loader.LoaderStatus.kConnecting}xhr.send()}},{key:'abort',value:function abort(){this._internalAbort();this._status=_loader.LoaderStatus.kComplete}},{key:'_internalAbort',value:function _internalAbort(){if(this._reader){if(this._reader.readyState===1){this._reader.abort()}this._reader.onprogress=null;this._reader.onload=null;this._reader.onerror=null;this._reader=null}if(this._xhr){this._xhr.abort();this._xhr.onreadystatechange=null;this._xhr=null}}},{key:'_xhrOnReadyStateChange',value:function _xhrOnReadyStateChange(e){var xhr=e.target;if(xhr.readyState===2){if(xhr.status>=200&&xhr.status<=299){this._status=_loader.LoaderStatus.kBuffering;if(xhr.responseURL!=undefined){var redirectedURL=this._seekHandler.removeURLParameters(xhr.responseURL);if(xhr.responseURL!==this._currentRequestURL&&redirectedURL!==this._currentRedirectedURL){this._currentRedirectedURL=redirectedURL;if(this._onURLRedirect){this._onURLRedirect(redirectedURL)}}}var lengthHeader=xhr.getResponseHeader('Content-Length');if(lengthHeader!=null&&this._contentLength==null){var length=parseInt(lengthHeader);if(length>0){this._contentLength=length;if(this._onContentLengthKnown){this._onContentLengthKnown(this._contentLength)}}}}else{this._status=_loader.LoaderStatus.kError;if(this._onError){this._onError(_loader.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:xhr.status,msg:xhr.statusText})}else{throw new _exception.RuntimeException('MSStreamLoader: Http code invalid, '+xhr.status+' '+xhr.statusText)}}}else if(xhr.readyState===3){if(xhr.status>=200&&xhr.status<=299){this._status=_loader.LoaderStatus.kBuffering;var msstream=xhr.response;this._reader.readAsArrayBuffer(msstream)}}}},{key:'_xhrOnError',value:function _xhrOnError(e){this._status=_loader.LoaderStatus.kError;var type=_loader.LoaderErrors.EXCEPTION;var info={code:-1,msg:e.constructor.name+' '+e.type};if(this._onError){this._onError(type,info)}else{throw new _exception.RuntimeException(info.msg)}}},{key:'_msrOnProgress',value:function _msrOnProgress(e){var reader=e.target;var bigbuffer=reader.result;if(bigbuffer==null){this._doReconnectIfNeeded();return}var slice=bigbuffer.slice(this._lastTimeBufferSize);this._lastTimeBufferSize=bigbuffer.byteLength;var byteStart=this._totalRange.from+this._receivedLength;this._receivedLength+=slice.byteLength;if(this._onDataArrival){this._onDataArrival(slice,byteStart,this._receivedLength)}if(bigbuffer.byteLength>=this._bufferLimit){_logger2.default.v(this.TAG,'MSStream buffer exceeded max size near '+(byteStart+slice.byteLength)+', reconnecting...');this._doReconnectIfNeeded()}}},{key:'_doReconnectIfNeeded',value:function _doReconnectIfNeeded(){if(this._contentLength==null||this._receivedLength<this._contentLength){this._isReconnecting=true;this._lastTimeBufferSize=0;this._internalAbort();var range={from:this._totalRange.from+this._receivedLength,to:-1};this._internalOpen(this._dataSource,range,true)}}},{key:'_msrOnLoad',value:function _msrOnLoad(e){this._status=_loader.LoaderStatus.kComplete;if(this._onComplete){this._onComplete(this._totalRange.from,this._totalRange.from+this._receivedLength-1)}}},{key:'_msrOnError',value:function _msrOnError(e){this._status=_loader.LoaderStatus.kError;var type=0;var info=null;if(this._contentLength&&this._receivedLength<this._contentLength){type=_loader.LoaderErrors.EARLY_EOF;info={code:-1,msg:'MSStream meet Early-Eof'}}else{type=_loader.LoaderErrors.EARLY_EOF;info={code:-1,msg:e.constructor.name+' '+e.type}}if(this._onError){this._onError(type,info)}else{throw new _exception.RuntimeException(info.msg)}}}]);return MSStreamLoader}(_loader.BaseLoader);exports.default=MSStreamLoader},{"../utils/exception.js":40,"../utils/logger.js":41,"./loader.js":24}],31:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _get=function get(object,property,receiver){if(object===null){object=Function.prototype}var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined}else{return get(parent,property,receiver)}}else if("value"in desc){return desc.value}else{var getter=desc.get;if(getter===undefined){return undefined}return getter.call(receiver)}};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _speedSampler=_dereq_('./speed-sampler.js');var _speedSampler2=_interopRequireDefault(_speedSampler);var _loader=_dereq_('./loader.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass){Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}}var RangeLoader=function(_BaseLoader){_inherits(RangeLoader,_BaseLoader);_createClass(RangeLoader,null,[{key:'isSupported',value:function isSupported(){try{var xhr=new XMLHttpRequest();xhr.open('GET','https://example.com',true);xhr.responseType='arraybuffer';return xhr.responseType==='arraybuffer'}catch(e){_logger2.default.w('RangeLoader',e.message);return false}}}]);function RangeLoader(seekHandler,config){_classCallCheck(this,RangeLoader);var _this=_possibleConstructorReturn(this,(RangeLoader.__proto__||Object.getPrototypeOf(RangeLoader)).call(this,'xhr-range-loader'));_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 _speedSampler2.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}_createClass(RangeLoader,[{key:'destroy',value:function destroy(){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}_get(RangeLoader.prototype.__proto__||Object.getPrototypeOf(RangeLoader.prototype),'destroy',this).call(this)}},{key:'open',value:function open(dataSource,range){this._dataSource=dataSource;this._range=range;this._status=_loader.LoaderStatus.kConnecting;var useRefTotalLength=false;if(this._dataSource.filesize!=undefined&&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()}}},{key:'_openSubRange',value:function _openSubRange(){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:from,to:to};this._internalOpen(this._dataSource,this._currentRequestRange)}},{key:'_internalOpen',value:function _internalOpen(dataSource,range){this._lastTimeLoaded=0;var sourceURL=dataSource.url;if(this._config.reuseRedirectedURL){if(this._currentRedirectedURL!=undefined){sourceURL=this._currentRedirectedURL}else if(dataSource.redirectedURL!=undefined){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])}}}xhr.send()}},{key:'abort',value:function abort(){this._requestAbort=true;this._internalAbort();this._status=_loader.LoaderStatus.kComplete}},{key:'_internalAbort',value:function _internalAbort(){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}}},{key:'_onReadyStateChange',value:function _onReadyStateChange(e){var xhr=e.target;if(xhr.readyState===2){if(xhr.responseURL!=undefined){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.LoaderStatus.kBuffering}else{this._status=_loader.LoaderStatus.kError;if(this._onError){this._onError(_loader.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:xhr.status,msg:xhr.statusText})}else{throw new _exception.RuntimeException('RangeLoader: Http code invalid, '+xhr.status+' '+xhr.statusText)}}}}},{key:'_onProgress',value:function _onProgress(e){if(this._status===_loader.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)}},{key:'_normalizeSpeed',value:function _normalizeSpeed(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}}}},{key:'_onLoad',value:function _onLoad(e){if(this._status===_loader.LoaderStatus.kError){return}if(this._waitForTotalLength){this._waitForTotalLength=false;return}this._lastTimeLoaded=0;var KBps=this._speedSampler.lastSecondKBps;if(KBps===0){this._zeroSpeedChunkCount+=1;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.LoaderStatus.kComplete;if(this._onComplete){this._onComplete(this._range.from,this._range.from+this._receivedLength-1)}}}},{key:'_onXhrError',value:function _onXhrError(e){this._status=_loader.LoaderStatus.kError;var type=0;var info=null;if(this._contentLength&&this._receivedLength>0&&this._receivedLength<this._contentLength){type=_loader.LoaderErrors.EARLY_EOF;info={code:-1,msg:'RangeLoader meet Early-Eof'}}else{type=_loader.LoaderErrors.EXCEPTION;info={code:-1,msg:e.constructor.name+' '+e.type}}if(this._onError){this._onError(type,info)}else{throw new _exception.RuntimeException(info.msg)}}},{key:'currentSpeed',get:function get(){return this._speedSampler.lastSecondKBps}}]);return RangeLoader}(_loader.BaseLoader);exports.default=RangeLoader},{"../utils/exception.js":40,"../utils/logger.js":41,"./loader.js":24,"./speed-sampler.js":27}],32:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _events=_dereq_('events');var _events2=_interopRequireDefault(_events);var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _browser=_dereq_('../utils/browser.js');var _browser2=_interopRequireDefault(_browser);var _playerEvents=_dereq_('./player-events.js');var _playerEvents2=_interopRequireDefault(_playerEvents);var _transmuxer=_dereq_('../core/transmuxer.js');var _transmuxer2=_interopRequireDefault(_transmuxer);var _transmuxingEvents=_dereq_('../core/transmuxing-events.js');var _transmuxingEvents2=_interopRequireDefault(_transmuxingEvents);var _mseController=_dereq_('../core/mse-controller.js');var _mseController2=_interopRequireDefault(_mseController);var _mseEvents=_dereq_('../core/mse-events.js');var _mseEvents2=_interopRequireDefault(_mseEvents);var _playerErrors=_dereq_('./player-errors.js');var _config=_dereq_('../config.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var FlvPlayer=function(){function FlvPlayer(mediaDataSource,config){_classCallCheck(this,FlvPlayer);this.TAG='FlvPlayer';this._type='FlvPlayer';this._emitter=new _events2.default();this._config=(0,_config.createDefaultConfig)();if((typeof config==='undefined'?'undefined':_typeof(config))==='object'){Object.assign(this._config,config)}if(mediaDataSource.type.toLowerCase()!=='flv'){throw new _exception.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=_browser2.default.chrome&&(_browser2.default.version.major<50||_browser2.default.version.major===50&&_browser2.default.version.build<2661);this._alwaysSeekKeyframe=chromeNeedIDRFix||_browser2.default.msedge||_browser2.default.msie?true:false;if(this._alwaysSeekKeyframe){this._config.accurateSeek=false}}_createClass(FlvPlayer,[{key:'destroy',value:function destroy(){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}},{key:'on',value:function on(event,listener){var _this=this;if(event===_playerEvents2.default.MEDIA_INFO){if(this._mediaInfo!=null){Promise.resolve().then(function(){_this._emitter.emit(_playerEvents2.default.MEDIA_INFO,_this.mediaInfo)})}}else if(event===_playerEvents2.default.STATISTICS_INFO){if(this._statisticsInfo!=null){Promise.resolve().then(function(){_this._emitter.emit(_playerEvents2.default.STATISTICS_INFO,_this.statisticsInfo)})}}this._emitter.addListener(event,listener)}},{key:'off',value:function off(event,listener){this._emitter.removeListener(event,listener)}},{key:'attachMediaElement',value:function attachMediaElement(mediaElement){var _this2=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 _mseController2.default(this._config);this._msectl.on(_mseEvents2.default.UPDATE_END,this._onmseUpdateEnd.bind(this));this._msectl.on(_mseEvents2.default.BUFFER_FULL,this._onmseBufferFull.bind(this));this._msectl.on(_mseEvents2.default.SOURCE_OPEN,function(){_this2._mseSourceOpened=true;if(_this2._hasPendingLoad){_this2._hasPendingLoad=false;_this2.load()}});this._msectl.on(_mseEvents2.default.ERROR,function(info){_this2._emitter.emit(_playerEvents2.default.ERROR,_playerErrors.ErrorTypes.MEDIA_ERROR,_playerErrors.ErrorDetails.MEDIA_MSE_ERROR,info)});this._msectl.attachMediaElement(mediaElement);if(this._pendingSeekTime!=null){try{mediaElement.currentTime=this._pendingSeekTime;this._pendingSeekTime=null}catch(e){}}}},{key:'detachMediaElement',value:function detachMediaElement(){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}}},{key:'load',value:function load(){var _this3=this;if(!this._mediaElement){throw new _exception.IllegalStateException('HTMLMediaElement must be attached before load()!')}if(this._transmuxer){throw new _exception.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 _transmuxer2.default(this._mediaDataSource,this._config);this._transmuxer.on(_transmuxingEvents2.default.INIT_SEGMENT,function(type,is){_this3._msectl.appendInitSegment(is)});this._transmuxer.on(_transmuxingEvents2.default.MEDIA_SEGMENT,function(type,ms){_this3._msectl.appendMediaSegment(ms);if(_this3._config.lazyLoad&&!_this3._config.isLive){var currentTime=_this3._mediaElement.currentTime;if(ms.info.endDts>=(currentTime+_this3._config.lazyLoadMaxDuration)*1000){if(_this3._progressChecker==null){_logger2.default.v(_this3.TAG,'Maximum buffering duration exceeded, suspend transmuxing task');_this3._suspendTransmuxer()}}}});this._transmuxer.on(_transmuxingEvents2.default.LOADING_COMPLETE,function(){_this3._msectl.endOfStream();_this3._emitter.emit(_playerEvents2.default.LOADING_COMPLETE)});this._transmuxer.on(_transmuxingEvents2.default.RECOVERED_EARLY_EOF,function(){_this3._emitter.emit(_playerEvents2.default.RECOVERED_EARLY_EOF)});this._transmuxer.on(_transmuxingEvents2.default.IO_ERROR,function(detail,info){_this3._emitter.emit(_playerEvents2.default.ERROR,_playerErrors.ErrorTypes.NETWORK_ERROR,detail,info)});this._transmuxer.on(_transmuxingEvents2.default.DEMUX_ERROR,function(detail,info){_this3._emitter.emit(_playerEvents2.default.ERROR,_playerErrors.ErrorTypes.MEDIA_ERROR,detail,{code:-1,msg:info})});this._transmuxer.on(_transmuxingEvents2.default.MEDIA_INFO,function(mediaInfo){_this3._mediaInfo=mediaInfo;_this3._emitter.emit(_playerEvents2.default.MEDIA_INFO,Object.assign({},mediaInfo))});this._transmuxer.on(_transmuxingEvents2.default.STATISTICS_INFO,function(statInfo){_this3._statisticsInfo=_this3._fillStatisticsInfo(statInfo);_this3._emitter.emit(_playerEvents2.default.STATISTICS_INFO,Object.assign({},_this3._statisticsInfo))});this._transmuxer.on(_transmuxingEvents2.default.RECOMMEND_SEEKPOINT,function(milliseconds){if(_this3._mediaElement&&!_this3._config.accurateSeek){_this3._requestSetTime=true;_this3._mediaElement.currentTime=milliseconds/1000}});this._transmuxer.open()}},{key:'unload',value:function unload(){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}}},{key:'play',value:function play(){return this._mediaElement.play()}},{key:'pause',value:function pause(){this._mediaElement.pause()}},{key:'_fillStatisticsInfo',value:function _fillStatisticsInfo(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!=undefined){decoded=this._mediaElement.webkitDecodedFrameCount;dropped=this._mediaElement.webkitDroppedFrameCount}else{hasQualityInfo=false}if(hasQualityInfo){statInfo.decodedFrames=decoded;statInfo.droppedFrames=dropped}return statInfo}},{key:'_onmseUpdateEnd',value:function _onmseUpdateEnd(){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+=1){var start=buffered.start(i);var end=buffered.end(i);if(start<=currentTime&¤tTime<end){currentRangeStart=start;currentRangeEnd=end;break}}if(currentRangeEnd>=currentTime+this._config.lazyLoadMaxDuration&&this._progressChecker==null){_logger2.default.v(this.TAG,'Maximum buffering duration exceeded, suspend transmuxing task');this._suspendTransmuxer()}}},{key:'_onmseBufferFull',value:function _onmseBufferFull(){_logger2.default.v(this.TAG,'MSE SourceBuffer is full, suspend transmuxing task');if(this._progressChecker==null){this._suspendTransmuxer()}}},{key:'_suspendTransmuxer',value:function _suspendTransmuxer(){if(this._transmuxer){this._transmuxer.pause();if(this._progressChecker==null){this._progressChecker=window.setInterval(this._checkProgressAndResume.bind(this),1000)}}}},{key:'_checkProgressAndResume',value:function _checkProgressAndResume(){var currentTime=this._mediaElement.currentTime;var buffered=this._mediaElement.buffered;var needResume=false;for(var i=0;i<buffered.length;i+=1){var from=buffered.start(i);var to=buffered.end(i);if(currentTime>=from&¤tTime<to){if(currentTime>=to-this._config.lazyLoadRecoverDuration){needResume=true}break}}if(needResume){window.clearInterval(this._progressChecker);this._progressChecker=null;if(needResume){_logger2.default.v(this.TAG,'Continue loading from paused position');this._transmuxer.resume()}}}},{key:'_isTimepointBuffered',value:function _isTimepointBuffered(seconds){var buffered=this._mediaElement.buffered;for(var i=0;i<buffered.length;i+=1){var from=buffered.start(i);var to=buffered.end(i);if(seconds>=from&&seconds<to){return true}}return false}},{key:'_internalSeek',value:function _internalSeek(seconds){var directSeek=this._isTimepointBuffered(seconds);var directSeekBegin=false;var directSeekBeginTime=0;if(seconds<1.0&&this._mediaElement.buffered.length>0){var videoBeginTime=this._mediaElement.buffered.start(0);if(videoBeginTime<1.0&&seconds<videoBeginTime||_browser2.default.safari){directSeekBegin=true;directSeekBeginTime=_browser2.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*1000));this._requestSetTime=true;if(idr!=null){this._mediaElement.currentTime=idr.dts/1000}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*1000));if(this._config.accurateSeek){this._requestSetTime=true;this._mediaElement.currentTime=seconds}}}},{key:'_checkAndApplyUnbufferedSeekpoint',value:function _checkAndApplyUnbufferedSeekpoint(){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*1000));if(this._config.accurateSeek){this._requestSetTime=true;this._mediaElement.currentTime=target}}}else{window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this),50)}}}},{key:'_checkAndResumeStuckPlayback',value:function _checkAndResumeStuckPlayback(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)){_logger2.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)}}},{key:'_onvLoadedMetadata',value:function _onvLoadedMetadata(e){if(this._pendingSeekTime!=null){this._mediaElement.currentTime=this._pendingSeekTime;this._pendingSeekTime=null}}},{key:'_onvSeeking',value:function _onvSeeking(e){var target=this._mediaElement.currentTime;var buffered=this._mediaElement.buffered;if(this._requestSetTime){this._requestSetTime=false;return}if(target<1.0&&buffered.length>0){var videoBeginTime=buffered.start(0);if(videoBeginTime<1.0&&target<videoBeginTime||_browser2.default.safari){this._requestSetTime=true;this._mediaElement.currentTime=_browser2.default.safari?0.1:videoBeginTime;return}}if(this._isTimepointBuffered(target)){if(this._alwaysSeekKeyframe){var idr=this._msectl.getNearestKeyframe(Math.floor(target*1000));if(idr!=null){this._requestSetTime=true;this._mediaElement.currentTime=idr.dts/1000}}if(this._progressChecker!=null){this._checkProgressAndResume()}return}this._seekpointRecord={seekPoint:target,recordTime:this._now()};window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this),50)}},{key:'_onvCanPlay',value:function _onvCanPlay(e){this._receivedCanPlay=true;this._mediaElement.removeEventListener('canplay',this.e.onvCanPlay)}},{key:'_onvStalled',value:function _onvStalled(e){this._checkAndResumeStuckPlayback(true)}},{key:'_onvProgress',value:function _onvProgress(e){this._checkAndResumeStuckPlayback()}},{key:'type',get:function get(){return this._type}},{key:'buffered',get:function get(){return this._mediaElement.buffered}},{key:'duration',get:function get(){return this._mediaElement.duration}},{key:'volume',get:function get(){return this._mediaElement.volume},set:function set(value){this._mediaElement.volume=value}},{key:'muted',get:function get(){return this._mediaElement.muted},set:function set(muted){this._mediaElement.muted=muted}},{key:'currentTime',get:function get(){if(this._mediaElement){return this._mediaElement.currentTime}return 0},set:function set(seconds){if(this._mediaElement){this._internalSeek(seconds)}else{this._pendingSeekTime=seconds}}},{key:'mediaInfo',get:function get(){return Object.assign({},this._mediaInfo)}},{key:'statisticsInfo',get:function get(){if(this._statisticsInfo==null){this._statisticsInfo={}}this._statisticsInfo=this._fillStatisticsInfo(this._statisticsInfo);return Object.assign({},this._statisticsInfo)}}]);return FlvPlayer}();exports.default=FlvPlayer},{"../config.js":5,"../core/mse-controller.js":9,"../core/mse-events.js":10,"../core/transmuxer.js":11,"../core/transmuxing-events.js":13,"../utils/browser.js":39,"../utils/exception.js":40,"../utils/logger.js":41,"./player-errors.js":34,"./player-events.js":35,"events":2}],33:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _events=_dereq_('events');var _events2=_interopRequireDefault(_events);var _playerEvents=_dereq_('./player-events.js');var _playerEvents2=_interopRequireDefault(_playerEvents);var _config=_dereq_('../config.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var NativePlayer=function(){function NativePlayer(mediaDataSource,config){_classCallCheck(this,NativePlayer);this.TAG='NativePlayer';this._type='NativePlayer';this._emitter=new _events2.default();this._config=(0,_config.createDefaultConfig)();if((typeof config==='undefined'?'undefined':_typeof(config))==='object'){Object.assign(this._config,config)}if(mediaDataSource.type.toLowerCase()==='flv'){throw new _exception.InvalidArgumentException('NativePlayer does\'t support flv MediaDataSource input!')}if(mediaDataSource.hasOwnProperty('segments')){throw new _exception.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}_createClass(NativePlayer,[{key:'destroy',value:function destroy(){if(this._mediaElement){this.unload();this.detachMediaElement()}this.e=null;this._mediaDataSource=null;this._emitter.removeAllListeners();this._emitter=null}},{key:'on',value:function on(event,listener){var _this=this;if(event===_playerEvents2.default.MEDIA_INFO){if(this._mediaElement!=null&&this._mediaElement.readyState!==0){Promise.resolve().then(function(){_this._emitter.emit(_playerEvents2.default.MEDIA_INFO,_this.mediaInfo)})}}else if(event===_playerEvents2.default.STATISTICS_INFO){if(this._mediaElement!=null&&this._mediaElement.readyState!==0){Promise.resolve().then(function(){_this._emitter.emit(_playerEvents2.default.STATISTICS_INFO,_this.statisticsInfo)})}}this._emitter.addListener(event,listener)}},{key:'off',value:function off(event,listener){this._emitter.removeListener(event,listener)}},{key:'attachMediaElement',value:function attachMediaElement(mediaElement){this._mediaElement=mediaElement;mediaElement.addEventListener('loadedmetadata',this.e.onvLoadedMetadata);if(this._pendingSeekTime!=null){try{mediaElement.currentTime=this._pendingSeekTime;this._pendingSeekTime=null}catch(e){}}}},{key:'detachMediaElement',value:function detachMediaElement(){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}}},{key:'load',value:function load(){if(!this._mediaElement){throw new _exception.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)}},{key:'unload',value:function unload(){if(this._mediaElement){this._mediaElement.src='';this._mediaElement.removeAttribute('src')}if(this._statisticsReporter!=null){window.clearInterval(this._statisticsReporter);this._statisticsReporter=null}}},{key:'play',value:function play(){return this._mediaElement.play()}},{key:'pause',value:function pause(){this._mediaElement.pause()}},{key:'_onvLoadedMetadata',value:function _onvLoadedMetadata(e){if(this._pendingSeekTime!=null){this._mediaElement.currentTime=this._pendingSeekTime;this._pendingSeekTime=null}this._emitter.emit(_playerEvents2.default.MEDIA_INFO,this.mediaInfo)}},{key:'_reportStatisticsInfo',value:function _reportStatisticsInfo(){this._emitter.emit(_playerEvents2.default.STATISTICS_INFO,this.statisticsInfo)}},{key:'type',get:function get(){return this._type}},{key:'buffered',get:function get(){return this._mediaElement.buffered}},{key:'duration',get:function get(){return this._mediaElement.duration}},{key:'volume',get:function get(){return this._mediaElement.volume},set:function set(value){this._mediaElement.volume=value}},{key:'muted',get:function get(){return this._mediaElement.muted},set:function set(muted){this._mediaElement.muted=muted}},{key:'currentTime',get:function get(){if(this._mediaElement){return this._mediaElement.currentTime}return 0},set:function set(seconds){if(this._mediaElement){this._mediaElement.currentTime=seconds}else{this._pendingSeekTime=seconds}}},{key:'mediaInfo',get:function get(){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*1000);if(this._mediaElement instanceof HTMLVideoElement){info.width=this._mediaElement.videoWidth;info.height=this._mediaElement.videoHeight}}return info}},{key:'statisticsInfo',get:function get(){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!=undefined){decoded=this._mediaElement.webkitDecodedFrameCount;dropped=this._mediaElement.webkitDroppedFrameCount}else{hasQualityInfo=false}if(hasQualityInfo){info.decodedFrames=decoded;info.droppedFrames=dropped}return info}}]);return NativePlayer}();exports.default=NativePlayer},{"../config.js":5,"../utils/exception.js":40,"./player-events.js":35,"events":2}],34:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.ErrorDetails=exports.ErrorTypes=undefined;var _loader=_dereq_('../io/loader.js');var _demuxErrors=_dereq_('../demux/demux-errors.js');var _demuxErrors2=_interopRequireDefault(_demuxErrors);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var ErrorTypes=exports.ErrorTypes={NETWORK_ERROR:'NetworkError',MEDIA_ERROR:'MediaError',OTHER_ERROR:'OtherError'};var ErrorDetails=exports.ErrorDetails={NETWORK_EXCEPTION:_loader.LoaderErrors.EXCEPTION,NETWORK_STATUS_CODE_INVALID:_loader.LoaderErrors.HTTP_STATUS_CODE_INVALID,NETWORK_TIMEOUT:_loader.LoaderErrors.CONNECTING_TIMEOUT,NETWORK_UNRECOVERABLE_EARLY_EOF:_loader.LoaderErrors.UNRECOVERABLE_EARLY_EOF,MEDIA_MSE_ERROR:'MediaMSEError',MEDIA_FORMAT_ERROR:_demuxErrors2.default.FORMAT_ERROR,MEDIA_FORMAT_UNSUPPORTED:_demuxErrors2.default.FORMAT_UNSUPPORTED,MEDIA_CODEC_UNSUPPORTED:_demuxErrors2.default.CODEC_UNSUPPORTED}},{"../demux/demux-errors.js":16,"../io/loader.js":24}],35:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var PlayerEvents={ERROR:'error',LOADING_COMPLETE:'loading_complete',RECOVERED_EARLY_EOF:'recovered_early_eof',MEDIA_INFO:'media_info',STATISTICS_INFO:'statistics_info'};exports.default=PlayerEvents},{}],36:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var AAC=function(){function AAC(){_classCallCheck(this,AAC)}_createClass(AAC,null,[{key:'getSilentFrame',value:function getSilentFrame(codec,channelCount){if(codec==='mp4a.40.2'){if(channelCount===1){return new Uint8Array([0x00,0xc8,0x00,0x80,0x23,0x80])}else if(channelCount===2){return new Uint8Array([0x21,0x00,0x49,0x90,0x02,0x19,0x00,0x23,0x80])}else if(channelCount===3){return new Uint8Array([0x00,0xc8,0x00,0x80,0x20,0x84,0x01,0x26,0x40,0x08,0x64,0x00,0x8e])}else if(channelCount===4){return new Uint8Array([0x00,0xc8,0x00,0x80,0x20,0x84,0x01,0x26,0x40,0x08,0x64,0x00,0x80,0x2c,0x80,0x08,0x02,0x38])}else if(channelCount===5){return new Uint8Array([0x00,0xc8,0x00,0x80,0x20,0x84,0x01,0x26,0x40,0x08,0x64,0x00,0x82,0x30,0x04,0x99,0x00,0x21,0x90,0x02,0x38])}else if(channelCount===6){return new Uint8Array([0x00,0xc8,0x00,0x80,0x20,0x84,0x01,0x26,0x40,0x08,0x64,0x00,0x82,0x30,0x04,0x99,0x00,0x21,0x90,0x02,0x00,0xb2,0x00,0x20,0x08,0xe0])}}else{if(channelCount===1){return new Uint8Array([0x1,0x40,0x22,0x80,0xa3,0x4e,0xe6,0x80,0xba,0x8,0x0,0x0,0x0,0x1c,0x6,0xf1,0xc1,0xa,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5e])}else if(channelCount===2){return new Uint8Array([0x1,0x40,0x22,0x80,0xa3,0x5e,0xe6,0x80,0xba,0x8,0x0,0x0,0x0,0x0,0x95,0x0,0x6,0xf1,0xa1,0xa,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5e])}else if(channelCount===3){return new Uint8Array([0x1,0x40,0x22,0x80,0xa3,0x5e,0xe6,0x80,0xba,0x8,0x0,0x0,0x0,0x0,0x95,0x0,0x6,0xf1,0xa1,0xa,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5e])}}return null}}]);return AAC}();exports.default=AAC},{}],37:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var MP4=function(){function MP4(){_classCallCheck(this,MP4)}_createClass(MP4,null,[{key:'init',value:function init(){MP4.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 in MP4.types){if(MP4.types.hasOwnProperty(name)){MP4.types[name]=[name.charCodeAt(0),name.charCodeAt(1),name.charCodeAt(2),name.charCodeAt(3)]}}var constants=MP4.constants={};constants.FTYP=new Uint8Array([0x69,0x73,0x6F,0x6D,0x0,0x0,0x0,0x1,0x69,0x73,0x6F,0x6D,0x61,0x76,0x63,0x31]);constants.STSD_PREFIX=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01]);constants.STTS=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]);constants.STSC=constants.STCO=constants.STTS;constants.STSZ=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]);constants.HDLR_VIDEO=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x69,0x64,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x69,0x64,0x65,0x6F,0x48,0x61,0x6E,0x64,0x6C,0x65,0x72,0x00]);constants.HDLR_AUDIO=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x6F,0x75,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x53,0x6F,0x75,0x6E,0x64,0x48,0x61,0x6E,0x64,0x6C,0x65,0x72,0x00]);constants.DREF=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0C,0x75,0x72,0x6C,0x20,0x00,0x00,0x00,0x01]);constants.SMHD=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]);constants.VMHD=new Uint8Array([0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00])}},{key:'box',value:function box(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+=1){size+=datas[i].byteLength}result=new Uint8Array(size);result[0]=size>>>24&0xFF;result[1]=size>>>16&0xFF;result[2]=size>>>8&0xFF;result[3]=size&0xFF;result.set(type,4);var offset=8;for(var _i=0;_i<arrayCount;_i+=1){result.set(datas[_i],offset);offset+=datas[_i].byteLength}return result}},{key:'generateInitSegment',value:function generateInitSegment(meta){var ftyp=MP4.box(MP4.types.ftyp,MP4.constants.FTYP);var moov=MP4.moov(meta);var result=new Uint8Array(ftyp.byteLength+moov.byteLength);result.set(ftyp,0);result.set(moov,ftyp.byteLength);return result}},{key:'moov',value:function moov(meta){var mvhd=MP4.mvhd(meta.timescale,meta.duration);var trak=MP4.trak(meta);var mvex=MP4.mvex(meta);return MP4.box(MP4.types.moov,mvhd,trak,mvex)}},{key:'mvhd',value:function mvhd(timescale,duration){return MP4.box(MP4.types.mvhd,new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,timescale>>>24&0xFF,timescale>>>16&0xFF,timescale>>>8&0xFF,timescale&0xFF,duration>>>24&0xFF,duration>>>16&0xFF,duration>>>8&0xFF,duration&0xFF,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF]))}},{key:'trak',value:function trak(meta){return MP4.box(MP4.types.trak,MP4.tkhd(meta),MP4.mdia(meta))}},{key:'tkhd',value:function tkhd(meta){var trackId=meta.id,duration=meta.duration;var width=meta.presentWidth,height=meta.presentHeight;return MP4.box(MP4.types.tkhd,new Uint8Array([0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,trackId>>>24&0xFF,trackId>>>16&0xFF,trackId>>>8&0xFF,trackId&0xFF,0x00,0x00,0x00,0x00,duration>>>24&0xFF,duration>>>16&0xFF,duration>>>8&0xFF,duration&0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,width>>>8&0xFF,width&0xFF,0x00,0x00,height>>>8&0xFF,height&0xFF,0x00,0x00]))}},{key:'mdia',value:function mdia(meta){return MP4.box(MP4.types.mdia,MP4.mdhd(meta),MP4.hdlr(meta),MP4.minf(meta))}},{key:'mdhd',value:function mdhd(meta){var timescale=meta.timescale;var duration=meta.duration;return MP4.box(MP4.types.mdhd,new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,timescale>>>24&0xFF,timescale>>>16&0xFF,timescale>>>8&0xFF,timescale&0xFF,duration>>>24&0xFF,duration>>>16&0xFF,duration>>>8&0xFF,duration&0xFF,0x55,0xC4,0x00,0x00]))}},{key:'hdlr',value:function hdlr(meta){var data=null;if(meta.type==='audio'){data=MP4.constants.HDLR_AUDIO}else{data=MP4.constants.HDLR_VIDEO}return MP4.box(MP4.types.hdlr,data)}},{key:'minf',value:function minf(meta){var xmhd=null;if(meta.type==='audio'){xmhd=MP4.box(MP4.types.smhd,MP4.constants.SMHD)}else{xmhd=MP4.box(MP4.types.vmhd,MP4.constants.VMHD)}return MP4.box(MP4.types.minf,xmhd,MP4.dinf(),MP4.stbl(meta))}},{key:'dinf',value:function dinf(){var result=MP4.box(MP4.types.dinf,MP4.box(MP4.types.dref,MP4.constants.DREF));return result}},{key:'stbl',value:function stbl(meta){var result=MP4.box(MP4.types.stbl,MP4.stsd(meta),MP4.box(MP4.types.stts,MP4.constants.STTS),MP4.box(MP4.types.stsc,MP4.constants.STSC),MP4.box(MP4.types.stsz,MP4.constants.STSZ),MP4.box(MP4.types.stco,MP4.constants.STCO ));return result}},{key:'stsd',value:function stsd(meta){if(meta.type==='audio'){if(meta.codec==='mp3'){return MP4.box(MP4.types.stsd,MP4.constants.STSD_PREFIX,MP4.mp3(meta))}return MP4.box(MP4.types.stsd,MP4.constants.STSD_PREFIX,MP4.mp4a(meta))}else{return MP4.box(MP4.types.stsd,MP4.constants.STSD_PREFIX,MP4.avc1(meta))}}},{key:'mp3',value:function mp3(meta){var channelCount=meta.channelCount;var sampleRate=meta.audioSampleRate;var data=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,channelCount,0x00,0x10,0x00,0x00,0x00,0x00,sampleRate>>>8&0xFF,sampleRate&0xFF,0x00,0x00]);return MP4.box(MP4.types['.mp3'],data)}},{key:'mp4a',value:function mp4a(meta){var channelCount=meta.channelCount;var sampleRate=meta.audioSampleRate;var data=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,channelCount,0x00,0x10,0x00,0x00,0x00,0x00,sampleRate>>>8&0xFF,sampleRate&0xFF,0x00,0x00]);return MP4.box(MP4.types.mp4a,data,MP4.esds(meta))}},{key:'esds',value:function esds(meta){var config=meta.config||[];var configSize=config.length;var data=new Uint8Array([0x00,0x00,0x00,0x00,0x03,0x17+configSize,0x00,0x01,0x00,0x04,0x0F+configSize,0x40,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05].concat([configSize]).concat(config).concat([0x06,0x01,0x02]));return MP4.box(MP4.types.esds,data)}},{key:'avc1',value:function avc1(meta){var avcc=meta.avcc;var width=meta.codecWidth,height=meta.codecHeight;var data=new Uint8Array([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,width>>>8&0xFF,width&0xFF,height>>>8&0xFF,height&0xFF,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0A,0x78,0x71,0x71,0x2F,0x66,0x6C,0x76,0x2E,0x6A,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xFF,0xFF]);return MP4.box(MP4.types.avc1,data,MP4.box(MP4.types.avcC,avcc))}},{key:'mvex',value:function mvex(meta){return MP4.box(MP4.types.mvex,MP4.trex(meta))}},{key:'trex',value:function trex(meta){var trackId=meta.id;var data=new Uint8Array([0x00,0x00,0x00,0x00,trackId>>>24&0xFF,trackId>>>16&0xFF,trackId>>>8&0xFF,trackId&0xFF,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01]);return MP4.box(MP4.types.trex,data)}},{key:'moof',value:function moof(track,baseMediaDecodeTime){return MP4.box(MP4.types.moof,MP4.mfhd(track.sequenceNumber),MP4.traf(track,baseMediaDecodeTime))}},{key:'mfhd',value:function mfhd(sequenceNumber){var data=new Uint8Array([0x00,0x00,0x00,0x00,sequenceNumber>>>24&0xFF,sequenceNumber>>>16&0xFF,sequenceNumber>>>8&0xFF,sequenceNumber&0xFF]);return MP4.box(MP4.types.mfhd,data)}},{key:'traf',value:function traf(track,baseMediaDecodeTime){var trackId=track.id;var tfhd=MP4.box(MP4.types.tfhd,new Uint8Array([0x00,0x00,0x00,0x00,trackId>>>24&0xFF,trackId>>>16&0xFF,trackId>>>8&0xFF,trackId&0xFF]));var tfdt=MP4.box(MP4.types.tfdt,new Uint8Array([0x00,0x00,0x00,0x00,baseMediaDecodeTime>>>24&0xFF,baseMediaDecodeTime>>>16&0xFF,baseMediaDecodeTime>>>8&0xFF,baseMediaDecodeTime&0xFF]));var sdtp=MP4.sdtp(track);var trun=MP4.trun(track,sdtp.byteLength+16+16+8+16+8+8);return MP4.box(MP4.types.traf,tfhd,tfdt,trun,sdtp)}},{key:'sdtp',value:function sdtp(track){var samples=track.samples||[];var sampleCount=samples.length;var data=new Uint8Array(4+sampleCount);for(var i=0;i<sampleCount;i+=1){var flags=samples[i].flags;data[i+4]=flags.isLeading<<6|flags.dependsOn<<4|flags.isDependedOn<<2|flags.hasRedundancy;}return MP4.box(MP4.types.sdtp,data)}},{key:'trun',value:function trun(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([0x00,0x00,0x0F,0x01,sampleCount>>>24&0xFF,sampleCount>>>16&0xFF,sampleCount>>>8&0xFF,sampleCount&0xFF,offset>>>24&0xFF,offset>>>16&0xFF,offset>>>8&0xFF,offset&0xFF],0);for(var i=0;i<sampleCount;i+=1){var duration=samples[i].duration;var size=samples[i].size;var flags=samples[i].flags;var cts=samples[i].cts;data.set([duration>>>24&0xFF,duration>>>16&0xFF,duration>>>8&0xFF,duration&0xFF,size>>>24&0xFF,size>>>16&0xFF,size>>>8&0xFF,size&0xFF,flags.isLeading<<2|flags.dependsOn,flags.isDependedOn<<6|flags.hasRedundancy<<4|flags.isNonSync,0x00,0x00,cts>>>24&0xFF,cts>>>16&0xFF,cts>>>8&0xFF,cts&0xFF],12+16*i)}return MP4.box(MP4.types.trun,data)}},{key:'mdat',value:function mdat(data){return MP4.box(MP4.types.mdat,data)}}]);return MP4}();MP4.init();exports.default=MP4},{}],38:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _logger=_dereq_('../utils/logger.js');var _logger2=_interopRequireDefault(_logger);var _mp4Generator=_dereq_('./mp4-generator.js');var _mp4Generator2=_interopRequireDefault(_mp4Generator);var _aacSilent=_dereq_('./aac-silent.js');var _aacSilent2=_interopRequireDefault(_aacSilent);var _browser=_dereq_('../utils/browser.js');var _browser2=_interopRequireDefault(_browser);var _mediaSegmentInfo=_dereq_('../core/media-segment-info.js');var _exception=_dereq_('../utils/exception.js');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var MP4Remuxer=function(){function MP4Remuxer(config){_classCallCheck(this,MP4Remuxer);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=undefined;this._videoNextDts=undefined;this._audioStashedLastSample=null;this._videoStashedLastSample=null;this._audioMeta=null;this._videoMeta=null;this._audioSegmentInfoList=new _mediaSegmentInfo.MediaSegmentInfoList('audio');this._videoSegmentInfoList=new _mediaSegmentInfo.MediaSegmentInfoList('video');this._onInitSegment=null;this._onMediaSegment=null;this._forceFirstIDR=_browser2.default.chrome&&(_browser2.default.version.major<50||_browser2.default.version.major===50&&_browser2.default.version.build<2661)?true:false;this._fillSilentAfterSeek=_browser2.default.msedge||_browser2.default.msie;this._mp3UseMpegAudio=!_browser2.default.firefox;this._fillAudioTimestampGap=this._config.fixAudioTimestampGap}_createClass(MP4Remuxer,[{key:'destroy',value:function destroy(){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}},{key:'bindDataSource',value:function bindDataSource(producer){producer.onDataAvailable=this.remux.bind(this);producer.onTrackMetadata=this._onTrackMetadataReceived.bind(this);return this}},{key:'insertDiscontinuity',value:function insertDiscontinuity(){this._audioNextDts=this._videoNextDts=undefined}},{key:'seek',value:function seek(originalDts){this._audioStashedLastSample=null;this._videoStashedLastSample=null;this._videoSegmentInfoList.clear();this._audioSegmentInfoList.clear()}},{key:'remux',value:function remux(audioTrack,videoTrack){if(!this._onMediaSegment){throw new _exception.IllegalStateException('MP4Remuxer: onMediaSegment callback must be specificed!')}if(!this._dtsBaseInited){this._calculateDtsBase(audioTrack,videoTrack)}this._remuxVideo(videoTrack);this._remuxAudio(audioTrack)}},{key:'_onTrackMetadataReceived',value:function _onTrackMetadataReceived(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=_mp4Generator2.default.generateInitSegment(metadata)}}else if(type==='video'){this._videoMeta=metadata;metabox=_mp4Generator2.default.generateInitSegment(metadata)}else{return}if(!this._onInitSegment){throw new _exception.IllegalStateException('MP4Remuxer: onInitSegment callback must be specified!')}this._onInitSegment(type,{type:type,data:metabox.buffer,codec:codec,container:type+'/'+container,mediaDuration:metadata.duration })}},{key:'_calculateDtsBase',value:function _calculateDtsBase(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}},{key:'flushStashedSamples',value:function flushStashedSamples(){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)}},{key:'_remuxAudio',value:function _remuxAudio(audioTrack,force){if(this._audioMeta==null){return}var track=audioTrack;var samples=track.samples;var dtsCorrection=undefined;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===undefined;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=this._audioSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts);if(_lastSample!=null){var distance=firstSampleOriginalDts-(_lastSample.originalDts+_lastSample.duration);if(distance<=3){distance=0}var expectedDts=_lastSample.dts+_lastSample.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=_aacSilent2.default.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);if(silentUnit){var dts=videoSegment.beginDts;var silentFrameDuration=firstSampleDts-videoSegment.beginDts;_logger2.default.v(this.TAG,'InsertPrefixSilentAudio: dts: '+dts+', duration: '+silentFrameDuration);samples.unshift({unit:silentUnit,dts:dts,pts:dts});mdatBytes+=silentUnit.byteLength}}else{insertPrefixSilentFrame=false}}var mp4Samples=[];for(var i=0;i<samples.length;i+=1){var _sample=samples[i];var unit=_sample.unit;var originalDts=_sample.dts-this._dtsBase;var _dts=originalDts-dtsCorrection;if(firstDts===-1){firstDts=_dts}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(refSampleDuration)}}var needFillSilentFrames=false;var silentFrames=null;if(sampleDuration>refSampleDuration*1.5&&this._audioMeta.codec!=='mp3'&&this._fillAudioTimestampGap&&!_browser2.default.safari){needFillSilentFrames=true;var delta=Math.abs(sampleDuration-refSampleDuration);var frameCount=Math.ceil(delta/refSampleDuration);var currentDts=_dts+refSampleDuration;_logger2.default.w(this.TAG,'Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\n'+('dts: '+(_dts+sampleDuration)+' ms, expected: '+(_dts+Math.round(refSampleDuration))+' ms, ')+('delta: '+Math.round(delta)+' ms, generate: '+frameCount+' frames'));var _silentUnit=_aacSilent2.default.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);if(_silentUnit==null){_logger2.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+=1){var intDts=Math.round(currentDts);if(silentFrames.length>0){var previousFrame=silentFrames[silentFrames.length-1];previousFrame.duration=intDts-previousFrame.dts}var frame={dts:intDts,pts:intDts,cts:0,unit:_silentUnit,size:_silentUnit.byteLength,duration:0,originalDts:originalDts,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}};silentFrames.push(frame);mdatBytes+=unit.byteLength;currentDts+=refSampleDuration}var lastFrame=silentFrames[silentFrames.length-1];lastFrame.duration=_dts+sampleDuration-lastFrame.dts;sampleDuration=Math.round(refSampleDuration)}mp4Samples.push({dts:_dts,pts:_dts,cts:0,unit:_sample.unit,size:_sample.unit.byteLength,duration:sampleDuration,originalDts:originalDts,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}});if(needFillSilentFrames){mp4Samples.push.apply(mp4Samples,silentFrames)}}if(mpegRawTrack){mdatbox=new Uint8Array(mdatBytes)}else{mdatbox=new Uint8Array(mdatBytes);mdatbox[0]=mdatBytes>>>24&0xFF;mdatbox[1]=mdatBytes>>>16&0xFF;mdatbox[2]=mdatBytes>>>8&0xFF;mdatbox[3]=mdatBytes&0xFF;mdatbox.set(_mp4Generator2.default.types.mdat,4)}for(var _i=0;_i<mp4Samples.length;_i+=1){var _unit=mp4Samples[_i].unit;mdatbox.set(_unit,offset);offset+=_unit.byteLength}var latest=mp4Samples[mp4Samples.length-1];lastDts=latest.dts+latest.duration;this._audioNextDts=lastDts;var info=new _mediaSegmentInfo.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 _mediaSegmentInfo.SampleInfo(mp4Samples[0].dts,mp4Samples[0].pts,mp4Samples[0].duration,mp4Samples[0].originalDts,false);info.lastSample=new _mediaSegmentInfo.SampleInfo(latest.dts,latest.pts,latest.duration,latest.originalDts,false);if(!this._isLive){this._audioSegmentInfoList.append(info)}track.samples=mp4Samples;track.sequenceNumber+=1;var moofbox=null;if(mpegRawTrack){moofbox=new Uint8Array()}else{moofbox=_mp4Generator2.default.moof(track,firstDts)}track.samples=[];track.length=0;var segment={type:'audio',data:this._mergeBoxes(moofbox,mdatbox).buffer,sampleCount:mp4Samples.length,info:info};if(mpegRawTrack&&firstSegmentAfterSeek){segment.timestampOffset=firstDts}this._onMediaSegment('audio',segment)}},{key:'_remuxVideo',value:function _remuxVideo(videoTrack,force){if(this._videoMeta==null){return}var track=videoTrack;var samples=track.samples;var dtsCorrection=undefined;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 _lastSample2=this._videoSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts);if(_lastSample2!=null){var distance=firstSampleOriginalDts-(_lastSample2.originalDts+_lastSample2.duration);if(distance<=3){distance=0}var expectedDts=_lastSample2.dts+_lastSample2.duration+distance;dtsCorrection=firstSampleOriginalDts-expectedDts}else{dtsCorrection=0}}}var info=new _mediaSegmentInfo.MediaSegmentInfo();var mp4Samples=[];for(var i=0;i<samples.length;i+=1){var _sample2=samples[i];var originalDts=_sample2.dts-this._dtsBase;var isKeyframe=_sample2.isKeyframe;var dts=originalDts-dtsCorrection;var cts=_sample2.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 _nextDts2=lastSample.dts-this._dtsBase-dtsCorrection;sampleDuration=_nextDts2-dts}else if(mp4Samples.length>=1){sampleDuration=mp4Samples[mp4Samples.length-1].duration}else{sampleDuration=Math.floor(this._videoMeta.refSampleDuration)}}if(isKeyframe){var syncPoint=new _mediaSegmentInfo.SampleInfo(dts,pts,sampleDuration,_sample2.dts,true);syncPoint.fileposition=_sample2.fileposition;info.appendSyncPoint(syncPoint)}mp4Samples.push({dts:dts,pts:pts,cts:cts,units:_sample2.units,size:_sample2.length,isKeyframe:isKeyframe,duration:sampleDuration,originalDts: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&0xFF;mdatbox[1]=mdatBytes>>>16&0xFF;mdatbox[2]=mdatBytes>>>8&0xFF;mdatbox[3]=mdatBytes&0xFF;mdatbox.set(_mp4Generator2.default.types.mdat,4);for(var _i2=0;_i2<mp4Samples.length;_i2+=1){var units=mp4Samples[_i2].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 _mediaSegmentInfo.SampleInfo(mp4Samples[0].dts,mp4Samples[0].pts,mp4Samples[0].duration,mp4Samples[0].originalDts,mp4Samples[0].isKeyframe);info.lastSample=new _mediaSegmentInfo.SampleInfo(latest.dts,latest.pts,latest.duration,latest.originalDts,latest.isKeyframe);if(!this._isLive){this._videoSegmentInfoList.append(info)}track.samples=mp4Samples;track.sequenceNumber+=1;if(this._forceFirstIDR){var flags=mp4Samples[0].flags;flags.dependsOn=2;flags.isNonSync=0}var moofbox=_mp4Generator2.default.moof(track,firstDts);track.samples=[];track.length=0;this._onMediaSegment('video',{type:'video',data:this._mergeBoxes(moofbox,mdatbox).buffer,sampleCount:mp4Samples.length,info:info})}},{key:'_mergeBoxes',value:function _mergeBoxes(moof,mdat){var result=new Uint8Array(moof.byteLength+mdat.byteLength);result.set(moof,0);result.set(mdat,moof.byteLength);return result}},{key:'onInitSegment',get:function get(){return this._onInitSegment},set:function set(callback){this._onInitSegment=callback}},{key:'onMediaSegment',get:function get(){return this._onMediaSegment},set:function set(callback){this._onMediaSegment=callback}}]);return MP4Remuxer}();exports.default=MP4Remuxer},{"../core/media-segment-info.js":8,"../utils/browser.js":39,"../utils/exception.js":40,"../utils/logger.js":41,"./aac-silent.js":36,"./mp4-generator.js":37}],39:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});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();exports.default=Browser},{}],40:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass){Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var RuntimeException=exports.RuntimeException=function(){function RuntimeException(message){_classCallCheck(this,RuntimeException);this._message=message}_createClass(RuntimeException,[{key:'toString',value:function toString(){return this.name+': '+this.message}},{key:'name',get:function get(){return 'RuntimeException'}},{key:'message',get:function get(){return this._message}}]);return RuntimeException}();var IllegalStateException=exports.IllegalStateException=function(_RuntimeException){_inherits(IllegalStateException,_RuntimeException);function IllegalStateException(message){_classCallCheck(this,IllegalStateException);return _possibleConstructorReturn(this,(IllegalStateException.__proto__||Object.getPrototypeOf(IllegalStateException)).call(this,message))}_createClass(IllegalStateException,[{key:'name',get:function get(){return 'IllegalStateException'}}]);return IllegalStateException}(RuntimeException);var InvalidArgumentException=exports.InvalidArgumentException=function(_RuntimeException2){_inherits(InvalidArgumentException,_RuntimeException2);function InvalidArgumentException(message){_classCallCheck(this,InvalidArgumentException);return _possibleConstructorReturn(this,(InvalidArgumentException.__proto__||Object.getPrototypeOf(InvalidArgumentException)).call(this,message))}_createClass(InvalidArgumentException,[{key:'name',get:function get(){return 'InvalidArgumentException'}}]);return InvalidArgumentException}(RuntimeException);var NotImplementedException=exports.NotImplementedException=function(_RuntimeException3){_inherits(NotImplementedException,_RuntimeException3);function NotImplementedException(message){_classCallCheck(this,NotImplementedException);return _possibleConstructorReturn(this,(NotImplementedException.__proto__||Object.getPrototypeOf(NotImplementedException)).call(this,message))}_createClass(NotImplementedException,[{key:'name',get:function get(){return 'NotImplementedException'}}]);return NotImplementedException}(RuntimeException)},{}],41:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _events=_dereq_('events');var _events2=_interopRequireDefault(_events);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var Log=function(){function Log(){_classCallCheck(this,Log)}_createClass(Log,null,[{key:'e',value:function e(tag,msg){if(!tag||Log.FORCE_GLOBAL_TAG){tag=Log.GLOBAL_TAG}var str='['+tag+'] > '+msg;if(Log.ENABLE_CALLBACK){Log.emitter.emit('log','error',str)}if(!Log.ENABLE_ERROR){return}if(console.error){console.error(str)}else if(console.warn){console.warn(str)}else{console.log(str)}}},{key:'i',value:function i(tag,msg){if(!tag||Log.FORCE_GLOBAL_TAG){tag=Log.GLOBAL_TAG}var str='['+tag+'] > '+msg;if(Log.ENABLE_CALLBACK){Log.emitter.emit('log','info',str)}if(!Log.ENABLE_INFO){return}if(console.info){console.info(str)}else{console.log(str)}}},{key:'w',value:function w(tag,msg){if(!tag||Log.FORCE_GLOBAL_TAG){tag=Log.GLOBAL_TAG}var str='['+tag+'] > '+msg;if(Log.ENABLE_CALLBACK){Log.emitter.emit('log','warn',str)}if(!Log.ENABLE_WARN){return}if(console.warn){console.warn(str)}else{console.log(str)}}},{key:'d',value:function d(tag,msg){if(!tag||Log.FORCE_GLOBAL_TAG){tag=Log.GLOBAL_TAG}var str='['+tag+'] > '+msg;if(Log.ENABLE_CALLBACK){Log.emitter.emit('log','debug',str)}if(!Log.ENABLE_DEBUG){return}if(console.debug){console.debug(str)}else{console.log(str)}}},{key:'v',value:function v(tag,msg){if(!tag||Log.FORCE_GLOBAL_TAG){tag=Log.GLOBAL_TAG}var str='['+tag+'] > '+msg;if(Log.ENABLE_CALLBACK){Log.emitter.emit('log','verbose',str)}if(!Log.ENABLE_VERBOSE){return}console.log(str)}}]);return Log}();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 _events2.default();exports.default=Log},{"events":2}],42:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();var _events=_dereq_('events');var _events2=_interopRequireDefault(_events);var _logger=_dereq_('./logger.js');var _logger2=_interopRequireDefault(_logger);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var LoggingControl=function(){function LoggingControl(){_classCallCheck(this,LoggingControl)}_createClass(LoggingControl,null,[{key:'getConfig',value:function getConfig(){return{globalTag:_logger2.default.GLOBAL_TAG,forceGlobalTag:_logger2.default.FORCE_GLOBAL_TAG,enableVerbose:_logger2.default.ENABLE_VERBOSE,enableDebug:_logger2.default.ENABLE_DEBUG,enableInfo:_logger2.default.ENABLE_INFO,enableWarn:_logger2.default.ENABLE_WARN,enableError:_logger2.default.ENABLE_ERROR,enableCallback:_logger2.default.ENABLE_CALLBACK}}},{key:'applyConfig',value:function applyConfig(config){_logger2.default.GLOBAL_TAG=config.globalTag;_logger2.default.FORCE_GLOBAL_TAG=config.forceGlobalTag;_logger2.default.ENABLE_VERBOSE=config.enableVerbose;_logger2.default.ENABLE_DEBUG=config.enableDebug;_logger2.default.ENABLE_INFO=config.enableInfo;_logger2.default.ENABLE_WARN=config.enableWarn;_logger2.default.ENABLE_ERROR=config.enableError;_logger2.default.ENABLE_CALLBACK=config.enableCallback}},{key:'_notifyChange',value:function _notifyChange(){var emitter=LoggingControl.emitter;if(emitter.listenerCount('change')>0){var config=LoggingControl.getConfig();emitter.emit('change',config)}}},{key:'registerListener',value:function registerListener(listener){LoggingControl.emitter.addListener('change',listener)}},{key:'removeListener',value:function removeListener(listener){LoggingControl.emitter.removeListener('change',listener)}},{key:'addLogListener',value:function addLogListener(listener){_logger2.default.emitter.addListener('log',listener);if(_logger2.default.emitter.listenerCount('log')>0){_logger2.default.ENABLE_CALLBACK=true;LoggingControl._notifyChange()}}},{key:'removeLogListener',value:function removeLogListener(listener){_logger2.default.emitter.removeListener('log',listener);if(_logger2.default.emitter.listenerCount('log')===0){_logger2.default.ENABLE_CALLBACK=false;LoggingControl._notifyChange()}}},{key:'forceGlobalTag',get:function get(){return _logger2.default.FORCE_GLOBAL_TAG},set:function set(enable){_logger2.default.FORCE_GLOBAL_TAG=enable;LoggingControl._notifyChange()}},{key:'globalTag',get:function get(){return _logger2.default.GLOBAL_TAG},set:function set(tag){_logger2.default.GLOBAL_TAG=tag;LoggingControl._notifyChange()}},{key:'enableAll',get:function get(){return _logger2.default.ENABLE_VERBOSE&&_logger2.default.ENABLE_DEBUG&&_logger2.default.ENABLE_INFO&&_logger2.default.ENABLE_WARN&&_logger2.default.ENABLE_ERROR},set:function set(enable){_logger2.default.ENABLE_VERBOSE=enable;_logger2.default.ENABLE_DEBUG=enable;_logger2.default.ENABLE_INFO=enable;_logger2.default.ENABLE_WARN=enable;_logger2.default.ENABLE_ERROR=enable;LoggingControl._notifyChange()}},{key:'enableDebug',get:function get(){return _logger2.default.ENABLE_DEBUG},set:function set(enable){_logger2.default.ENABLE_DEBUG=enable;LoggingControl._notifyChange()}},{key:'enableVerbose',get:function get(){return _logger2.default.ENABLE_VERBOSE},set:function set(enable){_logger2.default.ENABLE_VERBOSE=enable;LoggingControl._notifyChange()}},{key:'enableInfo',get:function get(){return _logger2.default.ENABLE_INFO},set:function set(enable){_logger2.default.ENABLE_INFO=enable;LoggingControl._notifyChange()}},{key:'enableWarn',get:function get(){return _logger2.default.ENABLE_WARN},set:function set(enable){_logger2.default.ENABLE_WARN=enable;LoggingControl._notifyChange()}},{key:'enableError',get:function get(){return _logger2.default.ENABLE_ERROR},set:function set(enable){_logger2.default.ENABLE_ERROR=enable;LoggingControl._notifyChange()}}]);return LoggingControl}();LoggingControl.emitter=new _events2.default();exports.default=LoggingControl},{"./logger.js":41,"events":2}],43:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i+=1){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor){descriptor.writable=true}Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps){defineProperties(Constructor.prototype,protoProps)}if(staticProps){defineProperties(Constructor,staticProps)}return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var Polyfill=function(){function Polyfill(){_classCallCheck(this,Polyfill)}_createClass(Polyfill,null,[{key:'install',value:function install(){Object.setPrototypeOf=Object.setPrototypeOf||function(obj,proto){obj.__proto__=proto;return obj};Object.assign=Object.assign||function(target){if(target===undefined||target===null){throw new TypeError('Cannot convert undefined or null to object')}var output=Object(target);for(var i=1;i<arguments.length;i+=1){var source=arguments[i];if(source!==undefined&&source!==null){for(var key in source){if(source.hasOwnProperty(key)){output[key]=source[key]}}}}return output};if(typeof self.Promise!=='function'){_dereq_('es6-promise').polyfill()}}}]);return Polyfill}();Polyfill.install();exports.default=Polyfill},{"es6-promise":1}],44:[function(_dereq_,module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});function checkContinuation(uint8array,start,checkLength){var array=uint8array;if(start+checkLength<array.length){while(checkLength--){if((array[start+=1]&0xC0)!==0x80){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]<0x80){out.push(String.fromCharCode(input[i]));i+=1;continue}else if(input[i]<0xC0){}else if(input[i]<0xE0){if(checkContinuation(input,i,1)){var ucs4=(input[i]&0x1F)<<6|input[i+1]&0x3F;if(ucs4>=0x80){out.push(String.fromCharCode(ucs4&0xFFFF));i+=2;continue}}}else if(input[i]<0xF0){if(checkContinuation(input,i,2)){var _ucs=(input[i]&0xF)<<12|(input[i+1]&0x3F)<<6|input[i+2]&0x3F;if(_ucs>=0x800&&(_ucs&0xF800)!==0xD800){out.push(String.fromCharCode(_ucs&0xFFFF));i+=3;continue}}}else if(input[i]<0xF8){if(checkContinuation(input,i,3)){var _ucs2=(input[i]&0x7)<<18|(input[i+1]&0x3F)<<12|(input[i+2]&0x3F)<<6|input[i+3]&0x3F;if(_ucs2>0x10000&&_ucs2<0x110000){_ucs2-=0x10000;out.push(String.fromCharCode(_ucs2>>>10|0xD800));out.push(String.fromCharCode(_ucs2&0x3FF|0xDC00));i+=4;continue}}}out.push(String.fromCharCode(0xFFFD));i+=1}return out.join('')}exports.default=decodeUTF8},{}]},{},[21])(21)}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/var/www/somewhere/index.php | |
<?php | |
$selected=""; | |
if(isset($_POST['video']) && file_exists("/var/www/somewhere/vod/".$_POST['video'].".flv")) { | |
$selected=$_POST['video']; | |
} | |
?> | |
<html> | |
<head> | |
<title>somewhere's VOD</title> | |
<style type="text/css"> | |
body, video { | |
background-color: black; | |
color: white; | |
} | |
</style> | |
</head> | |
<body> | |
<form method="POST"> | |
<table><tr> | |
<td> | |
<select name="video"> | |
<?php | |
foreach(glob("/var/www/somewhere/vod/*.flv") as $file) | |
{ | |
$nopath=str_replace("/var/www/somewhere/vod/","",$file); | |
$noext=str_replace(".flv","",$nopath); | |
?> <option value="<?=$noext?>"<?=($selected==$noext?" sel | |
} | |
?> | |
</select> | |
</td> | |
<td><input type="submit" value="Play Video" /></td> | |
</tr></table> | |
</form> | |
<?php | |
if($selected != "") { | |
?> | |
<script src="flv.min.js"></script> | |
<video id="vod" width="100%" height="95%" controls></video> | |
<script type="text/javascript"> | |
if (flvjs.isSupported()) { | |
var videoElement = document.getElementById('vod'); | |
var flvPlayer = flvjs.createPlayer({ | |
type: 'flv', | |
url: 'vod/<?=$selected?>.flv' | |
}); | |
flvPlayer.attachMediaElement(videoElement); | |
flvPlayer.load(); | |
} | |
</script> | |
<?php } ?> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/etc/nginx/nginx.conf | |
#[...] | |
#append me to the end | |
rtmp { | |
server { | |
listen 1935; | |
chunk_size 4096; | |
application live { | |
live on; | |
on_publish http://127.0.0.1/auth.php; | |
on_record_done http://127.0.0.1/rename.php; | |
push localhost:1934; | |
record all; | |
record_path /var/www/somewhere/vod; | |
record_unique on; | |
record_lock on; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/var/www/somewhere/rename.php | |
<?php | |
$old=$_POST['path']; | |
$new=str_replace("YOUR_STREAM_KEY-","",$old); | |
rename($old,$new); | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/etc/nginx/sites-available/somesite.conf | |
server { | |
listen 127.0.0.1:80; | |
root /var/www/somewhere; | |
index index.html index.htm index.php; | |
include fastcgi.conf; | |
location ~* \.php$ { | |
fastcgi_pass unix:/var/run/php-fpm/www.sock; | |
fastcgi_read_timeout 300; | |
} | |
location / { | |
disable_symlinks off; | |
allow all; | |
try_files $uri $uri/ /index.php$is_args$args; | |
} | |
} | |
server { | |
listen [::]:443 ssl; | |
listen 443 ssl; | |
ssl_certificate /etc/letsencrypt/live/somewhere.com/fullchain.pem; | |
ssl_certificate_key /etc/letsencrypt/live/somewhere.com/privkey.pem; | |
include /etc/letsencrypt/options-ssl-nginx.conf; | |
server_name vod.somewhere.com; | |
allow all; | |
index index.php; | |
root /var/www/somewhere; | |
index index.html index.htm index.php; | |
include fastcgi.conf; | |
location ~* \.php$ { | |
fastcgi_pass unix:/var/run/php-fpm/www.sock; | |
fastcgi_read_timeout 300; | |
} | |
location / { | |
disable_symlinks off; | |
allow all; | |
try_files $uri $uri/ /index.php$is_args$args; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment