[iPhone] AVCaptureVideoDataOutput ビデオで静止画撮影する

Photo by Grant Ritchie on Unsplash
前に UIImagePickerControllerAVCapturePhotoOutput でカメラを扱いましたが
AVCaptureVideoDataOutput でも静止画を撮影できます。ただし基本的には動画撮影用です。
画面タップでシャッターを切る例です。余談ですがプレビュー無しの無音カメラができてしまいます。

Swift 5
Xcode 10.2.1

AVCaptureVideoDataOutput

 
iPhoneでは写真の静止画フォーマットが「HEIF」、動画は「HEVC(H.265)」と新しいフォーマット(形式)になっています。
ちょっと忘れがちでハマることがありますので
 

 

Camera使用上の許可

 

Cameraを扱う注意点として、

  1. 実機で試す
  2. Info.plistの編集
    • 以下の設定をInfo.plistに記述しないとエラーになります。
      UIImagePickerController による Camera撮影

 

設定

 
カメラ設定について抜粋ですが、

背面、前面カメラの切り替え
position: .back
position: .front

キャプチャ・クオリティの設定は
VideResolution = AVCaptureSessionPresetHigh
としていますが、その他の設定もできます

  1. AVCaptureSessionPresetPhoto
    • 写真用の最大解像度, ビデオ出力ではサポートされない
  2. AVCaptureSessionPresetHigh
    • 最高の録画品質
  3. AVCaptureSessionPresetMedium
    • WiFi共有用
  4. AVCaptureSessionPresetLow
    • 3G共有
  5. AVCaptureSessionPreset352x288
    • CIF
  6. AVCaptureSessionPreset640x480
    • VGA
  7. AVCaptureSessionPreset1280x720
    • HD, 720p
  8. AVCaptureSessionPresetiFrame960x540
    • 960×540のiFrame ビデオ
  9. AVCaptureSessionPresetiFrame1280x720
    • 1280×720iFrame ビデオ
 

サンプルコード

 
カメラを起動し、キャプチャー画面をタップして写真を保存する基本的なコードです。

Tap を受け取るために、UIGestureRecognizerDelegate をdelegateで設定します

ViewController.swift

 

これで実機でカメラを起動させて、画面タップで写真が保存されているか確認してください。

 
関連: