Vibe Coding for TV:开源了一个电视投屏接收器

Vibe Coding for TV:开源了一个电视投屏接收器

TL;DR

一台 32 位的旧 Fire TV,一个晚上:系统精简出 1.9GB 存储,再从零写出一个 5MB 的开源投屏接收器,90 个单元测试和真机 E2E 全绿。

背景

几年前陆续买过两台外贸电视。所谓外贸电视,就是国内厂商给国外品牌代工的产品——我买的两台,一台是给 ONN 代工的;另一台就是今天要聊的这台 Amazon Fire TV,由 TCL 给 Amazon 代工,OEM 型号里的 SCBC_431PB-R 对应 43 寸 4K 面板。

配置放几年前还算能打:联发科 MT7632,四核 Cortex-A55,1.6GB 内存外加 400MB swap,支持 4K 和 HDR。系统是 Fire OS 7.7.1.7,基于 Android 9(SDK 28)。当年国产电视还满屏开机广告的时候,Fire OS 已经是 Amazon 自家的内容推荐,外加 Netflix、Disney+ 这些海外流媒体,观感干净不少。

不过臃肿也是真臃肿:系统里塞满了 Amazon 自家的推荐内容和海外流媒体。后来卖家给刷了一个精简固件,清爽了一些,但该有的系统应用一个没少。断断续续用了几年,我主要拿它看 YouTube,偶尔用极空间 App 连一下 NAS。整体体验不错,就是系统反应有点迟钝——毕竟 1.6GB 内存,日积月累谁都会胖。

第一步:给老电视「减负」

昨天突发奇想,打开开发者模式和 USB 调试,把电视交给了 DeepSeek Harness。

一通分析之后,它给出了诊断:可卸载的预装软件和系统组件一大把。第一轮清下来,存储从 3.8GB 占用降到 2.5GB;第二轮再清理卸载残留、广告缓存和系统应用缓存,最终占用停在 1.9GB——可用空间从 63% 涨到 81%,一共释放了 1.9GB。

顺手做的几件事:

  • 禁用后台遥测(ACR 画面识别)、营销推荐和强制 OTA 升级
  • 限制第三方应用退出后驻留后台,可用内存从 347MB 涨到 660MB
  • 全局动画从 1.0x 调到 0.5x

一通处理之后,流畅度改善非常明显。找来儿子体验了一下,他的评价是:遥控器操作非常跟手,频繁开关 App 的速度也快了不少。

真正的痛点:投屏

这还没完,重头戏在后面。用过智能电视的朋友应该深有同感:投屏是个大问题。要么依赖视频平台自己的 App,要么装个独立的投屏接收软件。前者每个 App 都臃肿庞大;后者有广告、还动不动提示购买会员——App 的名字我就不提了,市面上也就那么一两个。

现在有了 AI 和 vibe coding,何不自己做一个?睡觉前,我把痛点和需求一股脑输出给了 DeepSeek Harness,想着它今晚可以完成编码和单元测试,我后面再安排时间做真机测试。

半夜起来上厕所,发现电视开着。我还以为睡前忘了关,走近一看,界面在动——原来是它自己通过局域网唤醒了电视(这台电视长期处于深度休眠状态),在做真机测试呢。

然后,就有了这个开源项目:

https://github.com/addozhang/leancast

LeanCast 能做什么

LeanCast 是一个跑在电视/盒子上的 DLNA/UPnP 投屏接收器。手机视频 App 里点右上角的 [TV],选中它就直接播放——没有广告、不用登录、全程只在局域网内通信。

  • 标准协议:完整实现 UPnP AV MediaRenderer,B 站、腾讯、优酷、爱奇艺、央视频、夸克的投屏按钮通吃
  • 硬件解码:基于 Media3/ExoPlayer,支持 HLS、MP4/MKV、FLV(尽力),4K 硬解
  • TV 原生操控:进度条、暂停/播放提示、片名展示,长按快进还有阶梯加速——10 秒起步,按住不放逐步加到 5 分钟
  • 中英文界面,一键切换

作为对比,同一台电视上的商业投屏 App:开机广告、投屏等待广告、清晰度要会员。LeanCast 这些都没有,因为它是给你自己的电视装的,广告没法投进自己家里。

资源占用

老电视最值钱的就是内存和存储,所以这点我用实测数据说话(主测试设备就是这台 Fire TV,1.6GB 内存):

状态内存 (PSS)CPU存储
空闲待命63–72 MB(私有约 33 MB)≈ 0%安装包 5 MB + 数据 < 0.1 MB
播放 1080p≈ 74 MB全机约 4–5%—

作为对比:Fire TV 自带的桌面本身就要 83MB。也就是说,LeanCast 比电视自带的桌面还省。

兼容性与限制

先说结论:Fire TV 实测通过,目前只有这一台实机。

架构上它是个纯 Kotlin、无原生库的 APK,minSdk 21(Android 5.0),一个安装包通吃 32 位和 64 位。所以理论上:

  • 预期兼容:认证 Android TV / Google TV(索尼、TCL、飞利浦)、NVIDIA Shield、Amlogic/Rockchip 方案的盒子
  • 实验性:允许安装第三方应用的国产智能电视(MIUI TV、酷开、海信安卓机型)
  • 不支持:三星(Tizen)、LG(webOS)、华为智慧屏(HarmonyOS)——没有安卓应用运行时,神仙难救

发布到 V2EX 之后,很快收到一位索尼电视用户(Android 10)的反馈:投屏后只有声音没有画面。排查下来是个时序竞态——性能好的电视上,播放器实例的创建会比界面启动还晚,视频画面没来得及挂载。修复已经随 v0.2.1 发布,还在等他验证结果。

这种「用户反馈 → 修复 → 发版」的闭环,正是把它开源出来的原因之一:我一个人只有一台电视,但社区里有各种各样的电视。

写在最后

整个过程的分工大概是这样:我负责提需求、验收和偶尔的拍板,AI 负责编码、单元测试、真机测试,甚至自己唤醒电视。我真正写下的东西,只有需求描述和几轮「这里不对,改」。

有人说这不算编程。我倒觉得无所谓——最终交付物是一个 90 个单元测试、E2E 全绿、真实解决了自家痛点的开源项目。至于过程里是我写的还是 AI 写的,电视不关心,家里人也不关心。

如果你家也有一台吃灰的安卓电视或盒子,欢迎试用和反馈:

  • 仓库:https://github.com/addozhang/leancast
  • 下载:Releases 页面直接下 APK,当前 v0.2.1
  • 兼容性反馈:仓库里有专门的 Issue 模板,帮你把设备加进支持矩阵
乱世浮生微信公众号二维码

(转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)