Files
xstreamDownloader/plans/hls_downloader_plan.md
matthiasberner 52e39ca751 xStream Downloader updates
- Streaming-Site Auflösung für vidara.to (m3u8 via API)
- HTML-Erkennung für Streaming-Seiten
- Dateiname beim Speichern ohne Prefix
- Speichern-Button deaktiviert nach Klick
- Farbiger Fortschrittsbalken (grün/gelb/rot)
- Status-Text statt ungenauer Prozentanzeige
- Auto-Refresh Timeout bei View-Wechsel abgebrochen
- HLS Download mit korrekten Headern (Referer, User-Agent)
- Diverse Bugfixes und Verbesserungen
2026-07-07 20:21:10 +02:00

71 lines
1.9 KiB
Markdown

# 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)