[Codi obert] BBHouse, client de Bilibili multiplataforma amb Tauri, basat en Vite + Vue 3 + Rust

· 64 visites

Traduït per IA des de 中文 · Veure l'original

Aquest article s'ha recuperat d'instantànies de l'Internet Archive; algunes imatges es poden haver perdut.

endcloud/bbhouse-tauri

Situació

  1. Segueixo massa creadors (2000+), no puc revisar de manera ràpida i eficaç totes les dinàmiques i els vídeos
  2. La versió web de Bilibili consumeix massa recursos; obrir 20-30 pestanyes de vídeo fa que el nou Edge es pengi directament
  3. El PCDN que apareix aleatòriament darrerament irrita força aquest membre premium
  4. Usar BBDown des del CMD resulta una mica incòmode

Objectiu

  1. Suportar la visualització de les dinàmiques subscrites per categories
  2. Client natiu, preferiblement multiplataforma
  3. Substituir el PCDN
  4. Encapsular les ordres de BBDown

Accions

  1. Com que tinc una mica d'experiència amb .NET (la pila tecnològica principal de la feina anterior era ASP.NET Core), i abans també havia practicat amb marcs MVVM com SwiftUI i Android Compose, vaig provar de llegir el codi font d'alguns clients de Bilibili de tercers coneguts (BiliLite, 哔哩), però de seguida em va fer desistir la sintaxi verbosa de XAML; sobretot perquè fins i tot el suport de Rider per a XAML és força incomplet, cosa que em va deixar completament desconcertat.
  2. Vaig provar de començar de zero amb C++ i Qt durant una setmana, però el progrés va ser molt poc satisfactori i ho vaig deixar de banda temporalment.
  3. Me'n vaig recordar que Android Compose, que havia fet servir abans, tenia una versió d'escriptori, compose-jb; hi vaig treballar durant una setmana i vaig obtenir alguns resultats, però la cadena d'eines era massa primitiva, molts paquets només funcionaven sota dev-daily i hi havia força errors; alguns components encapsulats sobre Swing donaven molt mal resultat, així que ho vaig abandonar.
  4. Mentre mirava tutorials de compose-jb, vaig veure Tauri als comentaris; vaig llegir-ne la introducció i el seu objectiu és substituir Electron (com que des del principi buscava una solució nativa, vaig descartar directament Electron). Me'l vaig mirar amb més detall: al backend utilitza Rust en lloc de Node.js com a pont per comunicar-se amb el sistema operatiu. Feia anys que havia sentit a parlar de la fama de Rust, sempre associat a l'alt rendiment, i vaig decidir provar-lo.
  5. Mentre aprenia Tauri vaig conèixer Vue 3 i Vite; després de provar-los, em va impressionar la seva velocitat i, amb l'objectiu addicional d'aprendre Vue 3, vaig decidir la plataforma de desenvolupament.

Resultat

  1. Tots els objectius es van assolir
  2. Amb GitHub Actions, es compilen automàticament les versions de llançament per a diverses plataformes.
  3. A la part de Shell de Tauri li falta suport per al xinès; la versió de desenvolupament ja s'ha actualitzat, només cal esperar l'actualització d'upstream.

Readme

Client reproductor de Bilibili multiplataforma amb Tauri

Tot i que se'n diu client, en realitat només he implementat les funcions relacionades amb la reproducció i les dinàmiques... Com que la resta de funcions bàsicament no les faig servir i personalment no puc resistir-me al flux de recomanacions, tampoc miro mai la pàgina d'inici de la versió mòbil ni de la web.

Primer vaig provar de llegir el codi font d'alguns clients de Bilibili de tercers coneguts (BiliLite, 哔哩); la sintaxi de XAML era massa incòmoda i, a més, no era multiplataforma, ja que personalment passo una bona part del temps fent servir Mac.

Després de diversos intents, vaig conèixer Tauri.
Està construït amb Tauri + Vite + Vue 3, i també es pot considerar un projecte de pràctica personal per aprendre Vue 3

  • La funció principal de reproducció i el suport de danmaku provenen de DPlayer.js
  • L'API prové del repositori públic de GitHub bilibili-API-collect
  • Rust inicia un proxy local per obtenir el flux

Funcionalitats

  • Minimalista: només té dinàmiques de vídeo i reproducció; no hi ha flux de recomanacions ni B博
  • Suporta el filtratge de dinàmiques de vídeo per secció | títol | creador
  • Reproductor d'una sola pàgina amb suport per a llistes de reproducció
  • S'ha substituït el PCDN que apareixia aleatòriament
  • S'ha fet una encapsulació simple de BBDown
  • Rendiment excel·lent i consum molt baix; en proves reals, a WIN 11 la velocitat d'inici és equivalent a la d'una aplicació UWP nativa
  • Multiplataforma: ja s'han publicat paquets d'instal·lació per a macOS, Ubuntu i Win
  • Suport per a temes clar/fosc

Problemes

  • DPlayer no admet la mescla de fluxos; s'ha implementat de manera simple amb el seu mecanisme d'esdeveniments i l'àudio natiu, i pot passar que l'àudio i la imatge no estiguin sincronitzats (sobretot en canviar de vídeo); pausar i tornar a reproduir ho pot mitigar
  • La secció de comentaris i el bloqueig de danmaku no tenen funcions avançades; només permeten una navegació simple

Tasques pendents

  • Rust + WASM per resoldre la mescla de fluxos de reproducció i millorar el motor de danmaku de DPlayer
  • Millorar la secció de comentaris i afegir funcions específiques: comprovació de la composició i detecció de duplicats en el contingut dels comentaris
  • Integrar els subtítols de Bilibili
  • Mode de reproducció en múltiples finestres
  • Suport per a connectors personalitzats
  • És possible que s'implementin altres mòduls funcionals

Adreça del repositori

GitHub: bbhouse-tauri

Comentaris