我有一个AVPlayer
从远程网址加载其内容。创建AVPlayer
后,它会显示视频的缩略图。我似乎无法找到任何有关通知或属性的信息,我可以收听这些缩略图的添加时间,因为我想在添加缩略图之前显示加载屏幕并将其删除。
class VideoView: UIView {
private var playerLayer: AVPlayerLayer {
return layer as! AVPlayerLayer
}
public var videoURL: URL? {
didSet {
guard videoURL != oldValue
else { return }
if let videoURL = videoURL {
avPlayer = AVPlayer(url: videoURL)
playerLayer.player = avPlayer
}
}
}
private var avPlayer: AVPlayer?
override public static var layerClass: AnyClass {
return AVPlayerLayer.self
}
}
我已尝试观察播放器的currentItem.status
值是readyToPlay
但是在状态更改为readyToPlay
后添加了缩略图
observer = currentItem.observe(\.status) { [weak self] (currentItem, change) in
if currentItem.status == .readyToPlay {
self?.overlay?.isHidden = false
}
}
由于
答案 0 :(得分:2)
以下是将缩略图添加到AVVideoPlayerViewController时监听的代码(意味着它已准备好显示)
observer = avVideoPlayerViewController.observe(\.isReadyForDisplay) { [weak self] (avVideoPlayerViewController, change) in
if avVideoPlayerViewController.isReadyForDisplay {
print("Video player is ready for display")
} else {
print("Video player is not ready for display")
}
}
答案 1 :(得分:1)
AVPlayerLayer
有一个您可以观察到的属性:readyForDisplay
。它是BOOL
,文档为:
一个布尔值,指示第一个视频帧是否已准备好显示相关播放器的当前项目。使用此属性作为最佳显示或动画播放器层进入视图的指示器。当此属性为NO时,可以显示或使其可见,但是在该值变为YES之前,该层将不具有任何用户可见内容。对于其资产不包含已启用的视频轨道的玩家的currentItem,此属性保持为NO。此属性是使用键值观察可观察的键值。
您应该能够观察此属性并在加载视频的第一帧时删除加载微调器。请注意,对于不包含任何视频轨道的播放器项,此属性仍为NO
。希望这会有所帮助。