Repository navigation
Add self-hostable web player - #1
Merged
Merged
Conversation
unplayer --print finds the stream; web/server.py relays it with ffmpeg as fMP4 HLS (audio re-encoded to plain AAC, 30s start buffer to ride out source stalls) behind an optional password. Docker + Caddy for HTTPS via make deploy, make local for one machine. README covers self-hosting with your own password. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a web player you can self-host with your own password, alongside the existing CLI.
unplayer --printprints the stream URL, referer and user agent instead of playing (tested intest/test.sh).web/server.py: paste a link, get a clean player. ffmpeg relays the stream as fMP4 HLS. Audio is re-encoded to plain AAC, because the browser player rewriting.tsaudio on Chromium came out deep and slowed down. Playback waits for 30s of buffer so source stalls don't reach the viewer. There's a loading indicator and a tap-to-play fallback when autoplay is blocked, plus an optionalPASSWORDgate and a/statspage.make deploy(automatic HTTPS) ormake local(this machine only)..env, public server vs local/Tailscale, updating, changing the password, security notes)..env.exampleis generic.Tested:
make testpasses; streams played in the browser through stalls without the player running dry.🤖 Generated with Claude Code