From fc5d4438f85dd763336a0527ffcc73e518b10e82 Mon Sep 17 00:00:00 2001 From: Yukine Date: Sat, 23 Dec 2017 12:29:06 +0100 Subject: [PATCH] backporting the fix for RTP header extensions (#2185) --- src/client/voice/receiver/VoiceReceiver.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/client/voice/receiver/VoiceReceiver.js b/src/client/voice/receiver/VoiceReceiver.js index c568c6aed..13af9764a 100644 --- a/src/client/voice/receiver/VoiceReceiver.js +++ b/src/client/voice/receiver/VoiceReceiver.js @@ -161,6 +161,25 @@ class VoiceReceiver extends EventEmitter { return; } data = Buffer.from(data); + + // Strip RTP Header Extensions (one-byte only) + if (data[0] === 0xBE && data[1] === 0xDE && data.length > 4) { + const headerExtensionLength = data.readUInt16BE(2); + let offset = 4; + for (let i = 0; i < headerExtensionLength; i++) { + const byte = data[offset]; + offset++; + if (byte === 0) { + continue; + } + offset += 1 + (0b1111 & (byte >> 4)); + } + while (data[offset] === 0) { + offset++; + } + data = data.slice(offset); + } + if (this.opusStreams.get(user.id)) this.opusStreams.get(user.id)._push(data); /** * Emitted whenever voice data is received from the voice connection. This is _always_ emitted (unlike PCM).