跳到主要內容
Flow

Properties

播放器 Property 的設計規則與行為。型別、預設值與範圍以程式碼為準:FlowPlayerAPI 的 PlayerVocabulary.swift。Command/Property 系統見 player-api.md。

設計

  • 名稱:類別.名稱(借鏡 mpv),Swift 以 PropertyKey 的靜態常數存取(如 .audioVolume),或以名稱與 PropertyValue 存取。
  • 目錄:只有登記的 Property 存在;型別、預設值、唯讀與正規化都由登記的 PropertyDescriptor 決定,自建同名的 PropertyKey 改變不了(見目錄)。
  • 可寫與唯讀:可寫 Property 表達使用者意圖,引擎觀察後套用;唯讀 Property 只由引擎回報狀態。
  • 寫入:先正規化(如超出範圍取最近的值)再存入;未登記、唯讀或無效值拋 PropertyError。依名稱寫入時,數字可寫入整數 Property(須為整數)與時間 Property(秒)。未開啟媒體時照常存入,開檔時套用。
  • 加減與循環:add 對數值 Property 加減,cycle 切換 Bool 或依 PropertyDescriptor.steps 移到下一階(見 Command);playback.rate 的步階即控制列的速度選單。
  • 觀察:值改變時才通知;SwiftUI 讀 value(of:) 會自動更新。
  • 保存:不保存。開啟新檔案時保留,結束 Flow 後回到預設值。
try player.set(.audioVolume, to: 50)
let token = player.observe(.playbackPosition) { position in … }

由控制列、快捷鍵調整見 settings.md;MCP 可讀取全部 Property、設定可寫的 Property,見 mcp.md。

清單

播放

Property寫入行為
playback.state唯讀idle(未開啟媒體)、loading、ready(已載入、尚未播放)、playing、paused、seeking、ended(播完,保留最後一幀)或 error;轉移見狀態機
playback.path唯讀開啟中的檔案路徑(非檔案時為 URL,同 mpv path);開始載入時設定,stop 與失敗後為 nil。不為 nil 即已開啟媒體
playback.error唯讀失敗原因(PlayerError),只在 playback.state 為 error 時不為 nil
playback.position唯讀播放中每 0.25 秒更新;暫停、seek、播完時立即更新;開檔、stop、開檔失敗後歸零
playback.duration唯讀未開啟媒體或長度未知時為 nil
playback.paused可寫使用者的暫停意圖,而非播放狀態。load 開始載入時寫入其 paused 參數(預設 false,新檔案直接播放)。播完時變為 true 並保留最後一幀(mpv keep-open),再設為 false 從頭播放。play、pause Command 即寫入此值
playback.rate可寫變速時音調不變

音訊

Property寫入行為
audio.volume可寫音量(%)
audio.mute可寫不改變 audio.volume

影像

Property寫入行為
video.rotate可寫疊加在影片本身旋轉之上的順時針角度;變更時重新編譯 Display Graph 並更新 video.display-size,App 的視窗跟著調整比例
video.display-size唯讀套用像素長寬比與旋轉(含 video.rotate)後的影片尺寸(像素),由影片軌的幾何算出,與視窗無關;開檔時(fileLoaded 之前)設定,未開啟媒體或沒有影像時為 nil。App 依它調整視窗大小並鎖定比例

視窗

Property寫入行為
window.fullscreen可寫App 套用到視窗,並回寫實際狀態(含系統綠色按鈕)