gpt4 book ai didi

ios - Camera.app 使用什么 AVCaptureDevice?

转载 作者:行者123 更新时间:2023-12-01 15:26:30 24 4
gpt4 key购买 nike

我的应用程序中有一个相机。它已经根据大量文档仔细实现,但仍然有一个主要的烦恼;视野明显小于股票相机应用程序。这是在大约相同距离处截取的两个屏幕截图以供引用。我的应用程序在右侧,显示来自相机的整个预览流。

enter image description here

Apple 文档建议使用 AVCaptureDevice.defaultAVCaptureDevice.DiscoverySession ,我的应用程序使用前者;

AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)

我尝试了许多不同的捕获设备,但没有一个提供与库存相机应用程序相同的广泛预览。

我究竟做错了什么?

最佳答案

首先,您需要扩展示例中的 View 边界以比较like for like。
然后您会注意到在您的左侧图像中,捕获模式设置为“PHOTO”,而不是“VIDEO”。如果您在 Camera.app 中将选项卡切换到“视频”模式,您将看到两个 session 的缩放比例相同。
要启用这是一个小改动:

let session = AVCaptureSession()
session.beginConfiguration()
session.sessionPreset = AVCaptureSession.Preset.photo
通常,我会警告不要使用照片预设,但您正在拍摄照片......因此降低视频稳定性是可以容忍的。还有一个视频质量的考虑,如 .hd1920x1080 session 预设可生成更高分辨率的视频,并且还针对视频进行了优化。
let session = AVCaptureSession()
session.beginConfiguration()
session.sessionPreset = AVCaptureSession.Preset.photo

// Add a video input
guard session.canAddInput(deviceInput) else {
print("Couldn't add device input")
return
}
session.addInput(deviceInput)

session.startRunning()
DiscoverySession如果您想为备用设备选项提供更清洁的解决方案,以防广角不可用,则方法可以替代此方法。但默认情况下,获取设备输入如下:
guard let videoDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else {
print("Couldn't find wide angle camera")
return
}

guard let deviceInput = try? AVCaptureDeviceInput(device: videoDevice) else {
print("Could not create video device input.")
return
}
如果您使用的是 AVCaptureVideoPreviewLayer最好为 View 使用输入设备尺寸以避免使用 previewLayer.videoGravity = .resizeAspect 调整大小即使它与 previewLayer.videoGravity = .resize 相比有效(它有性能开销)。

关于ios - Camera.app 使用什么 AVCaptureDevice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62232689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com