This project is an attempt at developing a sound library ecosystem providing:
- a backend for media library management
- front applications for accessing the media library and media playback
- a player with running locally and in the cloud:
- a full MPD server implementation, therefore compatible with existing MPD clients
- an HTTP API allowing music playback controls
The player is using the gstreamer framework as the underlying media pipeline.
This is also an experiment on the KotlinMultiplatform and JetpackCompose dev env.
The lib soli is the central piece of this project. Its is loaded and used by all the different actors of the ecosystem and provide them with the code that they all have to share (data models, repositories, ...)
[] add a multiplatform logger [] add a Player interface that clients should implement [] get podcast duration [] combine the fetch of radios and podcasts in MediaRepository
[] call to /api/history [] react to system event for pausing / restarting playback [] implement History screen [] add some loading state when fetching
[] load libsoli and fetch radios
A working java env. is needed.
Build the application using shadowJar task to package a fat JAR
./gradlew :backend:shadowJar
java -jar backend/build/libs/backend-all.jar
Build the application using installShadowDist task to package an executable
./gradlew :backend:installShadowDist
./backend/build/install/backend-shadow/bin/backend
[] endpoint serving history media playback [] player api - register current player and current playback info [] player api - control current playback from any client [] cloud player?
The gstreamer library needs to be installed locally if you want to run the local player. A working java env. is needed as well.
Build the application using the installDist task
./gradlew :desktop:installDist
./desktop/build/install/desktop/bin/desktop
[] load podcast episodes [] properly expose playback event on the system
what is gstreamer
gstreamer command line interface
mpd protocol
thoughts on what to do
- implement base wrapper on top of gstreamer to load, start/stop a playlist
- implement a simple http server to load, start/stop a playlist
- implement a simple MPD server exposing current playback status