视频加载失败

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

3510 字
18 分钟
ElderTV 1.1.6:换线路不再跳集,连按左右键只跳一次
ElderTV 1.1.6:换线路不再跳集,连按左右键只跳一次

这一版的起因是我看到了另一个同源的项目 wobuhui666/TV。它和 ElderTV 一样出自 FongMi/TV,功能多得多,界面也重做过。我的第一反应是很多东西可以直接拿来用。装到电视上实测以后,结论变成了:只借它的几段逻辑,不搬界面。这篇先写实测,再写借来的东西在电视上的表现,包括一次单元测试全过、上了电视却黑屏的经过。

下面的截图都来自同一台雷鸟电视(Android 11,32 位,2.8GB 内存),截图缩到了 1280×720。

先量了再决定借什么#

把它的 32 位安装包和 ElderTV 1.1.5 装在同一台电视上,两个应用交替跑,每项 3 轮取中间值:

指标wobuhui666/TVElderTV 1.1.5
冷启动2099 毫秒440 毫秒
首页连按方向键,最慢的一帧300 毫秒21 毫秒
首页停稳后占用内存234MB88MB
搜索页移动焦点,掉帧00

搜索页两边一样流畅,说明它用的界面技术本身在这台电视上跑得动。卡的是海报多的首页和连按按键,最慢的一帧 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 集,点“换源”:

eldertv-116-switch-panel
eldertv-116-switch-panel

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

eldertv-116-switch-same-episode
eldertv-116-switch-same-episode

单元测试全过,上了电视黑屏#

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

eldertv-116-merged-black-testbuild
eldertv-116-merged-black-testbuild

这张图是开发中的测试包,不是 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集”,出了画面:

eldertv-116-merged-after
eldertv-116-merged-after

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

eldertv-116-merged-to-plain
eldertv-116-merged-to-plain

这三条里,电视上验到的是第一条和第三条。第二条(找第 6 集落到“第05-06集”)只有单元测试。原因是下面“已知情况”里的那个做法:换到以前看过的站,程序用的是那个站自己的记录,我想验的那条路被它挡住了。

综艺的下一期和换源#

综艺的集名常常是日期。《你好湖南》的列表里 7 月 23 日后面是 7 月 27 日,中间几天没有节目。看着 23 日那期按“下一集”,到了 27 日:

eldertv-116-variety-next
eldertv-116-variety-next

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

eldertv-116-variety-switch
eldertv-116-variety-switch

有一种情况没有处理好:换过去的片源没有正在看的那一期时,会从第一期开始,没有任何提示。测试时从 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 秒位置不变,仍然暂停

到最后一集再按“下一集”,会提示已经是最后一集:

eldertv-116-last-episode
eldertv-116-last-episode

前一部片把新的暂停掉#

退出一部片、马上开另一部时,前一个播放页退场得比新的播放页晚。它退场时会做几件收尾的事:暂停播放、清掉遥控器“上一集、下一集”的回调。以前这些动作只认“是不是同一个播放任务”,不认“是谁发起的”,于是可能把新播放页的播放暂停掉,或者让新播放页的上一集、下一集失灵。

现在播放服务会记住当前归哪个播放页,只有它能暂停和改回调。电视上验到了一次:连开三部片以后按“下一集”,换的是当前这部的下一期,系统里显示的片名和集名也是当前这部。

另一条相关的修复是直接开始播放前先取消上一次没做完的解析。这条在电视上没有构造出场景,只读过代码。

央视直播:一个来源没画面就试下一个#

有一条上报说,一台电视上直播换台要等一两分钟。原因是央视频网页在那台电视上出不了画面,程序每换一个台都要等它超时,而且不记得它刚刚失败过。

1.1.6 的做法:网页十几秒没有画面时,开始试另一个来源,谁先出画面用谁;一个网页来源连续两次没画面,接下来 30 分钟排到后面。

我这台电视上的 CCTV5 有两个来源,都是网页。换到 CCTV5,第一个来源 20 秒没有画面:

eldertv-116-live-waiting
eldertv-116-live-waiting

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

eldertv-116-live-cctv5
eldertv-116-live-cctv5

能出画面了,但 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):

线路一: https://gh.acmsz.top/https://github.com/riowang88/ElderTV/releases/download/v1.1.6/ElderTV-1.1.6-armeabi-v7a.apk

线路二: https://gh-proxy.com/https://github.com/riowang88/ElderTV/releases/download/v1.1.6/ElderTV-1.1.6-armeabi-v7a.apk

64 位(装 32 位提示不兼容时用,约 114MB):

线路一: https://gh.acmsz.top/https://github.com/riowang88/ElderTV/releases/download/v1.1.6/ElderTV-1.1.6-arm64-v8a.apk

线路二: https://gh-proxy.com/https://github.com/riowang88/ElderTV/releases/download/v1.1.6/ElderTV-1.1.6-arm64-v8a.apk

GitHub 原地址: https://github.com/riowang88/ElderTV/releases/tag/v1.1.6

中转站是第三方的,不归我管,一条打不开就换另一条。

装法:

  1. 下载 APK,拷到 U 盘,插到电视上
  2. 用电视的文件管理器打开,提示未知来源就去设置里允许
  3. 装好后在“设置 → 高级设置 → 点播地址”填片源地址,或者打开聚合

已经装了 1.1.1 到 1.1.5 的,首页右上角会显示“有新版本”,点它就能在应用里更新,也可以直接覆盖安装。更早的版本直接覆盖安装。观看记录都会保留。

ElderTV 不内置任何片源,地址需要自己填。

ElderTV 按 GPL-3.0 发布,对应的源码压缩包在 GitHub 原地址的 Release 页面里。

到目前为止,ElderTV 只在这一台雷鸟电视上测试过。发布出去的 1.1.6 安装包本身没有在电视上装过,电视上测的是同一份代码打的测试包,两者只差版本号。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

ElderTV 1.1.6:换线路不再跳集,连按左右键只跳一次
https://wtblog.wang/posts/07-eldertv-1-1-6/
作者
Riowang
发布于
2026-11-14
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
老安卓能不能用 ElderTV:查完的结论是换个盒子
ElderTV有人问我,家里的电视或盒子是安卓 4.x、5.x,装不上 ElderTV,能不能支持一下?还有人建议内置腾讯的 X5 浏览器内核来兼容老系统。这几天专门查了一轮,先说结论:
2
ElderTV 1.1.3 和 1.1.4:一个插件崩掉整个进程,更新下载从每秒 20KB 到 1.3MB
ElderTV1.1.3 修了“王二小”这类订阅关掉安全拦截后仍然没数据的问题,一个插件出错也不再拖垮所有站。1.1.4 第一次在电视上把应用内更新走完,发现下载只有每秒 20KB,改成自动选最快的线路。
3
ElderTV 1.1.0:py 和 js 站能用了,直播会记住坏线路
ElderTV这一版把这几件都做了。另外加了一个安全拦截开关,并且让直播能记住哪些线路放不出来。真机测试中又发现了三个会闪退或报错的问题,也一起修了,其中两个在 1.0.3 里很可能就有。
4
ElderTV 1.1.2:关掉安全拦截也搜不到片,原因在插件进程
ElderTV饭太硬这类订阅的每个站都要加载自带的原生库,以前不管安全拦截开没开都会被挡下。这一版关掉安全拦截后放行原生库,高级设置重新排成一屏,并且开始同时发 64 位安装包。
5
ElderTV 1.0.3:第三方源能用了,直播回来了
ElderTV这一版主要修的就是这个问题,顺带加回了电视直播,以及播放时显示时间、进度和网速的功能。下面的截图都来自同一台雷鸟电视(Android 11),是真机测试时截的。
随机文章随机推荐
Profile Image of the Author
Riowang
折腾 NAS 和家里的电视。
公告
博客已迁移到新主题,ElderTV 的版本说明和教程都放在「ElderTV」分类。
分类
标签
站点统计
文章
42
分类
9
标签
9
总字数
80,117
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Workers
博客版本
Firefly v6.16.9
文章许可
CC BY-NC-SA 4.0
文章目录