AVCaptureAudioDataOutput 未调用 AVCaptureAudioDataOutputSampleBufferDelegate.captureOutput
AVCaptureAudioDataOutput Is Not Calling AVCaptureAudioDataOutputSampleBufferDelegate.captureOutput
当我 运行 带有 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)
}
}
你有没有得到任何设备?我尝试构建您的代码,但没有得到任何设备。反正你可以看看这个 and also this 。另外,我可以猜到一件事,但不确定。把你的捕获会话变量
let session = AVCaptureSession()
在 viewDidLoad 之外。
当我 运行 带有 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)
}
}
你有没有得到任何设备?我尝试构建您的代码,但没有得到任何设备。反正你可以看看这个
let session = AVCaptureSession()
在 viewDidLoad 之外。