From 37e57ce5d05fbbd7932101fd3f9b6e73b908c058 Mon Sep 17 00:00:00 2001 From: zachhide <66033020+zachhide@users.noreply.github.com> Date: Wed, 18 Feb 2026 21:36:28 -0500 Subject: [PATCH 1/3] Restore .ts extension in HLS segment URLs Restore .ts extension in HLS segment URLs generated by _rewrite_url(). The extension was originally removed to fix 404s (issue #9) when no matching route existed, but a /hls/{stream_id}/segment.ts route was later added. Without the extension, ffmpeg's HLS demuxer rejects segments with "is not in allowed_segment_extensions". Now that both routes exist, the URL generator produces /segment.ts?url=... again for full player compatibility. --- tests/test_stream_manager.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test_stream_manager.py b/tests/test_stream_manager.py index c1be637..861889b 100644 --- a/tests/test_stream_manager.py +++ b/tests/test_stream_manager.py @@ -86,13 +86,12 @@ def test_rewrite_absolute_urls(self): playlist, proxy_base_url, "http://original.com/") # Verify that the segment URLs are correctly rewritten and encoded - # Note: Changed from 'segment.ts' to 'segment' to match actual API endpoint encoded_segment1 = quote("http://original.com/segment1.ts", safe='') - expected_url1 = f"{proxy_base_url}/segment?url={encoded_segment1}&client_id=stream123" + expected_url1 = f"{proxy_base_url}/segment.ts?url={encoded_segment1}&client_id=stream123" assert expected_url1 in result encoded_segment2 = quote("http://original.com/segment2.ts", safe='') - expected_url2 = f"{proxy_base_url}/segment?url={encoded_segment2}&client_id=stream123" + expected_url2 = f"{proxy_base_url}/segment.ts?url={encoded_segment2}&client_id=stream123" assert expected_url2 in result From dd4e207d590406f8ddde881d236d157968bafd5e Mon Sep 17 00:00:00 2001 From: zachhide <66033020+zachhide@users.noreply.github.com> Date: Wed, 18 Feb 2026 21:45:34 -0500 Subject: [PATCH 2/3] Update test_stream_manager.py --- tests/test_stream_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_stream_manager.py b/tests/test_stream_manager.py index 861889b..a6ca0d6 100644 --- a/tests/test_stream_manager.py +++ b/tests/test_stream_manager.py @@ -85,7 +85,7 @@ def test_rewrite_absolute_urls(self): result = processor.process_playlist( playlist, proxy_base_url, "http://original.com/") - # Verify that the segment URLs are correctly rewritten and encoded + # Verify that the segment URLs are correctly rewritten and encoded, .ts added back encoded_segment1 = quote("http://original.com/segment1.ts", safe='') expected_url1 = f"{proxy_base_url}/segment.ts?url={encoded_segment1}&client_id=stream123" assert expected_url1 in result From ded41debfa1ce34dc473ba99c96d2bd1d070e609 Mon Sep 17 00:00:00 2001 From: zachhide <66033020+zachhide@users.noreply.github.com> Date: Wed, 18 Feb 2026 22:23:49 -0500 Subject: [PATCH 3/3] Update stream_manager.py fixed .TS extension --- src/stream_manager.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/stream_manager.py b/src/stream_manager.py index 53f9c6a..8dc2e0f 100644 --- a/src/stream_manager.py +++ b/src/stream_manager.py @@ -172,8 +172,7 @@ def _rewrite_url(self, original_url: str, base_proxy_url: str) -> str: parent_param = f"&parent={self.parent_stream_id}" if self.parent_stream_id else "" return f"{base_proxy_url}/playlist.m3u8?url={encoded_url}&client_id={self.client_id}{parent_param}" else: - # Fix: Remove .ts extension to match actual API endpoint /hls/{stream_id}/segment - return f"{base_proxy_url}/segment?url={encoded_url}&client_id={self.client_id}" + return f"{base_proxy_url}/segment.ts?url={encoded_url}&client_id={self.client_id}" class StreamManager: