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..";
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'..";
terser -mc -o min/player.js -- util.js skins.js controls.js player.js
fi
#fi
echo " Done.";
echo " Minimizing wrappers.."
if elementIn "embed/wrappers/dashjs.js" "${CHANGES[@]}"; then
#if elementIn "embed/wrappers/dashjs.js" "${CHANGES[@]}"; then
echo " Minimizing dashjs";
terser -mn -o min/wrappers/dashjs.js -- wrappers/dashjs.js
fi
if elementIn "embed/wrappers/flash_strobe.js" "${CHANGES[@]}"; then
#fi
#if elementIn "embed/wrappers/flash_strobe.js" "${CHANGES[@]}"; then
echo " Minimizing flash_strobe";
terser -mn -o min/wrappers/flash_strobe.js -- wrappers/flash_strobe.js
fi
if elementIn "embed/wrappers/html5.js" "${CHANGES[@]}"; then
#fi
#if elementIn "embed/wrappers/html5.js" "${CHANGES[@]}"; then
echo " Minimizing html5";
terser -mn -o min/wrappers/html5.js -- wrappers/html5.js
fi
if elementIn "embed/wrappers/videojs.js" "${CHANGES[@]}"; then
#fi
#if elementIn "embed/wrappers/videojs.js" "${CHANGES[@]}"; then
echo " Minimizing videojs";
terser -mn -o min/wrappers/videojs.js -- wrappers/videojs.js
fi
if elementIn "embed/wrappers/webrtc.js" "${CHANGES[@]}"; then
#fi
#if elementIn "embed/wrappers/webrtc.js" "${CHANGES[@]}"; then
echo " Minimizing webrtc";
terser -mn -o min/wrappers/webrtc.js -- wrappers/webrtc.js
fi
#fi
echo " Done.";
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";
cleancss --format keep-breaks -o min/skins/default.css skins/general.css skins/default.css
fi
if elementIn "embed/skins/default.css" "${CHANGES[@]}" || elementIn "embed/skins/general.css" "${CHANGES[@]}" || elementIn "embed/skins/dev.css" "${CHANGES[@]}"; then
#fi
#if elementIn "embed/skins/default.css" "${CHANGES[@]}" || elementIn "embed/skins/general.css" "${CHANGES[@]}" || elementIn "embed/skins/dev.css" "${CHANGES[@]}"; then
echo " Minimizing dev";
cleancss --format keep-breaks -o min/skins/dev.css skins/general.css skins/default.css skins/dev.css
fi
#fi
echo " Done.";
echo "Done.";

View file

@ -727,7 +727,7 @@ function MistVideo(streamName,options) {
};
//add track selection function
if (!("setTrack" in MistVideo.player.api)) {
if (!("setTracks" in MistVideo.player.api)) {
MistVideo.player.api.setTracks = function(usetracks){
//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) {

View file

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

View file

@ -73,8 +73,10 @@ p.prototype.build = function (MistVideo,callback) {
seekoffset = 0;
hasended = false;
this.webrtc.play();
MistUtil.event.send("webrtc_connected",null,video);
},
on_disconnected: function() {
MistUtil.event.send("webrtc_disconnected",null,video);
MistVideo.log("Websocket sent 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;
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(){
var thisPlayer = this;
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(){
MistVideo.log("Websocket sent on_stop");
@ -185,8 +227,25 @@ p.prototype.build = function (MistVideo,callback) {
this.signaling.send({type: "stop"});
};
this.seek = function(seekTime){
if (!this.isConnected) { return; }
this.signaling.send({type: "seek", "seek_time": seekTime*1e3});
var p = new Promise(function(resolve,reject){
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(){
if (!this.isConnected) { throw "Not connected, cannot pause." }
@ -265,6 +324,7 @@ p.prototype.build = function (MistVideo,callback) {
//override video duration
var duration;
var currenttracks = [];
Object.defineProperty(this.api,"duration",{
get: function(){ return duration; }
});
@ -322,17 +382,28 @@ p.prototype.build = function (MistVideo,callback) {
//redirect play
me.api.play = function(){
if (me.api.currentTime) {
if ((!me.webrtc.isConnected) || (me.webrtc.peerConn.iceConnectionState != "completed")) {
me.webrtc.connect(function(){
me.webrtc.seek(me.api.currentTime);
});
}
else {
me.webrtc.seek(me.api.currentTime);
}
var p = new Promise(function(resolve,reject){
if ((!me.webrtc.isConnected) || (me.webrtc.peerConn.iceConnectionState != "completed")) {
me.webrtc.connect(function(){
me.webrtc.seek(me.api.currentTime).then(function(msg){
resolve("played "+msg);
}).catch(function(msg){
reject(msg);
});
});
}
else {
me.webrtc.seek(me.api.currentTime).then(function(msg){
resolve("played "+msg);
}).catch(function(msg){
reject(msg);
});
}
});
return p;
}
else {
video.play();
return video.play();
}
};
@ -347,7 +418,16 @@ p.prototype.build = function (MistVideo,callback) {
};
me.api.setTracks = function(obj){
me.webrtc.setTrack(obj);
if (me.webrtc.isConnected) {
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() {
if (!me.api.textTracks[0]) { return; }