iToverDose/Software· 9 MAI 2026 · 04:05

Naver-Videos in Originalqualität herunterladen: HLS-Streams mit WebAssembly entschlüsseln

Die Technik hinter Naver-Video-Downloads ist komplex: HLS-Streams mit dynamischen Tokens, CORS-Hürden und WebAssembly-Optimierungen machen eine zuverlässige Lösung zur Herausforderung. So funktioniert die Extraktion ohne Qualitätsverlust.

DEV Community4 min0 Kommentare

Naver ist eine der größten Plattformen Südkoreas und beherbergt Millionen von Videos auf Diensten wie Naver TV, Naver Sports und V LIVE. Doch wer versucht, diese Inhalte herunterzuladen, stößt schnell auf technische Hürden: Die Videos werden nicht als einfache MP4-Dateien bereitgestellt, sondern als hochkomplexe HLS-Streams mit dynamischen Zugriffsbeschränkungen. Ein solches Projekt zu realisieren, erfordert mehr als nur Web-Scraping – es verlangt tiefgehende Kenntnisse in Stream-Protokollen, Browser-Sicherheitsmechanismen und clientseitiger Verarbeitung. Dieser Artikel zeigt, wie wir einen hochperformanten Downloader entwickelt haben, der Naver-Videos in Originalqualität extrahiert.

Warum Naver-Videos nicht einfach herunterladbar sind

Naver nutzt Adaptive Bitrate Streaming (ABS) über das HLS-Protokoll (HTTP Live Streaming), um Videos effizient an Nutzer zu übertragen. Dabei entsteht ein fragmentiertes System, das für Entwickler zusätzliche Komplexität mit sich bringt:

  • Master Playlist (.m3u8): Diese Datei enthält alle verfügbaren Auflösungen – von 144p bis 1080p – und verweist auf spezifische Media Playlists für jede Qualitätstufe.
  • Segmentierte .ts-Dateien: Jedes Video besteht aus Hunderten kleiner Transport Stream-Segmente mit einer Länge von 2 bis 5 Sekunden. Diese werden während der Wiedergabe dynamisch vom Server geladen.
  • Dynamische Zugriffstokens: Um auf die Segmente zugreifen zu können, benötigt man eine Kombination aus vid (Video-ID) und inkey (Session-Key). Diese Schlüssel werden über obfuskierte JavaScript-Logik generiert und haben eine extrem kurze Lebensdauer. Fehlt die korrekte Signatur, antwortet Navers Server mit einem HTTP 403-Fehler.

Ein direkter Download der Segmente ist daher unmöglich – ohne die richtigen Metadaten und Token scheitert selbst ein einfacher curl-Befehl.

Die Architektur eines zuverlässigen Downloaders

Um Naver-Videos verlustfrei zu speichern, musste unser Tool mehrere technische Herausforderungen überwinden. Der Schlüssel lag in der Echtzeitsimulation des offiziellen Naver-Players und der clientseitigen Verarbeitung.

1. Metadaten extrahieren: Der erste Schritt

Unser Downloader beginnt mit der Analyse der Zielseite, um die notwendigen Parameter zu sammeln:

  • Suche nach der Video-ID (`vid`) in versteckten JSON-Objekten wie __PRELOADED_STATE__.
  • Emulation des API-Aufrufs an Navers VOD-Server, wobei wir Browser-Fingerprints rotieren, um Anti-Bot-Maßnahmen zu umgehen.
  • Parsen der Antwort, um die höchste verfügbare Bitrate der .m3u8-Datei zu identifizieren.

Dieser Prozess ähnelt dem Verhalten eines echten Nutzers, der eine Seite im Browser lädt – allerdings vollständig automatisiert.

2. CORS-Hürden umgehen: Der Proxy als Brücke

Browsern untersagen aufgrund der Same-Origin-Policy (SOP) den direkten Zugriff auf Ressourcen fremder Domains. Navers CDN blockt daher alle Anfragen von Drittseiten. Unsere Lösung: ein transparenter Node.js-Proxy, der als Mittelsmann fungiert.

  • Stream-Piping ohne Pufferung: Der Proxy leitet die .ts-Segmente direkt an den Client weiter, ohne sie zwischenzuspeichern. Das reduziert den Speicherverbrauch auf dem Server auf ein Minimum.
  • CORS-Header-Stripping: Navers CDN sendet restriktive Header. Unser Proxy entfernt diese und fügt stattdessen ein universelles Access-Control-Allow-Origin: * ein.
  • Skalierbarkeit: Da der Server nur als „dummes Rohr“ agiert, kann die Lösung theoretisch unbegrenzt viele gleichzeitige Downloads bedienen.
// Vereinfachtes Beispiel für den Proxy-Fluss
const express = require('express');
const fetch = require('node-fetch');
const app = express();

app.get('/stream/:segment', async (req, res) => {
  const segmentUrl = `
  const response = await fetch(segmentUrl);
  response.body.pipe(res); // Direkte Weiterleitung
});

3. HLS-Segmente in MP4 umwandeln: WebAssembly übernimmt

Das Zusammenführen von Hunderten .ts-Dateien ist rechenintensiv. Statt dies auf einem Server zu erledigen, setzen wir auf clientseitige Verarbeitung mit WebAssembly – konkret mit FFmpeg.wasm. Der entscheidende Vorteil: kein Qualitätsverlust, da die Videodaten nicht neu kodiert werden.

  • Remuxing statt Transkodierung: Die Segmente sind bereits in H.264 kodiert. Wir ändern lediglich den Container von TS zu MP4, ohne die Videodaten anzurühren.
  • Effizienz durch `-c copy`: FFmpeg kopiert die Pakete direkt in das neue Format, was die Bearbeitung auf Sekunden reduziert.
  • Privatsphäre: Da die gesamte Verarbeitung im Browser stattfindet, bleiben Nutzerdaten lokal – es werden keine unverschlüsselten Videos auf Servern gespeichert.
# Beispielbefehl für FFmpeg.wasm
ffmpeg -i input.ts -c copy -f mp4 output.mp4

Optimierungen für Geschwindigkeit und Stabilität

Ein Download-Tool muss nicht nur funktionieren, sondern auch performant und zuverlässig sein. Dafür haben wir mehrere Techniken implementiert:

1. Paralleles Laden mit Pooling

Ein sequenzieller Download von 500 Segmenten wäre extrem langsam. Gleichzeitig blockieren zu viele parallele Anfragen den CDN-Server, was zu Rate-Limits führt. Unsere Lösung: ein asynchroner Promise-Pool, der die Anzahl gleichzeitiger Downloads auf 5 bis 10 begrenzt.

async function downloadWithPool(urls, limit) {
  const pool = new Set();
  for (const url of urls) {
    if (pool.size >= limit) await Promise.race(pool);
    const promise = fetchSegment(url).then(() => pool.delete(promise));
    pool.add(promise);
  }
}

2. Segmentreihenfolge garantieren

HLS-Streams erfordern eine exakte Abfolge der Segmente. Selbst ein fehlendes Stück kann zu Audio-Desynchronisation führen. Unser Tool validiert daher:

  • Automatische Retries bei fehlgeschlagenen Downloads.
  • Binäre Puffer-Alignment, um sicherzustellen, dass die Segmente lückenlos aneinandergefügt werden.
  • Fehlererkennung vor dem finalen Muxing-Prozess.

Fazit: Moderne Webtechnologien für zuverlässige Downloads

Das Entwickeln eines Downloaders für Naver-Videos war eine Reise durch die Grenzen moderner Webarchitektur. Durch die Kombination aus Node.js-Proxys, HLS-Parsing und WebAssembly ist es gelungen, eine Lösung zu schaffen, die:

  • Originalqualität bewahrt (kein Re-Encoding).
  • Serverlast minimiert (clientseitige Verarbeitung).
  • Ohne Installation funktioniert (rein browserbasiert).
  • Datenschutzkonform ist (lokale Verarbeitung).

Wer Naver-Inhalte sicher und in voller HD-Qualität speichern möchte, findet in diesem Ansatz eine robuste Grundlage. Die Technologien dahinter – HLS, WebAssembly und asynchrone Stream-Verarbeitung – bieten auch für andere Streaming-Plattformen wertvolle Einblicke. Welche Herausforderungen begegnen Entwicklern bei ähnlichen Projekten? Teile deine Erfahrungen in den Kommentaren.

KI-Zusammenfassung

Naver’dan video indirmek için HLS protokolü, dinamik tokenlar ve WebAssembly kullanarak nasıl kayıpsız ve yüksek performanslı bir indirme aracı geliştirilir? Ayrıntılı mühendislik rehberi.

Kommentare

00
KOMMENTAR SCHREIBEN
ID #NTL20N

0 / 1200 ZEICHEN

Menschen-Check

4 + 3 = ?

Erscheint nach redaktioneller Prüfung

Moderation · Spam-Schutz aktiv

Noch keine Kommentare. Sei der erste.