在多客户端语音聊天Python程序中没有向客户端发送音频 我想做什么
我正在尝试用Python创建一个多客户端语音聊天程序,客户端可以通过麦克风进行通信。我让它与TCP套接字一起工作,客户端将启动与服务器的连接,并将添加到列表中,然后在其中接收音频。由于性能原因,我尝试使用UDP套接字来实现这一点。事实证明,这很困难 预期和实际结果 当程序运行时,服务器等待客户机发送“连接”字符串,然后将该客户机的地址添加到列表中,启动一个线程从中接收音频,并将音频广播到所有连接的客户机。然而,发生的情况是,客户端似乎没有从服务器接收任何音频。当混音器拾取输入时,代码的音频部分似乎很好,但是没有接收到输出 错误消息 没有 代码 server.py client.py 有谁能提出一些建议来解释为什么这个代码不起作用? 谢谢在多客户端语音聊天Python程序中没有向客户端发送音频 我想做什么,python,multithreading,sockets,audio,udp,Python,Multithreading,Sockets,Audio,Udp,我正在尝试用Python创建一个多客户端语音聊天程序,客户端可以通过麦克风进行通信。我让它与TCP套接字一起工作,客户端将启动与服务器的连接,并将添加到列表中,然后在其中接收音频。由于性能原因,我尝试使用UDP套接字来实现这一点。事实证明,这很困难 预期和实际结果 当程序运行时,服务器等待客户机发送“连接”字符串,然后将该客户机的地址添加到列表中,启动一个线程从中接收音频,并将音频广播到所有连接的客户机。然而,发生的情况是,客户端似乎没有从服务器接收任何音频。当混音器拾取输入时,代码的音频部分似
import time
import sys
import threading
import chardet
print("\nWelcome to cmd-chat server!\n")
print("[LOADING]")
time.sleep(1)
host = "127.0.0.1"
port = 55556
users = []
nicknames = []
s1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s1.bind((host, port))
def managevoice(addr):
while True:
print("managvoicestarted")
voicedata, ad = s1.recvfrom(4096)
the_encoding = chardet.detect(voicedata)["encoding"]
if the_encoding != "ascii" and ad == addr:
for c in users:
if c != addr:
s1.sendto(voicedata, c)
def recieveclients():
while True:
data, addr = s1.recvfrom(4096)
the_encoding = chardet.detect(data)["encoding"]
if the_encoding == "ascii":
data = data.decode()
if data == "JOIN":
users.append(addr)
t2 = threading.Thread(target=managevoice, args=(addr,))
t2.start()
print("Thread Started")
recieveclients()
import time
import sys
import threading
import pyaudio
host = "127.0.0.1"
port = 55556
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Message = "JOIN".encode()
s.sendto(Message, (host, port))
p = pyaudio.PyAudio()
fl = pyaudio.paInt16
ch = 1
size = 4096
r = 44100
input_stream = p.open(format = fl,
channels = ch,
rate = r,
input = True,
frames_per_buffer = size)
output_stream = p.open(format = fl,
channels = ch,
rate = r,
output = True,
frames_per_buffer = size)
def send_audio():
while True:
voice = input_stream.read(4096)
s.sendto(voice, (host, port))
print("sending")
def play_audio():
while True:
audio, addr = s.recvfrom(4096)
output_stream.write(audio)
t3 = threading.Thread(target=send_audio)
t4 = threading.Thread(target=play_audio)
t3.start()
t4.start()