debugly/ijkplayer

[Discussions] 关于视频缓存

Closed this issue · 12 comments

大佬 我有一个关于视频缓存的问题,就是视频暂停的时候缓存就停止了,能不能在暂停的时候也缓存视频知道到达设置的最大缓存位置呢?下面是我的代码
options.setPlayerOptionIntValue(1, forKey: "videotoolbox_hwaccel")
options.setPlayerOptionIntValue(1024 * 1024 * 200, forKey: "max-buffer-size") // 设置最大缓冲区大小为200MB
options.setPlayerOptionIntValue(30, forKey: "min-frames") // 设置最小缓存帧数
options.setPlayerOptionIntValue(30, forKey: "probsize") // 设置探测数据大小
options.setPlayerOptionIntValue(1024 * 16, forKey: "analyzeduration") // 设置分析数据时长
options.setPlayerOptionIntValue(1024 * 1024 * 5, forKey: "http-pre-buffer-size") // 设置预缓冲大小为5MB
options.setPlayerOptionIntValue(1, forKey: "start-on-prepared") // 准备好后立即开始播放
options.setPlayerOptionIntValue(1, forKey: "threaded_opens") // 启用多线程打开
options.setPlayerOptionIntValue(1, forKey: "flush_packets") // 启用每次读取后清空缓冲

哈哈,这个问题已经被我发现了,将在最近2天发布新版本修复。

哈哈,这个问题已经被我发现了,将在最近2天发布新版本修复。

哈哈 好的,期待大佬新版本

试试新包:https://github.com/debugly/ijkplayer/releases/tag/k0.11.7-beta-240905094015

大佬 我试了一下,不行呢,我打印了playableDuration,发现暂停视频之后,playableDuration就不动了,self.player?.allHudItem()["tcp-spd"]也变成0了

应该是已经达到缓存的上限了。

应该是已经达到缓存的上限了。

应该没有达到上限,我这个视频是70M,上限设置的是200M

确实,已经修改,正在打包。

确实,已经修改,正在打包。

大佬 我下载新版本看了一下,还是不行,状态和之前一样的

max-buffer-size 的最大值是 #define MAX_QUEUE_SIZE (50 * 1024 * 1024),你设置成 200MB是无效的。
我这先暂停,然后seek,观察预加载进度是有跟新的:
image

大佬如果您只是暂停播放,不seek的话,是不是缓存就暂停了呢?我这里只要暂停视频,就不会继续缓存了,playableDuration也不变了

是的。
播放器一直处于buffer满(接近于满)的状态,这是一个生产者和消费者的关系,视频渲染会消耗,读包线程会去填充,这样播放器就能一直播放。
你暂停前的那一刻,buffer是满的,所以暂停后播放器并不会继续预加载,除非你的网络不够好,暂停前buffer不满,暂停后才会继续预加载。

是的。 播放器一直处于buffer满(接近于满)的状态,这是一个生产者和消费者的关系,视频渲染会消耗,读包线程会去填充,这样播放器就能一直播放。 你暂停前的那一刻,buffer是满的,所以暂停后播放器并不会继续预加载,除非你的网络不够好,暂停前buffer不满,暂停后才会继续预加载。

明白了,谢谢大佬的解答👍🏻