1. 程式人生 > 其它 >iOS跨應用錄屏方案

iOS跨應用錄屏方案

接到一個跨應用錄屏的需求,要求封裝成SDK給到別的團隊去使用,調研了一波錄屏相關的實現,iOS目前唯一能實現的怕也只是基於ReplayKitBroadcast Upload Extension

但是有一定侷限性,在控制中心啟動錄屏,如果手機存在多個應用支援該方式錄屏,長按出現一個可選列表,很容易選錯或者誤操作, 可能蘋果也想到了這一點在iOS12以上則可以在應用內呼叫啟動錄屏,就是UI不易定製,得用蘋果自帶的UI或者hack按鈕點選(hack有一定風險 後續版本如果UI層級改變或者實現方式改變就得跟著改 萬一出現問題容易出現生產事故)

主要思路

  • 宿主需要獲得視訊檔案或者視訊流進行業務處理, 這裡就涉及到程序間通訊,目前瞭解到的實現方案有

    • 如果是錄製視訊檔案則可以採用 App Groups 實現檔案沙盒共享

    • 如果是視訊流資料 可以通過本地Socket服務, 建立長連結進行通訊

  • 錄屏回撥事件轉發,採用底層的通知中心(CFNotificationCenterGetDarwinNotifyCenter)從拓展傳送給宿主,然後宿主進行轉發處理

  • 建立Broadcast Upload ExtensionSampleHandler裡處理視訊資料的寫入,轉發回撥等邏輯,也可以封裝一個framework專門處理視訊寫入以及程序通訊

目前遇到的問題

  1. 應用切到後臺,點選左上角紅點結束錄屏,使用CFNotificationCenterGetDarwinNotifyCenter

    通知宿主,控制檯列印沒有及時顯示,而是等應用切到前臺才有列印, 這裡涉及到停止錄屏的後續操作,跨應用錄屏的話停止錄屏時,宿主應用應該需要知道已經結束錄屏了,然後回到宿主應用內進行下一步的業務邏輯... 這一個問題還需進一步驗證,那就是在拓展裡SampleHandler結束回撥時,嘗試直接開啟喚醒宿主應用

  2. 整合問題也比較複雜,不像普通SDK只需拖拽一個framework就完事了,這個還需專案新建target Broadcast Upload Extension 新增錄屏處理的程式碼,然後還要新建App Group進行關聯

未經作者授權,禁止轉載 THE END