heb-dtc / MusicServer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SoLi project

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.

[LibSoli]

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, ...)

TODOS

[] add a multiplatform logger [] add a Player interface that clients should implement [] get podcast duration [] combine the fetch of radios and podcasts in MediaRepository

[Apps]

TODOS Android

[] call to /api/history [] react to system event for pausing / restarting playback [] implement History screen [] add some loading state when fetching

iOS

TODOS iOS

[] load libsoli and fetch radios

[Backend]

Prerequisite

A working java env. is needed.

Building and Running

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

TODOS

[] endpoint serving history media playback [] player api - register current player and current playback info [] player api - control current playback from any client [] cloud player?

[Desktop]

Prerequisite

The gstreamer library needs to be installed locally if you want to run the local player. A working java env. is needed as well.

Building and Running

Build the application using the installDist task

./gradlew :desktop:installDist
./desktop/build/install/desktop/bin/desktop

TODOS

[] load podcast episodes [] properly expose playback event on the system

Useful links

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

Built With

About


Languages

Language:Kotlin 97.6%Language:Ruby 1.6%Language:Dockerfile 0.5%Language:Swift 0.3%