Merge feat/hls-copy: HLS-copy reemplaza el remux progresivo frágil

Fuentes remux-elegibles servidas como HLS fMP4 con -c:v copy (vídeo jamás
re-encodeado, CPU ~cero, apto NAS sin GPU). Playlist propiedad de ffmpeg
(EVENT→ENDLIST + EXT-X-START=0), audio copy solo AAC ≤2ch (WebKit rechaza
AAC multicanal — causa raíz del fallo iPhone), StartSec ignorado (offset
EVENT rompe el parser iOS). Suite smoke 7/7 con ffmpeg real. Validado:
Chromium/hls.js + Safari macOS + iPhone (Black Adam, Frankenstein DV,
Immortals HDR10, Hoppers). Gate web supportsHlsCopy.
This commit is contained in:
Deivid Soto 2026-06-11 00:10:53 +02:00
commit da6ee9fff5
5 changed files with 550 additions and 12 deletions

View file

@ -707,6 +707,14 @@ func (ss *StreamServer) HLSURLsJSON(sessionID string) string {
func (ss *StreamServer) hlsHandler(w http.ResponseWriter, r *http.Request) {
ss.lastActivity.Store(time.Now().UnixNano())
// Debug access log (UNARR_HLS_DEBUG=1): which client fetches which HLS
// resource. Off by default — a player polls the playlist every few
// seconds and segments stream constantly, far too chatty for normal logs.
if os.Getenv("UNARR_HLS_DEBUG") == "1" {
host, _, _ := net.SplitHostPort(r.RemoteAddr)
log.Printf("[hls-debug] %s %s from %s UA=%q", r.Method, r.URL.Path, host, r.Header.Get("User-Agent"))
}
if ss.writeCORSHeaders(w, r, "Content-Length, Content-Range, Accept-Ranges") {
return
}