신속하게 비디오의 끝을 감지하려면 비디오 플레이어를 만든 다음 알림을 사용하여 비디오 재생이 중지될 때 감지해야 합니다. 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") }
이 코드를 실행하면 다음과 같은 결과가 나타납니다.
비디오 재생이 중지되면 콘솔에 출력됩니다.
이제 위의 코드가 필요한 작업을 수행하지만 효율적인 메모리 사용을 위해 관찰자도 제거해야 합니다. 이 작업은 아래 코드를 사용하여 수행할 수 있습니다.
deinit { NotificationCenter.default.removeObserver(self) }