从一个视频切换到另一个iOS 13及以上版本时,白色闪烁
我正在使用AVQueuePlayer在循环中播放所有选定的视频,或更改滑动手势上的视频 但当我实现这个流程时,当用户滑动将视频从一个切换到另一个时,会出现黑框。所以为了克服这个问题,我使用UIImageView 我所做的是当用户刷下一个视频时,我处理当前时间的视频,并拍摄相同的图像,初始化到imageview,直到下一个视频在队列中可用。下面是用于实现此解决方案的代码从一个视频切换到另一个iOS 13及以上版本时,白色闪烁,ios,swift,video,avplayer,avplayeritem,Ios,Swift,Video,Avplayer,Avplayeritem,我正在使用AVQueuePlayer在循环中播放所有选定的视频,或更改滑动手势上的视频 但当我实现这个流程时,当用户滑动将视频从一个切换到另一个时,会出现黑框。所以为了克服这个问题,我使用UIImageView 我所做的是当用户刷下一个视频时,我处理当前时间的视频,并拍摄相同的图像,初始化到imageview,直到下一个视频在队列中可用。下面是用于实现此解决方案的代码 var player : AVQueuePlayer? var playerItem: [AVPlayerItem] = []
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
}
var播放器:AVQueuePlayer?
var playerItem:[AVPlayerItem]=[]
设tempCurrentIndex=currentIndex
让tempPlayerItems=self.playerItem
guard let currentAssest=self.player?.currentItem?.asset else{return}
让playerCurrentTime=CMTimeGetSeconds(player!.currentTime())
让newTime=playerCurrentTime+0.0
self.player?.pause()
self.imgvwFlick.image=UIImage()
self.imgvwFlick.image=self.getFrame(资产:currentAssest,时间:newTime)
self.player?.removeAllItems()
对于tempCurrentIndex+1中的i。。UIImage{
让生成:AVAssetImageGenerator=AVAssetImageGenerator(资产:资产)
generate.appliesPreferredTrackTransform=true
generate.requestedTimeToleranceAfter=.zero
generate.requestedTimeToleranceBefore=.zero
让cmTime=cmTime(秒:时间,首选时间刻度:资产。持续时间。时间刻度)
让imgRef:CGImage=try!generate.copyCGImage(at:cmTime,actualTime:nil)
设img:UIImage=UIImage(cgImage:imgRef)
返回img
}
使用此功能,它在iOS 12之前都能正常工作,但在iOS 13中,当我切换视频时,我发现了一个小的白色闪烁类型的帧,下面是我为两个iOS附加的问题视频
iOS 12:-
第13条:
如何在iOS 13中解决问题?找到了解决方案?@NavinBagul还没有。您找到解决问题的方法了吗?