macOS 배경화면을 내 맘대로! Phosphene 오픈소스 공개
Apple의 비디오 배경화면(Video Wallpapers) 기능을 커스터마이징할 수 있는 오픈소스 프로젝트, Phosphene이 공개됨
WallpaperExtensionKit.framework를 활용하여 시스템의 네이티브 배경화면 선택기에 통합되는 방식
Gapless looping 기술을 통해 끊김 없는 비디오 재생을 지원하며, 전력 관리 및 화면 가림 감지 기능 포함
Apple의 비공개 프레임워크(Private Framework) 사용으로 인한 향후 호환성 문제에 대한 우려가 존재함
WallpaperExtensionKit 프레임워크 활용
Phosphene은 macOS의 WallpaperExtensionKit.framework를 활용하여 시스템의 배경화면 기능을 확장한다. 개발자는 이 프레임워크를 통해 사용자 정의 비디오를 시스템 설정에 통합하여, Apple의 기본 배경화면과 동일한 방식으로 관리할 수 있다. 하지만, 해당 프레임워크가 비공개(Private)이므로, Apple의 OS 업데이트에 따라 기능이 중단될 수 있다는 점을 인지해야 한다. 특히, Mirror-based runtime introspection을 사용하여 XPC 타입에 접근하는 방식은 향후 호환성 문제를 야기할 수 있다.
Gapless Looping 기술 구현
Phosphene은 Gapless Looping 기술을 통해 비디오의 끊김 없는 반복 재생을 구현한다. 이는 PTS(Presentation Time Stamp) 오프셋(Offset)을 활용하여 루프 경계에서 프레임 간의 간격을 조정하는 방식으로 이루어진다. 이러한 기술은 AVSampleBufferDisplayLayer를 직접 제어하여, AVPlayerLayer 사용 시 발생할 수 있는 문제점을 해결한다. 결과적으로, 부드럽고 자연스러운 비디오 재생 경험을 제공한다.
전력 관리 및 화면 가림 감지
Phosphene은 전력 소비를 최적화하기 위해 PlaybackPolicy를 사용한다. 이 정책은 배터리 잔량, 화면 모드, 열 상태 등을 기반으로 재생 속도를 조절하거나 일시 중지한다. 또한, 모든 디스플레이가 창에 의해 가려질 경우 렌더링을 일시 중지하여 시스템 자원 사용을 최소화한다. 이러한 기능은 사용자 경험을 향상시키는 동시에, 시스템의 전반적인 성능에 긍정적인 영향을 미친다.
아키텍처 및 기술적 특징
Phosphene은 메뉴 바 UI를 담당하는 Phosphene.app과 배경화면을 실제로 렌더링하는 PhospheneExtension.appex로 구성된다. PhospheneExtension은 WallpaperAgent 프로세스 내에서 실행되며, AVSampleBufferDisplayLayer를 사용하여 프레임을 렌더링한다. 또한, XPC(Cross-Process Communication)를 통해 WallpaperAgent와 통신하며, 전력/열 모니터링, 스냅샷 생성 등의 기능을 수행한다. 이러한 아키텍처는 시스템의 안정성과 효율성을 높이는 데 기여한다.