如何解决AVCapturePhotoOutput didFinishProcessingPhoto 没有被调用
我正在尝试使用 AVCapturePhotoOutput
和 AVCaptureSession
捕获图像,我的代码如下(通过 XCTest 运行):
func testCapture() {
let expectation = expectation(description: "Camera")
let captureSession = AVCaptureSession()
let videoDevice = AVCaptureDevice.default(for: .video)
// Create the capture device.
let videoDeviceInput = try! AVCaptureDeviceInput(device: videoDevice!)
guard captureSession.canAddInput(videoDeviceInput) else {
assert(false)
return
}
captureSession.addInput(videoDeviceInput)
let photoOutput = AVCapturePhotoOutput()
guard captureSession.canAddOutput(photoOutput) else {
assert(false)
return
}
captureSession.sessionPreset = .photo
photoOutput.isHighResolutionCaptureEnabled = true
// Add the output.
captureSession.addOutput(photoOutput)
// Open the camera.
captureSession.startRunning()
// Create callback.
let delegate = Delegate({ photo in
print("Success")
expectation.fulfill()
})
let settings = AVCapturePhotoSettings()
photoOutput.capturePhoto(with: settings,delegate: delegate)
self.wait(for: [expectation],timeout: 30)
}
我的委托对象是:
private class Delegate: NSObject,AVCapturePhotoCaptureDelegate {
let callback: (AVCapturePhoto) -> Void
init(_ callback: @escaping (AVCapturePhoto) -> Void) {
self.callback = callback
}
func photoOutput(_ output: AVCapturePhotoOutput,didFinishProcessingPhoto photo: AVCapturePhoto,error: Error?) {
print("Did finish processing photo: \(photo) error: \(error)")
self.callback(photo)
}
func photoOutput(_ output: AVCapturePhotoOutput,willBeginCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("Will begin capture")
}
func photoOutput(_ output: AVCapturePhotoOutput,willCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("Will capture photo")
}
func photoOutput(_ output: AVCapturePhotoOutput,didFinishCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings,error: Error?) {
print("didFinishCaptureFor")
}
func photoOutput(_ output: AVCapturePhotoOutput,didFinishRecordingLivePhotoMovieForEventualFileAt outputFileURL: URL,resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("didFinishRecordingLivePhotoMovieForEventualFileAt")
}
func photoOutput(_ output: AVCapturePhotoOutput,didCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings) {
print("Did capture image")
}
func photoOutput(_ output: AVCapturePhotoOutput,didFinishProcessingLivePhotoToMovieFileAt outputFileURL: URL,duration: CMTime,photodisplayTime: CMTime,resolvedSettings: AVCaptureResolvedPhotoSettings,error: Error?) {
print("Did finish processing live")
}
func photoOutput(_ output: AVCapturePhotoOutput,didFinishProcessingPhoto photoSampleBuffer: CMSampleBuffer?,previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?,bracketSettings: AVCaptureBracketedStillimagesettings?,error: Error?) {
print("Did finish processing2")
}
func photoOutput(_ output: AVCapturePhotoOutput,didFinishProcessingRawPhoto rawSampleBuffer: CMSampleBuffer?,error: Error?) {
print("Did finish processing raw")
}
}
Will begin capture
Will capture photo
Did capture image
缺少对 didFinishProcessingPhoto
的调用。
知道可能是什么原因吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。