我正在努力解决一个问题:我有预览层的AVCaptureSession,并且我还想在用户点击按钮时提供触觉反馈。如果我将audioInput添加到我的AVCaptureSession中,那么我根本无法生成触觉反馈。我试图在开始记录之前添加audioInput,并在停止后立即删除,但修改捕获会话配置(我在串行队列中进行的操作)会导致视频预览打嗝(它会在几分之一秒内中断)。我仍然不知道Snapchat和Instagram如何操作这个技巧。我的猜测之一是,他们以某种方式配置AVAudioSession,但我无法弄清楚。只有在不中断视频预览的情况下进行录制时,如何将音频输入添加到AVCaptureSession?
我捕获会话初始化是相当普遍的,所以我不会粘贴(这里值得注意的是,我有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()
}
}
}
如果你有代码示例请更新答案哥们 –