另一个Mac催化剂移植问题。在iOS中获得用于视频目的的AVCaptureDevice的代码是失败的,在macOS上运行时返回为零。
演示这个问题的最简单方法是使用苹果自己的AvCam演示应用程序。它由Swift和Objective两种语言提供。两者都以同样的方式失败。选中" Mac“复选框,然后在Mac上构建和运行。授予相机权限,然后注意控制台中的错误。
在Swift版本中,请查看CameraViewController的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。
或者查看Objective版本中的configureSession类的AVCamCameraViewController方法。尝试获取AVCaptureDevice的相同代码失败。
我还尝试使用AVCaptureDevice default(for:)方法,并尝试使用AVCaptureDevice.DiscoverySession devices。在Mac上运行时,所有尝试都失败,在iOS设备上运行时,所有尝试都会失败。
更有趣的是,在我自己的应用程序中,有着与AvCam演示应用相同的问题,我可以使用UIImagePickerController拍摄照片和拍摄视频。这意味着一般情况下,Mac催化剂应用程序可以使用Mac的摄像头拍摄照片和视频。
所以问题是,需要什么改变才能获得用于视频的AVCaptureDevice?谁能弄清楚AvCam演示应用程序需要哪些更改才能使其在使用Mac催化剂运行时工作呢?
发布于 2019-10-21 15:43:31
照相机和媒体捕捉文档页上的这一说明指出,这是通过设计实现的:
重要 运行在macOS中的macOS应用程序不能使用AVFoundation捕获类。这些应用程序应该使用UIImagePickerController来捕捉照片和视频。
在Apple论坛上也有一个如何使AVCam演示应用程序在Mac催化剂下工作?线程,其中包括苹果支持部门的一条声明,即这一行为与预期的行为一致。
https://stackoverflow.com/questions/58474929
复制相似问题