[swift] Swift 동영상 촬영

이번에는 Swift를 이용하여 iOS 앱에서 동영상을 촬영하는 방법에 대해 알아보겠습니다.

1. AVCaptureSession 설정하기

먼저, AVCaptureSession을 사용하여 카메라와 마이크에서 입력된 비디오와 오디오를 캡처하는 설정을 해야합니다. 다음과 같이 코드를 작성합니다.

import AVFoundation

let captureSession = AVCaptureSession()

// 비디오 입력 설정
guard let videoDevice = AVCaptureDevice.default(for: .video),
      let videoInput = try? AVCaptureDeviceInput(device: videoDevice) else {
    // 에러 처리
    return
}

if captureSession.canAddInput(videoInput) {
    captureSession.addInput(videoInput)
} else {
    // 에러 처리
    return
}

// 오디오 입력 설정
guard let audioDevice = AVCaptureDevice.default(for: .audio),
      let audioInput = try? AVCaptureDeviceInput(device: audioDevice) else {
    // 에러 처리
    return
}

if captureSession.canAddInput(audioInput) {
    captureSession.addInput(audioInput)
} else {
    // 에러 처리
    return
}

2. AVCaptureVideoPreviewLayer 추가하기

촬영된 비디오를 미리 볼 수 있도록 AVCaptureVideoPreviewLayer를 추가해야합니다. 다음과 같이 코드를 작성합니다.

import AVKit

let videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
videoPreviewLayer.videoGravity = .resizeAspectFill
videoPreviewLayer.frame = view.layer.bounds

view.layer.insertSublayer(videoPreviewLayer, at: 0)

3. 동영상 촬영 시작하기

실제로 동영상을 촬영하기 위해 AVCaptureMovieFileOutput을 사용합니다. 다음과 같이 코드를 작성합니다.

let movieOutput = AVCaptureMovieFileOutput()
if captureSession.canAddOutput(movieOutput) {
    captureSession.addOutput(movieOutput)

    let outputFileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("movie.mov")
    movieOutput.startRecording(to: outputFileURL, recordingDelegate: self)
}

위의 코드에서 recordingDelegate는 동영상 촬영 상태를 관리하는 객체입니다. 따로 구현해야 합니다.

4. 동영상 촬영 종료하기

동영상 촬영을 종료하기 위해서는 stopRecording() 메서드를 호출해야 합니다. 다음과 같이 코드를 작성합니다.

movieOutput.stopRecording()

5. 참고 자료