AVCaptureSession用于模拟器中的音频

Cla*_*ude 7 avfoundation ios avcapturesession

我正在尝试使用此问题中的方法捕获音频; 使用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:].'
Run Code Online (Sandbox Code Playgroud)

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

Kru*_*lur 14

该AVCaptureDevice班是不是在模拟器上实现(在本文撰写时,至少,也许它会在未来改变).

试试例如

NSLog(@"%@", [AVCaptureDevice devices]);
Run Code Online (Sandbox Code Playgroud)

这将在模拟器上产生一个空列表(但如果编译并在真实的iDevice上运行,将列出所有捕获设备).

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

要在模拟器上运行演示,也许您可​​以模拟捕获输入.如果你真的想花一些时间在它上面,也许你可以回到AVAudioRecorder模拟器(我从来没有使用AVAudioRecorder,所以我不知道它是否在模拟器上工作,但从你的问题我读到了它确实).

  • 这真是一种耻辱.我曾预料到(希望)AVAudioRecorder是建立在AVCaptureSession之上的,所以我想情况并非如此.我同意最终我想在设备上测试这些东西,但是在迭代开发周期中,如果我可以使用模拟器那将是很好的. (2认同)