本文介绍如何在你的项目中集成和使用依图实时语音转写(中文)插件(以下简称“依图实时转写插件”),包括 Android 和 iOS 平台。
依图实时转写插件需要与声网音频 SDK v4.x 搭配使用。参考以下文档集成音频 SDK v4.x 并实现基础的语音通话:
在声网控制台购买和激活依图实时转写插件。购买成功后,保存好弹窗中展示的 devId
和 accessKey
,后续初始化插件时需要用到。
参考如下步骤在你的项目中集成依图实时转写插件:
Android
.aar
文件保存到项目文件夹的 /app/libs
路径。app/build.gradle
文件,在 dependencies
中添加如下行:implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
import io.agora.extension.yitu.ExtensionManager;
iOS
.dylib
库文件保存到你的项目文件夹下。以如下项目结构为例,你可以把库文件保存到 Libs
路径下。
.
├── <ProjectName>
├── <ProjectName>.xcodeproj
├── Libs
本节介绍插件相关接口的调用流程。接口的参数解释详见接口说明。
Android
初始化声网 RtcEngine
时,调用 addExtension
加载插件,然后调用 enableExtension
开启插件。
RtcEngineConfig config = new RtcEngineConfig();
config.addExtension(ExtensionManager.EXTENSION_NAME);
mRtcEngine = RtcEngine.create(config);
mRtcEngine.enableExtension(ExtensionManager.EXTENSION_VENDOR_NAME, ExtensionManager.EXTENSION_AUDIO_FILTER_NAME, true);
iOS
初始化声网 AgoraRtcEngine
时,调用 enableExtensionWithVendor
启用插件。
[self.agoraKit enableExtensionWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
enabled:YES];
调用 setExtensionProperty
(Android)或 setExtensionPropertyWithVendor
(iOS),依次设置依图服务器 IP、端口、devId
、accessKey
。
Android
public static final String EXTENSION_VENDOR_NAME = "Yitu";
public static final String EXTENSION_AUDIO_FILTER_NAME = "YituSpeechRecognition";
mRtcEngine.setExtensionProperty(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER_NAME, "ip", "127.0.0.1");
mRtcEngine.setExtensionProperty(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER_NAME, "port", "8080");
mRtcEngine.setExtensionProperty(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER_NAME, "devID", "2333");
mRtcEngine.setExtensionProperty(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER_NAME, "accessKey", "21354515312");
iOS
[self.agoraKit setExtensionPropertyWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
key:@"ip"
value:@"127.0.0.1"];
[self.agoraKit setExtensionPropertyWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
key:@"port"
value:@"8080"];
[self.agoraKit setExtensionPropertyWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
key:@"devId"
value:@"2333"];
[self.agoraKit setExtensionPropertyWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
key:@"accessKey"
value:@"21354515312"];
调用 setExtensionProperty
(Android)或 setExtensionPropertyWithVendor
(iOS),发起 websocket 连接。
Android
mRtcEngine.setExtensionProperty(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER_NAME, "command", "websocketConnect");
iOS
[self.agoraKit setExtensionPropertyWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
key:@"command"
value:@"websocketConnect"];
如果 websocket 连接成功,依图插件会返回 onEvent(websocketConnectResult, success)
回调。
成功建立 websocket 连接后,如果 10 秒内无任何操作,服务器将自动断开连接,此时你会收到 onEvent(websocketConnectResult, remoteClose)
回调。
收到成功连接 websocket 的回调后,你需要调用 setExtensionProperty
(Android)或 setExtensionPropertyWithVendor
(iOS) 创建任务。目前依图只支持采样率 sampleRate
为 16000。
Android
mRtcEngine.setExtensionProperty(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER_NAME, "createTask", "{\"audioConfig\":{\"aue\":\"PCM\",\"sampleRate\":16000},\"speechConfig\":{\"lang\":\"MANDARIN\",\"customWord\":[\"依图\",\"卡拉 O K\"],\"recognizeType\":\"STREAMING\",\"wordsReplace\":{\"keywords\":[\"回忆\"],\"replace\":[\"什么\"]}}}");
iOS
[self.agoraKit setExtensionPropertyWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
key:@"createTask"
value:@"{\"audioConfig\":{\"aue\":\"PCM\",\"sampleRate\":16000},\"speechConfig\":{\"lang\":\"MANDARIN\",\"customWord\":[\"依图\",\"卡拉 O K\"],\"recognizeType\":\"STREAMING\",\"wordsReplace\":{\"keywords\":[\"回忆\"],\"replace\":[\"什么\"]}}}"];
其中 value
参数的 JSON 格式如下:
{
"audioConfig": {
"aue": "PCM",
"sampleRate": 16000
},
"speechConfig": {
"lang": "MANDARIN",
"customWord": ["依图", "卡拉 O K"],
"recognizeType": "STREAMING",
"wordsReplace": {
"keywords": ["回忆"],
"replace": ["什么"]
}
}
}
各字段的解释详见 JSON 字段说明。
创建完任务后,依图插件会自动开启码流解析,返回 onEvent(recognizedResult, "识别结果")
回调。解析过程中会多次返回结果,isFinal
字段为 true
代表是最终的返回结果。
返回结果的 JSON 示例:
{
"globalStreamId": "85987bdd-c187-4019-a8e7-1a6ecb3ad840",
"result": {
"isFinal": true,
"bestTranscription": {
"transcribedText": "啊什么一",
"piece": [
{
"transcribedText": "啊",
"endTimestamp": 60,
"transcribedType": 20
},
{
"transcribedText": "什",
"beginTimestamp": 840,
"endTimestamp": 930,
"transcribedType": 20
},
{
"transcribedText": "么",
"beginTimestamp": 930,
"endTimestamp": 1020,
"transcribedType": 20
},
{
"transcribedText": "一",
"beginTimestamp": 1050,
"endTimestamp": 1110,
"transcribedType": 20
}
]
},
"status": {
"processedTimestamp": 1500
}
}
}
各字段的解释详见 JSON 字段说明。
需要停止识别时,调用 setExtensionProperty
(Android)或 setExtensionPropertyWithVendor
(iOS) 关闭任务。关闭任务代表插件不再接收新的码流,已经接收到的码流仍然会返回解析结果。
Android
mRtcEngine.setExtensionProperty(EXTENSION_VENDOR_NAME, EXTENSION_AUDIO_FILTER_NAME, "command", "turnOffAudioStream");
iOS
[self.agoraKit setExtensionPropertyWithVendor:@"Yitu"
extension:@"YituSpeechRecognition"
key:@"command"
value:@"turnOffAudioStream"];
关闭成功后,依图插件会返回 onEvent(websocketConnectResult, close)
回调,代表插件接收到的码流均已解析完成,websocket 连接已关闭。
关闭任务后,如果需要再次开启实时转写或需要修改配置参数,从第 3 步建立 websocket 连接开始即可。
前往 Gitee 下载示例项目,查看完整的项目结构和示例代码:
平台 | 语言 | 项目路径 |
---|---|---|
Android | Java | /agora/android |
iOS | Objective-C | /agora/ios |
Android
克隆仓库:
git clone https://gitee.com/shanghai-yitu-network/saas-demo.git
在声网控制台购买和激活依图实时语音转写(中文)插件,购买成功后,保存好弹窗中展示的 devId
和 accessKey
。
进入声网控制台 > 云市场页面,下载依图实时语音转写(中文) 的 Android 插件动态库压缩包。
解压文件夹,将所有 .aar
文件保存到项目文件夹的 Android/app/libs
路径。
在 Android Studio 中打开示例项目。
将项目与 Gradle 文件同步。
打开 MainActivity.java
文件,填入你的声网 App ID。获取 App ID 请参考开始使用声网平台。
// 第 32 行
private static final String appId = "";
连接一台 Android 真机(非模拟器),运行项目。
iOS
克隆仓库:
git clone https://gitee.com/shanghai-yitu-network/saas-demo.git
在声网控制台购买和激活依图实时语音转写(中文)插件,购买成功后,保存好弹窗中展示的 devId
和 accessKey
。
进入声网控制台 > 云市场页面,下载依图实时语音转写(中文)的 iOS 插件动态库压缩包。
解压文件夹,将所有 .dylib
文件保存到 iOS/Libs
路径下。
在终端中进入 iOS
目录,运行以下命令使用 CocoaPods 安装依赖:
pod install
在 Xcode 中打开项目 iOS/ExtensionExample.xcworkspace
。
打开 AppID.m
文件,在如下行中填入你的声网 App ID。获取 App ID 请参考开始使用声网平台。
NSString *const appID = @"";
连接一台 iOS 真机(非模拟器),运行项目。
运行成功后,示例项目会安装到你的 Android 或 iOS 设备上。
启动 app,在设置 DEVID、设置公钥输入框中分别填入购买插件时获取的 devId
和 accessKey
,注意删除输入框内自带的 =
。
单击左下角的 ENABLE 按钮启动倾听。
对着麦克风说话,语音转写文本会显示在文本视图中。
单击右下角的关闭码流按钮停止转写。
插件相关所有接口的参数解释详见接口说明。
1. 在 MacBook 上运行 Android 示例项目为什么会编译失败?
由于示例项目中 Android NDK 的路径默认为 Windows 设备上的路径,因此在 MacBook 上会编译失败并提示 Location specified by ndk.dir did not contain a valid NDK
。参考以下步骤解决:
local.properties
文件,将 ndk.dir
的路径替换为你刚才复制的路径,并且保存修改。