52e39ca751
- 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
1.9 KiB
1.9 KiB
HLS-Downloader — Umsetzungsplan (Final)
Entscheidung
ffmpeg (primär) + requests (Fallback)
ffmpegfür HLS/m3u8 Streams — ffmpeg ist auf dem System verfügbarrequests.get(stream=True)für direkte MP4-URLs (wie bisher)hls-downloaderPackage 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
.m3u8im 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)