概要
AVCaptureVideoPreviewLayerをAutoLayoutと一緒に使いながら横向きの動画を撮る際に少しハマったので共有します。
問題点
基本的に、撮る動画の向きに関してはこちらの記事にあるようにAVCaptureOutputのAVCaptureConnectionを変えてやれば問題はありません。
しかし横向きに固定したアプリで動画を撮ろうとするとLayerの中で勝手に動画が回転して、AVCaptureConnectionをLandscapeにしてもPortraitにしても動画が90度回転してしまった状態で表示されてしまいました。
解決方法
解決方法はいたってシンプルでした。先程とりあげた記事にはAVCaptureVideoPreviewLayerが自動で向きを変えてくれるとありますがこれは厳密には違うようで、実際はAVCaptureVideoPreviewLayer自身にsessionとは別のAVCaptureConnectionが設定されていました。
つまり以下のようにするとAVCaptureVideoPreviewLayer内の動画を意図した向きに表示することができます。
`swift
if let videoLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
videoLayer.frame = previewView.bounds
videoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
videoLayer.connection.videoOrientation = .landscapeRight
previewView.layer.addSublayer(videoLayer)
}