TRTC 接入实时语音识别

2021-02-01 11:55:15 浏览数 (1)

跑通TRTC

环境要求

  • Xcode 11.0及以上版本
  • 请确保您的项目已设置有效的开发者签名

前提条件

您已 注册腾讯云 账号,并完成 实名认证。

操作步骤

步骤1:创建新的应用

  1. 登录实时音视频控制台,选择【开发辅助】>【快速跑通Demo】。
  2. 单击【立即开始】,输入应用名称,例如TestTRTC,单击【创建应用】。

步骤2:下载 SDK 和 Demo 源码

  1. 鼠标移动至对应卡片,下载相关 SDK 及配套的 Demo 源码。
    • iOS:单击【Github】跳转至 Github(或单击【ZIP】)
    • Mac:单击【Github】跳转至 Github(或单击【ZIP】)
  2. 下载完成后,返回实时音视频控制台,单击【我已下载,下一步】,可以查看 SDKAppID 和密钥信息。

步骤3:配置 Demo 工程文件

  1. 解压 步骤2 中下载的源码包。
  2. 找到并打开GenerateTestUserSig.h文件:适用平台文件相对路径iOSiOS/TRTCScenesDemo/TXLiteAVDemo/Debug/GenerateTestUserSig.hMacMac/TRTCScenesDemo/TRTCDemo/TRTC/GenerateTestUserSig.h
  3. 设置GenerateTestUserSig.h文件中的相关参数:
    • SDKAPPID:默认为0,请设置为实际的 SDKAppID。
    • SECRETKEY:默认为空字符串,请设置为实际的密钥信息。
  1. 返回实时音视频控制台,单击【粘贴完成,下一步】。
  2. 单击【关闭指引,进入控制台管理应用】。

步骤4:编译运行

  1. 在终端窗口进入源码的 TRTCScenesDemo > Podfile 文件所在目录。
  2. 执行pod install命令安装 TRTC SDK,或者执行pod update命令,更新本地库版本。
  3. 使用 XCode(11.0及以上的版本)打开源码目录下的 TXLiteAVDemo.xcworkspace 工程,编译并运行 Demo 工程即可。

接入流程

1,打开您的 Xcode 工程项目,选择要运行的 target , 选中Build Phases项。

项目结构

2,单击Link Binary with Libraries项展开,单击底下的“ ”号图标去添加依赖库。

添加依赖库

3,依次添加所下载的 TRTC SDK Framework 及其所需依赖库libc Accelerate.frameworklibresolv.tbdAVFoundation.framework

添加描述

4,授权摄像头和麦克风使用权限

使用 SDK 的音视频功能,需要授权麦克风和摄像头的使用权限。在 App 的 Info.plist 中添加以下两项,分别对应麦克风和摄像头在系统弹出授权对话框时的提示信息。

  • Privacy - Microphone Usage Description,并填入麦克风使用目的提示语。
  • Privacy - Camera Usage Description,并填入摄像头使用目的提示语。

权限设置

5,在 Objective-C 或 Swift 代码中使用 SDK 有两种方式:

  • 模块引用:在项目需要使用 SDK API 的文件里,添加模块引用。 @import TXLiteAVSDK_TRTC;
  • 头文件引用:在项目需要使用 SDK API 的文件里,引入具体的头文件。 #import TXLiteAVSDK_TRTC/TRTCCloud.h

在 TRTC 接口协议 里设置音频源代理,并设置 ASR 读取音频源。

代码语言:javascript复制
//1.TRTCAudioFrameDelegate 协议是 TRTC 获取音频源的协议,由于 ASR 识别16k或8k采样率的音频数据,所以需要设置 setAudioQuality 为 TRTCCloudDef#TRTC_AUDIO_QUALITY_SPEECH (流畅:采样率:16k;单声道;音频裸码率:16kbps)

- (void) onCapturedRawAudioFrame:(TRTCAudioFrame *)frame {//此方法为 TRTC 本地麦克风采集到的原始音频数据回调:

  NSUInteger readLength = [frame.data length];
  void *pcmBytes = (void *)frame.data.bytes;
  [dataSource didRecordAudioData:pcmBytes length:readLength];
}

此方法在TRTCCloudDelegate中

本地麦克风采集数据本地麦克风采集数据

ASR 音频源设置为第三方,并实现具体逻辑。

接入第三方音频源需要在 ASR 接入部分实现 QCloudAudioDataSource 协议。代码示例如下:

代码语言:javascript复制
#import<QCloudSDK/QCloudSDK.h>

//1.使用第三方外部数据源传入语音数据,自定义 data source 需要实现 QCloudAudioDataSource 协议
QDAudioDataSource *dataSource = [[QDAudioDataSource alloc] init];

//2.创建 QCloudRealTimeRecognizer 识别实例
QCloudRealTimeRecognizer *realTimeRecognizer = [[QCloudRealTimeRecognizer alloc] initWithConfig:config dataSource:dataSource];

接入 ASR 的 QCloudAudioDataSource 协议如下,协议详情。代码可参考工程中 QDAudioDataSource.m 文件。

代码语言:javascript复制
@interface QDAudioDataSource : NSObject<QCloudAudioDataSource>
@end

@implementation QDAudioDataSource
@synthesize running = _running;

//SDK 会调用此方法获取当前状态
- (BOOL)running{
    return _recording;
}

//SDK 会调用 start 方法,实现此协议的类需要初始化数据源
- (void)start:(void(^)(BOOL didStart, NSError *error))completion{
  _data = [[NSMutableData alloc] init];
}

//SDK 会调用 stop 方法,实现此协议的类需要停止提供数据
- (void)stop{
  _recording = NO;
  _data = nil;
}

//SDK 会调用实现此协议的对象的此方法读取语音数据
- (nullable NSData *)readData:(NSInteger)expectLength{
  NSData *data = nil;
  if ([_data length] >= _offset   expectLength) {
      data = [_data subdataWithRange:NSMakeRange(_offset, expectLength)];
      [_data replaceBytesInRange:NSMakeRange(_offset, expectLength) withBytes:NULL length:0];
  }
  return data;
}

//此处仅为演示,需用户自行完善音频数据源填充
- (void)didRecordAudioData:(void * const )bytes length:(NSInteger)length{
  [_data appendBytes:bytes length:length];
}
@end

识别结果演示

https://video-1302335295.cos.ap-guangzhou.myzijiebao.com/videos/TRTC+ASR/video.mp4

0 人点赞