2015-06-29 3 views
2

Мне удалось найти код, который даст мне доступ к устройствам телефона (например, к камере). Проблема в том, что когда я компилирую код (и я печатаю разные устройства) с помощью Xcode, я получаю пустой массив.Невозможно получить устройства с использованием AVCaptureDevice

Вот что я писал:

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() 

    } 

    } 

У вас есть какие-либо идеи относительно того, почему я получаю пустой массив?

+0

Вы пытаетесь его на устройстве? –

ответ

5

Если вы используете его только в симуляторе, массив всегда будет пустым, поскольку на нем нет физического оборудования. Фактически, если вы попытаетесь получить доступ к физическому оборудованию внутри симулятора, он сработает. Если вы подключите устройство и все еще получаете пустой массив, сообщите мне.

+0

Вы принимаете это. –

+1

Да, я знаю, что код, который был опубликован, очень похож на то, что содержится в документах Apple, и распространенная причина, по которой не удается найти абсолютное _zero_ 'AVCaptureDevices', потому что он запускается в симуляторе. Вот документы с кодом типа OP: https://developer.apple.com/library/prerelease/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html – pbush25

+1

Это абсолютно правильный ответ. Кто в мир понизил это? – rigdonmr

3

первый проверить текущее состояние авторизации

AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) 

более подробно вы можете прочитать this article