fix(stream): fix black screen on remote/Tailscale streaming
Three root-cause fixes for VLC showing a black screen when opening a
stream from a different network or via Tailscale:
1. PrioritizeTail: when VLC opens an MKV/MP4 stream it immediately seeks
to the end of the file to read the container index (seekhead/moov
atom). For active torrents those end-pieces aren't downloaded yet, so
the reader blocks indefinitely. PrioritizeTail() opens a background
reader positioned at the last 5 MB, keeping those pieces at high
priority until ctx is cancelled or they finish downloading.
2. /health endpoint: GET /health returns a lightweight JSON response
{"status":"ok","streaming":bool,...} so connectivity can be tested
with a simple curl from any device before involving VLC.
3. Per-request logging: every incoming /stream request now logs the
client IP and Range header, making it trivial to confirm whether
remote/Tailscale clients are reaching the server at all.
This commit is contained in:
parent
7eaf357680
commit
f1b4f2e327
5 changed files with 185 additions and 0 deletions
|
|
@ -148,6 +148,13 @@ func handleStreamTask(parentCtx context.Context, at agent.Task, reporter *engine
|
|||
task.StreamURL = srv.URLsJSON()
|
||||
log.Printf("[%s] stream ready: %s (url: %s)", at.ID[:8], eng.FileName(), srv.URL())
|
||||
|
||||
// Pre-descargar los últimos 5 MB del archivo para que el moov atom (MP4)
|
||||
// o el seekhead (MKV) estén disponibles cuando VLC los pida al abrir el
|
||||
// stream. Sin esto, VLC busca el final del archivo, el lector bloquea
|
||||
// esperando piezas no descargadas, y el resultado es pantalla negra en
|
||||
// redes remotas donde la latencia amplifica el efecto.
|
||||
eng.PrioritizeTail(ctx, 5*1024*1024)
|
||||
|
||||
// 5. Start watch progress reporter
|
||||
if agentClient != nil {
|
||||
watchReporter := engine.NewWatchReporter(agentClient, srv, at.ID)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue