如何让 SpeechKit 和 AVCaptureDevice 协同工作

How to get SpeechKit and AVCaptureDevice to work with each other

我正在使用 Nuance 的 SpeechKit 在录制视频时转录视频中的文本。但是,当 SpeechKit 处于活动状态时,AVAudioSession 会生成以下错误:

AVAudioSession.mm:646: -[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.

禁用 SpeechKit 让我可以录制和预览视频。启用它会生成转录文本,但不会录制视频。

我已将示例项目在线发布在:

https://github.com/jeffreality/iOSVideoTranscriber

我的目标是保存带有音频的视频,并进行转录。

您可以将以下行移动到 viewDidLoad:

#if ENABLE_TRANSCRIPTION

[SpeechKit setupWithID:@"Your ID"
                  host:@"dfo.nmdp.nuancemobility.net"
                  port:443
                useSSL:NO
              delegate:nil];
#endif

这确保当您在 viewDidAppear 中创建自己的捕获会话时已经设置了 speechKit。

当识别器停止录制音频时调用 SpeechKit 委托方法 recognizerDidFinishRecording。它会在检测到静音时自动调用,或者在您执行 [voiceSearch stopRecording] 时手动调用。发生这种情况时,您自己的录音尚未完成,需要时间将音频文件保存到磁盘,并且错误消息显示在停用音频会话之前应停止所有 i/o。您可以通过 sdk release audio session 1 查看日志,我认为它正在停用会话并释放它。所以我认为你应该在上面的方法中添加这个。

[[self.session.outputs[1] connectionWithMediaType:AVMediaTypeAudio] setEnabled:NO];

输出的是你之前设置的AVCaptureMovieFileOutput,connection是音频连接,这样做貌似错误消失了。