设置AVPlayer和AVPlayerItem的缓冲大小?

7

使用AVPlayer播放视频时,监听loadedTimeRanges属性,播放约10分钟的视频后,AVPlayer总是预加载视频,感觉非常耗费资源。有没有一种方法可以限制预加载区域的大小?比如只预加载视频时间的一半?

2个回答

9
我认为你正在寻找AVPlayerItem的preferredForwardBufferedDuration属性。
根据苹果公司的说法:
该属性以秒为单位定义了首选的前向缓冲持续时间。 如果设置为0,则播放器将选择适当的缓冲级别以满足大多数用例。 将此属性设置为较低的值将增加播放停顿和重新缓冲的可能性,而将其设置为较高的值将增加对系统资源的需求。
请参见https://developer.apple.com/reference/avfoundation/avplayeritem/1643630-preferredforwardbufferduration?language=objc

3
谢谢你,但是这个属性可能不是我正在寻找的。我使用AVPlayer播放器,但它会自动缓冲视频。当使用KVO监视loadedTimeRanges属性时,我发现即使我没有完全播放视频,它也会全部加载。我想知道是否有一种方法只缓存部分内容。 - xywwjf

3
如果您使用resourceLoaderdelegate,您可以在播放之前控制预加载/下载的确切内容量。 这里的代码示例是一个好的起点- AVPlayer在使用资源加载器委托时卡住大型视频文件。 基本上,您需要维护一个待处理请求的数组,并通过启动URLSession dataTask逐个处理它们,直到下载足够要预加载的内容为止。祝好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接