返回资讯中心
外部精选
软件工程
#开发者实时流

开发者用 C++ 打造 YouTube Music 原生桌面客户端

来源标题:Hi guys check out my YouTube native client

一款基于 C++17 的 YouTube Music 原生桌面客户端发布,用 SDL2、OpenGL 与 Dear ImGui 构建,由 mpv 负责播放。它支持秒开、自动离线缓存、同步歌词、媒体键和真正的交叉淡入淡出,而非浏览器标签页。目前提供 Linux 安装方式。

Hacker News 最新xbum2026/11/3 · 昨天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

这个桌面端 YouTube Music 播放器,值得你拥有。 秒开。离线无感。同步歌词、你真正的音乐库、媒体键,还有——真正的交叉淡入淡出。原生 C++,不是浏览器标签页。 C++17 · SDL2 + OpenGL + Dear ImGui · 播放由 mpv 驱动 · 音乐数据由 Python 后端(ytmusicapi)提供 原生应用,而非浏览器标签页。即时响应,而非缓冲等待。离线播放,甚至无需多想。界面精美,对机器负担轻,且随你定制——为那些深度使用 YouTube Music、想要比网页版更好体验的人而打造。 为什么做交叉淡入淡出 界面截图 安装(Linux) 登录 快速导览 日常使用 控制 配置 工作原理 开发 平台支持 故障排除 参与贡献 许可证 致谢 为什么做交叉淡入淡出 感觉是即时的。点击歌曲即播放——搜索结果在你点击之前就已通过 URL 预取,专门的播放 worker 保证你的点击永远不会排在后台工作之后,可选的进程内提取器则完全消除了每首歌的启动开销。重复搜索在毫秒内返回。没有转圈等待的炼狱。 自动离线。你听的每一首歌在流式播放时都会被缓存,所以第二次播放直接从磁盘开始——无需网络,无需等待。想要更明确?一键下载整张专辑。可配置的缓存上限配合“最少收听优先”淘汰策略,让你的磁盘保持诚实。 漂亮。专辑封面用柔和流动的光晕为整个界面着色。四档动画级别、明暗两套主题、跟随桌面(或日历)的强调色,以及从整体到单个元素精细调节的文字/控件/布局缩放。它看起来就是音乐该有的感觉。 轻量。原生。安静。纯 C++17 加 mpv——没有 Electron,没有捆绑的 Chromium,没有 500 MB 的 JavaScript。渲染循环按需驱动,所以应用空闲时 CPU 接近零,不会打扰你的音乐。 网页播放器给不了你的一切。卡拉 OK 式同步歌词,可点击跳转;媒体键与 MPRIS;睡眠定时器;5 段均衡器;音量标准化;播放速度;智能“循环播放”列表;收听统计;无尽电台;M3U/XSPF 导出;以及键盘优先的界面。 你的音乐库,真正属于你。喜欢的歌曲、收藏的专辑/艺人、本地播放列表、历史记录,以及你的 YouTube 账号播放列表——全部在本地镜像,并可选写回 YouTube Music。 还有真正的交叉淡入淡出。两个 libmpv 播放器将曲目彼此融合——自然结束时 0–20 秒,手动跳过时更短的淡出,未缓存目标则即时切换。名字就是功能;但它可不是唯一的功能。 按下一次播放:会话恢复让你回到离开时的精确位置,队列持续流入无尽电台,每首曲目在途经时都会落入缓存。它就这么一直播下去。 首页 搜索 专辑 歌词 电台 统计 智能列表 播放列表 喜欢的歌曲 历史记录 艺人 接下来播放 收藏的专辑 曲目操作 设置 安装(Linux) 预构建包(推荐) 从 Releases 获取适合你发行版的最新文件: Arch 用户:本仓库中的 packaging/arch/PKGBUILD 可通过 makepkg -si 构建。 这些包会在安装过程中为你配置 Python 后端(一次性网络获取 ytmusicapi + yt-dlp)。AppImage 会在首次启动时将其引导安装到 ~/.local/share/crossfade/venv。 crossfade 按用户安装(无需 root),并管理自己的 Python 环境。 一些库头文件,所有主流发行版都有:

Debian / Ubuntu / Mint

sudo apt install build-essential cmake pkg-config libsdl2-dev libgl1-mesa-dev
libmpv-dev libglib2.0-dev libnotify-dev python3 python3-venv curl

Arch / Manjaro

sudo pacman -S --needed base-devel cmake sdl2 mesa mpv glib2 libnotify python curl

Fedora

sudo dnf install @development-tools cmake SDL2-devel mesa-libGL-devel
mpv-devel glib2-devel libnotify-devel python3 python3-pip curl 你需要 mpv ≥ 0.35(应用链接的是 libmpv)。 git clone <this-repo> crossfade cd crossfade ./install.sh install.sh: 无需手动安装其他任何东西。 如果 /.local/bin 不在你的 PATH 中,要么将其加入 shell 配置文件,要么用完整路径调用二进制文件(/.local/bin/crossfade、~/.local/bin/crossfade-login)。 从应用程序菜单启动 crossfade,或在终端中运行 crossfade。

自定义安装前缀

PREFIX=/opt/crossfade ./install.sh

仅重装数据(跳过编译)

SKIP_BUILD=1 ./install.sh

离线安装:先将 wheel 预下载到 ./wheels

mkdir wheels && pip download -d wheels -r requirements.txt ./install.sh

开发循环:构建到 build/ 并从那里运行(不安装)

./mk

手动构建

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j"$(nproc)" ./build/crossfade 安装脚本会遵循 PREFIX、BUILD_DIR 和 SKIP_BUILD;应用本身会遵循 P100_CONFIG_DIR(见“配置”)。./dist.sh 生成可移植的源码压缩包;./scripts/crossfade-export.sh 和 ./scripts/crossfade-import.sh 可在机器之间迁移你的数据。 安装程序会在 %LOCALAPPDATA%\crossfade 下按用户配置好一切:应用及所有捆绑的运行时 DLL(SDL2、libmpv + 编解码器,以及 Mesa llvmpipe 软件 OpenGL,因此即使没有 GL 3.2 驱动也能启动——从 bin\ 中删除 opengl32.dll、libgallium_wgl.dll 和 dxil.dll 即可改用你的 GPU 驱动)、私有的 Python 3.12、带 ytmusicapi + yt-dlp 的后端 venv,以及开始菜单快捷方式。 同一份源码树也可用 MSYS2 UCRT64 工具链(MinGW-w64)在 Windows 上构建——仅限 Linux 的桌面集成(MPRIS、libnotify、GLib)会被编译排除,并替换为空操作桩。

在 UCRT64 MSYS2 shell 中(C:\msys64\ucrt64.exe)

pacman -S --needed mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake
mingw-w64-ucrt-x86_64-pkgconf mingw-w64-ucrt-x86_64-SDL2
mingw-w64-ucrt-x86_64-mpv git clone <this-repo> crossfade cd crossfade cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build 要在 MSYS2 shell 之外运行 exe,请从以下位置复制 SDL2.dll、libmpv-2.dll、libstdc++-6.dll、libgcc_s_seh-1.dll 和 libwinpthread-1.dll

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →