使用说明
本文介绍如何在你的项目中集成和使用云知声实时语音转写(中/英)插件(以下简称“云知声转写插件”)。
技术原理
云知声转写插件是对云知声核心 API 的封装。通过声网 SDK v4.x 提供的 setExtensionProperty
方法,传入指定的 key
和 value
参数,你可以快速集成云知声的实时语音转写能力。
setExtensionProperty
方法的 key
参数与云知声的 API 名称完全对应,value
参数以 JSON 格式包装该 API 的部分或全部参数。因此,调用该方法时只要传入指定的 key
和 value
,就可以调用对应的云知声 API,实现实时语音转写的有关功能。
前提条件
Android 开发环境需满足以下要求:
- Android Studio 4.1 以上版本。
- 运行 Android 5.0 或以上版本的真机(非模拟器)。
示例项目
云知声转写插件提供了 GitHub 示例项目,你可以前往克隆或下载并进行体验。
平台 | 语言 | 示例代码 |
---|---|---|
Android | Java | rtvt-agora-marketplace |
iOS | Objective-C | rtvt-agora-marketplace |
运行步骤
参考以下步骤快速跑通示例项目:
-
克隆仓库:
Shellgit clone https://github.com/AgoraIO-Community/AgoraMarketPlace.git
-
进入声网控制台 > 云市场页面,下载云知声实时语音转写(中/英)的 Android 插件包。解压后,将所有
.aar
文件保存到Unisound/android/app/libs
路径。 -
在 Android Studio 中打开示例项目
Unisound/android
。 -
将项目与 Gradle 文件同步。
-
打开
Unisound/android/app/src/main/java/io/agora/rte/extension/unisound/example/Config.java
文件,进行如下修改:- 将
<YOUR_APP_ID>
替换为你的 App ID。获取 App ID 请参考开通服务。 - 将
<YOUR_APP_KEY>
和<YOUR_APP_SECRET>
分别替换为你的appKey
和appSecret
。获取方式详见购买和激活插件。
Javapublic interface Config {
// 待替换
String mAppId = "<YOUR_APP_ID>";
String mToken = null;
String mLicenseName = "<YOUR_LICENSE_NAME>";
// 待替换
String mAppKey = "<YOUR_APP_KEY>";
// 待替换
String mAppSecret = "<YOUR_APP_SECRET>";
// 无需填写
String mEvalAppKey = "<EVAL_APP_KEY>";
} - 将
-
连接一台 Android 真机(非模拟器),运行项目。
预期效果
运行成功后,示例项目会安装到你的设备上。按照如下步骤体验美化特效功能:
- 启动 App,你可以在界面上看到 disableExtension、Start ASR、Start EVAL按钮
- 点击 Start ASR 开始语音转写。此时 Start ASR 按钮会变成 Stop ASR 按钮。
- 点击 Stop ASR 结束语音转写。
集成和调用流程
1. 集成 SDK 和插件
开始前,你需要在项目中分别集成声网音频 SDK 和云知声转写插件。
1.1 集成声网音频 SDK
插件需要与 RTC SDK 搭配使用。参考以下文档集成 RTC SDK 并实现基础的音视频互动:
1.2 购买和激活插件
你需要进入声网控制台 > 云市场页面,按照提示购买云知声转写插件,保存好获取到的 appKey
和 appSecret
,后续初始化插件时需要用到。
1.3 集成插件
参考以下步骤集成插件:
-
进入声网控制台 > 云市场页面下载云知声实时语音转写(中/英)的 Android 插件包。
-
解压后,将所有
.aar
文件保存到项目文件夹的/app/libs
路径。 -
打开
app/build.gradle
文件,在dependencies
中添加如下行:Javaimplementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.alibaba:fastjson:1.1.72.android'
1.4 升级插件
声网云市场推荐你更新插件版本前使用数据库工具 (如 SQLite) 来实现插件版本管理,从而确保插件版本与对应的资源包版本一致。因为当插件版本和资源包版本未对齐时,会出现 App 闪退、崩溃等现象。
以下是用 SQLite 来进行插件版本管理的示例:
- 使用 SQLite 数据库自行维护插件包和资源包的版本信息。
- 每次项目初始化时,自动检测当前项目使用的资源包版本:
- 如果无记录文件或记录的资源包版本为旧,则更新资源。成功更新后,回写最新资源包版本信息到 SQLite。
- 如果记录的资源包版本与当前匹配,则正常实现业务。
如果你的项目已经集成过声网云市场提供的第三方插件,并需要更新插件,可以参考以下步骤来保证更新后的可用性。
以下升级流程以相芯美颜特效插件为例:
-
参考集成插件章节下载所需平台最新版本的插件包和资源包。
-
删除项目内旧版本的插件包及其资源包后,再将新版插件和资源包放入对应位置。或者直接在对应目录下用新版插件和资源包替换旧版。
-
删除设备上用老版本插件和资源包编译的 App,重新编译你的项目并运行。
编译 App 时,系统会优先使用连接设备上存在的资源包。请务必在删除旧版本应用程序后再进行编译和运行,否则可能会出现插件版本与资源包不匹配的情况,从而导致各种意外问题。
2. 启用插件
初始化 RtcEngine
时,调用 addExtension
加载插件,然后调用 enableExtension
启用插件。
RtcEngineConfig config = new RtcEngineConfig();
config.addExtension("AgoraUnisoundExtension");
mRtcEngine = RtcEngine.create(config);
mRtcEngine.enableExtension("Unisound", "ASR_EVAL", enabled);
3. 初始化插件
调用 setExtensionProperty
方法,指定 key
为 init_asr
并在 value
中传入 appkey
和 secret
。
// 方便后续多次调用 setExtensionProperty
private void setExtensionProperty(String key, String property) {
mRtcEngine.setExtensionProperty("Unisound", "ASR_EVAL", key, property);
}
// 初始化插件
try {
JSONObject jsonObject = new JSONObject();
// 传入在声网控制台激活插件后获取的 appKey
jsonObject.put("appkey", "<Your appKey>");
// 传入在声网控制台激活插件后获取的 appSecret
jsonObject.put("secret", "<Your appSecret>");
setExtensionProperty("init_asr", jsonObject.toString());
} catch (JSONException e) {
Log.e(TAG, e.toString());
}
4. 开始识别
调用 setExtensionProperty
方法,指定 key
为 start_asr
。你还可以设置识别的领域、语言、采样率等,详见 key-value 说明。
setExtensionProperty("start_asr", "{}");
5. 接收识别结果
成功开始识别后,云知声插件会返回 onEvent(asr_result, "识别结果")
回调。
识别结果的 JSON 示例:
{
"code": 0,
"msg": "success",
"sid": "requestid",
"type": "fixed",
"text": "不断提升自己,在学习的过程中,让他明白生命的本质是过活简单平凡而有意义的日子。另一个分享者是一名27岁的it男,2015年到朋友圈晒的都是打王者的战绩,而2018年却什么也没有发。",
"start_time": 58860,
"end_time": 70500
}
各字段的解释详见 onEvent 回调。
4. 结束识别
调用 setExtensionProperty
方法并指定 key
为 stop_asr
。
setExtensionProperty("stop_asr", "{}");