AVCaptureAudioDataOutput 没有调用 AVCaptureAudioDataOutputSampleBufferDelegate.captureOutput

Posted

技术标签:

【中文标题】AVCaptureAudioDataOutput 没有调用 AVCaptureAudioDataOutputSampleBufferDelegate.captureOutput【英文标题】:AVCaptureAudioDataOutput Is Not Calling AVCaptureAudioDataOutputSampleBufferDelegate.captureOutput 【发布时间】:2020-07-01 17:06:31 【问题描述】:

当我使用 AVCaptureAudioDataOutput 运行 AVCaptureSession 时,没有调用委托。 我错过了哪一步? 感谢您的帮助!

import Cocoa
import AVFoundation

class ViewController: NSViewController, AVCaptureAudioDataOutputSampleBufferDelegate 
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        let session  = AVCaptureSession()
        
        guard let device = AVCaptureDevice.default(.builtInMicrophone, for: .audio, position: .front) else  return
        do 
            let input = try AVCaptureDeviceInput(device:device)
            if session.canAddInput(input) 
                session.addInput(input)
                let output = AVCaptureAudioDataOutput()
                output.setSampleBufferDelegate(self, queue: .main)
                if session.canAddOutput(output) 
                    session.addOutput(output)
                
                
                session.startRunning()
                
                print("Running")
                
            
         catch 
        
    
    
    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) 
        print(sampleBuffer.numSamples)
    

【问题讨论】:

【参考方案1】:

你有什么设备吗?我试图构建你的代码,但没有得到任何设备。不管怎样,你可以看看这个answer 和这个answer。另外,我可以猜到一件事,但不确定。放置您的捕获会话变量

let session  = AVCaptureSession()

在 viewDidLoad 之外。

【讨论】:

太棒了!只是将会话放在 viewDidLoad 之外修复了它!!!谢谢! 啊,我很高兴它有帮助。 既然对您有帮助,请不要忘记将最有助于解决问题的答案标记为已接受。

以上是关于AVCaptureAudioDataOutput 没有调用 AVCaptureAudioDataOutputSampleBufferDelegate.captureOutput的主要内容,如果未能解决你的问题,请参考以下文章

录音时静音音频 AVAssetWriterInput

如何在 AVCaptureSession 上设置音频采样率?