一个基于 Wails + React + Go 开发的跨平台投屏应用,支持将本地媒体文件投屏到智能电视或支持 DLNA/UPnP 的设备。
- 🎯 设备自动发现:自动扫描局域网内的 UPnP/DLNA 设备
- 📺 智能电视支持:支持主流智能电视(小米、索尼、三星等)
- 🎬 媒体播放控制:播放、暂停、停止、音量控制、进度调节
- ⏱️ 实时进度显示:显示当前播放进度和总时长
- 🎛️ 音量控制:支持静音和音量调节
- 🎨 现代化界面:响应式设计,支持明暗主题切换
- 🔄 自动重连:设备连接异常时自动重试
- 📊 详细日志:完整的调试信息和错误处理
- Go 1.18+
- Node.js 16+
- Wails CLI v2.10.2+
# 安装 Wails CLI
go install github.com/wailsapp/wails/v2/cmd/wails@latest
# 安装前端依赖
cd frontend
npm install# 在项目根目录运行开发模式
wails dev# 构建生产版本
wails build
# 构建并打包安装程序
wails build -package- 确保电脑和电视连接到同一 WiFi 网络
- 打开应用,点击"搜索"按钮扫描设备
- 从设备列表中选择要投屏的电视
- 点击"选择文件"按钮选择本地媒体文件
- 支持视频和音频文件(MP4, AVI, MP3, MKV 等)
- 播放/暂停:控制媒体播放状态
- 进度条:拖动进度条跳转到指定位置
- 音量控制:调节电视音量或静音
- 停止:停止当前播放
- Wails:跨平台桌面应用框架
- go-ssdp:UPnP 设备发现和控制
- 标准库:HTTP 客户端、XML 解析等
- React 18:用户界面框架
- Vite:构建工具和开发服务器
- CSS3:现代化样式和动画效果
- 设备发现 (
internal/upnp/discovery.go):扫描局域网 UPnP 设备 - 媒体控制 (
internal/upnp/control.go):播放、暂停、音量控制 - 进度管理 (
main.go): 实时获取播放进度和时长 - Web 服务 (
internal/upnp/web_server.go):媒体文件服务
pc2tv/
├── main.go # 主程序入口和 Wails 绑定
├── internal/
│ ├── upnp/ # UPnP 相关功能
│ │ ├── discovery.go # 设备发现
│ │ ├── control.go # 媒体控制
│ │ ├── web_server.go # Web 服务
│ │ └── types.go # 数据类型定义
│ └── utils/ # 工具函数
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── App.jsx # 主组件
│ │ ├── App.css # 样式文件
│ │ └── main.jsx # 入口文件
│ └── package.json # 前端依赖
└── wails.json # Wails 配置
- 后端方法:在
main.go中添加新的 Go 方法 - 前端绑定:运行
wails build生成 TypeScript 绑定 - 界面组件:在
frontend/src/App.jsx中添加 UI 组件
# 查看详细日志
wails dev -verbose
# 浏览器调试
# 开发模式下访问 http://localhost:34115A: 确保电视和电脑在同一网络,电视已开启投屏功能
A: 检查媒体文件格式是否被电视支持
A: 某些电视设备可能不支持进度查询功能
A: 部分电视可能不支持远程音量控制
- ✅ 基础设备发现功能
- ✅ 媒体播放控制
- ✅ 实时进度显示
- ✅ 音量控制
- ✅ 明暗主题支持
- Fork 本项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
如有问题或建议,请提交 Issue 或联系开发团队。