UNPKG

videojs-hlsjs

Version:

hls.js playback plugin for videojs

3 lines (2 loc) 7.83 kB
/*! videojs-hlsjs - v1.4.8 - 2017-06-06*/ !function(a,b,c){"use strict";var d=b.getComponent("Component"),e=b.getTech("Tech"),f=b.getComponent("Html5"),g=b.extend(f,{initHls_:function(){this.options_.hls.autoStartLoad=!1,this.hls_=new c(this.options_.hls),this.bindExternalCallbacks_(),this.hls_.on(c.Events.MEDIA_ATTACHED,b.bind(this,this.onMediaAttached_)),this.hls_.on(c.Events.MANIFEST_PARSED,b.bind(this,this.onManifestParsed_)),this.hls_.on(c.Events.MANIFEST_LOADED,b.bind(this,this.initAudioTracks_)),this.hls_.on(c.Events.MANIFEST_LOADED,b.bind(this,this.initTextTracks_)),this.hls_.on(c.Events.LEVEL_UPDATE,b.bind(this,this.updateTimeRange_)),this.hls_.on(c.Events.ERROR,b.bind(this,this.onError_)),this.el_.addEventListener("error",b.bind(this,this.onMediaError_)),this.currentLevel_=void 0,this.setLevelOnLoad_=void 0,this.lastLevel_=void 0,this.timeRange_=void 0,this.starttime_=-1,this.levels_=[],this.hls_.attachMedia(this.el_)},bindExternalCallbacks_:function(){var a;for(a in c.Events)if(Object.prototype.hasOwnProperty.call(c.Events,a)){var d=c.Events[a],e=function(a,b,c){var d=b["on"+function(a){return a.charAt(0).toUpperCase()+a.slice(1)}(a)];if(d&&"function"==typeof d)return function(a,b){return function(c,d){a(b,d)}}(d,c)}(d,this.options_,this.hls_);e&&this.hls_.on(d,b.bind(this,e))}},onMediaAttached_:function(){this.triggerReady()},updateTimeRange_:function(){var a;if(this.hls_&&this.hls_.currentLevel>=0){var b=this.hls_.levels[this.hls_.currentLevel].details;if(b){var c=b.fragments,d=b.live,e=d?2:0,g=c[e>c.length?0:e],h=this.hls_.config.liveSyncDurationCount,i=d?c.length-h:c.length-1,j=c[i<0?0:i];a={start:g.start,end:j.start+j.duration}}}if(a||this.timeRange_)a||(a=this.timeRange_);else{var k=f.prototype.duration.apply(this);k&&!isNaN(k)&&(a={start:0,end:k})}this.timeRange_=a},play:function(){"none"!==this.preload()||this.hasStarted_||(this.setLevelOnLoad_&&this.setLevel(this.setLevelOnLoad_),this.hls_.startLoad(this.starttime())),f.prototype.play.apply(this)},duration:function(){return this.updateTimeRange_(),this.timeRange_?this.timeRange_.end-this.timeRange_.start:void 0},currentTime:function(){return this.updateTimeRange_(),this.hls_.currentLevel!==this.lastLevel_&&this.trigger("levelswitched"),this.lastLevel_=this.hls_.currentLevel,f.prototype.currentTime.apply(this)},seekable:function(){return this.timeRange_?{start:function(){return this.timeRange_.start}.bind(this),end:function(){return this.timeRange_.end}.bind(this),length:1}:{length:0}},onManifestParsed_:function(){var a,b,c=!this.options_.disableAutoLevel;this.parseLevels_(),this.levels_.length>0?(this.options_.setLevelByHeight?(a=this.getLevelByHeight_(this.options_.setLevelByHeight),b=!1):this.options_.startLevelByHeight&&(a=this.getLevelByHeight_(this.options_.startLevelByHeight),b=c),c||a&&-1!==a.index||(a=this.levels_[this.levels_.length-1],b=!1)):c||(a={index:this.hls_.levels.length-1},b=!1),a&&(this.hls_.startLevel=a.index),"none"!==this.preload()?(!b&&a&&this.setLevel(a),this.hls_.startLoad(this.starttime())):!b&&a&&(this.setLevelOnLoad_=a,this.currentLevel_=a),this.autoplay()&&this.paused()&&this.play(),this.trigger("levelsloaded")},initAudioTracks_:function(){var a,c=[],d=this.audioTracks(),e=this.hls_.audioTracks,f=[],g=[],h=function(a){var b=this.hls_;return a.groups.reduce(function(a,c){return a||c.id===b.audioTrack},!1)},i=function(a){if(this.enabled){var b=a.currentLevel(),c=this.__hlsGroups.reduce(function(a,c){return c.groupId===b.audio&&(a=c.id),a},this.__hlsTrackId);c!==this.__hlsTrackId&&(a.hls_.audioTrack=c)}},j=0;for(e.forEach(function(a){var b=void 0!==a.groupId?a.name:"no-groups",c={id:a.id,groupId:a.groupId};if(void 0===f[b]){f[b]=j,g[j]=[];var d=a;d.groups=[],d.groups.push(c),g[j]=d,j++}else g[f[a.name]].groups.push(c)}),a=0;a<d.length;a++){var k=d[a];void 0!==k.__hlsTrackId&&c.push(k)}for(a=0;a<c.length;a++)d.removeTrack_(c[a]);for(a=0;a<g.length;a++){var l=g[a],m=new b.AudioTrack({type:l.type,language:l.lang,label:l.name,enabled:h.bind(this,l)()});m.__hlsTrackId=l.id,m.__hlsGroups=l.groups,m.addEventListener("enabledchange",i.bind(m,this)),d.addTrack(m)}},initTextTracks_:function(){var a,c=[],d=this.textTracks(),e=this.hls_.subtitleTracks,f=function(){this.tech_.el_.textTracks[this.__hlsTrack.vjsId].mode=this.mode};for(a=0;a<d.length;a++){var g=d[a];void 0!==g.__hlsTrack&&c.push(g)}for(a=0;a<c.length;a++)d.removeTrack_(c[a]);var h=!1;for(a=0;a<e.length;a++){var i=e[a],j=new b.TextTrack({srclang:i.lang,label:i.name,mode:void 0!==i.default&&i.default&&!h?"showing":"hidden",tech:this});void 0!==i.default&&i.default&&(h=!0),j.__hlsTrack=i,j.__hlsTrack.vjsId=a+1,j.addEventListener("modechange",f),d.addTrack_(j)}h&&this.trigger("texttrackchange")},getLevelByHeight_:function(a){var b,c;for(b=0;b<this.levels_.length;b++){var d=this.levels_[b],e=Math.abs(a-d.height),f=c,g=void 0!==f?Math.abs(a-f.height):void 0;(void 0===g||g>e)&&(c=this.levels_[b])}return c},parseLevels_:function(){if(this.levels_=[],this.currentLevel_=void 0,this.hls_.levels){var a;for(this.options_.disableAutoLevel||(this.levels_.push({label:"auto",index:-1,height:-1}),this.currentLevel_=this.levels_[0]),a=0;a<this.hls_.levels.length;a++){var b=this.hls_.levels[a],c=null;b.height&&(c={label:b.height+"p",index:a,height:b.height}),void 0!==b.attrs.AUDIO&&(c=c||{},c.index=a,c.audio=b.attrs.AUDIO),c&&this.levels_.push(c)}this.levels_.length<=1&&(this.levels_=[],this.currentLevel_=void 0)}},setSrc:function(a){this.hls_&&this.hls_.destroy(),this.currentLevel_&&(this.options_.setLevelByHeight=this.currentLevel_.height),this.initHls_(),this.hls_.loadSource(a)},onMediaError_:function(a){var b=a.currentTarget.error;if(b&&b.code===b.MEDIA_ERR_DECODE){var d={type:c.ErrorTypes.MEDIA_ERROR,fatal:!0,details:"mediaErrorDecode"};this.onError_(a,d)}},onError_:function(a,d){if([c.ErrorDetails.MANIFEST_LOAD_ERROR,c.ErrorDetails.MANIFEST_LOAD_TIMEOUT,c.ErrorDetails.MANIFEST_PARSING_ERROR].indexOf(d.details)>=0)b.log.error('HLSJS: Fatal error: "'+d.details+'", aborting playback.'),this.hls_.destroy(),this.error=function(){return{code:3}},this.trigger("error");else if(d.fatal)switch(d.type){case c.ErrorTypes.NETWORK_ERROR:b.log.warn('HLSJS: Network error: "'+d.details+'", trying to recover...'),this.hls_.startLoad(),this.trigger("waiting");break;case c.ErrorTypes.MEDIA_ERROR:var e=function(){this.hls_.startLoad(),this.hls_.off(c.Events.MEDIA_ATTACHED,e)}.bind(this);b.log.warn('HLSJS: Media error: "'+d.details+'", trying to recover...'),this.hls_.swapAudioCodec(),this.hls_.recoverMediaError(),this.hls_.on(c.Events.MEDIA_ATTACHED,e),this.trigger("waiting");break;default:b.log.error('HLSJS: Fatal error: "'+d.details+'", aborting playback.'),this.hls_.destroy(),this.error=function(){return{code:3}},this.trigger("error")}},currentLevel:function(){var a=!this.options_.disableAutoLevel;return this.currentLevel_&&-1===this.currentLevel_.index?this.levels_[a?this.hls_.currentLevel+1:this.hls_.currentLevel]:this.currentLevel_},isAutoLevel:function(){return this.currentLevel_&&-1===this.currentLevel_.index},setLevel:function(a){this.currentLevel_=a,this.setLevelOnLoad_=void 0,this.hls_.currentLevel=a.index,this.hls_.loadLevel=a.index},getLevels:function(){return this.levels_},supportsStarttime:function(){return!0},starttime:function(a){if(!a)return this.starttime_;this.starttime_=a},dispose:function(){return this.hls_&&this.hls_.destroy(),f.prototype.dispose.apply(this)}});g.isSupported=function(){return c.isSupported()},g.canPlaySource=function(a){return!(b.options.hlsjs.favorNativeHLS&&f.canPlaySource(a))&&a.type&&/^application\/(?:x-|vnd\.apple\.)mpegurl/i.test(a.type)&&c.isSupported()},b.options.hlsjs={favorNativeHLS:!0,hls:{}},d.registerComponent("Hlsjs",g),e.registerTech("hlsjs",g),b.options.techOrder.push("hlsjs")}(window,window.videojs,window.Hls);