如何使用twilio双向流功能播放原始音频数据

问题描述 投票:0回答:3

我正在使用 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,如果有人知道有关于此情况的示例,我将非常感激,谢谢。

stream twilio audio-streaming twilio-programmable-voice mu-law
3个回答
1
投票

问题可能不再相关,但我在调试双向流时遇到了这个问题,所以它可能对某人有用:

  1. 您收到此错误的主要原因是 json 内容中的拼写错误。您正在发送“playload”而不是“payload”。
  2. 将数据发送到 twilio 流时的另一个问题是,您应该在数据流末尾发送标记消息,以通知 twilio 已发送完整的有效负载。 https://www.twilio.com/docs/voice/twiml/stream#message-mark-to-twilio
  3. 将数据发送回 twilio 流时,请注意有效负载不应包含音频文件类型标头字节,因此请确保将它们从录音中删除,或者在将数据发送到 twilio 时跳过它们。

0
投票

不确定这是否可以修复它,但我使用 .decode("ascii"),而不是“utf-8”


0
投票

如果我有来自流的块,我是否需要先将其转换为音频,或者只是将此块发送到 twilio ? 我陷入了同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.