>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Kotlin

Come mpv ha ottenuto un'interfaccia Android moderna con Jetpack Compose

banner

Se hai mai provato a guardare file video pesanti con sottotitoli complessi su Android, probabilmente ti sei imbattuto in mpv-android. Il suo motore è versatile e veloce, gira con la libreria collaudata libmpv sotto il cofano. Ma l'interfaccia del client classico è rimasta spartana per molto tempo, come se fosse bloccata nell'era di Android 7.

Recentemente, un fork chiamato mpvEx (mpvExtended) ha guadagnato popolarità su GitHub. Il suo sviluppatore ha preso la codebase dai progetti mpvKt e mpv-android come base, ha riscritto l'interfaccia usando Jetpack Compose con Material 3 Expressive e ha aggiunto una serie di funzionalità utili per la visione quotidiana.

Perché un altro fork di mpv

Il player originale è ottimo nel suo minimalismo, ma gli utenti mobile spesso mancano di comfort di base. In mpvEx, l'autore si è concentrato su tre cose: preservare le capacità di rendering di libmpv, modernizzare l'interfaccia utente e il supporto adeguato per i server domestici.

L'app non ha annunci, tracker o permessi inutili nel manifest. Il codice è completamente open source sotto licenza Apache 2.0.

Cosa rende interessante il player in pratica

Protocolli di rete out of the box

Trasferire file video sulla rete locale attraverso gestori di file di terze parti è scomodo. mpvEx include il supporto integrato per i protocolli SMB, FTP e WebDAV. Puoi connetterti a un NAS domestico o a un disco del router direttamente nel player e aprire i video senza prima scaricarli nella memoria interna del telefono.

Navigazione fotogramma per fotogramma completa

Per chi analizza i video fotogramma per fotogramma o cerca un momento specifico in una registrazione, c'è un'interfaccia dedicata per la navigazione fotogramma per fotogramma. Premi un pulsante e vai avanti o indietro senza ritardi di buffering.

Gestione flessibile dei media

Oltre alla familiare modalità picture-in-picture (PiP) e alla riproduzione audio in background con lo schermo spento, il player può:

  • Allegare tracce di sottotitoli e file audio esterni
  • Scalare il video con gesti pinch-to-zoom
  • Passare dalla visualizzazione ad albero delle cartelle alla lista piatta
  • Gestire playlist e navigazione dei capitoli

Sotto il cofano

Il progetto è scritto in Kotlin con uso estensivo di Jetpack Compose. L'integrazione con il layer nativo libmpv e le librerie FFmpeg è implementata attraverso JNI.

Per buildare l'app è necessario JDK 17 e Android SDK con build tools versione 34.0.0 o successiva. Il repository ha una pipeline GitHub Actions configurata che builda automaticamente APK per diverse architetture:

  • arm64-v8a per smartphone moderni
  • armeabi-v7a per vecchi chip a 32 bit
  • x86 e x86_64 per emulatori e dispositivi rari basati su Intel
  • universal pacchetto universale con tutte le librerie incluse

Se vuoi buildare l'app dal codice sorgente con la tua firma, il repository descrive la procedura per passare le chiavi attraverso GitHub Secrets:

# Для Linux и macOS кодируем keystore в base64
base64 -i your-keystore.jks | tr -d '\n' > keystore.txt

Su Windows PowerShell, questo usa il metodo .NET integrato:

[Convert]::ToBase64String([IO.File]::ReadAllBytes("your-keystore.jks")) | Out-File -FilePath keystore.txt -NoNewline

Stato attuale e conclusioni

Il progetto è in sviluppo attivo: il repository ha già oltre 2400 stelle, anche se ci sono circa 250 issue aperte nel tracker. Lo sviluppatore avvisa onestamente che potrebbero verificarsi bug in scenari non standard.

Se i player standard come VLC ti sembrano troppo carichi e mpv-android con il suo design datato ti scoraggia, mpvEx sarà un'ottima alternativa. Puoi provare le build pronte dalla pagina delle release su GitHub o attraverso il catalogo IzzyOnDroid. Per gli sviluppatori Android, il repository servirà anche come buon esempio di wrapping di una pesante libreria C/C++ in un'interfaccia Compose moderna.

Progetti correlati