Side Projects
LoopSlide for Apple TV

為 Apple TV 打造的原生數位相框,從 Apple 照片或多組 SMB/NAS 來源連續播放照片與影片。支援 Range 影片串流與快取預載、模糊背景、時鐘覆蓋、隨機播放與 Siri Remote 快速操作,相容 JPG/PNG/HEIC/WebP 與 MP4/MOV。
要解決的問題
很多家庭的照片和影片存在 NAS 或 Apple 照片裡,客廳的電視卻常常只是黑畫面。想在大螢幕上輪播自己的照片,往往得先把檔案整理、搬到其他裝置或服務上。LoopSlide for Apple TV 讓 Apple TV 直接從 NAS 與 Apple 照片連續播放照片和影片,當成一台數位相框。
畫面截圖
主要功能
多組 SMB/NAS 連線與 Apple 照片
可新增多組 SMB 網路分享連線(支援帳號密碼與訪客登入),也能勾選 Apple 照片中的相簿,各來源的照片與影片會合併成同一個播放清單。
遞迴掃描資料夾
從指定路徑往下掃描子資料夾,收集 JPG、PNG、HEIC、WebP 照片與 MP4、MOV 影片,並略過隱藏檔與 NAS 產生的縮圖檔。
模糊背景與時鐘
每張照片後方以同一張照片放大模糊作為背景,避免直式或比例不同的照片留下黑邊;可開啟時鐘與日期覆蓋,日期有四種格式。
播放設定
可選順序或隨機播放,間隔為 3、5、10、15 或 30 秒,畫面上有進度與倒數指示。
Siri Remote 操作
左右切換上一張與下一張,播放/暫停鍵控制輪播;遇到影片時往上可叫出播放控制來快轉或倒轉。
三種介面語言
介面提供英文、中文與日文,可在設定中切換。
技術架構
這是以 Swift 與 SwiftUI 撰寫的原生 tvOS App,影片播放使用 AVKit 的 VideoPlayer。SMB 連線透過開源的 AMSMB2 函式庫,Apple 照片則使用 Photos framework 的 PHImageManager,並允許從 iCloud 下載原始檔。兩種來源都實作同一個 MediaSource protocol(掃描、載入圖片、取得影片 URL),輪播引擎只面對這個介面,不必知道檔案來自哪裡。NAS 上的檔案下載到暫存目錄,由一個 actor 實作的快取以最近使用順序保留最多 20 個檔案,並在切換時預先載入接下來兩個項目。
技術挑戰與取捨
讓 NAS 與 Apple 照片混在同一個輪播
第一版只有 SMB 來源,輪播引擎直接依賴 SMB 設定。加入 Apple 照片時,可以在引擎裡為兩種來源各寫一套分支,但之後每加一種來源都要再改引擎。最後抽出 MediaSource protocol,把既有 SMB 程式包成一個實作,再新增 Photos 的實作,引擎改為接收一組來源並合併項目。之後的播放順序、預載與遙控操作都不用區分來源。
照片方向與網路延遲
從 NAS 讀到的照片需要自行處理 EXIF 方向,否則手機直拍的照片會在電視上橫躺。做法是用 ImageIO 讀出方向資訊,必要時重新繪製成正向的影像再顯示。另一個問題是每張照片都要先從網路下載,切換時容易出現空檔,所以在每次換頁後預先載入後面兩個項目,並以有上限的快取避免暫存檔無限增加。
遙控器焦點在輪播與影片控制之間切換
Siri Remote 的左右鍵在輪播時用來換頁,但播放影片時同樣的按鍵應該交給影片播放器來快轉。若兩邊同時處理,就會出現想快轉卻跳到下一張的情況。解法是用 SwiftUI 的焦點狀態區分「輪播」與「影片控制」兩種模式:只有往上叫出影片控制時才把焦點交給播放器,按返回鍵先收起控制,再按一次才離開輪播。
現況
Apple TV 原生 App,版本 1.0.0,需要 tvOS 26.2 以上。iPhone 與 iPad 版是另一個獨立專案。
使用技術
- Swift
- SwiftUI
- tvOS
- AVKit
- SMB
- Apple Photos

