AVCaptureSession 与 UIImagePickerController 的速度

Posted

技术标签:

【中文标题】AVCaptureSession 与 UIImagePickerController 的速度【英文标题】:AVCaptureSession vs. UIImagePickerController speeds 【发布时间】:2015-04-23 09:56:39 【问题描述】:

目前我在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 中的“拍照”按钮到我的代码的操作。它向代表发送一条消息以拍照:

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

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

【问题讨论】:

【参考方案1】:

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

AVFoundation 很复杂,实现起来有点困难。但它伴随着对每一位数据的大量控制。对于涉及的任何类型的文件处理,AVFoundation 都是可行的方法。

另一方面,UIImagePickerController 易于实现且非常有用,如果您只想执行原始任务,例如记录和捕获图像。

但是,如果其中任何一个似乎响应缓慢,那么很可能是因为您的实施。您需要发布代码来处理它。因此,性能并不是在两者之间进行选择的好标准。

【讨论】:

以上是关于AVCaptureSession 与 UIImagePickerController 的速度的主要内容,如果未能解决你的问题,请参考以下文章

iOS 相机 AVCaptureSession 在纵向与横向大小或分辨率

UIView 上的顶部空间约束,而不是 UIImag

离开 ViewController 时停止 AVCaptureSession

从后台返回后的 AVCapturesession 处理

使用 AVCaptureSession 录制视频

使用 AVAsset/AVCaptureSession 裁剪视频