Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

Swift에서 AVPlayer 비디오 재생 종료 시점 감지하는 방법 완벽 가이드

개요

Swift에서 비디오 재생이 끝나는 시점을 감지하려면 먼저 비디오 플레이어를 생성한 후, 알림(Notification)을 활용해 재생이 중단되는 순간을 포착해야 합니다. 이 글에서는 실제 예제 코드를 통해 그 과정을 단계별로 살펴보겠습니다.

1. 프로젝트 준비하기

먼저 새로운 프로젝트를 생성하고, mp4 확장자를 가진 비디오 파일을 프로젝트에 드래그 앤 드롭으로 추가합니다. 이때 필요에 따라 'Copy items if needed' 옵션을 선택하고, 프로젝트 타겟에 반드시 포함시켜야 합니다.

2. 비디오 플레이어 생성 및 재생

이제 코드로 비디오 플레이어를 생성하고, 프로젝트 내 비디오 파일의 URL을 만든 뒤 영상을 재생해 보겠습니다.

var videoPlayer: AVPlayer!

다음 코드를 viewDidAppear 메서드에 추가합니다.

override func viewDidAppear(_ animated: Bool) {
   super.viewDidAppear(animated)
   let filepath: String? = Bundle.main.path(forResource: "Introduction", ofType: "mp4")
   if let videoPath = filepath {
      let url = URL.init(fileURLWithPath: videoPath)
      videoPlayer = AVPlayer(url: url)
      let playerLayer = AVPlayerLayer(player: videoPlayer)
      playerLayer.frame = self.view.bounds
      self.view.layer.addSublayer(playerLayer)
      videoPlayer.play()
   }
}

위 코드는 비디오 플레이어를 생성한 뒤, 뷰 컨트롤러의 기본 뷰에 서브레이어(sublayer) 형태로 추가하는 역할을 합니다.

3. 재생 종료 알림 옵저버 등록

이제 플레이어에 옵저버(observer)를 등록하고, 비디오 재생이 끝났음을 감지했을 때 호출될 옵저버 메서드를 만들어야 합니다. 아래 코드 블록을 viewDidAppear 메서드에 추가하세요.

NotificationCenter.default.addObserver(self, selector: #selector(videoDidEnd), name:
NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

그다음 videoDidEnd 메서드를 작성합니다. 이 메서드 안에서는 원하는 어떤 동작이든 수행할 수 있습니다. 여기서는 비디오가 끝나고 노티피케이션 센터가 이 메서드를 호출할 때 콘솔에 "video ended"를 출력하도록 하겠습니다.

@objc func videoDidEnd(notification: NSNotification) {
   print("video ended")
}

코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

Swift에서 AVPlayer 비디오 재생 종료 시점 감지하는 방법 완벽 가이드

비디오 재생이 끝나는 순간 콘솔에 아래와 같은 출력이 나타납니다.

Swift에서 AVPlayer 비디오 재생 종료 시점 감지하는 방법 완벽 가이드

4. 옵저버 해제로 메모리 효율성 높이기

위 코드만으로도 원하는 기능은 구현됩니다. 하지만 효율적인 메모리 사용을 위해서는 사용이 끝난 옵저버를 반드시 제거해 주는 것이 좋습니다. 아래 코드처럼 deinit에서 처리할 수 있습니다.

deinit {
   NotificationCenter.default.removeObserver(self)
}

마무리

정리하면, Swift에서 AVPlayer의 비디오 재생 종료를 감지하는 핵심은 AVPlayerItemDidPlayToEndTime 알림을 노티피케이션 센터에 등록하는 것입니다. 여기에 옵저버 해제까지 더하면 안전하고 깔끔하게 구현을 마칠 수 있습니다. 이 방식을 응용하면 재생 종료 후 다음 영상 자동 재생, 화면 전환, 광고 표시 등 다양한 기능을 손쉽게 확장할 수 있습니다.