Roi*_*lia 18 camera preview ios avcapturesession avcapturedevice
无法想象这一个.当应用程序处于活动状态时,一切正常,有时当我将应用程序移动到后台(按下主页按钮)而不是返回时,预览层会冻结/卡住.我使用viewWillAppear和viewDidAppear进行设置.这是我如何设置一切:
var backCamera = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
var global_device : AVCaptureDevice!
var captureSession: AVCaptureSession?
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
captureSession = AVCaptureSession()
captureSession!.sessionPreset = AVCaptureSessionPresetPhoto
CorrectPosition = AVCaptureDevicePosition.Back
for device in backCamera {
if device.position == AVCaptureDevicePosition.Back {
global_device = device as! AVCaptureDevice
CorrectPosition = AVCaptureDevicePosition.Back
break
}
}
configureCamera()
var error: NSError?
var input = AVCaptureDeviceInput(device: global_device, error: &error)
if error == nil && captureSession!.canAddInput(input) {
captureSession!.addInput(input)
stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput!.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if captureSession!.canAddOutput(stillImageOutput) {
captureSession!.addOutput(stillImageOutput)
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
var bounds:CGRect = camera_Preview.layer.bounds
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer?.bounds = bounds
previewLayer?.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))
camera_Preview.layer.addSublayer(previewLayer)
self.view.bringSubviewToFront(camera_Preview)
self.view.bringSubviewToFront(nan_view)
captureSession!.startRunning()
}
}
Run Code Online (Sandbox Code Playgroud)
ViewDidAppear:
var previewLayer: AVCaptureVideoPreviewLayer?
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
previewLayer!.frame = camera_Preview.bounds
}
Run Code Online (Sandbox Code Playgroud)
对于未来的读者:这是在您的应用程序中设置相机的正确过程。
首先,感谢上面那些花时间尝试帮助我的人。他们都指引我走向正确的方向。虽然比尔误会了viewDidLoad理论,但他确实给出了 Apple Project 的解决方案。
这个设置相机 - 正确的方法 - 比我想象的要复杂一点,按照文档给我带来了很好的结果。所以对于 Objective-C 的程序员:
关于 Andrea 的回答,他确实说了一些在创建此类应用程序时应该考虑的重要提示。检查它们 - 它们高度相关(他在 Apple 项目中所说的大部分内容也是如此)。
罗伊,
我认为您的问题是您正在 viewWillAppear 中进行所有会话设置等。假设 captureSession 和 previewLayer 都已分配并正常工作。现在,您将应用程序置于后台并带回来。
您将立即尝试创建一个新的 captureSession 和一个新的 previewLayer。我怀疑旧的和新的正在纠缠在一起。
在 Apple AVCam 示例中,他们在 viewDidLoad 中进行设置。这样它只做一次。
您应该将所有设置内容移动到一个方法,然后从 viewDidLoad 调用该方法。
账单
| 归档时间: |
|
| 查看次数: |
9019 次 |
| 最近记录: |