define(["exports","../utils/logger.js","./mp4-generator.js","./aac-silent.js","../../browser.js","../core/media-segment-info.js","../utils/exception.js"],function(_exports,_logger,_mp4Generator,_aacSilent,_browser,_mediaSegmentInfo,_exception){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var MP4Remuxer=function(){function MP4Remuxer(config){babelHelpers.classCallCheck(this,MP4Remuxer),this.TAG="MP4Remuxer",this._config=config,this._isLive=!0===config.isLive,this._dtsBase=-1,this._dtsBaseInited=!1,this._audioDtsBase=1/0,this._videoDtsBase=1/0,this._audioNextDts=void 0,this._videoNextDts=void 0,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=_browser.default.chrome&&((config=navigator.userAgent.match(/Chrome\/(\d+)/i))?parseInt(config[1]):0)<=50,this._fillSilentAfterSeek=_browser.default.edge,this._mp3UseMpegAudio=!_browser.default.firefox,this._fillAudioTimestampGap=this._config.fixAudioTimestampGap}return babelHelpers.createClass(MP4Remuxer,[{key:"destroy",value:function(){this._dtsBase=-1,this._dtsBaseInited=!1,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(producer){return producer.onDataAvailable=this.remux.bind(this),producer.onTrackMetadata=this._onTrackMetadataReceived.bind(this),this}},{key:"onInitSegment",get:function(){return this._onInitSegment},set:function(callback){this._onInitSegment=callback}},{key:"onMediaSegment",get:function(){return this._onMediaSegment},set:function(callback){this._onMediaSegment=callback}},{key:"insertDiscontinuity",value:function(){this._audioNextDts=this._videoNextDts=void 0}},{key:"seek",value:function(originalDts){this._audioStashedLastSample=null,this._videoStashedLastSample=null,this._videoSegmentInfoList.clear(),this._audioSegmentInfoList.clear()}},{key:"remux",value:function(audioTrack,videoTrack){if(!this._onMediaSegment)throw new _exception.IllegalStateException("MP4Remuxer: onMediaSegment callback must be specificed!");this._dtsBaseInited||this._calculateDtsBase(audioTrack,videoTrack),this._remuxVideo(videoTrack),this._remuxAudio(audioTrack)}},{key:"_onTrackMetadataReceived",value:function(type,metadata){var metabox=null,container="mp4",codec=metadata.codec;if("audio"===type)metabox="mp3"===(this._audioMeta=metadata).codec&&this._mp3UseMpegAudio?(container="mpeg",codec="",new Uint8Array):_mp4Generator.default.initSegment([metadata]);else{if("video"!==type)return;this._videoMeta=metadata,metabox=_mp4Generator.default.initSegment([metadata])}if(!this._onInitSegment)throw new _exception.IllegalStateException("MP4Remuxer: onInitSegment callback must be specified!");this._onInitSegment(type,{type:type,data:metabox.buffer,codec:codec,container:"".concat(type,"/").concat(container),mediaDuration:metadata.duration})}},{key:"_calculateDtsBase",value:function(audioTrack,videoTrack){this._dtsBaseInited||(audioTrack.samples&&audioTrack.samples.length&&(this._audioDtsBase=audioTrack.samples[0].dts),videoTrack.samples&&videoTrack.samples.length&&(this._videoDtsBase=videoTrack.samples[0].dts),this._dtsBase=Math.min(this._audioDtsBase,this._videoDtsBase),this._dtsBaseInited=!0)}},{key:"flushStashedSamples",value:function(){var videoSample=this._videoStashedLastSample,audioSample=this._audioStashedLastSample,videoTrack={type:"video",id:1,sequenceNumber:0,samples:[],length:0},videoSample=(null!=videoSample&&(videoTrack.samples.push(videoSample),videoTrack.length=videoSample.length),{type:"audio",id:2,sequenceNumber:0,samples:[],length:0});null!=audioSample&&(videoSample.samples.push(audioSample),videoSample.length=audioSample.length),this._videoStashedLastSample=null,this._audioStashedLastSample=null,this._remuxVideo(videoTrack,!0),this._remuxAudio(videoSample,!0)}},{key:"_remuxAudio",value:function(audioTrack,force){if(null!=this._audioMeta){var samples=audioTrack.samples,firstDts=-1,refSampleDuration=this._audioMeta.refSampleDuration,mpegRawTrack="mp3"===this._audioMeta.codec&&this._mp3UseMpegAudio,firstSegmentAfterSeek=this._dtsBaseInited&&void 0===this._audioNextDts,insertPrefixSilentFrame=!1;if(samples&&0!==samples.length&&(1!==samples.length||force)){for(var dtsCorrection,offset=0,mdatbox=null,mdatBytes=0,mdatBytes=mpegRawTrack?(offset=0,audioTrack.length):(offset=8)+audioTrack.length,lastSample=null,force=(1>>24&255,mdatbox[1]=mdatBytes>>>16&255,mdatbox[2]=mdatBytes>>>8&255,mdatbox[3]=255&mdatBytes,mdatbox.set(_mp4Generator.default.types.mdat,4));for(var _i=0;_i>>24&255,mdatbox[1]=force>>>16&255,mdatbox[2]=force>>>8&255,mdatbox[3]=255&force,mdatbox.set(_mp4Generator.default.types.mdat,4);for(var _i2=0;_i2