
iOS 和 iPadOS 的 ReplayKit 保安
ReplayKit 是允許開發者在其 App 中加入錄製與即時廣播功能的架構。此外,它允許用户運用裝置的前鏡頭和咪高風來為其錄製的內容和廣播加上註解。
影片錄製
錄製影片中打造的保安層級有數層:
權限對話框:在錄製開始前,ReplayKit 會向用户提供同意提示,要求用户確認其錄製螢幕畫面、咪高風及前置相機的意圖。系統會針對每個 App 處理程序顯示此提示一次,且如 App 停留在背景超過 8 分鐘,將會再次顯示。
螢幕與音訊截取:螢幕與音訊截取是在 App 的處理程序外、於 ReplayKit 服務程式 replayd 中進行。其設計用意是確保錄製的內容從不讓 App 處理程序存取。
App 內螢幕與音訊截取:這允許 App 取得於權限對話框授權的影片及樣本緩衝。
影片製作與儲存:影片檔會直接寫入目錄,只有 ReplayKit 子系統可存取,且從不讓任何 App 存取。這樣有助防止錄製內容未經用户同意而遭第三方使用。
終端用户預覽與共享:用户可使用 ReplayKit 提供的用户介面來預覽與共享影片。用户介面會透過「iOS 延伸功能」基礎架構跨程序呈現,並可存取產生的影片檔。
ReplayKit 廣播
廣播影片中打造的保安層級有數層:
螢幕與音訊截取:廣播期間的螢幕與音訊截取機制與影片錄製相同,且會發生於
replayd
中。廣播延伸功能:如要讓第三方服務參與 ReplayKit 廣播,有關第三方服務需要建立兩個以 com.apple.broadcast-services 端點加以設定的新延伸功能:
允許用户設定其廣播的用户介面延伸功能
上載延伸功能,可處理上載影片與音訊資料至服務的後端伺服器
該架構有助確保託管 App 對廣播的影片和音訊內容沒有特殊權限。只有 ReplayKit 和第三方廣播延伸功能具有存取權限。
廣播選擇器:透過廣播選擇器,用户可直接從 App 開始發送系統廣播(使用可從「控制中心」存取的相同系統定義用户介面)。用户介面會使用專用 API 來導入,且為位於 ReplayKit 程式框架中、屬託管 App 的跨程序延伸功能。
上載延伸功能:第三方廣播服務會執行延伸功能,以在廣播使用原始未編碼的樣本緩衝期間處理影片和音訊內容。進行此處理模式期間,系統會將影片和音訊資料序列化,並透過直接 XPC 連線來即時傳遞至第三方的上載延伸功能。影片資料完成編碼的方式是藉由從影片樣本緩衝截取 IOSurface 物件、以安全的方式編碼為 XPC 物件,再透過 XPC 傳送至第三方延伸功能,並安全地解碼回 IOSurface 物件。