# 视频播放器端 基于 Nuxt 4 + Tauri 2 的桌面视频播放器,支持远程控制。 ## 功能特点 - 🎥 **全屏视频播放**:双击启动后立刻全屏显示 - 🎮 **远程控制**:通过WebSocket接收控制端命令 - 📡 **自动连接**:启动后自动尝试连接控制端 - 🔄 **断线重连**:连接断开后自动重试 - ⚙️ **配置灵活**:支持配置文件自定义设置 ## 架构说明 - **前端**:Nuxt 4 + Vue 3 + Tailwind CSS + Nuxt UI - **后端**:Tauri 2 + Rust + WebSocket服务器 - **通信协议**:WebSocket (端口8080) - **API文档**:详见 `API.md` ## 开发环境设置 ### 前置要求 1. **Node.js** >= 23 2. **Rust** 开发环境 ```bash curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source ~/.cargo/env ``` 3. **pnpm** 包管理器 ### 安装依赖 ```bash pnpm install ``` ### 开发模式 ```bash # 启动完整应用(前端 + Tauri) pnpm tauri:dev # 仅前端开发 pnpm dev # 检查Rust代码 cd src-tauri && cargo check ``` ### 构建部署 ```bash # 构建桌面应用 pnpm tauri:build # 构建调试版本 pnpm tauri:build:debug # 构建前端静态文件 pnpm generate ``` ## 配置文件 项目根目录的 `player_config.json`: ```json { "connection": { "controller_host": "127.0.0.1", "controller_port": 8081, "websocket_port": 8080, "auto_connect": true, "reconnect_interval": 5000, "connection_timeout": 10000 }, "player": { "auto_fullscreen": true, "default_volume": 50, "loop_enabled": false, "show_controls": false }, "debug": { "log_level": "info", "show_debug_info": true } } ``` ## 功能实现 ### ✅ 已完成功能 1. **前端界面** - 全屏播放器界面 - 连接状态显示 - 等待画面和状态信息 - 键盘快捷键支持 2. **后端WebSocket服务** - WebSocket服务器(端口8080) - 接收控制端连接 - 处理播放控制命令 - 状态同步机制 3. **核心播放功能** - 视频加载和播放 - 播放/暂停/停止控制 - 音量调节 - 进度跳转 - 循环播放 - 全屏切换 4. **Tauri命令API** - `get_player_state` - 获取播放器状态 - `load_video` - 加载视频文件 - `play_video` - 播放视频 - `pause_video` - 暂停播放 - `stop_video` - 停止播放 - `seek_video` - 跳转播放位置 - `set_volume` - 设置音量 - `set_loop` - 设置循环播放 - `toggle_fullscreen` - 切换全屏 ### 🔄 后续扩展 1. **配置文件读取**:从配置文件加载连接设置 2. **自动连接重试**:实现更完善的重连机制 3. **视频格式支持**:扩展更多视频格式支持 4. **播放列表**:完善播放列表功能 5. **定时播放**:添加定时播放功能 ## WebSocket API 播放器作为WebSocket服务端,监听端口8080,接收控制端发送的命令: ### 连接地址 ``` ws://127.0.0.1:8080/ws ``` ### 消息格式 ```json { "type": "command", "data": { "type": "play|pause|stop|seek|setVolume|setLoop|toggleFullscreen|loadVideo", "position": 60.5, // seek时使用 "volume": 75.0, // setVolume时使用 "enabled": true, // setLoop时使用 "path": "/path/to/video.mp4" // loadVideo时使用 } } ``` ### 状态响应 ```json { "type": "status", "data": { "playback_status": "playing|paused|stopped|loading", "current_video": {...}, "position": 120.5, "duration": 3600.0, "volume": 75.0, "is_looping": false, "is_fullscreen": true } } ``` ## 日志调试 开发模式下可以查看详细日志: ```bash # Rust后端日志 RUST_LOG=debug pnpm tauri:dev # 或在代码中设置 env_logger::init(); ``` 前端调试信息在开发模式下显示在左下角。 ## 使用流程 1. **启动播放器** ```bash pnpm tauri:dev # 开发模式 # 或 ./target/release/video-player # 发布版本 ``` 2. **自动全屏**:应用启动后自动进入全屏模式 3. **等待连接**:显示等待控制端连接的界面 4. **接收控制**:控制端连接后接收并执行播放命令 5. **视频播放**:根据控制端指令加载和播放视频 ## 测试WebSocket连接 我们提供了一个简单的测试脚本来验证WebSocket服务器: ```bash # 1. 启动播放器 pnpm tauri:dev # 2. 在另一个终端中运行测试脚本 node test_websocket.js ``` 测试脚本会连接到播放器并发送一系列命令来验证功能。你应该能看到: - WebSocket连接成功 - 播放器接收和处理命令 - 状态更新消息 - 前端界面响应命令 ## 键盘快捷键 - **空格键**:播放/暂停(本地控制) - **F/f键**:切换全屏(保留功能) ## 故障排除 ### 常见问题 1. **连接失败** - 检查端口8080是否被占用 - 确认防火墙设置 - 查看控制端连接地址是否正确 2. **视频不播放** - 确认视频文件路径正确 - 检查视频格式是否支持 - 查看浏览器控制台错误信息 3. **编译错误** - 确认Rust环境正确安装 - 检查依赖版本兼容性 - 运行 `cargo clean` 后重新构建 ### 日志位置 - **开发模式**:控制台输出 - **发布版本**:系统日志(具体位置取决于操作系统) ## 项目结构 ``` video-player/ ├── app/ # Nuxt 4 前端代码 │ ├── pages/ │ │ └── index.vue # 主播放器页面 │ ├── layouts/ │ │ └── default.vue # 全屏布局 │ ├── modules/ │ │ └── tauri.ts # Tauri API 模块 │ └── app.config.ts # 应用配置 ├── src-tauri/ # Tauri 后端代码 │ ├── src/ │ │ ├── lib.rs # 主入口 │ │ ├── main.rs # 程序入口 │ │ ├── player_state.rs # 播放器状态管理 │ │ ├── websocket_server.rs # WebSocket服务器 │ │ └── commands.rs # Tauri命令 │ └── Cargo.toml # Rust依赖配置 ├── API.md # API文档 ├── player_config.json # 配置文件 ├── package.json # Node.js配置 └── README_PLAYER.md # 使用说明(本文件) ``` ## 贡献指南 1. Fork 项目 2. 创建功能分支 3. 提交更改 4. 推送到分支 5. 创建 Pull Request ## 许可证 MIT License - 详见 LICENSE 文件