一、方案介绍
TRTC 的 AI 实时转录与翻译功能支持将房间内的音频流实时转换为文本,并可同步翻译为多种目标语言。通过 SDK 提供的 AITranscriberManager,你可以直接在客户端发起转录任务、接收识别结果并进行控制。相较于服务端接入方式,通过 SDK 接入无需自建后台调用云端 API,极大地简化了开发流程。
二、前提条件
参考 开通服务 进行资源开通。
注意:说明:
注意:语音转文本和实时翻译功能会根据调用量和模型引擎版本产生费用,详情请参见 费用详情。
三、步骤1:集成 TRTC SDK
导入 TRTC SDK 到项目中,进入 TRTC 房间并开启本地麦克风音频采集与发布。目前已经支持 iOS、Android、Windows、Mac 以及 Web 客户端直接发起转录和翻译任务,相关指引可参考:
·iOS 无 UI 集成指引
·Android 无 UI 集成指引
·Windows C++ 无 UI 集成指引
·Mac 无 UI 集成指引
·Web 无 UI 集成指引
注意:说明:
四、步骤2:获取 AITranscriberManager 实例
AITranscriberManager 是管理 AI 转录功能的核心类,你需要通过 TRTCCloud 获取其实例。
AndroidiOS&MacWindowsimport 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),你可以接收到房间内参与转录的用户的转录状态变化、实时转录翻译信息以及错误信息。
AndroidiOS&MacWindowsAITranscriberManager.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 开启服务。
AndroidiOS&MacWindowsAITranscriberManager.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 会默认生成一个,填写为空即可停止该机器人任务。)
AndroidiOS&MacWindowsaiTranscriberManager.stopRealtimeTranscriber("my_robot");[manager stopRealtimeTranscriber:@"my_robot"];manager->stopRealtimeTranscriber("my_robot");
SDK 会通过回调通知该接口的结果:
·调用成功后,你会收到 onRealtimeTranscriberStopped 回调,表示转录任务已成功停止,此时你将不会再接收到新的转录消息。
·调用失败后,你会收到 onRealtimeTranscriberError 回调,表示转录任务停止失败,此时你可以根据具体错误码做出相应措施(详情见下方 服务端错误码详情)。
十、源语言 (sourceLanguage)
| 语言代码 | 语言名称 |
| zh | 中文 |
| en | 英语 |
| zh-yue | 中国粤语 |
| vi | 越南语 |
| ja | 日语 |
| ko | 韩语 |
| id | 印度尼西亚语 |
| th | 泰语 |
| pt | 葡萄牙语 |
| tr | 土耳其语 |
| ar | 阿拉伯语 |
| es | 西班牙语 |
| hi | 印地语 |
| fr | 法语 |
| ms | 马来语 |
| fil | 菲律宾语 |
| de | 德语 |
| it | 意大利语 |
| ru | 俄语 |
| sv | 瑞典语 |
| da | 丹麦语 |
| no | 挪威语 |
十一、翻译目标语言 (translationLanguages)
| 语言代码 | 语言名称 |
| zh | 中文 |
| en | 英语 |
| es | 西班牙语 |
| pt | 葡萄牙语 |
| fr | 法语 |
| de | 德语 |
| ru | 俄语 |
| ar | 阿拉伯语 |
| ja | 日语 |
| ko | 韩语 |
| vi | 越南语 |
| ms | 马来语 |
| id | 印度尼西亚语 |
| it | 意大利语 |
| th | 泰语 |
十二、服务端错误码详情
| 错误码 | 含义 | 建议处理措施 |
| 2000 | 参数错误。 | 建议检查请求参数是否合法。 |
| 2002 | 任务不存在。 | 若是调用 stop 接口时返回,可忽略。 |
| 2026 | 转录服务(ASR/翻译服务)未开通。 | 请前往控制台开通相关服务。 |
| 3000 | 内部错误。 | 建议重试。 |
| 4003 | 任务正在退出。 | 若是调用 stop 接口时返回,可忽略。 |
| 5000 | 资源过载。 | 建议采用退避策略重试。 |
| 5001 | 并发受限。 | 请联系产品侧提升并发限制。 |
| -102009 | 主播不在房间内。 | 建议确认主播状态后延迟重试。 |
| -102005 | 房间不存在。 | 建议确认房间状态后延迟重试。 |