我已经设置了套接字服务器并将消息发送到所有连接的客户端。我将数据从python发送到javascript 我想将麦克风输入发送到所有收听的客户端 所以在我的Python应用程序中,我执行以下操作
import pyaudio
import websocket
import json
import struct
import wave
import pickle
#record
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 40
HOST = 'ws://127.0.0.1:8080'
s = websocket.create_connection(HOST)
s.send('Hii')
p = pyaudio.PyAudio()
for i in range(0, p.get_device_count()):
print(i, p.get_device_info_by_index(i)['name'])
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK,
input_device_index=1)
print("*recording")
i = 0
frames = []
while i < 20:
data = stream.read(CHUNK)
frames.append(data)
print(i)
i += 1
s.send(pickle.dumps(frames))
send('hi')
由其他连接发送和接收。
我尝试发送没有编码的帧,这给了我
TypeError: an integer is required
如果我对帧进行编码(使用pickle.dumps()
,则应用程序会运行,但服务器和客户端都会接收它们。json.dumps()
也无法正常工作。
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: b'\x7f\x03\xa1\x03\x7f\x03=\x03 ...
如果我将帧编码为字符串,脚本将运行并且不会遇到错误。
我只是试着这个。但我真正想要实现的是将send
置于循环中并将输入直接流式传输到服务器。当我这样做时,我收到以下错误
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
我可以看到循环运行两次然后命中错误。为什么?我需要压缩流吗?
有什么建议吗?
答案 0 :(得分:1)
试试这个:
s.send(pickle.dumps(frames), opcode=websocket.ABNF.OPCODE_BINARY)