## File: README.md

🌐 Language
    
      
    
  








# 软件介绍

zyfun是一款免费、极简、全能的跨平台影音管家，一站式管理 T1-T4 全类型资源，内置多核播放器随心切换。独家老板键，一键隐身摸鱼无忧。用观影发现世界！


展开查看软件截图

|                    影视                     |                   直播                   |
| :-----------------------------------------: | :--------------------------------------: |
|     |  |
|                  **历史**                   |                 **播放**                 |
|  |  |



## 🌴 注意事项

- 仅此Github发布，请勿上当受骗；请各管理者不要宣传及引流本软件。
- 强烈倡导合法观影，本软件仅作为播放工具，不涉及资源存储或分发。
- 仅供个人学习交流之用，24小时内请自觉卸载，勿作商业用途。
- 前身来源于[ZY-Player](https://github.com/Hunlongyu/ZY-Player)，图标由@fourbeauty设计。
- 在开始使用前，请务必详读并同意用户协议，确保遵守相关规定。

## 💻 跨平台说明

- **MacOS**:
  - 数据库/文件/插件/日志 路径: `~/Library/Application Support/zyfun/`
  - 二进制 路径: `~/.zy/bin/`
- **Linux**:
  - 数据库/文件/插件/日志 路径: `~/.config/zyfun/`
  - 二进制 路径: `~/.zy/bin/`
- **Windows**:
  - 数据库/文件/插件/日志 路径: `%USERPROFILE%\AppData\Roaming\zyfun\`
  - 二进制 路径: `%USERPROFILE%\.zy\bin\`
  

## 🛠️ 下载安装

> **开发版下载**: 需登录Github账号

> **最低要求**: 和chromium内核要求保持一致

| 操作系统 | x64 | arm64 | loong64 | 发行版                                                                                                                                                                                                                      | 开发版                                                                            | 最低要求   |
| :------: | :-: | :---: | :-----: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ---------- |
| Windows  | ✅  |  ✅   |   ➖    | [GitHub](https://github.com/Hiram-Wong/zyfun/releases)                                                                                                                                                                      | [GitHub](https://github.com/Hiram-Wong/zyfun/actions/workflows/nightly-build.yml) | >= win10   |
|  MacOS   | ✅  |  ✅   |   ➖    | [GitHub](https://github.com/Hiram-Wong/zyfun/releases)                                                                                                                                                                      | [GitHub](https://github.com/Hiram-Wong/zyfun/actions/workflows/nightly-build.yml) | >= macOS12 |
|  Linux   | ✅  |  ✅   |   ❌    | [GitHub](https://github.com/Hiram-Wong/zyfun/releases)  [如意玲珑应用商店](https://store.linyaps.org.cn/)  [AUR软件包](https://aur.archlinux.org/packages?O=0&SeB=nd&K=zyfun&outdated=&SB=p&SO=d&PP=50&submit=Go) | [GitHub](https://github.com/Hiram-Wong/zyfun/actions/workflows/nightly-build.yml) |            |
| Harmony  | ❌  |  ❌   |   ➖    |                                                                                                                                                                                                                             |                                                                                   |


展开查看安装问题

#### MacOS 安装后打开提示「文件已损坏」

```bash
sudo spctl --master-disable
sudo xattr -cr /Applications/zyfun.app
```

#### Linux Appimage运行失败

> Running as root without --no-sandbox is not supported

```bash
./zyfun.AppImage --no-sandbox
```

> dlopen()：error loading libfuse.so.2

```bash
sudo apt-get install libfuse2
```

> Exiting GPU process due to errors during initialization

```bash
xhost +
```

#### Linux deb包安装失败

> Package libnss3-1d is not installed

```bash
sudo apt-get install libnss3-1d
```

> Package libxss1 is not installed

```bash
sudo apt-get install libxss1
```

#### Linux rpm包安装失败

> Dependency check failed libXScrnSaver is needed

```bash
sudo yum install epel-release
sudo yum install libXScrnSaver
```

> Dependency check failed xdg-utils is needed

```bash
sudo yum install xdg-utils
```



## 📚 数据结构

> 请严格按照数据结构导入数据, 避免不必要的报错(如数据字段类型不匹配)


展开查看接口说明

```
/* Detailed source-code truncated for AI context efficiency. */
```



## 🤝 参与贡献

以下是您可以做出贡献的一些方式：

- **贡献代码**：开发新功能或优化现有代码 <[开发文档](docs/Develop.md)> <[Mcp文档](docs/Mcp.md)>
- **修复错误**：提交您发现的任何错误的修复 <[提交规范](docs/Conventional_Commits.md)>
- **维护问题**：帮助管理GitHub问题
- **产品设计**：参与设计讨论
- **编写文档**：改进用户手册和指南
- **社区参与**：加入讨论并帮助用户

[![][github-contributors-shield]][github-contributors-link]

## 🌟 Star历史

<a href="https://www.star-history.com/#Hiram-Wong/zyfun&Date">
 
   
   
   
 
</a>

## 💰 金主爸爸

- [NodeSupport](https://github.com/NodeSeekDev/NodeSupport) 赞助了本项目
- [](https://yxvm.com/)



[github-release-shield]: https://img.shields.io/github/v/release/Hiram-Wong/zyfun?label=Release&logo=github
[github-release-link]: https://github.com/Hiram-Wong/zyfun/releases
[github-nightly-shield]: https://img.shields.io/github/actions/workflow/status/Hiram-Wong/zyfun/nightly-build.yml?label=NightlyBuild&logo=github
[github-nightly-link]: https://github.com/Hiram-Wong/zyfun/actions/workflows/nightly-build.yml
[github-contributors-shield]: https://openomy.app/svg?repo=Hiram-Wong/zyfun&chart=bubble&latestMonth=12
[github-contributors-link]: https://openomy.app/github/Hiram-Wong/zyfun
[github-license-shield]: https://img.shields.io/github/license/Hiram-Wong/zyfun?label=License&logo=gnu
[github-license-link]: https://github.com/Hiram-Wong/zyfun/blob/main/LICENSE.txt
[fossa-shield]: https://app.fossa.com/api/projects/git%2Bgithub.com%2FHiram-Wong%2Fzyfun.svg?type=shield
[fossa-link]: https://app.fossa.com/projects/git%2Bgithub.com%2FHiram-Wong%2Fzyfun?ref=badge_shield
[sponsor-shield]: https://img.shields.io/badge/赞助支持-FF6699.svg?logo=githubsponsors&logoColor=white
[sponsor-link]: https://ko-fi.com/hiramwong
[telegram-shield]: https://img.shields.io/badge/IM-Telegram-0088CC?logo=telegram
[telegram-link]: https://t.me/+IOovrYLP7gYwYmNl



[readmex-shield]: https://raw.githubusercontent.com/CodePhiliaX/resource-trusteeship/main/readmex.svg
[readmex-link]: https://readmex.com/Hiram-Wong/ZyPlayer
[deepwiki-shield]: https://deepwiki.com/badge.svg
[deepwiki-link]: https://deepwiki.com/Hiram-Wong/zyfun
[zread-shield]: https://img.shields.io/badge/Ask_Zread-_.svg?style=flat&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff
[zread-link]: https://zread.ai/Hiram-Wong/zyfun



[rank-hellogithub-shield]: https://api.hellogithub.com/v1/widgets/recommend.svg?rid=c54bf4d457b64ee7a84fd1ea0b36419a
[rank-hellogithub-link]: https://hellogithub.com/repository/Hunlongyu/ZY-Player
[rank-trendshift-shield]: https://trendshift.io/api/badge/repositories/20293
[rank-trendshift-link]: https://trendshift.io/repositories/20293
[rank-producthunt-shield]: https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1019733&theme=light
[rank-producthunt-link]: https://www.producthunt.com/products/zyfun?embed=true&utm_source=badge-featured&utm_medium=badge&utm_source=badge-zyfun

---

## File: docs/Conventional_Commits.md

> 参考[Conventional Commits](https://www.conventionalcommits.org/zh-hans/v1.0.0/)

## 结构

提交信息由 三部分组成：

1. 标题 (Header)：简洁描述此次更改内容。
2. 正文 (Body)：详细说明更改的背景、原因、以及具体改动（可选）。
3. 页脚 (Footer)：用于补充关联任务或备注信息（如关闭的 issue 编号或重大变更提醒）。

基本格式：

```plain
<type>(<scope>): <subject>



<footer>
```

### 1. 标题格式

```
<type>(<scope>): <subject>
```

- `type` (必填)：本次提交的更改类型，明确表明变更的性质。
- `scope` (可选)：本次变更影响的范围（模块、功能、文件等）。
- `subject` (必填)：简要描述更改内容，控制在 50 个字符以内，语句开头小写，不加句号。

type 的取值：

- `feat`：新功能（feature）。
- `fix`：修复 bug。
- `docs`：文档相关（如 README、注释）。
- `style`：代码格式化（不影响代码逻辑）。
- `refactor`：代码重构（既不修 bug 也不加功能）。
- `perf`：性能优化。
- `test`：增加或修改测试用例。
- `build`：构建系统或外部依赖相关（如修改 package.json）。
- `ci`：修改 CI 配置或脚本。
- `chore`：不修改代码的杂务（如更改构建流程、配置文件）。
- `revert`：回滚提交。

---

示例：

```
feat(auth): 添加用户登录功能
fix(cart): 修复购物车价格计算错误
docs: 更新 API 文档
style: 格式化代码
refactor(core): 优化数据处理逻辑
```

### 2. 正文格式

正文用于详细说明本次更改的背景和原因，建议包括以下内容：

- 改变的动机（Why）。
- 具体改动内容（What）。
- 改动的影响（Impact）。

书写规范：

- 每行控制在 72 个字符以内。
- 使用英文句子结构（推荐），或者简洁的中文描述。

示例：

```
fix(cart): 修复购物车价格计算错误
- 修复了当购物车有多个商品时，价格计算不正确的问题。
- 原因是数量累加逻辑未考虑浮点数运算的精度。
```

### 3.页脚格式

页脚用于补充重要信息，例如：

- 关闭的 Issue：

```
Closes #123
```

- 重大变更：

```
BREAKING CHANGE: 重命名了用户认证接口 `/auth` 为 `/user/auth`。
```

- 其他备注：

示例：

```
feat(user): 添加用户注册功能

实现了用户通过邮箱注册的功能，并进行了基础验证。
未来将进一步支持手机号注册。

BREAKING CHANGE: 用户模型字段 `username` 已改为 `userName`。
Closes #45
```

### 完整示例

```
feat(auth): 添加用户登录功能

支持通过邮箱和密码登录，并返回 JWT token。
未来版本将支持 OAuth 登录。

BREAKING CHANGE: API 接口 `/api/v1/login` 改为 `/api/v2/auth/login`。
Closes #101
```

## 使用工具强制规范

1. `commitlint`：检查提交信息是否符合规范。
2. `husky`：在提交前（如 pre-commit 或 commit-msg 阶段）自动检查提交信息。

### 配置步骤：

1. 安装依赖：

```bash
yarn add -D @commitlint/config-conventional @commitlint/cli husky
```

2. 创建 commitlint.config.js 文件：

```js
export default {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test', 'types'],
    ],
  },
};
```

3. 启用 husky 钩子：

```bash
yarn husky install
```

创建 commit-msg 钩子文件：

```bash title=".husky/commit-msg"
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx --no-install commitlint --edit "$1"
```

然后使脚本可执行：

```bash
chmod +x .husky/commit-msg
```

4. 验证提交信息： 当提交的消息不符合规范时，Git 会报错并中断提交流程。

使用 Angular 提交规范可以提高项目协作的效率，并为版本管理和自动化工具（如 Semantic Release）提供基础支持。

> 也可以使用[simple-git-hooks](https://www.npmjs.com/package/simple-git-hooks)

---

## File: docs/Develop.md

# 🖥️ Develop

## IDE Setup

### VSCode like

- Editor: [VS Code](https://code.visualstudio.com), etc. Any VS Code compatible editor.
- Recommended extensions are listed in [`.vscode/extensions.json`](/.vscode/extensions.json).

## Project Setup

### Install

```bash
pnpm install
```

### Development

### Setup Rust

Download [rust-lang](https://forge.rust-lang.org/infra/other-installation-methods.html) and install

### Setup Node.js

The required Node.js version is defined in `.node-version`. Use a version manager like [nvm](https://github.com/nvm-sh/nvm) or [fnm](https://github.com/Schniz/fnm) to install it automatically:

```bash
nvm install
```

### Setup pnpm

The pnpm version is locked in the `packageManager` field of `package.json`. Just enable corepack and it will use the correct version automatically:

```bash
corepack enable
```

### Install Dependencies

```bash
pnpm install
```

### ENV

```bash
cp .env.example .env
```

### Start

```bash
pnpm dev
```

### Debug

```bash
pnpm debug
```

Then input chrome://inspect in browser

### Test

```bash
pnpm test
```

### Build

```bash
# For windows
$ pnpm build:win

# For macOS
$ pnpm build:mac

# For Linux
$ pnpm build:linux
```

---

## File: docs/HarmonyOS_Electron.md

# HarmonyOS Electron 快速上手指南

本指南将帮助您在 30 分钟内快速上手 HarmonyOS Electron 开发。

## 📋 准备清单

### 开发环境

- [ ] DevEco Studio 4.0+
- [ ] HarmonyOS SDK API Level 10+
- [ ] Node.js 16.x+
- [ ] 鸿蒙设备或模拟器

### 必需文件

- [ ] Electron 应用源码或编译产物
- [ ] 开发者证书（可选，用于签名）

## 🚀 5 分钟快速开始

### 步骤 1: 克隆项目

```bash
git clone https://github.com/ohosvscode/ohos_electron_hap.git
cd ohos_electron_hap
```

### 步骤 2: 添加 Electron 应用

将您的 Electron 应用代码放入：

```
web_engine/src/main/resources/resfile/resources/app/
```

### 步骤 3: 构建运行

1. 用 DevEco Studio 打开项目
2. 点击 **Build** → **Build Hap(s)**
3. 点击运行按钮安装到设备

🎉 **恭喜！您的第一个鸿蒙 Electron 应用已经运行起来了！**

## 📖 详细配置教程

### 自定义应用信息

#### 修改应用名称

编辑 `electron/src/main/resources/zh_CN/element/string.json`：

```json
{
  "string": [
    {
      "name": "EntryAbility_label",
      "value": "我的鸿蒙应用"
    }
  ]
}
```

#### 替换应用图标

1. 准备图标文件（建议 512x512 PNG）
2. 替换 `AppScope/resources/base/media/app_icon.png`
3. 重新构建应用

#### 设置启动窗口

编辑 `electron/src/main/module.json5`，在 abilities 中添加：

```json
"metadata": [
  {
    "name": "ohos.ability.window.width",
    "value": "1200"
  },
  {
    "name": "ohos.ability.window.height",
    "value": "800"
  },
  {
    "name": "ohos.ability.window.left",
    "value": "center"
  },
  {
    "name": "ohos.ability.window.top",
    "value": "center"
  }
]
```

### 权限配置

#### 基础权限（自动获得）

这些权限会自动获得，无需特殊申请：

- 网络访问
- 获取网络信息
- 后台运行
- 读取剪贴板

#### 需要申请的权限

编辑 `web_engine/src/main/module.json5`，在 `requestPermissions` 中添加：

```json
{
  "name": "ohos.permission.CAMERA",
  "reason": "$string:camera_reason",
  "usedScene": {
    "abilities": ["EntryAbility"],
    "when": "inuse"
  }
}
```

常用权限列表：

- `ohos.permission.CAMERA` - 相机
- `ohos.permission.MICROPHONE` - 麦克风
- `ohos.permission.LOCATION` - 位置
- `ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY` - 下载目录

### 应用签名

#### 申请开发者证书

1. 访问 [华为开发者联盟](https://developer.huawei.com/)
2. 注册开发者账号
3. 申请 HarmonyOS 应用签名证书

#### 配置签名

1. 在 DevEco Studio 中选择 **File** → **Project Structure**
2. 选择 **Signing Configs**
3. 配置证书文件和密码
4. 重新构建生成已签名 HAP

## 💡 实用示例

### 示例 1: 创建悬浮窗

```javascript
const { BrowserWindow } = require('electron');

function createFloatWindow() {
  const floatWindow = new BrowserWindow({
    windowInfo: {
      type: 'floatWindow',
    },
    width: 400,
    height: 300,
    transparent: true,
    opacity: 0.9,
    frame: false,
    alwaysOnTop: true,
  });

  floatWindow.loadURL('https://www.example.com');
  return floatWindow;
}
```

### 示例 2: 请求系统权限

```javascript
const { systemPreferences } = require('electron');

async function requestPermissions() {
  // 请求相机权限
  const cameraGranted = await systemPreferences.requestSystemPermission('camera');
  console.log('相机权限:', cameraGranted ? '已授权' : '被拒绝');

  // 请求麦克风权限
  const micGranted = await systemPreferences.requestSystemPermission('microphone');
  console.log('麦克风权限:', micGranted ? '已授权' : '被拒绝');

  // 请求目录访问权限
  const dirGranted = await systemPreferences.requestDirectoryPermission(null);
  console.log('目录权限:', dirGranted ? '已授权' : '被拒绝');
}

// 在应用启动时调用
app.whenReady().then(requestPermissions);
```

### 示例 3: 检查权限状态

```javascript
const { systemPreferences } = require('electron');

function checkPermissionStatus() {
  const cameraStatus = systemPreferences.getMediaAccessStatus('camera');
  const micStatus = systemPreferences.getMediaAccessStatus('microphone');

  console.log('权限状态:', {
    camera: cameraStatus, // 'granted', 'denied', 'not-determined'
    microphone: micStatus,
  });
}
```

## 🛠️ 调试技巧

### 渲染进程调试

```javascript
// 在主进程中
const { BrowserWindow } = require('electron');

const win = new BrowserWindow({
  webPreferences: {
    nodeIntegration: true,
    contextIsolation: false,
  },
});

// 打开开发者工具
win.webContents.openDevTools();
```

### 主进程调试

#### 1. 启用调试模式

编辑 `web_engine/src/main/ets/components/WebWindow.ets`：

```typescript
// 添加调试参数
let inspect = '--inspect=9229';
let vec_args = [
  '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
  resDir,
  inspect, // 添加这行
];
```

#### 2. 配置端口转发

```bash
hdc fport tcp:9229 tcp:9229
```

#### 3. Chrome 调试

1. 在 Chrome 中访问：`chrome://inspect`
2. 点击 "Configure..." 添加 `localhost:9229`
3. 启动应用后点击 "inspect" 开始调试

## 🔧 常见问题解决

### 问题 1: 构建失败 "找不到 SO 库"

**解决方案**:

1. 检查 `electron/libs/arm64-v8a/` 目录是否存在
2. 确认 5 个 SO 文件都已正确放置
3. 检查文件权限

### 问题 2: 应用启动崩溃

**解决方案**:

1. 检查 Electron 应用代码是否放在正确位置
2. 确认应用代码已正确编译（如 TypeScript → JavaScript）
3. 查看 DevEco Studio 的日志输出

### 问题 3: 权限被拒绝

**解决方案**:

1. 检查 `module.json5` 中的权限声明
2. 确认已正确调用权限请求 API
3. 对于 ACL 权限，确认已申请相应证书

### 问题 4: 三方库不兼容

**解决方案**:

```javascript
// 检查平台
if (process.platform === 'ohos') {
  // 鸿蒙平台特殊处理
  console.log('运行在 HarmonyOS 上');
}

// 替换不兼容的库
const fs = process.platform === 'ohos' ? require('./ohos-fs-polyfill') : require('fs');
```

## 📚 进阶学习

### 了解鸿蒙文件系统

```javascript
// 应用数据目录
const userDataPath = '/data/storage/el2/base/files';
const tempPath = '/data/storage/el2/base/temp';
const cachePath = '/data/storage/el2/base/cache';

// 使用 Electron API
const { app } = require('electron');
console.log('用户数据目录:', app.getPath('userData'));
console.log('临时目录:', app.getPath('temp'));
```

### 性能优化建议

1. **预加载重要资源**: 将常用文件放在应用包内
2. **合理使用权限**: 只申请必需的权限
3. **优化启动时间**: 减少首屏加载资源
4. **内存管理**: 及时释放不用的窗口和资源

### 发布准备

1. **测试各种权限场景**
2. **验证多窗口功能**
3. **检查应用图标和名称**
4. **准备应用商店描述**

## 🎯 下一步

- 💬 加入开发者社区交流

---

**需要帮助？**

- 📖 查看完整文档
- 🐛 提交 Issue
- 💬 联系维护团队

祝您开发愉快！🎉

---

## File: docs/Loong_Electron.md

# Loong Electron 快速上手指南

本指南将帮助您在 5 分钟内快速上手 Loong Electron 开发。

[uos loong文档](https://uosdn.uniontech.com/#document3?dirid=6669618394a5a82328adfa2c&id=6669618394a5a82328adfa30)

[loong官方文档](https://docs.loongnix.cn/electron/doc/list/02.%E5%AE%89%E8%A3%85%E8%AF%B4%E6%98%8E.html)

[咱龙了吗?](https://areweloongyet.com/)

### 步骤 1: 安装npm管理工具。

```bash
#!/bin/bash
pkgsource=http://ftp.loongnix.cn/nodejs/LoongArch/dist/v20.8.0/node-v20.8.0-linux-loong64.tar.gz
[ -f $(basename $pkgsource) ] || wget $pkgsource
sudo mkdir -p /opt/nodejs
sudo tar --strip-components=1 -C /opt/nodejs -xvf $(basename $pkgsource)
sudo tee /etc/profile.d/nodejs.sh << "EOF"
export PATH=/opt/nodejs/bin:$PATH
export C_INCLUDE_PATH=/opt/nodejs/include:$C_INCLUDE_PATH
EOF
```

```bash
sudo bash install_npm.sh
source /etc/profile.d/nodejs.sh
```

### 步骤 2: 安装Electron

由于loongarch环境的electron官方没有编译对应的版本。

因此需要ELECTRON_MIRROR指定龙芯镜像源。同时设置electron_use_remote_checksums=1不检查校验文件。

```bash
#!/bin/bash
export electron_use_remote_checksums=1
if [ "$(arch)" == "loongarch" ];then
export ELECTRON_MIRROR="http://ftp.loongnix.cn/electron/LoongArch/"
else
export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
fi
npm install electron@26.4.3 -g --unsafe-perm=true --allow-root
npm info -g electron
```

```bash
sudo bash install_electron.sh
```

## 💡 程序示例

### 步骤 1: 下载源码及安装依赖

```bash
git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install
```

### 步骤 2: 编译打包

```bash
npm install --save-dev @electron-forge/cli
npx electron-forge import
npm run make
sudo dpkg -i /home/$HOME/electron-quick-start/out/make/deb/x64/electron-quick-start_1.0.0_amd64.deb
```

---

## File: docs/Mcp.md

# Mcp

### debug-electron-mcp

> [Document](https://github.com/TheDarkSkyXD/debug-electron-mcp)

```json
{
  "debug-electron-mcp": {
    "args": ["-y", "@debugelectron/debug-electron-mcp@latest"],
    "command": "npx"
  }
}
```

### swagger-mcp

> [Document](https://github.com/amrsa1/swagger-mcp)

```json
{
  "swagger-mcp": {
    "args": ["-y", "swagger-mcp@latest"],
    "command": "npx",
    "env": {
      "API_BASE_URL": "http://127.0.0.1:9978",
      "API_DOCS_URL": "http://127.0.0.1:9978/docs/json"
    }
  }
}
```

### tdesign-mcp

> [Document](https://cloud.tencent.com/developer/mcp/server/11721)

```json
{
  "tdesign-mcp-server": {
    "args": ["-y", "tdesign-mcp-server"],
    "command": "npx"
  }
}
```

---

## File: src/renderer/src/components/multi-player/README.md

> 忽略dplayer/nplayer/oplayer说明 (已移除)

- 差异说明
  - 解码器
    - dash
      - xgplayer: shaka([dash加载ranage为0](https://github.com/bytedance/xgplayer/issues/1674))
      - artplayer/oplayer/nplayer/dplayer: dash
    - flv
      - oplayer: mpegts
      - artplayer/xgplayer/nplayer/dplayer: flv
    - mpegts: oplayer/xgplayer不支持ts分片类型
    - torrent: xgplayer不支持
    - xgplayer: 解码器默认参数与其他不对齐(参数不一致)
  - 请求头(不支持情况) -> 链接绑请求头 -> 底层拦截(electron)
    - oplayer: dash/flv/shaka均不支持
    - xgplayer: 仅m3u8/flv支持
    - torrent: 均不支持
    - shaka: 解码器只有第一次请求mpd存在请求头 m4s 不带请求头
  - 记忆
    - oplayer: 赋值音量与ui不对应(功能不影响) -> 静音直接显示0 但 赋值会显示赋值
    - oplayer: 倍速/音量/静音记忆失效(偶发)
  - 右键
    - 支持: artplayer/dplayer/nplayer(不支持画质数据)
    - 不支持: xgpayer/oplayer
  - 音量
    - artplayer/dplayer/oplayer/xgplayer: 静音显示0
    - nplayer: 静音显示原音量
    - artplayer: 静音点击音量条会提示音量变动但是ui没渲染实际也是静音, 拖动直接恢复
  - 弹幕
    - dplayer: 弹幕使用 url+blob / apiBackend
    - dplayer: 弹幕发布无法控制底部距离
    - oplayer: 渲染有问题获取不到图层真实尺寸
  - 国际化
    - artplayer/dplayer/nplayer/xgplayer: 支持 简体/繁体/英语
    - oplayer: 不支持繁体
    - artplayer: 弹幕部分只支持简体
  - 画质
    - nplayer: 不支持多画质
  - 切换
    - 解码器
      - dplayer/nplayer/oplayer/xgplayer: 跨解码器切换链接
      - artplayer: 同解码器切换链接
    - 请求头
      - artplayer/dplayer/nplayer/xgplayer: 可切请求头
      - oplayer: 不可切请求头
    - xgplayer 切换 mpd 失败
    - dplayer 切换 mpd 会提示加载失败, 实际加载了
  - 其他
    - nplayer: 一旦 startTime 超过总时长会报错
    - nplayer: 摧毁后重建会丢失插件 pip 和 playNext, 刷新生效

- 参数
  - container: 容器id不带#
  - type: 解码器类型 hls dash flv mpegts torrent mp4
  - url: 视频地址
  - quality: 视频质量 { name, url }
  - headers: 请求头
  - autoplay: 自动播放
  - isLive: 直播
  - startTime: 开始时间,单位秒
  - next: 下集按钮

- 方法
  - barrage: 弹幕
  - create: 创建播放器
  - destroy: 摧毁播放器
  - onTimeUpdate: 实时返回时间
  - play: 播放
  - pause: 暂停
  - togglePlay: 播放/暂停
  - toggleMuted: 切换静音
  - time: 视频时间<当前播放时间, 总进度时间>
  - seek: 跳转
  - playbackRate: 当前倍速
  - setPlaybackRate: 设置倍速
  - muted: 当前静音
  - setMuted: 设置静音
  - volume: 当前音量
  - setVolume: 设置音量

- 插槽
  - header: 头部插槽

- mediaUtils
  - checkMediaType: 检测媒体类型
  - removeUnSafeHeaders: 移除不安全请求头
  - convertStandardToUri: 请求头转url拼接
  - convertWebToElectron: web不安全请求头转electron请求头
  - getExtensionFromMime: 获取文件扩展名-根据Mime
  - getMimeFromExtension: 获取Mime-根据扩展名
  - getFileExtension: 获取文件扩展名-根据路径
  - getStreamContentTypeToExtension: 获取媒体类型-根据网络流ContentType
  - getDecoderFromExtension: 获取媒体对应解码器
  - getStreamContentType: 获取ContentType
  - isHEVCVideoSupported: 检查是否支持hevc
  - isSafeHeader: 检查请求头 key 是否安全