纯 AI 开发了个哔哩哔哩 TV 版客户端 - V2EX
爱意满满的作品展示区。
metalmax

纯 AI 开发了个哔哩哔哩 TV 版客户端

  •  
  •   metalmax 2 days ago 1849 views

    对原来的 flutter 版本不满意才重新让 AI 搞了这个原生版本的,偷懒直接抄下 GitHub 上由 AI 写的介绍

    项目地址: https://github.com/Hyper-Beast/BiliTVNative

    BiliTVNative

    BiliTVNative 是一个面向 Android TV 的原生 B 站客户端实验项目,使用 Kotlin 、Jetpack Compose 、Compose for TV 和 Media3 重写电视端观看体验。

    项目重点不是做一个极简壳,而是在电视设备上尽量平衡几个实际问题:播放稳定性、遥控器焦点可控性、弹幕性能、主页视觉质感,以及不同硬件档位下的流畅度。

    直播暂缓,不在当前版本范围内。

    截图

    image image image image image image image

    主要功能

    • 首页推荐、热门、分区内容流。
    • 搜索键盘、搜索建议、搜索历史、搜索结果排序和分页。
    • 动态、历史记录和账号二维码登录。
    • Media3 点播播放器,支持 DASH 播放、进度保存和返回焦点恢复。
    • 默认画质、解码器偏好、倍速、弹幕、快进预览雪碧图。
    • 字节跳动 DanmakuRenderEngine 原生弹幕渲染,避免把高频弹幕做成 Compose 节点。
    • 空降助手,支持跳过片段提示并在进度条上标出跳过范围。
    • 自动播放下一集、自动播放相关推荐、播放完成后自动退出。
    • 播放退出二次确认、应用退出二次确认。
    • 简体中文、香港繁体、台湾繁体界面和动态标题转换。
    • Android TV launcher 图标和 TV 横幅。

    UI 与视觉

    应用提供 4 种主页主题:

    • 默认粉
    • 深黑
    • 高级灰
    • 蓝灰

    视觉性能模式分为 3 档:

    • 流畅:面向低端电视,关闭重动画、流光、阴影、封面预取和图片内存缓存,缩略图使用较低尺寸与 RGB_565 。
    • 标准:默认推荐档,保留主题色、仿玻璃表面、轻缩放、边框、文字颜色过渡、封面轻提亮和平滑滚动。
    • 高级:手动开启的高视觉档,增加更强玻璃氛围、环境高光、更高质量缩略图、主题色斜向流光、液态玻璃感边缘、卡片轻微放大和上浮。

    Android 13 及以上设备可以在高级档中单独开启实验液态玻璃控件。开启后,侧边栏、首页分区胶囊、视频卡片、设置行和播放器控制面板会使用真实液态玻璃表面;关闭或不支持时自动回落到自绘半透明玻璃、边框和高光。

    主页主题只作用于主页、搜索、动态、历史、设置、侧边栏和标签栏。播放器继续使用独立稳定配色,避免主题化影响播放性能和兼容性;播放器控制、面板和弹窗会按视觉性能策略使用液态玻璃或 fallback 表面。

    播放器体验

    播放器使用系统硬解优先的 Media3 ExoPlayer ,并保留 SurfaceView 路径以优先保证兼容性和性能。

    播放器 UI 包括:

    • 顶部标题、UP 、发布时间、播放量、当前时间。
    • 底部大进度条、控制按钮、画质和弹幕状态。
    • 控制层隐藏时的迷你进度条,可在设置中关闭,默认开启。
    • 右侧设置、选集、UP 主更多视频、相关推荐面板。
    • 画质、弹幕、倍速子面板,长列表使用滚动而不是压缩字号。
    • 推荐视频和发布者更多视频使用更宽面板和更大封面,播放数、弹幕数、时长贴近主页卡片展示,避免小时级时长和万级弹幕数挤在一起。
    • 进入和退出播放使用短黑屏遮罩过渡,避免 Surface 切换时出现闪烁。

    弹幕层由原生 DanmakuView 承载,弹幕 XML 解码和解析放在后台线程,应用层不使用固定 delay 驱动弹幕重绘。

    设置分组

    设置页按使用语义分成三组:

    • 播放设置:默认画质、解码器、快进预览、空降助手、退出确认、自动连播、自动推荐、播放完成退出、显示时间、迷你进度条。
    • UI/UX:效果档位、液态玻璃、主页主题、切换时自动确认、切换时自动刷新。
    • 系统设置:清理缓存、语言。

    首页分区开关独立显示在右侧,至少保留一个分区。

    技术栈

    名称 用途 链接
    Kotlin 主要开发语言 https://kotlinlang.org/
    Gradle / Android Gradle Plugin 构建系统 https://gradle.org/
    AndroidX / Jetpack Android 基础库、Activity 、Lifecycle 、DataStore 等 https://developer.android.com/jetpack/androidx
    Jetpack Compose 声明式 UI https://developer.android.com/develop/ui/compose
    Compose for TV TV UI 和遥控器焦点基础能力 https://developer.android.com/develop/ui/compose/tv
    Media3 ExoPlayer 播放器和 DASH 播放 https://developer.android.com/media/media3
    OkHttp HTTP 、WebSocket 、播放数据源请求 https://square.github.io/okhttp/
    Coil 图片加载 https://coil-kt.github.io/coil/
    Kotlin Coroutines 异步任务 https://github.com/Kotlin/kotlinx.coroutines
    kotlinx.serialization JSON 解析 https://github.com/Kotlin/kotlinx.serialization
    DanmakuRenderEngine 原生弹幕渲染 https://github.com/bytedance/DanmakuRenderEngine
    OpenCC4J 简繁转换 https://github.com/houbb/opencc4j
    AndroidLiquidGlass / Backdrop Android 13+ 实验液态玻璃控件 https://github.com/Kyant0/AndroidLiquidGlass
    ZXing 二维码生成 https://github.com/zxing/zxing

    第三方库遵循其各自许可证。

    开发说明

    本项目全部由 AI 辅助完成。根目录文档用于保留上下文和约束:

    继续开发时建议按小步修改、编译、安装、实机验证的节奏推进,不要一次性重写大模块。播放器、弹幕、焦点路径和液态玻璃开关尤其需要同时考虑性能档位和电视端遥控器操作。

    免责声明

    本项目不是哔哩哔哩官方项目,也不与哔哩哔哩存在任何官方关联。

    项目只作为个人学习、研究和自用客户端实现参考。使用者需要自行承担账号、接口、播放兼容性和后续维护风险。

    License

    本项目代码使用 MIT License 。详见 LICENSE

    16 replies    2026-05-12 13:25:40 +08:00
    wukairobin
        1
    wukairobin  
       2 days ago
    厉害啊 老哥
    James369
        2
    James369  
       2 days ago
    为什么重写,Flutter 无法担此重任吗
    metalmax
        3
    metalmax  
    OP
       2 days ago
    @James369 感觉毕竟吃性能电视一般性能都比较垃圾,而且那是第一次用 AI 弄程序很多都没搞好
    zooo
        4
    zooo  
       2 days ago
    厉害了,之前下了两三个电视上的哔哩哔哩都看不了
    itechify
        5
    itechify  
    PRO
       2 days ago
    pilipili 不好用吗?
    itechify
        6
    itechify  
    PRO
       2 days ago
    maemolee
        7
    maemolee  
       2 days ago
    @itechify #5
    这不是很好破案吗。

    metalmax
        8
    metalmax  
    OP
       1 day ago
    @itechify 这个不支持 TV 吧?
    metalmax
        9
    metalmax  
    OP
       1 day ago
    @maemolee 这个说的是我之前叫 AI 写的那个版本,我不是学开发的那时候都不懂,甚至是第一次听说 flutter
    jasonkxs
        10
    jasonkxs  
       1 day ago via iPhone
    可以的,我最近也在 ai 搞阅读 app ,因为没 iOS 版本,让 ai 照着原生的撸一遍
    metalmax
        11
    metalmax  
    OP
       1 day ago
    @jasonkxs ios 最麻烦的就是证书了,我也搞了一个哔哩哔哩 iPad 版本和一个看漫画的,证书淘宝 30 块买的一年的
    skkakaka2
        12
    skkakaka2  
       1 day ago
    用的哪个模型?烧了多少 token ?
    metalmax
        13
    metalmax  
    OP
       1 day ago
    @skkakaka2 gpt5.5 不知道多少,反正白嫖的别人的,他注册了几百个搞了个 CPA
    jasonkxs
        14
    jasonkxs  
       1 day ago via iPhone
    @metalmax 兄弟,现在有好多续签,appleid 开发者账号就可以,我现在用的 nb 全能助手
    xujiahai
        15
    xujiahai  
       12h 31m ago
    好希望出一个 apple tv 的版本
    metalmax
        16
    metalmax  
    OP
       10h 7m ago
    About     Help     Advertise     Blog     API     FAQ     Solana     2831 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 110ms UTC 15:33 PVG 23:33 LAX 08:33 JFK 11:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86