非官方红果短剧桌面客户端 —— 沉浸浏览 · 排行榜 · 弹幕播放 · 批量下载 · 一键合并
纯 Rust 解密与编解码内核 · 安装包不捆绑任何外部二进制 · 边下边播 · 小窗 / 隐身播放
本项目仅供个人学习、研究和交流,严禁用于任何商业用途。
- 本项目为非官方第三方客户端,与字节跳动、番茄小说、红果短剧官方没有任何关联,也未获得任何形式的授权;
- 本项目不存储、不分发任何影视内容——所有内容均由用户设备通过官方接口按用户指令获取,版权归原权利方所有;
- 使用本项目所产生的一切后果由使用者自行承担,作者不对本项目的功能、稳定性、安全性或合法性作任何担保;
- 如本项目侵犯您的合法权益,请通过 Issue 联系,我们会第一时间处理。
红果播放器(Hongguo)是面向红果短剧的 Windows / macOS 桌面客户端: Rust 业务内核 + Tauri 2 桌面外壳 + React 19 界面层。
它内置字节系短剧 App 的完整协议栈——设备注册、五头请求签名、取流、弹幕、互动、 观看历史、短信登录——并配有一套 CENC-AES-CTR 原生流式解密引擎。解密、解复用、 转码、封装全部由纯 Rust 完成,安装包不捆绑 FFmpeg 或任何外部二进制。
- 在线播放不落盘:自定义协议渐进供数、边下边解,首帧不必等整集
- 下载直接产出标准 MP4:流式解密 + 原子落盘,断网断电不留残缺文件
- 兼容模式全自动:HEVC 解不动时自动转 H.264——平台硬编 → ffmpeg 硬编 → ffmpeg 软编 → 纯 Rust 软解,四级回退
- 数据落 Turso 内嵌数据库:纯 Rust、无 C 工具链依赖,带 schema 迁移链与坏档自动恢复
- 推荐流:全屏沉浸式竖滑信息流,推荐 / 漫剧 / 真人三个频道,重复点 tab「换一批」; 滚轮或 ↑↓ 切剧,点画面进入连播锁定;进入当前剧时预取下一部的分集与流
- 找剧:搜索联想(300ms 防抖,命中剧集的词条直进播放器)+ 官方 8 维筛选面板 (体裁 / 主题 / 角色 / 年代 / 排序 / 受众 / 上线时间 / 长度),结果无限滚动
- 排行榜:频道 tab(全部 / 真人剧 / 漫剧 / AI剧 / 系列剧)× 子榜 × 筛选面板; 前 3 名金色名次、热词与热度;未上线条目行内预约,已上线直接播放
- 新剧:按上架时间倒序的封面网格 + 上新日历(前后一周,含未上线), 男频 / 女频频道筛选
- 评分 / 红果热度值 / 追剧数 / 播放量 / 题材标签 / 备案号,简介可展开
- 三个 tab:选集(网格 + 时长角标)、剧评(登录后可发评论,显示点赞与回复数)、 相关推荐(系列作品 + 猜你喜欢)
- 「继续看第 N 集」(看完 ≥95% 自动指向下一集)、收藏、点赞
- 未上线剧降级为「即将上线 + 预约」视图
seriesId走 URL 参数,详情页可收藏、可分享
- 在线流式播放:内存渐进流,边下边解,界面显示「正在缓存 xx%」; 流断供自动重试一次,播放位置不丢
- 清晰度切换:默认最高档,切档保持播放点不回跳
- 弹幕:开关 + 样式面板(透明度 / 字号 / 密度 / 显示区域),可发送弹幕 (表情选择器);暂停冻结、倍速同步、seek 清屏重建
- 倍速 0.75×–3×、音量、静音跨切集保持
- 小窗:同一窗口原地缩至 480×270 落到工作区右下角,播放零中断; 另有窗口置顶、画中画(PiP)、全屏
- 隐身模式:鼠标离开窗口 → 整窗隐藏 + 自动暂停,鼠标回来 → 原地重现 + 续播
- 连播与接力:播完自动下一集;本季完结自动接下一季第 1 集,无下一季则跟随 推荐流接力播放
- 断点续播:本地 5 秒节流落盘 + 重启恢复;同时上报云端进度
- 兼容模式:系统解不动的编码自动转 H.264,浮层显示转码进度
- 快捷键:
空格播放/暂停 ·←→快退/快进 5 秒 ·↑↓切集/切剧
- 手机号 + 短信验证码登录(含「回复短信」MFA 形态,后台自动轮询完成登录)
- 点赞、收藏(书架)、追更预约(已上线 / 待上线两组)、观看历史——云端同源, 官方 App 与第三方客户端的记录互通
- 单集评论(播放器内)与整剧剧评(详情页)
无需登录即可使用:浏览、榜单、新剧、搜索、在线播放、下载、合并。 点赞、收藏、预约、弹幕、评论需要登录。
- 下载管理:并发 1–10(默认 3),五态任务表(等待/下载中/已完成/失败/已停止), 批量重试、批量删除、一键暂停/启动;扫描磁盘可把手动拷回的文件补登记回任务列表
- 防损机制:先写
.enc.tmp,解密成功后才改名.mp4,中途断网不留残缺文件 - 一键合并:快速合并(流复制拼接,无损秒级)/ 兼容合并(转 H.264/AAC, 任何播放器可播);合并前校验编码一致性与磁盘空间,后台任务带进度
- 磁盘清理:总占用统计、按剧 / 按集删除、看完自动删除、一键清空; 在线缓存与兼容转码缓存(上限 4GB)单独管理;删除文件后保留剧集档案,之后仍可在线播放或重新下载
- 命名模板 3 种:
剧名 集号/剧名 集号 第N集/ 仅剧名
- 账户卡(登录 / MFA / 退出)、下载目录(手填 + 系统选择器)、命名模板、并发数
- 网络代理:跟随系统 / 手动指定(含常用端口预设)/ 强制直连,一键测试显示耗时
- 转码后端徽章:实时显示当前走的是硬件加速 / 软件加速 / 标准(纯 Rust),支持重新检测
- 播完自动下一集、看完自动删除开关
- 主题:自动 / 浅色 / 深色(默认深色);中英双语界面,跟随系统语言
- 应用内更新:检查更新 → 下载(进度显示)→ 安装(minisign 验签,Windows 静默安装)
| 层 | 选型 |
|---|---|
| 桌面壳 | Tauri 2(系统 WebView,无 Electron) |
| 语言 | Rust 2024 edition · tokio · reqwest(rustls) |
| 存储 | Turso 内嵌数据库(纯 Rust,hongguo.db,schema v5) |
| 解密 | aes / ctr / sm3 / md-5 等纯 Rust crate(CENC-AES-CTR) |
| 编解码 | rusty_h265 / rusty_h264 / muxide(纯 Rust)+ VideoToolbox / Media Foundation(平台硬编)+ 可选 ffmpeg |
| 层 | 选型 |
|---|---|
| 语言 | TypeScript 6 · React 19 |
| 构建 | Vite 8 · Vitest |
| 路由 / 数据 | TanStack Router(文件路由)· TanStack Query 5 |
| 状态 | Zustand 5 · zod 4 |
| UI | shadcn/ui(Radix UI)· Tailwind CSS v4 · lucide-react |
- 自定义 URI 协议:
hongguo-stream://渐进流(首探 256KB → 盒游走定位 moov → 1MB 分块顺序填充,首帧只依赖头 + 尾 + 样本表);hongguo-local://本地文件 Range 播放;hongguo-cover://封面代理(HEIC → JPEG,磁盘哈希缓存) - 签名栈:
x-gorgon/x-argus/x-ladon/x-helios/x-medusa五头签名, 黄金向量单测锁定正确性 - 四级转码回退:macOS VideoToolbox / Windows Media Foundation 平台硬编 → ffmpeg 硬编(NVENC / QSV / AMF)→ ffmpeg 软编 → rusty_h265 + rusty_h264 纯 Rust 软解, 启动时探测并常驻徽章展示
- 可靠性:单实例锁、协议回调三层 panic 防线、crash.log 取证、数据库坏档自动恢复、 任务中断恢复、旧 JSON 存档一次性幂等迁移
- Rust 1.99+(edition 2024)
- Node.js 20+ / pnpm 10+
- Windows 10/11 或 macOS 10.15+
make dev # Vite + Tauri 开发模式(= pnpm tauri:dev)
make release # 打包 NSIS / DMG(= pnpm tauri:build)
make test # vitest 前端单测
make test-rust # cargo test
make lint # ESLint + Prettier + cargo clippy(任一失败即失败)
make typecheck # tsc --noEmit
make assets # 重新生成图标 / macOS 名称本地化(离线)无需安装 FFmpeg——解密、解复用、合并是纯 Rust 零外部依赖,开箱即用。 系统里如果恰好有 ffmpeg,只有「HEVC → H.264 转码」这一步会自动改用它来加速, 没有它也不影响任何功能。
hongguo-desktop/
├── src-tauri/src/
│ ├── signer/ # 字节系请求签名(常量黑盒锁定,勿改)
│ ├── domain/ # 官方 App 接口客户端(api/ 按端点域目录化)、CENC 解密、MP4 解析
│ ├── service/ # 应用服务:下载调度、播放编排、合并、转码、存储清理……
│ ├── commands/ # Tauri command 薄层(约 80 个,与 service 同名同构)
│ ├── protocol/ # 自定义 URI scheme(流式播放 / 本地文件 / 封面代理)
│ ├── media/ # 编解码与转码管线(平台硬编 → ffmpeg → 纯 Rust)
│ ├── store/ # Turso 内嵌数据库(entity/ 按聚合拆分 / 迁移链 / 坏档恢复)
│ ├── utils/ # 无业务语义的纯函数(json / time / hex / url)
│ └── bootstrap/ # 启动装配(存储 → 设备 → 重扫描 → 队列 → 转码探测)
└── src/
├── pages/ # TanStack 文件路由(薄壳)+ 页面实现就近放置
├── features/ # 复杂能力域(player 播放引擎 / update 自动更新)
├── service/ # IPC 封装(tauri/)+ 命令(commands/)+ 查询(queries/)+ zod 契约(schema/)
├── stores/ # zustand 客户端状态
├── components/ # shadcn/ui + 布局 + 跨页展示件
├── hooks/ # 跨页通用 hooks
├── locales/ # 中英文案资源
├── utils/ # 无业务纯函数(format / range / cover / playback-prefs…)
└── styles/ # 全局样式
官方 App 接口要求每个请求携带 x-gorgon / x-argus / x-ladon / x-helios / x-medusa
五个签名头。签名缺失或算错时,服务端不报错,而是返回 HTTP 200 + 0 字节——只看
状态码会误判。
排查时看响应体的字节数而不是状态码;要逐端点的详细信息,用 RUST_LOG=debug
启动应用。
视频是 HEVC 编码,系统 WebView 解码需要硬件支持。应用已内置「兼容模式」:转成 H.264 后播放——平台硬编(Apple 芯片 VideoToolbox / Windows Media Foundation)→ ffmpeg(NVENC/QSV/AMF 硬编)→ 纯 Rust 软解,自动回退,无需手动配置。
不能。 signer/constants.rs 里的值是黑盒实测产物,与服务端一一对应。改任何一个,
签名都会被静默丢弃。
浏览、榜单、新剧、搜索、在线播放、下载、合并均无需登录。点赞、收藏、预约、 发弹幕、发评论需要手机号 + 短信验证码登录(设置页账户卡)。
本项目以 PolyForm Noncommercial 1.0.0 授权,全文见 LICENSE。
- ✅ 允许:任何非商业目的的使用、修改与再分发——个人学习、研究、私人娱乐、 兴趣项目等
- ❌ 禁止:一切商业用途(出售、付费分发、商业产品集成、流量变现等)
- 📋 分发时须附上本协议(或其网址)与
Required Notice版权行
该协议禁止商业使用,因此不属于 OSI 认证开源许可证;它是由 Polyform Project 起草的规范化许可文本, 用以精确表达「仅供个人学习交流、禁止商用」的授权意图。
第三方组件各自以其自身许可证授权,声明见 THIRD-PARTY-NOTICES.md; 项目声明与免责条款见 NOTICE。