Computer >> 컴퓨터 >  >> 프로그램 작성 >> IOS

Swift를 사용하여 AVPlayer 비디오 재생이 끝나는 시점을 감지하는 방법은 무엇입니까?

<시간/>

신속하게 비디오의 끝을 감지하려면 비디오 플레이어를 만든 다음 알림을 사용하여 비디오 재생이 중지될 때 감지해야 합니다. swift의 예제를 사용하여 이 작업을 수행합니다.

프로젝트를 만들고 확장자가 "mp4"인 비디오를 드래그 앤 드롭하고 필요한 경우 복사 리소스를 선택하고 프로젝트 대상에 추가해 보겠습니다.

이제 프로그래밍 방식으로 먼저 비디오 플레이어를 생성한 다음 프로젝트에서 비디오의 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()
   }
}

위의 코드는 비디오 플레이어를 만들고 뷰 컨트롤러의 기본 뷰에 하위 레이어로 추가합니다.

이제 플레이어에 관찰자를 추가하고 비디오 끝을 감지할 때 호출되어야 하는 관찰자 메서드도 만들어야 합니다. viewDidAppear 메소드에 아래 코드 블록을 추가하세요.

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

이제 videoDidEnd 메소드도 작성해야 합니다. 이 메소드 내에서 원하는 모든 작업을 수행할 수 있습니다. 지금은 비디오가 종료되고 알림 센터가 이 메소드를 호출할 때 "비디오 종료됨"을 인쇄하기만 하면 됩니다.

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

이 코드를 실행하면 다음과 같은 결과가 나타납니다.

Swift를 사용하여 AVPlayer 비디오 재생이 끝나는 시점을 감지하는 방법은 무엇입니까?

비디오 재생이 중지되면 콘솔에 출력됩니다.

Swift를 사용하여 AVPlayer 비디오 재생이 끝나는 시점을 감지하는 방법은 무엇입니까?

이제 위의 코드가 필요한 작업을 수행하지만 효율적인 메모리 사용을 위해 관찰자도 제거해야 합니다. 이 작업은 아래 코드를 사용하여 수행할 수 있습니다.

deinit {
   NotificationCenter.default.removeObserver(self)
}