如何解决AVCapturePhotoOutput capturePhoto - 与预览相比,结果偏移/向下跳
我正在使用 AVCapturePhotoOutput
用相机拍照。但是,与预览视频源相比,拍摄的照片有时(约 50% 的时间)会略微向下偏移。
以下是我设置视频源的方法:
let avSession = AVCaptureSession()
let photoOutput = AVCapturePhotoOutput()
override func viewDidLoad() {
super.viewDidLoad()
let cameraDevice = AVCaptureDevice.default(.builtInWideAngleCamera,for: .video,position: .back)!
do {
let captureDeviceInput = try AVCaptureDeviceInput(device: cameraDevice)
if avSession.canAddInput(captureDeviceInput) {
avSession.addInput(captureDeviceInput)
avSession.sessionPreset = .photo
}
if avSession.canAddOutput(photoOutput) {
avSession.addOutput(photoOutput)
}
} catch {
print("Error: \(error)")
}
previewView.videoPreviewLayer.frame = view.layer.bounds
previewView.videoPreviewLayer.videoGravity = .resizeAspectFill
previewView.session = self.avSession
avSession.startRunning() /// start the session
outputimageView.alpha = 0 /// hide image view
}
这会按预期生成实时视频预览。接下来,我使用 capturePhoto(with:delegate:)
拍照:
let photoSettings = AVCapturePhotoSettings()
if let photoPreviewType = photoSettings.availablePreviewPhotoPixelFormatTypes.first {
photoSettings.previewPhotoFormat = [kCVPixelBufferPixelFormatTypeKey as String: photoPreviewType]
photoOutput.capturePhoto(with: photoSettings,delegate: self)
}
/// get the image from `capturePhoto`
extension ViewController: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput,didFinishProcessingPhoto photo: AVCapturePhoto,error: Error?) {
if let imageData = photo.fileDataRepresentation() {
let previewImage = UIImage(data: imageData)
outputimageView.image = previewImage
outputimageView.alpha = 1
}
}
}
结果 (video version here):
我怎样才能摆脱这种偏移?我希望来自 capturePhoto
的照片尽可能与视频提要相符。我还看到了 this question,这似乎是一个类似的问题,但它已经超过 6 年了,解决方案不起作用。
Full demo project of the problem
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。