rma*_*ddy 1 ios avcapturesession mac-catalyst
另一个 Mac Catalyst 移植问题。在 iOS 中完美运行以获取用于视频目的的 AVCaptureDevice 的代码在 macOS 上运行时失败并返回 nil。
演示此问题的最简单方法是使用 Apple 自己的AvCam 演示应用程序。它在 Swift 和 Objective-C 中都有提供。两者都以同样的方式失败。选中“Mac”复选框并在 Mac 上构建和运行。授予相机权限,然后注意控制台中的错误。
在Swift版本中,查看configureSessionCameraViewController的方法。线路:
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
}
Run Code Online (Sandbox Code Playgroud)
nil即使已授予相机许可,也始终会导致结果。
或者查看configureSessionObjective-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 支持人员的声明,表明其行为符合预期。
| 归档时间: |
|
| 查看次数: |
1187 次 |
| 最近记录: |