AVCaptureSession 与 UIImagePickerController 速度

AVCaptureSession vs. UIImagePickerController speeds

目前我正在 UIImagePickerController 上使用自定义叠加层,调用 takePicture() 来捕获图像。但是,调用委托方法 didFinishPickingMediaWithInfo 需要好几秒钟。我听说过使用 AVCaptureSession 来控制相机。这会让我获得更快的拍照速度(类似于 Snapchat 的速度)吗?或者有什么其他方法可以

谢谢

编辑

我正在按如下方式实现图像捕获。

首先,我初始化了一个 UIImagePickerController,使用一个名为 CustomCameraOverlayView 的 UIView 子类作为覆盖视图,并将其呈现在模态视图中。 CustomCameraOverlayView 的委托设置为 UIImagePickerControllerDelegate(自身),这样我就可以从 CustomCameraOverlayView.

中调用 takePicture
imagePickerController = UIImagePickerController()
    if UIImagePickerController.isSourceTypeAvailable(.Camera) {
        imagePickerController.sourceType = UIImagePickerControllerSourceType.Camera
        imagePickerController.cameraDevice = UIImagePickerControllerCameraDevice.Rear
        imagePickerController.editing = true
        imagePickerController.delegate = self
        imagePickerController.showsCameraControls = false

        var customCameraOverlayView = CustomCameraOverlayView()
        customCameraOverlayView.delegate = self
        imagePickerController.cameraOverlayView = customCameraOverlayView
        imagePickerController.cameraOverlayView!.frame = self.view.frame
        var screenBounds: CGSize = UIScreen.mainScreen().bounds.size
        var imageHeight = (screenBounds.width/3)*4
        var scale = screenBounds.height / imageHeight
        imagePickerController.cameraViewTransform = CGAffineTransformConcat(CGAffineTransformMakeScale(scale, scale), CGAffineTransformMakeTranslation(0, (screenBounds.height - imageHeight)/2))
        self.presentViewController(imagePickerController, animated: true, completion: nil)
    }

然后在 CustomCameraOverlayView 中,我设置了一个从 IB 中的 "take picture" 按钮到我的代码的操作。它向代表发送回消息以拍照:

@IBAction func takePicture(sender: UIButton) {
    delegate!.imagePickerController.takePicture()
}

几秒钟后调用委托方法。什么可能会减慢我的实施速度?

两者之间没有性能差异(至少没有肉眼可以注意到的差异)。它只是复杂性和控制之间的权衡。

AVFoundation 比较复杂,实现起来有点困难。但它伴随着对每一位数据的巨大控制。对于涉及的任何类型的文件处理,AVFoundation 是正确的选择。

另一方面,UIImagePickerController 如果您只想执行原始任务(例如记录和捕获图像),则它很容易实现并且很有用。

但是,如果它们中的任何一个似乎响应缓慢,那么很可能是因为您的实施。您需要 post 处理该问题的代码。因此,性能不会成为在两者之间进行选择的良好标准。