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 数据

Python WebSocket客户端连接但不发送消息

Python websockets 在“发送”上静默失败

Python websocket 客户端 - 从 python 代码向 WebSocketServer 发送消息

python实现websocket

python--websocket数据解析