Merge pull request #109 from meew0/master

Add opus sanity check
This commit is contained in:
Amish Shah
2015-12-29 11:08:32 +00:00
2 changed files with 24 additions and 0 deletions

View File

@@ -15,6 +15,22 @@ export default class AudioEncoder {
this.opus = new opus.OpusEncoder(48000, 2); this.opus = new opus.OpusEncoder(48000, 2);
} }
this.choice = false; this.choice = false;
this.sanityCheckPassed = undefined;
}
sanityCheck() {
var _opus = this.opus;
var encodeZeroes = function() {
try {
var zeroes = new Buffer(1920);
zeroes.fill(0);
return _opus.encode(zeroes, 1920).readUIntBE(0, 3);
} catch(err) {
return false;
}
};
if(this.sanityCheckPassed === undefined) this.sanityCheckPassed = (encodeZeroes() === 16056318);
return this.sanityCheckPassed;
} }
opusBuffer(buffer) { opusBuffer(buffer) {

View File

@@ -189,6 +189,14 @@ export default class VoiceConnection extends EventEmitter {
self.client.emit("debug", "Tried to use node-opus, but opus not available - install it!"); self.client.emit("debug", "Tried to use node-opus, but opus not available - install it!");
return; return;
} }
if (!self.encoder.sanityCheck()) {
self.playing = false;
self.emit("error", "Opus sanity check failed!");
self.client.emit("debug", "Opus sanity check failed - opus is installed but not correctly! Please reinstall opus and make sure it's installed correctly.");
return;
}
var buffer = self.encoder.opusBuffer(rawbuffer); var buffer = self.encoder.opusBuffer(rawbuffer);
var packet = new VoicePacket(buffer, sequence, timestamp, self.vWSData.ssrc); var packet = new VoicePacket(buffer, sequence, timestamp, self.vWSData.ssrc);
return self.sendPacket(packet, callback); return self.sendPacket(packet, callback);