使用 Phosphene 为 macOS Tahoe 构建原生视频壁纸
探索 Phosphene 如何利用 Apple 私有框架提供无缝、节能的视频壁纸,并直接集成到 macOS 系统设置中。
多年来,macOS 用户一直依赖第三方应用,通过覆盖窗口或修改桌面环境来显示视频壁纸。这些解决方案通常资源占用高、耗电快,且容易出现闪烁。Phosphene 诞生了,这是一个针对 macOS Tahoe 的开源引擎,它采用了一种截然不同的方法:直接集成到系统的原生壁纸选择器中。
“原生”优势
Phosphene 不仅仅是另一个覆盖层应用。它构建在 Apple 私有的 WallpaperExtensionKit 框架之上——这与驱动 Apple 官方“航拍”屏幕保护程序的技术相同。通过挂载到这个系统级扩展点,Phosphene 允许您的自定义视频直接出现在系统设置 → 壁纸中,与原生选项并列。
由于渲染发生在系统 WallpaperAgent 的进程外,即使关闭 Phosphene 主应用,壁纸也会保持运行。它遵循操作系统级别的锁定屏幕、空闲和睡眠生命周期,提供了传统覆盖层应用根本无法比拟的稳定性。
幕后:架构与工程
Phosphene 将其工作负载分为两个不同的组件:
- Phosphene.app (菜单栏 UI): 处理库管理、元数据和转码。它使用
VideoOptimizationService生成视频的低分辨率或低帧率版本,确保系统在电池电量低或散热压力大时可以切换到更轻量的资源。 - PhospheneExtension.appex (引擎): 这是核心部分。它运行在
WallpaperAgent进程中,使用AVSampleBufferDisplayLayer来渲染帧。
解决“无缝循环”问题
Phosphene 最令人印象深刻的技术成就之一是其循环处理方式。标准的 AVPlayerLayer 实现通常在重新启动视频时会导致微小的卡顿或“闪烁”。Phosphene 通过手动驱动解码管线来避免这种情况。它为当前循环维护一个 AVAssetReader,同时预加载下一个循环,并在循环边界使用单调递增的演示时间戳 (PTS) 偏移。这实现了完美无缝、帧准确的循环。
功耗感知播放
Phosphene 不仅仅是播放视频;它还会根据系统状态进行管理。其 PlaybackPolicy 作为唯一的真相来源,综合处理以下输入:
- 电池电量 vs. 交流电源
- 散热状态
- 游戏模式状态
- 窗口遮挡(如果桌面被完全覆盖则暂停渲染)
这种逻辑确保了您的壁纸在执行密集型任务时不会成为性能瓶颈。
关于私有框架的说明
需要注意的是,Phosphene 使用 dlopen 加载 WallpaperExtensionKit,并依赖基于 Mirror 的运行时内省来与 XPC 类型通信。由于这些是私有 API,该项目本质上与 macOS Tahoe 的内部结构绑定。开发者实现了巧妙的变通方法,例如 WallpaperSnapshotXPC swizzle,以确保锁定屏幕在切换过程中不会变灰——这是当 Apple 的私有编码器期望特定类类型时常见的问题。
开始使用
如果您是对其工作原理感兴趣的开发者,可以从源代码构建。该项目需要 Xcode 17+ 和 Swift 6 严格并发支持。
git clone https://github.com/kageroumado/phosphene.git
cd phosphene
open Phosphene.xcodeproj
对于无头构建(适用于 CI 或没有签名标识的本地测试),可以使用:
xcodebuild -project Phosphene.xcodeproj -scheme Phosphene -configuration Debug \
-destination 'generic/platform=macOS' \
CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY='' build
Phosphene 是逆向工程系统级集成的典范。无论您是想用它来定制桌面,还是研究如何与 macOS 私有框架交互,这都是一个值得探索的项目。
来源
kageroumado/phosphene: A video wallpaper engine for macOS Tahoe