本文介绍如何在你的 Web 项目中集成和使用讯飞语音实时转写&翻译(多语种)插件(以下简称“讯飞转写&翻译插件”)。
你还可以在 Android、iOS、Windows 应用中使用讯飞转写&翻译插件,详见使用说明。
讯飞转写&翻译插件需要与声网 Web SDK 4.x(v4.10.0 或以上)搭配使用。参考以下文档集成 Web SDK 并实现基础的视频通话或直播:
在声网控制台购买和激活讯飞转写&翻译插件。购买成功后,你会收到由讯飞提供的 appKey
和 appSecret
,后续使用插件时需要用到。
本节介绍插件相关接口的调用流程。接口的参数解释详见接口说明。
通过 npm 将讯飞转写&翻译插件集成到你的项目中。
npm install hyrt
.js
文件中加入以下代码导入插件模块:import { HySimpleAudioExtension } from 'hyrt'
如果需要使用插件的翻译功能,你需要配置反向代理以解决翻译跨域问题。
以 Nginx 为例:
server {
listen 80;
server_name localhost;
location / {
root D:\\proj\\test-plugin;
index index.html index.htm;
}
# 示例如下
location /v2/its {
proxy_http_version 1.1;
proxy_pass https://itrans.xfyun.cn/v2/its;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host 'itrans.xfyun.cn'; # 固定请求头中的Host
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 300;
proxy_send_timeout 300;
}
}
import AgoraRTC from "agora-rtc-sdk-ng"
import { HySimpleAudioExtension } from 'hyrt'
// 创建 extension 实例
const audioExtension = new HySimpleAudioExtension();
// 注册插件
AgoraRTC.registerExtensions([audioExtension]);
// 创建 processor 实例
const processor = audioExtension.createProcessor();
// 通过麦克风采集的音频创建音频轨道
const audioTrack = await AgoraRTC.createMicrophoneAudioTrack();
// 将讯飞插件注入声网的音频处理管道,并从扬声器输出
audioTrack.pipe(processor).pipe(audioTrack.processorDestination);
// 设置识别参数
processor.setOptions(common, ist, its, callback)
// 启用插件
processor.enable()
// 停止插件
setTimeout(() => { processor.disable() }, 60000)
setOptions
方法中的参数设置详见接口说明。你可以使用 setOptions
方法中的 callback
参数来处理识别结果,示例如下:
function callback(r) {
if (r.key === 'ist_result') {
let sn = r.value.data.result.sn
let ws = r.value.data.result.ws
let words = ''
for (let index = 0; index < ws.length; index++) {
const element = ws[index];
words += element.cw[0].w
}
console.log(`sn: ${sn}, words: ${words}`)
} else if (r.key === 'its_result') {
let sn = r.value.ist_sn
let trans_result = r.value.data.result.trans_result
console.log(`sn: ${sn}, [${trans_result.src}] => [${trans_result.dst}]`)
} else if (r.key === 'error') {
console.log(r.key, r.value)
} else if (r.key === 'end') {
console.log('识别结束')
}
}
相关 API 的参数解释和错误码,详见接口说明。