準備
Info.plist
に以下の設定を追加。
<key>NSCameraUsageDescription</key>
<string>[カメラ使用に関する説明]</string>
コード
import UIKit
import AVFoundation
class CaptureViewController: UIViewController {
private let previewLayer: AVCaptureVideoPreviewLayer = {
let previewLayer = AVCaptureVideoPreviewLayer()
previewLayer.videoGravity = .resizeAspectFill
return previewLayer
}()
init() {
super.init(nibName: nil, bundle: nil)
let session = AVCaptureSession()
previewLayer.session = session
if let device = AVCaptureDevice.default(for: .video),
let input = try? AVCaptureDeviceInput(device: device),
session.canAddInput(input) {
session.addInput(input)
}
let output = AVCaptureVideoDataOutput()
output.setSampleBufferDelegate(self, queue: .global())
if session.canAddOutput(output) {
session.addOutput(output)
output.connection(with: .video)?.videoOrientation = .portrait
}
session.startRunning()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
view.layer.addSublayer(previewLayer)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
previewLayer.frame = CGRect(origin: .zero, size: view.bounds.size)
}
}
extension CaptureViewController: AVCaptureVideoDataOutputSampleBufferDelegate {
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// sampleBufferを処理する
}
}
環境
Xcode 12.2
Apple Swift version 5.3.1 (swiftlang-1200.0.41 clang-1200.0.32.8)
Target: x86_64-apple-darwin19.6.0