logo
当前页

1v1 实时翻译字幕

2026-02-06

场景简介

在跨语种 1v1 语音通话场景中,两位用户使用不同的语言进行交流。为了实现无障碍沟通,需要分别将对方的语音实时翻译为己方语言,并以字幕形式展示。

本文以 中文普通话英语 的 1v1 语音通话为例,演示如何通过 ZEGO 实时音视频产品,结合云端实时语音识别与翻译功能,实现双向语言互译,并在客户端仅展示对方翻译后的字幕。

翻译字幕效果图

核心流程

时序图

下图展示了 1v1 实时翻译字幕的核心交互流程:

流程说明

步骤说明
1两位用户使用 ZEGO Express SDK 加入同一实时音视频(RTC)房间,并分别以 s1s2 为流 ID 推流。
2业务服务端调用 StartRealtimeASRTask 创建识别任务,使用 StreamList 为两条流分别配置 ASR 和翻译参数。
3ZEGO 云端 ASR 服务加入 RTC 房间,拉取两条音频流。
4实时识别用户语音并翻译,翻译结果通过房间信令下发到客户端。
5通话结束后,服务端调用 StopRealtimeASRTask 停止任务。

前提条件

  1. 已在 ZEGO 控制台 开通云端实时语音识别服务。
  2. 已购买并获取翻译厂商(如豆包、通义千问机器翻译)的 API Key。
  3. 已下载并集成最新 ZEGO Express SDK
  4. 客户端已实现加入房间和推流功能。本例假设:
    • 用户 A(中文用户):userIdu1streamIds1
    • 用户 B(英文用户):userIdu2streamIds2

实现步骤

步骤一:服务端创建识别及翻译任务

服务端调用 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.EngineModelTypeASR 引擎模型,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 秒)没有真实用户时,后台会自动停止识别任务。

注意事项

  1. SDK 版本要求:必须使用针对 Cloud ASR 优化的 Express SDK 版本,否则无法正常接收字幕信令。
  2. 流 ID 一致性:服务端 StreamList 中的 StreamId 必须与客户端实际推流时使用的流 ID 完全一致。
  3. 翻译方向配置:请根据实际用户语言配置正确的 SourceLanguageTargetLanguage,确保翻译结果符合预期。
  4. API Key 安全:生产环境中,翻译服务的 ApiKey 应由服务端安全管理,避免泄露。
  5. 消息排序:通过房间信令收到的翻译文本可能会乱序到达,字幕组件已内置按 SeqId 排序的处理逻辑。

相关文档

上一篇

配置 ASR

下一篇

展示字幕