代码之家  ›  专栏  ›  技术社区  ›  Dan Karbayev

如何仅在录制时将音频输入添加到AVCaptureSession,而不中断视频预览?

  •  3
  • Dan Karbayev  · 技术社区  · 7 年前

    我的捕获会话初始化相当一般,所以我不会粘贴它(值得注意的是,我已经 captureSession.automaticallyConfiguresApplicationAudioSession = false line和shared 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()
            }
        }
    }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Dan Karbayev    7 年前

    我觉得自己很笨,没能在短时间内想出解决办法。因此,解决方案是创建两个 AVCaptureSession AVCaptureOutput s,它们都将数据缓冲区输出到同一个委托,该委托反过来使用 AVAssetWriter

        2
  •  0
  •   Shariff Shaik    5 年前

    我已经按照这里的建议创建了两个会话,一个用于视频流,另一个用于音频录制。但是,如果我的应用程序开始以1080p的摄像机分辨率录制,则不会接收摄像机帧。

    提前谢谢。 谢里夫。