设置 AVPlayer AVPlayerItem 缓冲区大小?

Posted

技术标签:

【中文标题】设置 AVPlayer AVPlayerItem 缓冲区大小?【英文标题】:set AVPlayer AVPlayerItem buffer size? 【发布时间】:2017-05-01 13:44:31 【问题描述】:

用avplayer播放视频,听loadedTimeRanges属性,播放10分钟左右的视频,avplayer总是预加载视频,感觉很费钱,有没有办法限制预加载区域的大小?比如一半时间预加载视频?

【问题讨论】:

【参考方案1】:

我认为您正在寻找 AVPlayerItem 的 preferredForwardBufferedDuration 属性。

每个苹果:

此属性以秒为单位定义首选的转发缓冲区持续时间。如果设置为 0,播放器将为大多数用例选择适当的缓冲级别。将此属性设置为较低的值会增加播放停止和重新缓冲的机会,而将其设置为较高的值会增加对系统资源的需求。

见https://developer.apple.com/reference/avfoundation/avplayeritem/1643630-preferredforwardbufferduration?language=objc

【讨论】:

谢谢,但是这个属性可能不是我要找的,我用的是avplayer,但是它是自动缓冲视频的,当使用KVO监视器loadedTimeRanges属性时,发现即使我没看所有的视频,都会全部加载,我想有没有办法只加载缓存的一部分。【参考方案2】:

如果您使用resourceLoaderdelegate,您可以控制在播放之前预加载/下载的内容的确切数量。

这里的代码示例是一个好的开始 - AVPlayer stalling on large video files using resource loader delegate

基本上,您必须维护一组pendingRequests 并通过启动URLSession dataTask 一次一个地处理它们,直到您下载了足够的要预加载的内容。

干杯。

【讨论】:

以上是关于设置 AVPlayer AVPlayerItem 缓冲区大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确删除/释放 AVPlayer/AVPlayerItem?

使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有啥区别吗?

使用 AVURLAsset + AVPlayerItem + AVPLayer 流式传输 .mp3

iOS 7中的iOS 7 AVPlayer AVPlayerItem持续时间不正确

通过 AvPlayerItem 和 AvPlayer 流式传输时监控下载的字节数 - iOS

iOS 8.4 AVFoundation _attachToPlayer 或 _attachToFigPlayer 崩溃 |一个 AVPlayerItem 不能与多个 AVPlayer 实例关联