xfangfang / wiliwili

第三方B站客户端,目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上
https://xfangfang.github.io/wiliwili
GNU General Public License v3.0
2.98k stars 145 forks source link

add cache secs setting option #333

Closed lanytcc closed 2 months ago

lanytcc commented 2 months ago

加了一个解码缓冲时长的设置选项 麻烦 @xfangfang 看一下 我不知道 “解码缓冲时长” 这个表述行不行,这个选项控制的是设置网络缓存的大小,以秒为单位。对于直播或网络视频流,这个设置可以控制预加载的数据量。

xfangfang commented 2 months ago

之前添加解码缓存这个选项是因为在switch上,开启缓存可能导致长时间播放后崩溃。所以加了这个选项临时解决一下问题,顺便测试一下不同大小的缓存在switch上的状态。

我不是很想把这个软件写的很极客,正常来说用户不需要理会解码缓存的大小,而且我感觉有一点点缓存来应对网络波动就足够了

关于这个pr:

  1. 什么情况下会需要调整具体缓存的时间?如果不是经常需要调整的,我认为对于有需要的人自己在mpv.conf里改一下会更好(wiki里有相关说明)
  2. 缓存的秒数是受缓存大小限制的,所以会出现用户的修改不符合预期的可能,比如:有人设置了10m和60s (我随便写的数字),可能实际缓存的秒数是小于60s的(受10m的限制)
  3. 针对第二点,我认为一个合理的修改可以是,在原有的解码缓存的弹窗里显示额外的秒数选项,并附加相关说明,列表项举例:

关闭 | 按数据量设置 10M 20M | 按缓存时长设置 10s 20s

当然我的看法还是,如果绝大多数人都不需要控制这样的选项,那么需要的朋友可能使用 mpv.conf 自行配制,这可以尽量让设置菜单看起来通俗易懂一点(虽然现在也有一些对大众来说不知所云的选项,但这都是我想一点点取消的内容)

P.S. 新功能提交最好可以rebase一下, 代码格式修改和功能的修改分开提交会更方便查看。

lanytcc commented 2 months ago

cache secs是控制播放的时候获取多少数据(所以我说我这个翻译不太合适),但不解码。也就是说,他跟解码缓存是两个相关但独立的选项。

在网络不好波动较大的时候,更大的cache secs可能会有更好播放体验

你提到的不想把软件做的很极客,我认同你的观点。

所以我觉得我们可以将这些选项单独提出来,放进类似于“高级选项”中,因为在我看来,cache secs是一个不那么极客的选项,只要配有相应的文字解释,我相信还是有不少人能看懂,只用mpv.conf配置在一些缺乏键盘的设备很困难

然后再把普通选项改成更笼统的,例如使用“图片质量”替换掉“图片纹理缓存数量”,将图片加载线程放进高级选项中

xfangfang commented 2 months ago

现有的解码缓存这个选项其实也是预取数据(或者是提前解封装),解码一般都是实时的吧(可能会多解码一两帧避免闪烁)

mpv 文档有: --cache-secs= How many seconds of audio/video to prefetch if the cache is active. This overrides the --demuxer-readahead-secs option if and only if the cache is enabled and the value is larger. The default value is set to something very high, so the actually achieved readahead will usually be limited by the value of the --demuxer-max-bytes option. Setting this option is usually only useful for limiting readahead.

现有的解码缓存选项控制的就是 demuxer-max-bytes

lanytcc commented 2 months ago

是我没有仔细阅读mpv文档了,抱歉。

这个pr稍后我会关掉,但我对“高级选项”这个概念很感兴趣,希望我们能继续讨论这个

xfangfang commented 2 months ago

客气啦,我感觉如果有高级选项的话可以加个mpv选项的自定义设置,类似IINA中:

image

图片质量和图片纹理缓存数量是不一致的,后者控制图片在显存中的缓存数量(其实我感觉也可以设置一个固定的值,不需要用户来调整,主要是考虑低内存设备 避免过大的值导致低内存设备OOM)

图片质量这个倒是也可以拿出来当选项,现在是设置了默认的图片分辨率(PSV使用了更低的分辨率)进行请求,如果在大屏幕上确实可能出现图片分辨率不足的情况