プログラミング
IPTVよりも優れて安価
Better and Cheaper Than IPTV (github.com)
要約
Castorは、ウェブサイトから動画ストリームを抽出し、フォーマット互換性を処理し、リアルタイムでテレビにキャストできるコマンドラインインターフェース(CLI)ツールです。オプションで自動生成された字幕を動画に直接焼き込むことも可能です。ターミナルから離れることなく、トレンドのタイトルを閲覧したり、TMDBを検索したり、ポスターやメタデータを検査したりして、キャストできます。
全文翻訳
Castor
素晴らしいテレビを購入したのに、ランダムなウェブサイトからキャストできないことに気づいたと想像してみてください...。次に、見つけられる最も長いHDMIケーブルに切り替えます。次に、画面ミラーリングを開始します。コンピューターが遅延し、解像度が低下し、何もかもうまくいかないように感じます。Castorは、ウェブサイトから動画ストリームを抽出し、フォーマット互換性を処理し、リアルタイムでテレビにキャストできるCLIであり、オプションで自動生成された字幕を動画に直接焼き込むことができます。castor castを実行すると、トレンドのタイトルを閲覧したり、TMDBを検索したり、ポスターやメタデータを検査したりしてから、ターミナルを離れることなくキャストできます。
注:抽出はどのように機能しますか?
Castorは、ランダム化されたブラウザフィンガープリントと自動化を隠すためのステルススクリプトを備えたヘッドレスChromeを起動します。Chrome DevTools Protocolを介してすべてのネットワークアクティビティをリッスンし、動画ストリームをキャプチャしてから、アクションパイプラインを実行します。ページをクリックし、最大のiframeに移動し、検出された場合はCloudflare Turnstileを解決し、フォールバックとして再度クリックします。これはほとんどのストリーミングウェブサイトで機能しますが、洗練されたボット保護には勝てません。
インストール
Homebrewとソースビルドは、PATHにChrome/Chromium(ヘッドレス抽出)、ffmpeg(トランスコーディング)、およびffprobe(フォーマット検出)を必要とするネイティブバイナリをビルドします。Dockerイメージはこれら3つすべてをバンドルしているため、設定のみを提供します。
Homebrew (macOS)
brew install --cask stupside/tap/castor
Docker
ghcr.io/stupside/castorはChrome、ffmpeg、ffprobeをバンドルして出荷しています。
# デバイスの検出(設定不要)
docker run --rm --network host ghcr.io/stupside/castor:latest scan
# 設定をマウントし、永続的なモデルキャッシュを使用してキャスト
docker run --rm --network host \
-v "$PWD/config.yaml:/config.yaml" \
-v castor-cache:/root/.cache \
ghcr.io/stupside/castor:latest \
cast player https://www.fmovies.gd/watch/movie/1315303
重要:--network hostが必要です。デバイス検出はSSDPマルチキャストであり、テレビはCastorのリプレイサーバーからストリーミングバックします。どちらもDockerのブリッジネットワークでは生き残りません。ホストネットワーキングはLinuxでのみ実際的です。Docker Desktop(macOS/Windows)ではテレビに到達しないため、代わりにそこでネイティブにバイナリを実行してください。castor-cacheボリュームは、実行間で自動ダウンロードされたwhisperモデル(約75MB)を保持します。リリースを固定するには、:latestを:v1.0.0に切り替えてください。
ソースから
Go 1.26+とcmakeが必要です(whisper.cppのバインディングはcgoであり、ローカルでビルドされたlibwhisper.aにリンクします):
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make # libwhisper.aをビルドし、次にcastorバイナリをビルドします
go install は機能しません。ベンダーされたwhisper.cppバインディングはローカルのreplaceを介して提供され、その事前ビルドされた静的ライブラリが必要です。
サポートされているデバイス
DLNA / UPnP
DLNA/UPnP MediaRenderer:1プロファイルを実装する任意のテレビは機能します。これは、過去10年間に販売されたほぼすべてのスマートテレビ(Samsung(テスト済み)、LG、Sony Bravia、Panasonic Viera、Philips、Hisense、TCL、VIZIO、Sharp)をカバーしています。Kodi、VLC、Plexなどのネットワークプレーヤーも機能します。 castor scanを実行してネットワーク上のデバイスを検出してください。
Chromecast
警告:実験的です。実装されていますが、テストされていません。貢献を歓迎します。
クイックスタート
Castorは現在のディレクトリにconfig.yamlを必要とします(または--configを渡します)。すべてのメカニカルな部分は動作するデフォルト値で出荷されるため、ファイルにはキャストするデバイス、キャスト元のソース、およびブラウザ用の無料のTMDB APIキーを指定するだけで済みます。
# 1. テレビの正確な名前を見つける
castor scan
その名前でconfig.yamlを作成します:
device:
name: "Living Room TV" # `castor scan`からの正確な名前
type: dlna
sources:
- proxies:
- "https://vidsrc-embed.ru"
templates:
movie: "/embed/movie/{itemID}"
episode: "/embed/tv/{itemID}/{season}-{episode}"
tmdb:
api_key: "<YOUR_TMDB_API_KEY>" # https://www.themoviedb.org/settings/api から無料
# 2. インタラクティブなTUIから閲覧してキャスト
castor cast
castor castは最初にキャストするデバイスを尋ねます。ネットワーク上のすべてのDLNA/UPnPレンダラーがオンザフライで検出され、設定済みのデバイスがプリセットされています。
次に、TMDBベースのブラウザが開きます。ジャンルでフィルタリングし、検索し、ポスターとメタデータを検査し、シリーズのエピソードにドリルダウンし、選択したものをキャストします。
ヒント:TMDBキーがない場合?ブラウザをスキップして、IDから直接タイトルをキャストできます。設定のソースを使用して、castor cast movie tt33028778 を実行します。使用方法を参照してください。
使用方法
# インタラクティブなTMDBブラウザ:検索、映画/エピソードを選択、キャスト(tmdb.api_keyが必要)
castor cast
# ストリーミングサイトのプレーヤーページからキャスト
castor cast player https://www.fmovies.gd/watch/movie/1315303
# IMDB/TMDB IDでキャスト、設定のソースを使用
castor cast movie tt33028778
castor cast episode tt2699128 --season 1 --episode 3
# 生のストリームURLを直接キャスト
castor cast url https://example.com/stream.m3u8
# 便利なフラグ
castor cast movie --dry-run tt33028778 # キャストせずに見つかったURLを表示
castor --debug cast player https://... # 詳細なログ
castor scan # ネットワーク上のデバイスを検出
castor info # バージョン/ビルド情報
設定
クイックスタートは必須キーをカバーしています。それ以外は、すべてのメカニカルな部分(タイムアウト、プロービング、キャプチャ、トランスコーディング、Chrome検出)は動作するデフォルト値で出荷されます。config.yamlでオーバーライドするか、--configで別のファイルを指定するか、gitで無視される同名のconfig.local.yamlに秘密情報(TMDBキーなど)をドロップするか(config.yamlをオーバーレイします)、CASTOR_SECTION__FIELD環境変数を設定します。呼び出す価値のある唯一のオプトインは、動画に焼き込まれる自動生成字幕です。
whisper:
enable: true # デフォルトではオフ
# language: "fr" # デフォルト:英語
# model_path: "" # デフォルト:ggml-tiny.en(約75MB、自動ダウンロード)
貢献
CONTRIBUTING.mdを参照してください。