[swift] Swift에서 카메라로 동영상 녹화하기

iOS 앱을 개발하다 보면 카메라로 동영상을 녹화해야 하는 경우가 있습니다. Swift에서는 AVFoundation 프레임워크를 사용하여 이를 간단하게 구현할 수 있습니다. 이 포스트에서는 Swift로 카메라로 동영상을 녹화하는 방법에 대해 알아보겠습니다.

프로젝트 설정

먼저 프로젝트에 AVFoundation 프레임워크를 추가해야 합니다. Xcode에서 프로젝트를 열고, 프로젝트 네비게이터에서 프로젝트를 선택한 후, General 탭에서 Linked Frameworks and Libraries를 클릭합니다. + 버튼을 눌러 AVFoundation.framework을 추가합니다.

카메라 및 녹화 세션 설정

카메라로부터 입력을 받아오고, 녹화를 수행하기 위해 AVCaptureSession, AVCaptureDevice, AVCaptureDeviceInputAVCaptureMovieFileOutput을 사용합니다.

import AVFoundation

class CameraViewController: UIViewController {
    private var captureSession: AVCaptureSession?
    private var videoInput: AVCaptureDeviceInput?
    private var videoOutput: AVCaptureMovieFileOutput?

    override func viewDidLoad() {
        super.viewDidLoad()
        setupCaptureSession()
    }

    private func setupCaptureSession() {
        captureSession = AVCaptureSession()

        guard let videoDevice = AVCaptureDevice.default(for: .video) else { return }

        videoInput = try? AVCaptureDeviceInput(device: videoDevice)

        if let videoInput = videoInput, captureSession?.canAddInput(videoInput) == true {
            captureSession?.addInput(videoInput)
        }

        videoOutput = AVCaptureMovieFileOutput()

        if let videoOutput = videoOutput, captureSession?.canAddOutput(videoOutput) == true {
            captureSession?.addOutput(videoOutput)
        }

        captureSession?.startRunning()
    }
}

녹화 시작 및 중지

카메라 설정이 완료되면 startRecording() 메서드를 호출하여 녹화를 시작하고, stopRecording() 메서드를 호출하여 녹화를 중지합니다.

extension CameraViewController {
    func startRecording() {
        guard let output = videoOutput else { return }

        let videoFileURL = URL(fileURLWithPath: NSTemporaryDirectory() + "video.mov")
        output.startRecording(to: videoFileURL, recordingDelegate: self)
    }

    func stopRecording() {
        videoOutput?.stopRecording()
    }
}

녹화 상태 처리

녹화 상태를 처리하기 위해 AVCaptureFileOutputRecordingDelegate 프로토콜을 채택하여 델리게이트 메서드를 구현합니다.

extension CameraViewController: AVCaptureFileOutputRecordingDelegate {
    func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection]) {
        // 녹화가 시작되었을 때의 처리
    }

    func fileOutput(_ output: AVCaptureFileOutput, didStopRecordingTo fileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
        // 녹화가 중지되었을 때의 처리
    }
}

이제 Swift로 카메라로 동영상을 녹화하는 기본적인 방법에 대해 알아보았습니다. 원하는 추가 기능을 구현하여 iOS 앱에 동영상 녹화 기능을 통합할 수 있습니다.

참고 문헌: Apple Developer Documentation - AVFoundation