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

55
在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周。
“’devices ()’在iOS 10.0中已被弃用:请使用AVCaptureDeviceDiscoverySession。”
今天早上我运行代码时,我的视频录制器停止工作了。xCode8没有给我任何错误,但相机捕获的previewLayer完全是白色的。当我开始录制时,我收到以下错误:
“错误域= AVFoundationErrorDomain Code=-11800“操作无法完成”UserInfo={NSLocalizedDescription=操作无法完成,NSUnderlyingError=0x17554440 {错误域= NSOSStatusErrorDomain Code=-12780“(null)”},NSLocalizedFailureReason=发生未知错误(-12780)}”
我认为这与我使用已弃用的方法AVCaptureDevice.devices()有关。因此,我想知道如何改用AVCaptureDeviceDiscoverySession
提前感谢您的帮助!
12个回答

1
在Swift 5中更容易了。
AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .front)

-1

05/2019 :

 //video
        self.session = AVCaptureSession()
        guard
            let videoDeviceInput = try? AVCaptureDeviceInput(device: device!),
            self.session!.canAddInput(videoDeviceInput)
            else { return }
        self.session!.addInput(videoDeviceInput)

  //audio
        guard
            let audioDeviceInput = try? AVCaptureDeviceInput(device: mic!),
            self.session!.canAddInput(audioDeviceInput)
            else { return }
        self.session!.addInput(audioDeviceInput) 

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