fix: preserve authenticated HLS session redirects

This commit is contained in:
Codex
2026-10-03 16:45:58 +08:00
parent 7962a7e50a
commit a887a76095
3 changed files with 18 additions and 2 deletions
+11
View File
@@ -595,7 +595,18 @@ class Handler(BaseHTTPRequestHandler):
r = conn.getresponse()
if r.status >= 400:
raise Problem('暂时没有可播放画面,请确认设备网络、账号、码流路径和录像时间', 503)
location = None
if 300 <= r.status < 400:
# MediaMTX starts an HLS session with a relative redirect. The
# browser must keep that session query on subsequent playlists.
target = url.urlsplit(url.urljoin(path, r.getheader('Location', '')))
if (port != HLS_PORT or target.scheme or target.netloc
or not re.fullmatch(r'/cam_[a-f0-9]{16}_(main|sub)/[a-zA-Z0-9_.-]+', target.path)):
raise Problem('视频服务返回了无效的播放跳转', 502)
location = '/media/live' + target.path + ('?' + target.query if target.query else '')
self.send_response(r.status)
if location:
self.send_header('Location', location)
for k in ('Content-Type', 'Content-Length', 'Content-Range', 'Accept-Ranges'):
if r.getheader(k):
self.send_header(k, r.getheader(k))