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

前提条件
注意:
1. 创建 TRTC 应用。
2. 解锁 AI 智能识别能力位。
接入步骤
业务流程图

步骤1:集成 TRTC SDK
步骤2:进入 TRTC 房间
同声传译场景推荐使用
TRTCAppSceneAudioCall进房。步骤3:发布音频流
您可以调用 startLocalAudio 来开启麦克风采集,该接口需要您通过 quality 参数确定采集模式。虽然这个参数的名字叫做 quality,但并不是说质量越高越好,不同的业务场景有最适合的参数选择(这个参数更准确的含义是 scene)。
AI 转录场景下推荐使用 SPEECH 模式,该模式下的 SDK 音频模块会专注于提炼语音信号,尽最大限度的过滤周围的环境噪音,同时该模式下的音频数据也会获得较好的低质量网络的抵抗能力,因此该模式特别适合于“视频通话”和“在线会议”等侧重于语音沟通的场景。
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH );
self.trtcCloud = [TRTCCloud sharedInstance];// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];
// 开启麦克风采集,并设置当前场景为:语音模式(高噪声抑制能力、强弱网络抗性)trtcCloud.startLocalAudio(TRTCAudioQuality.speech);
await trtc.startLocalAudio();
// 开启麦克风采集,设置当前场景为:语音模式// 具有高的噪声抑制能力,有强有弱的网络阻力ITRTCCloud* trtcCloud = CRTCWindowsApp::GetInstance()->trtc_cloud_;trtcCloud->startLocalAudio(TRTCAudioQualitySpeech);
// 开启麦克风采集,设置当前场景为:语音模式// 具有高的噪声抑制能力,有强有弱的网络阻力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" | 泰语 |
注意:
RoomId 需要和客户端进房的 RoomId 保持一致,并且房间号的类型(数字房间号、字符串房间号)也必须相同(即机器人和用户需要在同一个房间)。步骤5:开始同声传译
此时,用户已经可以正常进行同声传译。
步骤6:接收转录和翻译字幕
接收转录字幕
{"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 | 翻译的语言代码。 |
示例代码
@Overridepublic 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 转录任务。
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接口,静音自己的机器人。mTRTCCloud.muteRemoteAudio("robot_1", true);
trtcCloud.muteRemoteAudio("robot_1", mute: true)
高级功能
远场人声抑制
在同声传译中,可能会出现将用户侧其他人声识别为用户说的话,进行翻译。为了尽量避免此类情况的发生,我们需要用到远场人声抑制的能力。在调用 开始 AI 转录任务 接口时,可以将
RecognizeConfig.VadLevel 设置为2或者3,有较好的远场人声抑制能力。延迟优化
TRTC AI 同声传译中,可调整
RecognizeConfig 的 VadSilenceTime 来优化延迟。ASR 的耗时基本由 VadSilenceTime 决定,太高会增加收到翻译音频的延迟,太低会让 ASR 断句间隔太短,用户说话时稍微停顿一下,就会被当成完整的话进行同声传译。一般推荐将 VadSilenceTime 设置为500ms - 1000ms。
服务端回调
云端录制
TRTC 最新升级的云端录制,不依赖云直播的能力,无需旁路转推云直播,使用 TRTC 内部的实时录制集群进行音视频录制,拥有更完整统一的录制体验。
单流录制:通过 TRTC 的云端录制功能,您可以将房间中通话双方的音视频流都录制成独立的文件。


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


常见问题
为什么没有收到转录字幕/翻译?听不到机器人的声音?
1. 检查客户端是否有开启麦克风采集,并发布音频流。
2. 通过 TRTC SDK 接收自定义消息功能,检查是否可以接收到实时字幕等数据。如果接收不到,建议检查在调用 StartAITranscription 接口时的
RoomId 是否和客户端进房的 RoomId 一致,并且房间号的类型(数字房间号、字符串房间号)也必须相同(即机器人和用户需要在同一个房间)。如果TranscriptionMode设为了1,需要检查 TargetUserId 是否和客户端进房使用的 UserId 一致。3. 如果能收到翻译的字幕,但听不到机器人的声音,建议检查 TranslationConfig.TTSConfig 相关的配置。
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.roomId 或 TRTCParams.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 | 麦克风正在被占用,例如移动设备正在通话时,打开麦克风会失败。 |
方案配套产品
系统层级 | 产品名称 | 场景用途 |
接入层 | 提供低延时、高品质的音视频实时互动解决方案,是音视频通话场景的基础底座能力。 | |
云端服务 | 提供实时语音转文本和翻译能力。 | |
数据存储 | 提供音频录制文件、音频切片文件的存储服务。 |