dashjs
Version:
A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.
28 lines (27 loc) • 4.39 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});var _MediaPlayer=require('./MediaPlayer');var _MediaPlayer2=_interopRequireDefault(_MediaPlayer);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function MediaPlayerFactory(){/**
* mime-type identifier for any source content to be accepted as a dash manifest by the create() method.
* @type {string}
*/var SUPPORTED_MIME_TYPE='application/dash+xml';var logger=void 0;/**
* A new MediaPlayer is instantiated for the supplied videoElement and optional source and context. If no context is provided,
* a default DashContext is used. If no source is provided, the videoElement is interrogated to extract the first source whose
* type is application/dash+xml.
* The autoplay property of the videoElement is preserved. Any preload attribute is ignored. This method should be called after the page onLoad event is dispatched.
* @param {HTMLMediaElement} video
* @param {HTMLSourceElement} source
* @param {Object} context
* @returns {MediaPlayer|null}
*/function create(video,source,context){if(!video||!/^VIDEO$/i.test(video.nodeName))return null;if(video._dashjs_player)return video._dashjs_player;var player=void 0;var videoID=video.id||video.name||'video element';source=source||[].slice.call(video.querySelectorAll('source')).filter(function(s){return s.type==SUPPORTED_MIME_TYPE;})[0];if(!source&&video.src){source=document.createElement('source');source.src=video.src;}else if(!source&&!video.src){return null;}context=context||{};player=(0,_MediaPlayer2.default)(context).create();player.initialize(video,source.src,video.autoplay);if(!logger){logger=player.getDebug().getLogger();}logger.debug('Converted '+videoID+' to dash.js player and added content: '+source.src);// Store a reference to the player on the video element so it can be gotten at for debugging and so we know its
// already been setup.
video._dashjs_player=player;return player;}/**
* Searches the provided scope for all instances of the indicated selector. If no scope is provided, document is used. If no selector is
* specified, [data-dashjs-player] is used. The declarative setup also looks for source elements with the type attribute set to 'application/dash+xml'.
* It then looks for those video elements which have a source element defined with a type matching 'application/dash+xml'.
* A new MediaPlayer is instantiated for each matching video element and the appropriate source is assigned.
* The autoplay property of the video element is preserved. Any preload attribute is ignored. This method should be called after the page onLoad event is dispatched.
* Returns an array holding all the MediaPlayer instances that were added by this method.
* @param {string} selector - CSS selector
* @param {Object} scope
* @returns {Array} an array of MediaPlayer objects
*/function createAll(selector,scope){var aPlayers=[];selector=selector||'[data-dashjs-player]';scope=scope||document;var videos=scope.querySelectorAll(selector);for(var i=0;i<videos.length;i++){var player=create(videos[i],null);aPlayers.push(player);}var sources=scope.querySelectorAll('source[type="'+SUPPORTED_MIME_TYPE+'"]');for(var _i=0;_i<sources.length;_i++){var video=findVideo(sources[_i]);var _player=create(video,null);aPlayers.push(_player);}return aPlayers;}function findVideo(el){if(/^VIDEO$/i.test(el.nodeName)){return el;}else{return findVideo(el.parentNode);}}return{create:create,createAll:createAll};}var instance=MediaPlayerFactory();var loadInterval=void 0;function loadHandler(){window.removeEventListener('load',loadHandler);instance.createAll();}function loadIntervalHandler(){if(window.dashjs){window.clearInterval(loadInterval);instance.createAll();}}var avoidAutoCreate=typeof window!=='undefined'&&window&&window.dashjs&&window.dashjs.skipAutoCreate;if(!avoidAutoCreate&&typeof window!=='undefined'&&window&&window.addEventListener){if(window.document.readyState==='complete'){if(window.dashjs){instance.createAll();}else{// If loaded asynchronously, window.readyState may be 'complete' even if dashjs hasn't loaded yet
loadInterval=window.setInterval(loadIntervalHandler,500);}}else{window.addEventListener('load',loadHandler);}}exports.default=instance;
//# sourceMappingURL=MediaPlayerFactory.js.map