AI 同声传译

最近更新时间:2026-01-16 15:29:42

我的收藏

场景介绍

AI 同声传译是一种结合多语种语音识别、机器翻译与语音合成技术,并通过高质量实时音视频通信实现“边听边译、边说边播”的新一代实时翻译方案。相比传统人工同传受限于译员数量、排班成本、场地和时间等因素,AI 同声传译能够以更低成本、更高扩展性,为会议、培训、在线教育、跨境直播、电商带货、在线客服、国际洽谈等多种场景提供稳定可靠的多语言沟通能力。
基于大语言模型(LLM)的语义理解和生成能力,AI 同声传译不仅可以完成字面翻译,还能结合上下文理解讲话人的意图和语气,对专业术语、本地化表达进行更自然的润色与适配,显著提升译文的准确度与可读性。同时,系统支持语音与文本双通路输出:既可以在屏幕上实时展示多语种字幕,也可通过语音合成将译文以“同传语音”的形式播放,满足不同场景下的使用需求。
TRTC 作为底层实时音视频技术支撑,为 AI 同声传译提供低延时、高清晰、强抗弱网的音视频传输能力。发言人的音频可被毫秒级捕获并实时推送至云端 AI 引擎进行识别与翻译,再通过 TRTC 实时分发给各端用户,实现真正意义上的“即说即译”。同时,TRTC 跨平台、跨网络、跨区域的互通能力,使参会者无论身处何地、使用 iOS、Android、Windows、Mac、Web 等任意终端,都能稳定接入同传会议,获得接近本地应用体验的流畅效果。
对于开发者和企业方,TRTC 提供完善的实时音视频 SDK、连麦/互动等场景化组件,以及与 AI 能力灵活编排的接口能力。开发者只需在现有应用中集成少量代码,即可快速构建具备多语言实时同传能力的在线会议、直播、课堂或客服系统,大幅缩短开发周期,降低技术门槛,加速 AI 同声传译在各类业务场景的落地。

实现方案

实时语音转文本:音频流经过 TRTC 全球网络节点传输到服务端进行音频处理后,由语音识别引擎(ASR)将语音转写为文本。系统支持多语种、热词权重配置、VAD 检测以及实时流式识别。对于需生成字幕或实时内容记录的场景,在此流程即可直接输出最终转写结果回调。
实时翻译链路:针对跨语言理解的场景,可在语音转写的基础上开启翻译功能。系统会将转写后的文本通过 LLM 翻译引擎进行翻译处理,并同时输出原文转写内容以及多语种翻译结果。

方案架构



前提条件

注意:
AI 智能识别调用会产生使用费用,具体详情请参见 AI 智能识别计费说明

接入步骤

业务流程图



步骤1:集成 TRTC SDK

步骤2:进入 TRTC 房间

参数
类型
描述
sdkAppId
number
您在 TRTC 控制台 中创建的音频和视频应用程序的 sdkAppId。
userId
string
您指定的用户 ID。
userSig
string
用户签名,请参见 UserSig
roomId
number
您指定的房间 ID,通常是唯一的房间 ID。
同声传译场景推荐使用TRTCAppSceneAudioCall进房。

步骤3:发布音频流

Android&iOS&Flutter
Web&H5
Windows
Mac
您可以调用 startLocalAudio 来开启麦克风采集,该接口需要您通过 quality 参数确定采集模式。虽然这个参数的名字叫做 quality,但并不是说质量越高越好,不同的业务场景有最适合的参数选择(这个参数更准确的含义是 scene)。
AI 转录场景下推荐使用 SPEECH 模式,该模式下的 SDK 音频模块会专注于提炼语音信号,尽最大限度的过滤周围的环境噪音,同时该模式下的音频数据也会获得较好的低质量网络的抵抗能力,因此该模式特别适合于“视频通话”和“在线会议”等侧重于语音沟通的场景。
Android
iOS
Flutter
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)
mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH );
self.trtcCloud = [TRTCCloud sharedInstance];
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)
[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)
trtcCloud.startLocalAudio(TRTCAudioQuality.speech);
使用 trtc.startLocalAudio() 方法开启麦克风,并发布到房间。
await trtc.startLocalAudio();
调用 startLocalAudio 开启麦克风采集,请根据您的需求选择其中一个声音质量参数 Quality。
// 开启麦克风采集,设置当前场景为:语音模式
// 具有高的噪声抑制能力,有强有弱的网络阻力
ITRTCCloud* trtcCloud = CRTCWindowsApp::GetInstance()->trtc_cloud_;
trtcCloud->startLocalAudio(TRTCAudioQualitySpeech);
调用 startLocalAudio 开启麦克风采集,请根据您的需求选择其中一个声音质量参数 Quality。
// 开启麦克风采集,设置当前场景为:语音模式
// 具有高的噪声抑制能力,有强有弱的网络阻力
AppDelegate *appDelegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];
[appDelegate.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];

步骤4:后台发起语音转文字、实时翻译任务

通过业务后台调用 开始 AI 转录任务(StartAITranscription) 接口,来发起 AI 转录,调用成功后,转录机器人会进入 TRTC 房间。可在 TargetLanguages 中指定目标翻译语种,例如 [“en”,“ja”]。目前支持配置以下语种翻译:
语言代码
对应语种
"zh"
中文
"en"
英语
"es"
西班牙语
"pt"
葡萄牙语
"fr"
法语
"de"
德语
"ru"
俄语
"ar"
阿拉伯语
"ja"
日语
"ko"
韩语
"vi"
越南语
"ms"
马来语
"id"
印度尼西亚语
"it"
意大利语
"th"
泰语
TTSConfig中的VoiceID,可参见 TRTC 语音合成精品音色库 Voice ID
注意:
RoomId 需要和客户端进房的 RoomId 保持一致,并且房间号的类型(数字房间号、字符串房间号)也必须相同(即机器人和用户需要在同一个房间)。

步骤5:开始同声传译

此时,用户已经可以正常进行同声传译。

步骤6:接收转录和翻译字幕

通过 TRTC SDK 接收自定义消息功能,在客户端上监听回调来接收实时字幕与 AI 状态等数据。cmdID 固定是1
接收转录字幕
{
"type": 10000, // 10000表示是下发的实时字幕
"sender": "user_a", // 说话人的userid
"receiver": [], // 接收者userid列表,该消息实际是在房间内广播
"payload": {
"text":"", // 语音识别出的文本
"start_time":"00:00:01", // 这句话的开始时间
"end_time":"00:00:02", // 这句话的结束时间
"roundid": "xxxxx", // 唯一标识一轮对话
"end": true // 如果为true,代表这是一句完整的话
"taskid": "x-dPLCz" // 转录任务唯一标识
}
}
接收翻译字幕
{
"type": 10000,
"sender": "ai_951073", // 转录机器人的userid
"payload": {
"start_time_ms": 1760,
"end_time_ms": 5530,
"end": false,
"roundid": "e6330a3c-eed7-40bb-8229-9bbe733a313f", // 一轮对话的 ID
"translation_text": "simultaneous interpretation of the meeting", // 翻译文本
"translation_language": "en", // 翻译的语言代码
"taskid": "x-dPLCz" // 转录任务唯一标识
}
}
字段说明
字段名
类型
含义
type
Integer
10000:实时字幕与完整的一句话下发消息类型。
sender
String
说话人的 UserID。
receiver
Array
接收者 userid 列表,该消息实际是在房间内广播。
payload.text
String
识别出的文本。 Unicode 编码。
payload.start_time
String
消息产生的时间 任务启动后的绝对时间。
payload.end_time
String
消息结束的时间 任务启动后的绝对时间 。
payload.end
Boolean
如果为 true,代表这是一句完整的话。
payload.roundid
String
一轮对话的 ID。
payload.taskid
String
转录任务唯一标识。
payload.translation_text
String
翻译文本。
payload.translation_language
String
翻译的语言代码。
示例代码
Android
iOS&Mac
Web&H5
Windows
Flutter
@Override
public void onRecvCustomCmdMsg(String userId, int cmdID, int seq, byte[] message) {
String data = new String(message, StandardCharsets.UTF_8);
try {
JSONObject jsonData = new JSONObject(data);
Log.i(TAG, String.format("receive custom msg from %s cmdId: %d seq: %d data: %s", userId, cmdID, seq, data));
} catch (JSONException e) {
Log.e(TAG, "onRecvCustomCmdMsg err");
throw new RuntimeException(e);
}
}
func onRecvCustomCmdMsgUserId(_ userId: String, cmdID: Int, seq: UInt32, message: Data) {
if cmdID == 1 {
do {
if let jsonObject = try JSONSerialization.jsonObject(with: message, options: []) as? [String: Any] {
print("Dictionary: \\(jsonObject)")
} else {
print("The data is not a dictionary.")
}
} catch {
print("Error parsing JSON: \\(error)")
}
}
}
trtcClient.on(TRTC.EVENT.CUSTOM_MESSAGE, (event) => {
let data = new TextDecoder().decode(event.data);
let jsonData = JSON.parse(data);
console.log(`receive custom msg from ${event.userId} cmdId: ${event.cmdId} seq: ${event.seq} data: ${data}`);
if (jsonData.type == 10000 && jsonData.payload.end == false) {
// 字幕中间状态
} else if (jsonData.type == 10000 && jsonData.payload.end == true) {
// 一句话说完了
}
});
void onRecvCustomCmdMsg(const char* userId, int cmdID, int seq,
const uint8_t* message, uint32_t msgLen) {
std::string data;
if (message != nullptr && msgLen > 0) {
data.assign(reinterpret_cast<const char*>(message), msgLen);
}
if (cmdID == 1) {
try {
auto j = nlohmann::json::parse(data);
std::cout << "Dictionary: " << j.dump() << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error parsing JSON: " << e.what() << std::endl;
}
return;
}
}
void onRecvCustomCmdMsg(String userId, int cmdID, int seq, String message) {
if (cmdID == 1) {
try {
final decoded = json.decode(message);
if (decoded is Map<String, dynamic>) {
print('Dictionary: $decoded');
} else {
print('The data is not a dictionary. Raw: $decoded');
}
} catch (e) {
print('Error parsing JSON: $e');
}
return;
}
}
说明:
回调示例说明:
转录:会将完整的一句话转录并推送。
“今天天气怎么样?”
字幕 & 翻译:将字幕句子或者翻译句子分段推送,后一段会包含前一段,确保实时性。
“今天”
“今天天气”
“今天天气怎么样”
顺序说明:字幕消息 > 字幕消息 > .... > 字幕消息(end = true)

步骤7:停止转录任务,退出 TRTC 房间

1. 服务端停止 AI 转录任务。
通过业务后台调用 停止 AI 转录任务 接口,停止该转录任务。
2. 客户端退出 TRTC 房间,建议参见 退出房间

APP 设计参考

面对面同传方案


适用于出国旅游等场景,界面可分两部分,同时展示中文和英文,需要一个按钮来做语言的切换。
实现逻辑简单。
只需要自己手机上安装一个 App 就能进行使用。

关键步骤

开始同传
可参见 快速跑通,启动同传任务。
切换语言
1. 调用 停止转录接口
2. 修改转录语言及翻译语言,重新启动转录。

谷歌 Gemini / 苹果 AirPods 同传方案

每个人都有一个属于自己的同声传译助手。打开 App 后,会将另一人说话进行转录和翻译,并将声音通过耳机播放出来。如果两人需要进行交流,则两人的手机都需要下载 App,并带上耳机。
更贴近真人同声传译。
如果需要进行交流,两人都需要下载 App,在出国旅游场景不方便。

关键步骤

可直接参见 快速跑通,启动同传任务。

1V1视频/语音对话同传方案

适用于远程视频/语音对话的场景。

关键步骤

开始同传
此场景需要将转录任务的TranscriptionParams.TranscriptionMode设为1,并启动两个转录机器人。例如用户 A 说中文,用户 B 说英语,则1号机器人的TargetUserID设为用户 A,转录语言设为中文,翻译语言设为英文;同理2号机器人的TargetUserID设为用户 B,转录了语言设为英文,翻译语言设为中文。
// 1表示机器人只订阅单个人的流
StartAITranscription.TranscriptionParams.TranscriptionMode = 1;
// TranscriptionMode为1时必填,机器人只会拉该userid的流,忽略房间里其他用户
StartAITranscription.TranscriptionParams.TargetUserId = "用户A";
客户端侧需要调用muteRemoteAudio接口,静音自己的机器人。
Android
iOS
mTRTCCloud.muteRemoteAudio("robot_1", true);
trtcCloud.muteRemoteAudio("robot_1", mute: true)

高级功能

远场人声抑制

在同声传译中,可能会出现将用户侧其他人声识别为用户说的话,进行翻译。为了尽量避免此类情况的发生,我们需要用到远场人声抑制的能力。在调用 开始 AI 转录任务 接口时,可以将 RecognizeConfig.VadLevel 设置为2或者3,有较好的远场人声抑制能力。

延迟优化

TRTC AI 同声传译中,可调整 RecognizeConfigVadSilenceTime 来优化延迟。
ASR 的耗时基本由 VadSilenceTime 决定,太高会增加收到翻译音频的延迟,太低会让 ASR 断句间隔太短,用户说话时稍微停顿一下,就会被当成完整的话进行同声传译。一般推荐将 VadSilenceTime 设置为500ms - 1000ms。

服务端回调

可参见 AI 对话服务端回调。
注意:
回调地址在 TRTC 控制台设置,AI 实时对话回调。
可配合 TRTC 房间与媒体回调 使用,丰富功能。

云端录制

TRTC 最新升级的云端录制,不依赖云直播的能力,无需旁路转推云直播,使用 TRTC 内部的实时录制集群进行音视频录制,拥有更完整统一的录制体验。
单流录制:通过 TRTC 的云端录制功能,您可以将房间中通话双方的音视频流都录制成独立的文件。



混流录制:将同一个房间中的所有音视频媒体流混流录制成一个文件。



注意:
TRTC 云端录制的具体介绍及开通指引详见 实现云端录制与回放
单流录制可以使用 全局自动录制,混流录制则需使用 API 手动录制

常见问题

为什么没有收到转录字幕/翻译?听不到机器人的声音?

1. 检查客户端是否有开启麦克风采集,并发布音频流。
2. 通过 TRTC SDK 接收自定义消息功能,检查是否可以接收到实时字幕等数据。如果接收不到,建议检查在调用 StartAITranscription 接口时的RoomId 是否和客户端进房的 RoomId 一致,并且房间号的类型(数字房间号、字符串房间号)也必须相同(即机器人和用户需要在同一个房间)。如果TranscriptionMode设为了1,需要检查 TargetUserId 是否和客户端进房使用的 UserId 一致。
3. 如果能收到翻译的字幕,但听不到机器人的声音,建议检查 TranslationConfig.TTSConfig 相关的配置。

TRTC 异常错误处理

TRTC SDK 遇到不可恢复的错误会在 onError 回调中抛出,详情请参见 TRTC 错误码表
1. UserSig 相关。UserSig 校验失败会导致进房失败,您可参见 UserSig 生成与校验 进行校验。
枚举
取值
描述
ERR_TRTC_INVALID_USER_SIG
-3320
进房参数 userSig 不正确,请检查 TRTCParams.userSig 是否为空。
ERR_TRTC_USER_SIG_CHECK_FAILED
-100018
UserSig 校验失败,请检查参数 TRTCParams.userSig 是否填写正确或已经过期。
2. 进退房相关。进房失败请先检查进房参数是否正确,且进退房接口必须成对调用,即便进房失败也需要调用退房接口。
枚举
取值
描述
ERR_TRTC_CONNECT_SERVER_TIMEOUT
-3308
请求进房超时,请检查是否断网或者是否开启 VPN,您也可以切换4G进行测试。
ERR_TRTC_INVALID_SDK_APPID
-3317
进房参数 sdkAppId 错误,请检查 TRTCParams.sdkAppId 是否为空。
ERR_TRTC_INVALID_ROOM_ID
-3318
进房参数 roomId 错误,请检查 TRTCParams.roomIdTRTCParams.strRoomId 是否为空,注意 roomId 和 strRoomId 不可混用。
ERR_TRTC_INVALID_USER_ID
-3319
进房参数 userId 不正确,请检查 TRTCParams.userId 是否为空。
ERR_TRTC_ENTER_ROOM_REFUSED
-3340
进房请求被拒绝,请检查是否连续调用 enterRoom 进入相同 ID 的房间。
3. 设备相关。可监听设备相关错误,在出现相关错误时 UI 提示用户。
枚举
取值
描述
ERR_MIC_START_FAIL
-1302
打开麦克风失败,例如在 Windows 或 Mac 设备,麦克风的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序。
ERR_MIC_NOT_AUTHORIZED
-1317
麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了。
ERR_MIC_OCCUPY
-1319
麦克风正在被占用,例如移动设备正在通话时,打开麦克风会失败。

方案配套产品

系统层级
产品名称
场景用途
接入层
提供低延时、高品质的音视频实时互动解决方案,是音视频通话场景的基础底座能力。
云端服务
提供实时语音转文本和翻译能力。
数据存储
提供音频录制文件、音频切片文件的存储服务。