10

I am currently using the method:

NSArray *captureDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

to get a list of devices but XCode is giving me a warning:

Use AVCaptureDeviceDiscoverySession instead

I have looked at the documentation but do not know how to access the devices array

AVCaptureDeviceDiscoverySession *session = [[AVCaptureDeviceDiscoverySession alloc]init];
???
Rgfvfk Iff
  • 1,549
  • 2
  • 23
  • 47

3 Answers3

30

Create AVCaptureDeviceDiscoverySession for your requirement and then call devices method to get Array of currently available devices matching the session’s criteria

Code:

AVCaptureDeviceDiscoverySession *captureDeviceDiscoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] 
                                      mediaType:AVMediaTypeVideo 
                                       position:AVCaptureDevicePositionBack];
NSArray *captureDevices = [captureDeviceDiscoverySession devices];

Swift 4+

let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .back)

Available

Device types

Media types

Position

Lal Krishna
  • 15,485
  • 6
  • 64
  • 84
  • Swift 4: `let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .back)` – Awesomeness Apr 24 '18 at 16:05
  • Use AVCaptureDevicePositionUnspecified for the position to search for devices regardless of position. – Jan Ehrhardt Apr 25 '20 at 12:11
2
AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaTypeVideo, position: .front)

I think something like that would work. I think the AVCapture.DiscoverySession's initializer may be helpful as well. See the documentation and the stack overflow post on something similar in swift. Let me know if it helped!:)

Mihir Thanekar
  • 508
  • 4
  • 8
0

For future viewers, here are my two cents on this issue.

Deprecated code:

let availableCameraDevices = AVCaptureDevice.devices(for: AVMediaType.video)

Swift 5:

let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(
        deviceTypes: [ .builtInWideAngleCamera ],
        mediaType: .video,
        position: .unspecified
    )
let availableCameraDevices = deviceDiscoverySession.devices
Codetard
  • 2,441
  • 28
  • 34