一尘不染

如何使用AVCaptureDeviceDiscoverySession获取前置摄像头,后置摄像头和音频

swift

在iOS 10发布之前,我使用以下代码获取录像机的视频和音频捕获:

 for device in AVCaptureDevice.devices()
 {
     if (device as AnyObject).hasMediaType( AVMediaTypeAudio )
     {
         self.audioCapture = device as? AVCaptureDevice
     }
     else if (device as AnyObject).hasMediaType( AVMediaTypeVideo )
     {
         if (device as AnyObject).position == AVCaptureDevicePosition.back
         {
             self.backCameraVideoCapture = device as? AVCaptureDevice
         }
         else
         {
             self.frontCameraVideoCapture = device as? AVCaptureDevice
         }
     }
 }

当iOS 10最终问世时,我在运行代码时收到以下警告。请注意,我的录像机仍可以正常运行约2周。

在iOS 10.0中不建议使用“ devices()”:请改用AVCaptureDeviceDiscoverySession。

今天早上运行代码时,录像机停止工作。xCode8没有给我任何错误,但是相机捕获的PreviewLayer是完全白色的。当我开始记录时,出现以下错误:

错误域= AVFoundationErrorDomain代码= -11800“操作无法完成” UserInfo =
{NSLocalizedDescription =操作无法完成,NSUnderlyingError = 0x17554440 {Error Domain
= NSOSStatusErrorDomain Code = -12780“(null)”},NSLocalizedFailureReason =
An发生未知错误(-12780)}

我认为这与我使用不赞成使用的方法有关AVCaptureDevice.devices()。因此,我想知道如何使用它AVCaptureDeviceDiscoverySession

提前谢谢你的帮助!


阅读 180

收藏
2020-07-07

共1个答案

一尘不染

您可以通过以下方式获得前置摄像头:

AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .front)

后置摄像头:

AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .back)

和麦克风:

AVCaptureDevice.default(.builtInMicrophone, for: AVMediaType.audio, position: .unspecified)
2020-07-07