ElderTV 1.1.6:换线路不再跳集,连按左右键只跳一次

这一版的起因是我看到了另一个同源的项目 wobuhui666/TV。它和 ElderTV 一样出自 FongMi/TV,功能多得多,界面也重做过。我的第一反应是很多东西可以直接拿来用。装到电视上实测以后,结论变成了:只借它的几段逻辑,不搬界面。这篇先写实测,再写借来的东西在电视上的表现,包括一次单元测试全过、上了电视却黑屏的经过。
下面的截图都来自同一台雷鸟电视(Android 11,32 位,2.8GB 内存),截图缩到了 1280×720。
先量了再决定借什么
把它的 32 位安装包和 ElderTV 1.1.5 装在同一台电视上,两个应用交替跑,每项 3 轮取中间值:
| 指标 | wobuhui666/TV | ElderTV 1.1.5 |
|---|---|---|
| 冷启动 | 2099 毫秒 | 440 毫秒 |
| 首页连按方向键,最慢的一帧 | 300 毫秒 | 21 毫秒 |
| 首页停稳后占用内存 | 234MB | 88MB |
| 搜索页移动焦点,掉帧 | 0 | 0 |
搜索页两边一样流畅,说明它用的界面技术本身在这台电视上跑得动。卡的是海报多的首页和连按按键,最慢的一帧 300 毫秒,相当于画面停了十几帧。老人长按遥控器正好是这个场景。
这次对比有一处不公平:它没有配片源,首页是联网拉的海报;ElderTV 用的是本地观看记录和真实片源。详情页和播放页没有比。
所以界面不搬。它有几段和界面无关的逻辑写得比 ElderTV 细,带着单元测试,这一版移了两段过来。两个项目都是 GPL-3.0,移入的文件第一行都注明了来源和提交号,源码里新增了一份 NOTICE.md。
换线路、换片源后跳到别的集
换线路以后,程序要在新线路的列表里找到“刚才看的那一集”。ElderTV 以前的找法是取集名里的第一个数字来比。这个办法在几种集名上会出错:
- 上下集:“第12集上”和“第12集下”取出来都是 12。
- 不同版本:“第3期”和“第3期会员版”取出来都是 3。
- 带日期的综艺:年份会被去掉,“2026-03-01 第3期”和“2026-03-08 第3期”剩下的第一个数字都是 3。
移过来的识别规则把集名拆成季、集、上下集、版本和播出日期,几项都对得上才算同一集,对不上就不选。它自带的 100 个测试用例在 ElderTV 里原样通过。
电视上先测最普通的情况。《西游记粤语》在一个片源看到第 06 集,点“换源”:

换到另一个片源,仍然停在第 06 集,并且出了画面:

单元测试全过,上了电视黑屏
接着换到第三个片源。这个片源把两集合成一项,集名写成“第01-02集”“第03-04集”。换过去以后,没有任何一集被选中,画面是黑的,也没有提示:

这张图是开发中的测试包,不是 1.1.5,也不是发布出去的 1.1.6。当时全量 1286 个单元测试是全过的。
原因在移过来的规则里:它把“第05-06集”这种写法判为“不能当成可靠的单集”,于是一律不匹配,连名字一模一样的项也不认。这台电视在那个片源上本来有一条观看记录,记的是“第01-02集”,换过去时拿这个名字去找,找不到。对原项目的用户来说,停下来等人手选是合理的;对老人来说就是黑屏。
1.1.6 在它的规则外面加了三条 ElderTV 自己的:
- 新线路上有名字完全相同的一项,而且只有一项,就用它。
- 找某一集时,有一项包含这一集,就选它。找第 6 集,选“第05-06集”。
- 从合并的一项换到普通线路,落在其中的第一集。“第05-06集”换出去是第 5 集。
跨度超过 5 集的不算合并集,免得把“第1-30集”这种整季合集当成其中某一集。
重新打包再测。换到合并集的片源,选中了“第05-06集”,出了画面:

从“第05-06集”换到一个没看过的片源,落在第 5 集:

这三条里,电视上验到的是第一条和第三条。第二条(找第 6 集落到“第05-06集”)只有单元测试。原因是下面“已知情况”里的那个做法:换到以前看过的站,程序用的是那个站自己的记录,我想验的那条路被它挡住了。
综艺的下一期和换源
综艺的集名常常是日期。《你好湖南》的列表里 7 月 23 日后面是 7 月 27 日,中间几天没有节目。看着 23 日那期按“下一集”,到了 27 日:

换到另一个片源,那边的集名写成“第20260723期”,选中的仍然是同一期:

有一种情况没有处理好:换过去的片源没有正在看的那一期时,会从第一期开始,没有任何提示。测试时从 7 月 27 日那期换到一个没有这一期的片源,落在了 7 月 20 日。这一点和 1.1.5 相比没有变化,放在剩余问题里。
综艺一期拆成上期、下期、加更的情况,规则是接着同一类的下一项,不会从上期跳到加更。这部分只有单元测试,电视上没有找到这样的节目来验。
连按左右键只跳一次
这一条和下面两条来自 FongMi 上游 5.8.7 的修复。ElderTV 和上游没有共同的提交历史,不能直接合并,是读了上游的改动以后按 ElderTV 的代码结构重写的。
以前按一下左键或右键,程序过 0.25 秒发起一次跳转,这次跳转一旦排上就撤不回来。连按三下,就是三次跳转、三次缓冲。按了左又按右,本来应该等于没按,实际上还是会跳一次并且恢复播放。
现在连按的几下会合成一次。验证时没有靠眼睛看画面,而是读系统记录的播放位置:
| 操作 | 之前的位置 | 之后的位置 | 结果 |
|---|---|---|---|
| 暂停时,左键三下 | 383.572 秒 | 353.586 秒 | 退了 30 秒 |
| 播放中,快速左键三下 | 381.858 秒 | 351.858 秒 | 正好退 30 秒,一次跳转 |
| 快速按左、右各一下 | 377.949 秒 | 接着往下播 | 没有跳 |
| 暂停时,按左、右各一下 | 351.858 秒 | 351.858 秒 | 位置不变,仍然暂停 |
到最后一集再按“下一集”,会提示已经是最后一集:

前一部片把新的暂停掉
退出一部片、马上开另一部时,前一个播放页退场得比新的播放页晚。它退场时会做几件收尾的事:暂停播放、清掉遥控器“上一集、下一集”的回调。以前这些动作只认“是不是同一个播放任务”,不认“是谁发起的”,于是可能把新播放页的播放暂停掉,或者让新播放页的上一集、下一集失灵。
现在播放服务会记住当前归哪个播放页,只有它能暂停和改回调。电视上验到了一次:连开三部片以后按“下一集”,换的是当前这部的下一期,系统里显示的片名和集名也是当前这部。
另一条相关的修复是直接开始播放前先取消上一次没做完的解析。这条在电视上没有构造出场景,只读过代码。
央视直播:一个来源没画面就试下一个
有一条上报说,一台电视上直播换台要等一两分钟。原因是央视频网页在那台电视上出不了画面,程序每换一个台都要等它超时,而且不记得它刚刚失败过。
1.1.6 的做法:网页十几秒没有画面时,开始试另一个来源,谁先出画面用谁;一个网页来源连续两次没画面,接下来 30 分钟排到后面。
我这台电视上的 CCTV5 有两个来源,都是网页。换到 CCTV5,第一个来源 20 秒没有画面:

换到第二个来源以后出了画面,从换台算起一共 53.5 秒:

能出画面了,但 53 秒还是太慢。这台电视的直播列表里没有直接拉流的线路,所以“网页和线路同时试、谁快用谁”这一段没有在电视上跑到。
CCTV-5+ 的几条线路不再花屏
这段也是从 wobuhui666/TV 移过来的。有几条 CCTV-5+ 的线路,视频数据用了一种特殊的打包方式,列表里又没有声明,直接解码就是花的。
在电脑上实际拉了 6 条这样的线路:直接解码,每个分片报 120 到 128 行错误;经过新加的转换以后是 0 行,画面是 720p。
这一条没有在电视上验证。我这台电视现在的直播列表里没有这几条线路。另外它只在默认的 Exo 播放内核下生效。
量过以后没做的两件事
自动跳过片头片尾。 那个项目接了三个境外的社区数据库。我拿 16 部国产剧的 32 集去查:播放时长和库里记录的平台版本刚好对得上时,62% 的集有片头片尾数据;按 45 分钟估算时长去查,片尾一条都对不上。数据库要求时长误差不超过 0.5%,而 ElderTV 的片源是第三方转码的,时长大概率和平台版本对不上。这一点是推测,没有拿实际片源的时长去验。结论是先不做。更适合老人的做法可能是:同一部剧记住手动设过一次的片头片尾时长。
新版的插件接口。 上游今年 10 月给第三方源发布了一套新接口。查了公开的 1800 多个 js 和 py 脚本,没有一个用到;近期的 21 条上报里也没有因为缺接口而报错的。但上游官方最新的示例插件已经在用了。这次没做,等真有源因此跑不起来再补。jar 这边只有 24 个样本,这个结论不算硬。
剩余问题和进度
| 问题 | 现状 | 下一步 |
|---|---|---|
| 换到以前看过的站,接着那个站上次的地方播 | 原来就有的做法,这一版没改。在甲站看到第 8 集,换到看过的乙站,会回到乙站上次的进度 | 决定要不要改成“跟着刚才看的那一集” |
| 换过去的站没有正在看的那一期 | 从第一期开始,没有提示 | 加一句提示,或者留在原来的站 |
| 找某一集落到合并项 | 只有单元测试 | 找一个没看过、又有合并集的片源实测 |
| 混着两个版本的线路的连播 | 只有单元测试 | 找到这样的线路实测 |
| CCTV-5+ 线路 | 电脑上验过解码,电视上没有这几条线路 | 换一份带这几条线路的直播列表实测 |
| 从列表直接打开指定的某一集、文件夹里的筛选 | 只有单元测试,没找到用得上的片源 | 找到对应的片源实测 |
| 央视直播换台慢 | CCTV5 实测 53.5 秒出画面 | 继续缩短第一个来源的等待 |
| 64 位安装包 | 每版都发,只确认了构建、签名和架构,没在 64 位电视上装过 | 找一台 64 位电视或盒子实装 |
| 从 1.1.5 在应用里更新到 1.1.6 | 更新清单从 5 条线路都能取到,电视上的更新过程没走 | 在电视上走一遍 |
行为变化
有两处和以前不一样,可能有人会觉得是退步:
- 综艺、上下集这类集名,在新线路上找不到完全对应的一项时,不再选一个相近的。
- 从列表里点一个指定了某一集的条目,如果那个片源的详情是空的,不再自动去别的站搜同名的片。别的站的片不一定是被点的那一集。
下载
最低要求:安卓 7.0(Android 7.0)及以上。大多数电视和盒子都满足,安卓 7.0 以下的老设备装不上。
复制到浏览器打开,前两个是中转地址,国内一般能直接下。
32 位(大多数电视装这个,约 99MB):
64 位(装 32 位提示不兼容时用,约 114MB):
GitHub 原地址: https://github.com/riowang88/ElderTV/releases/tag/v1.1.6
中转站是第三方的,不归我管,一条打不开就换另一条。
装法:
- 下载 APK,拷到 U 盘,插到电视上
- 用电视的文件管理器打开,提示未知来源就去设置里允许
- 装好后在“设置 → 高级设置 → 点播地址”填片源地址,或者打开聚合
已经装了 1.1.1 到 1.1.5 的,首页右上角会显示“有新版本”,点它就能在应用里更新,也可以直接覆盖安装。更早的版本直接覆盖安装。观看记录都会保留。
ElderTV 不内置任何片源,地址需要自己填。
ElderTV 按 GPL-3.0 发布,对应的源码压缩包在 GitHub 原地址的 Release 页面里。
到目前为止,ElderTV 只在这一台雷鸟电视上测试过。发布出去的 1.1.6 安装包本身没有在电视上装过,电视上测的是同一份代码打的测试包,两者只差版本号。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!












