视频加载失败

ElderTV 1.1.0:py 和 js 站能用了,直播会记住坏线路

2891 字
14 分钟
ElderTV 1.1.0:py 和 js 站能用了,直播会记住坏线路
  1. 1ElderTV 1.0.3:第三方源能用了,直播回来了
  2. 2ElderTV 1.1.0:py 和 js 站能用了,直播会记住坏线路本文
ElderTV 1.1.0:py 和 js 站能用了,直播会记住坏线路

1.0.3 发布时留下了几件没做完的事:py 和 js 类型的站点还是不能用;开了聚合以后,直播只有央视频的 51 个台;直播时网速一直显示 0;切换清晰度时会露出几秒灰色占位;“播放时显示”的设置窗口还是旧样式。

这一版把这几件都做了。另外加了一个安全拦截开关,并且让直播能记住哪些线路放不出来。真机测试中又发现了三个会闪退或报错的问题,也一起修了,其中两个在 1.0.3 里很可能就有。

下面的截图都来自同一台雷鸟电视(Android 11),是真机测试时截的。

py 和 js 站能用了#

我用的订阅一共 1895 个站,其中 js 站 439 个、py 站 96 个。到 1.0.3 为止,这 535 个站一个都跑不起来,原因有四层,前三层是有意的安全设计,第四层是真机上才发现的:

第一,加载器直接返回空。 当时 py 和 js 还没有检查规则,按“规则没定之前一律不运行”处理。

第二,远程 py 脚本必须带校验值。 这是上游 webtv 加的要求,可网上的配置几乎都不带,所以就算放开了加载器,py 站还是会被拒。

第三,聚合时直接剔除 py 和 js 站。

第四,选站名额被 jar 站占满。 前三层去掉后,电视上仍然一个 py/js 站都没有。原因是聚合选站时,采集站先占一半名额,jar 站再把剩下的填满,py/js 排在最后,一个名额都分不到。

改法:py 和 js 站改到插件进程里运行,和 jar 插件受同一套系统限制。插件进程启动时,先把 Python 和 JS 引擎以及 65 个常用的 Python 模块加载好,再加上限制。实测这一步要 2.4 到 3.0 秒。远程 py 脚本不再要求校验值(带了的仍然会校验)。聚合时给 py/js 站留出五分之一的名额,同一个脚本最多占总名额的十分之一(电视上是 20 个),避免全被一种脚本占满。

eldertv-110-py-home
eldertv-110-py-home

把首页片源换成一个 py 站(A站),首页能出推荐。

eldertv-110-py-play
eldertv-110-py-play

点进去能正常播放。js 站(极影)也测过,同样能出首页、能播放。

代价要说清楚:py 和 js 目前没有静态检查规则,只靠插件进程的系统限制兜底。插件进程不能执行外部程序、不能加载本地库、不能结束本应用,但能联网,也能读写应用自己的文件。

还有一个实际情况:电视上这次分到了 40 个 py/js 站,其中 39 个被订阅作者设成了“不参与搜索”。这类站主要出现在首页推荐和分类里,搜片时基本用不到。

安全拦截开关#

设置 → 高级设置 → 站点屏蔽,底部有“安全拦截”。默认开启。

eldertv-110-safety-state
eldertv-110-safety-state

开启时,jar 插件下载后先扫描,带“安装 APK”、内嵌本地库或可疑数据包的会被拦下。

eldertv-110-safety-risk
eldertv-110-safety-risk

要关闭,得先看完这一页风险说明,默认焦点在“取消”上。

实测:关闭后重新聚合,只剩 3 个“下载到的不是插件”的文件被拦,其余全部放行;再打开,会自动重新聚合并重新扫描,之前放进来的有问题的插件又全部被拦回去,一共 11 个插件、198 个站。关闭期间放进来的插件都做了标记,重新开启后要重新扫描通过才能再用。

直播:黑屏、网速、清晰度#

切到配置里的台时黑屏,只有声音。 这是我改出来的问题:直播页上有两个播放器,网页播放器(播央视频)和普通播放器(播配置里的台)。切到配置里的台时,网页播放器只是清空了页面,并没有隐藏,它的黑色背景正好盖在视频上面。

eldertv-110-live-black-before
eldertv-110-live-black-before

改之前:只剩右上角的时间和网速。

eldertv-110-live-black-after
eldertv-110-live-black-after

改之后能看到画面了。截图时是凌晨 3 点,这条线路播的是电视台的“暂不支持播放该时段内容”垫片,不是 ElderTV 的问题。

网速一直是 0。 现在会显示了。原因没有确认,推测是网页播放的流量没记在应用名下,所以网页源在应用自己的计数不动时,改用整台电视的流量计数。电视上一般只有这一个应用在用网,误差不大。

eldertv-110-live-speed
eldertv-110-live-speed

切换清晰度时的灰色占位。 1.0.3 切清晰度后,大约 3 秒内画面是页面的灰色播放按钮。现在切换期间先盖一层黑底,写着“正在切换到 720P…”,等新画面出来再撤掉。实测遮罩约 3 秒,第 6 秒收到新画面。

eldertv-103-quality-grey
eldertv-103-quality-grey

1.0.3 的灰色占位。

eldertv-110-quality-after
eldertv-110-quality-after

1.1.0 的切换遮罩。

聚合直播,以及记住坏线路#

开了聚合以后,各订阅里的直播列表会合在一起,按地址去重,每次更新检查一遍还有没有频道。

我用的那个订阅情况比较特殊:它的直播不是列表地址,而是把频道直接写在配置里,一共 591 组、388,046 个频道,这也是那份配置有 36MB 的原因。这一版能读这种格式了:读的时候只记数量有限的频道名,按“在多少组里出现过”排序,留下最常见的 3000 个台,每台最多 5 条线路。在 Mac 上用同一份订阅实测,读完要 0.9 秒,占用内存约 13MB;电视上整次聚合用了 147 秒。

订阅里的直播线路有很多本身就放不出来。我在电视上连着抽了 5 个台,4 个出了画面,1 个两条线路都失败。所以这一版另外做了两件事:

  • 记住每条线路的好坏。 每条线路放没放出画面都会记下来。换台时先试上次能播的;连续 3 次放不出的线路,一天内排到最后;所有线路都放不出的台,在频道列表里变暗,并标“暂时放不了”。
  • 聚合时替换坏线路。 读配置时每个台多留几条候选线路,重新聚合时跳过电视判定为坏的,用后面的补上。

eldertv-110-live-down
eldertv-110-live-down

56 台的三条线路都连续失败 3 次后,列表里标成了“暂时放不了”。

控制台(手机或电脑上打开的那个网页)新增了“直播频道”:

eldertv-110-console-live
eldertv-110-console-live

不搜索时列出放不了的台;可以按名字搜台,看每条线路成功和失败过几次,可以隐藏台、删线路、给某个台加自己的线路,也可以加自己的 m3u / txt 直播列表。隐藏、删除、加线路,下次打开直播就生效。我在电视上测过隐藏:隐藏后那个台从列表里消失,后面的台顺次往前补。

播放时显示#

eldertv-103-osd-vod
eldertv-103-osd-vod

1.0.3:信息分散在四个角,字比较小。中间试过把字放大、加深色底,结果左下角的进度压住了字幕,所以最后改成了下面这样。

eldertv-110-osd-after
eldertv-110-osd-after

1.1.0:只在右上角放一块半透明的小框,第一行是时间和网速,第二行是进度,画面下方留给字幕。直播同样只在右上角。

eldertv-110-osd-small
eldertv-110-osd-small

详情页左上角的小窗里不显示。

eldertv-110-osd-dialog
eldertv-110-osd-dialog

设置窗口改成了和设置页一致的深色样式。

测试中发现的其他问题#

控制台报错、搜索结果页闪退。 控制台打开就报 ClassCastException,搜索结果页也会闪退。原因是起播速度的测速数据,在正式包里被读成了错误的数字类型(正式包做了代码压缩,丢掉了这个字段的类型信息),程序拿它排序时就崩了。1.0.3 用的是同样的代码,只要聚合测过起播速度,就可能遇到(推测,没有在 1.0.3 上复现过)。

eldertv-110-search
eldertv-110-search

修好后,同一个页面能正常显示“8 源 · 2.1 秒”。

退出播放页时闪退。 用正式包做最后一轮测试时遇到一次。原因是上游的“预加载下一集”:退出时它用的下载线程被强行关掉,而它还在往里提交下载,出错后整个应用就退出了。这是之前就有的问题,已修复。之后我反复进出播放页 5 次,没有再出现;不过它本来就不是每次都会发生,所以只能说没再遇到。

控制台卡片错位。

eldertv-110-console-before
eldertv-110-console-before

有站点被自动停用时,“自动停用的站点”这张通栏卡片会出现,把“订阅”和“这次更新的结果”拆到了两行,各空出半边。

eldertv-110-console-after
eldertv-110-console-after

现在半宽的卡片总是成对排列。

剩余问题和进度#

问题现状下一步
直播线路已开始播放但画面不动程序只知道“开始播放了”,判断不了画面在不在动,这种线路不会被换掉播放后再看几秒画面进度,不动就换下一条
很多订阅里的直播线路本身失效抽样 5 个台 4 个出画面;坏线路现在会被排到后面、聚合时被替换积累几天的成败记录,再看能放的比例
安全拦截开关放在“站点屏蔽”里设置页那几个文件正在做另一项改动,暂时避开那项改动合入后挪到设置页
控制台“直播频道”只能看到电视打开过的列表控制台不会自己下载直播列表加一个“刷新列表”按钮
直播流落后时跳回最新位置改好了,测试时没碰到这种情况,没有真机验证继续观察日志
个别 js 站打不开1 个站初始化时报错,是那个脚本自己的问题再找几个同类的站看是不是共性
直播网速为 0 的根本原因已改成用整机流量绕开,根因仍是推测暂不处理

下载#

最低要求:安卓 7.0(Android 7.0)及以上,32 位 ARM(armeabi-v7a)。大多数电视和盒子都满足,安卓 7.0 以下的老设备装不上。

复制到浏览器打开,前两个是中转地址,国内一般能直接下:

线路一: https://ghfast.top/https://github.com/riowang88/ElderTV/releases/download/v1.1.0/ElderTV-1.1.0-armeabi-v7a.apk

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

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

中转站是第三方的,不归我管,一条打不开就换另一条。安装包约 99MB。

装法:

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

已经装了 1.0.3 的,直接覆盖安装,观看记录会保留。

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

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

到目前为止,ElderTV 只在这一台雷鸟电视上测试过。其他电视能不能正常用,还没有数据。

文章分享

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

ElderTV 1.1.0:py 和 js 站能用了,直播会记住坏线路
https://wtblog.wang/posts/03-eldertv-1-1/
作者
Riowang
发布于
2026-11-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Riowang
折腾 NAS 和家里的电视。
公告
博客已迁移到新主题,ElderTV 的版本说明和教程都放在「ElderTV」分类。
分类
标签
站点统计
文章
36
分类
7
标签
9
总字数
61,609
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Workers
博客版本
Firefly v6.16.9
文章许可
CC BY-NC-SA 4.0
文章目录