derping around. ugh
This commit is contained in:
parent
1631fdd10f
commit
091a24ee9d
1 changed files with 54 additions and 28 deletions
|
|
@ -318,7 +318,7 @@ function startEncoderDetach(self, cb) {
|
|||
Player.prototype.refreshManualTimeInterval = function() {
|
||||
var self = this;
|
||||
|
||||
var wantManualTime = !self.hardwarePlayback;
|
||||
var wantManualTime = !self.hardwarePlayback && !self.desiredEncoderAttachState;
|
||||
if (wantManualTime && !self.manualTimeInterval) {
|
||||
self.manualTimeInterval = setInterval(checkNowPlaying, 100);
|
||||
} else if (!wantManualTime && self.manualTimeInterval) {
|
||||
|
|
@ -341,14 +341,6 @@ Player.prototype.refreshManualTimeInterval = function() {
|
|||
}
|
||||
};
|
||||
|
||||
Player.prototype.getBufferedByteCount = function() {
|
||||
var total = 0;
|
||||
for (var i = 0; i < this.recentBuffers.length; i += 1) {
|
||||
total += this.recentBuffers[i].buffer.length;
|
||||
}
|
||||
return total;
|
||||
};
|
||||
|
||||
Player.prototype.getBufferedSeconds = function() {
|
||||
if (this.recentBuffers.length < 2) return 0;
|
||||
var curBuf = this.recentBuffers[0];
|
||||
|
|
@ -366,7 +358,6 @@ Player.prototype.getBufferedSeconds = function() {
|
|||
prevBuf = buf;
|
||||
}
|
||||
totalTime += prevBuf.pos - curBuf.pos;
|
||||
console.log("bufferedSeconds", totalTime);
|
||||
return totalTime;
|
||||
};
|
||||
|
||||
|
|
@ -378,33 +369,51 @@ Player.prototype.attachEncoder = function(cb) {
|
|||
if (self.flushEncodedInterval) return cb();
|
||||
|
||||
console.info("first streamer connected - attaching encoder");
|
||||
self.flushEncodedInterval = setInterval(flushEncoded, 10);
|
||||
self.flushEncodedInterval = setInterval(flushEncoded, 20);
|
||||
self.grooveEncoder.on('buffer', onBuffer);
|
||||
self.refreshManualTimeInterval();
|
||||
|
||||
startEncoderAttach(self, cb);
|
||||
|
||||
function onBuffer() {
|
||||
if (!self.desiredEncoderAttachState) return;
|
||||
if (self.hardwarePlayback) return;
|
||||
var encodeHead = self.grooveEncoder.position();
|
||||
var decodeHead = self.groovePlaylist.position();
|
||||
var prevCurrentTrack = self.currentTrack;
|
||||
if (encodeHead.item) {
|
||||
var nowMs = (new Date()).getTime();
|
||||
var posMs = encodeHead.pos * 1000;
|
||||
self.trackStartDate = new Date(nowMs - posMs);
|
||||
self.currentTrack = self.grooveItems[encodeHead.item.id];
|
||||
} else if (!decodeHead.item) {
|
||||
// both play head and decode head are null. end of playlist.
|
||||
console.log("encoder: end of playlist");
|
||||
self.currentTrack = null;
|
||||
}
|
||||
if (prevCurrentTrack !== self.currentTrack) {
|
||||
playlistChanged(self);
|
||||
self.emit('currentTrack');
|
||||
}
|
||||
}
|
||||
|
||||
function flushEncoded() {
|
||||
// get rid of old items
|
||||
var buf;
|
||||
var delCount = 0;
|
||||
while (buf = self.recentBuffers[0]) {
|
||||
var thisBufTrack = self.grooveItems[buf.item.id];
|
||||
if (!thisBufTrack) throw new Error("expected item to exist");
|
||||
if (!thisBufTrack) return;
|
||||
if (thisBufTrack !== self.currentTrack || self.getCurPos() > buf.pos) {
|
||||
delCount += 1;
|
||||
self.recentBuffers.shift();
|
||||
}
|
||||
}
|
||||
console.log("deleted", delCount, "old buffers");
|
||||
// poll the encoder for more buffers until either there are no buffers
|
||||
// available or we get enough buffered
|
||||
var nowPlayingChanged = false;
|
||||
while (self.getBufferedSeconds() < ENCODE_QUEUE_DURATION) {
|
||||
buf = self.grooveEncoder.getBuffer();
|
||||
if (!buf) {
|
||||
console.log("libgroove encoder ran out of buffers. byte count:", self.getBufferedByteCount());
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// poll the encoder for more buffers until either there are no buffers
|
||||
// available or we get enough buffered
|
||||
while (self.getBufferedSeconds() < ENCODE_QUEUE_DURATION) {
|
||||
buf = self.grooveEncoder.getBuffer();
|
||||
if (!buf) break;
|
||||
if (buf.buffer) {
|
||||
if (buf.item) {
|
||||
if (self.expectHeaders) {
|
||||
|
|
@ -414,7 +423,6 @@ Player.prototype.attachEncoder = function(cb) {
|
|||
self.expectHeaders = false;
|
||||
}
|
||||
self.recentBuffers.push(buf);
|
||||
nowPlayingChanged = true;
|
||||
for (var i = 0; i < self.openStreamers.length; i += 1) {
|
||||
self.openStreamers[i].write(buf.buffer);
|
||||
}
|
||||
|
|
@ -449,6 +457,7 @@ Player.prototype.detachEncoder = function(cb) {
|
|||
this.flushEncodedInterval = null;
|
||||
startEncoderDetach(this, cb);
|
||||
this.refreshManualTimeInterval();
|
||||
this.grooveEncoder.removeAllListeners();
|
||||
|
||||
function logIfError(err) {
|
||||
if (err) {
|
||||
|
|
@ -1548,6 +1557,26 @@ function lazyReplayGainScanPlaylist(self) {
|
|||
}
|
||||
|
||||
function playlistChanged(self) {
|
||||
if (self.desiredEncoderAttachState && !self.pendingEncoderAttachDetach && !self.hardwarePlayback) {
|
||||
var encodeHead = self.grooveEncoder.position();
|
||||
var decodeHead = self.groovePlaylist.position();
|
||||
var prevCurrentTrack = self.currentTrack;
|
||||
if (encodeHead.item) {
|
||||
var nowMs = (new Date()).getTime();
|
||||
var posMs = encodeHead.pos * 1000;
|
||||
self.trackStartDate = new Date(nowMs - posMs);
|
||||
self.currentTrack = self.grooveItems[encodeHead.item.id];
|
||||
} else if (!decodeHead.item) {
|
||||
// both play head and decode head are null. end of playlist.
|
||||
console.log("encoder: end of playlist");
|
||||
self.currentTrack = null;
|
||||
}
|
||||
if (prevCurrentTrack !== self.currentTrack) {
|
||||
playlistChanged(self);
|
||||
self.emit('currentTrack');
|
||||
}
|
||||
}
|
||||
|
||||
cacheTracksArray(self);
|
||||
disambiguateSortKeys(self);
|
||||
|
||||
|
|
@ -1615,7 +1644,6 @@ function checkUpdateGroovePlaylist(self) {
|
|||
grooveItem = groovePlaylist[groovePlIndex];
|
||||
if (grooveItem.id === playHeadItemId) break;
|
||||
// this groove playlist item is before the current playhead. delete it!
|
||||
console.log("groovePlaylist remove", grooveItem.file.filename);
|
||||
self.groovePlaylist.remove(grooveItem);
|
||||
delete self.grooveItems[grooveItem.id];
|
||||
groovePlIndex += 1;
|
||||
|
|
@ -1643,7 +1671,6 @@ function checkUpdateGroovePlaylist(self) {
|
|||
}
|
||||
|
||||
// this groove track is wrong. delete it.
|
||||
console.log("groovePlaylist remove", grooveItem.file.filename);
|
||||
self.groovePlaylist.remove(grooveItem);
|
||||
delete self.grooveItems[grooveItem.id];
|
||||
groovePlIndex += 1;
|
||||
|
|
@ -1657,7 +1684,6 @@ function checkUpdateGroovePlaylist(self) {
|
|||
}
|
||||
// compute the gain adjustment
|
||||
grooveItem = self.groovePlaylist.insert(plTrack.grooveFile, calcGain(plTrack));
|
||||
console.log("groovePlaylist insert", grooveItem.file.filename);
|
||||
self.grooveItems[grooveItem.id] = plTrack;
|
||||
currentGrooveItem = currentGrooveItem || grooveItem;
|
||||
incrementPlIndex();
|
||||
|
|
|
|||
Loading…
Reference in a new issue