You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成含双方音频的视频通话单音频文件?Twilio实时转录优化

一、生成包含通话双方音频的单音频文件

方案1:通过Twilio Composition API直接合成

这是最直接的事后合成方式,只需在创建Composition时指定包含所有参与者的音频轨道:

from twilio.rest import Client

# 替换为你的Twilio账号信息
account_sid = 'YOUR_ACCOUNT_SID'
auth_token = 'YOUR_AUTH_TOKEN'

client = Client(account_sid, auth_token)

# 创建包含所有参与者音频的合成文件
composition = client.video.compositions.create(
    room_sid='RM_YOUR_ROOM_SID',
    audio_sources=['*'],  # 通配符表示包含房间内所有参与者的音频轨道
    status_callback='https://your-server.com/composition-status',
    format='mp3'  # 支持mp3/ogg等格式
)

print(f"合成任务已启动,SID: {composition.sid}")
  • 如果你需要指定特定参与者,可将audio_sources替换为具体的参与者SID数组,比如['PA_USER1_SID', 'PA_USER2_SID']。
  • 合成完成后,Twilio会通过status_callback通知你文件的下载地址。

方案2:客户端实时混合并录制(无需事后合成)

如果需要在通话过程中实时获取合并后的音频文件,可以在前端使用Web Audio API混合多轨道音频后录制:

// 假设已获取本地音频流localStream和远端音频流remoteStream
const audioContext = new AudioContext();
const mixedStreamDestination = audioContext.createMediaStreamDestination();

// 连接本地音频源到混合目标
const localAudioSource = audioContext.createMediaStreamSource(localStream);
localAudioSource.connect(mixedStreamDestination);

// 连接远端音频源到混合目标
const remoteAudioSource = audioContext.createMediaStreamSource(remoteStream);
remoteAudioSource.connect(mixedStreamDestination);

// 启动录制混合后的音频流
const recorder = new MediaRecorder(mixedStreamDestination.stream);
recorder.start();

// 监听录制完成事件,获取Blob文件
recorder.onstop = (e) => {
    const audioBlob = new Blob([e.data], { type: 'audio/mp3' });
    // 可将Blob上传到服务器或直接下载
    const downloadLink = document.createElement('a');
    downloadLink.href = URL.createObjectURL(audioBlob);
    downloadLink.download = 'combined-call-audio.mp3';
    downloadLink.click();
};
二、实现实时转录功能(解决Composition API延迟问题)

Composition API是事后处理工具,天然不适合近实时场景,推荐以下两种实时方案:

方案1:客户端侧实时转录(轻量低延迟)

利用浏览器原生的Web Speech API直接在前端对音频流进行实时转录,无需依赖后端:

// 初始化语音识别器
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.continuous = true;  // 持续识别
recognition.interimResults = true;  // 返回临时结果
recognition.lang = 'zh-CN';  // 设置识别语种

// 监听识别结果
recognition.onresult = (event) => {
    let fullTranscript = '';
    for (let i = event.resultIndex; i < event.results.length; i++) {
        fullTranscript += event.results[i][0].transcript;
    }
    // 将转录结果展示到页面或发送给其他参与者
    console.log('实时转录:', fullTranscript);
};

// 传入远端音频流(本地流同理)
const remoteAudioTrack = remoteStream.getAudioTracks()[0];
const mediaStream = new MediaStream([remoteAudioTrack]);
// 注意:部分浏览器需要将音频流绑定到audio元素才能让识别器工作
const audioElement = document.createElement('audio');
audioElement.srcObject = mediaStream;
audioElement.play();

recognition.start();
  • 优点:延迟极低,开发成本低;缺点:依赖浏览器支持,对网络波动敏感,特定语种/方言支持有限。

方案2:Twilio Media Streams + 第三方实时转录服务(专业高准确率)

通过Twilio Media Streams将通话音频实时转发到你的后端,再对接专业实时转录服务(如OpenAI Whisper实时API、Google Speech-to-Text实时模式):

  1. 配置Twilio Media Streams:
    在Twilio控制台的视频房间配置中,开启Media Streams,指定你的后端WebSocket端点(如wss://your-server.com/twilio-audio-stream)。

  2. 后端接收音频流并转发到转录服务(Node.js示例):

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
    ws.on('message', (data) => {
        const message = JSON.parse(data.toString());
        // 处理媒体事件,获取PCMU编码的音频数据
        if (message.event === 'media') {
            const audioPayload = Buffer.from(message.media.payload, 'base64');
            // 将音频数据发送到实时转录服务(示例为伪代码)
            sendToRealTimeTranscription(audioPayload);
        }
    });
});

async function sendToRealTimeTranscription(audioBuffer) {
    // 对接第三方实时转录API,比如Whisper实时或Google STT
    const response = await fetch('https://transcription-service.com/realtime', {
        method: 'POST',
        body: audioBuffer,
        headers: { 'Content-Type': 'audio/pcm; rate=8000' } // Twilio默认是8kHz PCMU
    });
    const transcriptResult = await response.json();
    // 将转录结果推送到前端或存储
    console.log('专业转录结果:', transcriptResult.text);
}
  • 优点:转录准确率高,支持多语种/方言,稳定性强;缺点:需要后端开发,需承担第三方转录服务的成本。

方案3:使用Twilio Marketplace转录插件

检查Twilio Marketplace是否有官方或第三方的实时转录插件,部分插件可直接集成到视频通话中,无需自行处理流转发逻辑,能大幅减少开发工作量。

内容的提问来源于stack exchange,提问作者user21233524

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:31:01