Embed: mews: ABR

This commit is contained in:
Cat 2021-05-31 14:31:04 +02:00 committed by Thulinma
parent 7ecb799d94
commit d9d72aab99
4 changed files with 61 additions and 8 deletions

View file

@ -367,6 +367,7 @@ p.prototype.build = function (MistVideo,callback) {
//the last fragment has been added to the buffer
var eObj;
eObj = MistUtil.event.addListener(video,"waiting",function(e){
player.sb.paused = true;
MistUtil.event.send("ended",null,video);
MistUtil.event.removeListener(eObj);
});
@ -378,7 +379,7 @@ p.prototype.build = function (MistVideo,callback) {
var serverDelay = player.ws.serverDelay.get();
var desiredBuffer = Math.max(500+serverDelay,serverDelay*2);
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" : ""),"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" : ""),"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.sb) {
MistVideo.log("Received on_time, but the source buffer is being cleared right now. Ignoring.");
@ -605,6 +606,9 @@ p.prototype.build = function (MistVideo,callback) {
}
var data = new Uint8Array(e.data);
if (data) {
for (var i in player.monitor.bitCounter) {
player.monitor.bitCounter[i] += e.data.byteLength*8;
}
if ((player.sb) && (!player.msgqueue)) {
if (player.sb.updating || player.sb.queue.length || player.sb._busy) {
player.sb.queue.push(data);
@ -776,8 +780,6 @@ p.prototype.build = function (MistVideo,callback) {
obj.type = "tracks";
obj = MistUtil.object.extend({
type: "tracks",
audio: null,
video: null,
seek_time: Math.max(0,video.currentTime*1e3-(500+player.ws.serverDelay.get()))
},obj);
send(obj);
@ -935,4 +937,54 @@ p.prototype.build = function (MistVideo,callback) {
});
}
//ABR: monitor playback issues and switch to lower bitrate track if available
this.monitor = {
bitCounter: [],
bitsSince: [],
currentBps: null,
nWaiting: 0,
nWaitingThreshold: 3,
listener: MistUtil.event.addListener(video,"waiting",function(){
player.monitor.nWaiting++;
if (player.monitor.nWaiting >= player.monitor.nWaitingThreshold) {
player.monitor.nWaiting = 0;
MistVideo.log("ABR threshold triggered, requesting lower quality");
player.monitor.action();
}
}),
getBitRate: function(){
if (player.sb && !player.sb.paused) {
this.bitCounter.push(0);
this.bitsSince.push(new Date().getTime());
//calculate current bitrate
var bits, since;
if (this.bitCounter.length > 5) {
bits = player.monitor.bitCounter.shift();
since = this.bitsSince.shift();
}
else {
bits = player.monitor.bitCounter[0];
since = this.bitsSince[0];
}
var dt = new Date().getTime() - since;
this.currentBps = bits / (dt*1e-3);
//console.log(MistUtil.format.bytes(this.currentBps)+"its/s");
}
MistVideo.timers.start(function(){
player.monitor.getBitRate();
},500);
},
action: function(){
player.api.setTracks({video:"max<"+Math.round(this.currentBps)+"bps"});
}
};
this.monitor.getBitRate();
};