8 Punkte von GN⁺ 1 일 전 | 2 Kommentare | Auf WhatsApp teilen
  • Castor ist ein Terminal-Tool, das in Webseiten oder direkten Stream-URLs den eigentlichen Videostream findet, ihn für den Fernseher umwandelt und in Echtzeit ohne Screen Mirroring in Originalqualität überträgt
  • Mit Headless Chrome und dem Chrome DevTools Protocol beobachtet es den Netzwerkverkehr und extrahiert den Stream über Seitenklicks, das Betreten des größten iframe und erneute Klicks, funktioniert aber möglicherweise nicht auf Seiten, die Autoplay nicht erlauben
  • Es kann mit Smart-TVs verwendet werden, die DLNA/UPnP unterstützen, sowie mit Kodi, VLC und Plex; Chromecast-Unterstützung ist implementiert, aber noch experimentell und ungetestet
  • Abspielbares H.264-Video wird ohne Re-Encoding weitergereicht, bei Bedarf mit einem Hardware-Encoder oder libx264 umgewandelt, und mit whisper erzeugte Untertitel können in das Video eingebettet werden
  • Es stellt weder Videos, Kataloge noch Quellen bereit und umgeht kein DRM; es ist so konzipiert, dass nur vom Nutzer direkt angegebene Seiten und Streams mit Nutzungsberechtigung übertragen werden

Webvideos als echte Streams übertragen

  • Castor überträgt echte Videostreams in voller Qualität und ersetzt damit Smart-TVs, die beliebige Webvideos nicht direkt abspielen können, sowie Screen Mirroring mit Latenz und Auflösungsverlust
  • Gibt man eine Webseite oder eine direkte Stream-URL an, findet es das Video, extrahiert den Stream und transkodiert ihn passend für den Fernseher zur Echtzeitübertragung
  • Es kann IMDB/TMDB-IDs aus vom Nutzer konfigurierten Quellen nachschlagen oder automatisch erzeugte Untertitel in das Video einbetten
  • Mit castor cast lassen sich Inhalte in einem terminalbasierten interaktiven Browser durchsuchen und übertragen

Funktionsweise und Grenzen der Stream-Extraktion

  • Es startet Headless Chrome und beobachtet mit dem Chrome DevTools Protocol den Netzwerkverkehr, um Streams zu finden
  • Zum Starten der Wiedergabe führt es eine kurze Aktions-Pipeline aus
    • Auf die Seite klicken
    • Zum größten iframe wechseln
    • Als Ausweichaktion erneut klicken
  • Es funktioniert auf Seiten, die Autoplay erlauben, unterstützt aber nicht alle Websites

Installations- und Laufzeitvoraussetzungen

  • Empfohlen wird eine native Binärdatei, die im selben Netzwerk wie der Fernseher läuft
  • Im PATH der Laufzeitumgebung werden folgende Tools benötigt
    • Chrome oder Chromium: Headless-Stream-Extraktion
    • ffmpeg: Transkodierung
    • ffprobe: Erkennung des Medienformats
  • Unter macOS kann die Installation per Homebrew erfolgen
brew install --cask stupside/tap/castor
  • Für den Build aus dem Quellcode werden Go 1.26+ und CMake benötigt
    • Die whisper.cpp-Bindings verwenden cgo und linken gegen ein lokal gebautes libwhisper.a
    • Wegen lokalem replace und vorkompilierten statischen Bibliotheken funktioniert go install nicht
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make

Grundlegender Nutzungsablauf

  • Mit castor scan wird der TV-Name gefunden, anschließend werden in config.yaml der exakte Name und der Gerätetyp unter device eingetragen
device:
  name: "Living Room TV"
  type: dlna
  • Eine Webseite oder direkte Stream-URL wird mit cast player übertragen
castor cast player https://example.com/watch/some-video
  • Für die interaktive Werkssuche sind ein TMDB-API-Key und vom Nutzer konfigurierte Quellen nötig; alle Befehle und Flags sind unter castor --help zu finden

Konfiguration und vom Nutzer bereitgestellte Quellen

  • config.yaml wird aus dem aktuellen Verzeichnis oder aus dem mit --config angegebenen Pfad gelesen; der einzige Pflichtteil ist die Gerätekonfiguration für das Zielgerät
  • Für Timeouts, Navigation, Capture, Transkodierung, Netzwerkschnittstelle und Chrome-Navigation gibt es Standardwerte
  • Geheimwerte können über config.local.yaml, das in Git ausgeschlossen ist, überschrieben oder als Umgebungsvariablen im Format CASTOR_SECTION__FIELD gesetzt werden
  • cast movie, cast episode und der interaktive Browser setzen Werks-IDs in vom Nutzer konfigurierte Quellen ein
    • Castor selbst enthält keine Quellen, Kataloge oder Lookup-Funktionen
    • Es setzt IDs in vom Nutzer geschriebene templates ein, setzt davor jeweils die proxies, öffnet die Seite und extrahiert den Stream wie bei cast player
    • Mehrere Proxys werden in der angegebenen Reihenfolge ausprobiert
sources:
  - proxies: ["https://your-source.example";]
    templates:
      movie: "/embed/movie/{itemID}"
      episode: "/embed/tv/{itemID}/{season}-{episode}"

TMDB-Suche und automatische Untertitel

  • Der interaktive Browser nutzt für die Werkssuche einen TMDB-API-Key
    • Der Key kann unter themoviedb.org bezogen werden
    • Für direkte Befehle wie cast movie <id> ist kein TMDB-Key erforderlich
  • Automatische Untertitel transkribieren Sprache mit whisper und betten sie ins Video ein; standardmäßig sind sie deaktiviert
    • Standardsprache ist Englisch
    • Standardmodell ist ggml-tiny.en mit etwa 75 MB und wird automatisch heruntergeladen

Unterstützte Geräte

  • Unterstützt werden Fernseher, die das Profil DLNA/UPnP MediaRenderer:1 implementieren
    • Samsung wurde getestet; LG, Sony Bravia, Panasonic Viera, Philips, Hisense, TCL, VIZIO und Sharp gehören zu den unterstützten Geräten
    • Auch Netzwerk-Player wie Kodi, VLC und Plex können verwendet werden
  • Mit castor scan lassen sich Geräte im selben Netzwerk finden
  • Chromecast-Unterstützung ist implementiert, aber experimentell und ungetestet

Docker-Einschränkungen und Netzwerkkonfiguration

  • Das Linux-only-Docker-Image bringt Chrome, ffmpeg und ffprobe mit
  • In Docker wird ein Linux-Host im selben LAN wie der Fernseher benötigt, und für SSDP-Multicast-Erkennung sowie die Verbindung zum Castor-Wiedergabeserver muss --network host verwendet werden
  • Unter macOS und Windows verbindet Docker Desktop --network host nicht mit dem LAN
    • Der Container landet im internen VM-Subnetz von Docker Desktop, sodass scan keine Geräte findet und die Übertragung ebenfalls fehlschlägt
    • Unter macOS und Windows sollte die native Binärdatei verwendet oder eine Linux-VM ans LAN gebridged werden
  • Die Konfiguration kann durch Mounten von /config.yaml bereitgestellt werden; in einem Volume lassen sich automatisch heruntergeladene whisper-Modelle erhalten
  • Mit einem Release-Tag statt latest lässt sich die Version fixieren

Media-Passthrough und Encoding

  • Wenn der Fernseher H.264-Video mit zulässigem Profil und Level bereits abspielen kann, wird Stream Copy verwendet, um die CPU-Auslastung nahezu auf 0 zu senken
  • Lehnt der Fernseher den Codec ab oder müssen Untertitel eingebettet werden, wird re-encodiert
    • Bevorzugt werden tatsächlich funktionierende Hardware-H.264-Encoder wie VA-API unter Linux oder VideoToolbox in der nativen macOS-Binärdatei
    • Falls nicht verfügbar, wird auf Software-libx264 zurückgegriffen
  • Um VA-API auf einer Intel-GPU im Docker-Container zu nutzen, ist --device /dev/dri erforderlich; --network host allein macht die GPU nicht verfügbar

Einsatzzweck und Einschränkungen

  • Castor ist kein an eine bestimmte Website gebundener Dienst, sondern ein universelles Übertragungstool
  • Es hostet oder bündelt keine Videos, Kataloge oder Quellen und verarbeitet nur Seiten, Streams und Quellen, die der Nutzer angibt und für die er Nutzungsrechte hat
  • Es entschlüsselt oder umgeht kein DRM; DRM-geschützte Dienste können nicht übertragen werden
  • Für die Einhaltung von Website-Nutzungsbedingungen und lokalem Recht ist der Nutzer selbst verantwortlich; das Tool wird im Ist-Zustand für legale private und Bildungszwecke bereitgestellt

2 Kommentare

 
xguru 1 일 전

Und der Link im Kommentar unten, https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR, ist auch super praktisch. Haha.
Scheint in Korea gesperrt zu sein, aber kann man es im Ausland vielleicht direkt ansehen?

 
GN⁺ 1 일 전
Meinungen auf Hacker News
  • Ich habe TV Explorer gebaut, das HLS-Streams, die von den Sendern öffentlich bereitgestellt werden, ohne Umweg direkt im Browser abspielt. Es nutzt eine öffentliche GitHub-Liste mit mehr als 10.000 kostenlosen Sendern.
    https://tvexplorer.live

    • Erstaunlich flüssig und leichtgewichtig, reagiert nahezu sofort, und auch Zurücknavigieren funktioniert richtig. Das Untertitel-Popup überlappt mit einigen UI-Elementen, aber selbst auf einem normalen Desktop ist der Senderwechsel so schnell wie damals beim Durchschalten analoger NTSC-Kanäle.
      Ich frage mich, was andere TV-Dienste tun, was hier nicht gemacht wird.
    • Besonders bei japanischen Sendern scheint https://tv.garden/ mehr Kanäle zu haben.
    • Lädt auch mobil sehr schnell, und man kann Sender aus aller Welt ansehen; das wäre einen eigenen Beitrag wert.
    • Wäre schön als Jellyfin-Plugin.
    • Wirkt wie die ausgereifteste IPTV-Site, die ich bisher gesehen habe.
  • Es ist absurd, dass ein Bot jedes Mal einen Headless-Browser mit neuem Profil starten muss. Cloudflare hält Bots nicht auf, verschwendet nur Ressourcen auf beiden Seiten und übergibt der NSA gewissermaßen Zugriffsverläufe und Passwörter. Ich will das alte Internet zurück.

  • Die Erklärung lautet: „Ich habe es gebaut, weil ich ohne Chromecast oder AirPlay Webvideos vom Laptop nicht auf den Fernseher übertragen konnte“, aber es sieht aus, als hätte Claude es gebaut.

    • Ja, Claude hat geholfen, und ich bin weder DLNA- noch FFMPEG-Experte, aber wichtig ist, dass es mein Problem gelöst hat. Wenn es auch die Probleme anderer löst, umso besser.
    • Man könnte auch sagen, der Compiler habe es mithilfe von Bibliotheken von Google und anderen gebaut. Solange Claude nicht direkt auslieferbaren Maschinencode ausgibt, ist es nur eine weitere Zwischenschicht zwischen menschlicher Absicht und dem Endergebnis.
  • Ich dachte, der Kern von Turnstile bestehe darin, Headless-Browser zu erkennen und eine Umgehung schwierig zu machen; daher frage ich mich, ob es wirklich genügt, einfach das Anklicken des Häkchens nachzuahmen.

    • Turnstile ist eher ein Werkzeug, das Site-Betreibern ein diffuses Sicherheitsgefühl verkauft, Tor-Nutzer mit deaktiviertem JavaScript aussperrt und sie dazu bringt, Cloudflare eine Kopie des gesamten Traffics bereitzustellen.
      Wichtiger als echte Sicherheit scheint eine Scheinsicherheit zu sein, bei der Cloudflare die aggregierte Zahl blockierter Nutzer – egal ob Mensch oder Bot – fürs Marketing nutzt.
    • Wenn man die passenden Events nachahmt, ist es ohne Plattform-Erkennung schwer, einen Headless-Browser von einem echten Browser zu unterscheiden. Allerdings ist es nicht schwierig, den Software-Renderer unter Linux zu erkennen; wenn solche Umgehungen weitergehen, könnte Linux-Nutzern wahrscheinlich mindestens eine zusätzliche Verifizierung aufgezwungen werden.
      Die Checkbox ist nur ein Teil davon; bis dahin werden alle Aktionen und Event-Reaktionen des Browsers beobachtet, um je nach Bot-Wahrscheinlichkeit zu entscheiden, ob zusätzliche Verifizierung nötig ist.
    • Es wird nicht nur der Klick auf die Checkbox nachgeahmt, sondern auch mehrere Browser-Eigenschaften werden gefälscht. Ein gewöhnlicher Headless-Browser würde mit hoher Wahrscheinlichkeit erkannt.
    • Selbst bei Abwehrsystemen im Millionen-Dollar-Bereich haben Leute WoW lange automatisiert, indem sie Peripheriegeräte mit Klebeband an vibrierende Ventilatoren befestigt haben. Headless-Browser-Automatisierung ist wie Cheating in FPS-Spielen: Die Angreifer haben die Initiative, und wenn sie genug Zeit und Geld investieren, gewinnen sie am Ende.
    • Wenn man einen Browser bauen kann, der alle anderen im Hintergrund laufenden Prüfungen besteht, bleibt am Ende nur noch das Anklicken des Häkchens.
  • Piraterie-Tools lassen normalerweise zumindest eine plausible Abstreitbarkeit übrig, aber hier wird ausdrücklich damit geworben, sogar einen Blockbuster mit 250 Millionen Dollar Budget, der dieses Wochenende startet, streamen zu helfen.

    • Ich dachte, die Struktur sei: Film in den konfigurierten Quellen suchen und „nicht gefunden“ zurückgeben, falls er dort nicht vorhanden ist. Stremio ist ebenfalls eine legale App, aber wenn man das illegale Torrentio-Plugin hinzufügt, kann sie Medien automatisch illegal kopieren, sodass die Kernentwicklung öffentlich stattfinden kann.
      Ähnlich ist es beim Emulator Azahar und dem illegalen Fork Azahar Plus, der Spiele automatisch entschlüsselt; beim erneuten Hinsehen ist in diesem Projekt jedoch eine illegale Streaming-Site eingebaut.
    • Das Interface zeigt die aktuell beliebten Filme von https://www.themoviedb.org/ an.
    • Anfangs wirkte es wie ein Tool, um Videos von bereits zugänglichen Websites vom Laptop an den Fernseher zu übertragen. Wegen der KI-generiert klingenden Beschreibung mit „zufälligen Websites“ und der Option für einen TVDB-API-Key ist aber unklar, worauf der eigentliche Fokus liegt.
    • Vielleicht werden gar keine echten Filme abgespielt, sondern nur Trailer.
  • Auf einem ganz normalen, über 15 Jahre alten Samsung-TV funktionierte es sofort. Ich frage mich, ob es am besten ist, eine eigene Suchfunktion zu schreiben, die alle JSON-Seiten wie https://vsembed.ru/movies/latest/page-1.json analysiert.

  • Der Beschreibung fehlt Kontext; es ist schwer zu erkennen, wofür das Tool gedacht ist und ob es für Piraterie genutzt wird.

    • Es ist ein Kommandozeilen-Tool, das nach Auswahl eines Films auf Streaming-Sites ein passendes Video sucht, es transkodiert, Untertitel in Echtzeit einbrennt und den Fernseher anweist, es abzuspielen.
    • Es spielt nur Streams ab, auf die man bereits zugreifen kann, und knackt keine Verschlüsselung; daher ist nicht klar, wie es Piraterie unterstützt.
    • Es ist eine alternative Übertragungsmethode, um Streaming-Videos von Websites oder Diensten zu extrahieren und an den Fernseher zu senden.
    • Große etablierte Dienste unterstützen Bildschirmübertragung bereits; daher frage ich mich, ob der eigentliche Anwendungsfall am Ende so etwas wie illegale Sport-Streams ist.
  • Der Aufwand ist ähnlich wie bei Torrents, daher sehe ich keinen Grund, es zu nutzen.

  • In der Docker-Version unter macOS kann es sein, dass der Fernseher nicht gefunden wird.

    • Um UPnP über die für Docker unter macOS nötige virtuelle Maschine zu verwenden, muss man die betreffenden Netzwerke sehr wahrscheinlich nach außen freigeben.
  • Bei der Stelle „führt ein Headless Chrome aus, der Automatisierung mit zufälligen Fingerprints und Stealth-Skripten verbirgt“ habe ich das Vertrauen verloren.

    • Ich arbeite im Bereich Browser-Fingerprinting und habe mir das Repository angesehen; offenbar werden nur navigator, Audio API und Canvas API verändert. Das ist sehr grundlegend und dürfte leicht zu erkennen sein.