From e604b19d9ddb93e786f4875ff9619a6419229228 Mon Sep 17 00:00:00 2001 From: "user.email" Date: Sat, 24 Oct 2026 10:03:29 -0700 Subject: [PATCH] hlsts: prefix playlist segment URLs with ./ so colon-named files resolve PathEscape leaves ':' alone, so a segment named movie:1.ts parses as scheme 'movie' and players never resolve it against the playlist URL. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- weed/format/hlsts/hlsts.go | 2 +- weed/format/hlsts/hlsts_test.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/weed/format/hlsts/hlsts.go b/weed/format/hlsts/hlsts.go index 5c4ccfb4bf..b1548e046f 100644 --- a/weed/format/hlsts/hlsts.go +++ b/weed/format/hlsts/hlsts.go @@ -281,7 +281,7 @@ func renderPlaylist(name string, info *playlistInfo, jwt string) []byte { } for i, durationMs := range info.DurationsMs { fmt.Fprintf(&out, "#EXTINF:%.3f,\n", float64(durationMs)/1000) - fmt.Fprintf(&out, "%s?%s=%s&seq=%d%s\n", escapedName, format.ViewParam, FormatName, int64(i)+info.MediaSequence, credential) + fmt.Fprintf(&out, "./%s?%s=%s&seq=%d%s\n", escapedName, format.ViewParam, FormatName, int64(i)+info.MediaSequence, credential) } out.WriteString("#EXT-X-ENDLIST\n") return []byte(out.String()) diff --git a/weed/format/hlsts/hlsts_test.go b/weed/format/hlsts/hlsts_test.go index 129af022e8..714c7f24d7 100644 --- a/weed/format/hlsts/hlsts_test.go +++ b/weed/format/hlsts/hlsts_test.go @@ -121,11 +121,11 @@ func TestViewPlaylist(t *testing.T) { #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:6.000, -movie.ts?format.view=hls-ts&seq=0 +./movie.ts?format.view=hls-ts&seq=0 #EXTINF:6.000, -movie.ts?format.view=hls-ts&seq=1 +./movie.ts?format.view=hls-ts&seq=1 #EXTINF:2.500, -movie.ts?format.view=hls-ts&seq=2 +./movie.ts?format.view=hls-ts&seq=2 #EXT-X-ENDLIST ` if string(plan.Body) != want {