Embed: allow options.setTracks to set subtitles

This commit is contained in:
Cat 2019-02-18 13:56:27 +01:00 committed by Thulinma
parent b5750a5de7
commit 06eb78c345
5 changed files with 128 additions and 61 deletions

File diff suppressed because one or more lines are too long

View file

@ -782,21 +782,68 @@ function MistVideo(streamName,options) {
}
if (options.setTracks) {
if ("setTrack" in MistVideo.player.api) {
MistVideo.player.onready(function(){
for (var i in options.setTracks) {
MistVideo.player.api.setTrack(i,options.setTracks[i]);
}
if (options.setTracks) {
var setTracks = MistUtil.object.extend({},options.setTracks);
if (("subtitle" in options.setTracks) && ("setSubtitle" in MistVideo.player.api)) {
MistVideo.player.onready(function(){
//find the source for subtitles
var subtitleSource = false;
for (var i in MistVideo.info.source) {
var source = MistVideo.info.source[i];
//this is a subtitle source, and it's the same protocol (HTTP/HTTPS) as the video source
if ((source.type == "html5/text/vtt") && (MistUtil.http.url.split(source.url).protocol == MistUtil.http.url.split(MistVideo.source.url).protocol)) {
subtitleSource = source.url.replace(/.srt$/,".vtt");
break;
}
});
}
else if ("setTracks" in MistVideo.player.api) {
MistVideo.player.onready(function(){
MistVideo.player.api.setTracks(options.setTracks);
});
}
}
if (!subtitleSource) { return; }
//find the track meta information
var tracks = MistUtil.tracks.parse(MistVideo.info.meta.tracks);
if (!("subtitle" in tracks) || !(setTracks.subtitle in tracks.subtitle)) { return; }
meta = tracks.subtitle[setTracks.subtitle];
//add source to the meta
meta.src = MistUtil.http.url.addParam(subtitleSource,{track:setTracks.subtitle});
meta.label = "automatic";
meta.lang = "unknown";
MistVideo.player.api.setSubtitle(meta);
MistUtil.event.send("playerUpdate_trackChanged",{
type: "subtitle",
trackid: setTracks.subtitle
}, MistVideo.video);
delete setTracks.subtitle;
});
}
if ("setTrack" in MistVideo.player.api) {
MistVideo.player.onready(function(){
for (var i in setTracks) {
MistVideo.player.api.setTrack(i,setTracks[i]);
MistUtil.event.send("playerUpdate_trackChanged",{
type: i,
trackid: setTracks[i]
}, MistVideo.video);
}
});
}
else if ("setTracks" in MistVideo.player.api) {
MistVideo.player.onready(function(){
MistVideo.player.api.setTracks(setTracks);
});
for (var i in setTracks) {
MistUtil.event.send("playerUpdate_trackChanged",{
type: i,
trackid: setTracks[i]
}, MistVideo.video);
}
}
}
}

View file

@ -1292,23 +1292,23 @@ MistSkins["default"] = {
return MistVideo.player.api.setTrack(type,value);
}
else {
//gather what tracks we should use
var usetracks = {};
for (var i in selections) {
if ((i == "subtitle") || (selections[i].value == "")) { continue; } //subtitle tracks are handled seperately
usetracks[i] = selections[i].value;
}
if (value != ""){ usetracks[type] = value; }
//use setTracks
if ("setTracks" in MistVideo.player.api) {
return MistVideo.player.api.setTracks(usetracks);
}
//use setSource
if ("setSource" in MistVideo.player.api) {
return MistVideo.player.api.setSource(
MistUtil.http.url.addParam(MistVideo.source.url,usetracks)
);
}
//gather what tracks we should use
var usetracks = {};
for (var i in selections) {
if ((i == "subtitle") || (selections[i].value == "")) { continue; } //subtitle tracks are handled seperately
usetracks[i] = selections[i].value;
}
if (value != ""){ usetracks[type] = value; }
//use setTracks
if ("setTracks" in MistVideo.player.api) {
return MistVideo.player.api.setTracks(usetracks);
}
//use setSource
if ("setSource" in MistVideo.player.api) {
return MistVideo.player.api.setSource(
MistUtil.http.url.addParam(MistVideo.source.url,usetracks)
);
}
}
}
@ -1463,8 +1463,12 @@ MistSkins["default"] = {
//add options to the select
function n(str) {
if (str == "") { return -1; }
return Number(str);
}
var options = MistUtil.object.keys(t,function(a,b){
return Number(a) - Number(b);
return n(a) - n(b);
}); //sort them
for (var i in options) {
var track = t[options[i]];
@ -1479,6 +1483,15 @@ MistSkins["default"] = {
option.appendChild(document.createTextNode("Track "+(Number(i)+1)));
}
}
MistUtil.event.addListener(MistVideo.video,"playerUpdate_trackChanged",function(e){
if (e.message.type != type) { return; }
select.value = e.message.trackid;
MistVideo.log("Player selected "+type+" track with id "+e.message.trackid);
},select);
if (type == "subtitle") {
MistUtil.event.addListener(select,"change",function(){
try {
@ -1538,13 +1551,6 @@ MistSkins["default"] = {
}
*/
MistUtil.event.addListener(MistVideo.video,"playerUpdate_trackChanged",function(e){
if (e.message.type != type) { return; }
select.value = e.message.trackid;
MistVideo.log("Player selected "+type+" track with id "+e.message.trackid);
},select);
}
}
else {