本文将介绍如何使用 TRTC SDK 中的
AITranscriberManager 接口在客户端快速集成 AI 实时转录(语音转文字)与实时翻译功能。方案介绍
TRTC 的 AI 实时转录与翻译功能支持将房间内的音频流实时转换为文本,并可同步翻译为多种目标语言。通过 SDK 提供的
AITranscriberManager,您可以直接在客户端发起转录任务、接收识别结果并进行控制。相较于服务端接入方式,通过 SDK 接入无需自建后台调用云端 API,极大地简化了开发流程。前提条件
前往 控制台 > 功能配置 > 增值功能,开启 AI 智能识别的语音转文字、实时翻译功能。

说明:
开启前需领取包月套餐体验版、购买 AI 智能识别套餐包 或订阅 TRTC 包月套餐的部分版本才可使用,具体版本支持的功能详情可参见 TRTC 包月套餐,您可根据您的需要进行订阅。
语音转文字和实时翻译功能会根据调用量产生费用,详情请参见 费用详情。
接入流程
步骤1:集成 TRTC SDK
导入 TRTC SDK 到项目中,进入 TRTC 房间并开启本地麦克风音频采集与发布。目前已经支持 iOS、Android、Windows 和 Mac 客户端直接发起转录和翻译任务,相关指引可参考:
步骤2:获取 AITranscriberManager 实例
AITranscriberManager 是管理 AI 转录功能的核心类,您需要通过 TRTCCloud 获取其实例。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),您可以接收到房间内参与转录的用户的转录状态变化、实时转录翻译信息以及错误信息。
AITranscriberManager.AITranscriberListener listener = new AITranscriberManager.AITranscriberListener() {@Overridepublic void onRealtimeTranscriberStarted(String roomId, String transcriberRobotId) {// 转录已开启}@Overridepublic void onReceiveTranscriberMessage(String roomId, AITranscriberManager.TranscriberMessage message) {// 处理实时转录与翻译消息}@Overridepublic void onRealtimeTranscriberStopped(String roomId, String transcriberRobotId, int reason) {// 转录已停止}@Overridepublic 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 开启服务。AITranscriberManager.TranscriberParams params = new AITranscriberManager.TranscriberParams();params.transcriberRobotId = "my_robot"; // 可选:指定机器人 IDparams.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"; // 可选:指定机器人 IDparams.sourceLanguage = @"zh"; // 源语言:中文params.translationLanguages = @[@"en", @"ja"]; // 可选:不填时仅发起转录,不进行翻译params.userIdsToTranscribe = @[@"userA"]; // 可选:不填时表示转录房间内所有用户[manager startRealtimeTranscriber:params];
liteav::TranscriberParams params;params.transcriberRobotId = "my_robot"; // 可选:指定机器人 IDparams.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 会默认生成一个,填写为空即可停止该机器人任务。)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 | 房间不存在。 | 建议确认房间状态后延迟重试。 |