# Morin.v1 **Repository Path**: heiwuqi/Morin.v1 ## Basic Information - **Project Name**: Morin.v1 - **Description**: 魔影(Morin),一款基于WPF开发的在线观看视频、电视平台,目前仅对Windows支持。后续开放Android、iOS平台。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 3 - **Created**: 2024-05-11 - **Last Updated**: 2026-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: Moive, WPF, Video, m3u8 ## README # 魔影 Morin 基于 **Kuikly(Kotlin Multiplatform)** 的 Android 在线影音客户端:多数据源点播、 聚合搜索、电视直播、收藏与观看历史,以及**应用内版本更新**。 > 当前版本 **4.6.1**(内置源精简 + 全页面状态保持 + 播放器全屏/面板体验)。 > 4.3.0 是 Kuikly 重写版本,替代原 .NET / Avalonia 桌面客户端; > 桌面代码保留在 git 分支 `legacy/avalonia-final`,不参与当前构建。 ## 功能 - **视频点播**:多采集站、一级/二级分类(无二级时显示「全部」、按一级分别记忆)、双列卡片、 自动分页加载、分类与数据源记忆;切换数据源时保持当前源可见、不闪白、不整页刷新, 列表滚到底自动加载下一页 - **继续观看**:首页横向续播、卡片进度角标、进度 >30s 时询问「继续 / 从头」 - **聚合搜索**:全部数据源并行(10 路并发上限)、逐源流式返回(慢源不阻塞)、 360ms 防抖、相关度排序、5 分钟按页缓存、单源超时、完整结果分页(加载更多)、 本地搜索建议 / 推荐词、按源筛选、失败源内联重试、搜索历史(单条删除 / 清空) - **电视直播**:频道分组、运营商筛选、收藏 / 最近 / 频道搜索、播放器内上下换台、HLS 播放 - **播放器**:双击左右 ±10s、长按 2x、缓冲段 / 拖动时间气泡、上/下一集、倍速、循环、 静音、全屏横屏(视频 cover 铺满 + 宿主原生控制层,3 秒自动隐藏/点击唤出,可选固定横屏/跟随传感器; 受原生视频层限制,选集/换线/设置会先退出全屏)、 剧集打开即定位当前集、线路切换保持面板位置、详情、手动跳片与自动跳片撤销、断点续播、 下一集 5s 倒计时、解析失败回退、同集自动换线 - **收藏 / 历史**:继续观看、进度条、筛选、删除/清空 - **页面状态保持**:视频 / 电视 / 我的三个 Tab 常驻,切换不重建页面, 保留列表滚动位置、筛选条件与输入焦点 - **设置**:内置源只保留 360 / 豪华 / 茅台;视频源 CRUD + 搜索/健康筛选 + 健康检查 + 分类同步、电视源 CRUD(频道列表与 电视 Tab 筛选解耦)、升级自动合并新内置源与「恢复内置源」、深色/浅色主题(系统栏同步、浅色占位图与辅助文字对比度)、关于与版本更新 - **版本更新**:Gitee Release/Tag/VERSION/update.json 检查、更新说明、跳过低版本、 应用内下载 APK(进度 + SHA-256)、FileProvider 安装 ## 技术栈 Kotlin 2.1.21 · Kuikly 2.29.2 · Media3 1.4.1(ExoPlayer + HLS)· Ktor 2.3.12 · kotlinx.serialization 1.7.3 · Gradle 8.9 / AGP 8.7.3 · minSdk 26 / targetSdk 35 ## 构建 ```powershell # 首次:准备 Android SDK / JDK(已安装可跳过) .\scripts\setup-android.ps1 # Debug .\scripts\build-apk.ps1 -DebugBuild # Release(读取 client/key.properties,缺失回退 debug 签名) .\scripts\build-apk.ps1 # 安装到已连接设备 .\scripts\install-apk.ps1 ``` 产物: - `client/androidApp/build/outputs/apk/debug/androidApp-debug.apk` - `client/androidApp/build/outputs/apk/release/androidApp-release.apk` - `dist/Morin-4.6.1-kuikly-android.apk`(release 脚本复制,附 SHA-256) ## 目录 ```text client/ ├── shared/ # KMP:页面、状态、数据、播放控制(commonMain) │ # Android 平台能力(androidMain) └── androidApp/ # Android 宿主:Activity、Media3 Video 适配器、图标、内置数据 docs/ # 需求 / 原型 / 功能 / 技术 / 设计 / 结构 / 迁移记录 scripts/ # 环境、构建、安装 VERSION # 当前版本(版本检查来源之一) update.json # 版本更新清单(APK 直链 / SHA-256 / 说明) ``` ## 发布新版本 1. 修改 `client/androidApp/build.gradle.kts` 的 `versionCode` / `versionName`; 2. 更新根 `VERSION`; 3. `.\scripts\build-apk.ps1`; 4. 在 Gitee `heiwuqi/Morin.v1` 发布 Release/Tag 并上传 APK,或把直链与 SHA-256 写入 `update.json`; 5. 用旧版本实测:自动检查 → 下载 → 校验 → 安装。 `update.json` 字段:`version`、`name`、`notes`、`apkUrl`、`pageUrl`、`size`、`sha256`、`force`。 ## 文档 - [文档索引](docs/README.md) - [需求文档](docs/需求文档.md) - [原型文档](docs/原型文档.md) - [功能文档](docs/功能文档.md) - [技术文档](docs/技术文档.md) - [设计文档](docs/设计文档.md) - [项目结构](docs/项目结构.md) - [Kuikly 迁移记录](docs/Kuikly迁移记录.md) - [播放器 UX 对比与改进建议](docs/播放器UX对比与改进建议.md) ## 数据来源与协议 应用不存储任何视频内容;所有内容来自用户配置的第三方 ThinkPHP CMS 采集站。 项目使用 MIT 协议。