比IPTV更优更廉的新选择
速览
一种新兴的流媒体服务在价格和体验上均优于传统的IPTV,有望吸引大量用户转向。其低成本与高质量内容组合可能颠覆现有电视订阅模式,但具体服务商和内容授权仍需关注。
AI 深度解读
背景
传统电视投屏体验往往令人沮丧:买了一台不错的智能电视,却发现无法从任意网站直接投屏。于是你开始寻找最长的 HDMI 线缆,接着尝试屏幕镜像——电脑卡顿、分辨率下降、一切都不对劲。这类问题长期困扰着用户,而 IPTV 服务虽然能提供直播内容,但存在成本高、受限于特定平台、内容来源有限等问题。在此背景下,Castor 应运而生,它是一款开源 CLI 工具,旨在更高效、更廉价地实现从任意网站向电视的实时投屏。
核心内容
Castor 是一个命令行工具,能够从网站提取视频流,处理格式兼容性问题,并实时投射到电视上,同时支持自动生成字幕并直接烧录到视频中。其核心功能通过 castor cast 命令实现:用户可以在终端中浏览热门标题、搜索 TMDB 数据库、查看海报和元数据,然后直接投屏——全程无需离开终端。
提取机制
Castor 的工作原理是:启动一个无头 Chrome 浏览器,并使用随机化的浏览器指纹和反自动化检测脚本隐藏自动化痕迹。通过 Chrome DevTools Protocol 监听所有网络活动,捕获视频流,然后执行一系列操作:点击页面、导航到最大的 iframe、检测并解决 Cloudflare Turnstile 验证(如遇),最后再次点击作为回退。这一方法适用于大多数流媒体网站,但无法应对高级的机器人防护。
安装方式
Castor 提供多种安装方式:
- Homebrew:
brew install --cask stupside/tap/castor,但需要本地安装 Chrome/Chromium(用于无头提取)、ffmpeg(用于转码)和 ffprobe(用于格式检测),且这些工具需在 PATH 中。 - Docker 镜像:
ghcr.io/stupside/castor已内置 Chrome、ffmpeg 和 ffprobe,只需提供配置文件。运行容器时需使用--network host模式,因为设备发现基于 SSDP 多播,且电视需要从 Castor 的重播服务器接收流,Docker 的桥接网络无法支持。注意:Docker Desktop(macOS/Windows)上 host 网络模式无效,应原生运行二进制文件。 - 源码编译:需要 Go 1.26+ 和 cmake(whisper.cpp 绑定通过 cgo 链接本地构建的 libwhisper.a)。克隆仓库后执行
make命令构建,go install不适用,因为 vendored 的 whisper.cpp 绑定依赖本地替换和预构建的静态库。
设备兼容性
任何实现 DLNA/UPnP MediaRenderer:1 配置文件的电视均可工作,这覆盖了过去十年几乎所有智能电视品牌:Samsung(已测试)、LG、Sony Bravia、Panasonic Viera、Philips、Hisense、TCL、VIZIO、Sharp。此外,网络播放器如 Kodi、VLC、Plex 也能兼容。通过 castor scan 命令可发现网络中的设备。
配置与使用
Castor 需要一个 config.yaml 文件(位于当前目录,或通过 --config 指定)。所有机械参数(超时、探测、捕获、转码、Chrome 发现)均提供工作默认值,因此配置文件只需声明:
- 目标设备名称(来自
castor scan输出) - 来源代理(如
https://vidsrc-embed.ru)及模板 - TMDB API 密钥(免费获取,用于浏览)
支持多种投屏方式:
castor cast:交互式 TUI 浏览器,基于 TMDB 按流分类、搜索、查看海报和元数据,选择剧集后投屏。castor cast player <URL>:直接指定流媒体网站播放页面的 URL。castor cast movie <id>/castor cast episode <id> --season N --episode M:通过 IMDB/TMDB ID 投屏,使用配置中的来源。castor cast url <URL>:直接投屏原始流地址(如 m3u8 链接)。
额外支持 --dry-run 仅打印 URL 而不实际投屏,以及 --debug 输出详细日志。
字幕功能(可选)
Castor 支持自动生成字幕并烧录到视频中,默认关闭。在配置中设置 whisper.enable: true 即可启用,可指定语言(如法语)或模型路径。默认使用 ggml-tiny.en 模型(约 75 MB,自动下载),模型缓存通过 Docker 卷 castor-cache 持久化。
环境变量与配置覆盖
除 config.yaml 外,支持通过 --config 指定不同文件,或使用 config.local.yaml(会被 git 忽略)覆盖主配置,也可设置 CASTOR_SECTION__FIELD 环境变量。
关键要点
- 工作原理:通过无头 Chrome 模拟真实用户,拦截网络请求捕获视频流,绕过简单的反爬机制(如 Cloudflare Turnstile),但无法应对高级防护。
- 安装方式:支持 Homebrew(需本地依赖)、Docker(内置所有依赖,但需 host 网络模式)和源码编译(需 Go 1.26+ 和 cmake)。
- 设备兼容性:所有支持 DLNA/UPnP MediaRenderer:1 的智能电视及网络播放器(如 Kodi、VLC、Plex)均可使用,通过
castor scan自动发现。 - 配置需求:只需提供设备名称、来源代理模板和 TMDB API 密钥,其他参数有默认值;支持通过
--config、config.local.yaml和环境变量覆盖。 - 投屏方式:支持交互式 TUI 浏览器、直接 URL、IMDB/TMDB ID 以及原始流地址,同时提供 dry-run 和 debug 模式。
- 字幕功能:可选启用 Whisper 自动生成字幕并烧录,英语模型约 75 MB,支持自定义语言和模型路径。
- 注意事项:Docker 下必须使用
--network host且仅 Linux 有效;Windows/macOS 需原生运行二进制文件;castor cast首次需 TMDB API 密钥,否则可直接通过 ID 投屏。
意义与影响
Castor 的出现为传统 IPTV 服务提供了一种更便宜、更灵活的替代方案。它打破了流媒体网站与电视之间的壁垒,让用户无需订阅昂贵的 IPTV 或购买专用硬件,即可将任意来源的视频流投射到电视上。其开源特性(GitHub 仓库)意味着社区可以参与改进、贡献代码,并自行定制行为。
从技术角度看,Castor 展示了如何将 Chrome DevTools Protocol、无头浏览器、FFmpeg 转码、DLNA/UPnP 协议以及 Whisper 语音识别等工具链有机整合,形成一个实用的单命令行工具。它降低了投屏门槛,尤其适合技术用户
