I am using AVQueuePlayer to play all the selected videos in loop or change the videos on swipe gesture.
But when i implemented the flow, there was black frame when user swipe changes the video from one to another.So to overcome that issue i used UIImageView.
What i did was when the user swipes for next video, i process the video for that current time and take image of same and initialise to imageview till the next video is available in queue. Below is the code that is used to achieve this solution
var player : AVQueuePlayer?
var playerItem: [AVPlayerItem] = []
let tempCurrentIndex = currentIndex
let tempPlayerItems = self.playerItem
guard let currentAssest = self.player?.currentItem?.asset else {return}
let playerCurrentTime = CMTimeGetSeconds(player!.currentTime())
let newTime = playerCurrentTime + 0.0
self.player?.pause()
self.imgvwFlick.image = UIImage()
self.imgvwFlick.image = self.getFrame(asset: currentAssest, time: newTime)
self.player?.removeAllItems()
for i in tempCurrentIndex + 1..<tempPlayerItems.count {
tempPlayerItems[i].seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero, completionHandler: nil)
self.player?.insert(tempPlayerItems[i], after: nil)
}
self.player?.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero)
self.currentIndex = tempCurrentIndex + 1
self.player?.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero)
self.player?.play()
func getFrame(asset:AVAsset,time:Double) -> UIImage{
let generate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
generate.appliesPreferredTrackTransform = true
generate.requestedTimeToleranceAfter = .zero
generate.requestedTimeToleranceBefore = .zero
let cmTime = CMTime(seconds: time, preferredTimescale: asset.duration.timescale)
let imgRef : CGImage = try! generate.copyCGImage(at: cmTime, actualTime: nil)
let img : UIImage = UIImage(cgImage: imgRef)
return img
}
Using this it works good till iOS 12, but in iOS 13 i found a small white flicker type frame when i switch the video, below i am attaching the video of issue for both iOS
iOS 12 :- https://i.stack.imgur.com/oHHFa.jpg
iOS 13 :- https://i.stack.imgur.com/09Qvd.jpg
How can i solve the issue in iOS 13?