# HLS-Downloader — Umsetzungsplan (Final) ## Entscheidung **ffmpeg (primär) + requests (Fallback)** - `ffmpeg` für HLS/m3u8 Streams — ffmpeg ist auf dem System verfügbar - `requests.get(stream=True)` für direkte MP4-URLs (wie bisher) - `hls-downloader` Package ist leider nur ein CLI-Tool, nicht als Library importierbar ## Installierte Pakete ```bash pip install pypdl m3u8 ``` ## Architektur ``` POST /api/download │ ▼ ┌─────────────────────┐ │ DownloadManager │ │ (wie bisher, aber │ │ mit HLS-Support) │ └────────┬────────────┘ │ ┌────▼────┐ │ URL-Typ │ └────┬────┘ │ ┌────┼────────────┐ ▼ ▼ ▼ .m3u8 .mp4 Fehler │ │ │ └──▶ requests.get (stream=True) │ └──▶ ffmpeg subprocess -i url -c copy -bsf:a aac_adtstoasc ``` ## Implementiert in app.py ### `_run()` — Dispatcher - URL wird zuerst aufgelöst (resolveurl) - Falls `.m3u8` im URL → `_run_hls()` - Sonst → `_run_direct()` ### `_run_hls()` — ffmpeg ```python cmd = ['ffmpeg', '-y', '-i', url, '-c', 'copy', '-bsf:a', 'aac_adtstoasc', '-progress', 'pipe:1', output_file] ``` - Progress via stdout pipe - Progress: `out_time_ms` → geschätzter % - Output: .ts → .mp4 umbenennen ### `_run_direct()` — requests - Bestehender Code, aus `_run()` extrahiert - Chunk-basiertes Streaming - Progress in % ## Parallelität - Jeder `add()` startet einen daemon Thread - Mehrere Downloads parallel möglich - Keine Queue-Library nötig (Python threading reicht) ## ToDo - [ ] Test mit echter m3u8 URL - [ ] Progress-Anzeige verfeinern (ffmpeg gibt keine Duration bei HLS)