- Castor é uma ferramenta de terminal que encontra o stream de vídeo real em uma página web ou URL direta de stream, o converte para a TV e transmite em tempo real com a qualidade original, sem espelhamento de tela
- Ele observa o tráfego de rede com Chrome headless e o Chrome DevTools Protocol; extrai o stream após clicar na página, entrar no maior iframe e clicar novamente, mas pode não funcionar em páginas que não permitem reprodução automática
- Pode ser usado em smart TVs compatíveis com DLNA/UPnP e em Kodi, VLC e Plex; o suporte a Chromecast foi implementado, mas ainda é experimental e não testado
- Vídeos H.264 reproduzíveis são encaminhados sem recodificação e, quando necessário, convertidos com um encoder de hardware ou
libx264; também é possível inserir no vídeo legendas geradas com whisper
- Não fornece vídeos, catálogos ou fontes, nem contorna DRM; foi projetado para transmitir apenas páginas e streams que o usuário especifica diretamente e tem permissão para usar
Transmitindo vídeos da web como streams reais
- Castor substitui o espelhamento de tela, que tem atraso e perda de resolução, e resolve a limitação de smart TVs que não conseguem transmitir vídeos web arbitrários diretamente, enviando o stream de vídeo real com qualidade total
- Ao inserir uma página web ou uma URL direta de stream, ele localiza o vídeo, extrai o stream, faz a transcodificação adequada para a TV e transmite em tempo real
- Pode consultar IDs do IMDB/TMDB a partir de fontes configuradas pelo usuário ou inserir legendas geradas automaticamente no vídeo
- Ao executar
castor cast, é possível navegar por títulos e transmiti-los em um navegador interativo baseado em terminal
Como a extração de streams funciona e suas limitações
- Executa Chrome headless e usa o Chrome DevTools Protocol para observar o tráfego de rede e encontrar o stream
- Executa um pequeno pipeline de ações para iniciar a reprodução
- Clicar na página
- Ir para o maior iframe
- Clicar novamente como ação alternativa
- Funciona em páginas que permitem reprodução automática e não oferece suporte a todos os sites
Requisitos de instalação e execução
- O método recomendado é usar o binário nativo executado na mesma rede da TV
- As seguintes ferramentas precisam estar no
PATH do ambiente de execução
- Chrome ou Chromium: extração de stream headless
ffmpeg: transcodificação
ffprobe: detecção de formato de mídia
- No macOS, é possível instalar via Homebrew
brew install --cask stupside/tap/castor
- Para compilar a partir do código-fonte, são necessários Go 1.26+ e CMake
- As bindings do whisper.cpp usam cgo e se vinculam ao
libwhisper.a compilado localmente
- Como são necessários um
replace local e uma biblioteca estática pré-compilada, go install não funciona
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make
Fluxo básico de uso
- Encontre o nome da TV com
castor scan e especifique o nome exato e o tipo do dispositivo em device no config.yaml
device:
name: "Living Room TV"
type: dlna
- Páginas web ou URLs diretas de stream são transmitidas com
cast player
castor cast player https://example.com/watch/some-video
- A busca interativa de títulos exige uma chave de API do TMDB e fontes configuradas pelo usuário; todos os comandos e flags podem ser consultados em
castor --help
Configuração e fontes fornecidas pelo usuário
- O
config.yaml é lido no diretório atual ou no caminho especificado por --config, e o único item obrigatório é a configuração do dispositivo de destino da transmissão
- Há valores padrão para limites de tempo, navegação, captura, transcodificação, interface de rede e navegação do Chrome
- Valores secretos podem ser sobrescritos por
config.local.yaml, excluído do Git, ou definidos por variáveis de ambiente no formato CASTOR_SECTION__FIELD
cast movie, cast episode e o navegador interativo inserem IDs de títulos nas fontes configuradas pelo usuário
- O próprio Castor não inclui fontes, catálogos nem funcionalidade de consulta
- Ele insere IDs nos
templates escritos pelo usuário, prefixa cada um dos proxies, abre a página e extrai o stream da mesma forma que cast player
- Vários proxies são tentados na ordem especificada
sources:
- proxies: ["https://your-source.example"]
templates:
movie: "/embed/movie/{itemID}"
episode: "/embed/tv/{itemID}/{season}-{episode}"
Busca no TMDB e legendas automáticas
- O navegador interativo usa uma chave de API do TMDB para buscar títulos
- A chave pode ser obtida em themoviedb.org
- Comandos diretos como
cast movie <id> não exigem chave do TMDB
- As legendas automáticas transcrevem o áudio com whisper e as inserem no vídeo; por padrão, ficam desativadas
- O idioma padrão é inglês
- O modelo padrão é
ggml-tiny.en, com cerca de 75 MB, e é baixado automaticamente
Dispositivos compatíveis
- Oferece suporte a TVs que implementam o perfil DLNA/UPnP
MediaRenderer:1
- Samsung foi testada; LG, Sony Bravia, Panasonic Viera, Philips, Hisense, TCL, VIZIO e Sharp estão entre os alvos compatíveis
- Players de rede como Kodi, VLC e Plex também podem ser usados
- Use
castor scan para listar dispositivos na mesma rede
- O suporte a Chromecast foi implementado, mas é experimental e não testado
Restrições do Docker e configuração de rede
- A imagem Docker apenas para Linux inclui Chrome,
ffmpeg e ffprobe
- No Docker, é necessário um host Linux na mesma LAN da TV, e deve-se usar
--network host para a descoberta multicast SSDP e a conexão ao servidor de reprodução do Castor
- No Docker Desktop para macOS e Windows,
--network host não se conecta à LAN
- O contêiner fica na sub-rede da VM interna do Docker Desktop, fazendo com que
scan não encontre dispositivos e a transmissão falhe
- No macOS e Windows, use o binário nativo ou coloque uma VM Linux em bridge com a LAN
- É possível montar
/config.yaml para fornecer a configuração e preservar em um volume os modelos whisper baixados automaticamente
- Usar uma tag de release em vez de
latest permite fixar a versão
Pass-through de mídia e codificação
- Se a TV já consegue reproduzir vídeos H.264 no perfil e nível aceitos, usa cópia de stream para reduzir o uso de CPU a quase zero
- Se a TV rejeitar o codec ou for necessário inserir legendas, ele recodifica
- Prioriza um encoder H.264 de hardware que realmente funcione, como VA-API no Linux ou VideoToolbox no binário nativo para macOS
- Se não estiver disponível, usa o
libx264 por software
- Para usar VA-API da GPU Intel em um contêiner Docker, é necessário
--device /dev/dri; apenas --network host não expõe a GPU
Finalidade e limitações
- Castor é uma ferramenta de transmissão genérica, não um serviço vinculado a um site específico
- Não hospeda nem inclui vídeos, catálogos ou fontes, e processa apenas páginas, streams e fontes especificados pelo usuário e para os quais ele tem permissão de uso
- Não descriptografa nem contorna DRM, e serviços protegidos por DRM não podem ser transmitidos
- O usuário é responsável por cumprir os termos de uso dos sites e as leis locais; a ferramenta é fornecida no estado em que se encontra para usos pessoais e educacionais legais
2 comentários
Uau, este link nos comentários abaixo, https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR, é muito prático. haha
Parece que está bloqueado na Coreia; será que dá para assistir direto do exterior?
Opiniões no Hacker News
Criei o TV Explorer, que reproduz diretamente no navegador streams HLS publicados pelos próprios canais, sem nenhum contorno adicional. Ele usa uma lista pública no GitHub com mais de 10 mil canais gratuitos
https://tvexplorer.live
Fico curioso sobre o que os outros serviços de TV fazem que este aqui não faz
É absurdo que um bot tenha que iniciar sempre um navegador headless com um perfil novo. A Cloudflare não consegue bloquear bots, só faz os dois lados desperdiçarem recursos e, na prática, entrega histórico de acesso e senhas à NSA; dá vontade de voltar para a internet de antigamente
A explicação diz que foi criado porque “não havia Chromecast nem AirPlay para enviar vídeos da web do notebook para a TV”, mas parece algo feito pelo Claude
Eu entendia que o ponto central do Turnstile era detectar navegadores headless e dificultar o bypass, então fico em dúvida se realmente dá para passar apenas imitando o clique na marca de verificação
Mais do que segurança real, parece importar a falsa segurança que a Cloudflare usa em marketing com base no número de usuários bloqueados agregado sem distinguir pessoas de bots
A caixa de seleção é só uma parte; antes disso, todos os comportamentos do navegador e as respostas a eventos são observados para decidir se haverá verificação adicional com base na probabilidade de ser bot
Normalmente ferramentas de pirataria ao menos mantêm uma negação plausível, mas aqui elas anunciam que ajudam a fazer streaming até de um blockbuster de US$ 250 milhões que estreia neste fim de semana
O emulador Azahar e o fork ilegal Azahar Plus, que descriptografa jogos automaticamente, são parecidos, mas, olhando de novo, este projeto embute sites de streaming ilegal
Funcionou instantaneamente em uma TV Samsung comum com mais de 15 anos. Fico pensando se o melhor é escrever uma busca própria para analisar todas as páginas JSON, como https://vsembed.ru/movies/latest/page-1.json
A descrição carece de contexto, então é difícil entender para que a ferramenta serve e se é para pirataria
Dá um trabalho parecido com usar torrent, então não vejo muito motivo para usar
Na versão Docker para macOS, talvez não consiga encontrar a TV
Perdi a confiança na parte que diz que “executa um Chrome headless que esconde a automação com impressões digitais aleatórias e scripts furtivos”
navigator, Audio API e Canvas API. É um nível muito básico, então há grande chance de ser facilmente detectado