Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从一个视频切换到另一个iOS 13及以上版本时,白色闪烁_Ios_Swift_Video_Avplayer_Avplayeritem - Fatal编程技术网

从一个视频切换到另一个iOS 13及以上版本时,白色闪烁

从一个视频切换到另一个iOS 13及以上版本时,白色闪烁,ios,swift,video,avplayer,avplayeritem,Ios,Swift,Video,Avplayer,Avplayeritem,我正在使用AVQueuePlayer在循环中播放所有选定的视频,或更改滑动手势上的视频 但当我实现这个流程时,当用户滑动将视频从一个切换到另一个时,会出现黑框。所以为了克服这个问题,我使用UIImageView 我所做的是当用户刷下一个视频时,我处理当前时间的视频,并拍摄相同的图像,初始化到imageview,直到下一个视频在队列中可用。下面是用于实现此解决方案的代码 var player : AVQueuePlayer? var playerItem: [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

  }
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还没有。您找到解决问题的方法了吗?