【发布时间】:2017-08-01 01:06:09
【问题描述】:
我正在努力解决一个问题:我有带有预览层的 AVCaptureSession,我还想在用户点击按钮时提供触觉反馈。如果我将 audioInput 添加到我的 AVCaptureSession 中,那么我根本无法产生触觉反馈。我试图在开始录制之前添加 audioInput 并在停止后立即删除,但修改捕获会话配置(我在串行队列中所做的)导致视频预览打嗝(它被中断了几分之一秒)。而且我仍然不知道 Snapchat 和 Instagram 是如何做到这一点的。我的一个猜测是他们以某种方式配置了 AVAudioSession,但我无法弄清楚。
我的捕获会话初始化非常一般,所以我不会粘贴它(这里值得注意的是我有 captureSession.automaticallyConfiguresApplicationAudioSession = false 行并且共享的 AVAudioSession 被修改为AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVideoRecording, options: [.mixWithOthers])),但我会发布我切换音频的尝试输入:
func addAudioInput() {
self.sessionQueue.async { [unowned self] in
self.captureSession.beginConfiguration()
let microphone = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio)
if let audioInput = try? AVCaptureDeviceInput(device: microphone), self.captureSession.canAddInput(audioInput) {
self.captureSession.addInput(audioInput)
}
self.captureSession.commitConfiguration()
}
}
func removeAudioInput() {
self.sessionQueue.async { [unowned self] in
if let audioInput = self.captureSession.inputs.first(where: { ($0 as? AVCaptureDeviceInput)?.device.deviceType == .builtInMicrophone }) as? AVCaptureDeviceInput {
self.captureSession.beginConfiguration()
self.captureSession.removeInput(audioInput)
self.captureSession.commitConfiguration()
}
}
}
【问题讨论】:
标签: swift camera avfoundation avcapturesession avaudiosession