Search code examples
swiftavcapturedevice

Unable to discover camera using AVCaptureDevice


Here is my code:

if AVCaptureDevice.authorizationStatus(for: AVMediaType.video) == .authorized {
    let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(
        deviceTypes: [.builtInDualCamera],
        mediaType: AVMediaType.video,
        position: .back)
    let captureDevice = deviceDiscoverySession.devices.first
}

The result is empty array (deviceDiscoverySession.devices). I am running on actual device (iPhone 6+ iOS 12.1.2).


Solution

  • You can try

    // Find a camera with the specified AVCaptureDevicePosition, returning nil if one is not found
    func cameraWithPosition(position: AVCaptureDevice.Position) -> AVCaptureDevice? {
        let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .unspecified)
        for device in discoverySession.devices {
            if device.position == position {
                return device
            }
        }
    
        return nil
    }
    

    if let newCamera = cameraWithPosition(position: .back) {
       //
    }