Skip to content
xfangfang edited this page Jun 7, 2024 · 182 revisions

欢迎来到 wiliwili 的 Wiki

这篇文档包含了关于 wiliwili 一切你需要了解的信息

⚠️ 注意:此文档时时更新中,部分内容不一定与当前的正式版一致。
如果文档中标注出某些功能无法在正式版本上使用,可以下载测试版,详细说明见下方第一节——#下载安装。

本文档包含:

1. 下载安装

  • Windows / macOS / Linux / Nintendo Switch / PSV / PS4
    参考 项目首页 说明下载安装即可
  • Windows on ARM
    参考 项目首页 说明下载后,在商店安装 OpenGL兼容包
  • Xbox
    请前往:wiliwili-uwp-poc
  • Steam Deck
    请参考:#41
  • 树莓派
    请参考:#78
  • 从包管理器安装
    请参考:#92
  • 测试版
    可以从 Github-Actions 下载自动构建的测试版客户端
    如果不知道如何从 Github-Actions 下载软件,这里是 教程
    也可以直接从这里下载(不保证一直可用):nightly.link

测试版更新内容

  • [Windows] 修复不显示emoji的问题
  • 修复 直播间轮播视频时,页面不断产生提示
  • 修复 部分视频 API 报错
  • 优化 支持更多的 DLNA 投屏客户端向 wiliwili 投放视频
  • 新增 消息相关功能

已知问题

  • [switch] 开启硬解 + 解码缓存 会导致长时间播放后花屏,二者任意关闭其一即可临时解决,如果你对于这个问题有任何想法(比如可能的原因、快速稳定触发的方法等 欢迎开一个 issue 讨论)

2. 使用指南

更多说明可以在应用内找到,入口在:设置 - 实用工具 - 使用教程

如果使用过程中遇到问题,如:黑屏、无法访问网络等,请查阅本文第五节。

快捷键

可以在应用设置中开启底部提示栏,对大部分快捷键都会有提示。
PC 端按键映射:#47

应用内未显示在下方提示栏中的快捷键

image

注: RT + 方向键上下 可以快速调节音量 (实验功能,随时更改)

应用设置功能解读

针对不同平台优化,不同平台下的默认设置不同,如果你不知道究竟该怎么选择,那么推荐什么也不修改,默认的配置就足够使用了。如果你不了解具体某个选项的功能也推荐不要盲目修改。

低画质解码

开启了两个 mpv 选项:
vd-lavc-skiploopfilter: all
vd-lavc-fast: yes

在 switch / psv 软解时、或使用 ps4 播放 4k 视频时推荐开启,播放体验更好的情况下轻微损失画质。

硬件解码

在开启硬解时,设置了 mpv 选项:hwdec: auto-safe

除PS4外,其他平台均支持硬解(PC平台默认关闭),在视频页面全屏按 手柄左侧功能键(PC上为F1)可以查看详细信息,如果显示有 Hardware Decode: no 则说明未开启硬解。(switch 的 ubuntu 系统除外,那个硬解实现思路不同,无论怎么显示都开了硬解)

PSV 能够流畅硬解 360P,同时勉强播放720P,至于480P则效果最差(我也不是很懂为什么480P效果更差,了解的朋友可以发条issue讨论一下,感谢)

默认提供的switch安装包为 OpenGL 版本,最高支持硬解播放 4k@30,你也可以下载到支持原生图形 api 的 deko3d 版本,可以流畅播放 4k@60,不过可能会偶尔崩溃。

部分平台需要显式地指定硬解方案,才能正常开启硬解,请参考下方的 自定义硬解

解码缓存

关闭时设置了 mpv 选项: cache: no
开启时设置了:
demuxer-max-bytes: NMiB
demuxer-max-back-bytes: N/2MiB

在播放中预先缓存指定大小的视频数据,避免网络波动导致频繁加载,推荐设置成 10MB 就足够了。

视频格式/视频编码/视频音质

这个选项只控制用户上传视频和番剧(换句话说就是和直播没有关系)

当选择视频格式为 Dash 时,可以调节优先获取哪个 视频编码/视频音质,根据你的设备来选择,如果不知道如何选择,保持默认值即可。
当视频格式为 flv/mp4 时,获取最高 1080p 的 h264 视频,仅用作备份方案使用。

图片设置

  • 缓存数量:表示究竟有多少张图像会缓存在内存中,在图像失去引用时(比如列表中滑出屏幕外的卡片)将图片加入缓存队列,当缓存占满时根据这个选项的数值大小按照最近最少使用规则移出图片。
  • 加载线程:同一时间加载多少张图片,这个数值越大图片加载速度就会相应越快(会根据设备的网速和性能有一个上限)

网络设置

  • TLS 验证:开启后网络访问更加安全,如果你访问网络时显示无网络,那么可以尝试关闭这个选项测试看看。
  • 应用代理:设置 http 或 socks5 代理(部分平台不支持)

TV 风格搜索页

开启此选项后,点击应用内搜索会进入一个 TV 端风格的搜索页,附带关键字首字母搜索联想,适合掌机用户。

TV 风格播放器

开启此选项后:

  1. 焦点可以选到控制条上,通过确定键选中并调整,再次点击确定完成进度调整(之前:无法通过方向键调整进度)
  2. osd 隐藏状态下,按下确定键显示 osd。(之前:确定键控制播放和暂停)
  3. 全屏时 osd 显示状态下按返回键隐藏 osd,隐藏后再按返回键退出全屏。(之前:返回键控制直接退出全屏)

所以如果你的设备能连接到一个蓝牙遥控器,那么就能通过这个遥控器完整控制 wiliwili 了。

界面缩放

调整应用文字和组件尺寸以适应不同屏幕大小。

键位图标

下方提示栏显示的图标风格,目前在 pc 平台有三种风格可选 (xbox、playstation、keyboard)。你可以在应用配置目录放置 icon.ttf 文件来设置自定义图标,查看下一节获取详细信息。

3. 合理配置

本节包含:

  • 自定义界面布局
  • 自定义手柄支持
  • 自定义字体/按键图标/emoji
  • 自定义PC端快捷键
  • 自定义播放器配置
  • 自定义着色器
  • 自定义硬解
  • 自定义视频源格式
  • 自定义帧数限制
  • 自定义DLNA接收端名称/端口号/ip

在自定义诸多内容前,你需要知道如何打开应用的配置目录,入口在:设置 - 实用工具 - 打开配置目录
你也可以直接打开配置目录:#39

自定义界面布局

wiliwili 使用 xml 来布局界面,如果你对当前的界面布局不满意,比如希望默认打开的页面不是首页推荐、想把某个收藏夹放在首页等等 都可以通过自定义布局的方式来修改。

修改布局不需要对编程十分了解,参考已有的布局修改即可。

详细说明:wiliwili_theme

自定义手柄支持

一些玩家使用了目前未被收录的手柄,可能会出现软件无法正确识别按键键位的问题,解决方法是下载或自定义 gamecontrollerdb.txt 放置在配置目录。
关于这个文件如何生成与如何修改,请参考:SDL_GameControllerDB
相关讨论:#54

自定义字体/按键图标/emoji

字体即为应用内使用的字体,设置自定义字体后会优先调用自定义字体包含的字形。

按键图标是当开启底部提示栏时(可于设置中开启或关闭),快捷键对应的图标,wiliwili pc 端应用内置了 xbox、ps 和 键盘 三种自定义图标包,如果你不是很喜欢,也可以仿照这些图标自己绘制。

请参考:#38

自定义PC端快捷键

目前软件内并不支持自定义快捷键,未来也没有计划做这样的支持,不过你可以通过微调代码来快速完成(何尝不是一种自定义) 请参考:https://github.com/xfangfang/wiliwili/issues/119 参考:网友修改方案

自定义播放器配置

在配置目录新建 mpv.conf,其中写入 mpv 配置即可,配置内容可前往 https://mpv.io 查阅。
有一些配置指令会和应用内设置冲突导致无法使用,遇到这种情况请发布一个issue讨论。

例如:针对 switch 用户 为了提升播放性能或许可以配置如下内容:

# 可能会和部分自定义着色器冲突
fbo-format=rgba8
opengl-pbo=yes

例如:调整视频色彩等信息,见文档:Equalizer

saturation=0
brightness=0
contrast=0
gamma=0
hue=0

自定义着色器

观看低分辨率视频(尤其是老动画片)时,可以使用自定义着色器来提升画面观感。
switch 的 deko3d 版本、PS4 均不支持自定义着色器。

这是作者正在使用的 shader 配置(按照压缩包内说明使用即可):wiliwili_shader.zip

如果你想自定义其他 shader,可以遵循下面的流程:

  1. 将你需要的着色器文件放入配置目录下的 shaders 文件夹(默认不存在需要自己创建)
  2. 在配置目录下新建一个名为 pack.json 的文本文件,在其中写入:
{
  "profiles": [
    {
      "name": "SSimSuperRes (这里写自定义的配置名称)",
      "shaders": [
        "SSimSuperRes.glsl (这里写入 shaders 目录下的文件名,可以同时指定多个)",
        "Another.glsl"
      ]
    }
  ]
}
  1. 重启应用,在视频播放页点击播放器右上角小齿轮,在弹出的设置页面选择你自定义的配置即可

自定义硬解

在 mpv 默认识别的硬解在你的设备上不起作用或效果不佳时,可以尝试自定义硬解。
在自定义硬解前,可以先在设备上直接使用 mpv 调试清楚再修改。
请参考:#78
Linux用户同时参考:#105
Windows用户可以参考:#220

自定义视频源请求内容

如果应用正常使用无问题,无需查看此节

  1. 配置项:file_format
    前端入口: 设置/视频格式,可以在 Dash 与 FLV 中切换。默认 Dash(AVC/HEVC/AV1) 对应的值为 4048; FLV/MP4 对应的值为 0;
    FLV/MP4 只有 1080P 和 360P 两种分辨率,作为Dash格式出错时的备选方案。
    若B站未来变更,在应用未更新前,可以手动去配置文件修改此值。定义见: #qn视频清晰度标识

  2. 配置项 video_codec
    开启 Dash 源后,可选视频编码,推荐搭配硬解选择 HEVC,不支持硬解的设备使用 AVC。switch ps4 psv 均推荐使用AVC。
    目前只设置了三个选项,若B站未来支持更多编码,在应用未更新前,可以手动去配置文件修改此值。定义见:#视频编码代码

  3. 配置项 audio_quality
    开启 Dash 源后,可选音频音质(暂未支持杜比全景声和Hi-Res)
    目前只设置了三个选项,若B站未来支持更多音频音质,在应用未更新前,可以手动去配置文件修改此值。定义见:#视频伴音音质代码

自定义帧数限制

不稳定功能,默认关闭

三个可以写入配置文件的自定义选项:

  1. limited_fps(无需手动修改,可以在设置菜单中修改)
    设置为 0 时,最大刷新帧数受显示器帧数限制。(默认)
    设置为大于 0 的值,会在显示器刷新率的基础上限制最大刷新帧数到 limited_fps
  2. deactivated_timedeactivated_fps
    在应用无操作 deactivated_time 毫秒后,限制最大刷新帧数到 deactivated_fps
    deactivated_time 设置为 0 关闭这个功能(默认值),单位 ms
    deactivated_fps 默认值 5 单位 fps

自定义DLNA接收端名称/端口号/ip

入口:设置-> 实用工具 -> 其他 -> DLNA 投屏

添加了三个配置项用于自定义配置(Linux下或者多网卡下,可能需要手动指定 dlna_ip):

dlna_ip: "192.168.1.100"
dlna_port: 9958
dlna_name: "wiliwili"

应用会开启: 0.0.0.0:${dlna_port} 的 http 服务(SOAP),和 0.0.0.0:1900 的 udp 服务(SSDP)

目前支持: 播放暂停、进度同步、控制声音

还需改进的问题:

  • SOAP端口冲突时自动调整 (目前简单写了个提示,先这么用吧)
  • SSDP服务支持端口复用 (全平台使用 SO_REUSEADDR,不一定能兼容到所有的其他软件)
  • SSDP服务支持多网卡 (目前使用默认网卡,先这么用吧)
  • SSDP定时发布服务 (腾讯视频依赖)
  • 支持事件订阅 (网易云 / qq音乐依赖,考虑到应该没人投这俩,所以先忽视这个功能)
  • 做好解析数据失败的 catch
  • 添加更多的DLNA事件支持 (DLNA控制播放器)
  • 添加播放器回调支持(播放器状态发送到DLNA)

4. 开发指南

wiliwili 目前支持:

  • Linux / macOS / Windows (OpenGL 3.2+)
  • Nintendo Switch / PS4 / PSV
  • 其他 OpenGL2 / ES2 / ES3 设备 (树莓派等)
  • 其他非 OpenGL 图形API (DirectX等)

拉取项目

特别需要注意的是,你需要按照 README 所说递归地拉取项目,否则在 library 目录下的第三方依赖均为空目录无法构建。若拉取项目是没有按照 README 所说方式拉取,可以运行:

git submodule update --init --recursive

在切换分支时,以切换到 dev 分支举例,使用:

# method 1
git checkout dev
git submodule update --init --recursive

# method 2
git checkout --r dev

编译参数

请参考:workflow

wiliwili 使用 cmake 控制编译流程:

  1. 对于不同平台的编译需要手动进行指定(必选)
  • -DPLATFORM_DESKTOP=ON
  • -DPLATFORM_PSV=ON
  • -DPLATFORM_PS4=ON
  • -DPLATFORM_SWITCH=ON
  1. 使用系统路径中的库,而不是从源码重新编译
  • -DUSE_SHARED_LIB=ON
  • 请参考 CMakeLists.txt,还可以针对特定的依赖指定需不需要系统库
  1. 禁用部分依赖
  • -DDISABLE_OPENCC=ON 禁用简体转繁体功能
  • -DDISABLE_WEBP=ON 禁用 webp
  1. 播放器相关选项
  • -DMPV_SW_RENDER=ON 默认关,软件渲染
  • -DMPV_NO_FB=ON 默认关,禁用独立的Framebuffer,搭配 -DUSE_GL2=ON 时会强制开启此选项 (PSV 不推荐开启此选项)
  • -DMPV_BUNDLE_DLL=ON 默认关,将mpv动态依赖库打包进应用,请参考 workflow,Windows only
  1. 图形 API
  • -DUSE_GL3=ON PC/SWITCH 编译默认选项 (OpenGL3.2+)
  • -DUSE_GL2=ON 适合老电脑 或 树莓派这种不支持 GL3+ 的设备
  • -DUSE_GLES2=ON PSV/PS4 编译默认选项 (这两个平台目前也只支持 GLES2)
  • -DUSE_GLES3=ON 可以搭配 ANGLE 支持其他图形API
  • -DUSE_DEKO3D=ON switch 独占选项,性能更好但暂时还不稳定
  • -DUSE_D3D11=ON windows下获取更好的性能, Windows only
  1. 窗口管理
  • -DUSE_GLFW=ON PC/SWITCH 编译默认选项
  • -DUSE_SDL2=ON PSV/PS4 编译默认选项 (这两个平台目前也只支持 SDL2)
  1. 资源文件相关
  • -DUSE_LIBROMFS=ON 默认关,将应用资源文件打包进可执行文件 (可以将应用打包为单一可执行文件)
  • -DLIBROMFS_PREBUILT_GENERATOR=libromfs-generator 在开启 LIBROMFS 时,交叉编译需要手动指定 generator,如何构建 generator 请参考 library/borealis/build_libromfs_generator.sh
  • -DCUSTOM_RESOURCES_DIR="" 设置自定义的资源文件路径,默认为执行目录或安装目录 (打包为 appimage 时比较有用)
  1. 其他
  • -DUSE_BOOST_FILESYSTEM=ON 默认关,使用 boost 而不是 std 的 filesystem (适配不支持 std filesystem 的老系统)
  • -DWIN32_TERMINAL=OFF 默认开,Windows 独占,在应用执行时会额外弹出 shell 窗口显示log
  • -DINSTALL=ON 默认关,Linux 独占,将应用安装到系统路径 (你可以通过 -DCMAKE_INSTALL_PREFIX="/some-path" 来指定具体的安装目录)
  • -DDEBUG_SANITIZER=ON 默认关,开发时推荐开启,在执行时检测内存或指针等相关的问题

PS4/PSV 开发最佳实践

项目针对 PS4 和 PSV 分别提供了docker镜像,开发者无需繁琐地配置本地开发环境。(详情见 README)

在 Apple Silicon 上编译,推荐使用 OrbStack 代替 Docker Desktop,因为前者支持 Rosetta 运行 x86_64 的 Docker 镜像。(大概会有6倍以上的提速效果)

额外地,如果你使用 clion 开发,可以通过配置 docker toolchain 更好地使用镜像。

switch 目前因为硬解支持库更新频繁所以暂时先不维护docker镜像,使用官方镜像 + 第三方包的形式来支持(你可以在本地自己组装一下镜像)。

UWP 开发

UWP 有两个版本,其一是 windows only 的 xmake 版,你可以从 github action 下载到。其二是同时支持 xbox 和 windows 的 vs 版 ikas-mc/wiliwili-uwp-poc

更新的进展请参考:#69 #221

其他

常规开发指南,请参考:#开发

Linux开发的额外信息:#89

树莓派及其他 OpenGL2.1 设备,请参考:#78

macOS 打包指南,请参考:#151

5. 常见问题

什么游戏主机支持安装wiliwili

  1. 目前 wiliwili 支持 psv/ps4/switch/xbox
  2. 对于 psv/ps4/switch 需要越狱你的主机。
  3. 对于 xbox 需要你拥有开发者账号,手动侧载安装包。
  4. 原则上 wiliwili 只支持最新系统版本运行,非最新系统遇到软件bug请不要反馈。

SteamDeck 自动熄屏怎么办

安装插件:https://github.com/xfangfang/DeckyInhibitScreenSaver

switch 相册打开 wiliwili 大气层报错 2168-****

建议使用FAT32内存卡重做系统,或重新拷贝 wiliwili.nro 。
2168 报错应该是cpu执行到了错误的指令导致的,说明当前执行的文件并不是可用的可执行文件。
一般来说exFAT内存卡可能会遇到这个问题,因为switch系统本身对exFAT支持不佳,所以会存在随机的文件损坏。
另,有用户反馈使用安卓手机解压复制到自己的内存卡中时出现过类似的问题,遇到相似的问题的朋友,可以使用PC重传试一试。

switch 启动黑屏

删除内存卡目录 config/wiliwili 重新进入。
据我猜测,或许和exFat格式的系统固件有关,可以尝试重刷不带exFAT驱动的固件(这需要你的内存卡格式化为FAT32格式)

switch 打开输入法报错

一般来说是系统问题,建议重做系统。
有用户反馈:安装系统固件时选择只有 FAT32 驱动的安装方式后问题消失。(这需要你的内存卡格式化为FAT32格式)

switch 播放器彩屏报错

可在设置中关闭视频缓存或关闭硬解来缓解。

switch 开启 wiliwili 后,进入相册死机

可能是 sysdvr 插件造成的问题,详细讨论: #254

switch 用什么内存卡有区别吗

推荐 FAT32 内存卡,因为更稳定。
exFAT 也可以正常使用,但是因为系统原因,可能会出现随机的小问题,严重者会导致卡内文件随机消失,所以为了自己的存档安全,还是赶紧换到FAT32。

switch 支持什么系统版本

作者只会针对最新的系统固件 + 最新的大气层来测试。
其他组合(系统版本11之后)大概率也可以正常运行,但是如果出现问题请不要反馈,优先选择更新到最新的大气层和系统。

如何直接从游戏主机更新软件

switch

推荐下载 HB APP Store 自制应用商店: appstore/wiliwili

注意:应用商店会自动下载应用到 switch/wiliwili/wiliwili.nro ,但是如果你的设备中已经存在 switch/wiliwili.nro 那么wiliwili的桌面图标会优先打开后者。

ps4

推荐下载 Homebrew Store 自制应用商店:pkg-zone/wiliwili

psv

按顺序推荐下载 VitaDB DownloaderEasyVPKBetter Homebrew BrowserVita HomeBrew Browser 等自制应用商店:vitadb/wiliwili

ps4 联网如何保证主机安全

联网主要防范系统升级,当然即使出现升级提示只要正确取消,也不会有任何影响。要做到安全联网,首先需要屏蔽系统更新,这一步通过在浏览器中选择来完成。 然后是设置 DNS,有两个操作方式,任选其一即可:

  1. 配置专门用于屏蔽系统联网请求的 DNS,参考:Al-Azif/ps4-exploit-host
  2. 【推荐】在浏览器缓存越狱页面之后,设置一个不存在的 DNS,这会阻止几乎所有系统联网请求(不影响串流和 wiliwili)。

我的switch会因为使用wiliwili而被ban吗

首先每台破解设备都有被ban的风险,使用这个软件需要自负风险。

  1. 大气层支持配置屏蔽序列号和内置host屏蔽任天堂服务器,如果你所使用的系统正确配置了这两项内容,那么被ban的可能很小
  2. 自制桌面图标会虚拟一个游戏id,可能会被当成盗版游戏看待,如果没有配置上一条,同时安装了wiliwili的桌面图标,可能会被ban
  3. 如果没有安装桌面图标,那么因为wiliwili而被ban的风险几乎为0。(这也是大家常说的ban盗版不ban破解)
  4. 盗版游戏(桌面图标) + 没有正确配置大气层 + 联网 = 100%被ban

我的switch被ban了,可以使用wiliwili吗?

可以,ban机不能访问任天堂的网络服务,但还可以正常使用互联网。

打开应用显示 Network Error

  • 检查系统时间,错误的系统时间(包括日期)会导致应用无法正常联网
  • swtich 用户需要检查 DNS 和 IP 设置,保持默认设置,不要使用90 DNS等专为屏蔽设计的DNS服务器
  • 关闭 TLS 验证选项。关闭验证后,即使系统时间错误也不会影响网络访问。不过你的网络请求可能因此遭受中间人攻击。

无法播放视频

  • 检查自己的DNS,有些DNS服务器无法解析B站视频链接
  • 海外用户可能存在部分问题(比如单栈ipv6导致的部分功能不可用),因为作者测试不到各种情况,所以推荐到 issues 详细反馈

API错误

有可能是网络不好导致的,也可能是B站API变更导致的,可以到 issues 详细反馈

无法点赞-投币-收藏

使用最新版本扫码重新登录客户端。
0.6.0 及之前的版本采用的登录方式在点赞时会被判定为没有权限,新版本使用了新的登录方式(新的方式可以在手机中查看到登录设备)
1.2.0 及之前的版本没有保留 cookie 中的 buvid3,在 23/10 后,不带buvid3请求会判定为没有权限。

无法向 wiliwili 内置的 DLNA 投屏接受端投屏

DLNA投屏能否正常使用主要和网络环境相关,在普通局域网内经测试绝大部分国内软件都能正常播放使用,如果您用的客户端无法正确搜索到 wiliwili,欢迎反馈。
额外的,如果你正在使用 盗版视频app 向 wiliwili 投屏,可能出现能投但是不能播,对于这种情况 wiliwili 不给予处理。
如果在 PS4 上使用 wiliwili,可能会遇到部分客户端 (迅雷、wiliwili 本身的DLNA投射)无法搜索到 PS4 的情况,这是由于这些客户端的 DLNA 协议实现不完全导致的。详情

Linux 下通过 Flatpak 安装,无法从应用内打开网页或本地目录

wiliwili 使用 xdg-open 来打开外部路径(网页或配置目录),可能存在打开错误的应用或者无响应的情况,这里以 KDE 下,修复打开目录为例:

  1. 先运行:gio mime inode/directory,这时会返回默认设置的用于打开目录的应用,一般出现问题时会返回一个错误的应用。

  2. 设置自定义的配置,这里使用 dolphin (KDE下的文件管理)来打开目录。

sudo su
echo -e "[Default Applications]\ninode/directory=org.kde.dolphin.desktop" >> /etc/xdg/mimeapps.list
  1. 再次运行 gio mime inode/directory 能看到默认应用已经设置正确。
(deck@steamdeck ~)$ gio mime inode/directory
Default application for “inode/directory”: org.kde.dolphin.desktop

如何反馈问题

推荐到 issues 详细反馈

Clone this wiki locally