Еще одна проблема с портированием Mac Catalyst. Код, который отлично работает в iOS для получения AVCaptureDevice для видео, дает сбой и возвращает ноль при запуске на macOS.
Самый простой способ продемонстрировать эту проблему - это собственное демонстрационное приложение 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
класса AVCamCameraViewController в версии Objective-C,Тот же код для попытки получить AVCaptureDevice завершается неудачей.
Я также пытался использовать метод AVCaptureDevice default(for:)
, и я пытался использовать AVCaptureDevice.DiscoverySession devices
. Все попытки терпят неудачу при запуске на Mac и все работают при запуске на устройстве iOS.
Что делает это более интересным, так это то, что в моем собственном приложении, которое имеет ту же проблему, что и демонстрационное приложение AvCam, я могу делать фотографиии захватывать видео просто отлично, используя UIImagePickerController. Это означает, что в общем случае приложение Mac Catalyst может использовать камеру Mac как для фотографий, так и для видео.
Таким образом, вопрос в том, какие изменения необходимы для получения AVCaptureDevice для видео? Может кто-нибудь выяснить, какие изменения необходимы для демонстрационного приложения AvCam, чтобы оно работало при работе с Mac Catalyst?