Fix native HLS segment request headers
This commit is contained in:
+26
@@ -4522,6 +4522,13 @@ seg-3.ts
|
||||
|
||||
self.assertEqual(provider_downloader.strip_png_header(payload), b"VIDEO")
|
||||
|
||||
def test_request_headers_keep_referer_without_synthetic_origin(self):
|
||||
headers = provider_downloader.request_headers({"Referer": "https://megaplay.example/"})
|
||||
|
||||
self.assertEqual(headers["Referer"], "https://megaplay.example/")
|
||||
self.assertNotIn("Origin", headers)
|
||||
self.assertEqual(headers["Sec-Fetch-Dest"], "video")
|
||||
|
||||
def test_hls_segments_need_native_download_for_extensionless_provider_urls(self):
|
||||
self.assertTrue(
|
||||
provider_downloader.hls_segments_need_native_download(
|
||||
@@ -4561,6 +4568,25 @@ seg-3.ts
|
||||
download_segments.assert_called_once()
|
||||
run_ffmpeg.assert_not_called()
|
||||
|
||||
def test_native_segment_failure_does_not_retry_same_source_from_preflight(self):
|
||||
playlist = """#EXTM3U
|
||||
#EXTINF:4.0,
|
||||
https://shard-102.snapcdn.top/anime/show/episode/seg-f1-00083.css
|
||||
"""
|
||||
with tempfile.TemporaryDirectory() as temp_root:
|
||||
target = Path(temp_root) / "Episode.mp4"
|
||||
stream = {"url": "https://cdn.example/master.m3u8", "isM3U8": True, "headers": {}}
|
||||
with mock.patch.object(provider_downloader, "resolve_hls_input_url", return_value=stream["url"]), mock.patch.object(
|
||||
provider_downloader, "hls_media_playlist", return_value=(stream["url"], playlist)
|
||||
), mock.patch.object(
|
||||
provider_downloader, "download_hls_segments", side_effect=RuntimeError("segment forbidden")
|
||||
) as download_segments, mock.patch.object(provider_downloader, "run_ffmpeg") as run_ffmpeg:
|
||||
code = provider_downloader.download_episode(stream, target, episode_number=1)
|
||||
|
||||
self.assertEqual(code, 1)
|
||||
download_segments.assert_called_once()
|
||||
run_ffmpeg.assert_not_called()
|
||||
|
||||
def test_fetch_bytes_with_retries_recovers_from_segment_rate_limit(self):
|
||||
error = urllib.error.HTTPError(
|
||||
"https://cdn.example/video/raw-segment",
|
||||
|
||||
Reference in New Issue
Block a user