- Castor est un outil en ligne de commande qui trouve le véritable flux vidéo depuis une page web ou une URL de flux directe, le convertit pour la TV et le transmet en temps réel en qualité d’origine, sans recopie d’écran
- Il observe le trafic réseau avec Chrome en mode headless et le Chrome DevTools Protocol, puis extrait le flux en cliquant sur la page, en entrant dans le plus grand iframe et en recliquant si nécessaire, mais il peut ne pas fonctionner sur les pages qui n’autorisent pas l’autoplay
- Il peut être utilisé avec les smart TV compatibles DLNA/UPnP ainsi qu’avec Kodi, VLC et Plex ; la prise en charge de Chromecast est implémentée mais reste expérimentale et non testée
- Les vidéos H.264 lisibles sont transmises sans réencodage et, si besoin, converties avec un encodeur matériel ou
libx264 ; il est aussi possible d’insérer dans la vidéo des sous-titres générés avec whisper
- Il ne fournit ni vidéos, ni catalogue, ni sources, et ne contourne pas les DRM ; il est conçu pour ne transmettre que les pages et flux indiqués par l’utilisateur et pour lesquels il dispose des droits d’usage
Diffuser une vidéo web comme un vrai flux
- Castor envoie un véritable flux vidéo en qualité intégrale, au lieu d’une diffusion web directe impossible sur certaines smart TV ou d’une recopie d’écran avec latence et perte de résolution
- Il prend en entrée une page web ou une URL de flux directe, détecte la vidéo, extrait le flux, puis le transcode pour la TV et l’envoie en temps réel
- Il peut rechercher des ID IMDB/TMDB à partir de sources configurées par l’utilisateur ou insérer dans la vidéo des sous-titres générés automatiquement
- En lançant
castor cast, on peut parcourir et diffuser des contenus via un navigateur interactif en terminal
Méthode d’extraction du flux et limites
- Il lance Chrome en mode headless et observe le trafic réseau avec le Chrome DevTools Protocol pour trouver le flux
- Il exécute un court pipeline d’actions pour démarrer la lecture
- clic sur la page
- navigation vers le plus grand iframe
- nouveau clic comme action de secours
- Il fonctionne sur les pages qui autorisent l’autoplay, mais ne prend pas en charge tous les sites
Installation et prérequis d’exécution
- La méthode recommandée est d’utiliser un binaire natif exécuté sur le même réseau que la TV
- Les outils suivants doivent être présents dans le
PATH de l’environnement d’exécution
- Chrome ou Chromium : extraction headless du flux
ffmpeg : transcodage
ffprobe : détection du format multimédia
- Sur macOS, l’installation peut se faire avec Homebrew
brew install --cask stupside/tap/castor
- La compilation depuis les sources nécessite Go 1.26+ et CMake
- les bindings whisper.cpp utilisent cgo et se lient à un
libwhisper.a compilé localement
go install ne fonctionne pas, car un replace local et des bibliothèques statiques précompilées sont nécessaires
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make
Flux d’utilisation de base
- Utilisez
castor scan pour trouver le nom de la TV, puis indiquez dans config.yaml le nom exact et le type d’appareil dans device
device:
name: "Living Room TV"
type: dlna
- Une page web ou une URL de flux directe se diffuse avec
cast player
castor cast player https://example.com/watch/some-video
- La recherche interactive d’œuvres nécessite une clé API TMDB et des sources configurées par l’utilisateur ; la liste complète des commandes et options est disponible via
castor --help
Configuration et sources fournies par l’utilisateur
config.yaml est lu depuis le répertoire courant ou depuis le chemin indiqué avec --config, et le seul élément obligatoire est la configuration de l’appareil de destination
- Des valeurs par défaut sont fournies pour les délais, la navigation, la capture, le transcodage, l’interface réseau et la navigation Chrome
- Les valeurs secrètes peuvent être surchargées via
config.local.yaml exclu de Git ou via des variables d’environnement au format CASTOR_SECTION__FIELD
cast movie, cast episode et le navigateur interactif injectent des identifiants d’œuvres dans des sources configurées par l’utilisateur
- Castor n’intègre ni source, ni catalogue, ni fonction de recherche
- il injecte l’ID dans des
templates définis par l’utilisateur, préfixe chaque URL avec les proxies, ouvre la page, puis extrait le flux de la même manière que cast player
- plusieurs proxys sont essayés dans l’ordre indiqué
sources:
- proxies: ["https://your-source.example"]
templates:
movie: "/embed/movie/{itemID}"
episode: "/embed/tv/{itemID}/{season}-{episode}"
Recherche TMDB et sous-titres automatiques
- Le navigateur interactif utilise une clé API TMDB pour rechercher les œuvres
- la clé peut être obtenue sur themoviedb.org
- les commandes directes comme
cast movie <id> n’ont pas besoin de clé TMDB
- Les sous-titres automatiques transcrivent l’audio avec whisper et les insèrent dans la vidéo ; cette fonction est désactivée par défaut
- la langue par défaut est l’anglais
- le modèle par défaut est
ggml-tiny.en, d’environ 75 Mo, et il est téléchargé automatiquement
Appareils pris en charge
- Prend en charge les TV implémentant le profil DLNA/UPnP
MediaRenderer:1
- Samsung a été testé, et LG, Sony Bravia, Panasonic Viera, Philips, Hisense, TCL, VIZIO et Sharp font partie des appareils visés
- des lecteurs réseau comme Kodi, VLC et Plex peuvent aussi être utilisés
castor scan permet de découvrir les appareils présents sur le même réseau
- La prise en charge de Chromecast est implémentée mais expérimentale et non testée
Contraintes Docker et configuration réseau
- L’image Docker, réservée à Linux, fournit Chrome,
ffmpeg et ffprobe
- Avec Docker, il faut un hôte Linux sur le même LAN que la TV, et utiliser
--network host pour la découverte SSDP en multicast et la connexion au serveur de lecture de Castor
- Sur macOS et Windows avec Docker Desktop,
--network host ne donne pas accès au LAN
- le conteneur se retrouve sur le sous-réseau de la VM interne à Docker Desktop, ce qui empêche
scan de trouver l’appareil et fait échouer la diffusion
- sur macOS et Windows, il faut utiliser le binaire natif ou relier une VM Linux au LAN en mode bridge
- On peut monter
/config.yaml pour fournir la configuration et conserver dans un volume le modèle whisper téléchargé automatiquement
- Utiliser un tag de release plutôt que
latest permet de figer la version
Pass-through multimédia et encodage
- Si la TV peut déjà lire une vidéo H.264 avec le profil et le niveau qu’elle accepte, Castor utilise une copie de flux pour ramener l’usage CPU à presque 0
- Si la TV refuse le codec ou si des sous-titres doivent être incrustés, il réencode
- il privilégie un encodeur H.264 matériel réellement fonctionnel, comme VA-API sous Linux ou VideoToolbox sur le binaire natif macOS
- à défaut, il bascule sur
libx264 en logiciel
- Pour utiliser VA-API avec un GPU Intel dans un conteneur Docker,
--device /dev/dri est requis ; --network host seul n’expose pas le GPU
Usages et limites
- Castor est un outil de diffusion générique, pas un service lié à un site spécifique
- Il n’héberge ni ne fournit de vidéos, de catalogue ou de sources, et ne traite que les pages, flux et sources indiqués par l’utilisateur et pour lesquels il dispose des droits d’usage
- Il ne déchiffre ni ne contourne les DRM, et les services protégés par DRM ne peuvent pas être diffusés
- L’utilisateur est responsable du respect des conditions d’utilisation des sites et du droit local, et l’outil est fourni en l’état pour des usages personnels ou pédagogiques légitimes
2 commentaires
Waouh, dans les commentaires ci-dessous, ce lien est vraiment pratique : https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR haha
Il semble être bloqué en Corée ; est-ce qu’on peut le regarder directement depuis l’étranger ?
Avis sur Hacker News
J’ai créé TV Explorer, qui lit directement dans le navigateur les flux HLS publiés par les chaînes, sans contournement supplémentaire. Il s’appuie sur une liste publique GitHub contenant plus de 1000 chaînes gratuites
https://tvexplorer.live
Je me demande ce que les autres services TV font que celui-ci ne fait pas
Le fait qu’un bot doive lancer un nouveau navigateur headless avec un profil neuf à chaque fois est absurde. Cloudflare n’arrive pas à bloquer les bots, ne fait que gaspiller les ressources des deux côtés, et revient à livrer les journaux d’accès et mots de passe à la NSA ; j’aimerais revenir à l’ancien Internet
L’explication dit : « je l’ai créé parce qu’il n’y a ni Chromecast ni AirPlay pour envoyer la vidéo web du laptop vers la TV », mais on dirait quelque chose fait par Claude
Je croyais que le cœur de Turnstile consistait à détecter les navigateurs headless pour rendre le contournement difficile, donc je me demande s’il est vraiment possible de passer en imitant simplement un clic sur la case à cocher
On dirait qu’ils accordent plus d’importance à cette fausse sécurité, où Cloudflare utilise en marketing le nombre d’utilisateurs bloqués sans distinguer humains et bots, qu’à la sécurité réelle
La case à cocher n’est qu’une partie du processus ; avant cela, ils observent tous les comportements du navigateur et ses réactions aux événements pour décider, selon la probabilité qu’il s’agisse d’un bot, s’il faut une vérification supplémentaire
En général, les outils de piratage laissent au moins une forme de dénégation plausible, mais ici ils se vantent même d’aider à streamer un blockbuster à 250 millions de dollars qui sort ce week-end
C’est similaire avec l’émulateur Azahar et son fork illégal Azahar Plus qui déchiffre automatiquement les jeux, mais en regardant à nouveau, ce projet intègre des sites de streaming illégaux
Ça a fonctionné immédiatement sur une Samsung TV ordinaire de plus de 15 ans. Je me demande si la meilleure approche est vraiment d’écrire soi-même une fonction de recherche qui analyse toutes les pages JSON comme https://vsembed.ru/movies/latest/page-1.json
La description manque de contexte, donc il est difficile de savoir à quoi sert l’outil, et s’il est destiné au piratage
Ça demande à peu près autant d’efforts qu’utiliser des torrents, donc je ne vois pas trop l’intérêt
Avec la version Docker sur macOS, il se peut qu’on ne trouve pas la TV
J’ai perdu confiance en lisant le passage qui dit : « lance Chrome headless en masquant l’automatisation avec des empreintes aléatoires et des scripts stealth »
navigator, l’Audio API et la Canvas API. C’est très basique, donc il y a de fortes chances que ce soit facilement détectable