# 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(魔影)
一款基于 WPF 的桌面端在线影音播放平台
---
## 📖 项目介绍
魔影(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 深圳市黑武器科技有限公司