8 ポイント 投稿者 GN⁺ 1 일 전 | 2件のコメント | WhatsAppで共有
  • Castor は、Webページや直接のストリームURLから実際の映像ストリームを見つけてTV向けに変換し、画面ミラーリングなしで元の品質のままリアルタイム転送するターミナルツール
  • ヘッドレスChromeと Chrome DevTools Protocol でネットワークトラフィックを監視し、ページのクリック・最大のiframeへの移動・再クリックを経てストリームを抽出するが、自動再生を許可しないページでは動作しない可能性がある
  • DLNA/UPnP 対応のスマートTVやKodi・VLC・Plexで利用でき、Chromecast対応も実装されているが、まだ実験的で未テスト
  • 再生可能なH.264映像は再エンコードせずに転送し、必要に応じてハードウェアエンコーダや libx264 で変換し、whisper で生成した字幕を映像に挿入することもできる
  • 映像・カタログ・ソースを提供したりDRMを回避したりはせず、ユーザーが直接指定し利用権限を持つページとストリームだけを転送するよう設計されている

Web動画を実際のストリームとして転送

  • Castor は、任意のWeb動画を直接転送できないスマートTVや、遅延・解像度低下のある画面ミラーリングの代わりに、実際の映像ストリーム をフル品質で転送する
  • Webページまたは直接のストリームURLを入力すると、動画を探索してストリームを抽出し、TVに合わせてトランスコードしてリアルタイムで転送する
  • ユーザーが構成したソースから IMDB/TMDB ID を参照したり、自動生成字幕を映像に挿入したりできる
  • castor cast を実行すると、ターミナルベースの対話型ブラウザで作品を探して転送できる

ストリーム抽出方式と制限

  • ヘッドレスChromeを起動し、Chrome DevTools Protocol でネットワークトラフィックを監視してストリームを見つける
  • 再生開始のために短い動作パイプラインを実行する
    • ページをクリック
    • 最も大きいiframeへ移動
    • 代替動作として再度クリック
  • 自動再生を許可するページで動作し、すべてのサイトをサポートするわけではない

インストールと実行要件

  • 推奨される方式は、TVと同じネットワークで動作する ネイティブバイナリ
  • 実行環境の PATH に次のツールが必要
    • Chrome または Chromium: ヘッドレスでのストリーム抽出
    • ffmpeg: トランスコーディング
    • ffprobe: メディア形式の検出
  • macOSではHomebrewでインストールできる
brew install --cask stupside/tap/castor
  • ソースビルドには Go 1.26+ とCMakeが必要
    • whisper.cpp バインディングはcgoを使用し、ローカルでビルドした libwhisper.a にリンクされる
    • ローカルの replace と事前ビルド済み静的ライブラリが必要なため、go install は動作しない
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make

基本的な利用フロー

  • castor scan でTV名を見つけ、config.yamldevice に正確な名前とデバイスタイプを指定する
device:
  name: "Living Room TV"
  type: dlna
  • Webページや直接のストリームURLは cast player で転送する
castor cast player https://example.com/watch/some-video
  • 対話型の作品検索にはTMDB APIキーとユーザーが構成したソースが必要で、全コマンドとフラグは castor --help で確認できる

設定とユーザー提供ソース

  • config.yaml は現在のディレクトリ、または --config で指定したパスから読み込み、必須項目は転送先となる デバイス設定 のみ
  • タイムアウト、探索、キャプチャ、トランスコーディング、ネットワークインターフェース、Chromeナビゲーションにはデフォルト値が用意されている
  • シークレット値はGitから除外した config.local.yaml で上書きするか、CASTOR_SECTION__FIELD 形式の環境変数で指定できる
  • cast moviecast episode、対話型ブラウザは、ユーザーが構成したソースに作品IDを代入する
    • Castor自体にはソース、カタログ、検索機能は含まれない
    • ユーザーが作成した templates にIDを代入し、各 proxies を前置してページを開いたあと、cast player と同じ方法でストリームを抽出する
    • 複数のプロキシは指定された順序で試行する
sources:
  - proxies: ["https://your-source.example";]
    templates:
      movie: "/embed/movie/{itemID}"
      episode: "/embed/tv/{itemID}/{season}-{episode}"

TMDB検索と自動字幕

  • 対話型ブラウザは作品検索に TMDB APIキー を使用する
    • キーは themoviedb.org で取得できる
    • cast movie <id> のような直接コマンドにはTMDBキーは不要
  • 自動字幕はwhisperで音声を書き起こして映像に挿入し、デフォルトでは無効になっている
    • デフォルト言語は英語
    • デフォルトモデルは約75MBの ggml-tiny.en で、自動ダウンロードされる

対応デバイス

  • DLNA/UPnP MediaRenderer:1 プロファイルを実装したTVをサポートする
    • Samsungはテスト済みで、LG、Sony Bravia、Panasonic Viera、Philips、Hisense、TCL、VIZIO、Sharpが対応対象
    • Kodi、VLC、Plexのようなネットワークプレーヤーも利用できる
  • castor scan で同一ネットワーク上のデバイスを検索する
  • Chromecast対応は実装済みだが、実験的で未テスト

Dockerの制約とネットワーク構成

  • Linux専用のDockerイメージはChrome、ffmpegffprobe を同梱する
  • Dockerでは、TVと同じLAN上にある Linuxホスト が必要で、SSDPマルチキャスト検出とCastor再生サーバー接続のために --network host を使う必要がある
  • Docker DesktopのmacOS・Windowsでは --network host はLANに接続されない
    • コンテナはDocker Desktop内部VMのサブネットに配置されるため、scan でデバイスを見つけられず、転送も失敗する
    • macOS・Windowsではネイティブバイナリを使うか、Linux VMをLANにブリッジする必要がある
  • /config.yaml をマウントして設定を渡し、ボリュームに自動ダウンロードされたwhisperモデルを保持できる
  • latest の代わりにリリースタグを使えばバージョンを固定できる

メディアパススルーとエンコード

  • TVが許容するプロファイルとレベルのH.264映像をすでに再生できるなら、ストリームコピー を使ってCPU使用量をほぼ0に抑える
  • TVがコーデックを拒否する場合や字幕を挿入する必要がある場合は再エンコードする
    • LinuxのVA-APIやネイティブmacOSバイナリのVideoToolboxのように、実際に動作するハードウェアH.264エンコーダを優先的に選ぶ
    • 利用できなければソフトウェアの libx264 にフォールバックする
  • DockerコンテナでIntel GPUのVA-APIを使うには --device /dev/dri が必要で、--network host だけではGPUは公開されない

用途と制限

  • Castorは特定サイトに結び付いたサービスではない 汎用転送ツール
  • 映像、カタログ、ソースをホスティングしたりバンドル提供したりはせず、ユーザーが指定し利用権限を持つページ・ストリーム・ソースだけを処理する
  • DRMを復号・回避せず、DRM保護サービス は転送できない
  • サイト利用規約と現地法を順守する責任はユーザーにあり、合法的な個人・教育用途向けに現状のまま提供される

2件のコメント

 
xguru 1 일 전

わあ、下のコメントにある https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR 、これすごく便利ですね(笑)
韓国ではブロックされているようですが、海外ではすぐ見られるんでしょうか?

 
GN⁺ 1 일 전
Hacker Newsのコメント
  • 別途回避することなく、チャンネルが公開しているHLSストリームをブラウザで直接再生する TV Explorer を作った。1万件以上の無料チャンネルを収めた公開GitHubリストを活用している
    https://tvexplorer.live

    • 驚くほどスムーズで軽快で、ほぼ即座に反応し、戻る操作もきちんと機能する。字幕ポップアップが一部の画面要素と重なるものの、普通のデスクトップでもアナログNTSC時代にチャンネルを回していたのと同じくらい チャンネル切り替えが速い
      他のTVサービスがやっていて、ここではやっていないことが何なのか気になる
    • 特に日本のチャンネルを見ると https://tv.garden/ のほうが チャンネル数が多いようだ
    • モバイルでも非常に高速に読み込まれ、世界各地のチャンネルを見られるので 別記事で紹介する価値がある
    • Jellyfinプラグイン として出てほしい
    • これまで見た IPTVサイトの中で最も完成度が高く見える
  • ボットが毎回新しいプロフィールのヘッドレスブラウザを起動しなければならない状況はばかげている。Cloudflareはボットを止められないのに双方のリソースだけを浪費させ、接続記録とパスワード をNSAに渡しているようなものなので、昔のインターネットに戻りたい

  • 「ChromecastやAirPlayがなく、ノートPCのWeb動画をTVに送れなかったので作った」という説明だが、Claudeが作ったように見える

    • Claudeの助けを借りたのは事実で、DLNAやFFMPEGの専門家でもないが、自分が抱えていた問題を解決したことが重要だ。他人の問題まで解決できるならなお良い
    • コンパイラがGoogleなどのライブラリを使って作ったとも言える。Claudeが配布可能な機械語を直接出力するようになるまでは、人間の意図と最終成果物の間にある もう一つの中間層 にすぎない
  • Turnstileの本質は、ヘッドレスブラウザを検出して回避しにくくすることだと理解していたが、単にチェックマークのクリックをまねるだけで本当に通過できるのか疑問だ

    • Turnstileはサイト運営者に漠然とした安心感を売り、JavaScriptを無効にしたTorユーザーを遮断し、すべてのトラフィックのコピーをCloudflareに提供するよう促すツールに近い
      実際のセキュリティよりも、Cloudflareが人間とボットを区別せず集計した ブロックされたユーザー数 をマーケティングに使う偽のセキュリティのほうが重要に見える
    • 適切なイベントをまねれば、プラットフォーム検出なしでヘッドレスブラウザと実ブラウザを区別するのは難しい。ただしLinuxのソフトウェアレンダラーを見つけるのは難しくないので、この回避が続けばLinuxユーザーに1つ以上の追加認証を強制する可能性がある
      チェックボックスは一部にすぎず、それ以前までにブラウザのすべての動作やイベント応答を観察して ボットである可能性 に応じて追加認証の有無を決めている
    • チェックのクリックだけをまねるのではなく、さまざまな ブラウザ属性も偽装 している。一般的なヘッドレスブラウザなら検出される可能性が高い
    • 数百万ドル規模の防御体制があっても、人々は振動する扇風機に周辺機器をテープで貼り付けるようなやり方で長年WoWを自動化してきた。ヘッドレスブラウザの自動化もFPSのチートと同じで、攻撃側が主導権 を握っており、十分な時間と資金を投じれば結局は勝てる
    • バックグラウンドで行われる他の検査をすべて通過できるブラウザを作れるなら、最後に残るのは チェックマークのクリック だけだ
  • たいてい海賊版ツールは少なくとももっともらしい否認の余地を残すものだが、ここでは今週末公開の 制作費2億5000万ドルの大作 までストリーミングできると売り込んでいる

    • 設定されたソースから映画を探し、なければ「見つからない」を返す仕組みだと思っていた。Stremioも合法的なアプリだが、違法なTorrentioプラグインを追加するとメディアを自動的に海賊版化できるため、コア開発は公開で進められる
      エミュレータAzaharと、ゲームを自動復号する違法フォークのAzahar Plusも似ているが、改めて見るとこのプロジェクトは 違法ストリーミングサイトを内蔵 している
    • インターフェースは https://www.themoviedb.org/現在人気の映画 を表示するものだ
    • 最初は、すでにアクセス可能なWebサイトの動画をノートPCからTVに送るツールのように見えた。だが「ランダムなWebサイト」というAI生成物のような説明とTVDB APIキーのオプションのせいで、実際の焦点が何なのか混乱する
    • 実際の映画ではなく 予告編だけを再生 している可能性もある
  • 15年以上前の普通のSamsung TVで即座に動作した。https://vsembed.ru/movies/latest/page-1.json のようなすべてのJSONページを解析するよう 自前の検索機能を書く のが最善なのか気になる

  • 説明に文脈が足りず、何に使うツールなのか、海賊版用なのか が分かりにくい

    • 映画を選ぶと、ストリーミングサイトで一致する映像を探してトランスコードし、字幕をリアルタイムで焼き込んだうえでTVに再生を指示する コマンドラインツール
    • すでにアクセスできるストリームだけを再生し、暗号化を破るわけでもないので、これがどう海賊版に役立つのかははっきりしない
    • Webサイトやサービスからストリーミング動画を取り出してTVに送る 代替キャスト方式
    • 既存の大手サービスはすでにキャストをサポートしているので、実際の用途は結局 違法スポーツ配信 のようなものなのではと疑問に思う
  • トレントを使うのと 手間が大差なく、あえて使う理由が分からない

  • macOSのDocker版では TVを見つけられない可能性がある

    • macOSでDockerに必要な仮想マシン越しにUPnPを使うには、関連ネットワークを 外部に公開するよう設定 する必要がある可能性が高い
  • 「ランダムなフィンガープリントとステルススクリプトで自動化を隠すヘッドレスChromeを実行する」という部分で 信頼を失った

    • ブラウザフィンガープリント分野で働いていてリポジトリを見たところ、navigator、Audio API、Canvas APIだけを変更しているようだ。非常に基本的な水準なので 簡単に検出される可能性 が高い