Zღk*_*Zღk 5 video ios avplayer swift avplayeritem
我正在使用 AVQueuePlayer 循环播放所有选定的视频或通过滑动手势更改视频。
但是当我实现流程时,当用户滑动将视频从一个视频更改为另一个视频时,会出现黑框。因此,为了克服这个问题,我使用了 UIImageView。
我所做的是,当用户滑动下一个视频时,我处理当前时间的视频并拍摄相同的图像并初始化为 imageview 直到下一个视频在队列中可用。下面是用于实现此解决方案的代码
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
}
Run Code Online (Sandbox Code Playgroud)
使用这个它在iOS 12之前都可以正常工作,但是在iOS 13中,当我切换视频时,我发现了一个小的白色闪烁型框架,下面我附上了两个iOS的问题视频
iOS 12:- https://i.stack.imgur.com/oHHFa.jpg
iOS 13:- https://i.stack.imgur.com/09Qvd.jpg
如何解决 iOS 13 中的问题?