Embed: track idx compatibility for 3.0

This commit is contained in:
Cat 2019-02-05 16:29:32 +01:00 committed by Thulinma
parent 8069f0f72f
commit 6db9a9ad17
7 changed files with 17 additions and 13 deletions

2
embed/imgs/tmp.svg Normal file
View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="100%" width="100%" class="mist icon graph" preserveaspectratio="none" viewBox="1 -1 2.000999927520752 1" style="width: 4em; height: 1em;"><defs><linearGradient id="uid8410939318158481" x1="0" x2="0" y1="-1" y2="0" gradientunits="userSpaceOnUse"><stop offset="0" stop-color="green"></stop><stop offset="0.33" stop-color="yellow"></stop><stop offset="0.66" stop-color="orange"></stop><stop offset="0" stop-color="red"></stop></lineargradient></defs><path vector-effect="non-scaling-stroke" stroke="url(#uid8410939318158481)" d="M1,-1 L2.000999927520752,-1 L3.000999927520752,-0.9170000000000007"></path></svg>

After

Width:  |  Height:  |  Size: 660 B

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
mistplayers.dashjs={name:"Dash.js player",mimes:["dash/video/mp4"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(t){return MistUtil.array.indexOf(this.mimes,t)==-1?false:true},isBrowserSupported:function(t,e,i){if(location.protocol!=MistUtil.http.url.split(e.url).protocol){i.log("HTTP/HTTPS mismatch for this source");return false}if(location.protocol=="file:"){i.log("This source ("+t+") won't load if the page is run via file://");return false}return"MediaSource"in window},player:function(){this.onreadylist=[]},scriptsrc:function(t){return t+"/dashjs.js"}};var p=mistplayers.dashjs.player;p.prototype=new MistPlayer;p.prototype.build=function(t,e){var i=this;this.onDashLoad=function(){if(t.destroyed){return}t.log("Building DashJS player..");var r=document.createElement("video");if("Proxy"in window){var a={get:{},set:{}};t.player.api=new Proxy(r,{get:function(t,e,i){if(e in a.get){return a.get[e].apply(t,arguments)}var r=t[e];if(typeof r==="function"){return function(){return r.apply(t,arguments)}}return r},set:function(t,e,i){if(e in a.set){return a.set[e].call(t,i)}return t[e]=i}});if(t.info.type=="live"){a.get.duration=function(){var e=0;if(this.buffered.length){e=this.buffered.end(this.buffered.length-1)}var i=((new Date).getTime()-t.player.api.lastProgress.getTime())*.001;return e+i+-1*t.player.api.liveOffset+45};a.set.currentTime=function(e){var i=e-t.player.api.duration;t.log("Seeking to "+MistUtil.format.time(e)+" ("+Math.round(i*-10)/10+"s from live)");t.video.currentTime=e};MistUtil.event.addListener(r,"progress",function(){t.player.api.lastProgress=new Date});t.player.api.lastProgress=new Date;t.player.api.liveOffset=0}}else{i.api=r}if(t.options.autoplay){r.setAttribute("autoplay","")}if(t.options.loop&&t.info.type!="live"){r.setAttribute("loop","")}if(t.options.poster){r.setAttribute("poster",t.options.poster)}if(t.options.muted){r.muted=true}if(t.options.controls=="stock"){r.setAttribute("controls","")}var s=dashjs.MediaPlayer().create();s.initialize(r,t.source.url,t.options.autoplay);i.dash=s;var n=["METRIC_ADDED","METRIC_CHANGED","METRICS_CHANGED","FRAGMENT_LOADING_STARTED","FRAGMENT_LOADING_COMPLETED","LOG","PLAYBACK_TIME_UPDATED","PLAYBACK_PROGRESS"];for(var o in dashjs.MediaPlayer.events){if(n.indexOf(o)<0){i.dash.on(dashjs.MediaPlayer.events[o],function(e){t.log("Player event fired: "+e.type)})}}t.player.setSize=function(t){this.api.style.width=t.width+"px";this.api.style.height=t.height+"px"};t.player.api.setSource=function(e){t.player.dash.attachSource(e)};t.player.api.setTrack=function(e,r){var a=MistUtil.tracks.parse(t.info.meta.tracks);if(!(e in a)||!(r in a[e])&&r!=0){t.log("Skipping trackselection of "+e+" track "+r+" because it does not exist");return}var s=[];for(var n in t.info.meta.tracks){var o=t.info.meta.tracks[n];if(o.type==e){s.push(o)}}MistUtil.array.multiSort(s,["bps"]);var l=false;for(var n in s){if(s[n].trackid==r){l=n;break}}if(l===false){return false}i.dash.setAutoSwitchQualityFor(e,false);i.dash.setFastSwitchEnabled(true);i.dash.setQualityFor(e,l);return true};i.dash.on("qualityChangeRendered",function(e){var i=[];for(var r in t.info.meta.tracks){var a=t.info.meta.tracks[r];if(a.type==e.mediaType){i.push(a)}}MistUtil.array.multiSort(i,["bps"]);var s=i[e.newQuality].trackid;MistUtil.event.send("playerUpdate_trackChanged",{type:e.mediaType,trackid:s},t.video)});var l=false;i.dash.on("allTextTracksAdded",function(){l=true});t.player.api.setSubtitle=function(e){if(!l){var r=function(){t.player.api.setSubtitle(e);i.dash.off("allTextTracksAdded",r)};i.dash.on("allTextTracksAdded",r);return}if(!e){i.dash.enableText(false);return}var a=i.dash.getTracksFor("text");for(var s in a){if(a[s].id==e.trackid){i.dash.setTextTrack(s);if(!i.dash.isTextEnabled()){i.dash.enableText()}return true}}return false};MistUtil.event.addListener(r,"progress",function(e){if(t.container.getAttribute("data-loading")=="stalled"){t.container.removeAttribute("data-loading")}});i.api.unload=function(){i.dash.reset()};t.log("Built html");e(r)};if("dashjs"in window){this.onDashLoad()}else{var r=MistUtil.scripts.insert(t.urlappend(mistplayers.dashjs.scriptsrc(t.options.host)),{onerror:function(e){var i="Failed to load dashjs.js";if(e.message){i+=": "+e.message}t.showError(i)},onload:i.onDashLoad},t)}};
mistplayers.dashjs={name:"Dash.js player",mimes:["dash/video/mp4"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(t){return MistUtil.array.indexOf(this.mimes,t)==-1?false:true},isBrowserSupported:function(t,e,i){if(location.protocol!=MistUtil.http.url.split(e.url).protocol){i.log("HTTP/HTTPS mismatch for this source");return false}if(location.protocol=="file:"){i.log("This source ("+t+") won't load if the page is run via file://");return false}return"MediaSource"in window},player:function(){this.onreadylist=[]},scriptsrc:function(t){return t+"/dashjs.js"}};var p=mistplayers.dashjs.player;p.prototype=new MistPlayer;p.prototype.build=function(t,e){var i=this;this.onDashLoad=function(){if(t.destroyed){return}t.log("Building DashJS player..");var a=document.createElement("video");if("Proxy"in window){var r={get:{},set:{}};t.player.api=new Proxy(a,{get:function(t,e,i){if(e in r.get){return r.get[e].apply(t,arguments)}var a=t[e];if(typeof a==="function"){return function(){return a.apply(t,arguments)}}return a},set:function(t,e,i){if(e in r.set){return r.set[e].call(t,i)}return t[e]=i}});if(t.info.type=="live"){r.get.duration=function(){var e=0;if(this.buffered.length){e=this.buffered.end(this.buffered.length-1)}var i=((new Date).getTime()-t.player.api.lastProgress.getTime())*.001;return e+i+-1*t.player.api.liveOffset+45};r.set.currentTime=function(e){var i=e-t.player.api.duration;t.log("Seeking to "+MistUtil.format.time(e)+" ("+Math.round(i*-10)/10+"s from live)");t.video.currentTime=e};MistUtil.event.addListener(a,"progress",function(){t.player.api.lastProgress=new Date});t.player.api.lastProgress=new Date;t.player.api.liveOffset=0}}else{i.api=a}if(t.options.autoplay){a.setAttribute("autoplay","")}if(t.options.loop&&t.info.type!="live"){a.setAttribute("loop","")}if(t.options.poster){a.setAttribute("poster",t.options.poster)}if(t.options.muted){a.muted=true}if(t.options.controls=="stock"){a.setAttribute("controls","")}var s=dashjs.MediaPlayer().create();s.initialize(a,t.source.url,t.options.autoplay);i.dash=s;var n=["METRIC_ADDED","METRIC_CHANGED","METRICS_CHANGED","FRAGMENT_LOADING_STARTED","FRAGMENT_LOADING_COMPLETED","LOG","PLAYBACK_TIME_UPDATED","PLAYBACK_PROGRESS"];for(var o in dashjs.MediaPlayer.events){if(n.indexOf(o)<0){i.dash.on(dashjs.MediaPlayer.events[o],function(e){t.log("Player event fired: "+e.type)})}}t.player.setSize=function(t){this.api.style.width=t.width+"px";this.api.style.height=t.height+"px"};t.player.api.setSource=function(e){t.player.dash.attachSource(e)};t.player.api.setTrack=function(e,a){var r=MistUtil.tracks.parse(t.info.meta.tracks);if(!(e in r)||!(a in r[e])&&a!="none"){t.log("Skipping trackselection of "+e+" track "+a+" because it does not exist");return}var s=[];for(var n in t.info.meta.tracks){var o=t.info.meta.tracks[n];if(o.type==e){s.push(o)}}MistUtil.array.multiSort(s,["bps"]);var l=false;for(var n in s){var d="idx"in s[n]?s[n].idx:s[n].trackid;if(d==a){l=n;break}}if(l===false){return false}i.dash.setAutoSwitchQualityFor(e,false);i.dash.setFastSwitchEnabled(true);i.dash.setQualityFor(e,l);return true};i.dash.on("qualityChangeRendered",function(e){var i=[];for(var a in t.info.meta.tracks){var r=t.info.meta.tracks[a];if(r.type==e.mediaType){i.push(r)}}MistUtil.array.multiSort(i,["bps"]);var s="idx"in i[e.newQuality]?i[e.newQuality].idx:i[e.newQuality].trackid;MistUtil.event.send("playerUpdate_trackChanged",{type:e.mediaType,trackid:s},t.video)});var l=false;i.dash.on("allTextTracksAdded",function(){l=true});t.player.api.setSubtitle=function(e){if(!l){var a=function(){t.player.api.setSubtitle(e);i.dash.off("allTextTracksAdded",a)};i.dash.on("allTextTracksAdded",a);return}if(!e){i.dash.enableText(false);return}var r=i.dash.getTracksFor("text");for(var s in r){var n="idx"in e?e.idx:e.trackid;if(r[s].id==n){i.dash.setTextTrack(s);if(!i.dash.isTextEnabled()){i.dash.enableText()}return true}}return false};MistUtil.event.addListener(a,"progress",function(e){if(t.container.getAttribute("data-loading")=="stalled"){t.container.removeAttribute("data-loading")}});i.api.unload=function(){i.dash.reset()};t.log("Built html");e(a)};if("dashjs"in window){this.onDashLoad()}else{var a=MistUtil.scripts.insert(t.urlappend(mistplayers.dashjs.scriptsrc(t.options.host)),{onerror:function(e){var i="Failed to load dashjs.js";if(e.message){i+=": "+e.message}t.showError(i)},onload:i.onDashLoad},t)}};

View file

@ -733,7 +733,7 @@ function MistVideo(streamName,options) {
//check tracks exist
var meta = MistUtil.tracks.parse(MistVideo.info.meta.tracks);
for (var i in usetracks) {
if ((i in meta) && ((usetracks[i] in meta[i]) || (usetracks[i] == 0))) { continue; }
if ((i in meta) && ((usetracks[i] in meta[i]) || (usetracks[i] == "none"))) { continue; }
MistVideo.log("Skipping trackselection of "+i+" track "+usetracks[i]+" because it does not exist");
delete usetracks[i];
}
@ -750,7 +750,7 @@ function MistVideo(streamName,options) {
switch (i) {
case "audio":
case "video":
if (usetracks[i] == 0) { continue; }
if (usetracks[i] == "none") { continue; }
hlstracks.push(usetracks[i]);
break;
}

View file

@ -1393,7 +1393,7 @@ MistSkins["default"] = {
}
}
var value = 0;
var value = "none";
if (this.checked) {
if (this.trackType in selections) {
value = selections[this.trackType].value;
@ -1403,9 +1403,9 @@ MistSkins["default"] = {
}
}
else {
value = 0;
value = "none";
}
changeToTracks(this.trackType,(this.checked ? value : 0));
changeToTracks(this.trackType,(this.checked ? value : "none"));
});
}
}
@ -1470,7 +1470,7 @@ MistSkins["default"] = {
var track = t[options[i]];
var option = document.createElement("option");
select.appendChild(option);
option.value = track.trackid;
option.value = ("idx" in track ? track.idx : track.trackid);
if (MistUtil.object.keys(track.different).length) {
option.appendChild(document.createTextNode(orderValues(track.different).join(" ")));
}

View file

@ -676,7 +676,7 @@ var MistUtil = {
}
if (!(track.type in output)) { output[track.type] = {}; }
output[track.type][track.trackid] = track;
output[track.type][("idx" in track ? track.idx : track.trackid)] = track;
//make up something logical for the track displayname
var name = {};

View file

@ -138,7 +138,7 @@ p.prototype.build = function (MistVideo,callback) {
//trackswitching
MistVideo.player.api.setTrack = function(type,id){
var meta = MistUtil.tracks.parse(MistVideo.info.meta.tracks);
if ((!(type in meta)) || ((!(id in meta[type]) && (id != 0)))) {
if ((!(type in meta)) || ((!(id in meta[type]) && (id != "none")))) {
MistVideo.log("Skipping trackselection of "+type+" track "+id+" because it does not exist");
return;
}
@ -157,7 +157,8 @@ p.prototype.build = function (MistVideo,callback) {
MistUtil.array.multiSort(mistTracks,["bps"]);
var n = false;
for (var i in mistTracks) {
if (mistTracks[i].trackid == id) {
var trackid = ("idx" in mistTracks[i] ? mistTracks[i].idx : mistTracks[i].trackid);
if (trackid == id) {
n = i;
break;
}
@ -191,7 +192,7 @@ p.prototype.build = function (MistVideo,callback) {
//sort by bitrate
MistUtil.array.multiSort(mistTracks,["bps"]);
//get mist's id for the track
var id = mistTracks[e.newQuality].trackid;
var id = ("idx" in mistTracks[e.newQuality] ? mistTracks[e.newQuality].idx : mistTracks[e.newQuality].trackid);
//create an event to pass this to the skin
MistUtil.event.send("playerUpdate_trackChanged",{
@ -222,7 +223,8 @@ p.prototype.build = function (MistVideo,callback) {
var dashsubs = me.dash.getTracksFor("text");
for (var i in dashsubs) {
if (dashsubs[i].id == trackmeta.trackid) {
var trackid = ("idx" in trackmeta ? trackmeta.idx : trackmeta.trackid);
if (dashsubs[i].id == trackid) {
me.dash.setTextTrack(i);
if (!me.dash.isTextEnabled()) { me.dash.enableText(); }
return true;