devicesWithMediaType 已弃用

devicesWithMediaType is deprecated

我有以下代码:

NSArray * devices = [ AVCaptureDevice devicesWithMediaType: AVMediaTypeVideo ];

// 2. Iterate through the device array and if a device is a camera, check if it's the one we want:
for ( AVCaptureDevice * device in devices )
{
    if ( useFrontCamera && AVCaptureDevicePositionFront == [ device position ] )
    {
        // We asked for the front camera and got the front camera, now keep a pointer to it:
        m_camera = device;
    }
    else if ( !useFrontCamera && AVCaptureDevicePositionBack == [ device position ] )
    {
        // We asked for the back camera and here it is:
        m_camera = device;
    }
}

警告说 devicesWithMediaType 已弃用,我应该改用 AVCaptureDeviceDiscoverySession,我尝试了以下方法:

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

但是设备阵列只有我的后置摄像头,没有我的前置摄像头,有什么帮助吗?

来自documentation

Pass AVCaptureDevicePositionUnspecified to search for devices regardless of position.

因此使用 AVCaptureDevicePositionUnspecified 来查找所有捕获设备。

因此代码将如下所示:

AVCaptureDeviceDiscoverySession *captureDeviceDiscoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] 
                                      mediaType:AVMediaTypeVideo 
                                       position: AVCaptureDevicePositionUnspecified]; // here you pass AVCaptureDevicePositionUnspecified to find all capture devices

NSArray *captureDevices = [captureDeviceDiscoverySession devices];