Browse Source

please pass

pull/101/head
Dan 7 years ago
parent
commit
da8c721f1c
  1. 10
      disco/voice/client.py
  2. 63
      disco/voice/udp.py

10
disco/voice/client.py

@ -18,7 +18,7 @@ from disco.voice.udp import AudioCodecs, PayloadTypes, UDPVoiceClient
SpeakingCodes = Enum( SpeakingCodes = Enum(
NONE=0, NONE=0,
VOICE=1 << 0, VOICE=1 << 0,
SOUNDSHARE=1 << 1 SOUNDSHARE=1 << 1,
) )
VoiceState = Enum( VoiceState = Enum(
@ -139,7 +139,7 @@ class VoiceClient(LoggingClass):
self.send(VoiceOPCode.SPEAKING, { self.send(VoiceOPCode.SPEAKING, {
'speaking': int(value), 'speaking': int(value),
'delay': delay, 'delay': delay,
'ssrc': self.ssrc 'ssrc': self.ssrc,
}) })
def send(self, op, data): def send(self, op, data):
@ -214,12 +214,12 @@ class VoiceClient(LoggingClass):
'address': ip, 'address': ip,
'mode': self.mode, 'mode': self.mode,
}, },
'codecs': codecs 'codecs': codecs,
}) })
self.send(VoiceOPCode.CLIENT_CONNECT, { self.send(VoiceOPCode.CLIENT_CONNECT, {
'audio_ssrc': self.ssrc, 'audio_ssrc': self.ssrc,
'video_ssrc': 0, 'video_ssrc': 0,
'rtx_ssrc': 0 'rtx_ssrc': 0,
}) })
def on_voice_resumed(self, data): def on_voice_resumed(self, data):
@ -261,7 +261,7 @@ class VoiceClient(LoggingClass):
payload = VoiceSpeaking( payload = VoiceSpeaking(
user_id=data['user_id'], user_id=data['user_id'],
speaking=(data['speaking'] & SpeakingCodes.VOICE.value), speaking=(data['speaking'] & SpeakingCodes.VOICE.value),
soundshare=(data['speaking'] & SpeakingCodes.SOUNDSHARE.value) soundshare=(data['speaking'] & SpeakingCodes.SOUNDSHARE.value),
) )
self.client.gw.events.emit('VoiceSpeaking', payload) self.client.gw.events.emit('VoiceSpeaking', payload)

63
disco/voice/udp.py

@ -23,46 +23,25 @@ MAX_SEQUENCE = 65535
RTP_HEADER_ONE_BYTE = (0xBE, 0xDE) RTP_HEADER_ONE_BYTE = (0xBE, 0xDE)
class RTPHeader(namedtuple('RTPHeader', ['version', 'padding', 'extension', 'csrc_count', 'marker', 'payload_type', 'sequence', 'timestamp', 'ssrc'])): RTPHeader = namedtuple('RTPHeader', [
""" 'version',
RTP Packet's Header information 'padding',
Attributes 'extension',
--------- 'csrc_count',
version : integer 'marker',
the RTP version the packet's using 'payload_type',
padding : integer 'sequence',
is this RTP packet using padding 'timestamp',
extension : integer 'ssrc',
is this RTP packet using extension ])
csrc_count : integer
marker : integer VoiceData = namedtuple('VoiceData', [
is this RTP packet having a marker 'data',
payload_type : integer 'user_id',
RTP packet's payload type, currently should only be OPUS data 'payload_type',
sequence : integer 'channel',
RTP packet's sequence 'rtp',
timestamp : integer ])
RTP packet's timestamp
ssrc : integer
RTP packet's SSRC, the person talking
"""
class VoiceData(namedtuple('VoiceData', ['data', 'user_id', 'payload_type', 'channel', 'rtp'])):
"""
Voice Data received from the UDP socket
Attributes
---------
data : bytes
the decrypted data
user_id: snowflake
the id of the user who sent this data
payload_type : string
the payload's type, currently only 'opus' supported
channel : object??
rtp : RTPHeader
the rtp packet's header data
"""
class UDPVoiceClient(LoggingClass): class UDPVoiceClient(LoggingClass):
@ -154,7 +133,7 @@ class UDPVoiceClient(LoggingClass):
payload_type=second & 0x7F, payload_type=second & 0x7F,
sequence=sequence, sequence=sequence,
timestamp=timestamp, timestamp=timestamp,
ssrc=ssrc ssrc=ssrc,
) )
# Check if rtp version is 2 # Check if rtp version is 2
@ -231,7 +210,7 @@ class UDPVoiceClient(LoggingClass):
payload_type=payload_type.name, payload_type=payload_type.name,
user_id=user_id, user_id=user_id,
channel=self.vc.channel, channel=self.vc.channel,
rtp=rtp rtp=rtp,
) )
self.vc.client.gw.events.emit('VoiceData', payload) self.vc.client.gw.events.emit('VoiceData', payload)

Loading…
Cancel
Save