随着个人电脑中积累的音乐、视频、图片越来越多,文件散落在不同目录、命名不统一、格式各异,用户往往需要在音乐播放器、视频播放器、图片查看器之间反复切换,体验割裂;同时浏览器原生播放器对 MKV、RMVB、TS、HEVC、AC3 等大量常见格式与编码不兼容,导致本地视频"有文件却打不开"。本项目旨在解决本地音视频/图片分散管理、多格式无法统一播放、元数据缺失、在线曲库与本地曲库割裂等问题,打造一款集本地音乐播放、视频播放、相册管理于一体的桌面多媒体应用,并支持在线音乐搜索与下载,覆盖个人与家庭用户的日常影音娱乐场景。
项目主要包含以下功能模块:
1)音乐模块:扫描指定目录入库(支持 mp3/flac/wav/ape/ogg/aac/m4a/wma),自动解析 ID3 元数据(标题、歌手、专辑、时长);支持"默认/喜欢"系统歌单与自定义歌单、播放列表密码锁定;播放栏支持顺序/列表循环/单曲循环/随机四种模式、进度拖动、音量调节、上一首/下一首;歌词页支持本地 .lrc 读取、网易云在线歌词搜索与版本切换、歌词编辑保存、桌面悬浮歌词窗口。
2)在线音乐模块:接入网易云 API,支持关键字搜索歌曲、在线试听、获取实时播放地址、下载到本地并自动入库,下载带进度回调;已入库曲目按 online_id 幂等去重,可加入歌单。
3)视频模块:扫描入库 mp4/mkv/avi/mov/wmv/flv/webm/m4v/rmvb/rm/ts/mpg/mpeg/3gp/vob 等格式;视频卡片网格展示、缩略图、时长;播放时使用 ffprobe 探测容器/音视频编码/字幕轨道,对 Chromium 不支持的格式按需调用 ffmpeg 转码(copy / libx264 / h264_mf 回退链)或重封装,支持字幕提取为 VTT 并挂载;支持进度条帧预览、上一/下一视频切换。
4)相册模块:扫描入库 jpg/png/gif/bmp/webp/tiff/psd/svg 等,网格展示、懒加载;支持相册分类、图片标签、悬停查看尺寸/大小/路径、图片预览。
5)通用能力:媒体目录管理、启动自动扫描、删除文件(移至回收站)或仅从库移除、打开文件所在位置、播放进度记忆、六套主题切换(深色蓝/紫/绿/粉、浅色蓝/暖)、自定义媒体下载目录、数据库路径展示。
我负责该 Electron 桌面应用的整体架构设计与全栈实现,技术栈为 Electron 33 + Vue 3 + TypeScript + Vite + Pinia + Vue Router,使用 electron-builder 打包为 Windows NSIS 安装包。
架构上采用主进程 / 渲染进程 / preload 三层结构:主进程通过 contextBridge 暴露受限 API,渲染进程经 IPC 调用主进程能力,保证 contextIsolation 安全。核心实现与亮点:
1)自定义 media:// 协议加载本地媒体文件,并正确实现 HTTP Range 请求(206 Partial Content)以支持音频/视频拖动进度条 seek,避免直接暴露 file:// 带来的安全问题。
2)媒体扫描服务:递归遍历目录,按扩展名过滤,使用 music-metadata 解析音频标签、sharp 获取图片尺寸,边遍历边处理避免大目录卡顿;支持全量扫描与单目录增量扫描,按 mtime 增量更新,自动归入系统歌单/默认视频/默认相册,并记录已移除文件避免重复入库。
3)数据持久化:基于 sql.js(SQLite WASM)实现本地数据库,表结构涵盖媒体文件、目录、歌单、歌单项、标签、歌词、播放记忆、设置、已移除文件等;通过"写临时文件 + 原子 rename + 重试"策略落盘,规避 Windows 杀毒软件瞬时占用导致的 EPERM;使用 PRAGMA 幂等迁移在线音乐列与歌单 type/password 列。
4)视频兼容播放:先用 ffprobe 探测编码,已支持的流直接 copy 重封装秒级完成,不支持的走 libx264/aac 转码,并提供 h264_mf 硬编回退;通过解析 ffmpeg stderr 的 time 字段推送转码进度,切
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论