ios - 无法获取 AVCaptureDevice
问题描述
又一个 Mac Catalyst 移植问题。在 iOS 中完美运行以获取用于视频目的的 AVCaptureDevice 的代码在 macOS 上运行时失败并返回 nil。
演示此问题的最简单方法是使用 Apple 自己的AvCam 演示应用程序。它在 Swift 和 Objective-C 中都提供。两者都以同样的方式失败。选中“Mac”复选框并在 Mac 上构建和运行。授予相机权限,然后注意控制台中的错误。
在 Swift 版本中,查看configureSession
CameraViewController 的方法。这些行:
var defaultVideoDevice: AVCaptureDevice?
// Choose the back dual camera, if available, otherwise default to a wide angle camera.
if let dualCameraDevice = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: .back) {
defaultVideoDevice = dualCameraDevice
} else if let backCameraDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) {
// If a rear dual camera is not available, default to the rear wide angle camera.
defaultVideoDevice = backCameraDevice
} else if let frontCameraDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front) {
// If the rear wide angle camera isn't available, default to the front wide angle camera.
defaultVideoDevice = frontCameraDevice
}
nil
即使已授予相机权限,也总是导致。
或者看configureSession
Objective-C版本中AVCamCameraViewController类的方法。尝试获取 AVCaptureDevice 的相同代码失败。
我也尝试过使用该AVCaptureDevice default(for:)
方法,并且尝试过使用AVCaptureDevice.DiscoverySession devices
. 在 Mac 上运行时所有尝试均失败,而在 iOS 设备上运行时所有尝试均有效。
更有趣的是,在我自己的与 AvCam 演示应用程序存在相同问题的应用程序中,我可以使用 UIImagePickerController 很好地拍照和捕捉视频。这意味着一般来说,Mac Catalyst 应用程序可以使用 Mac 的相机拍摄照片和视频。
那么问题来了,获取视频的 AVCaptureDevice 需要进行哪些更改?谁能弄清楚 AvCam 演示应用程序在使用 Mac Catalyst 运行时需要进行哪些更改才能使其正常工作?
解决方案
相机和媒体捕获文档页面上的此注释指出这是设计使然:
重要的
在 macOS 中运行的 iPad 应用程序无法使用 AVFoundation Capture 类。这些应用程序应该使用 UIImagePickerController 来捕获照片和视频。
还有如何让 AVCam 演示应用程序在 Mac Catalyst 下工作?Apple 开发者论坛上的线程,其中包括 Apple 支持人员的声明,即其行为符合预期。
推荐阅读
- c# - Entity Framework Core 如何解决..Index 0-Error?
- javascript - 为什么我的图像下方在边框/轮廓之间有一个开放的栏
- swift - RealmSwift:计算唯一单词的数量
- python - 构建 DNN 模型后,如何为具有新特征值的新案例预测类别标签(0 或 1)?
- url - 是否可以使用 URL 文件夹/路径而不在服务器上创建相应的目录?
- python - How to find elements without using the tag attribute?
- php - 当我服务到 XAMPP 上的另一个端口时,我的 htaccess 没有效果
- python - 有没有办法使用 PyMongo 检查 collection.find 是否返回 false?
- python - 如何用行平均值替换熊猫数据透视表的 0 和 nan 值?
- java - Spring Boot @GetMapping 多映射规则