IOS设备上的WithMediaType已弃用

10
我目前正在使用以下方法获取设备列表: NSArray *captureDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 但是XCode给出了一个警告: Use AVCaptureDeviceDiscoverySession instead 我查看了文档,但不知道如何访问设备数组。
AVCaptureDeviceDiscoverySession *session = [[AVCaptureDeviceDiscoverySession alloc]init];
???
3个回答

30
创建一个符合你需求的 AVCaptureDeviceDiscoverySession,然后调用 devices 方法来获取匹配会话条件的当前可用设备的 Array
代码:
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)

可用

设备类型

媒体类型

位置


Swift 4: let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .back) - Awesomeness
使用AVCaptureDevicePositionUnspecified作为位置参数可以搜索任何方向的设备。 - Jan Ehrhardt

2
AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaTypeVideo, position: .front)

我认为这样做可能会起作用。我认为AVCapture.DiscoverySession的初始化程序也可能有所帮助。请参阅文档以及Swift中类似情况的Stack Overflow帖子。让我知道它是否有所帮助!:)


0

对于未来的观众,这是我对这个问题的看法。

已弃用的代码:

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

Swift 5:

let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(
        deviceTypes: [ .builtInWideAngleCamera ],
        mediaType: .video,
        position: .unspecified
    )
let availableCameraDevices = deviceDiscoverySession.devices

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接