AVPlayer在缓冲后停止播放video

当我从互联网上加载video(10-40MB大)时,我无法提供流畅的播放体验。

我的AVPlayer要么加载整个video然后播放它,要么播放1s缓冲区,然后停止播放。

我尝试了无限的库,缓冲区观察器方法和教程。 似乎没有任何帮助。

. . . self.makeLoaderVisible() let playerItem = AVPlayerItem(url: url) playerItem.addObserver(self, forKeyPath: "playbackBufferEmpty", options: .new, context: nil) playerItem.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: .new, context: nil) playerItem.addObserver(self, forKeyPath: "playbackBufferFull", options: .new, context: nil) avPlayer?.replaceCurrentItem(with: playerItem) avPlayer?.automaticallyWaitsToMinimizeStalling = false avPlayer?.playImmediately(atRate: 0) // avPlayer?.play() } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if object is AVPlayerItem { switch keyPath! { case "playbackBufferEmpty": // Show loader makeLoaderVisible() case "playbackLikelyToKeepUp": // Hide loader hideLoader() case "playbackBufferFull": // Hide loader hideLoader() default: return } } } 

iOS 10.x开始 ,您可以进行一些缓冲设置,例如,您可以决定缓存video所需的秒数:

  if #available(iOS 10.0, tvOS 10.0, OSX 10.12, *) { avPlayer?.automaticallyWaitsToMinimizeStalling = .playWhenBufferNotEmpty //preferredForwardBufferDuration -> default is 0, which means `AVPlayer` handle it independently, try more seconds like 5 or 10. playerItem.preferredForwardBufferDuration = TimeInterval(5) }