Here's how I'm setting the playback:
movie = GPUImageMovie(url: url)
movie.playAtActualSpeed = true
movie.delegate = self
movie.addTarget(self)
movie.startProcessing()
After the playback is completed, GPUImageView
shows the last frame of the video file. How to change it to the first frame?
We can use AVPlayerItem
and let AVPlayer
to handle playback for us:
func configure(url: URL) {
// player is AVPlayer instance declated as property
let playerItem = AVPlayerItem(url: url)
player.replaceCurrentItem(with: playerItem)
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying(_:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerItem)
movie = GPUImageMovie(playerItem: playerItem)
movie.playAtActualSpeed = true
movie.addTarget(self)
movie.startProcessing()
}
func playerDidFinishPlaying(_ notification: Notification) {
guard player.currentItem == notification.object as? AVPlayerItem else { return }
player.seek(to: kCMTimeZero)
}