如何在Twilio双向媒体流中完整录制通话双方的音频?
如何在Twilio双向媒体流中完整录制通话双方的音频?
我基于Twilio的双向媒体流开发了一个电话代理服务,现在想要实现完整录制所有呼入通话的功能,但遇到了一个棘手的问题。
我原本使用twilio-media-stream-save-audio-file这个npm包来把媒体流保存为wav文件,但Twilio官方文档里明确指出:
双向媒体流仅能接收呼入轨道。
这就导致,当我通过Twilio的WebSocket接收media类型消息并触发录制时,只能录到来电者的音频,完全捕获不到我的服务器发回给Twilio的音频——这部分音频是我用Eleven Labs生成的AI语音。
我尝试手动分别录制两路音频,但这种方式带来了很多难以处理的问题:比如音频重叠时的同步问题,还有发送clear消息时需要截断 outbound 音频,最后生成的录音只能大概还原80%的通话内容,和实际通话的完整音频有偏差。
我目前的录制代码如下:
录制来电者音频:
sendAudio(audio: string): void { const audioInput = { encodedAudioData: audio, }; this.sendMessage("audio_input", audioInput); // Record caller audio if (this.callerSpeaking) { this.mediaStreamSaver.twilioStreamMedia(audio); } }
录制AI生成的回复音频:
async sendAudioToTwilio(audioBase64: string, twilioConnection: TwilioSocket) { const twilioMediaMessage = { event: "media", streamSid: twilioConnection.streamSid, media: { payload: audioBase64, }, }; if (twilioConnection.ws.readyState === 1) { // Record AI audio if (this.aiSpeaking && !this.callerSpeaking) { this.mediaStreamSaver.twilioStreamMedia(audioBase64); } twilioConnection.ws.send(JSON.stringify(twilioMediaMessage)); } else { console.error( "Twilio WebSocket is not open. Current state:", twilioConnection.ws.readyState ); } }
已经尝试过但无效的方案:
- Record Verb:本质是用于录制语音信箱的功能,和媒体流场景不兼容
- 带
record属性的Dial Verb:仅适用于普通通话场景,无法支持媒体流的录制需求
备注:内容来源于stack exchange,提问作者Code on the Rocks
相关产品推荐
相关产品推荐

