[オープンソース] Tauri クロスプラットフォームの B站クライアント BBHouse、Vite + Vue 3 + Rust 製
中文からAI翻訳 · 原文を見る
この記事はインターネットアーカイブのスナップショットから復元しました。一部の画像は失われている可能性があります。
状況
- UP主を2000人以上フォローしており、動態と動画を素早く効率的に見終えることができません
- B站のWeb版はリソースを消費しすぎて、動画タブを20〜30個開くと新しいEdgeがそのままクラッシュします
- 最近ランダムに現れるPCDNに、大会員の私はとても苛立っています
- CMD経由でBBDownを使うのはやや面倒です
目標
- 購読した動態をカテゴリ別に閲覧できることです
- Native Clientで、できればクロスプラットフォームであることです
- PCDNを置き換えることです
- BBDownのコマンドをラップすることです
行動
- .NETの経験が少しあり(前職の主要な技術スタックは
ASP.NET Core)、以前にSwiftUIやAndroid ComposeのようなMVVMフレームワークも実践したことがあったので、いくつかの有名なサードパーティ製B站クライアント(BiliLite、哔哩)のソースコードを読んでみました。しかし、すぐにXAMLの冗長な構文に心が折れました。特にRiderのXAMLサポートもあまり充実しておらず、かなり参りました。 - ゼロからC++とQTを1週間学んでみましたが、進捗は非常に芳しくなく、一時的に諦めました。
- 以前使ったAndroid ComposeにDesktop版のcompose-jbがあることを思い出し、1週間試行錯誤しました。いくつか成果はありましたが、ツールチェーンが原始的すぎて、多くのパッケージはdev-dailyでないと動作せず、バグも比較的多く、Swingをベースにラップした一部のコンポーネントの出来もかなり悪かったため、諦めました。
- compose-jbのチュートリアルを見ているとき、コメント欄でTauriを知りました。紹介を読むとElectronの代替を目指しているとのことでした(最初からNativeを追求していたため、Electronは即座に除外していました)。詳しく見ると、バックエンドでnodeをRustに置き換えて、OSとやり取りするbridgeにしているようです。Rustの名前はここ数年よく耳にしており、高性能というイメージが付きまとうため、試してみることにしました。
- Tauriを学ぶ中でVue3とViteを知り、実際に触れてその速度に感服しました。Vue 3を学ぶという副次的な目標もあって、開発プラットフォームを決めました。
結果
- 目標はすべて実現しました。
- Github Actionsを利用して、複数プラットフォーム向けのReleaseを自動構築しています。
- TauriのShell部分には中国語サポートが欠けていましたが、開発版ではすでに更新されており、上流の更新を待っています。
Readme
TauriクロスプラットフォームのB站クライアント プレーヤー
クライアントと言いつつ、実際には再生と動態関連の機能しか実装していません…ほかの機能はほとんど使わないからです。個人的に推薦フィードには抗えず、スマホ版やWebのホームページもこれまで見ていません。
まず、いくつかの有名なサードパーティ製B站クライアント(BiliLite、哔哩)のソースコードを読んでみましたが、XAMLのあの構文はあまりに辛く、しかもクロスプラットフォームではありませんでした。個人的には半分弱の時間をMacで過ごしています。
紆余曲折を経てTauriを知りました。
Tauri + Vite + Vue 3で構築しており、Vue 3を学ぶための練習プロジェクトでもあります
- コアの再生機能と弾幕サポートはDPlayer.jsによるものです
- APIはGithubの公開リポジトリbilibili-API-collectによるものです
- Rustでローカルプロキシを起動してストリームを取得します
機能
- 極めてシンプルで、動画の動態と再生機能のみです。おすすめフィードはなく、B博もありません
- 動画の動態を、分区 | タイトル | UP主によってフィルタリングできます
- シングルページプレーヤーで、プレイリストに対応しています
- ランダムに現れるPCDNを置き換えました
- BBDownを簡単にラップしています
- 性能は優秀で、リソースの占有も非常に小さいです。実測ではWIN 11での起動速度はネイティブUWPと同等です
- クロスプラットフォームで、macOS、Ubuntu、WinのインストールパッケージをすでにReleaseしています
- ライト/ダークテーマに対応しています
問題
- dplayerは混流に対応していないため、そのイベント機構とネイティブaudioを組み合わせて簡単に混流を実現しています。音声と映像が同期しない場合があり(動画を切り替えるときによく起こります)、一時停止してから再再生すると緩和されます
- コメント欄と弾幕の屏蔽(ブロック)には高度な機能がなく、簡単な閲覧のみを満たしています
TODO
- Rust + WASMで再生時の混流を解決し、DPlayerの弾幕エンジンを改善します
- コメント欄を充実させ、特色ある機能–成分チェック、コメント内容の重複チェックを追加します
- B站の字幕に対応します
- マルチウィンドウ再生モード
- カスタムプラグインのサポート
- その他の機能モジュールを実装する可能性があります
リポジトリのURL
Github: bbhouse-tauri