Files
xstreamDownloader/plans/hls_downloader_plan.md
T
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

1.9 KiB

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

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

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)