Skip to main content
Version: Next

常见问题

iOS

为什么在线能力需要先调用 verifyAuth(_:)

在线翻译、在线建房与在线建通道都依赖鉴权成功后得到的业务 token。在线语言列表是例外:完成 sdkInit(_:) 后即可请求,不依赖 verifyAuth(_:)

为什么离线翻译也建议先调用 verifyAuth(_:)

离线翻译并不是零前置条件直接可用。SDK 在 verifyAuth(_:) 中会先完成在线鉴权,并在在线鉴权成功后继续尝试离线鉴权,用于确认当前账号是否开通离线翻译能力,并获取离线能力所需的鉴权信息。

为什么离线模型下载成功过,之后又可能不能使用?

常见原因包括:

  • 当前账号已不具备离线能力

  • 本地模型目录被删除或不完整

  • 模型根目录变更

  • 本次创建通道时所需语言对或场景与已下载模型不匹配

建议在创建离线通道前先调用 isOfflineModelReady(...) 检查。

为什么在线和离线的语言 code 不完全一样?

在线语言通常使用更完整的 locale 代码,例如 zh-CNen-US;离线语言通常使用短码,例如 zhen。接入时请始终使用对应语言列表接口返回的实际 code。

为什么当前建议使用 16000 采样率?

当前 SDK、Demo 和自动化测试主流程都以 16000 Hz 为准。其他采样率暂未完成完整兼容性验证,正式接入建议优先使用 16000。

为什么离线一对一模式需要双声道输入?

一对一模式会把左右声道视为两路独立输入:

  • 左声道:一侧说话人

  • 右声道:另一侧说话人

因此一对一模式应设置 pcmChannels = 2,并输入正确的双声道 PCM。

为什么 onRecognized(...)onTranslate(...) 会多次回调?

这两个回调都支持增量结果:

  • isFinal == false:中间过程结果

  • isFinal == true:本段最终结果

业务方应以 isFinalresult.isLast 判断当前结果是否结束。

releaseChannel()destroy() 有什么区别?

  • releaseChannel():释放当前翻译会话相关资源,包含当前通道、未完成建房请求、在线房间关闭和离线模型下载管理器等会话状态。下次创建通道前建议先调用。

  • destroy():释放 SDK 全局资源。调用后若要继续使用,必须重新 sdkInit(_:),并根据业务重新鉴权。

auto / mix 可以直接用于生产吗?

当前可以传入,但实际仍会落到在线引擎执行。如果你需要明确行为,建议直接使用 .online.offline

TmkTranslationMessageTunnel 离线可以用吗?

不可以。TmkTranslationMessageTunnel 仅在线翻译使用,离线翻译会忽略该配置。

isOfflineTranslationSupported() 返回 false 怎么办?

说明当前账号或当前鉴权上下文不支持离线翻译。即使 verifyAuth(_:) 已成功,只要离线鉴权未成功,当前接口仍可能返回 false。此时不能创建可用的离线翻译通道。请先确认:

  • 已成功调用 verifyAuth(_:)

  • 当前环境配置正确

  • 账号已开通离线能力

为什么切换新房间或新通道前建议先释放旧资源?

当前 SDK 使用时建议遵循单房间、单通道模型。创建新的翻译会话前,建议先调用 TmkTranslationSDK.shared.releaseChannel() 释放旧会话,避免旧资源仍占用网络、音频、房间或状态机上下文。

离线 License 解密或解析失败怎么办?

如果本地 License 因密钥变更、历史版本兼容、设备绑定变化等原因解密或解析失败,SDK 会清理本地离线授权状态并尝试重新请求 License。若当前无网络或后台签发失败,在线 verifyAuth(_:) 仍以在线鉴权结果为准;离线能力会保持不可用,业务侧应提示用户联网后重试离线能力。不要删除 Keychain 中的设备密钥,也不要在 Release 版本调用调试清理接口。

clientSecret 变更后离线 License 还能用吗?

旧 License 可能无法继续解密。SDK 会自动走重新签发流程,联网成功后即可恢复;离线无网络时无法重新签发,业务侧应提示用户联网重新鉴权。clientSecret 不应写入日志、诊断附件或用户可见错误信息。

Android

为什么在线能力需要先调用 verifyAuth(callback)

在线建房、建通道和 token 获取依赖鉴权结果。未鉴权或鉴权失败时,创建通道可能返回 SDK_NOT_INITIALIZEDAUTHENTICATION_FAILEDROOM_CREATION_FAILEDCHANNEL_CREATION_FAILED

为什么离线翻译也建议先调用 verifyAuth(callback)

离线能力由账号权限和 License 鉴权共同决定。verifyAuth(callback) 成功后,业务侧需要通过 isOfflineTranslationSupported() 判断当前账号是否开通离线能力,再下载模型或创建离线通道。

为什么离线模型下载成功过,之后又可能不能使用?

模型资源可能被用户清理、版本需要更新、模型根目录改变,或本地 manifest 与当前下载源不一致。创建离线通道前应重新调用 isOfflineModelReady(...)getOfflineModelPackageInfos(...)

为什么在线和离线的语言 code 不完全一样?

在线语言由服务端配置决定,常使用完整 BCP-47 代码。离线引擎使用主语言标签加载模型,SDK 会把 zh-CNzh-HK 等归一为 zh。离线可用语种由 License scope 与已下载的离线模型共同决定,SDK 层不再做语种白名单拦截:缺少对应模型时在模型资源校验阶段报 OFFLINE_MODEL_NOT_READY,仅当底层引擎运行期判定 locale 非法时才返回 2001113 / INVALID_LANGUAGE_CODE

为什么当前建议使用 16000 采样率?

当前在线/离线链路均按 16k PCM 作为推荐输入规格。采样率和声道数与配置不一致会导致识别效果下降、无结果或音频处理错误。

为什么离线一对一模式需要双声道输入?

离线一对一内部会把左右声道拆分成两条 pipeline:左声道按 sourceLang -> targetLang 处理,右声道按 targetLang -> sourceLang 处理。输入不是双声道交织 PCM 时,声道归属和翻译方向会错误。

为什么 onRecognized(...)onTranslate(...) 会多次回调?

ASR 和 MT 可能返回中间结果和最终结果。业务侧应通过 isFinalr.isLast 区分是否为最终文本。

stop()destroy()releaseChannel() 有什么区别?

stop() 停止当前数据流,适合等待最终结果后再释放。destroy() 只释放单个通道对象。TmkTranslationSDK.releaseChannel() 是会话级释放入口,会释放当前通道、清空当前房间引用,并在在线房间已创建时异步关房,适合页面退出、切换通道或异常恢复。

AUTO / MIX 可以直接用于生产吗?

当前文档只建议生产接入使用 ONLINEOFFLINEAUTO / MIX 属于保留能力或内部策略,不建议三方业务直接作为主流程。

isOfflineTranslationSupported() 返回 false 怎么办?

先确认已完成 sdkInit(context, config)verifyAuth(callback),并确认账号已开通离线能力。如果仍为 false,不要启动离线模型下载或离线通道,应提示用户检查账号权限或联系后台配置。

为什么切换新房间或新通道前建议先释放旧资源?

旧通道可能仍持有 RTC/RTM、离线 pipeline、音频播放、房间引用或回调引用。切换前先调用 TmkTranslationSDK.releaseChannel() 可以避免旧异步回调污染新页面状态,并避免在线房间遗留。

离线 License 解密或解析失败怎么办?

SDK 会尝试清理本地离线授权状态并重新签发 License。重新签发仍失败时,业务侧应提示用户检查网络、账号权限、包名和鉴权配置后重试。

clientSecret 变更后离线 License 还能用吗?

旧 License 可能无法继续解密。联网时 SDK 会尝试重新签发 License;离线无网络时无法重新签发,业务侧应提示用户联网重新鉴权。


离线模型

为什么一对一下载了 zh2en 仍然检测不通过?

一对一需要双向翻译模型。zh-CNen-US 必须同时包含:

mt/zh2en
mt/en2zh

同时还需要双向 ASR 和双语 TTS。

是否必须下载 tts/tmk-tts-data

如果启用 TTS,则必须下载 tts/tmk-tts-data。如果业务明确关闭 TTS,则可以不下载 TTS 语言包和公共数据包。

zip 解压后目录多了一层怎么办?

宿主应调整最终目录,确保 SDK 看到的路径是:

{modelRoot}/{type}/{name}

例如中文 ASR 必须放在:

{modelRoot}/asr/zh

SDK 检测不通过时先查什么?

优先检查:

  • 包是否下载完整。

  • zip 是否已解压。

  • 目标目录是否为空。

  • 目录层级是否正确。

  • 语言方向是否完整,尤其是一对一的双向 MT。

  • SDK 检测时传入的 {modelRoot} 是否与宿主下载目录一致。