Support more incoming RTP packets types
This commit is contained in:
@@ -29,8 +29,7 @@ namespace Discord.Audio.Streams
|
||||
{
|
||||
cancelToken.ThrowIfCancellationRequested();
|
||||
|
||||
if (buffer[offset + 0] != 0x80 || buffer[offset + 1] != 0x78)
|
||||
return;
|
||||
int headerSize = GetHeaderSize(buffer, offset);
|
||||
|
||||
ushort seq = (ushort)((buffer[offset + 2] << 8) |
|
||||
(buffer[offset + 3] << 0));
|
||||
@@ -41,16 +40,21 @@ namespace Discord.Audio.Streams
|
||||
(buffer[offset + 7] << 0));
|
||||
|
||||
_queue.WriteHeader(seq, timestamp);
|
||||
await (_next ?? _queue as Stream).WriteAsync(buffer, offset + 12, count - 12, cancelToken).ConfigureAwait(false);
|
||||
await (_next ?? _queue as Stream).WriteAsync(buffer, offset + headerSize, count - headerSize, cancelToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public static bool TryReadSsrc(byte[] buffer, int offset, out uint ssrc)
|
||||
{
|
||||
ssrc = 0;
|
||||
if (buffer.Length - offset < 12)
|
||||
{
|
||||
ssrc = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
int version = (buffer[offset + 0] & 0b1100_0000) >> 6;
|
||||
if (version != 2)
|
||||
return false;
|
||||
int type = (buffer[offset + 1] & 0b01111_1111);
|
||||
if (type != 120) //Dynamic Discord type
|
||||
return false;
|
||||
|
||||
ssrc = (uint)((buffer[offset + 8] << 24) |
|
||||
(buffer[offset + 9] << 16) |
|
||||
@@ -58,5 +62,21 @@ namespace Discord.Audio.Streams
|
||||
(buffer[offset + 11] << 0));
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int GetHeaderSize(byte[] buffer, int offset)
|
||||
{
|
||||
byte headerByte = buffer[offset];
|
||||
bool extension = (headerByte & 0b0001_0000) != 0;
|
||||
int csics = (headerByte & 0b0000_1111) >> 4;
|
||||
|
||||
if (!extension)
|
||||
return 12 + csics * 4;
|
||||
|
||||
int extensionOffset = offset + 12 + (csics * 4);
|
||||
int extensionLength =
|
||||
(buffer[extensionOffset + 2] << 8) |
|
||||
(buffer[extensionOffset + 3]);
|
||||
return extensionOffset + 4 + (extensionLength * 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user