Python 和 websockets - 发送音频流
Posted
技术标签:
【中文标题】Python 和 websockets - 发送音频流【英文标题】:Python and websockets - send audio stream 【发布时间】:2014-06-01 13:59:01 【问题描述】:我已经建立了一个套接字服务器并将消息发送到所有连接的客户端。我正在将数据从 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
我可以看到循环运行了两次,然后遇到了错误。为什么?我需要压缩流吗?
有什么建议吗?
【问题讨论】:
你听说过icecast2吗? 【参考方案1】:试试这个:
s.send(pickle.dumps(frames), opcode=websocket.ABNF.OPCODE_BINARY)
【讨论】:
感谢您的回复!那也不会发送。我注意到将数据解析为字符串并发送它们是可行的。所以我会这样尝试以上是关于Python 和 websockets - 发送音频流的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python Twisted 和 Autobahn 从 Matlab 通过 WebSocket 发送 JSON 数据