使用replaceCurrentItem时AVPlayer闪烁-Swift-以编程方式

问题描述

我正在通过以下方式在AVPlayer中设置UIView

fileprivate func setUpAVPlayer(){
    
    self.cardModel?.urlStrings?.forEach({ (urlString) in
        
        guard let url = URL(string: urlString) else { return }
        let asset = AVAsset(url: url)
        let playerItem = AVPlayerItem(asset: asset,automaticallyLoadedAssetKeys: nil)
        playerItem.addObserver(self,forKeyPath: #keyPath(AVPlayerItem.status),options: [.old,.new],context: nil)
        self.playerItemArray.append(playerItem)
    })
    player = AVPlayer(playerItem: playerItemArray[0])
}

layoutSubviews中,我布置了显示播放器的playerLayer:

let playerLayer = AVPlayerLayer(player: player)
playerLayer.videoGravity = .resizeAspectFill
self.playerView.layer.insertSublayer(playerLayer,at: 0)
playerLayer.frame = playerView.bounds

在某个事件中,我更改了播放器的当前项目:

fileprivate func goToNextVideo(){
    counter = counter+1
    counter = min(playerItemArray.count-1,counter)
    
    self.player?.replaceCurrentItem(with: self.playerItemArray[self.counter])
    self.player?.seek(to: .zero)
    self.player?.play()
}

当我更改项目时,过渡效果并不顺利,并且可以看到闪烁的view 下方。有些事情我不明白:

  1. 为什么要在开始时预加载所有AVPlayerItems(当我循环所有url字符串时),当它们成为AVPlayer的currentItem时,我仍然必须等待它们被加载?

  2. 出于什么考虑,我在网上搜索了闪烁效果,却没有找到解决方案,因此,每当更改Item时,我都会仔细检查AVPlayer的行为,并以此方式进行描述:

第一(白色)(下面的视图)

第二显示要显示的视频帧(时间越多,占视频一半)

第三实际上显示了视频

这种行为真的很烦人,我想知道如何解决它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)