501 세션을 보고 오라는데, 영상이 내려갔다.
AVCapturePhotoOutput: AVFoundation에서 지원하는 카메라 캡쳐 API(iOS 10+)
Scene Monitoring
scene의 상태를 확인 - ex) 어두울 때 플래시 활성화
scene 모니터링의 대상
public var photoSettingsForSceneMonitoring: AVCapturePhotoSettings?
public var isStillImageStabilizationScene: Bool { get }
public var isFlashScene: Bool { get }
func setupSceneMonitoring() {
let settingsForMotitoring = AVCapturePhotoSettings()
settingsForMonitoring.flashMode = .auto
settingForMonitoring.isAutoStillImageStabilizationEnabled = true
photoOutput.photoSettingsForSceneMonitoring = settingsForMotitoring
photoOutput.addObserver(self, forKeyPath: "isFlashScene", options: .new, context: nil)
photoOutput.addObserver(self, forKeyPath: "isStillImageStabilizationScene", options: .new, context: nil)
}
Resource Preparation and Reclamation
AVCaptureSession의 데이터 흐름
AVCapureDevice의 데이터는 실시간으로 Output으로 스트리밍된다. → 스트리밍 방식으로 연결되면, 설정을 바꾸려면 렌더 파이프라인을 재구성해야한다.
AVCapturePhotoOutput은 필요에 따라 그때그때 가져온다. (CMSampleBuffer의 형태로)
photoOutput.capturePhoto(with:, delegate:)
public func setPreparedPhotoSettingsArray(
_ preparedPhotoSettingsArray: [AVCapturePhotoSettings],
completionHandler handler: ((Bool, NSError!) -> Swift.Void)!)
public var preparePhotoSettingsArray: [AVCapturePhotoSettings] { get }
begin / commitConfiguration 쌍으로 한꺼번에 바꿀수도 있다.
completionHandler는 session이 멈춰져 있는 상태에서는 호출되지 않고, startRunning() 호출이 되면 불린다.
setPreparedPhotoSettingsArray을 여러번 호출하면, 이전 호출은 completionHandler에 false가 전달되고 끝난다. 이 경우는 세션 실행 여부와 상관없이 전달된다.
권장사항
Non-prepared feature
// 이 프로퍼티들을 재설정하기 위해서는, 전체 그래프를 다시 만들어야 한다.
public var isHighResolutionCaptureEnabled: Bool
public var isLivePhotoCaptureEnabled: Bool
public var isLivePhotoAutoTrimmingEnabled: Bool
Camera Privacy Policy Changes in iOS 10