【Swift】カメラを使用する方法
今回はカメラを使用する方法をこの記事で説明します。
この記事のポイント・AVFoundationを使用
カメラを使用する方法
AVCaptureSession
初めにAVFoundationを設定します。
import UIKit
import AVFoundation
次に各メソッドを作成します。
// オブジェクトの作成
var avCapSession = AVCaptureSession()
// 画質の設定
func initCaptureSession() {
avCapSession.sessionPreset = AVCaptureSession.Preset.photo
}
プリセット値は以下のような種類があります。
【low】
3Gでの共有に適した出力ビデオおよびオーディオビットレートに適したキャプチャ設定を指定します。
【medium】
WiFi経由での共有に適した出力ビデオおよびオーディオビットレートに適したキャプチャ設定を指定します。
【high】
高品質のビデオおよびオーディオ出力に適したキャプチャ設定を指定します。
【photo】
高解像度の写真品質出力に適したキャプチャ設定を指定します。
【inputPriority】
キャプチャセッションがオーディオおよびビデオの出力設定を制御しないことを指定します。
【qHD960x540】
クォーターHD品質(960 x 540ピクセル)のビデオ出力に適したキャプチャ設定を指定します。
【hd1280x720】
720p品質(1280 x 720ピクセル)のビデオ出力に適したキャプチャ設定を指定します。
【hd1920x1080】
1080p品質(1920 x 1080ピクセル)のビデオ出力に適したキャプチャ設定。
【hd4K3840x2160】
2160p品質(3840 x 2160ピクセル)のビデオ出力に適したキャプチャ設定。
【iFrame960x540】
AACオーディオで約30メガビット/秒で960x540品質のiFrameH.264ビデオを実現するためのキャプチャ設定を指定します。
【iFrame1280x720】
AACオーディオで約40メガビット/秒で1280x720品質のiFrameH.264ビデオを実現するためのキャプチャ設定を指定します。
【qvga320x240】
320 x240ピクセルのビデオ出力に適したキャプチャ設定を指定します。
【vga640x480】
VGA品質(640 x 480ピクセル)のビデオ出力に適したキャプチャ設定を指定します。
【cif352x288】
CIF品質(352 x 288ピクセル)のビデオ出力に適したキャプチャ設定を指定します。
AVCaptureDevice
次にデバイス本体の設定をします。
// メインカメラ
var mnCamera: AVCaptureDevice?
// インカメラ
var inCamera: AVCaptureDevice?
// 現在使用しているカメラ
var crDevice: AVCaptureDevice?
// デバイスの設定
func initDevice() {
// プロパティ設定
let deviceDiscoverySession =
AVCaptureDevice.DiscoverySession(
deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera],
mediaType: AVMediaType.video,
position: AVCaptureDevice.Position.unspecified)
// カメラデバイスの取得
let devices = deviceDiscoverySession.devices
for device in devices {
if device.position == AVCaptureDevice.Position.back {
mnCamera = device
} else if device.position == AVCaptureDevice.Position.front {
inCamera = device
}
}
// 起動時のカメラを設定
crDevice = mainCamera
}
次に入出力データの設定をします。
// 出力データオブジェクト
var photoOutput : AVCapturePhotoOutput?
// 入出力データ
func initInputOutput() {
do {
// 初期化
let captureDeviceInput = try AVCaptureDeviceInput(device: currentDevice!)
// セッションに追加
captureSession.addInput(captureDeviceInput)
// 出力データ
photoOutput = AVCapturePhotoOutput()
// 出力ファイルフォーマット
photoOutput!.setPreparedPhotoSettingsArray(
[AVCapturePhotoSettings(
format: [AVVideoCodecKey : AVVideoCodecType.jpeg])],
completionHandler: nil)
captureSession.addOutput(photoOutput!)
} catch {
print(error)
}
}
次にカメラの表示設定をします。
// 表示用
var cameraPreviewLayer : AVCaptureVideoPreviewLayer?
// レイヤの設定
func initPreviewLayer() {
// 初期化
self.cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
// 縦横比を維持
self.cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
// 向きを設定
self.cameraPreviewLayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
self.cameraPreviewLayer?.frame = view.frame
self.view.layer.insertSublayer(self.cameraPreviewLayer!, at: 0)
}
最後に各メソッドをViewControllerから呼び出します。
override func viewDidLoad() {
super.viewDidLoad()
initCaptureSession()
initDevice()
initInputOutput()
initPreviewLayer()
captureSession.startRunning()
}
これでカメラを使用できるようになります。