8 pontos por GN⁺ 1 일 전 | 2 comentários | Compartilhar no WhatsApp
  • 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

 
xguru 1 일 전

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?

 
GN⁺ 1 일 전
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

    • É surpreendentemente fluido e leve, responde quase instantaneamente, e o botão de voltar também funciona direito. O pop-up de legendas se sobrepõe a alguns elementos da tela, mas, mesmo em um desktop comum, a troca de canais é tão rápida quanto girar canais na época do NTSC analógico
      Fico curioso sobre o que os outros serviços de TV fazem que este aqui não faz
    • Especialmente olhando os canais japoneses, parece que em https://tv.garden/mais canais
    • Também carrega muito rápido no celular e permite ver canais do mundo todo, então valeria um post próprio
    • Seria bom se saísse como plugin do Jellyfin
    • Até agora, parece ser o site de IPTV mais bem-acabado que já vi
  • É 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

    • Sim, tive ajuda do Claude e também não sou especialista em DLNA ou FFMPEG, mas o importante é que resolveu o problema que eu tinha. Se resolver o problema de outras pessoas também, melhor ainda
    • Também dá para dizer que um compilador foi criado usando bibliotecas do Google e afins. Até o Claude conseguir emitir diretamente código de máquina distribuível, ele é apenas mais uma camada intermediária entre a intenção humana e o resultado final
  • 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

    • O Turnstile está mais para uma ferramenta que vende aos operadores de sites uma sensação vaga de segurança, bloqueia usuários de Tor com JavaScript desativado e incentiva o fornecimento de uma cópia de todo o tráfego à Cloudflare
      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
    • Se você imita os eventos corretos, é difícil distinguir um navegador headless de um navegador real sem detecção de plataforma. Mas não é difícil procurar renderizadores de software no Linux, então, se esse tipo de bypass continuar, é possível que usuários de Linux sejam forçados a passar por uma ou mais verificações adicionais
      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
    • Não se imita apenas o clique na caixa; várias propriedades do navegador também são falsificadas. Um navegador headless comum provavelmente seria detectado
    • Mesmo com sistemas de defesa de milhões de dólares, as pessoas automatizaram WoW por muito tempo colando periféricos com fita em ventiladores vibrando. Automação de navegador headless é como trapaça em FPS: o lado atacante tem a iniciativa e, com tempo e dinheiro suficientes, acaba vencendo
    • Se for possível criar um navegador que passe em todos os outros testes executados em segundo plano, no fim o que resta é clicar na marca de verificação
  • 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

    • Eu achava que a estrutura era procurar o filme nas fontes configuradas e, se não estivesse lá, retornar “não encontrado”. O Stremio também é um app legal, mas, se você adiciona o plugin ilegal Torrentio, ele consegue piratear mídia automaticamente, então o desenvolvimento principal pode ocorrer publicamente
      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
    • A interface mostra os filmes populares no momento de https://www.themoviedb.org/
    • No começo parecia uma ferramenta para enviar à TV vídeos de sites que já eram acessíveis no notebook. Mas a descrição com cara de conteúdo gerado por IA falando em “sites aleatórios” e a opção de chave de API do TVDB deixam confuso qual é o foco real
    • Talvez reproduza apenas trailers, não os filmes em si
  • 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

    • É uma ferramenta de linha de comando que, ao selecionar um filme, encontra um vídeo correspondente em um site de streaming, faz transcodificação, aplica legendas em tempo real e instrui a TV a reproduzi-lo
    • Ela só reproduz streams aos quais você já tem acesso e não quebra criptografia, então não está claro como isso ajudaria na pirataria
    • É uma forma alternativa de transmissão que extrai vídeos em streaming de sites ou serviços e os envia para a TV
    • Como os grandes serviços existentes já oferecem transmissão de tela, fico me perguntando se o uso real acaba sendo algo como streams ilegais de esportes
  • 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

    • Para usar UPnP no macOS passando pela máquina virtual exigida pelo Docker, é bem provável que seja necessário configurar a rede relevante para ficar exposta externamente
  • 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”

    • Trabalho na área de fingerprinting de navegadores e, olhando o repositório, parece que ele só modifica navigator, Audio API e Canvas API. É um nível muito básico, então há grande chance de ser facilmente detectado