- 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