Невозможно получить устройства с помощью AVCaptureDevice
Мне удалось найти код, который дал бы мне доступ к устройствам телефона (например, к камере). Проблема в том, что когда я компилирую код (и печатаю разные устройства) с помощью Xcode, я получаю пустой массив.
Вот что я написал:
import UIKit
import AVFoundation
class ViewController: UIViewController {
let captureSession = AVCaptureSession()
var previewLayer : AVCaptureVideoPreviewLayer?
// If we find a device we'll store it here for later us
var captureDevice : AVCaptureDevice?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
captureSession.sessionPreset = AVCaptureSessionPresetHigh
let devices = AVCaptureDevice.devices()
println(devices)
// Loop through all the capture devices on this phone
for (device in devices) {
// Make sure this particular device supports video
if (device.hasMediaType(AVMediaTypeVideo)) {
// Finally check the position and confirm we've got the back camera
if(device.position == AVCaptureDevicePosition.Back) {
captureDevice = device as? AVCaptureDevice
if captureDevice != nil {
println("Capture device found")
beginSession()
}
}
}
}
}
func beginSession() {
var err : NSError? = nil
captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &err))
if err != nil {
println("error: \(err?.localizedDescription)")
}
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
self.view.layer.addSublayer(previewLayer)
previewLayer?.frame = self.view.layer.frame
captureSession.startRunning()
}
}
У вас есть идеи, почему я получаю пустой массив?
3 ответа
Если вы запускаете его только в симуляторе, массив всегда будет пустым, поскольку у него нет физического оборудования на выбор. На самом деле, если вы попытаетесь получить доступ к физическому оборудованию внутри симулятора, он выйдет из строя. Если вы подключаете устройство и получаете пустой массив, дайте мне знать.
Сначала проверьте текущий статус авторизации
AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
более подробно вы можете прочитать эту статью
Проверьте текущий статус авторизации для Swift 4
AVCaptureDevice.authorizationStatus(for: AVMediaType.video)