каждый, я использую код Python для потоковой передачи голоса между конечными точками. код не дает мне ошибки, я просто застрял в какой-то момент, но теперь не знаю, почему
- что я пытаюсь достичь - я хочу говорить с одной конечной точки и слышать свой голос с другойконечная точка
- я не хочу использовать TCP, я хочу использовать UDP, чтобы я мог избежать задержки для кода получателя
import socket
import pyaudio
import select
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 4096
audio = pyaudio.PyAudio()
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP
sock.connect(("172.20.10.6", 5555))
stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, output=True, frames_per_buffer=CHUNK)
#while True :
#print("Enter a UDP M\n")
#MESSAGE = input("")
#sock.sendto(MESSAGE.encode('utf-8'), (UDP_IP, UDP_PORT))
try:
while True:
data = sock.recvfrom(CHUNK)
stream.write(data)
except KeyboardInterrupt:
pass
print('Shutting down')
sock.close()
stream.close()
audio.terminate()
отправителя
import pyaudio
import socket
import select
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 4096
audio = pyaudio.PyAudio()
UDP_IP = "0.0.0.0"
UDP_PORT = 5555
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM , socket.IPPROTO_UDP) # UDP
sock.bind((UDP_IP, UDP_PORT))
def callback(in_data, frame_count, time_info, status):
for s in read_list[1:]:
print (s)
s.send(in_data)
return (None, pyaudio.paContinue)
stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK, stream_callback=callback)
# stream.start_stream()
read_list = [sock]
print ("recording...")
try:
while True:
print ("1")
readable, writable, errored = select.select(read_list, [], [])
print ("2")
for s in readable:
if s is sock:
(clientsocket, address) = sock.accept()
read_list.append(clientsocket)
print ("Connection from", address)
else:
data = sock.recvfrom(1024)
if not data:
read_list.remove(s)
except KeyboardInterrupt:
pass
print ("finished recording")
serversocket.close()
# stop Recording
stream.stop_stream()
stream.close()
audio.terminate()
как вы видите код, застрявший там, где я печатаю число 2, он не печатает его
приведенный ниже код относится к соединению UDP, которое отправляет только строку
import socket
UDP_IP = "172.20.10.6"
UDP_PORT = 5005
MESSAGE = "Hello, World!"
print ("UDP target IP:", UDP_IP)
print ("UDP target port:", UDP_PORT)
print ("message:", MESSAGE)
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP
while True :
print("Enter a UDP M\n")
MESSAGE = input("")
sock.sendto(MESSAGE.encode('utf-8'), (UDP_IP, UDP_PORT))
import socket
UDP_IP = "172.20.10.6"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print ("received message:", data)