自定义摄像头,白屏 // swift 3
Custom Camera, White screen // swift 3
我正在尝试制作一个使用相机的应用程序,但使用以下代码时,它只显示白屏。当应用程序打开时,相机应该会出现。
import UIKit
import AVFoundation
import Foundation
@IBOutlet var cameraView: UIView!
var captureSession : AVCaptureSession?
var stillImageOutput : AVCaptureStillImageOutput?
var previewLayer : AVCaptureVideoPreviewLayer?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
captureSession = AVCaptureSession()
captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080
let backCamera = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
do {
let input = try! AVCaptureDeviceInput (device: backCamera)
if (captureSession?.canAddInput(input) != nil) {
captureSession?.addInput(input)
stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if (captureSession?.canAddOutput(stillImageOutput) != nil) {
captureSession?.addOutput(stillImageOutput)
previewLayer = AVCaptureVideoPreviewLayer (session: captureSession)
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
cameraView.layer.addSublayer(previewLayer!)
captureSession?.startRunning()
}
}
} catch {
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
previewLayer?.frame = cameraView.bounds
}
使用此代码,我所看到的只是一个白色屏幕,而不是正在使用的相机。谢谢。
原来真的有人回答了这个问题,然后删除了答案。它说 "you did not give permission"。他是对的。
如何启用此功能,方法是转到您的 info.plist
(可以通过以下方式找到:
单击旁边带有 blueprint 的项目> 转到 Targets
并点击您的应用程序> 看看应该说什么 "Custom iOS Target Properties"。)
到达此处后(info.plst),转到列表底部并将鼠标悬停在最后一个(在我的例子中是"required Device Capabilities"。单击显示的加号按钮并命名它 "Privacy - Camera Usage Description"。在它旁边的框中键入,“app name
想将相机用于... [xyz]”
这应该可以解决问题。它解决了我的问题。从这个 post 得到了我的参考。
我正在尝试制作一个使用相机的应用程序,但使用以下代码时,它只显示白屏。当应用程序打开时,相机应该会出现。
import UIKit
import AVFoundation
import Foundation
@IBOutlet var cameraView: UIView!
var captureSession : AVCaptureSession?
var stillImageOutput : AVCaptureStillImageOutput?
var previewLayer : AVCaptureVideoPreviewLayer?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
captureSession = AVCaptureSession()
captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080
let backCamera = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
do {
let input = try! AVCaptureDeviceInput (device: backCamera)
if (captureSession?.canAddInput(input) != nil) {
captureSession?.addInput(input)
stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if (captureSession?.canAddOutput(stillImageOutput) != nil) {
captureSession?.addOutput(stillImageOutput)
previewLayer = AVCaptureVideoPreviewLayer (session: captureSession)
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
cameraView.layer.addSublayer(previewLayer!)
captureSession?.startRunning()
}
}
} catch {
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
previewLayer?.frame = cameraView.bounds
}
使用此代码,我所看到的只是一个白色屏幕,而不是正在使用的相机。谢谢。
原来真的有人回答了这个问题,然后删除了答案。它说 "you did not give permission"。他是对的。
如何启用此功能,方法是转到您的 info.plist
(可以通过以下方式找到:
单击旁边带有 blueprint 的项目> 转到 Targets
并点击您的应用程序> 看看应该说什么 "Custom iOS Target Properties"。)
到达此处后(info.plst),转到列表底部并将鼠标悬停在最后一个(在我的例子中是"required Device Capabilities"。单击显示的加号按钮并命名它 "Privacy - Camera Usage Description"。在它旁边的框中键入,“app name
想将相机用于... [xyz]”
这应该可以解决问题。它解决了我的问题。从这个 post 得到了我的参考。