
и Preferredforwardbufferduration = 1 .
Код: Выделить всё
func configureVideo(with urlString: String) {
guard let url = URL(string: urlString) else { return }
player?.automaticallyWaitsToMinimizeStalling = true
player?.currentItem?.preferredForwardBufferDuration = 1
player?.playImmediately(atRate: 1.0)
player = AVPlayer(url: url)
playerLayer = AVPlayerLayer(player: player)
guard let playerLayer = playerLayer else { return }
playerLayer.videoGravity = .resizeAspectFill
vw_playVideo.layer.addSublayer(playerLayer)
layoutIfNeeded()
NotificationCenter.default.addObserver(
self,
selector: #selector(playerDidFinishPlaying),
name: .AVPlayerItemDidPlayToEndTime,
object: player?.currentItem
)
player?.currentItem?.asset.loadValuesAsynchronously(forKeys: ["playable"]) {
DispatchQueue.main.async {
self.player?.seek(to: .zero, completionHandler: { _ in
print("{\"now playing\"}")
self.vw_playVideo.stopSkeletonAnimation()
self.vw_playVideo.isSkeletonable = false
self.player?.play()
})
}
}
}
< /code>
Что я попробовал:
.playImmediately(atRate: 1.0)
Код: Выделить всё
automaticallyWaitsToMinimizeStalling = false
Код: Выделить всё
preferredForwardBufferDuration = 1
Использование .seek (to: .zero) перед воспроизведением
Асинхронная загрузка «воспроизводимой» ключа
Вопрос:
больше, чтобы использовать все большее, так как я могу использовать, как я могу использовать, так же, как я больше, так как предварительное кэширование или нагрузку на фоновое значение?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -after-set