[swift] Swift에서 비디오 재생 시 자동 회전 설정하기

Swift로 iOS 앱을 개발할 때, 비디오를 재생하는 기능을 구현하는 경우가 많습니다. 이때 사용자가 기기를 회전시킬 때 비디오 재생 화면도 자동으로 회전되도록 설정하려면 몇 가지 추가 작업이 필요합니다.

AVPlayerLayer와 UIDeviceOrientationDidChangeNotification 활용하기

AVPlayerLayer를 사용하여 비디오를 표시하고, UIDeviceOrientationDidChangeNotification을 이용하여 기기의 방향 변경을 감지하여 화면을 회전시킬 수 있습니다. 코드 예시를 통해 각 단계를 자세히 알아보겠습니다.

import AVKit

class VideoPlayerViewController: UIViewController {

    var player: AVPlayer?
    var playerLayer: AVPlayerLayer?

    override func viewDidLoad() {
        super.viewDidLoad()

        // 비디오 파일 URL
        let videoURL = Bundle.main.url(forResource: "example_video", withExtension: "mp4")!

        // AVPlayer 객체 생성
        player = AVPlayer(url: videoURL)

        // AVPlayerLayer 생성 및 설정
        playerLayer = AVPlayerLayer(player: player)
        playerLayer?.videoGravity = .resizeAspectFill
        playerLayer?.frame = view.layer.bounds
        view.layer.addSublayer(playerLayer!)

        // 비디오 재생 시작
        player?.play()

        // 기기의 방향 변경 감지하여 화면 회전
        NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification,
                                               object: nil,
                                               queue: .main) { [weak self] _ in
            self?.adjustVideoPlayerOrientation()
        }
    }

    func adjustVideoPlayerOrientation() {
        if let connection = playerLayer?.connection, connection.isVideoOrientationSupported {
            connection.videoOrientation = currentVideoOrientation()
        }
    }

    func currentVideoOrientation() -> AVCaptureVideoOrientation {
        let orientation = UIDevice.current.orientation
        switch orientation {
        case .landscapeLeft:
            return .landscapeRight
        case .landscapeRight:
            return .landscapeLeft
        default:
            return .portrait
        }
    }
}

위의 코드 예시는 AVKit을 사용하여 비디오를 재생하고, 기기의 방향 변경을 감지하여 화면을 자동으로 회전시키는 방법을 보여줍니다. adjustVideoPlayerOrientation 메서드에서는 현재 기기 방향에 맞게 비디오 화면의 방향을 조절하고, currentVideoOrientation 메서드에서는 기기의 방향에 따라 비디오 화면의 방향을 정의합니다.

이러한 방식으로 AVPlayerLayer와 UIDeviceOrientationDidChangeNotification을 활용하여 Swift에서 비디오 재생 시 자동 회전 설정을 구현할 수 있습니다.

참고 자료:

더 많은 정보 및 자세한 내용은 상기 링크에서 확인하실 수 있습니다.