### Install Dependencies and Start Development (Bash) Source: https://github.com/cbingb666/115master/blob/main/CONTRIBUTING.md Installs project dependencies using pnpm and starts the development server with hot reloading. Ensures all necessary packages are available for local development. ```bash pnpm install pnpm dev ``` -------------------------------- ### Path Alias Example Source: https://github.com/cbingb666/115master/blob/main/CLAUDE.md Illustrates how to use path aliases for importing modules within the project. It shows examples for importing workspace packages, using the '@/' alias for the 'apps/monkey/src' directory, and using relative paths for local imports. ```typescript // ✅ Workspace 包导入 import { someUtil } from '@115master/shared' // ✅ 跨目录 - 使用 @/ 别名 import { usePlayerProvide } from '@/components/XPlayer/hooks/usePlayerProvide' import { cache } from '@/utils/cache/core' // ✅ 同目录或子目录 - 使用相对路径 import { BaseMod } from './BaseMod' import { useContextMenu } from './hooks/useContextMenu' ``` -------------------------------- ### Build Project (Bash) Source: https://github.com/cbingb666/115master/blob/main/CONTRIBUTING.md Builds the project for production deployment. This command compiles and optimizes the codebase. ```bash pnpm build ``` -------------------------------- ### Get M3U8 Video Streams with Drive115Core Source: https://context7.com/cbingb666/115master/llms.txt This function retrieves the M3U8 streaming addresses for video files, allowing selection of different quality levels. It takes a pickcode as input and returns an array of stream objects, each containing a name, quality level, and URL. The example demonstrates selecting the highest quality stream. ```typescript import { drive115 } from '@/utils/drive115'; // 获取 M3U8 播放列表 async function getVideoStreams(pickcode: string) { try { const m3u8List = await drive115.getM3u8(pickcode); // 返回结果示例 (按画质从高到低排序): // [ // { name: "UD", quality: 4, url: "https://..." }, // Ultra 超清 // { name: "HD", quality: 3, url: "https://..." }, // 高清 // { name: "BD", quality: 2, url: "https://..." } // 标清 // ] // 选择最高画质 const bestQuality = m3u8List[0]; console.log(`最高画质: ${bestQuality.name}, URL: ${bestQuality.url}`); return m3u8List; } catch (error) { console.error('获取视频流失败:', error); } } // 使用示例getVideoStreams('abc123def456'); ``` -------------------------------- ### Configure Player Shortcuts - TypeScript Source: https://context7.com/cbingb666/115master/llms.txt Provides an example of configuring and customizing keyboard shortcuts for the XPlayer video player. It defines default key bindings for various actions like playback control, volume adjustment, seeking, and display options, and shows how to extend with custom actions. ```typescript import type { ShortcutsPreference, ActionKeyBindings, Action } from '@/components/XPlayer/components/Shortcuts/shortcuts.types'; // 定义快捷键偏好配置 const shortcutsPreference: ShortcutsPreference = { actionKeyBindings: { // 播放控制 'play-pause': ['Space', 'K'], 'stop': ['S'], // 音量控制 'volume-up': ['ArrowUp'], 'volume-down': ['ArrowDown'], 'mute': ['M'], // 进度控制 'seek-forward': ['ArrowRight', 'L'], 'seek-backward': ['ArrowLeft', 'J'], 'seek-forward-fast': ['Ctrl+ArrowRight'], 'seek-backward-fast': ['Ctrl+ArrowLeft'], // 显示控制 'fullscreen': ['F'], 'pip': ['P'], // 画中画 // 播放速度 'speed-up': [']'], 'speed-down': ['['], 'speed-reset': ['\'], // 播放列表 'play-next': ['N', 'Shift+N'], 'play-previous': ['B', 'Shift+P'] } }; // 自定义动作扩展 const customActions: ActionKeyBindings = { 'custom-screenshot': ['Ctrl+Shift+S'], 'custom-bookmark': ['Ctrl+B'] }; ``` -------------------------------- ### Turbo Build Task Configuration Source: https://github.com/cbingb666/115master/blob/main/CLAUDE.md Configuration for Turbo, a build system for monorepos. This example shows common tasks like 'build', 'dev', 'type-check', 'lint', and 'test', along with their dependencies and modes. ```json { "build": "turbo run build --filter=./apps/monkey...", "dev": "turbo run dev --parallel", "type-check": "turbo run type-check", "lint": "turbo run lint", "lint:fix": "turbo run lint:fix", "test": "turbo run test" } ``` -------------------------------- ### Project Build and Development Commands - Bash Source: https://context7.com/cbingb666/115master/llms.txt Lists essential commands for setting up the development environment, building the project, and running various development tasks for the 115Master project. It covers dependency installation, server startup, production builds, testing, linting, and analysis. ```bash # 环境要求: # - Node.js >= 20.12 # - pnpm >= 9.15.9 # - Chrome 130+ 或 115Browser 35+ # - Tampermonkey >= 5.3.3 # 安装依赖 pnpm install # 启动开发服务器 (支持热重载) pnpm dev # 启动 Plus 版本开发 pnpm dev:plus # 构建生产版本 pnpm build # 构建 Plus 版本 pnpm build:plus # 类型检查 pnpm type-check # 运行测试 pnpm test # 测试覆盖率 pnpm test:coverage # ESLint 检查 pnpm lint # ESLint 自动修复 pnpm lint:fix # 构建分析 pnpm analyze ``` -------------------------------- ### Run Tests and Analyze Build (Bash) Source: https://github.com/cbingb666/115master/blob/main/CONTRIBUTING.md Runs project tests, generates coverage reports, and performs build analysis. Essential for ensuring code stability and performance. ```bash pnpm test pnpm test:coverage pnpm analyze ``` -------------------------------- ### Drive115Core - Get File List Source: https://context7.com/cbingb666/115master/llms.txt Retrieve a list of files within a specified directory, supporting pagination and natural sorting. ```APIDOC ## Drive115Core - Get File List ### Description Retrieve a list of files within a specified directory, supporting pagination and natural sorting. ### Method POST ### Endpoint `@/utils/drive115.getPlaylist` (Internal function) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None (Function call with parameters) - **cid** (string) - Required - The ID of the directory. Use '0' for the root directory. - **offset** (number) - Optional - The number of items to skip for pagination. Defaults to 0. ### Request Example ```typescript import { drive115 } from '@/utils/drive115'; async function getPlaylist(cid: string, offset = 0) { const response = await drive115.getPlaylist(cid, offset); console.log(`Found ${response.count} files`); response.data.forEach(file => { console.log(`${file.n} - ${file.pc}`); }); return response; } getPlaylist('0'); // Get files from the root directory ``` ### Response #### Success Response (200) - **state** (boolean) - Indicates if the request was successful. - **data** (Array) - A list of files in the directory. - **cid** (string) - Directory ID. - **n** (string) - File name. - **pc** (string) - Pick code of the file. - **s** (number) - File size in bytes. - **play_long** (number) - Playback duration in seconds. - **sha** (string) - SHA1 hash of the file. - **count** (number) - Total number of files in the directory. - **path** (Array) - Breadcrumbs for the current directory path. #### Response Example ```json { "state": true, "data": [ { "cid": "directory_id", "n": "MyVideo.mp4", "pc": "abc123def456", "s": 1073741824, "play_long": 7200, "sha": "sha1hash..." } ], "count": 100, "path": [ // ... path objects ] } ``` ``` -------------------------------- ### Icon Usage with @iconify/vue Source: https://github.com/cbingb666/115master/blob/main/CLAUDE.md Example of using the `@iconify/vue` component to display icons. It shows how to import an icon (e.g., `ICON_PLAY`) and apply Tailwind CSS classes for sizing and styling. Icons are expected to inherit color from their parent. ```vue ``` -------------------------------- ### URL to Launch 115Master Player Source: https://context7.com/cbingb666/115master/llms.txt This API allows launching the 115Master video player via URL parameters. It's useful for integration with other plugins or applications. The basic format includes a pick_code, and examples show how to open it in a new window or embed it within an iframe. ```javascript // 基本 URL 格式 const playUrl = `https://115.com/web/lixian/master/video/?pick_code=${pickCode}`; // 示例:在页面中打开播放器 window.open('https://115.com/web/lixian/master/video/?pick_code=abc123def456'); // 示例:在 iframe 中嵌入 const iframe = document.createElement('iframe'); iframe.src = 'https://115.com/web/lixian/master/video/?pick_code=abc123def456'; document.body.appendChild(iframe); ``` -------------------------------- ### Drive115Core - Get Video Subtitles Source: https://context7.com/cbingb666/115master/llms.txt Retrieve a list of available subtitles for a video file, including embedded and cloud-stored options. ```APIDOC ## Drive115Core - Get Video Subtitles ### Description Retrieve a list of available subtitles for a video file, including embedded and cloud-stored options. ### Method POST ### Endpoint `@/utils/drive115.webApiGetMoviesSubtitle` (Internal function) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None (Function call with parameter) - **pickcode** (string) - Required - The pick code of the video file. ### Request Example ```typescript import { drive115 } from '@/utils/drive115'; async function getSubtitles(pickcode: string) { const response = await drive115.webApiGetMoviesSubtitle({ pickcode }); response.data.forEach(subtitle => { console.log(`Subtitle: ${subtitle.title} (${subtitle.type})`); }); return response.data; } getSubtitles('abc123def456'); ``` ### Response #### Success Response (200) - **state** (boolean) - Indicates if the request was successful. - **data** (Array) - A list of subtitle information. - **sid** (string) - Subtitle ID. - **title** (string) - Subtitle display name (e.g., "简体中文"). - **language** (string) - Language code (e.g., "zh-CN"). - **type** (string) - Subtitle file format (e.g., "srt"). - **url** (string) - URL to the subtitle file. - **file_name** (string) - Original file name of the subtitle. - **pick_code** (string) - Pick code associated with the subtitle. #### Response Example ```json { "state": true, "data": [ { "sid": "subtitle_id", "title": "简体中文", "language": "zh-CN", "type": "srt", "url": "https://...", "file_name": "movie.srt", "pick_code": "xyz789" } ] } ``` ``` -------------------------------- ### Run Linting and Type Checking (Bash) Source: https://github.com/cbingb666/115master/blob/main/CONTRIBUTING.md Executes TypeScript type checking and ESLint for code quality and consistency. Includes commands for automatic lint fixing. ```bash pnpm type-check pnpm lint pnpm lint:fix ``` -------------------------------- ### Drive115Core - Get File Download URL Source: https://context7.com/cbingb666/115master/llms.txt Retrieve the download URL for a given file using its pick code. Supports both standard and Pro download methods. ```APIDOC ## Drive115Core - Get File Download URL ### Description Retrieve the download URL for a given file using its pick code. Supports both standard and Pro download methods. ### Method POST ### Endpoint `@/utils/drive115.getFileDownloadUrl` (Internal function) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None (Function call with parameter) - **pickcode** (string) - Required - The pick code of the file. ### Request Example ```typescript import { drive115 } from '@/utils/drive115'; async function downloadFile(pickcode: string) { const result = await drive115.getFileDownloadUrl(pickcode); console.log('Download URL:', result.url.url); return result; } downloadFile('abc123def456'); ``` ### Response #### Success Response (200) - **url** (object) - Contains download URL and authentication cookie. - **url** (string) - The direct download URL. - **auth_cookie** (object) - Authentication cookie details. - **expire** (string) - Cookie expiration date. - **name** (string) - Cookie name. - **path** (string) - Cookie path. - **value** (string) - Cookie value. #### Response Example ```json { "url": { "url": "https://cdnfhnfile.115cdn.net/...", "auth_cookie": { "expire": "2024-12-31", "name": "auth_key", "path": "/", "value": "xxx" } } } ``` ``` -------------------------------- ### Get File List with Drive115Core Source: https://context7.com/cbingb666/115master/llms.txt This function retrieves a list of files within a specified directory, supporting pagination and natural sorting. It takes a directory ID (cid) and an optional offset for pagination. The response includes file details such as name, pickcode, size, duration, and SHA hash. ```typescript import { drive115 } from '@/utils/drive115'; // 获取播放列表(仅视频文件) async function getPlaylist(cid: string, offset = 0) { try { const response = await drive115.getPlaylist(cid, offset); // 返回结果包含: // { // state: true, // data: [ // { // cid: "目录ID", // n: "文件名.mp4", // pc: "abc123", // pickcode // s: 1073741824, // 文件大小 (bytes) // play_long: 7200, // 播放时长 (秒) // sha: "sha1hash..." // } // ], // count: 100, // path: [...] // } console.log(`找到 ${response.count} 个文件`); response.data.forEach(file => { console.log(`${file.n} - ${file.pc}`); }); return response; } catch (error) { console.error('获取文件列表失败:', error); } } // 使用示例 getPlaylist('0'); // cid=0 表示根目录 ``` -------------------------------- ### Drive115Core - Get M3U8 Playlists Source: https://context7.com/cbingb666/115master/llms.txt Retrieve M3U8 streaming URLs for a video file, allowing selection of different quality levels. ```APIDOC ## Drive115Core - Get M3U8 Playlists ### Description Retrieve M3U8 streaming URLs for a video file, allowing selection of different quality levels. ### Method POST ### Endpoint `@/utils/drive115.getM3u8` (Internal function) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None (Function call with parameter) - **pickcode** (string) - Required - The pick code of the video file. ### Request Example ```typescript import { drive115 } from '@/utils/drive115'; async function getVideoStreams(pickcode: string) { const m3u8List = await drive115.getM3u8(pickcode); const bestQuality = m3u8List[0]; // Assuming sorted by quality descending console.log(`Best quality: ${bestQuality.name}, URL: ${bestQuality.url}`); return m3u8List; } getVideoStreams('abc123def456'); ``` ### Response #### Success Response (200) - **Array** - A list of available M3U8 streams, sorted by quality (highest first). - **name** (string) - Quality name (e.g., "UD", "HD", "BD"). - **quality** (number) - Quality level (e.g., 4 for Ultra HD). - **url** (string) - The M3U8 stream URL. #### Response Example ```json [ { "name": "UD", "quality": 4, "url": "https://..." }, // Ultra HD { "name": "HD", "quality": 3, "url": "https://..." }, // HD { "name": "BD", "quality": 2, "url": "https://..." } // Standard Definition ] ``` ``` -------------------------------- ### Generate Changeset for Versioning (Bash) Source: https://github.com/cbingb666/115master/blob/main/CONTRIBUTING.md Initiates the Changesets process to record changes for versioning and changelog generation. Prompts the user to select affected packages and version types (patch, minor, major). ```bash pnpm changeset ``` -------------------------------- ### Get File Download URL with Drive115Core Source: https://context7.com/cbingb666/115master/llms.txt This function retrieves the download URL for a file from the 115 API. It supports both normal and Pro download methods, automatically selecting the best option. The function takes a pickcode as input and returns an object containing the download URL and authentication cookie details. ```typescript import { drive115 } from '@/utils/drive115'; // 获取文件下载地址(自动选择最佳方式) async function downloadFile(pickcode: string) { try { const result = await drive115.getFileDownloadUrl(pickcode); // 返回结果示例: // { // url: { // url: "https://cdnfhnfile.115cdn.net/", // auth_cookie: { // expire: "2024-12-31", // name: "auth_key", // path: "/", // value: "xxx" // } // } // } console.log('下载地址:', result.url.url); return result; } catch (error) { console.error('获取下载地址失败:', error); } } // 使用示例 downloadFile('abc123def456'); ``` -------------------------------- ### Get Video Subtitles with Drive115Core Source: https://context7.com/cbingb666/115master/llms.txt This function retrieves subtitle information for a given video file. It queries the 115 API for both built-in and cloud-stored subtitles. The function takes a pickcode and returns an array of subtitle objects, each containing details like title, language, type, URL, and pick_code. ```typescript import { drive115 } from '@/utils/drive115'; // 获取视频字幕 async function getSubtitles(pickcode: string) { const response = await drive115.webApiGetMoviesSubtitle({ pickcode }); // 返回结果示例: // { // state: true, // data: [ // { // sid: "subtitle_id", // title: "简体中文", // language: "zh-CN", // type: "srt", // url: "https://...", // file_name: "movie.srt", // pick_code: "xyz789" // } // ] // } response.data.forEach(subtitle => { console.log(`字幕: ${subtitle.title} (${subtitle.type})`); }); return response.data; } // 使用示例 getSubtitles('abc123def456'); ``` -------------------------------- ### Monorepo Build Tool Configuration (turbo.json) Source: https://github.com/cbingb666/115master/blob/main/AGENTS.md This JSON configuration file is for Turbo. It defines common build tasks such as `build`, `dev`, `type-check`, `lint`, and `test`, specifying their dependencies and execution modes. ```json { "build": "next build", "dev": "next dev", "type-check": "tsc --noEmit", "lint": "eslint . --ext .ts,.tsx", "lint:fix": "eslint . --ext .ts,.tsx --fix", "test": "jest" } ``` -------------------------------- ### Switch Player Core - TypeScript Source: https://context7.com/cbingb666/115master/llms.txt Demonstrates how to switch between different video playback cores (HLS, Native, AvPlayer) within the XPlayer component using the `useSwitchPlayerCore` hook. This allows for automatic or manual selection based on video format or specific decoding requirements. ```typescript import { useSwitchPlayerCore } from '@/components/XPlayer/hooks/playerCore/usePlayerCore'; import { PlayerCoreType } from '@/components/XPlayer/hooks/playerCore/types'; // 在播放器上下文中使用 function setupPlayerCore(ctx: PlayerContext) { const { switchDriver } = useSwitchPlayerCore(ctx); // 切换到 HLS 播放核心 (用于 m3u8 流) await switchDriver(PlayerCoreType.Hls); // 切换到原生 HTML5 播放核心 (用于 mp4 等) await switchDriver(PlayerCoreType.Native); // 切换到 AvPlayer 播放核心 (用于高级解码需求) await switchDriver(PlayerCoreType.AvPlayer); } // 播放核心类型: // - PlayerCoreType.Native: 原生 HTML5 Video // - PlayerCoreType.Hls: hls.js 实现 // - PlayerCoreType.AvPlayer: libmedia/avplayer 实现 ``` -------------------------------- ### Enhance 115 File List with FileListMod (TypeScript) Source: https://context7.com/cbingb666/115master/llms.txt FileListMod enhances the 115.com file listing interface by adding features such as video cover previews, extended information display, actress information (for JAV), and improved interaction options like opening folders in new tabs and a custom right-click menu. It initializes on script load and can be destroyed to revert changes. Dependencies include the 'HomePage' class from '@/pages/home'. ```typescript import HomePage from '@/pages/home'; // 初始化首页增强功能 // 在脚本加载时自动执行 const homePage = new HomePage(); // 功能列表: // - FileItemModFolderLink: 文件夹中键新标签页打开 // - FileItemModExtInfo: 显示扩展信息 // - FileItemModActressInfo: 显示演员信息 (JAV) // - FileItemModVideoCover: 显示视频封面 // - FileItemModExtMenu: 扩展右键菜单 // - FileItemModClickPlay: 点击播放视频 // - FileItemModDownload: 文件下载功能 // 销毁增强功能 homePage.destroy(); ``` -------------------------------- ### Register and Handle Magnet Links (TypeScript) Source: https://context7.com/cbingb666/115master/llms.txt This code registers a handler for the 'magnet:' protocol, allowing users to click magnet links and automatically open the 115Master application. It also provides a function to manually process magnet links by storing them and opening the 115.com website for adding offline tasks. Dependencies include functions from '@/pages/magnet'. ```typescript import { registerMagnetProtocolHandler, setMagnetTask, getMagnetTask, magnetPage } from '@/pages/magnet'; // 注册磁力链接协议处理程序 // 用户点击 magnet: 链接时会自动跳转到 115Master registerMagnetProtocolHandler(); // 注册后,magnet 链接会跳转到: // /web/lixian/master/magnet/?url=%s // 手动处理磁力链接 function handleMagnetLink(magnetUrl: string) { // 存储磁力链接到 sessionStorage setMagnetTask(magnetUrl); // 打开 115 网盘并自动添加离线任务 const handle = window.open( 'https://115.com/?cid=0&offset=0&mode=wangpan', '_blank', 'width=1280,height=860' ); if (!handle) { alert('请允许弹出窗口'); } } // 使用示例 handleMagnetLink('magnet:?xt=urn:btih:abc123...'); ``` -------------------------------- ### Manage Video Playback History with Drive115Core (TypeScript) Source: https://context7.com/cbingb666/115master/llms.txt Provides functions to retrieve and update video playback history using the Drive115Core utility. It logs the last playback time and allows updating the current playback position and video duration. Dependencies include the 'drive115' utility from '@/utils/drive115'. ```typescript import { drive115 } from '@/utils/drive115'; // 获取播放历史 async function getPlayHistory(pickcode: string) { const response = await drive115.webApiGetWebApiFilesHistory({ pickcode }); // 返回结果包含上次播放时间点 console.log(`上次播放到: ${response.data?.time || 0} 秒`); return response; } // 更新播放历史 async function updatePlayHistory(pickcode: string, time: number, duration: number) { const response = await drive115.webApiPostWebApiFilesHistory({ pickcode, time, // 当前播放时间 (秒) duration // 视频总时长 (秒) }); return response; } // 使用示例 await getPlayHistory('abc123def456'); await updatePlayHistory('abc123def456', 3600, 7200); // 播放到1小时/总2小时 ``` -------------------------------- ### Monorepo Workspace Configuration Source: https://github.com/cbingb666/115master/blob/main/CLAUDE.md Configuration file for pnpm workspaces, defining the structure of the monorepo. It specifies which directories contain packages that should be managed by pnpm. ```yaml packages: - apps/* - packages/* ``` -------------------------------- ### Abstract Tailwind Classes with clsx Source: https://github.com/cbingb666/115master/blob/main/CLAUDE.md This snippet demonstrates how to use the `clsx` utility to abstract and conditionally combine Tailwind CSS classes for component styling. It imports `clsx` from a local utility path and applies it to define container styles. ```typescript import { clsx } from '@/utils/clsx' const styles = clsx({ container: { main: 'bg-base-100 flex h-full flex-col rounded-xl', header: 'flex items-center justify-between px-4 py-2', } }) ``` -------------------------------- ### URL Scheme: Invoke Player Source: https://context7.com/cbingb666/115master/llms.txt Invoke the 115Master video player directly via a URL scheme. This is useful for integrating with other applications or browser extensions. ```APIDOC ## URL Scheme: Invoke Player ### Description Invoke the 115Master video player directly via a URL scheme. This is useful for integrating with other applications or browser extensions. ### Method GET ### Endpoint `https://115.com/web/lixian/master/video/?pick_code={pickCode}` ### Parameters #### Query Parameters - **pick_code** (string) - Required - The pick code of the video file to play. ### Request Example ```javascript // Basic URL format const playUrl = `https://115.com/web/lixian/master/video/?pick_code=${pickCode}`; // Example: Open player in a new tab window.open('https://115.com/web/lixian/master/video/?pick_code=abc123def456'); // Example: Embed player in an iframe const iframe = document.createElement('iframe'); iframe.src = 'https://115.com/web/lixian/master/video/?pick_code=abc123def456'; document.body.appendChild(iframe); ``` ### Response This endpoint does not return a JSON response directly; it opens the 115Master player. #### Success Response (200) N/A #### Response Example N/A ``` -------------------------------- ### Drive115Core - File Star Operation Source: https://context7.com/cbingb666/115master/llms.txt Perform actions to star (favorite) or unstar (unfavorite) a file. ```APIDOC ## Drive115Core - File Star Operation ### Description Perform actions to star (favorite) or unstar (unfavorite) a file. ### Method POST ### Endpoint `@/utils/drive115.webApiPostFilesStar` (Internal function) ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None (Function call with parameter) - **file_id** (string) - Required - The ID of the file to operate on. - **star** (number) - Required - 1 to star the file, 0 to unstar. ### Request Example ```typescript import { drive115 } from '@/utils/drive115'; async function toggleStar(fileId: string, star: boolean) { const response = await drive115.webApiPostFilesStar({ file_id: fileId, star: star ? 1 : 0 }); if (response.state) { console.log(star ? 'Starred successfully' : 'Unstarred successfully'); } return response; } toggleStar('12345678', true); // Star the file toggleStar('12345678', false); // Unstar the file ``` ### Response #### Success Response (200) - **state** (boolean) - Indicates if the operation was successful. #### Response Example ```json { "state": true } ``` ``` -------------------------------- ### Vue 3 Video Player Component - XPlayer Source: https://context7.com/cbingb666/115master/llms.txt XPlayer is a Vue 3 video player component supporting multiple playback cores and extensive configuration options. It handles video sources, subtitles, playback state, and player events. Dependencies include Vue 3 and type definitions from '@/components/XPlayer/types'. ```vue ```