AVFoundationを使ってカメラに写った映像をUIImageにする方法を調べてみました。
参考にしたサイトは下のものです。
AVFoundationとは
公式ドキュメントによると「時間ベースのオーディオビジュアルメディアの再生と作成に使用できるフレームワーク」との事です。
要するに動画関連のフレームワークで、動画の再生・作成・編集などができるみたいです。
https://developer.apple.com/jp/documentation/AVFoundationPG.pdf
カメラを起動する
カメラ起動の方法は下の通りです。
セッションに入力・出力をセットする事でキャプチャーを開始します。
カメラの画像を見るためにはAVCaptureVideoPreviewLayer
を使っています。
今回はカメラからの入力をUIImageにする事をしていますが、入力をマイクに変えたり出力をファイルにする事もできるようです。
import AVFoundation // Inputを作成 var audioInput: AVCaptureInput? let device = AVCaptureDevice.devices().filter { $0.position == .Back }.first as! AVCaptureDevice? do { audioInput = try AVCaptureDeviceInput(device: device) } catch {} // Outputを作成 let imageOutput = AVCaptureStillImageOutput() // セッションを作成と起動 let session = AVCaptureSession() session.addInput(audioInput!) session.addOutput(imageOutput) session.startRunning() // カメラの映像を画面に表示する為のレイヤー作成 let myVideoLayer = AVCaptureVideoPreviewLayer(session: session) myVideoLayer.frame = self.view.bounds myVideoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill view.layer.addSublayer(myVideoLayer)
画像を出力する
画像をUIImageにする処理は以下の通りです。
let connection = imageOutput.connectionWithMediaType(AVMediaTypeVideo) imageOutput.captureStillImageAsynchronouslyFromConnection(connection, completionHandler: { (imageDataBuffer, error) -> Void in // 画像をNSDataとして取得 let myImageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataBuffer) _ = UIImage(data: myImageData)! })