问题描述
我正在使用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
是一个wav文件,编码为audio/x-mulaw
,采样率为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"