define(["exports","../utils/events.js","../utils/logger.js","../../browser.js","./media-info.js","../demux/flv-demuxer.js","../remux/mp4-remuxer.js","../demux/demux-errors.js","../io/io-controller.js","./transmuxing-events.js"],function(_exports,_events,_logger,_browser,_mediaInfo,_flvDemuxer,_mp4Remuxer,_demuxErrors,_ioController,_transmuxingEvents){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var TransmuxingController=function(){function TransmuxingController(mediaDataSource,config){babelHelpers.classCallCheck(this,TransmuxingController),this.TAG="TransmuxingController",this._emitter=new _events.default,this._config=config,mediaDataSource.segments||(mediaDataSource.segments=[{duration:mediaDataSource.duration,filesize:mediaDataSource.filesize,url:mediaDataSource.url}]),"boolean"!=typeof mediaDataSource.cors&&(mediaDataSource.cors=!0),"boolean"!=typeof mediaDataSource.withCredentials&&(mediaDataSource.withCredentials=!1),this._mediaDataSource=mediaDataSource;var totalDuration=this._currentSegmentIndex=0;this._mediaDataSource.segments.forEach(function(segment){segment.timestampBase=totalDuration,totalDuration+=segment.duration,segment.cors=mediaDataSource.cors,segment.withCredentials=mediaDataSource.withCredentials,config.referrerPolicy&&(segment.referrerPolicy=config.referrerPolicy)}),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}return babelHelpers.createClass(TransmuxingController,[{key:"destroy",value:function(){this._mediaInfo=null,this._mediaDataSource=null,this._statisticsReporter&&this._disableStatisticsReporter(),this._ioctl&&(this._ioctl.destroy(),this._ioctl=null),this._demuxer&&(this._demuxer.destroy(),this._demuxer=null),this._remuxer&&(this._remuxer.destroy(),this._remuxer=null),this._emitter.removeAllListeners(),this._emitter=null}},{key:"on",value:function(event,listener){this._emitter.addListener(event,listener)}},{key:"off",value:function(event,listener){this._emitter.removeListener(event,listener)}},{key:"start",value:function(){this._loadSegment(0),this._enableStatisticsReporter()}},{key:"_loadSegment",value:function(segmentIndex,optionalFrom){this._currentSegmentIndex=segmentIndex;var dataSource=this._mediaDataSource.segments[segmentIndex],dataSource=this._ioctl=new _ioController.default(dataSource,this._config,segmentIndex);dataSource.onError=this._onIOException.bind(this),dataSource.onSeeked=this._onIOSeeked.bind(this),dataSource.onComplete=this._onIOComplete.bind(this),dataSource.onRedirect=this._onIORedirect.bind(this),dataSource.onRecoveredEarlyEof=this._onIORecoveredEarlyEof.bind(this),optionalFrom?this._demuxer.bindDataSource(this._ioctl):dataSource.onDataArrival=this._onInitChunkArrival.bind(this),dataSource.open(optionalFrom)}},{key:"stop",value:function(){this._internalAbort(),this._disableStatisticsReporter()}},{key:"_internalAbort",value:function(){this._ioctl&&(this._ioctl.destroy(),this._ioctl=null)}},{key:"pause",value:function(){this._ioctl&&this._ioctl.isWorking()&&(this._ioctl.pause(),this._disableStatisticsReporter())}},{key:"resume",value:function(){this._ioctl&&this._ioctl.isPaused()&&(this._ioctl.resume(),this._enableStatisticsReporter())}},{key:"seek",value:function(milliseconds){var targetSegmentIndex,segmentInfo;null!=this._mediaInfo&&this._mediaInfo.isSeekable()&&((targetSegmentIndex=this._searchSegmentIndexContains(milliseconds))===this._currentSegmentIndex?null==(segmentInfo=this._mediaInfo.segments[targetSegmentIndex])?this._pendingSeekTime=milliseconds:(segmentInfo=segmentInfo.getNearestKeyframe(milliseconds),this._remuxer.seek(segmentInfo.milliseconds),this._ioctl.seek(segmentInfo.fileposition),this._pendingResolveSeekPoint=segmentInfo.milliseconds):null==(segmentInfo=this._mediaInfo.segments[targetSegmentIndex])?(this._pendingSeekTime=milliseconds,this._internalAbort(),this._remuxer.seek(),this._remuxer.insertDiscontinuity(),this._loadSegment(targetSegmentIndex)):(segmentInfo=segmentInfo.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,segmentInfo.fileposition),this._pendingResolveSeekPoint=segmentInfo.milliseconds,this._reportSegmentMediaInfo(targetSegmentIndex)),this._enableStatisticsReporter())}},{key:"_searchSegmentIndexContains",value:function(milliseconds){for(var segments=this._mediaDataSource.segments,idx=segments.length-1,i=0;i