Как получить доступ к камере в Mac OS Mojave Swift playground

#swift #avfoundation #swift-playground

#swift #avfoundation #swift-игровая площадка

Вопрос:

Как получить доступ к камере в Swift playgrounds в Mac OS Mojave? Раньше это работало без проблем в High Sierra, однако код, похоже, больше не выполняется корректно, поскольку символ запуска игровых площадок непрерывно вращается, а индикаторы камеры остаются выключенными.

Я получил пример кода, который в прошлом году работал нормально, но сегодня больше не работает. Кто-нибудь знает, что не так и как это исправить?

 import Cocoa
import AVFoundation
import AVKit
import QuartzCore
import PlaygroundSupport

let view = NSView(frame: NSRect(x: 0.0, y: 0.0, width: 640.0, height: 480.0))

let session = AVCaptureSession()

session.sessionPreset = AVCaptureSession.Preset.vga640x480
session.beginConfiguration()
session.commitConfiguration()


var input : AVCaptureDeviceInput
if let devices : [AVCaptureDevice] = AVCaptureDevice.devices() as? [AVCaptureDevice] {
for device in devices {
    if device.hasMediaType(AVMediaType.video) amp;amp; device.supportsSessionPreset(AVCaptureSession.Preset.vga640x480) {
        do {
            input = try AVCaptureDeviceInput(device: device as AVCaptureDevice) as AVCaptureDeviceInput

            if session.canAddInput(input) {
                session.addInput(input)
                break
            }
        }
        catch {
            error
        }
    }
}

let output = AVCaptureVideoDataOutput()
output.videoSettings = [kCVPixelBufferPixelFormatTypeKey as AnyHashable as! String: Int(kCVPixelFormatType_32BGRA)]
output.alwaysDiscardsLateVideoFrames = true

if session.canAddOutput(output) {
    session.addOutput(output)
}

let captureLayer = AVCaptureVideoPreviewLayer(session: session)
view.wantsLayer = true
view.layer = captureLayer

session.startRunning()

//View -> Assistant Editor -> Show Assistant Editor
PlaygroundPage.current.liveView = view

}
  

Посмотрел документацию Apple о том, как запросить доступ к камере, я попробовал это, однако, похоже, это не работает на игровых площадках, поскольку у меня все еще возникает та же проблема, когда это реализовано.

https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_macos

 switch AVCaptureDevice.authorizationStatus(for: .video) {
case .authorized: // The user has previously granted access to the camera.
    self.setupCaptureSession()

case .notDetermined: // The user has not yet been asked for camera access.
    AVCaptureDevice.requestAccess(for: .video) { granted in
        if granted {
            self.setupCaptureSession()
        }
    }

case .denied: // The user has previously denied access.
    return
case .restricted: // The user can't grant access due to restrictions.
    return
}