1v1 实时翻译字幕
2026-02-06
场景简介
在跨语种 1v1 语音通话场景中,两位用户使用不同的语言进行交流。为了实现无障碍沟通,需要分别将对方的语音实时翻译为己方语言,并以字幕形式展示。
本文以 中文普通话 和 英语 的 1v1 语音通话为例,演示如何通过 ZEGO 实时音视频产品,结合云端实时语音识别与翻译功能,实现双向语言互译,并在客户端仅展示对方翻译后的字幕。

核心流程
时序图
下图展示了 1v1 实时翻译字幕的核心交互流程:
流程说明
| 步骤 | 说明 |
|---|---|
| 1 | 两位用户使用 ZEGO Express SDK 加入同一实时音视频(RTC)房间,并分别以 s1、s2 为流 ID 推流。 |
| 2 | 业务服务端调用 StartRealtimeASRTask 创建识别任务,使用 StreamList 为两条流分别配置 ASR 和翻译参数。 |
| 3 | ZEGO 云端 ASR 服务加入 RTC 房间,拉取两条音频流。 |
| 4 | 实时识别用户语音并翻译,翻译结果通过房间信令下发到客户端。 |
| 5 | 通话结束后,服务端调用 StopRealtimeASRTask 停止任务。 |
前提条件
- 已在 ZEGO 控制台 开通云端实时语音识别服务。
- 已购买并获取翻译厂商(如豆包、通义千问机器翻译)的 API Key。
- 已下载并集成最新 ZEGO Express SDK。
- 客户端已实现加入房间和推流功能。本例假设:
- 用户 A(中文用户):
userId为u1,streamId为s1 - 用户 B(英文用户):
userId为u2,streamId为s2
- 用户 A(中文用户):
实现步骤
步骤一:服务端创建识别及翻译任务
服务端调用 StartRealtimeASRTask 接口,使用 RecognitionRange: 1 开启流级别识别,并在 StreamList 中为两条流分别配置 ASR 和翻译参数:
- 流
s1(中文用户):中文识别 → 翻译为英文(给英文用户看) - 流
s2(英文用户):英文识别 → 翻译为中文(给中文用户看)
请求示例
{
"RoomId": "your_room_id",
"RecognitionRange": 1,
"SubtitleType": 2,
"StreamList": [
{
"StreamId": "s1",
"ASR": {
"Vendor": "Tencent",
"Params": {
"EngineModelType": "16k_zh"
}
},
"EnableTranslation": true,
"Translation": {
"Vendor": "DoubaoSeedTranslation",
"SourceLanguage": "zh",
"TargetLanguage": "en",
"LLM": {
"Url": "https://ark.cn-beijing.volces.com/api/v3/responses",
"ApiKey": "your_doubao_api_key",
"Model": "doubao-seed-translation-250915"
}
}
},
{
"StreamId": "s2",
"ASR": {
"Vendor": "Tencent",
"Params": {
"EngineModelType": "16k_en"
}
},
"EnableTranslation": true,
"Translation": {
"Vendor": "DoubaoSeedTranslation",
"SourceLanguage": "en",
"TargetLanguage": "zh",
"LLM": {
"Url": "https://ark.cn-beijing.volces.com/api/v3/responses",
"ApiKey": "your_doubao_api_key",
"Model": "doubao-seed-translation-250915"
}
}
}
]
}参数说明
| 参数 | 说明 |
|---|---|
RoomId | 实时音视频(RTC)房间 ID,需与客户端加入的房间 ID 一致。 |
RecognitionRange | 设为 1 表示按 StreamList 指定流进行识别。 |
SubtitleType | 设为 2 表示仅下发翻译结果。 |
StreamList | 流配置列表,每条流可独立配置 ASR 和翻译参数。 |
StreamList[].ASR.Params.EngineModelType | ASR 引擎模型,16k_zh 为中文,16k_en 为英文。更多语种请参考 配置 ASR。 |
StreamList[].Translation.SourceLanguage | 源语言,即当前流用户说话的语言。 |
StreamList[].Translation.TargetLanguage | 目标语言,即翻译后的语言。 |
说明
- 本例使用豆包翻译模型
doubao-seed-translation-250915。您也可以使用通义千问机器翻译(QwenMT),详情请参考 配置翻译。 - 生产环境中请务必填写正确的
ApiKey。
步骤二:客户端展示对方翻译字幕
客户端通过 ZEGO 字幕组件接收并展示翻译字幕。为实现"仅展示对方的翻译字幕",需在字幕处理逻辑中过滤掉自己的消息。
集成字幕组件
请参考 展示字幕 文档,下载并集成字幕组件。
过滤仅展示对方字幕
在字幕消息处理逻辑中,将消息中的 UserId 字段与本地用户 ID 进行比较,仅展示对方用户的字幕:
步骤三:(可选)停止识别任务
通话结束后,服务端调用 StopRealtimeASRTask 接口停止任务:
{
"TaskId": "your_task_id"
}说明
若未主动调用停止接口,当 RTC 房间内超过 MaxIdleTime(默认 120 秒)没有真实用户时,后台会自动停止识别任务。
注意事项
- SDK 版本要求:必须使用针对 Cloud ASR 优化的 Express SDK 版本,否则无法正常接收字幕信令。
- 流 ID 一致性:服务端
StreamList中的StreamId必须与客户端实际推流时使用的流 ID 完全一致。 - 翻译方向配置:请根据实际用户语言配置正确的
SourceLanguage和TargetLanguage,确保翻译结果符合预期。 - API Key 安全:生产环境中,翻译服务的
ApiKey应由服务端安全管理,避免泄露。 - 消息排序:通过房间信令收到的翻译文本可能会乱序到达,字幕组件已内置按
SeqId排序的处理逻辑。
