善忘技术夹 Logo
善忘技术夹
开源前沿 · 150 阅读

网页视频怎么投到电视?Castor 用抓流与转码打通大屏

不少在线视频只有网页播放器,没有电视端应用。直接镜像浏览器虽然省事,却可能遇到延迟、掉帧和分辨率下降;先把视频下载到本地再播放,流程又太长。

Castor 提供了第三种思路:从网页请求中找到真实视频流,必要时用 ffmpeg 转码,再通过 DLNA、Chromecast 或 Roku 把流交给电视播放。它面向愿意使用命令行、希望自己控制播放链路的用户,而不是”一键投屏”的大众产品。

Castor 是什么

Castor TUI 标题浏览界面

Castor 是开发者 stupside 用 Go 编写的终端工具,采用 MIT 许可证。你可以把一个播放页面、视频直链,或者配置好的电影与剧集来源交给它;Castor 会提取视频流、探测格式,并根据电视能力决定直接转封装、复制流或重新编码。

目前官方将 DLNA 列为主要验证路径,Chromecast 和 Roku 支持仍标注为实验性、未经充分测试。Roku 还需要侧载 Castor 自带的频道。因此,“电视支持其中一种协议就一定能用”并不准确,实际效果仍取决于设备、网络和视频格式。

它怎样找到网页中的视频

Castor 会启动一个独立的无头 Chrome,通过 Chrome DevTools Protocol 监听目标页面的网络流量。为了触发播放,它会尝试点击页面、进入最大的 iframe,并再次点击作为兜底。一旦网页开始请求媒体资源,Castor 就有机会拿到真实流地址。

这套方法不依赖网页主动提供投屏按钮,但也不是万能解析器。页面结构变化、登录状态、验证码、自动播放限制和 DRM 都可能让提取失败。官方明确说明 Castor 不解密也不绕过 DRM,因此它不能用于受 DRM 保护的流媒体服务。

拿到流地址后,Castor 用 ffprobe 探测编码、封装和分辨率,再根据配置中的 max_height 选择合适的流。如果电视能够直接播放,Castor 会尽量使用 stream copy,避免重复编码;格式不兼容时才调用 ffmpeg 转码。最后,它在局域网中临时提供媒体流,并通过相应投屏协议通知电视拉取。

Castor 设备选择界面

原生运行需要近期版本的 Chrome 或 Chromium,以及 ffmpeg、ffprobe 7.1 以上版本。官方 Docker 镜像已经打包这些依赖,但只适合与电视处于同一局域网的 Linux 主机,并且需要 host 网络;Docker Desktop 在 macOS 和 Windows 上无法用这种方式完成设备发现,应改用原生二进制。

常用命令

先用下面的命令扫描局域网设备:

castor scan

找到设备后,把名称和类型写入 config.yaml。如果 SSDP 或 mDNS 多播被路由器、VLAN 或系统限制拦截,也可以通过 device.host 固定设备 IP,改走单播连接。

投放含嵌入式播放器的网页:

castor cast player <url>

投放已知的 .mp4、.m3u8 等视频或流地址:

castor cast url <url>

如果已经配置 TMDB Key 和自己的内容来源,还可以按电影或剧集 ID 解析并播放:

castor cast movie <id>
castor cast episode <id> --season N --episode N

这里的 TMDB 只用于查询标题信息,视频来源需要用户自行配置。Castor 不提供影视目录或内容源。

Castor 还集成了 whisper.cpp,可以在转码过程中生成并烧录字幕。这个能力适合缺少字幕的内容,但会增加模型下载、CPU/GPU 占用和启动时间;从源码构建时,还需要处理 whisper.cpp 的本地静态库依赖。

与其他投屏方式相比

浏览器自带投屏的优势是门槛低,适合主流网站和受支持的设备。Castor 的优势在于它可以处理用户提供的网页或直链,并根据电视能力转码;劣势则是依赖较多,而且网页提取并不保证成功。

电视原生 App 通常拥有更完整的账号、清晰度和 DRM 授权体验。如果目标平台已经提供电视端应用,优先使用官方 App 往往更稳定。Castor 更适合没有电视端入口、内容又允许以这种方式播放的场景。

Jellyfin、Plex 等媒体服务器适合已经整理到本地的媒体库。Castor 更偏向临时把网页流”桥接”到电视,两者解决的不是同一个环节。

门槛与安全边界

Castor 的配置成本不低。除了命令行基础,还要处理浏览器、ffmpeg、局域网发现和电视格式兼容。DLNA 设备差异很大,Chromecast 与 Roku 又仍处于实验性支持阶段,最好先用一段自有视频测试设备链路,再处理复杂网页。

隐私方面,Castor 会使用与日常浏览器隔离的无头 Chrome 配置,项目也声明不收集遥测。但投屏时启动的局域网 HTTP 服务没有认证,这是 DLNA 兼容性的现实限制。应只在可信局域网中运行,并把 TMDB Key 等凭证放进被 Git 忽略的 config.local.yaml 或环境变量,而不是提交到公开仓库。

使用边界同样需要说清楚:Castor 只负责投放用户提供的页面、流地址或已配置来源,不提供内容,也不绕过 DRM。是否符合网站条款、内容授权和当地法律,需要由使用者自行确认。

谁适合使用

如果家里有支持 DLNA 的电视,平时经常在浏览器观看允许投放的视频,又愿意处理命令行和媒体格式问题,Castor 值得尝试。对已有 Linux 主机或家庭服务器的用户,Docker 镜像还能省去依赖安装。

如果只需要偶尔投一次屏,或者不想维护任何环境,浏览器投屏和电视原生 App 仍然更合适。Castor 更像一座可自行调试的影音桥,而不是消费级成品。

macOS 用户可以使用:

brew install --cask stupside/tap/castor

项目地址:github.com/stupside/castor。建议先运行 castor scan 验证设备发现,再用自有视频直链测试播放;这两步通过后,再尝试结构更复杂的网页。

关注「善忘技术夹」全媒体矩阵

扫描上方宣传海报二维码,第一时间获取最新技术文章、开源项目与免安装小程序体验。

善忘技术夹 微信公众号宣传图
微信公众号 (扫码关注)
善忘技术夹 微信小程序宣传图
微信小程序 (扫码即用)