/bbhouse-tauri

A Bilibili Cross-Platform Desktop Client Powered By Tauri

Primary LanguageTypeScriptGNU General Public License v3.0GPL-3.0

BBHouse

GitHub release (latest by date) GitHub Release Date GitHub All Releases GitHub stars GitHub forks

取自常见的『我在B站买了房』的评论

Release Builder


BBHouse 是一款 哔哩哔哩 的第三方应用,基于 Tauri 跨平台构建,支持 Windows macOS Linux.

核心功能

  • 一个支持对视频(直播)动态分区展示的主页, 去除了B博和推荐流
  • 一个支持无限添加的 (临时的) 稍后播放列表与配套的播放器

请注意, 本项目无法无能力为非大会员提供大会员的服务.

feature

  • 极简, 目前只有视频动态和播放功能 没有推荐流 没有B博
  • 支持视频动态过滤 by 分区 | 标题 | UP主
  • 独立窗口的播放器 支持播放列表
  • 替换了随机出现的PCDN
  • BBDown 的进行了简单封装

此功能需要先自行安装BBDown, 并安装ffmpegaria2c.

  • 性能优秀, 实测 Win 11 下启动速度与原生UWP相当, Mac 下也是
  • 跨平台, 已经Release了 macOS | Ubuntu | Win 的安装包
  • 明/暗主题支持

解决的痛点

  1. 关注太多UP主(2000+), 无法快速有效的阅览完动态和视频
  2. B站网页太占资源, 开20-30个视频Tab会导致新Edge直接崩溃
  3. 近期随机出现的 PCDN 影响大会员体验
  4. 通过 CMD 使用 BBDown 稍显麻烦

存在的问题

功能

  • DPlayer, 或者说原生<Video>组件不支持混流, 借助事件机制配合 APlayer (基于原生<Audio>组件)简单实现混流, 可能会发生音画不同步的情况 (多出现在切换视频时), 暂停再播放可缓解
  • 评论区和弹幕屏蔽缺少高级功能, 只能满足简单浏览

项目

  • 项目中把 Utils 全部写成了 Hooks 的命名形式, 属于个人放飞自我的做法, 觉得这样更美观
  • 由于目前涉及的功能很少, 项目中没有对请求和页面做模块化封装

todo

  • Rust + WASM 探索播放混流的解决可能
  • 完善评论区, 增加特色功能--如『枝网查重』等
  • 完善播放器与弹幕的高级功能, 改进DPlayer的弹幕引擎
  • 深度链接, 支持从网页跳转
  • 多窗口播放模式
  • 自定义插件支持
  • 其他的功能模块

技术细节

  • 基于Vue 3 + Vite + TypeScript 构建用户界面
  • 核心播放功能与弹幕引擎来自 DPlayer.js
  • API来自公开仓库 bilibili-API-collect
  • Rust 建立本地反向代理进行取流
  • Tauri 沟通用户界面与Rust模块并构建完整二进制文件

跨平台

Windows

  • win 11 21H2 所有功能正常, 可开启HEVC
  • win 10 1809 所有功能正常, 可开启HEVC

请注意, 21H1 之前的Win10并没有内置WebView2, 安装时会自动下载, 安装时间会比较长

开启HEVC需要安装 来自设备制造商的HEVC扩展

macOS

  • macOS 12.6 界面功能正常, 但由于WebKit下<Video>组件的未知问题, 使用Dash播放时缓冲策略异常, 需要非常久才能播放
  • 已强制切换为FLV模式, 此模式对网络质量要求较高
  • 用户可通过 "强制DASH播放" 进行Dash播放可行性测试

Ubuntu

  • Ubuntu 20.04 界面部分组件异常, 播放异常, 且Dash与FLV均无法播放, 推测原因是WebKitGtk版本过低, 需要4.0以上

作者的 Ubuntu 20.04 上tauri相关工具链安装失败, 无法调试, 计划近期升级至22.04测试

  • 用户可通过 "强制DASH播放" 进行测试

运行截图:

Windows

macOS

致谢

  • Tauri Build smaller, faster, and more secure desktop applications with a web frontend.
  • Vue The progressive framework for building user interfaces.
  • Vite Next generation frontend tooling. It's fast!
  • Element-Plus 🎉 A Vue.js 3 UI Library made by Element team
  • DPlayer.js 🍭 Wow, such a lovely HTML5 danmaku video player
  • APlayer.js 🍭 Wow, such a beautiful HTML5 music player
  • bilibili-API-collect 哔哩哔哩-API收集整理【不断更新中....】
  • BBDown Bilibili Downloader. 一款命令行式哔哩哔哩下载器.
  • flv.js HTML5 FLV Player
  • hls.js HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.
  • crypto-js JavaScript library of crypto standards.
  • qrcode.vue A Vue.js component to generate qrcode.
  • vue3-contextmenu vue3 contextmenu. vue3 右键菜单
  • tokio A runtime for writing reliable asynchronous applications with Rust. Provides I/O, networking, scheduling, timers, ...
  • hyper An HTTP library for Rust
  • hyper-rustls Integration between hyper HTTP library and rustls TLS stack
  • anyhow Flexible concrete Error type built on std::error::Error