From 0aa68c9ae8426a02afac194ca6e40748c9bb5474 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 24 Dec 2025 18:56:39 -0800 Subject: [PATCH] Improve HLS playlist live check logic to correctly identify master playlists and live streams --- packages/web/src/routes/api/check-hls.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/web/src/routes/api/check-hls.ts b/packages/web/src/routes/api/check-hls.ts index aefeb504..a14e6c97 100644 --- a/packages/web/src/routes/api/check-hls.ts +++ b/packages/web/src/routes/api/check-hls.ts @@ -15,7 +15,13 @@ function isHlsPlaylistLive(manifest: string): boolean { const isVod = upper.includes("#EXT-X-PLAYLIST-TYPE:VOD") const hasSegments = upper.includes("#EXTINF") || upper.includes("#EXT-X-PART") const isValidManifest = upper.includes("#EXTM3U") - return isValidManifest && !hasEndlist && !isVod && hasSegments + // Master playlists have #EXT-X-STREAM-INF but no segments - they're still "live" + const isMasterPlaylist = upper.includes("#EXT-X-STREAM-INF") + + // A manifest is live if: + // 1. It's a valid HLS manifest + // 2. AND (it's a master playlist OR it has segments without ENDLIST/VOD markers) + return isValidManifest && (isMasterPlaylist || (!hasEndlist && !isVod && hasSegments)) } export const Route = createFileRoute("/api/check-hls")({