Ios AVPlayerLayer在AVPlayer上闪烁黑色。替换当前项(带:)

Ios AVPlayerLayer在AVPlayer上闪烁黑色。替换当前项(带:),ios,swift,avfoundation,avplayer,Ios,Swift,Avfoundation,Avplayer,我有一个AVPlayer对象,用于播放视频。当用户点击一个按钮时,视频被换成另一个视频,继续播放。仅使用replaceCurrentItem(with:)会在显示视频内容的myAVPlayerLayer上出现十分之几秒的黑色帧 我已经准备好代码,在交换AVPlayerItem之前在当前帧渲染图像,在新的AVPlayerItem有一个可以显示的帧之前弥合差距,但黑色帧阻止了查看该图像。是否有任何方法可以控制AVPlayerLayer在显示实际视频数据之前将呈现什么 或者,是否有方法通知AVPlay

我有一个
AVPlayer
对象,用于播放视频。当用户点击一个按钮时,视频被换成另一个视频,继续播放。仅使用
replaceCurrentItem(with:)
会在显示视频内容的my
AVPlayerLayer
上出现十分之几秒的黑色帧

我已经准备好代码,在交换
AVPlayerItem
之前在当前帧渲染图像,在新的
AVPlayerItem
有一个可以显示的帧之前弥合差距,但黑色帧阻止了查看该图像。是否有任何方法可以控制
AVPlayerLayer
在显示实际视频数据之前将呈现什么


或者,是否有方法通知
AVPlayerLayer
(或者,
AVPlayerItem
实际上已经开始显示视频数据?观察项目的状态何时变为
。readyToPlay
触发得太早,此时隐藏图像仍然可以看到黑色边框。

我的macOS应用程序也有同样的闪存问题。我通过更新
AVPlayerLayer
ea解决了这个问题每次我播放一个新文件

我有一个
AVPlayer
子类。下面的函数从其超级层中删除
AVPlayerLayer
,并向视图中添加一个新层

类MyVideoPlayer:AVPlayer{
func addLayer(视图:NSView){
视图。图层!。子图层?
.filter{$0是AVPlayerLayer}
.forEach{$0.removeFromSuperlayer()}
let layer=AVPlayerLayer.init(玩家:self)
layer.videoGravity=AVLayerVideoGravity.resize
layer.frame=view.bounds
view.layer!.addSublayer(层)
}
}
在我的
ViewController
中,我在播放视频内容之前调用它

myVideoPlayer.addLayer(视图:self.view)

我的macOS应用程序也有同样的闪存问题。我通过每次播放新文件时更新
AVPlayerLayer
解决了这个问题

我有一个
AVPlayer
子类。下面的函数从其超级层中删除
AVPlayerLayer
,并向视图中添加一个新层

类MyVideoPlayer:AVPlayer{
func addLayer(视图:NSView){
视图。图层!。子图层?
.filter{$0是AVPlayerLayer}
.forEach{$0.removeFromSuperlayer()}
let layer=AVPlayerLayer.init(玩家:self)
layer.videoGravity=AVLayerVideoGravity.resize
layer.frame=view.bounds
view.layer!.addSublayer(层)
}
}
在我的
ViewController
中,我在播放视频内容之前调用它

myVideoPlayer.addLayer(视图:self.view)