Embed: mews: tweaks to the buffer settings
This commit is contained in:
parent
5a6982e093
commit
77b6ac2ec7
2 changed files with 30 additions and 14 deletions
File diff suppressed because one or more lines are too long
|
@ -408,9 +408,25 @@ p.prototype.build = function (MistVideo,callback) {
|
|||
case "on_time": {
|
||||
var buffer = msg.data.current - video.currentTime*1e3;
|
||||
var serverDelay = player.ws.serverDelay.get();
|
||||
var desiredBuffer = Math.max(500+serverDelay,serverDelay*2);
|
||||
var desiredBuffer = Math.max(100+serverDelay,serverDelay*2);
|
||||
var desiredBufferwithJitter = desiredBuffer+(msg.data.jitter ? msg.data.jitter : 0);
|
||||
|
||||
|
||||
if (MistVideo.info.type != "live") { desiredBuffer += 2000; } //if VoD, keep an extra 2 seconds of buffer
|
||||
if (player.debugging) console.log("on_time received",msg.data.current/1e3,"currtime",video.currentTime,requested_rate+"x","buffer",Math.round(buffer),"/",Math.round(desiredBuffer),(MistVideo.info.type == "live" ? "latency:"+Math.round(msg.data.end-video.currentTime*1e3)+"ms" : ""),"bitrate:"+MistUtil.format.bits(player.monitor.currentBps)+"/s","listeners",player.ws.listeners && player.ws.listeners.on_time ? player.ws.listeners.on_time : 0,"msgqueue",player.msgqueue ? player.msgqueue.length : 0,msg.data);
|
||||
|
||||
if (player.debugging) {
|
||||
console.log(
|
||||
"on_time received", msg.data.current/1e3,
|
||||
"currtime", video.currentTime,
|
||||
requested_rate+"x",
|
||||
"buffer",Math.round(buffer),"/",Math.round(desiredBuffer),
|
||||
(MistVideo.info.type == "live" ? "latency:"+Math.round(msg.data.end-video.currentTime*1e3)+"ms" : ""),
|
||||
(player.monitor ? "bitrate:"+MistUtil.format.bits(player.monitor.currentBps)+"/s" : ""),
|
||||
"listeners",player.ws.listeners && player.ws.listeners.on_time ? player.ws.listeners.on_time : 0,
|
||||
"msgqueue",player.msgqueue ? player.msgqueue.length : 0,
|
||||
"readyState",MistVideo.video.readyState,msg.data
|
||||
);
|
||||
}
|
||||
|
||||
if (!player.sb) {
|
||||
MistVideo.log("Received on_time, but the source buffer is being cleared right now. Ignoring.");
|
||||
|
@ -429,32 +445,32 @@ p.prototype.build = function (MistVideo,callback) {
|
|||
if (msg.data.play_rate_curr == "auto") {
|
||||
if (video.currentTime > 0) { //give it some time to seek to live first when starting up
|
||||
//assume we want to be as live as possible
|
||||
if (buffer - desiredBuffer > desiredBuffer) {
|
||||
requested_rate = 1.1 + Math.min(1,((buffer-desiredBuffer)/desiredBuffer))*0.15;
|
||||
if (buffer > desiredBufferwithJitter*2) {
|
||||
requested_rate = 1 + Math.min(1,((buffer-desiredBufferwithJitter)/desiredBufferwithJitter))*0.08;
|
||||
video.playbackRate *= requested_rate;
|
||||
MistVideo.log("Our buffer is big, so increase the playback speed to catch up.");
|
||||
MistVideo.log("Our buffer ("+Math.round(buffer)+"ms) is big (>"+Math.round(desiredBufferwithJitter*2)+"ms), so increase the playback speed to "+(Math.round(requested_rate*100)/100)+" to catch up.");
|
||||
}
|
||||
else if (buffer < desiredBuffer/2) {
|
||||
requested_rate = 0.9;
|
||||
requested_rate = 1 + Math.min(1,((buffer-desiredBuffer)/desiredBuffer))*0.08;
|
||||
video.playbackRate *= requested_rate;
|
||||
MistVideo.log("Our buffer is small, so decrease the playback speed to catch up.");
|
||||
MistVideo.log("Our buffer ("+Math.round(buffer)+"ms) is small (<"+Math.round(desiredBuffer/2)+"ms), so decrease the playback speed to "+(Math.round(requested_rate*100)/100)+" to catch up.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (requested_rate > 1) {
|
||||
if (buffer < desiredBuffer) {
|
||||
if (buffer < desiredBufferwithJitter) {
|
||||
video.playbackRate /= requested_rate;
|
||||
requested_rate = 1;
|
||||
MistVideo.log("Our buffer is small enough, so return to real time playback.");
|
||||
MistVideo.log("Our buffer ("+Math.round(buffer)+"ms) is small enough (<"+Math.round(desiredBufferwithJitter)+"ms), so return to real time playback.");
|
||||
}
|
||||
}
|
||||
else {
|
||||
//requested rate < 1
|
||||
if (buffer > desiredBuffer) {
|
||||
if (buffer > desiredBufferwithJitter) {
|
||||
video.playbackRate /= requested_rate;
|
||||
requested_rate = 1;
|
||||
MistVideo.log("Our buffer is big enough, so return to real time playback.");
|
||||
MistVideo.log("Our buffer ("+Math.round(buffer)+"ms) is big enough (>"+Math.round(desiredBufferwithJitter)+"ms), so return to real time playback.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -465,7 +481,7 @@ p.prototype.build = function (MistVideo,callback) {
|
|||
if (buffer < desiredBuffer/2) {
|
||||
if (buffer < -10e3) {
|
||||
//seek to play point
|
||||
send({type: "seek", seek_time: video.currentTime*1e3});
|
||||
send({type: "seek", seek_time: Math.round(video.currentTime*1e3)});
|
||||
}
|
||||
else {
|
||||
//negative buffer? ask for faster delivery
|
||||
|
@ -841,7 +857,7 @@ p.prototype.build = function (MistVideo,callback) {
|
|||
},
|
||||
set: function(value){
|
||||
MistUtil.event.send("seeking",value,video);
|
||||
send({type: "seek", seek_time: Math.max(0,value*1e3-(250+player.ws.serverDelay.get()))}); //safety margin for server latency
|
||||
send({type: "seek", seek_time: Math.round(Math.max(0,value*1e3-(250+player.ws.serverDelay.get())))}); //safety margin for server latency
|
||||
//set listener "seek"
|
||||
var onseek = function(e){
|
||||
player.ws.removeListener("seek",onseek);
|
||||
|
|
Loading…
Add table
Reference in a new issue