Campus Audiobook Player
Player personal de audiobook-uri — import din dispozitiv, LibriVox, FTP/SMB, cu Chromecast, AirPlay și accesibilitate nativă.

Context
Campus Audiobook Player (fost Campus Book Player) este un player personal de audiobook-uri cross-platform (Android + iOS) pentru cărțile pe care le ai deja — din fișiere locale, biblioteca media, catalogul LibriVox (public domain), servere FTP sau partaje SMB/CIFS.
Construit cu Expo SDK 57, React 19.2, React Native 0.86 și TypeScript 6 strict (New Architecture), pune accesibilitatea pe primul loc: fiecare ecran a fost proiectat mai întâi pentru VoiceOver și TalkBack, apoi pentru interfața vizuală. Aplicația nu cere cont, nu colectează date și nu vinde conținut — gestionează doar fișierele pe care alegi să le imporți.
Scheme: campus-book-player · Bundle ro.campusnet.bookplayer · build 2026-08-30 · v1.2.0 (Android versionCode 13, iOS build 1).
Caracteristici principale
- Import de oriunde — fișiere individuale sau foldere întregi via Files, scanare bibliotecă media audio (permisiuni granulare audio-only), browsere dedicate FTP și SMB (NTLMv2) cu previzualizare audio 4 min înainte de descărcare, catalog LibriVox cu descărcări directe
- Player în background —
react-native-track-player 4cu queue de capitole, redare pe ecran blocat, Bluetooth, căști, controale OS, auto-rewind configurabil (0/5/10/15/30s) la resume - Capitole inteligente — un fișier per capitol sau metadate embedded (.m4b
chpl, ID3CHAPviamusic-metadata); detecție naturală a ordinii + strip junk headers MPEG cu scanare strictă - Control fin — viteză 0.5×–3× memorată per carte, sărituri 10/15/30/60s, jump pe minute (10/15/30/45/60), scrubber cu live preview (PanResponder + Animated, fără re-render la drag)
- Sleep timer persistent — preseturi 5–90 min, „sfârșit capitol” / „sfârșit carte”, stare supraviețuiește restartului și background-ului (PlayerContext)
- Progres whole-book —
(completedMs + positionMs) / totalDurationMspeste toate fișierele, persistență la fiecare 5–10s + pause/seek/schimbare capitol - Marcaje (bookmarks) — orice moment exact, cu notă opțională, toleranță 5s la dedup
- Coperte la alegere — pipeline embedded
APIC→ iTunes → Audible → Google Books → Open Library → procedural SVG; galerie candidați cuCoverPickerSheet, fallback imagine procedurală sau artwork base64 embedded - Chromecast + AirPlay — Google Cast SDK cu handoff complet + server HTTP audio local pe
react-native-tcp-socket(loopbackhttp://în loc defile://), control AirPlay nativ - Gestionar descărcări — coadă persistentă manifest JSON, pauză/reluare byte-level, viteză EMA-smoothed, keep-alive + gard celular
- Bibliotecă & stocare — Storage Manager (spațiu pe disc, fișiere orfane, ștergere cu fișiere), reimport orphaned, recompute durate VBR corupte, strategie copy vs reference (economie spațiu), share-intent Android + folder-picker iOS + document types
public.audio/m4b/ogg/flac/... - Teme & i18n — system/light/dark + 4 accente (amber, terracotta, forest, indigo),
LanguageProvider(system/en/ro), landscape support - Servere & backup — profiluri FTP/SMB în
expo-secure-store(Keychain/Keystore), export/import JSON via share sheet, discovery rețea SMB + enumerare share-uri
Repere tehnice
- Expo SDK 57 — React Native 0.86, React 19.2, TypeScript 6, New Architecture,
expo-sqliteWAL +foreign_keys=ON,expo-file-system+expo-document-picker,expo-media-librarygranularaudio - Track-player import dinamic —
await import('react-native-track-player/lib/src/trackPlayer')înPlayerContext.ensurePlayerReady()pentru a evita crash New Architecture;src/services/rntp.tsreexportă doarState/Event/AppKilledPlaybackBehavior - Server HTTP audio local —
audioServer.tspereact-native-tcp-socketpentru Cast, stripaudioOffset(junk headers detectat la import) la streaming - SMB pur JS —
v9u-smb2adaptat via shim-uri Metro (net→tcp-socket,crypto-browserify,js-md4/js-md5), discovery + shares + profil transfer - SQLite performant — tabele
books/chapters/cover_candidates/bookmarks, acces sincronlibraryStore.ts, migrațiiaudio_offsetviaPRAGMA table_info, resync la foreground race, reparare stale paths iOS (container UUID) - Coperte din 4 API-uri — iTunes Search, Audible, Google Books (cheie opțională), Open Library; prioritate configurabilă, cache candidați, auto-pick toggle
- Navigație —
RootNavigator(NativeStack) +Tabs(Library / Player / Settings), 20 ecrane (Library, BookDetails, Player, Bookmarks, Import, ScanDevice, LibrivoxBrowse/Book, Downloads, Ftp/Smb profiles/browse/shares/discover, StorageManager, Settings, About) - Shims & polyfills —
buffer,crypto-browserify,stream-browserify,os-browserify,react-native-get-random-values,react-native-reanimatedplugin last
Evoluții recente (v1.1 → v1.2.0)
Față de v1.0.5 (Expo SDK 56) documentat inițial:
- Rebrand
Campus Book Player→Campus Audiobook Player+ bump Expo 56→57 - Multilanguage — traducere completă RO/EN cu pluralizare Hermes-safe
- Bookmarking + rename carte cu sugestii din metadate + export carte
- Previzualizare 4 min pe FTP/SMB înainte de import, multiple-line file browsers, toast test conexiune
- Auto-discovery SMB, share auto-enumerare, warm-up conexiuni, hardening browse/resume/stall
- Calcul durate VBR corectat pentru MP3 cu head trunchiat și MP4 trunchiate
- ** profiluri server export/import** JSON, logs opt-in cu
LogViewerSheetși export share - Sleep timer mutat în PlayerContext — supraviețuiește uciderii procesului
- JumpToTimeSheet + quick-jump pe minute, scrubber live preview, PlayerExtraControls modularizat
- Accesibilitate rafinată — slider-e anunțate, tab icons ascunse de screen reader, timp vorbit, empty-state CTA-uri
- Stabilitate playback — retry setup pe foreground race, resume no-op pe cărți diferite, chapter overshoot fix, warm-resume overlay
- Build stamping (
withBuildDate), EAS productionautoIncrement, intent-filteraudio/*+VIEW BROWSABLE
Accesibilitate & calitate
Fiecare interacțiune are accessibilityRole/accessibilityLabel/accessibilityHint, haptics pe acțiuni cheie, teme fără culori hardcodate (useTheme()), StatusBar/SystemUI sincronizate cu tema. Testat TalkBack/VoiceOver pe ecrane reale, iPad inclus (supportsTablet: true, UISupportedInterfaceOrientations toate).
Politica de confidențialitate dedicată la /policies/audiobook-player.html — fără analytics/ads, credențiale doar în secure store, metadata doar ca query public către iTunes/Audible/Google/Open Library și LibriVox.
Aplicații
AndroidCampus Audiobook Player — AndroidPlayer personal de audiobook-uri pentru telefonul și tableta ta Android — import flexibil, capitole, sleep timer și Cast.
iOSCampus Audiobook Player — iOSPlayer personal de audiobook-uri pentru iPhone și iPad — import flexibil, capitole, sleep timer și AirPlay.

