Fix native HLS segment request headers
This commit is contained in:
+35
-33
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user