😄 个人私有视频站 😄
仓库名
91-android-client—— 这是 nianzhibai/91 的 fork, 保留了上游完整的服务端代码,并附带一个从零手写的原生 Android 客户端, 源码在android/nineone/。 本仓库自持发布产物:服务端安装包与 Docker 镜像都由本仓库自行构建并发布到v1.0.0,install.sh与docker-compose.yml都已钉死到这个 tag —— 上游再怎么更新, 都不会影响已经部署好的实例。部署请用本仓库的install.sh。
不是网页套壳。 界面、播放器、手势全部是 Kotlin + Jetpack Compose + Media3 实现,
不加载任何网页:反编译 classes.dex,loadUrl / WebViewClient /
addJavascriptInterface / evaluateJavascript 命中数全是 0,没有任何 JS 桥。
包里确实有一个带 WebView 字样的类,来自 androidx.media3.ui 内部 SubtitleView
的旧 API 字幕回退实现(Media3 1.4.1 的构造函数会同时建好 canvas 和 WebView 两套输出视图)。
它不加载地址、不接 JS、在本包 minSdk 24 上也不参与渲染,但类客观存在 —— 所以这里如实写明,
而不是笼统地说「一个 WebView 都没有」。
| 安装包 | apk/91-client-v2.3.1.apk |
| 大小 | 2.4 MB(2,525,193 字节) |
| 版本 | 2.3.1(versionCode 10) |
| 系统要求 | Android 7.0(API 24)及以上 |
| 包名 | com.whooc.nineone |
| SHA-256 | 2e3f1fa41a76184ed78832804283eba8b4cf972390fdd0fcaaad26066f750869 |
直链:https://github.com/whooc/91-android-client/raw/main/apk/91-client-v2.3.1.apk
# 安装
adb install -r 91-client-v2.3.1.apk
# 校验(结果应和上表 SHA-256 一致)
sha256sum 91-client-v2.3.1.apk安装后首次启动需要填写你自己的 91 服务端地址 —— 地址不内置在 APK 里,
支持 host、host:port、http://host:port、https://域名,会自动补全协议头。
| 模块 | 说明 |
|---|---|
| 首页 | 推荐 / 最新,网格卡片;卡片进入视口中心时静音循环播放 12 秒预览 |
| 列表 | 关键词、标签、排序(最新 / 热门 / 最近),滚动分页 |
| 短视频 | 竖向沉浸流,上下滑动切换,左右滑动退出;可拖拽进度条;画面按真实比例完整显示(不裁剪),双指缩放 1x–5x |
| 详情 | 简介、标签、字幕列表、相关推荐、收藏 |
| 播放器 | Media3 ExoPlayer,断点续播、倍速、字幕开关、全屏、静音 |
| 片库 | 收藏与观看记录,本地持久化 |
| 我的 / 设置 | 服务器地址、四套主题、全局静音、进入密码、退出即需重登、应用名称与 Logo、清空本地数据、退出登录 |
短视频的信息层(标题、观看次数、右侧按钮、进度条)5 秒后自动隐藏,任意触摸恢复。
短视频的画面一律按真实宽高比完整显示,不做任何裁剪:不匹配手机屏幕比例的视频(1:1、3:4、4:3 这些在短片流里很常见)会居中留黑边,而不是被居中裁掉两边。想铺满屏幕就双指放大(1x–5x,以手指中心为锚点),放大后单指拖动看细节(此时拖动不会翻页,先点「还原」或缩回去再换视频),右上角常驻倍率和一个「还原」;翻到下一个视频自动回到 1x。
| 功能 | 说明 |
|---|---|
| 进入密码 | 打开应用前要输入的本机密码。加盐 PBKDF2-HMAC-SHA256(12 万次迭代)后存本机,明文不落盘,与服务器登录密码无关。退到后台超过 30 秒会重新上锁;关闭密码需要先输对当前密码。忘记只能清除应用数据重置 |
| 退出后需要重新登录 | 开关。打开后彻底关掉应用即清除本机登录状态,下次打开要重新登录;只是切到后台不算,不会因为看一眼通知就被登出 |
| 应用名称 / Logo | 设置里可改。名称实时作用于启动页、登录页、首页标题和「我的」卡片;Logo 从相册选图,居中裁剪成 512×512 存进应用私有目录。桌面图标和名称由安装包决定,运行时改不了(Android 平台限制) |
构建方式、接口列表、签名配置见 android/nineone/README.md。
- 多网盘接入 — 支持115、PikPak、123网盘、联通网盘、光鸭网盘、OneDrive、Google Drive、WebDAV等
- 低带宽播放 — 115、PikPak、123网盘、联通网盘、光鸭网盘、OneDrive 支持302模式,播放视频不消耗带宽
- 短视频模式 — 一键切换抖音风格,沉浸刷片
- 视频分享 — 视频支持一次性分享,"看完即焚"
- 爬虫脚本 — 支持导入自定义脚本,但是有一些规范,具体可以参考 SpiderFor91
sudo apt update && sudo apt install -y curl ca-certificates
# 从 v1.0.0 tag 取脚本而不是 main —— 这是「固定版本」的关键一步
curl -fsSL https://raw.githubusercontent.com/whooc/91-android-client/v1.0.0/install.sh -o install.sh
sudo bash install.sh部署完成后访问:http://服务器IP:9191/
脚本里已经固定 GITHUB_REPO=whooc/91-android-client、VERSION=v1.0.0、
INSTALL_SCRIPT_REF=v1.0.0,所以安装和升级都只会在本仓库的这个 tag 里取包,
不会碰到上游的 release。要换版本时显式覆盖即可:
sudo VERSION=v1.1.0 INSTALL_SCRIPT_REF=v1.1.0 bash install.sh安装后自动注册 91 管理命令:
91 # 打开管理菜单
91 stop # 停止服务
91 restart # 重启服务
91 update # 更新(默认仍固定在 v1.0.0)
91 status # 查看运行状态
91 reset-password # 重置密码1. 准备目录
mkdir video-site-91 && cd video-site-912. 拉取仓库内置docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/whooc/91-android-client/v1.0.0/docker-compose.yml -o docker-compose.yml3. 启动
docker compose up -ddocker-compose.yml 里的镜像地址已指向 ghcr.io/whooc/91-android-client:stable,
同样只跟本仓库走,与上游镜像无关。
常用命令:
docker compose pull && docker compose up -d # 更新并重启
docker exec -it video-site-91 ./server reset-password # 重置密码
docker compose logs -f # 查看日志以下路径均相对于部署目录:
- 一键脚本部署目录:默认
/opt/video-site-91/ - Docker Compose 部署目录:默认
docker-compose.yml所在目录
| 内容 | 一键脚本部署 | Docker Compose 部署 |
|---|---|---|
| 运行配置 | config.yaml |
data/config.yaml |
| 数据库(视频信息、用户账号、密码哈希、网盘凭证等) | data/video-site.db |
data/video-site.db |
| 封面图和预览片段 | data/previews/ |
data/previews/ |
| 站内上传的视频 | data/uploads/ |
data/uploads/ |
| 爬虫下载的视频 | data/scriptcrawlers/ |
data/scriptcrawlers/ |
| 导入的爬虫脚本 | data/crawler-scripts/ |
data/crawler-scripts/ |
ios设备不建议使用短视频模式
视频支持生成分享链接,链接只能打开一次,链接分享的视频无需登录即可播放
只有竖屏视频支持三屏画面,只有电脑端支持三屏画面,三屏画面播放视频走的是服务器代理
![]() |
![]() |
| 单屏画面 | 三屏画面 |
- 本项目仅面向个人私有部署
- 请遵守法律法规
- Cli-Proxy-API-Management-Center — 参考其页面设计
- ArtPlayer — 当前项目使用的视频播放器
- OpenList — 参考其网盘接口






