【问题标题】:AVCaptureSession for audio in simulatorAVCaptureSession 用于模拟器中的音频
【发布时间】:2012-03-17 23:54:27
【问题描述】:

我正在尝试使用this question中的方法捕获音频;使用 AVCaptureSession 和 AVCaptureAudioDataOutput。这似乎可以正常工作,但有 1 个不便:它在模拟器中不起作用。 AVAudioRecorder 和旧的 SpeakHere 演示应用程序都可以在模拟器中正常工作,使用我 MacBook Pro 上的内置麦克风。

问题是[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio] 在模拟器中给出null,因此后续代码失败并显示消息(当它尝试将null 作为输入添加到 AVCaptureSession 时):

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Can't add <AVCaptureDeviceInput: 0x9138b40 [(null)]> because the device does not support AVCaptureSessionPresetHigh.  Use -[AVCaptureDevice supportsAVCaptureSessionPreset:].'

有没有简单的方法让它在模拟器中工作?

【问题讨论】:

  • 我不知道为什么 AVCaptureSession 设置不起作用,但是如果您不一定需要在模拟器上测试录制,而只需要在设备上测试,您仍然可以排除 iOS 上的录制部分-模拟器使用:#if TARGET_IPHONE_SIMULATOR // 这里是模拟器代码 #else // 这里是“真实”iOS 设备代码 #endif 这将防止模拟器上的应用程序崩溃。

标签: ios avfoundation avcapturesession


【解决方案1】:

AVCaptureDevice 类尚未在模拟器上实现(至少在撰写本文时,它可能会在未来发生变化)。

试试例如

NSLog(@"%@", [AVCaptureDevice devices]);

这将在模拟器上生成一个空列表(但如果在真实 iDevice 上编译和运行,则会列出所有捕获设备)。

这种功能无论如何都需要在真实设备上进行测试(由于硬件细节依赖性,例如延迟和支持的样本格式),因此出于测试目的,模拟器中的设备支持并不那么重要。但是,如果将它用于演示目的确实很好。

要在模拟器上运行演示,也许您可​​以模拟捕获输入。如果您真的想花一些时间在上面,也许您可​​以在模拟器上使用AVAudioRecorder(我从未使用过AVAudioRecorder,所以我无法判断它在模拟器上是否有效,但从您的问题来看)我读到确实如此)。

【讨论】:

  • 那真是太可惜了。我曾期望(希望)AVAudioRecorder 是建立在 AVCaptureSession 之上的,所以我想情况并非如此。我确实同意最终我想在设备上测试这些东西,但是在迭代开发周期中,如果我可以只使用模拟器那就太好了。
  • 为此,我建议在使用模拟器时在该文件的静态播放中录制音频(使用真实设备,具体取决于它是什么类型的应用程序)和#ifdef。
  • 这已经改变了,它不再输出一个空数组。我正在使用 Xcode 5.0.2。 iPad iOS 5.0 模拟器返回 2 个设备:前置摄像头、后置摄像头。
  • 从 Xcode 6.1 开始,带有 iOS 8 模拟器,(lldb) po [AVCaptureDevice devices] &lt;__NSArrayM 0x78e73430&gt;( ) 显示没有音频捕获设备。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 2012-03-19
  • 2021-09-11
  • 2011-06-17
相关资源
最近更新 更多