xfangfang / wiliwili

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

feature/activity分支最新构建启动闪退 #310

Closed MengNianxiaoyao closed 2 months ago

MengNianxiaoyao commented 2 months ago

系统win10,用的x86_64opengl版本,使用差不多1小时后关闭(视频播放有用倍速),然后再启动就容易闪退

MengNianxiaoyao commented 2 months ago

开着倍速拖动进度条后,偶现视频画面不动但进度条和声音都正常的情况

开着倍速,偶现下一个视频无声音的问题(自动播放下一个视频)

xfangfang commented 2 months ago

只有看到出错时候的log才能知道出了什么问题。

可以搜索一下历史issue如何查看log。

win下可以尽量使用d3d的版本,性能会好很多,下个版本windows就会默认发布d3d了。

再次启动时的闪退应该和之前看了什么没有关系,我在mac下用的比较多 是没有遇到闪退的现象的,如果闪退都集中于视频的播放过程中,可能和显卡驱动或者具体的设备有关,可以尝试切换软硬解,调整视频编码和更新显卡驱动(历史issue中就有windows用户因为显卡驱动导致了一些问题) 方便的话可以详细报告一下显卡型号。

没有声音可能是网络问题,下次再遇到可以视频全屏按f1看一下加载明细,然后发一下截图。

这个软件在我这边已经很久没有遇到闪退了,我感觉或许还是和显卡硬解之类的有关。

开着倍速拖动进度条后,偶现视频画面不动但进度条和声音都正常的情况

我知道的唯一可能会导致这个现象的原因是,视频被暂停了很久,久到链接失效了,但是音频链接好像不会失效,所以导致有声音没画面。 (但是针对这个问题,已经做了视频链接自动刷新,不确定是不是那个功能出现了问题)

MengNianxiaoyao commented 2 months ago

闪退和音画问题就这个最新构建版出现了,之前dev最新的构建版没有问题。

显卡是3050laptop,闪退是一打开加载完视频推荐页切一下就自己退了或者什么都不动就退。

xfangfang commented 2 months ago

那可以在闪退发生时,再用回之前的试一下,activity这个分支是做动态页的,刚加载的时候都没运行到动态页,应该和他无关的。

MengNianxiaoyao commented 2 months ago

wiliwili.log 闪退的log

xfangfang commented 2 months ago

@MengNianxiaoyao 感谢log反馈,我提交了一个新的更新,或许可以阻止这个闪退问题。

这个闪退和新的分支无关,发生闪退的当下立刻使用任何一个历史版本的wiliwili应该都会遇到相同的问题。

大概原因是:启动时从 api.github.com 获取最新版本号,大概会经历 下载 -> 解析 -> 检查版本号 这三个过程。但是不知为何,在检查版本号的这一步收到的是一个空白的版本号,按之前的做法如果有任何网络问题,应该在前两步都会识别出来,是不会传一个空白的内容到第三步的。

这个问题,要么是什么神奇的原因导致异常没有捕捉到,要么是 github 给你返回了结构正确但是内容为空的 json。(我感觉后者或许会有可能)

最新的提交,添加了几个判断,应该不会再出现相似的问题了,但是为了满足好奇心,如果您有时间的话还可以做这样的事:

  1. 我注意到开了代理,可以用新版分别在开代理和不开代理的情况下检查更新(应用内设置有检查更新的选项),将log记录下来,我来研究看看。(最好的情况是,旧版本闪退时,立刻使用这个修复版记录log,因为我感觉这个可能不是一直能稳定复现的)
  2. 在代理的情况下,使用浏览器访问 api 看看内部是否有 tag_name 字段 (可在隐身模式下访问,避免登录账号有影响)。

https://github.com/xfangfang/wiliwili/actions/runs/8640687553


可以使用这个链接下载:https://nightly.link/xfangfang/wiliwili/actions/runs/8640687553

MengNianxiaoyao commented 2 months ago

感谢提示,对于这个问题有头绪了,我发现在闪退的时候,我的代理都是开着的。走的规则模式,日志里也确实是走了代理,但是闪退。 正常打开没有闪退的情况下(此时还是开着代理),经过隐身访问api,发现ip超出了限制没有返回字段。

MengNianxiaoyao commented 2 months ago

crash-20240411-105918.dmp 还有一个dmp,这个是还在使用旧版本打开视频就闪退的

MengNianxiaoyao commented 2 months ago

不开代理.log 开代理.log 新版两种情况的log

xfangfang commented 2 months ago

一般不是自己搭的梯子确实会存在ip超限的问题,但是应该在前面三步中的 解析 这一步就通过异常识别出来了走不到后面。

xfangfang commented 2 months ago

不开代理.log 开代理.log 新版两种情况的log

看这两个log都很正常,估计要等什么时候遇到旧版本闪退的问题的时候,再抓才能看到了

MengNianxiaoyao commented 2 months ago

要么是 github 给你返回了结构正确但是内容为空的 json

可能是这个原因吧

xfangfang commented 2 months ago

我感觉也很有可能,另外一个视频相关的问题,我暂时没什么解决办法,可以切换到软解使用一阵,如果软解没问题,那我就更没什么办法了,可以等之后更新 ffmpeg 和 mpv 看看会不会有帮助。

dragonflylee commented 2 months ago

crash-20240411-105918.dmp 还有一个dmp,这个是还在使用旧版本打开视频就闪退的

请下载 https://www.dll-files.com/dbghelp.dll.html 并解压到 wiliwili 所在目录,日志可以打印更多的崩溃信息

强烈推荐对应的 wiliwili.pdb 文件也一并放到 wiliwili 所在目录

MengNianxiaoyao commented 2 months ago

暂时没有闪退,这个issue先关了

xfangfang commented 2 months ago

我确认了一下,这个问题确实是最新分支才引入的。

原因是最新的分支为了尽量避免b站api变动导致的json解析异常,引入了一个宏定义来忽略空值和不存在的值。(b站有些api有的值不存在的时候会消失,有时候会传一个 “”,有时候会传null,而且不一定啥时候就会有修改,之前有遇到过因此而产生的api报错) 这个宏定义在我本地编译时,是只有部分json解析时候才会用到的,但是github action编译的脚本开启了unity build,这个功能的目的是将多个cpp文件放在一起编译从而加快速度,但也意味着头文件混在一起了导致宏定义的作用域变广。所以就导致在检查更新的 api 返回的值不包含tag name的时候,没有正确报错。我在本地也遇到过 更新 api 报错,但是没开启 unity build 所以一直没有遇到闪退的问题。

前面说的修复确实是有效的,再次表示感谢。