Невозможно получить устройства с помощью 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)
Другие вопросы по тегам