我正在使用 Twilio 可编程语音处理电话。
我想使用双向流功能发送一些原始音频数据以供 twilio 播放,初始化代码如下所示,
from twilio.twiml.voice_response import Connect, VoiceResponse, Stream
response = VoiceResponse()
connect = Connect()
connect.stream(url='wss://mystream.ngrok.io/audiostream')
response.append(connect)
然后当从 twilio 获得 wss 连接时,我开始将原始音频数据发送到 twilio,就像这样
async def send_raw_audio(self, ws, stream_sid):
print('send raw audio')
import base64
import json
with open('test.wav', 'rb') as wav:
while True:
frame_data = wav.read(1024)
if len(frame_data) == 0:
print('no more data')
break
base64_data = base64.b64encode(frame_data).decode('utf-8')
print('send base64 data')
media_data = {
"event": "media",
"streamSid": stream_sid,
"media": {
"playload": base64_data
}
}
media = json.dumps(media_data)
print(f"media: {media}")
await ws.send(media)
print('finished sending')
test.wav
是一个由 audio/x-mulaw
编码的 wav 文件,采样率为 8000。
但是运行时,我听不到任何声音,在 twilio 控制台上,它说
31951 - Stream - Protocol - Invalid Message
Possible Causes
- Message does not have JSON format
- Unknown message type
- Missing or extra field in message
- Wrong Stream SID used in message
我不知道哪一部分是错误的。有谁知道我的问题是什么?我找不到有关此场景的示例,只需按照说明进行操作here,如果有人知道有关于此情况的示例,我将非常感激,谢谢。
问题可能不再相关,但我在调试双向流时遇到了这个问题,所以它可能对某人有用:
不确定这是否可以修复它,但我使用 .decode("ascii"),而不是“utf-8”
如果我有来自流的块,我是否需要先将其转换为音频,或者只是将此块发送到 twilio ? 我陷入了同样的问题