private func playVideo(fileURL: String) {
// Create RUL object
let url = URL(string: fileURL)
// Create Player Item object
let playerItem: AVPlayerItem = AVPlayerItem(url: url!)
// Assign Item to Player
let player = AVPlayer(playerItem: playerItem)
// Prepare AVPlayerViewController
let videoPlayer = AVPlayerViewController()
// Assign Video to AVPlayerViewController
videoPlayer.player = player
NotificationCenter.default.addObserver(self, selector: #selector(myViewController.finishVideo), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
// Present the AVPlayerViewController
present(videoPlayer, animated: true, completion: {
// Play the Video
player.play()
})
}
@objc func finishVideo()
{
print("Video Finished")
}
33
Swift 3.0
let videoPlayer = AVPlayer(URL: url)
NotificationCenter.default.addObserver(self, selector:#selector(self.playerDidFinishPlaying(note:)),name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)
func playerDidFinishPlaying(note: NSNotification){
//Called when player finished playing
}
fileprivate var videoEndObserver: Any?
func addVideoEndObserver() {
guard let player = YOUR_VIDEO_PLAYER else { return }
// This is just in case you are loading a video from a URL.
guard let duration = player.currentItem?.duration, duration.value != 0 else {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: { [weak self] in
self?.addVideoEndObserver()
})
return
}
let endTime = NSValue(time: duration - CMTimeMakeWithSeconds(0.1, duration.timescale))
videoEndObserver = player.addBoundaryTimeObserver(forTimes: [endTime], queue: .main, using: {
self.removeVideoEndObserver()
// DO YOUR STUFF HERE...
})
}
func removeVideoEndObserver() {
guard let observer = videoEndObserver else { return }
videoPlayer.player?.removeTimeObserver(observer)
videoEndObserver = nil
}
9 回答
For SWIFT 3.0 这很好用
要获得
AVPlayerItemDidPlayToEndTimeNotification
,您的对象需要是AVPlayerItem
.为此,只需使用
AVPlayer
上的 .currentItem 属性即可现在,一旦视频结束,您将收到通知!
看我的例子:
Swift 3
不要忘记删除
deinit
中的观察者Swift 3.0
Swift 4.0
这个对我有用 . 感谢@Channel
Swift 3.0
在Swift 3和RxSwift 3.5中,您所要做的就是:
Swift 4.2版本:
For SWIFT 3.0
这里'fullUrl'是视频的网址,并确保网址中没有空格,您应该将'Space'替换为'%20',以便网址可以正常工作 .
在视图控制器中添加以下给定方法 .
我知道这里有很多可接受的答案......
但是,另一条路线可能是向AVPlayer添加边界时间观察器 . 你必须拥有视频的持续时间,你可以从
player.currentItem
获得,然后将其添加为你想要的时间边界 .