Milestone 4: yt-dlp provider and weighted source scheduler
Add a second playback source and a weighted scheduler mixing it with Navidrome: - Scheduler picks a provider by SOURCE_WEIGHTS, falling through to the others when one has nothing ready, so no source can stall playback. - YtdlpProvider reads a hand-maintained config/urls.txt; container URLs (playlist/album/label/artist) are flat-extracted and one entry is drawn at random, honouring the anti-repeat window. Adds Track.source_url. - YtdlpFetcher downloads bestaudio via the yt-dlp library, reusing the atomic hidden-temp-then-rename pattern; Liquidsoap decodes the result. - Queue now dispatches to a fetcher registry keyed by backend. - Sweep orphaned download temp files on daemon startup (leftovers from a killed container otherwise pile up and trip the stream fallback). Verified end-to-end: yt-dlp opus decoded and served as 192 kbps MP3, and the 3:1 default mix observed in play history. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
8c27498632
commit
d1db6a11d8
13 changed files with 418 additions and 46 deletions
14
config/urls.txt.example
Normal file
14
config/urls.txt.example
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# radieo — liste de sources yt-dlp. Copier en `config/urls.txt`.
|
||||
# Une URL par ligne. Les lignes vides et celles commençant par '#' sont ignorées.
|
||||
#
|
||||
# Chaque URL peut être :
|
||||
# - un morceau précis (téléchargé tel quel)
|
||||
# - une playlist / album / label / page d'artiste
|
||||
# -> radieo y pioche un morceau au hasard à chaque tour,
|
||||
# en évitant ceux joués récemment.
|
||||
#
|
||||
# Exemples (à remplacer par les tiens) :
|
||||
# https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
||||
# https://soundcloud.com/artiste/un-morceau
|
||||
# https://artiste.bandcamp.com/album/un-album
|
||||
# https://www.youtube.com/playlist?list=PLxxxxxxxx
|
||||
Loading…
Add table
Add a link
Reference in a new issue