Skip to content

Latest commit

 

History

116 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

三星电视上的 bilibili

中文 · English

给三星 Tizen 电视做的 bilibili 客户端,全程遥控器操作。电视直连 bilibili: 没有后端,没有代理,没有服务器,账号凭证只存在电视本机。

一台电视上可以同时登多个账号,各自的观看记录互不干扰;在手机上看到一半的, 电视上接着播。

LG webOS 有一个很好的 bili-webos, 三星这边一直是空的。这个项目补的是这个位置。

与 bilibili、三星均无关联。 个人项目,MIT 协议。

首页 播放
首页:最上面一行是「继续观看」,开机光标就在上面 1080P H.265 播放,拖动有缩略图预览和章节刻痕
相关 搜索
播放中按下键拉出分 P、简介与相关推荐,视频不停 搜索,可切到电视自带的中文输入法

我的电视能装吗

实测可用 三星 2023 年款 65 吋 CU7090,固件 Tizen 9.0(Chromium 120)。这个项目的所有测量都来自这一台
大概率可用 同代或更新的三星电视(2022 年以后,Tizen 7 及以上)。播放走的是标准的 MSE 和 AVPlay,没有用到机型特有的东西——但没有人在别的机型上试过
不行 非三星电视;三星 2016 年以前的老机型(引擎太老)

装上去之后启动时会上报引擎版本和编解码支持,第一件事就是看那一行。在别的机型上 装成功或者失败,都请开一个 issue 说一声机型和固件版本,这张表就是这么长出来的。

安装

三星商店不收第三方客户端(2019 年非官方的 Twitch 应用就是因此被下架的),所以只能 侧载。需要一台和电视同网段的电脑,只需要一次,之后电视上直接开。

所有人都会卡在证书上,setup.sh 替你搞定。 2023 年以后的三星电视只认三星签发的 分发证书,Tizen Studio 自带的那套一律 Invalid certificate chain。脚本会打开三星账号 登录页、替你申请证书,不需要 Eclipse、不需要 sudo、不需要证书管理器 GUI。

准备:Node、Python 3,以及 Tizen Studio 的命令行工具(不需要装 IDE)。电视上打开开发者模式,把这台电脑的 IP 登记进去, 然后把电视完整断电重启一次——不重启登记不生效,症状是 sdb 静默超时。

git clone https://github.com/titlog/bilibili-tizen.git && cd bilibili-tizen
zsh tools/setup.sh      # 只跑一次:找到电视、读 DUID、签证书,配置写在仓库外
zsh tools/deploy.sh     # 检查、签名、安装、启动,约 15 秒

更新也是这一条命令。 应用目前不会自己更新(自更新的五条路都探通了,但没做成 产品),git pull 之后再跑一次 deploy.sh 就是升级。

只想要证书、和本项目无关?它已经拆成独立工具 samsung-tv-cert npm —— npx samsung-tv-cert --duid <你的DUID>。对 Jellyfin、Twitch 社区版、你自己写的 应用都有用。

账号与隐私

  • 扫码登录,任意多个账号,切换不用重新扫。
  • 凭证只存在电视的本地存储里。 没有服务器、没有统计、没有第三方;应用只和 bilibili.com 及其 CDN 通信。流地址是预签名的,播放请求不携带你的账号。
  • 电视上的观看进度会回传 bilibili(30 秒一次),手机和网页上就能接着看;反过来也一样。
  • 默认走 TV 登录路径,用官方电视客户端的 appkey 签名——这是多账号和进度回传的 前提,也意味着你的客户端对 bilibili 表现成官方电视客户端。这是一个使用条款层面的 取舍,不是技术问题;不想这样可以改走网页扫码,代价是只能一个账号、进度不回传。 两条路的差别摊开在 docs/登录路径.md
  • 令牌过期后需要重新扫码(续期接口没有对着服务器验证过,不敢猜着写)。
  • 部署脚本会把你这台电脑的局域网地址写进包里,作为诊断日志的去处;只有你在电脑上 开着收集器时才有东西被收到,而且只在你的局域网内。

能做的,和明确不做的

能做的:推荐 / 热门 / 排行 / 美食 / 舞蹈 / 动态 / 稍后再看 / 搜索(电视自带中文 输入法),多分 P,续播(记住看到哪一 P,接着手机上的进度),自动播下一集,拖动预览, 播放中拉出分 P 与相关视频,UP 主页(播放面板里按 UP 主名字、或看完之后按右键,看这位 UP 主的全部投稿,返回键回到来的那个页签)。到画面约 2.5–3.5 秒,1080P H.265。

不做的

  • 4K。 缺的那两档(1080P 高码率、4K)是大会员卖的,而且能播 4K 的稿件太少; 这台电视的 MSE 能不能硬解 4K 也没验证过。
  • 手机投屏。 投屏接收端必须在网络上监听端口,Tizen 的 web widget 做不到,和够不够 官方无关。替代品是「稍后再看」:手机上点,电视上开。
  • 字幕、设置页。 接口有,还没做。

常见问题

sdb 连不上电视。 开发者模式里登记的是不是这台电脑现在的 IP;改完有没有完整断电 重启。DHCP 换了地址就要重登记。

Invalid certificate chain 用了 Tizen 自带的证书。跑 zsh tools/setup.sh 换成 三星签发的那套。

装上了,打不开某个视频,提示「视频流被拒绝(403)」。 多半是 CDN 临时限流或者 按文件的拒绝,应用会自己换镜像、换令牌、换编码、压画质;提示出现说明这些都试过了, 过几分钟再试,或者换一个视频。

「动态」「稍后再看」是空的。 这两个标签要登录,先去「我的」扫码。

改了代码没生效。 看电视上报的启动行有没有变;deploy.shconfig.xml 推导包名, 改过应用名的话确认它推的是新包。

给开发者:这个平台的坑

客户端只是结果,真正花时间的是搞清楚这个平台到底能干什么。下面几条每一条都吃掉过 一整天,而且别处搜不到:

  • bilibili 不需要 Referer,但会按 UA 拒绝。 用裸 curl 试探,每个响应都读起来像 「需要 Referer」——这个假信号差点让整个项目上一个根本不需要的代理。
  • 这个固件的 widget 发不出 Cookie 头。 Chromium 120 静默忽略 forbidden header, 登录态只能走 query 里的 access_key。之前「允许设 Cookie 头」的结论是在只有一个账号 时测的,那个测量根本没有区分能力。
  • 同一稿件手机能放、电视不能,根因是 playurl 的 platform web 端点铸的流令牌会被 CDN 严格节点 403,app 端点铸的被接受。
  • AVPlay 能播 DASH,但清单必须走 HTTP 到达,而 widget 不能监听端口——所以 DASH 走 MSE。同一堵墙也是投屏做不了的原因。
  • 换 CDN 节点行不通、限流按 IP、镜像只能排序不能丢弃。 哪台镜像是死的属于当天的 天气,同一台主机一晚全 403、隔天整晚正常。

每条的来龙去脉在 docs/平台坑.md;全部测量、日志判据和排查纪律在 CLAUDE.md,那是这个项目的工作笔记,包括那些推翻了先前结论的记录。

目录

app/          客户端(ES5,IIFE,无构建步骤)
  vendor/     Shaka Player,预编译入库
spike/        当初摸清平台事实的工装
tools/
  setup.sh            只跑一次:你的电视、你的证书
  deploy.sh           检查、签名、安装、启动
  samsung-cert.mjs    无 GUI 签发三星证书
  devserver.mjs       在桌面浏览器里跑客户端(截图、改界面不用部署)
  collect.mjs         :8099 上的诊断收集器
  lint.mjs            抓「调用了不存在的东西」
  *-verify.mjs        清单 / 账号 / md5 / 二维码 —— 任何一个失败都拒绝发布
docs/         平台坑、登录路径、流令牌根治的完整排查
CLAUDE.md     全部发现、坑,以及怎么在零售机上调试

怎么调试

零售机把一切方便的手段都关了:dlog 什么都不返回,Web Inspector 的端口从不打开, sdb shell 直接 closed。所以应用自己上报——tools/collect.mjs 在 8099 端口监听, deploy.sh 自动把地址写进构建。

node tools/collect.mjs | tee /tmp/bili.log   # 终端 1,先开
zsh tools/deploy.sh                          # 终端 2

收集器不在时上报静默失败;连续五次失败后应用会睡五分钟再试,所以开晚了的收集器最多 等五分钟就能收到东西,重新部署则立刻恢复。

zsh tools/deploy.sh --selftest

会在电视上无人值守地走一遍全流程:网格、播放、面板、滚动、拖动、跨缓冲区远距离跳转、 暂停、恢复、退出、账号页,并逐步上报。这是唯一能在无人值守下检验一个构建的办法。 跑完记得再装一次正常构建。

协议

MIT。bilibili 是其所有者的商标,本项目与之无关联。

About

三星 Tizen 电视上的 bilibili 客户端 —— 遥控器操作,直连不需要后端,支持多账号 · A bilibili client for Samsung Tizen TVs

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages