setSampleBufferDelegate not calling didOutput for audiodata

32 views Asked by At
  • I have created capture session.
  • added vieo and audio inputs
  • added output for video and audio
  • setsamplebufferdelegate for audio and video inputs

My didOutput is called for video but not for audio. i would like to call didoutput for audio also . I have attached audiooutput to capture session but still not getting ?

 var captureSession = AVCaptureSession()
    var input : AVCaptureDeviceInput!
    let videoOutput = AVCaptureVideoDataOutput()
    let audioOutput = AVCaptureAudioDataOutput()


fileprivate func prepareCaptureSession() {

        DispatchQueue.global().async {
            self.captureSession.beginConfiguration()
            self.captureSession.sessionPreset = .high

            for i : AVCaptureDeviceInput in (self.captureSession.inputs as! [AVCaptureDeviceInput]){
                self.captureSession.removeInput(i)
                
            }
            do{
                self.input = try AVCaptureDeviceInput(device: self.isFrontCamera ? self.getFrontCamera()!:self.getBackCamera())
                
                self.captureSession.addInput(self.input)
            }catch{
                print("can't access camera")
                return
            }
            
            
         
            let micDevice = AVCaptureDevice.default(.builtInMicrophone, for: .audio, position: .unspecified)!
           
            do{
                let micDeviceInput = try AVCaptureDeviceInput(device: micDevice)
                if self.captureSession.canAddInput(micDeviceInput) {
                    self.captureSession.addInput(micDeviceInput)
                    print("audio input added")
                }
                
            }catch{
                print("audio input cannot be added")
            }
            let previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
            previewLayer.videoGravity = .resize
            previewLayer.connection?.videoOrientation = .portrait
            

            DispatchQueue.main.async {
                self.vwPreviewLayer.layer.addSublayer(previewLayer)

            }
            
            
            
            let serialQueue = DispatchQueue(label: "dsSwipeViewSerial")
            self.videoOutput.setSampleBufferDelegate(self, queue: serialQueue)
            for i in self.captureSession.outputs{
                self.captureSession.removeOutput(i)
            }
            if self.captureSession.canAddOutput(self.videoOutput)
            {
                self.captureSession.addOutput(self.videoOutput)
            }
            
           
       
            if self.captureSession.canAddOutput(self.audioOutput) {
                self.audioOutput.setSampleBufferDelegate(self, queue: serialQueue)
                self.captureSession.addOutput(self.audioOutput)
                        }

            self.videoOutput.connection(with: .video)?.videoOrientation = .portrait
            
            self.captureSession.commitConfiguration()
                self.captureSession.startRunning()
            
       }
        
    }

my didOutput func

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        autoreleasepool {
            
            if output == audioOutput{
              //  videoWriterInput.append(processedSampleBuffer!)
                print("audioBuffer")
            }else if output == videoOutput{
              //  audioWriterInput.append(processedSampleBuffer!)
                print("videoBuffer")
            }
}
}

I tried for both audio and video but got just video

0

There are 0 answers