UNPKG

dashjs

Version:

A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.

39 lines (38 loc) 13.2 kB
'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _Constants=require('./constants/Constants');var _Constants2=_interopRequireDefault(_Constants);var _LiveEdgeFinder=require('./utils/LiveEdgeFinder');var _LiveEdgeFinder2=_interopRequireDefault(_LiveEdgeFinder);var _BufferController=require('./controllers/BufferController');var _BufferController2=_interopRequireDefault(_BufferController);var _TextBufferController=require('./text/TextBufferController');var _TextBufferController2=_interopRequireDefault(_TextBufferController);var _ScheduleController=require('./controllers/ScheduleController');var _ScheduleController2=_interopRequireDefault(_ScheduleController);var _RepresentationController=require('../dash/controllers/RepresentationController');var _RepresentationController2=_interopRequireDefault(_RepresentationController);var _FactoryMaker=require('../core/FactoryMaker');var _FactoryMaker2=_interopRequireDefault(_FactoryMaker);var _SupervisorTools=require('./utils/SupervisorTools');var _DashHandler=require('../dash/DashHandler');var _DashHandler2=_interopRequireDefault(_DashHandler);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function StreamProcessor(config){config=config||{};var context=this.context;var type=config.type;var errHandler=config.errHandler;var mimeType=config.mimeType;var timelineConverter=config.timelineConverter;var adapter=config.adapter;var manifestModel=config.manifestModel;var mediaPlayerModel=config.mediaPlayerModel;var stream=config.stream;var abrController=config.abrController;var playbackController=config.playbackController;var streamController=config.streamController;var mediaController=config.mediaController;var textController=config.textController;var dashMetrics=config.dashMetrics;var settings=config.settings;var instance=void 0,mediaInfo=void 0,mediaInfoArr=void 0,bufferController=void 0,scheduleController=void 0,liveEdgeFinder=void 0,representationController=void 0,fragmentModel=void 0,spExternalControllers=void 0,indexHandler=void 0;function setup(){if(playbackController&&playbackController.getIsDynamic()){liveEdgeFinder=(0,_LiveEdgeFinder2.default)(context).create({timelineConverter:timelineConverter,streamProcessor:instance});}resetInitialSettings();}function initialize(mediaSource){indexHandler=(0,_DashHandler2.default)(context).create({mimeType:mimeType,timelineConverter:timelineConverter,dashMetrics:dashMetrics,mediaPlayerModel:mediaPlayerModel,baseURLController:config.baseURLController,errHandler:errHandler,settings:settings});// initialize controllers indexHandler.initialize(instance);abrController.registerStreamType(type,instance);fragmentModel=stream.getFragmentController().getModel(type);fragmentModel.setStreamProcessor(instance);bufferController=createBufferControllerForType(type);scheduleController=(0,_ScheduleController2.default)(context).create({type:type,mimeType:mimeType,adapter:adapter,dashMetrics:dashMetrics,timelineConverter:timelineConverter,mediaPlayerModel:mediaPlayerModel,abrController:abrController,playbackController:playbackController,streamController:streamController,textController:textController,streamProcessor:instance,mediaController:mediaController,settings:settings});representationController=(0,_RepresentationController2.default)(context).create();representationController.setConfig({abrController:abrController,dashMetrics:dashMetrics,manifestModel:manifestModel,playbackController:playbackController,timelineConverter:timelineConverter,streamProcessor:instance});bufferController.initialize(mediaSource);scheduleController.initialize();representationController.initialize();}function registerExternalController(controller){spExternalControllers.push(controller);}function unregisterExternalController(controller){var index=spExternalControllers.indexOf(controller);if(index!==-1){spExternalControllers.splice(index,1);}}function getExternalControllers(){return spExternalControllers;}function unregisterAllExternalController(){spExternalControllers=[];}function resetInitialSettings(){mediaInfoArr=[];mediaInfo=null;unregisterAllExternalController();}function reset(errored,keepBuffers){indexHandler.reset();if(bufferController){bufferController.reset(errored,keepBuffers);bufferController=null;}if(scheduleController){scheduleController.reset();scheduleController=null;}if(representationController){representationController.reset();representationController=null;}if(abrController){abrController.unRegisterStreamType(type);}spExternalControllers.forEach(function(controller){controller.reset();});resetInitialSettings();type=null;stream=null;if(liveEdgeFinder){liveEdgeFinder.reset();liveEdgeFinder=null;}}function isUpdating(){return representationController?representationController.isUpdating():false;}function getType(){return type;}function getRepresentationController(){return representationController;}function getIndexHandler(){return indexHandler;}function getFragmentController(){return stream?stream.getFragmentController():null;}function getBuffer(){return bufferController.getBuffer();}function setBuffer(buffer){bufferController.setBuffer(buffer);}function getBufferController(){return bufferController;}function getFragmentModel(){return fragmentModel;}function getLiveEdgeFinder(){return liveEdgeFinder;}function getStreamInfo(){return stream?stream.getStreamInfo():null;}function addInbandEvents(events){if(stream){stream.addInbandEvents(events);}}function selectMediaInfo(newMediaInfo){if(newMediaInfo!==mediaInfo&&(!newMediaInfo||!mediaInfo||newMediaInfo.type===mediaInfo.type)){mediaInfo=newMediaInfo;}var realAdaptation=adapter.getRealAdaptation(getStreamInfo(),mediaInfo);var voRepresentations=adapter.getVoRepresentations(mediaInfo);if(representationController){representationController.updateData(realAdaptation,voRepresentations,type);}}function addMediaInfo(newMediaInfo,selectNewMediaInfo){if(mediaInfoArr.indexOf(newMediaInfo)===-1){mediaInfoArr.push(newMediaInfo);}if(selectNewMediaInfo){this.selectMediaInfo(newMediaInfo);}}function getMediaInfoArr(){return mediaInfoArr;}function getMediaInfo(){return mediaInfo;}function getMediaSource(){return bufferController.getMediaSource();}function setMediaSource(mediaSource){bufferController.setMediaSource(mediaSource,getMediaInfo());}function dischargePreBuffer(){bufferController.dischargePreBuffer();}function getScheduleController(){return scheduleController;}/** * Get a specific voRepresentation. If quality parameter is defined, this function will return the voRepresentation for this quality. * Otherwise, this function will return the current voRepresentation used by the representationController. * @param {number} quality - quality index of the voRepresentaion expected. */function getRepresentationInfo(quality){var voRepresentation=void 0;if(quality!==undefined){(0,_SupervisorTools.checkInteger)(quality);voRepresentation=representationController?representationController.getRepresentationForQuality(quality):null;}else{voRepresentation=representationController?representationController.getCurrentRepresentation():null;}return voRepresentation?adapter.convertDataToRepresentationInfo(voRepresentation):null;}function isBufferingCompleted(){if(bufferController){return bufferController.getIsBufferingCompleted();}return false;}function getBufferLevel(){return bufferController.getBufferLevel();}function switchInitData(representationId,bufferResetEnabled){if(bufferController){bufferController.switchInitData(getStreamInfo().id,representationId,bufferResetEnabled);}}function createBuffer(previousBuffers){return bufferController.getBuffer()||bufferController.createBuffer(mediaInfo,previousBuffers);}function switchTrackAsked(){scheduleController.switchTrackAsked();}function createBufferControllerForType(type){var controller=null;if(type===_Constants2.default.VIDEO||type===_Constants2.default.AUDIO){controller=(0,_BufferController2.default)(context).create({type:type,dashMetrics:dashMetrics,mediaPlayerModel:mediaPlayerModel,manifestModel:manifestModel,errHandler:errHandler,streamController:streamController,mediaController:mediaController,adapter:adapter,textController:textController,abrController:abrController,playbackController:playbackController,streamProcessor:instance,settings:settings});}else{controller=(0,_TextBufferController2.default)(context).create({type:type,mimeType:mimeType,dashMetrics:dashMetrics,mediaPlayerModel:mediaPlayerModel,manifestModel:manifestModel,errHandler:errHandler,streamController:streamController,mediaController:mediaController,adapter:adapter,textController:textController,abrController:abrController,playbackController:playbackController,streamProcessor:instance,settings:settings});}return controller;}function setIndexHandlerTime(value){if(indexHandler){indexHandler.setCurrentTime(value);}}function getIndexHandlerTime(){return indexHandler?indexHandler.getCurrentTime():NaN;}function resetIndexHandler(){if(indexHandler){indexHandler.resetIndex();}}function getInitRequest(quality){(0,_SupervisorTools.checkInteger)(quality);var representation=representationController?representationController.getRepresentationForQuality(quality):null;return indexHandler?indexHandler.getInitRequest(representation):null;}function getFragmentRequest(representationInfo,time,options){var fragRequest=null;var representation=representationController&&representationInfo?representationController.getRepresentationForQuality(representationInfo.quality):null;if(indexHandler){// if time and options are undefined, it means the next segment is requested // otherwise, the segment at this specific time is requested. if(time!==undefined&&options!==undefined){fragRequest=indexHandler.getSegmentRequestForTime(representation,time,options);}else{fragRequest=indexHandler.getNextSegmentRequest(representation);}}return fragRequest;}instance={initialize:initialize,isUpdating:isUpdating,getType:getType,getBufferController:getBufferController,getFragmentModel:getFragmentModel,getScheduleController:getScheduleController,getLiveEdgeFinder:getLiveEdgeFinder,getFragmentController:getFragmentController,getRepresentationController:getRepresentationController,getIndexHandler:getIndexHandler,getRepresentationInfo:getRepresentationInfo,getBufferLevel:getBufferLevel,switchInitData:switchInitData,isBufferingCompleted:isBufferingCompleted,createBuffer:createBuffer,getStreamInfo:getStreamInfo,selectMediaInfo:selectMediaInfo,addMediaInfo:addMediaInfo,switchTrackAsked:switchTrackAsked,getMediaInfoArr:getMediaInfoArr,getMediaInfo:getMediaInfo,getMediaSource:getMediaSource,setMediaSource:setMediaSource,dischargePreBuffer:dischargePreBuffer,getBuffer:getBuffer,setBuffer:setBuffer,registerExternalController:registerExternalController,unregisterExternalController:unregisterExternalController,getExternalControllers:getExternalControllers,unregisterAllExternalController:unregisterAllExternalController,addInbandEvents:addInbandEvents,setIndexHandlerTime:setIndexHandlerTime,getIndexHandlerTime:getIndexHandlerTime,resetIndexHandler:resetIndexHandler,getInitRequest:getInitRequest,getFragmentRequest:getFragmentRequest,reset:reset};setup();return instance;}/** * The copyright in this software is being made available under the BSD License, * included below. This software may be subject to other third party and contributor * rights, including patent rights, and no such rights are granted under this license. * * Copyright (c) 2013, Dash Industry Forum. * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * * Neither the name of Dash Industry Forum nor the names of its * contributors may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */StreamProcessor.__dashjs_factory_name='StreamProcessor';exports.default=_FactoryMaker2.default.getClassFactory(StreamProcessor); //# sourceMappingURL=StreamProcessor.js.map