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 处理该问题的代码。因此,性能不会成为在两者之间进行选择的良好标准。
目前我正在 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 处理该问题的代码。因此,性能不会成为在两者之间进行选择的良好标准。