Embed: webrtc play promise, webrtc options.setTracks fix
This commit is contained in:
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
|
@ -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.";
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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(){
|
||||||
|
|
|
@ -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) {
|
||||||
if ((!me.webrtc.isConnected) || (me.webrtc.peerConn.iceConnectionState != "completed")) {
|
var p = new Promise(function(resolve,reject){
|
||||||
me.webrtc.connect(function(){
|
if ((!me.webrtc.isConnected) || (me.webrtc.peerConn.iceConnectionState != "completed")) {
|
||||||
me.webrtc.seek(me.api.currentTime);
|
me.webrtc.connect(function(){
|
||||||
});
|
me.webrtc.seek(me.api.currentTime).then(function(msg){
|
||||||
}
|
resolve("played "+msg);
|
||||||
else {
|
}).catch(function(msg){
|
||||||
me.webrtc.seek(me.api.currentTime);
|
reject(msg);
|
||||||
}
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
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){
|
||||||
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() {
|
function correctSubtitleSync() {
|
||||||
if (!me.api.textTracks[0]) { return; }
|
if (!me.api.textTracks[0]) { return; }
|
||||||
|
|
Loading…
Add table
Reference in a new issue