Embed: webrtc play promise, webrtc options.setTracks fix

This commit is contained in:
Cat 2019-03-21 14:53:34 +01:00
parent 070ba94f50
commit 5c7c2bd801
6 changed files with 126 additions and 36 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -14,45 +14,45 @@ echo "Minimizing player code..";
echo " Minimizing JS.."; echo " Minimizing JS..";
if elementIn "embed/util.js" "${CHANGES[@]}" || elementIn "embed/skins.js" "${CHANGES[@]}" || elementIn "embed/controls.js" "${CHANGES[@]}" || elementIn "embed/player.js" "${CHANGES[@]}" ; then # if elementIn "embed/util.js" "${CHANGES[@]}" || elementIn "embed/skins.js" "${CHANGES[@]}" || elementIn "embed/controls.js" "${CHANGES[@]}" || elementIn "embed/player.js" "${CHANGES[@]}" ; then
echo " Minimizing 'util.js skins.js controls.js player.js' into 'min/player.js'.."; echo " Minimizing 'util.js skins.js controls.js player.js' into 'min/player.js'..";
terser -mc -o min/player.js -- util.js skins.js controls.js player.js terser -mc -o min/player.js -- util.js skins.js controls.js player.js
fi #fi
echo " Done."; echo " Done.";
echo " Minimizing wrappers.." echo " Minimizing wrappers.."
if elementIn "embed/wrappers/dashjs.js" "${CHANGES[@]}"; then #if elementIn "embed/wrappers/dashjs.js" "${CHANGES[@]}"; then
echo " Minimizing dashjs"; echo " Minimizing dashjs";
terser -mn -o min/wrappers/dashjs.js -- wrappers/dashjs.js terser -mn -o min/wrappers/dashjs.js -- wrappers/dashjs.js
fi #fi
if elementIn "embed/wrappers/flash_strobe.js" "${CHANGES[@]}"; then #if elementIn "embed/wrappers/flash_strobe.js" "${CHANGES[@]}"; then
echo " Minimizing flash_strobe"; echo " Minimizing flash_strobe";
terser -mn -o min/wrappers/flash_strobe.js -- wrappers/flash_strobe.js terser -mn -o min/wrappers/flash_strobe.js -- wrappers/flash_strobe.js
fi #fi
if elementIn "embed/wrappers/html5.js" "${CHANGES[@]}"; then #if elementIn "embed/wrappers/html5.js" "${CHANGES[@]}"; then
echo " Minimizing html5"; echo " Minimizing html5";
terser -mn -o min/wrappers/html5.js -- wrappers/html5.js terser -mn -o min/wrappers/html5.js -- wrappers/html5.js
fi #fi
if elementIn "embed/wrappers/videojs.js" "${CHANGES[@]}"; then #if elementIn "embed/wrappers/videojs.js" "${CHANGES[@]}"; then
echo " Minimizing videojs"; echo " Minimizing videojs";
terser -mn -o min/wrappers/videojs.js -- wrappers/videojs.js terser -mn -o min/wrappers/videojs.js -- wrappers/videojs.js
fi #fi
if elementIn "embed/wrappers/webrtc.js" "${CHANGES[@]}"; then #if elementIn "embed/wrappers/webrtc.js" "${CHANGES[@]}"; then
echo " Minimizing webrtc"; echo " Minimizing webrtc";
terser -mn -o min/wrappers/webrtc.js -- wrappers/webrtc.js terser -mn -o min/wrappers/webrtc.js -- wrappers/webrtc.js
fi #fi
echo " Done."; echo " Done.";
echo " Minimizing CSS.."; echo " Minimizing CSS..";
if elementIn "embed/skins/default.css" "${CHANGES[@]}" || elementIn "embed/skins/general.css" "${CHANGES[@]}"; then #if elementIn "embed/skins/default.css" "${CHANGES[@]}" || elementIn "embed/skins/general.css" "${CHANGES[@]}"; #then
echo " Minimizing default"; echo " Minimizing default";
cleancss --format keep-breaks -o min/skins/default.css skins/general.css skins/default.css cleancss --format keep-breaks -o min/skins/default.css skins/general.css skins/default.css
fi #fi
if elementIn "embed/skins/default.css" "${CHANGES[@]}" || elementIn "embed/skins/general.css" "${CHANGES[@]}" || elementIn "embed/skins/dev.css" "${CHANGES[@]}"; then #if elementIn "embed/skins/default.css" "${CHANGES[@]}" || elementIn "embed/skins/general.css" "${CHANGES[@]}" || elementIn "embed/skins/dev.css" "${CHANGES[@]}"; then
echo " Minimizing dev"; echo " Minimizing dev";
cleancss --format keep-breaks -o min/skins/dev.css skins/general.css skins/default.css skins/dev.css cleancss --format keep-breaks -o min/skins/dev.css skins/general.css skins/default.css skins/dev.css
fi #fi
echo " Done."; echo " Done.";
echo "Done."; echo "Done.";

View file

@ -727,7 +727,7 @@ function MistVideo(streamName,options) {
}; };
//add track selection function //add track selection function
if (!("setTrack" in MistVideo.player.api)) { if (!("setTracks" in MistVideo.player.api)) {
MistVideo.player.api.setTracks = function(usetracks){ MistVideo.player.api.setTracks = function(usetracks){
//check tracks exist //check tracks exist
@ -782,6 +782,15 @@ function MistVideo(streamName,options) {
} }
}
//add general setTracks function if setTrack exists
if (!("setTracks" in MistVideo.player.api) && ("setTrack" in MistVideo.player.api)) {
MistVideo.player.api.setTracks = function(usetracks){
for (var i in usetracks) {
MistVideo.player.api.setTrack(i,usetracks[i]);
}
};
} }
if (options.setTracks) { if (options.setTracks) {

View file

@ -91,12 +91,13 @@ MistSkins["default"] = {
children: [{ children: [{
type: "volume", type: "volume",
mode: "horizontal", mode: "horizontal",
size: {height: 22} size: {height: 22},
classes: ["mistvideo-pointer"]
}] }]
}, },
{ {
type: "speaker", type: "speaker",
classse: ["mistvideo-pointer"], classes: ["mistvideo-pointer"],
style: {"margin-left": "-2px"} style: {"margin-left": "-2px"}
} }
] ]
@ -129,7 +130,7 @@ MistSkins["default"] = {
show: "right: 5px;", show: "right: 5px;",
viewport: "right: 0; left: 0; bottom: 0; top: -1000px" viewport: "right: 0; left: 0; bottom: 0; top: -1000px"
}, },
button: {type: "settings"}, button: {type: "settings", classes: ["mistvideo-pointer"]},
window: {type: "submenu"} window: {type: "submenu"}
} }
]} ]}
@ -1190,7 +1191,7 @@ MistSkins["default"] = {
}, },
settings: function(){ settings: function(){
var button = this.skin.icons.build("settings"); var button = this.skin.icons.build("settings");
button.setAttribute("onclick","");
return button; return button;
}, },
loop: function(){ loop: function(){

View file

@ -73,8 +73,10 @@ p.prototype.build = function (MistVideo,callback) {
seekoffset = 0; seekoffset = 0;
hasended = false; hasended = false;
this.webrtc.play(); this.webrtc.play();
MistUtil.event.send("webrtc_connected",null,video);
}, },
on_disconnected: function() { on_disconnected: function() {
MistUtil.event.send("webrtc_disconnected",null,video);
MistVideo.log("Websocket sent on_disconnect"); MistVideo.log("Websocket sent on_disconnect");
/* /*
If a VoD file ends, we receive an on_stop, but no on_disconnect If a VoD file ends, we receive an on_stop, but no on_disconnect
@ -105,10 +107,50 @@ p.prototype.build = function (MistVideo,callback) {
duration = d; duration = d;
MistUtil.event.send("durationchange",d,video); MistUtil.event.send("durationchange",d,video);
} }
if (currenttracks != ev.tracks) {
var tracks = MistUtil.tracks.parse(MistVideo.info.meta.tracks);
for (var i in ev.tracks) {
if (currenttracks.indexOf(ev.tracks[i]) < 0) {
//find track type
var type;
for (var j in tracks) {
if (ev.tracks[i] in tracks[j]) {
type = j;
break;
}
}
if (!type) {
//track type not found, this should not happen
continue;
}
//create an event to pass this to the skin
MistUtil.event.send("playerUpdate_trackChanged",{
type: type,
trackid: ev.tracks[i]
},MistVideo.video);
}
}
currenttracks = ev.tracks;
}
}, },
on_seek: function(){ on_seek: function(){
var thisPlayer = this;
MistUtil.event.send("seeked",seekoffset,video); MistUtil.event.send("seeked",seekoffset,video);
video.play(); if ("seekPromise" in this.webrtc.signaling){
video.play().then(function(){
if ("seekPromise" in thisPlayer.webrtc.signaling) {
thisPlayer.webrtc.signaling.seekPromise.resolve("Play promise resolved");
}
}).catch(function(){
if ("seekPromise" in thisPlayer.webrtc.signaling) {
thisPlayer.webrtc.signaling.seekPromise.reject("Play promise rejected");
}
});
}
else { video.play(); }
}, },
on_stop: function(){ on_stop: function(){
MistVideo.log("Websocket sent on_stop"); MistVideo.log("Websocket sent on_stop");
@ -185,8 +227,25 @@ p.prototype.build = function (MistVideo,callback) {
this.signaling.send({type: "stop"}); this.signaling.send({type: "stop"});
}; };
this.seek = function(seekTime){ this.seek = function(seekTime){
if (!this.isConnected) { return; } var p = new Promise(function(resolve,reject){
this.signaling.send({type: "seek", "seek_time": seekTime*1e3}); if (!thisWebRTCPlayer.isConnected || !thisWebRTCPlayer.signaling) { return reject("Failed seek: not connected"); }
thisWebRTCPlayer.signaling.send({type: "seek", "seek_time": seekTime*1e3});
if ("seekPromise" in thisWebRTCPlayer.signaling) {
thisWebRTCPlayer.signaling.seekPromise.reject("Doing new seek");
}
thisWebRTCPlayer.signaling.seekPromise = {
resolve: function(msg){
resolve("seeked");
delete thisWebRTCPlayer.signaling.seekPromise;
},
reject: function(msg) {
reject("Failed to seek: "+msg);
delete thisWebRTCPlayer.signaling.seekPromise;
}
};
});
return p;
}; };
this.pause = function(){ this.pause = function(){
if (!this.isConnected) { throw "Not connected, cannot pause." } if (!this.isConnected) { throw "Not connected, cannot pause." }
@ -265,6 +324,7 @@ p.prototype.build = function (MistVideo,callback) {
//override video duration //override video duration
var duration; var duration;
var currenttracks = [];
Object.defineProperty(this.api,"duration",{ Object.defineProperty(this.api,"duration",{
get: function(){ return duration; } get: function(){ return duration; }
}); });
@ -322,17 +382,28 @@ p.prototype.build = function (MistVideo,callback) {
//redirect play //redirect play
me.api.play = function(){ me.api.play = function(){
if (me.api.currentTime) { if (me.api.currentTime) {
var p = new Promise(function(resolve,reject){
if ((!me.webrtc.isConnected) || (me.webrtc.peerConn.iceConnectionState != "completed")) { if ((!me.webrtc.isConnected) || (me.webrtc.peerConn.iceConnectionState != "completed")) {
me.webrtc.connect(function(){ me.webrtc.connect(function(){
me.webrtc.seek(me.api.currentTime); me.webrtc.seek(me.api.currentTime).then(function(msg){
resolve("played "+msg);
}).catch(function(msg){
reject(msg);
});
}); });
} }
else { else {
me.webrtc.seek(me.api.currentTime); me.webrtc.seek(me.api.currentTime).then(function(msg){
resolve("played "+msg);
}).catch(function(msg){
reject(msg);
});
} }
});
return p;
} }
else { else {
video.play(); return video.play();
} }
}; };
@ -347,7 +418,16 @@ p.prototype.build = function (MistVideo,callback) {
}; };
me.api.setTracks = function(obj){ me.api.setTracks = function(obj){
if (me.webrtc.isConnected) {
me.webrtc.setTrack(obj); me.webrtc.setTrack(obj);
}
else {
var f = function(){
me.webrtc.setTrack(obj);
MistUtil.event.removeListener({type: "webrtc_connected", callback: f, element: video});
};
MistUtil.event.addListener(video,"webrtc_connected",f);
}
}; };
function correctSubtitleSync() { function correctSubtitleSync() {
if (!me.api.textTracks[0]) { return; } if (!me.api.textTracks[0]) { return; }