客户端

最近更新时间:2026-01-09 19:35:11

我的收藏
本文将介绍如何使用 TRTC SDK 中的 AITranscriberManager 接口在客户端快速集成 AI 实时转录(语音转文字)与实时翻译功能。

方案介绍

TRTC 的 AI 实时转录与翻译功能支持将房间内的音频流实时转换为文本,并可同步翻译为多种目标语言。通过 SDK 提供的 AITranscriberManager,您可以直接在客户端发起转录任务、接收识别结果并进行控制。相较于服务端接入方式,通过 SDK 接入无需自建后台调用云端 API,极大地简化了开发流程。

前提条件

登录 TRTC 控制台,开通 TRTC 服务并 创建应用
前往 控制台 > 功能配置 > 增值功能,开启 AI 智能识别的语音转文字、实时翻译功能。

说明:
开启前需领取包月套餐体验版、购买 AI 智能识别套餐包 或订阅 TRTC 包月套餐的部分版本才可使用,具体版本支持的功能详情可参见 TRTC 包月套餐,您可根据您的需要进行订阅。
语音转文字和实时翻译功能会根据调用量产生费用,详情请参见 费用详情

接入流程

步骤1:集成 TRTC SDK

导入 TRTC SDK 到项目中,进入 TRTC 房间并开启本地麦克风音频采集与发布。目前已经支持 iOS、Android、Windows 和 Mac 客户端直接发起转录和翻译任务,相关指引可参考:

步骤2:获取 AITranscriberManager 实例

AITranscriberManager 是管理 AI 转录功能的核心类,您需要通过 TRTCCloud 获取其实例。
Android
iOS&Mac
Windows
import com.tencent.liteav.transcriber.AITranscriberManager;

TRTCCloud mTRTCCloud = TRTCCloud.sharedInstance(context);
AITranscriberManager aiTranscriberManager = mTRTCCloud.getAITranscriberManager();
TRTCCloud *trtcCloud = [TRTCCloud sharedInstance];
AITranscriberManager *manager = [trtcCloud getAITranscriberManager];
liteav::ITRTCCloud* trtcCloud = liteav::ITRTCCloud::getTRTCShareInstance();
liteav::AITranscriberManager* manager = trtcCloud->getAITranscriberManager();

步骤3:设置事件监听

通过设置监听器(Listener),您可以接收到房间内参与转录的用户的转录状态变化、实时转录翻译信息以及错误信息。
Android
iOS&Mac
Windows
AITranscriberManager.AITranscriberListener listener = new AITranscriberManager.AITranscriberListener() {
@Override
public void onRealtimeTranscriberStarted(String roomId, String transcriberRobotId) {
// 转录已开启
}

@Override
public void onReceiveTranscriberMessage(String roomId, AITranscriberManager.TranscriberMessage message) {
// 处理实时转录与翻译消息
}

@Override
public void onRealtimeTranscriberStopped(String roomId, String transcriberRobotId, int reason) {
// 转录已停止
}

@Override
public void onRealtimeTranscriberError(String roomId, String transcriberRobotId, int error, String errorInfo) {
// 处理实时转录服务错误信息
}
};

aiTranscriberManager.addListener(listener);
- (void)onRealtimeTranscriberStarted:(NSString *)roomId transcriberRobotId:(NSString *)transcriberRobotId {
// 转录已开启
}

- (void)onReceiveTranscriberMessage:(NSString *)roomId message:(TranscriberMessage *)message {
// 处理实时转录与翻译消息
}

- (void)onRealtimeTranscriberStopped:(NSString *)roomId transcriberRobotId:(NSString *)transcriberRobotId reason:(NSInteger)reason {
// 转录已停止
}

- (void)onRealtimeTranscriberError:(NSString *)roomId transcriberRobotId:(NSString *)transcriberRobotId error:(NSInteger)error errorInfo:(NSString *)errorInfo {
// 处理实时转录服务错误信息
}

[manager addListener:self];
class MyTranscriberListener : public liteav::AITranscriberListener {
public:
void onRealtimeTranscriberStarted(const char* roomId, const char* transcriberRobotId) override {
// 转录已开启
}

void onReceiveTranscriberMessage(const char* roomId, const liteav::TranscriberMessage& message) override {
// 处理实时转录与翻译消息
}

void onRealtimeTranscriberStopped(const char* roomId, const char* transcriberRobotId, int reason) override {
// 转录已停止
}
void onRealtimeTranscriberError(const char* roomId, const char* transcriberRobotId, int error, const char* errorInfo) override {
// 处理实时转录服务错误信息
}
};

MyTranscriberListener* listener = new MyTranscriberListener();
manager->addListener(listener);

TranscriberMessage 转录消息详情

字段名
类型
说明
segmentId
String
消息段的唯一标识 ID。可用于消息去重或排序。
speakerUserId
String
说话用户的 ID。
sourceText
String
识别出的源语言文本(Unicode 编码)。
translationTexts
Map/List
翻译后的目标语言文本。
timestamp
long
消息生成的 UTC 时间戳,单位:毫秒。
isCompleted
bool
转录是否结束。
true: 表示该句话已说完,是最终结果。
false: 表示该句话还在进行中,是中间结果(流式更新)。

步骤4:启动转录任务

构建 TranscriberParams 参数对象,配置转录机器人 ID、源语言、目标翻译语言等信息,然后调用 startRealtimeTranscriber 开启服务。
Android
iOS&Mac
Windows
AITranscriberManager.TranscriberParams params = new AITranscriberManager.TranscriberParams();
params.transcriberRobotId = "my_robot"; // 可选:指定机器人 ID
params.sourceLanguage = "zh"; // 源语言:中文
params.translationLanguages = Arrays.asList("en", "ja"); // 可选:不填时仅发起转录,不进行翻译
params.userIdsToTranscribe = Arrays.asList("userA"); // 可选:不填时表示转录房间内所有用户

aiTranscriberManager.startRealtimeTranscriber(params);
TranscriberParams *params = [[TranscriberParams alloc] init];
params.transcriberRobotId = @"my_robot"; // 可选:指定机器人 ID
params.sourceLanguage = @"zh"; // 源语言:中文
params.translationLanguages = @[@"en", @"ja"]; // 可选:不填时仅发起转录,不进行翻译
params.userIdsToTranscribe = @[@"userA"]; // 可选:不填时表示转录房间内所有用户

[manager startRealtimeTranscriber:params];
liteav::TranscriberParams params;
params.transcriberRobotId = "my_robot"; // 可选:指定机器人 ID
params.sourceLanguage = "zh"; // 源语言:中文
const char* targetLangs[] = {"en", "ja"};
params.translationLanguages = targetLangs; // 可选:不填时仅发起转录,不进行翻译
params.translationLanguagesCount = 2;
const char* transcribeUsers[] = {"userA"};
params.userIdsToTranscribe = transcribeUsers; // 可选:不填时表示转录房间内所有用户
params.userIdsToTranscribeCount = 1;

manager->startRealtimeTranscriber(params);

TranscriberParams 转录参数详情

参数字段
类型
必填
说明
transcriberRobotId
String
转录机器人的唯一标识 ID。
单个转录任务场景下,如果不指定,SDK 会默认生成一个 ID,格式为 transcriber_${roomid}_robot_${userid}
若同时发起多个转录任务,需要指定的机器人 ID。
sourceLanguage
String
源语言代码。
指定源音频的语言种类,请填写标准的语言代码(如“zh”)。
支持列表见下方 支持的语言代码
translationLanguages
List/Array
翻译目标语言代码列表。
如果需要翻译,请在此设置目标语言代码(如“en”)。
支持列表见下方 支持的语言代码
userIdsToTranscribe
List/Array
指定转录的用户 ID 列表。
如果不填,默认转录房间内所有用户的音频。
SDK 会通过回调通知该接口的结果:
调用成功后,您会收到 onRealtimeTranscriberStarted 回调,表示转录任务已成功开启,此时您将可以通过 onReceiveTranscriberMessage 回调接收实时转录翻译信息。
调用失败后,您会收到 onRealtimeTranscriberError 回调,表示转录任务开启失败,此时您可以根据具体错误码做出相应措施(详情见下方 服务端错误码详情)。

步骤5:停止转录任务

当业务结束或不再需要转录时,调用 stopRealtimeTranscriber 停止任务以释放资源。请传入启动时使用的机器人 ID。(若启动时未指定机器人 ID 会默认生成一个,填写为空即可停止该机器人任务。)
Android
iOS&Mac
Windows
aiTranscriberManager.stopRealtimeTranscriber("my_robot");
[manager stopRealtimeTranscriber:@"my_robot"];
manager->stopRealtimeTranscriber("my_robot");
SDK 会通过回调通知该接口的结果:
调用成功后,您会收到 onRealtimeTranscriberStopped 回调,表示转录任务已成功停止,此时您将不会再接收到新的转录消息。
调用失败后,您会收到 onRealtimeTranscriberError 回调,表示转录任务停止失败,此时您可以根据具体错误码做出相应措施(详情见下方 服务端错误码详情)。

支持的语言代码

源语言 (sourceLanguage)

语言代码
语言名称
zh
中文
en
英语
注意:
客户端发起实时转录功能目前支持 2 种语言:中文、英语,后续将上线更多语种。
为了简化接入流程并提供最佳的效果,通过客户端 AITranscriberManager 发起的中文和英文实时转录默认使用标准版语言引擎中的最新 16k_zh_en 旗舰款语音识别模型,相关计费说明参考 标准版语言引擎费用

翻译目标语言 (translationLanguages)

语言代码
语言名称
zh
中文
en
英语
es
西班牙语
pt
葡萄牙语
fr
法语
de
德语
ru
俄语
ar
阿拉伯语
ja
日语
ko
韩语
vi
越南语
ms
马来语
id
印度尼西亚语
it
意大利语
th
泰语
注意:
实时翻译功能目前支持15种语言:中文、英语、西班牙语、葡萄牙语、法语、德语、俄语、阿拉伯语、日语、韩语、越南语、马来语、印度尼西亚语、意大利语、泰语,如需其他语种支持可以 联系我们
由于受不同语境或语种差异的影响,AI 翻译的译文内容适用于辅助参考,不应作为唯一专业意见或结论。

服务端错误码详情

错误码
含义
建议处理措施
2000
参数错误。
建议检查请求参数是否合法。
2002
任务不存在。
若是调用 stop 接口时返回,可忽略。
2026
转录服务(ASR/翻译服务)未开通。
请前往控制台开通相关服务。
3000
内部错误。
建议重试。
4003
任务正在退出。
若是调用 stop 接口时返回,可忽略。
5000
资源过载。
建议采用退避策略重试。
5001
并发受限。
请联系产品侧提升并发限制。
-102009
主播不在房间内。
建议确认主播状态后延迟重试。
-102005
房间不存在。
建议确认房间状态后延迟重试。