Fix native HLS segment request headers

This commit is contained in:
Dymas
2026-09-07 20:53:01 +02:00
parent 0c051f4015
commit ebe749398c
5 changed files with 68 additions and 35 deletions
+35 -33
View File
@@ -194,23 +194,21 @@ def ffmpeg_headers(headers):
def request_headers(headers=None, referer=None):
merged = {
"User-Agent": "Mozilla/5.0",
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) "
"Gecko/20100101 Firefox/121.0"
),
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.9",
"Cache-Control": "no-cache",
"Pragma": "no-cache",
"Sec-Fetch-Dest": "video",
"Sec-Fetch-Mode": "no-cors",
"Sec-Fetch-Site": "cross-site",
}
merged.update(headers or {})
if referer and not (merged.get("Referer") or merged.get("referer")):
merged["Referer"] = referer
final_referer = merged.get("Referer") or merged.get("referer")
if final_referer and not (merged.get("Origin") or merged.get("origin")):
try:
parsed = urlparse(final_referer)
if parsed.scheme and parsed.netloc:
merged["Origin"] = f"{parsed.scheme}://{parsed.netloc}"
except Exception:
pass
return merged
@@ -591,30 +589,6 @@ def download_episode(stream, target, episode_number=None, episode_index=None, ep
try:
media_url, playlist = hls_media_playlist(stream, input_url)
segments = parse_hls_segments(media_url, playlist)
if hls_segments_need_native_download(segments):
message = "HLS playlist uses provider segments that need native download; skipping direct ffmpeg."
print(message, flush=True)
emit_progress(
phase="preflight",
message=message,
episode=episode_number,
episode_index=episode_index,
episode_total=episode_total,
percent=0,
)
code = download_hls_segments(
stream,
media_url,
target,
partial,
episode_number=episode_number,
episode_index=episode_index,
episode_total=episode_total,
playlist_text=playlist,
)
if code == 0:
return 0
return code
except Exception as exc:
print(f"Native HLS preflight failed: {exc}", file=sys.stderr)
try:
@@ -633,6 +607,34 @@ def download_episode(stream, target, episode_number=None, episode_index=None, ep
except Exception as segment_exc:
print(f"Segment downloader failed after HLS preflight error: {segment_exc}", file=sys.stderr)
return 1
if hls_segments_need_native_download(segments):
message = "HLS playlist uses provider segments that need native download; skipping direct ffmpeg."
print(message, flush=True)
emit_progress(
phase="preflight",
message=message,
episode=episode_number,
episode_index=episode_index,
episode_total=episode_total,
percent=0,
)
try:
code = download_hls_segments(
stream,
media_url,
target,
partial,
episode_number=episode_number,
episode_index=episode_index,
episode_total=episode_total,
playlist_text=playlist,
)
if code == 0:
return 0
return code
except Exception as segment_exc:
print(f"Segment downloader failed: {segment_exc}", file=sys.stderr)
return 1
attempts = [
[
*ffmpeg_base_command(stream, input_url),