使用 Phosphene 为 macOS Tahoe 构建原生视频壁纸

探索 Phosphene 如何利用 Apple 私有框架提供无缝、节能的视频壁纸,并直接集成到 macOS 系统设置中。

多年来,macOS 用户一直依赖第三方应用,通过覆盖窗口或修改桌面环境来显示视频壁纸。这些解决方案通常资源占用高、耗电快,且容易出现闪烁。Phosphene 诞生了,这是一个针对 macOS Tahoe 的开源引擎,它采用了一种截然不同的方法:直接集成到系统的原生壁纸选择器中。

“原生”优势

Phosphene 不仅仅是另一个覆盖层应用。它构建在 Apple 私有的 WallpaperExtensionKit 框架之上——这与驱动 Apple 官方“航拍”屏幕保护程序的技术相同。通过挂载到这个系统级扩展点,Phosphene 允许您的自定义视频直接出现在系统设置 → 壁纸中,与原生选项并列。

由于渲染发生在系统 WallpaperAgent 的进程外,即使关闭 Phosphene 主应用,壁纸也会保持运行。它遵循操作系统级别的锁定屏幕、空闲和睡眠生命周期,提供了传统覆盖层应用根本无法比拟的稳定性。

幕后:架构与工程

Phosphene 将其工作负载分为两个不同的组件:

  1. Phosphene.app (菜单栏 UI): 处理库管理、元数据和转码。它使用 VideoOptimizationService 生成视频的低分辨率或低帧率版本,确保系统在电池电量低或散热压力大时可以切换到更轻量的资源。
  2. 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