Retour au registre
main·9056a44·En cours

Crabcast

Client IPTV multiplateforme avec backend Rust.

App média Flutter avec media_kit/libmpv, Riverpod, Dio, secure storage et Chromecast, adossée à une API Rust Axum avec SeaORM, auth Argon2 et payloads chiffrés AES-GCM.

Dépôt privé
BBC One HDPremier League · Live now
02:00:00
catalog
TypeApplication médiaRôleProduit mobile, API backendPériode2026platforms5playerlibmpvsourcesM3U/Xtream
Stack

Client

  • FlutterCross-platform shell for mobile, desktop and TV.
  • DartUI, routing and platform integration layer.
  • RiverpodPredictable provider, catalog and playback state.

Playback

  • media_kitlibmpv-backed player foundation.
  • SQLiteLocal cache for catalogs, VOD and live metadata.
  • ChromecastCasting target for the TV experience.

Backend

  • RustAPI core for accounts and provider normalization.
  • AxumHTTP routes and auth boundaries.
  • AES-GCMEncrypted provider payloads and sensitive URLs.
01

Pourquoi ce projet

Les apps IPTV sont souvent fragiles : mauvaise gestion des sources, playback moyen, peu de cache et peu d'attention à la sécurité des comptes.

Crabcast est construit comme un client natif avec un backend capable de normaliser les fournisseurs et protéger les données sensibles.

02

Comment ça marche

Flutter porte l'expérience player sur desktop et mobile tandis que Riverpod garde l'état fournisseur, playlist et lecture prévisible.

L'API Rust gère les comptes, les données fournisseur chiffrées et la synchronisation en base.

03

Choix techniques

  1. 01

    media_kit plutôt que les widgets vidéo basiques

    Le support libmpv donne une base de playback plus solide sur plusieurs plateformes.

  2. 02

    Payloads fournisseur chiffrés

    Les credentials et URLs source sont sensibles, donc AES-GCM protège les données à la frontière API.

  3. 03

    Cache local d'abord

    Les gros catalogues VOD et live ont besoin de cache pour garder une navigation rapide et robuste.

04

Ce que j'ai appris

  • L'UX média se joue surtout sur la latence, la reprise d'état et les cas limites.
  • Une abstraction fournisseur propre compte avant d'ajouter encore des features player.