iOS跨應用錄屏方案
阿新 • • 發佈:2022-03-27
接到一個跨應用錄屏的需求,要求封裝成SDK
給到別的團隊去使用,調研了一波錄屏相關的實現,iOS
目前唯一能實現的怕也只是基於ReplayKit
的Broadcast Upload Extension
了
但是有一定侷限性,在控制中心啟動錄屏,如果手機存在多個應用支援該方式錄屏,長按出現一個可選列表,很容易選錯或者誤操作, 可能蘋果也想到了這一點在iOS12
以上則可以在應用內呼叫啟動錄屏,就是UI
不易定製,得用蘋果自帶的UI
或者hack
按鈕點選(hack有一定風險 後續版本如果UI層級改變或者實現方式改變就得跟著改 萬一出現問題容易出現生產事故
)
主要思路
-
宿主需要獲得視訊檔案或者視訊流進行業務處理, 這裡就涉及到程序間通訊,目前瞭解到的實現方案有
-
如果是錄製視訊檔案則可以採用
App Groups
實現檔案沙盒共享 -
如果是視訊流資料 可以通過本地
Socket
服務, 建立長連結進行通訊
-
-
錄屏回撥事件轉發,採用底層的通知中心(
CFNotificationCenterGetDarwinNotifyCenter
)從拓展傳送給宿主,然後宿主進行轉發處理 -
建立
Broadcast Upload Extension
在SampleHandler
裡處理視訊資料的寫入,轉發回撥等邏輯,也可以封裝一個framework專門處理視訊寫入以及程序通訊
目前遇到的問題
-
應用切到後臺,點選左上角紅點結束錄屏,使用
CFNotificationCenterGetDarwinNotifyCenter
SampleHandler
結束回撥時,嘗試直接開啟喚醒宿主應用 -
整合問題也比較複雜,不像普通SDK只需拖拽一個framework就完事了,這個還需專案新建
target
Broadcast Upload Extension 新增錄屏處理的程式碼,然後還要新建App Group
進行關聯