# Morin.v1 **Repository Path**: bufansoft/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**: 0 - **Forks**: 3 - **Created**: 2026-09-03 - **Last Updated**: 2026-09-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Morin Logo

Morin(魔影)

一款基于 WPF 的桌面端在线影音播放平台

Version .NET Platform License Language

--- ## 📖 项目介绍 魔影(Morin)是一款基于 .NET 10 + WPF 开发的桌面端在线影音播放客户端,支持**视频点播**和**电视直播**。用户可自由配置多个 ThinkPHP CMS 数据源,浏览分类、搜索内容、收藏节目、记录观看历史。 ### 核心特性 - 🎬 **多源视频点播** — 支持 JSON/XML 双协议 ThinkPHP CMS,多数据源自由切换 - 📺 **电视直播** — 频道分组浏览、运营商筛选,支持 M3U8 播放列表导入 - 🔍 **全局聚合搜索** — 实时并行搜索所有数据源,200ms 防抖,键盘导航 - 🎮 **沉浸式播放器** — HTML5 播放器 + HLS.js,全屏覆盖层 3 秒自动隐藏,悬浮进度预览 - ⚡ **播放速度控制** — 6 档播放速度 (0.5x~2x),ComboBox + 键盘快捷调速 - ❤️ **收藏 & 历史** — 收藏管理、观看历史(含进度恢复、启动续播提示) - ⏭️ **跳过片头片尾** — 自定义跳片时间,持久化配置 - 🔁 **循环播放模式** — 顺序播放 / 列表循环 / 单集循环,一键切换 - 📸 **截图功能** — 按 S 键截取当前视频帧,自动弹出保存对话框 - 🪟 **Mini 播放器** — 精简窗口 480×320,始终置顶,适合边看边工作 - 📌 **窗口置顶** — 播放器置顶开关,Pin 图标切换 - 🌗 **深色/浅色主题** — Material Design 3,启动跟随系统主题 - 💾 **智能缓存** — 分类、视频列表、详情多级缓存,启动秒开 - 🧪 **单元测试** — xUnit + Moq,71 个测试覆盖核心模块 --- ## 🖥️ 界面预览 ``` ┌──────────────────────────────────────────────────────────┐ │ [Logo] [视频 | 电视 | 我的] [🔍 搜索...] [⚙ ☀ ─ □ ✕] │ ├──────────────────────────────────────────────────────────┤ │ │ │ 视频浏览 / 电视直播 │ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │ 视频1 │ │ 视频2 │ │ 视频3 │ │ │ └──────┘ └──────┘ └──────┘ │ │ │ │ 自适应网格布局 · 无限滚动加载 │ │ │ └──────────────────────────────────────────────────────────┘ ``` --- ## 🛠️ 技术栈 | 技术 | 版本 | 用途 | |------|------|------| | .NET SDK | 10.0 | 运行时框架 | | WPF | — | 桌面 UI 框架 | | CommunityToolkit.Mvvm | 8.4 | MVVM 架构(ObservableProperty / Messenger) | | MaterialDesignThemes | 5.3 | Material Design 3 主题与控件 | | Microsoft.Web.WebView2 | 1.0 | 嵌入式 Chromium 浏览器(视频播放) | | Riok.Mapperly | 4.3 | 编译时对象映射(零运行时开销) | | Microsoft.Extensions.DI | 10.0 | 依赖注入容器 | | NLog | 6.1 | 结构化日志 | | xUnit + Moq | 2.x | 单元测试框架 | ### 架构模式 ``` View (XAML) ←→ ViewModel (MVVM) ←→ Service ←→ API / Storage ↕ DataTemplate ↕ Messenger ↕ Adapter App.xaml 自动映射 松耦合 ViewModel 通信 协议抽象层 ``` --- ## 🚀 快速开始 ### 环境要求 - **操作系统**:Windows 10 (1809+) / Windows 11 - **运行时**:[.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) - **浏览器**:WebView2 Runtime(Windows 10/11 已内置) ### 从源码运行 ```bash # 1. 克隆仓库 git clone https://gitee.com/heiwuqi/Morin.v1.git cd Morin.v1 # 2. 还原依赖 dotnet restore Morin.sln # 3. 构建并运行 dotnet run --project Morin.Desktop/Morin.Desktop.csproj # 4. 运行测试 dotnet test Morin.Desktop.Tests/Morin.Desktop.Tests.csproj ``` ### 首次使用 ``` 启动 → 设置(⚙) → 视频设置 → 添加数据源(填写 API 地址) ↓ 返回主页 → 选择数据源 → 浏览分类 → 点击视频 → 播放! ``` --- ## 📁 项目结构 ``` Morin.Desktop/ ├── Adapters/ # CMS 协议适配器 ├── Behaviors/ # WPF 附加行为(自适应网格、滚动加载、光标隐藏、窗口关闭) ├── Common/ # HTTP 提供者、JSON/XML 工具、M3U8 解析器 ├── Configs/ # 用户偏好配置 ├── Converters/ # XAML 值转换器(8个) ├── Mappers/ # Riok.Mapperly 对象映射 ├── Messages/ # MVVM 消息定义 ├── Models/ # 数据模型(20+) ├── Resources/ # 图片、player.html、XAML 样式(8个) ├── Services/ # ApiService、AppService、PlayerWindowService(8个) ├── ViewModels/ # 18 个 ViewModel(含 PlayerWebMessageRouter) └── Views/ # 15 个 XAML View Morin.Desktop.Tests/ ├── PlayerWebMessageRouterTests.cs # WebView2 消息路由测试(15 个) ├── AppServiceTests.cs # 业务服务层测试(10 个) ├── HttpProviderTests.cs # HTTP 请求测试(11 个) ├── M3U8ParserTests.cs # M3U8 解析测试 ├── JsonProviderTests.cs # JSON 序列化测试 └── ThinkPhpAdapterTests.cs # CMS 适配器测试 ``` --- ## 📚 文档 | 文档 | 说明 | |------|------| | [功能文档](docs/功能文档.md) | 完整的功能模块、交互流程、键盘快捷键说明 | | [技术文档](docs/技术文档.md) | 架构设计、MVVM 通信、播放器架构、数据存储 | | [CHANGELOG](CHANGELOG.md) | 版本变更记录 | | [CONTRIBUTING](CONTRIBUTING.md) | 贡献指南、代码规范、PR 流程 | | [CLAUDE.md](CLAUDE.md) | AI 助手项目指引 | --- ## 🤝 交流与贡献 - **微信**:cool-kuangxj - **邮箱**:kuangxj#qq.com(`#` 替换为 `@`) - **仓库**:[Gitee](https://gitee.com/heiwuqi/Morin.v1) 欢迎提交 Issue 和 Pull Request!详见 [CONTRIBUTING.md](CONTRIBUTING.md)。 --- ## 📄 开源协议 本项目采用 [MIT License](LICENSE) 开源协议。 ---

Made with ❤️ by 深圳市黑武器科技有限公司