Ary*_*a K 2 avfoundation ios avcapturesession swift3
所以,我试图用相机我的手机在我的应用程序,我是成功的,但不幸的是,使用预览时,该层不填充整个屏幕下面是一个图像向您展示它是什么样子
这是我的代码:
if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
self.previewLayer = previewLayer
self.view.layer.addSublayer(self.previewLayer)
self.previewLayer.frame = self.view.layer.frame
captureSession.startRunning()
let dataOutput = AVCaptureVideoDataOutput()
dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)]
dataOutput.alwaysDiscardsLateVideoFrames = true
if captureSession.canAddOutput(dataOutput) {
captureSession.addOutput(dataOutput)
}
captureSession.commitConfiguration()
let queue = DispatchQueue(label: "com.Osmo.captureQueue")
dataOutput.setSampleBufferDelegate(self, queue: queue)
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况的原因是,您试图从具有自动布局约束的视图中设置预览层的框架。尝试向viewDidLayoutSubviews您的视图控制器添加方法的重写:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.previewLayer.frame = self.view.layer.bounds
}
Run Code Online (Sandbox Code Playgroud)
请尝试以下操作:
if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
self.previewLayer = previewLayer
self.previewLayer.frame = self.view.bounds
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
self.view.layer.insertSublayer(self.previewLayer, at: 0)
captureSession.startRunning()
let dataOutput = AVCaptureVideoDataOutput()
dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)]
dataOutput.alwaysDiscardsLateVideoFrames = true
if captureSession.canAddOutput(dataOutput) {
captureSession.addOutput(dataOutput)
}
captureSession.commitConfiguration()
let queue = DispatchQueue(label: "com.Osmo.captureQueue")
dataOutput.setSampleBufferDelegate(self, queue: queue)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2524 次 |
| 最近记录: |