Потоковая передача голоса между двумя конечными точками - PullRequest
1 голос
/ 01 октября 2019

каждый, я использую код 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...