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

PC端是不能用的吗 #282

Closed shugo-chara closed 4 months ago

shugo-chara commented 4 months ago

gpd win 4 7840u 平台 外接rtx 2060 gpu。 网路没问题,虽然在国外但移动端pc端多年来访问b站都没问题。 测试所有视频在网页或者客户端都正常可用。vilivili里也都能获取到正常播放地址只是无法播放。

因为win平台b站官方的客户端不仅后台偷gpu还各种难用,寻找替代品发现了这个热火朝天的全平台的第三方版本。 下载下来后傻眼了。

软解: ![image](https://github.com/xfangfang/wiliwili/assets/20610965/2d95a258-01eb-4a18-aaa8-2ad34a8c2753) 硬解h264能播放无声音通道,要么就也是无法播放 ![image](https://github.com/xfangfang/wiliwili/assets/20610965/0a748770-4843-417e-bb68-386041d773ec) ![image](https://github.com/xfangfang/wiliwili/assets/20610965/de96ab10-439e-4ede-a495-f5c65186f09c) 硬解av1和hevc能正常显示时长但无法播放 ![image](https://github.com/xfangfang/wiliwili/assets/20610965/4f85cb58-7dad-4585-b3e2-0e5900d94806) *注:新建mpv配置导入hwdec=auto-safe和hwdec-codecs=all后,反复刷新同一个视频时hevc偶尔可以正常显示画面但无声音,偶尔声音画面都正常 ![image](https://github.com/xfangfang/wiliwili/assets/20610965/51e2525e-74db-435c-bcf9-4d40cb40c442) ![image](https://github.com/xfangfang/wiliwili/assets/20610965/5666ecfd-a20f-4733-95ce-a1e5842e71cf)

以为是下载姿势不对,试了构建最新版问题依旧。 看文档说要mpv,win的版本都封装成一个exe里了,手动下载mpv放目录也无效 image

配置文件里看了下只有账户和设置相关信息,也没发现mpv相关配置。

看其他平台都讨论的热火朝天的..咋回事,是我这个pc过于不入流所以不能用么。。 但是N卡和Ryzen7这俩平台哪一个硬解4khdr啥的都应该信手拈来吧.. 折腾了半天灰溜溜的用回官方客户端hhh...

zeromake commented 4 months ago

多半是外接显卡无法兼容……

xfangfang commented 4 months ago
  1. 你给的第一张截图是开了硬解的,可以重新发一下软解的截图。
  2. 第二张截图对应硬解,但是看起来并没有显示播放时长。

其他疑问(包括如何设置mpv配置,比如指定显卡)可以看项目的 wiki:

  1. https://github.com/xfangfang/wiliwili/wiki#自定义播放器配置
  2. https://github.com/xfangfang/wiliwili/wiki#自定义硬解

建议通过命令行启动 wiliwili.exe -d -t 并把不同情况下(软硬解 + 不同编码)播放视频的log复制发出来。


而且视频无法播放(或者只有音频不显示)也有可能是网络环境问题,比如身在国外,或者设置了什么冷门dns服务器之类的,主要还是看log才能知道具体的问题。

shugo-chara commented 4 months ago
  1. 你给的第一张截图是开了硬解的,可以重新发一下软解的截图。
  2. 第二张截图对应硬解,但是看起来并没有显示播放时长。

其他疑问(包括如何设置mpv配置,比如指定显卡)可以看项目的 wiki:

  1. https://github.com/xfangfang/wiliwili/wiki#自定义播放器配置
  2. https://github.com/xfangfang/wiliwili/wiki#自定义硬解

建议通过命令行启动 wiliwili.exe -d -t 并把不同情况下(软硬解 + 不同编码)播放视频的log复制发出来。

而且视频无法播放(或者只有音频不显示)也有可能是网络环境问题,比如身在国外,或者设置了什么冷门dns服务器之类的,主要还是看log才能知道具体的问题。

@xfangfang 我更新了截图。 另外在-d -t模式下打开后,请问视频log是在哪里看。

xfangfang commented 4 months ago

@shugo-chara

另外在-d -t模式下打开后,请问视频log是在哪里看。

使用这个 debug版本 可以下载这个版本:https://github.com/xfangfang/DIY/actions/runs/7904524047 ,注意在命令行里要 cd 到wiliwili 所在的目录,再执行 wiliwili.exe 。 如果你认为内嵌的 libmpv 有问题,可以下载官方的libmpv:https://sourceforge.net/projects/mpv-player-windows/files/libmpv/ 直接替换即可。

新建mpv配置导入hwdec=auto-safe和hwdec-codecs=all后,反复刷新同一个视频时hevc偶尔可以正常显示画面但无声音,偶尔声音画面都正常

可以仔细看一下 wiki 里说的 自定义硬解,hwdec 这个选项被应用内占用了,直接配置应该没效果。需要手动给 wiliwili 添加一个配置项:"player_hwdec_custom": "auto-safe" (默认就是 auto-safe)具体见 wiki 中说的几个历史讨论。


我的理解:

这就意味着其实你是在反复刷同一个视频的时候偶尔能正常播放的,这就和软解放不出来对应上了,我感觉应该是网络的问题,仔细看了一下描述确实也是在国外。

wiliwili 目前的设定是5秒没播放出视频来就当成视频源失败自动切换,在国内 B 站同一个视频会有多个视频源,默认的视频源是 pcdn,pcdn 源会加载失败后再切普通cdn,国外的话一般只有一个视频源。

我的建议是先发一下软解的 log,看看是不是网络问题,如果是网络问题,你可以从log中提取出视频播放链接,直接用mpv播放试试(注意要设置 referrer),如果加载时间超过了 5s 然后视频能正常播放出来,那么我就加个自定义的超时配置你再试试,同时条件允许你也可以测一下 upos-hz-mirrorakam.akamaized.net 这个域名,看看dns能不能正常解析出来,搜索了一下也有专门为 B站 海外 cdn 解析测速的项目:https://github.com/miyouzi/akamTester

B站的官方软件可能有对dns的优化(我猜的),比如不通过 dns, 直接获取附近的cdn站点之类的功能,wiliwili 就是依赖系统的 dns 解析,所以可能会有网络速度问题。

shugo-chara commented 4 months ago

@shugo-chara

另外在-d -t模式下打开后,请问视频log是在哪里看。

使用这个 debug版本 可以下载这个版本:https://github.com/xfangfang/DIY/actions/runs/7904524047 ,注意在命令行里要 cd 到wiliwili 所在的目录,再执行 wiliwili.exe 。 如果你认为内嵌的 libmpv 有问题,可以下载官方的libmpv:https://sourceforge.net/projects/mpv-player-windows/files/libmpv/ 直接替换即可。

新建mpv配置导入hwdec=auto-safe和hwdec-codecs=all后,反复刷新同一个视频时hevc偶尔可以正常显示画面但无声音,偶尔声音画面都正常

可以仔细看一下 wiki 里说的 自定义硬解,hwdec 这个选项被应用内占用了,直接配置应该没效果。需要手动给 wiliwili 添加一个配置项:"player_hwdec_custom": "auto-safe" (默认就是 auto-safe)具体见 wiki 中说的几个历史讨论。

我的理解:

这就意味着其实你是在反复刷同一个视频的时候偶尔能正常播放的,这就和软解放不出来对应上了,我感觉应该是网络的问题,仔细看了一下描述确实也是在国外。

wiliwili 目前的设定是5秒没播放出视频来就当成视频源失败自动切换,在国内 B 站同一个视频会有多个视频源,默认的视频源是 pcdn,pcdn 源会加载失败后再切普通cdn,国外的话一般只有一个视频源。

我的建议是先发一下软解的 log,看看是不是网络问题,如果是网络问题,你可以从log中提取出视频播放链接,直接用mpv播放试试(注意要设置 referrer),如果加载时间超过了 5s 然后视频能正常播放出来,那么我就加个自定义的超时配置你再试试,同时条件允许你也可以测一下 upos-hz-mirrorakam.akamaized.net 这个域名,看看dns能不能正常解析出来,搜索了一下也有专门为 B站 海外 cdn 解析测速的项目:https://github.com/miyouzi/akamTester

B站的官方软件可能有对dns的优化(我猜的),比如不通过 dns, 直接获取附近的cdn站点之类的功能,wiliwili 就是依赖系统的 dns 解析,所以可能会有网络速度问题。

@xfangfang 感谢帮助 这是我的log,分别是软解和硬解模式的。 ~硬解log.txt~ ~软解log.txt~ (xfangfang: 避免暴露信息,我下载后把这两个删除了)

测试环境: 1.删去自定义mpv配置 2.使用debug版本 cmd下启动 3.软件内分别更改了软解和硬解下的h264和hevc。

测试结果: 同一个视频下,时间是都能秒显示,但依旧处于黑屏无法播放或可播放但无声音状态。 f1发现当黑屏无法播放时会有两种情况: 1.无法获取源地址 2.正常获取源地址但无法播放(与可播放但无声音的地址一致) 3.可正常播放但始终无声音,f1查看没有音频通道(测试上百次只有一次音视频同时正常播放。) ps.基本都是upos-hz-mirrorakam.akamaized.net的源地址。偶尔会匹配到*.bilivideo.com的地址。这与官方客户端和网页的实际情况一致。两个源在网页和其他客户端都可正常播放。两个源之间无非一个快一个慢点。

网络情况: sony万兆独立光纤 adguard home去广告(实测开关adh不影响测试结果)

你说的cdn测速和域名我也很早就有在用了。 国外b站也很早就都是pcdn。就是因为官方客户端的垃圾pcdn无法自己切换,总是会匹配到龟速cdn所以想换客户端。 网页端可以通过脚本禁止不想要的cdn达到加速。 东京这边upos-hz-mirrorakam.akamaized.net 是最稳定和快速的。 wiliwili里测速都是正常。除了无法播放外,所有显示内容都是秒加载。 不清楚wiliwili的加载机制,因为我这边打开视频一瞬间包括时间在内就加载好了,不能播放的话当时就无法播放了。 没有出现说5秒后没播放出来再失败的情况。

xfangfang commented 4 months ago

@shugo-chara 命令是 wiliwili.exe -d -t,你输入成了 wiliwili.exe -d- t

另外需要注意:可以从手机中的设备管理(设置 - 安全隐私 - 登录设备管理)里把 wiliwili 的登录先退出,避免log暴露个人信息。(或者把log开头的cookie输出删掉)

时间是通过 api 获取的,和视频本身无关,有些视频(比如:付费电影)只能预览几分钟,为了正确显示时间,所以前端的时间是从 api 中获取的。

在使用 -d -t 之后 log 中会有播放链接(音视频是分开的),你也可以分开测试看看。

shugo-chara commented 4 months ago

referrer

@xfangfang 忘记删cookie了感谢帮忙删掉。 这是新log log.txt 反复测试同一个视频几十次,只有最后一次是音视频同步正常播放。 其余都是只有画面或者黑屏无法播放的。

在其它播放器测试源地址 黑屏的时候拉出来的源确实是无法播放的。 只有画面的时候画面源正常,音频源无法播放。 最后一次音视频都正常的时候,音视频的源都可以播放(音频源第二个可以播放,第一个不行)。

不过我还是没懂为什么。如果是网络问题的话我在android上也用过第三方播放器,网页端和客户端都正常,一次都没出现过无法播放或者没有声音的情况。加载也基本都是秒加载。即便一个地址不行会自动切换到其他源。 按照你说的话wiliwili也是有切换策略的但为什么就会频繁出现无法播放的情况。尤其是音频,几十次下来就成功一次。 这个切换策略不是很清楚,是否可以和官方一样自动尝试切换直到可以播放为止。

ps.还发现一个问题。即便开了硬解,264跟hevc占用gpu都有点夸张有50%左右。正常hevc只有10%不到。。。

xfangfang commented 4 months ago

我看了log,确实是网络问题,准确的说应该是dns的问题:

[ffmpeg] tcp: Failed to resolve hostname upos-sz-mirroraliov.bilivideo.com: The name does not resolve for the supplied parameters

你现在用的 dns 解析 upos-sz-mirroraliov.bilivideo.com 这个域名超时了。可以自己改一下host 或者换个其他的 dns 服务试一试。

反复测试同一个视频几十次,只有最后一次是音视频同步正常播放。

我看了log,前面通过 api 获取到的只有一个地址,最后一次能正常播放的时候获取到了两个地址,其中一个应该是香港的 cdn, 是这个香港的cdn正常播放出来了,可能就是随机分配到的 api 服务刚好在香港附近?。

至于为什么官方的能正常用,我前面解释过了,可能是官方应用获取到了cdn对应的ip,所以不存在dns的问题,这个因为国内遇不到所以我没仔细研究。

结论:换个 dns 服务器再试试

补充: 正常来说网页也存在相似的问题,但是我猜可能网页视频用了不一样的 api,导致网页播放获取到的视频链接是不同的。也可能是网页挂了代理之类的,没走系统dns。


android上也用过第三方播放器,网页端和客户端都正常,一次都没出现过无法播放或者没有声音的情况。加载也基本都是秒加载。即便一个地址不行会自动切换到其他源。

wiliwili 用的是 pc 端的api,所以只和 pc 端对比是有意义的,其他平台用的 api 不同获取到的地址也不一定一样。


默认用的 OpenGL,这个版本用的是 D3D,GPU占用会相对比较低(注意这里说的是绘图的占用,不是解码的占用):https://github.com/dragonflylee/wiliwili/actions/runs/7797884266

shugo-chara commented 4 months ago

@xfangfang 检查了网络拓扑折腾了一圈,虽然还是没搞清原因但意外的暂时解决了无法播放的问题。 我的主路由是运营商固定的光猫,无法桥接强制拨号,且无法修改dns,自动获取运营商的dns。 所以我的所有设备都是连接到光猫后的二级路由上,路由做ap直连主路由光猫,是同网段所以dns都指向光猫ip。

问题就出现在这。 测试wiliwili的pc连的是二级路由,无法播放。但把pc直接连接到光猫后,却正常了...... 如果是运营商的dns有问题的话,为什么直连光猫会正常,二级路由dns也是指向光猫的,pc的dns指向二级路由。

思前想去没找到原因,我在二级路由上ping upos-sz-mirroraliov.bilivideo.com也正常。后来突发奇想在adguard home里直接把这个域名通过dns重写强制指向光猫获取到的运营商的dns。然后发现问题解决了...

因为主路由dns无法更改,且二级路由dns指向主路由,按理说都是走的主路由的运营商dns,所以一直以来访问b站从未遇到过dns相关的问题。如果不是这两天测试wiliwili还没有发现b站的dns策略还有这么个情况。 但不管怎么说知道原因也暂时解决了,d3d的版本gpu占用也下来了。体验了一晚上体验感五星。如果能同步官方的dns策略可能更完美但至少pc上终于能摆脱噩梦般的官方客户端了,感谢。

xfangfang commented 4 months ago

@shugo-chara 感谢详细反馈

在二级路由上ping upos-sz-mirroraliov.bilivideo.com也正常

这个是不是有可能没走 Adguard home

黑屏的时候拉出来的源确实是无法播放的。

这一条回复说明之前直接使用 mpv 来播放也是不能用的。我的建议是在pc上按照之前不能用的时候的配置,使用 nslookup 之类的工具来测试一下相关的域名。有可能是二级路由之前 Adguard 的dns处理时间太久导致 mpv 使用的 ffmpeg 认为dns超时了(我不知道默认的 dns 超时时间是多少),也没准是 Adguard 某个规则导致的问题。

如果是网络问题的话我在android上也用过第三方播放器,网页端和客户端都正常,一次都没出现过无法播放或者没有声音的情况。

可以用 wireshark 过滤看一看这些客户端究竟发了哪些 DNS请求:_ws.col.protocol == "DNS"

如果能同步官方的dns策略可能更完美

我其实在我本地用 wireshark 来看的话官方pc端也会进行 dns 请求,所以我感觉可能是官方的 pc 端能接受的 dns 超时时间更长。

因为这个问题和 wiliwili 应该无关,我就先关闭啦~

shugo-chara commented 4 months ago

@shugo-chara 感谢详细反馈

在二级路由上ping upos-sz-mirroraliov.bilivideo.com也正常

这个是不是有可能没走 Adguard home

黑屏的时候拉出来的源确实是无法播放的。

这一条回复说明之前直接使用 mpv 来播放也是不能用的。我的建议是在pc上按照之前不能用的时候的配置,使用 nslookup 之类的工具来测试一下相关的域名。有可能是二级路由之前 Adguard 的dns处理时间太久导致 mpv 使用的 ffmpeg 认为dns超时了(我不知道默认的 dns 超时时间是多少),也没准是 Adguard 某个规则导致的问题。

如果是网络问题的话我在android上也用过第三方播放器,网页端和客户端都正常,一次都没出现过无法播放或者没有声音的情况。

可以用 wireshark 过滤看一看这些客户端究竟发了哪些 DNS请求:_ws.col.protocol == "DNS"

如果能同步官方的dns策略可能更完美

我其实在我本地用 wireshark 来看的话官方pc端也会进行 dns 请求,所以我感觉可能是官方的 pc 端能接受的 dns 超时时间更长。

因为这个问题和 wiliwili 应该无关,我就先关闭啦~

@xfangfang 感谢解决问题。

后续抓包看了下,好像定位到了之前访问失败的原因。 日本这边基本都是ipv6环境了,但因为是国内的服务所以之前我只顾着考虑dns相关的ipv4情况,忽略了ipv6。因为理论上只有运营商dns并没有旁路可走,估计是ipv6访问策略问题。也解释了问题域名进行dns重写到运营商的dns后,几乎没在遇到黑屏问题。

抓包发现有ack丢失问题 image image

然后发现域名实际访问的就是东京都的节点,要么就是旁边的韩国。 image

倒是其他地方很少。但近在眼前,却拒绝访问hhhh。

xfangfang commented 4 months ago

我今天也想到了可能是ipv6单栈导致的,等晚上看看能不能搞一下应用内的自定义的dns服务,因为dns问题在各个平台上导致应用部分功能不可用的情况确实出现过几次。

我还是不太理解为什么在你的环境里之前的pc客户端或者网页端没问题。尤其是网页端 我以为应该也会请求域名呀,难道是浏览器做了什么优化吗?

shugo-chara commented 4 months ago

@xfangfang 准确的说我的环境网页端比客户端访问还要更快更稳定一点。 尽管ipv6理论应该比ipv4访问更快一些,但pc包括移动版的客户端都会时不时给分到垃圾cdn上很慢,但网页版这种情况却很少。也没有做过什么优化,chrome原生。 可能调度策略优化的比较好。

shugo-chara commented 4 months ago

我看了log,确实是网络问题,准确的说应该是dns的问题:

[ffmpeg] tcp: Failed to resolve hostname upos-sz-mirroraliov.bilivideo.com: The name does not resolve for the supplied parameters

你现在用的 dns 解析 upos-sz-mirroraliov.bilivideo.com 这个域名超时了。可以自己改一下host 或者换个其他的 dns 服务试一试。

反复测试同一个视频几十次,只有最后一次是音视频同步正常播放。

我看了log,前面通过 api 获取到的只有一个地址,最后一次能正常播放的时候获取到了两个地址,其中一个应该是香港的 cdn, 是这个香港的cdn正常播放出来了,可能就是随机分配到的 api 服务刚好在香港附近?。

至于为什么官方的能正常用,我前面解释过了,可能是官方应用获取到了cdn对应的ip,所以不存在dns的问题,这个因为国内遇不到所以我没仔细研究。

结论:换个 dns 服务器再试试

补充: 正常来说网页也存在相似的问题,但是我猜可能网页视频用了不一样的 api,导致网页播放获取到的视频链接是不同的。也可能是网页挂了代理之类的,没走系统dns。

android上也用过第三方播放器,网页端和客户端都正常,一次都没出现过无法播放或者没有声音的情况。加载也基本都是秒加载。即便一个地址不行会自动切换到其他源。

wiliwili 用的是 pc 端的api,所以只和 pc 端对比是有意义的,其他平台用的 api 不同获取到的地址也不一定一样。

默认用的 OpenGL,这个版本用的是 D3D,GPU占用会相对比较低(注意这里说的是绘图的占用,不是解码的占用):https://github.com/dragonflylee/wiliwili/actions/runs/7797884266

@xfangfang 我又来了🤣。 继上次用dns重写临时解决超时问题后,今天发现又旧病复发。且error和上次略有不同。 这一次不管怎么重写或者取消重写,都没有办法解决。

这次普遍是 [ffmpeg] tcp: Connection to tcp://upos-sz-mirroraliov.bilivideo.com:443 failed: Error number -138 occurred

以及 [ffmpeg] https: HTTP error 503 Service Unavailable Failed to open https://upos-sz-mirroraliov.bilivideo.com/upgcxcode/xxxx

这个503就很奇怪。试着更换了akamtester的其他ip也不行。 官方客户端依旧正常

不知道能否在app内增加dns指定功能..这样应该能一劳永逸的解决dns超时的问题。

附log: log.txt

xfangfang commented 4 months ago

@shugo-chara

不知道能否在app内增加dns指定功能..这样应该能一劳永逸的解决dns超时的问题。

  1. Adguard 有可能会强制更改dns,即使做了这个功能没准也被他自动改了;2. 做这个很消耗时间,我没有在这方面花时间的打算;3. 你现在的问题和 dns 貌似没什么关系。

但是欢迎提交 PR

官方客户端依旧正常

之前说过了,可以抓包看看,对比一下在你的网络环境中网页、官方客户端、wiliwili 这三者播放视频时 dns 请求的区别。(我感觉有可能他们用了 DNS over HTTPS 所以没有受到 Adguard 的影响)

[ffmpeg] https: HTTP error 503 Service Unavailable

这个说明 dns 解析是没问题的,是解析出来的结果有问题,我倾向于是你在哪里配置了 host 导致的问题,当然也不排除 B 站服务器自身的问题。

我建议遇到问题可以先在本地用 mpv 播放一下视频链接,如果 mpv 能播 wiliwili 不能播,那是我可以解决的,如果 mpv 本身就播不了,那问题就是你那边网络环境导致的。

有一个可以临时设置播放ip 的小技巧:

先测试: mpv --referrer="https://www.bilibili.com" "https://upos-sz-mirroraliov.bilivideo.com/upgcxcode/95/53/1456465395/1456465395-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1709467545&gen=playurlv2&os=aliovbv&oi=1876465770&trid=4d516284d0cf4c3fb930f92629a6f768u&mid=337377&platform=pc&upsig=905dc6d963cf383c6e655f2b25719e67&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,1&buvid=CF7DB23D-7876-A398-3EF1-8965C63D0D3F43ACAinfoc&build=0&f=u_0_0&agrr=1&bw=129156&logo=80000000"

如果和之前一样出现了 503,那就继续测试直接指定ip访问 mpv --referrer="https://www.bilibili.com" --http-header-fields='Host: upos-sz-mirroraliov.bilivideo.com' "https://163.181.81.31/upgcxcode/95/53/1456465395/1456465395-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1709467545&gen=playurlv2&os=aliovbv&oi=1876465770&trid=4d516284d0cf4c3fb930f92629a6f768u&mid=337377&platform=pc&upsig=905dc6d963cf383c6e655f2b25719e67&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,1&buvid=CF7DB23D-7876-A398-3EF1-8965C63D0D3F43ACAinfoc&build=0&f=u_0_0&agrr=1&bw=129156&logo=80000000"