[swift] Swift에서 카메라로 스마트폰 스크린 녹화하기

1. AVCaptureSession 설정

먼저, AVCaptureSession을 설정하여 오디오 및 비디오 입력을 처리할 수 있도록 해야 합니다.

import AVFoundation

let captureSession = AVCaptureSession()

guard
  let videoDevice = AVCaptureDevice.default(for: .video),
  let videoInput = try? AVCaptureDeviceInput(device: videoDevice),
  captureSession.canAddInput(videoInput)
else { return }
captureSession.addInput(videoInput)

let audioDevice = AVCaptureDevice.default(for: .audio)
let audioInput = try? AVCaptureDeviceInput(device: audioDevice)
if captureSession.canAddInput(audioInput) {
  captureSession.addInput(audioInput)
}

2. AVCaptureMovieFileOutput 설정

이제, AVCaptureMovieFileOutput을 설정하여 녹화된 비디오를 저장할 파일을 관리합니다.

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

  let connection = movieFileOutput.connection(with: .video)
  if connection?.isVideoStabilizationSupported == true {
    connection?.preferredVideoStabilizationMode = .auto
  }

  captureSession.startRunning()
}

3. AVCaptureVideoPreviewLayer 추가

마지막으로, 녹화된 내용을 화면에 보여주는 AVCaptureVideoPreviewLayer를 추가합니다.

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

이제 스마트폰에서 화면 녹화가 가능하며, 녹화된 비디오를 관리하기 위한 추가적인 로직을 구현할 수 있습니다.

참고 자료: