爱意满满的作品展示区。
uqf0663

[送码]为了老人孩子不折腾,自己折腾了一个给老人和孩子用的安卓 TVAPP:节目单

  •  
  •   uqf0663 · 1 day ago · 1032 views
    好吧,其实这是一个可以没有用户体系的单机 APP 所以没有码这种东西,只是我让 V2 的 AIChat 帮我参考站内的热帖起一个标题,它建议我用送码当前缀而已。


    遥想当年在 V2 上看见 @HairShort 大佬开源了 WebViewTV ,当时我就惊呼:人才啊,我从来没想过 webview 还能这么玩。

    这么多年过去了,我仍然认为 WebViewTV 是我在 V2 看到的最实用、最能解决实际问题的 APP 没有之一。

    转眼到了今年暑假,发生了两件事情触动了我。

    1 、我去看望我那有轻度阿尔茨海默的舅舅,他儿女在外地得过年才回来,是个独居老人,我到的时候他正在发呆,然后我就发现他的电视已经很长时间没开了,遥控器都找不着了,问他为什么日常没看电视,答太复杂了操作不来。

    2 、暑假丈母娘帮忙带我儿子,其实老人也管不了什么,孩子就每天大量看电视。但是电视的那些 APP 正经适合孩子看的内容没几个,各种乱七八糟算法推的短视频一个接一个,老人没什么文化无法管控这事。甚至更离谱的爱奇艺家有一个奇巴布 APP 是专门的儿童 APP ,但里面不少辣眼睛内容简直了。

    于是我要解决我这两个痛点:操作足够简单,以及内容足够可控。

    于是就有了这个「节目单」 APP 。



    它还是 WebViewTV 的路子

    依然是:WebView 打开网页 → 找到网页中的视频 → 自动进入全屏播放。

    但在这个基础上,我希望再扩展得方便一些。

    首先是可以设成真正的极简模式。

    首次运行把需要看的节目 URL 导进去之后,电视就可以直接进入播放。

    比如老人平时只看中央台和几个本市的台,那就只给他导入这几个。

    例如我家老人我就只导中央台跟本地台,其它直播类 APP 从中央台跳到本地台老人家根本理解不了一级一级的菜单逻辑。



    然后是内容完全由用户自己(监护人)决定,本质上就是一个电视机的浏览器/播放器,所以没有算法推荐。

    你想让电视上出现什么,就自己加什么。

    不想看的就删掉。

    还可以通过小程序远程增删改查电视上的节目 URL ,例如我日常工作摸鱼的时候可以顺手把我发现的好视频加到我绑定的电视机列表里(不管电视当前有没有在线)。

    所以电视最终呈现出来的东西,就是自己整理出来的那一小撮内容。


    顺便还解决了一个我自己一直觉得很别扭的问题,电视上的视频网站账号登录。

    例如手机和电视处于同一个局域网时,我弄了一个辅助登录的功能,可以用手机操作电视上的 WebView ,打开对应视频网站的登录页面。

    例如我就直接在电视上的登录了我自己的 B 站账号。

    登录之后,电视就可以播放这个账号本身能够观看的内容。

    也就是说 让电视上的浏览器也能够正常使用你自己的视频网站账号。




    当然如果你对隐私比较注重也可以彻底单机化

    在设置里开启单机模式后,APP 不会再跟我的服务器产生任何联系。

    所以即使哪天我跑路了,服务器没了,依然能用,因为本质就仅仅是一个单机的电视浏览器/播放器而已。




    然后说一下槽点,就是安装包四舍五入 300M ,

    因为国内安卓电视这个生态实在太碎片化了。

    我目前真机测试过的设备,从 5.1 一直到 13 ,发现了各种各样的问题。

    所以为了尽可能提高兼容性,我直接在安装包里塞了 3 套 WebView 内核。

    不过不用担心它浪费空间。

    APP 第一次运行时会判断当前设备到底哪套内核能用,然后会自动删除不需要的内核。

    最理想的情况是:

    系统自带 WebView 版本足够高(>119 ),第一次播放成功后,外带的内核全部删掉。我自己实测最后 APP 占用不到 3M 。


    当然确实 webview 性能相对差一些,不过我在十几年前购置 1G 运存双核 A53 的微鲸 W43F 实测也勉强能流畅播放也就还能接受。

    还有就是目前这个扫码-粘贴导入节目单 URL 的操作逻辑还是有点繁琐(尤其在手机端操作的时候),我也还在思考还能不能有更简单同时兼顾自由方便的方法,大家有什么好的思路也欢迎一起讨论一下。




    接下来介绍一下我定义的文本格式(下面简称为协议):


    其实就是一个类 md 文本协议,以及 `#JMD` / `#JMD+` 两种链接形式。

    最基本的节目单就是这样:


    ```节目单开始```
    https://tv.cctv.com/live/cctv1/
    https://tv.cctv.com/live/cctv2/
    https://www.bilibili.com/video/BV....../
    ```节目单结束```


    电视端拿到以后自己解析。

    最简单的情况下,开始标记 + URL 列表 + 结束标记 就够了。

    标题什么的不用自己写,电视端会自己抓网页标题。

    当然也可以进一步增加分类、标题、时间等字段。

    具体可以参考我的协议演示站:

    https://demo.066386.xyz/



    还有,举一个我自己实际遇到的例子。

    比如我比较喜欢一个旅游 UP 主“杨旭游记”,我觉得他的视频也比较适合推荐给老人家看,

    他的视频是有连贯性的,正常我们是希望:

    第 1 集 → 第 2 集 → 第 3 集 →……

    这样一直看下去。

    但是我在 B 站官方小电视 APP 难以按他的旅行顺序看,每次都是最新更新的在前面导致在电视上播放顺序是倒过来的,

    于是播放顺序就变成:

    第 100 集 → 第 99 集 → 第 98 集……

    特别别扭。

    所以协议里可以加入时间字段。有时间字段的节目,进入列表会按照从老到新的顺序排序。

    这样电视端就可以按照:

    1 → 2 → 3 → 4……

    顺序播放。

    中途退出也没关系,下次重新进入列表,会自动回到上次看到的位置。

    明显我无法教会我舅舅怎么去操作云视听小电视 APP ,但是我算折中能让我舅舅也能一起追更一些合适的 UP 主。

    可以直接把整段协议的文本推给电视,也可以把这段协议文本放在一个网页里,直接把这个网页的 URL 推给电视都行。

    然后就衍生了两种 URL 的标识:`#JMD` 和 `#JMD+`

    只要在包含协议的网页 URL 最后带上这标识就行,电视端拿到这个 URL 标识就会直接尝试解析里面包不包含协议,两者唯一的核心区别就是:要不要持续追更。


    `#JMD`

    一次性导入。

    导入完成以后,这个链接就没有后续任务了。


    `#JMD+`

    订阅更新。

    电视端保存这个地址,之后每次启动 APP ,在合适的时候自动检查一下有没有新的节目 URL 。

    如果有,就追加到电视上的节目列表。

    比如我这里做了一个电视直播的演示:

    https://demo.066386.xyz/live-tv.html#JMD+

    目前这个电视直播频道大全是从 webviewtv 项目里挖到的,安装后手机扫码导入粘贴这个地址就可以把各种电视台都导到电视上了,当然你也可以自己删减,把日常不看的台都删了。



    最后其实就是想看看这个东西能不能玩起来

    我的想法比较简单:造一个电视端的网页地址管理工具。

    至于节目单里面有什么,可以由用户自己添加,也可以由其他人分享制作自己的节目单。

    所以也就定义了这个比较简单的格式。

    以后如果有人自己 Vibe 转换器,或者做一个自己的节目单生成器,甚至是发个帖子,只要最后输出的内容里包含这个协议格式,就可以直接推送到电视让电视解析出节目单列表。


    不需要申请接口,也不需要加入什么官方资源库。

    大家能各自管理自己的电视就行。

    如果有人 Vibe 出来一些好玩的转换器或者 `#JMD+` 订阅地址,也欢迎部署出来分享。

    最理想状态下我希望能慢慢形成一个小的生态,例如可以有一个 V2 宝爸联盟,各位宝爸能一起协作持续整理维护适合各年龄段孩子看的节目清单。



    好了,基本上该说的也差不多了。还有很多小的细节期待各位去发现。

    下载官网: https://www.节目单.com/


    这个东西虽然是 Vibe 出来的,但前前后后至少熬有十几个通宵是在死磕各种小细节,近两个月的时间磨了百来个小版本,现在终于觉得:

    差不多可以拿出来见人了。

    目前我自己家里、亲戚家已经测试了十几个不同品牌和型号的电视/盒子/投影仪,修掉了一堆奇奇怪怪的问题。(我舅舅已经顺利用上了)

    但电视设备的安卓生态实在太碎片化了,我也不知道还有多少问题在等着我。

    所以请大家有时间的话能帮我试试。

    能用、用不了、哪里有问题,都欢迎反馈。

    非常感谢~
    12 replies    2026-09-22 17:46:04 +08:00
    xhd0926
        1
    xhd0926  
       1 day ago via Android
    牛的,空了下载个试试,感谢分享
    fuchish112
        2
    fuchish112  
       1 day ago
    厉害的,回头试试
    liuliuliuliu
        3
    liuliuliuliu  
       1 day ago
    没太明白,这不还是看的直播吗?
    uqf0663
        4
    uqf0663  
    OP
       1 day ago
    @liuliuliuliu 是也不完全是,搞这个东西主要是解决我老人孩子看电视的苦恼,也就是内容可控+操作极简,老人家当然看电视台直播多一点,但是孩子是基本不看电视台的,现阶段各种 APP 包括电视内置的都是包含了各种算法推的辣眼睛内容各种短视频的,暑假我儿子就看了不少,接下来的寒假我会测试一下屏蔽掉其它 APP 让他只能看我筛选过的内容,另外现在我舅舅已经开始能追更一些还不错的 B 站生活类 UP 主了。
    liuliuliuliu
        5
    liuliuliuliu  
       23h 15m ago
    @uqf0663 哦哦,明白了,有是不是类似 emby 库?
    roma
        6
    roma  
       16h 0m ago
    下載一半發現安裝包接近 300M ,取消了
    shuang
        7
    shuang  
       15h 47m ago
    不如研究一下 tvbox ,影视仓,自己维护一个源给家人用,用户体验会好很多的
    uqf0663
        8
    uqf0663  
    OP
       14h 20m ago
    @roma 好吧,看起来主帖子字太多是个问题,给看不完主帖子的朋友复制一下相关说明

    [因为国内安卓电视这个生态实在太碎片化了。我目前真机测试过的设备,从 5.1 一直到 13 ,发现了各种各样的问题。所以为了尽可能提高兼容性,我直接在安装包里塞了 3 套 WebView 内核。

    不过不用担心它浪费空间。
    APP 第一次运行时会判断当前设备到底哪套内核能用,然后会自动删除不需要的内核。
    最理想的情况是:系统自带 WebView 版本足够高(>119 ),第一次播放成功后,外带的内核全部自动删掉。我自己实测最后 APP 占用不到 3M 。]
    ytFG
        9
    ytFG  
       14h 15m ago
    为啥安装包这么大,同类的 app 都在 50m 内吧
    uqf0663
        10
    uqf0663  
    OP
       14h 7m ago
    @shuang
    @liuliuliuliu
    并不会,影视仓或 emby 跟我的定位是不同的,我希望的是维护极轻操作极简的方式,对于内容维护者只需要不定期把 URL 加进去就够了,甚至都不需要服务器,在做这个之前好几年,我都把内容存家里的 NAS 然后走 frp 打通我家跟丈母娘家的互联,实际发现我自己日常更新维护 NAS 内容也头疼,丈母娘那边操作观看也不适应,我丈母娘还好勉强能理解菜单与菜单的逻辑,我岳父完全学不会影视仓怎么看也懒得一个个选,他们还是遵循以前电视不智能的逻辑希望打开就能看而不需要选择,看完一个节目自动进入下一个节目,下次打开电视还是照上次关电视之前的断点继续看,所以我做的这个就是要消灭菜单,实现这个目标。
    uqf0663
        11
    uqf0663  
    OP
       14h 6m ago
    @ytFG 看看#8 楼
    wnpllrzodiac
        12
    wnpllrzodiac  
       7h 3m ago
    tvbox+源
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1367 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 16:49 · PVG 00:49 · LAX 09:49 · JFK 12:49
    ♥ Do have faith in what you're doing.