Невозможно получить AVCaptureDevice - PullRequest
1 голос
/ 20 октября 2019

Еще одна проблема с портированием 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?

1 Ответ

2 голосов
/ 21 октября 2019

В этой заметке на странице документации для камер и носителей указано, что это сделано специально:

Важные

приложения для iPadпри работе в macOS нельзя использовать классы AVFoundation Capture. Вместо этого эти приложения должны использовать UIImagePickerController для захвата фото и видео.

Существует также Как настроить демонстрационное приложение AVCam для работы под Mac Catalyst? на форумах Apple для разработчиковкоторый включает в себя заявление поддержки Apple, что он ведет себя как задумано.

...