Python和websockets - 发送音频流

时间:2014-06-01 13:59:01

标签: python websocket

我已经设置了套接字服务器并将消息发送到所有连接的客户端。我将数据从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

我可以看到循环运行两次然后命中错误。为什么?我需要压缩流吗?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

s.send(pickle.dumps(frames), opcode=websocket.ABNF.OPCODE_BINARY)