iOS跨应用录屏方案
接到一个跨应用录屏的需求,要求封装成SDK
给到别的团队去使用,调研了一波录屏相关的实现,iOS
目前唯一能实现的怕也只是基于ReplayKit
的Broadcast Upload Extension
了
但是有一定局限性,在控制中心启动录屏,如果手机存在多个应用支持该方式录屏,长按出现一个可选列表,很容易选错或者误操作, 可能苹果也想到了这一点在iOS12
以上则可以在应用内调用启动录屏,就是UI
不易定制,得用苹果自带的UI
或者hack
按钮点击(hack有一定风险 后续版本如果UI层级改变或者实现方式改变就得跟着改 万一出现问题容易出现生产事故
)
主要思路
-
宿主需要获得视频文件或者视频流进行业务处理, 这里就涉及到进程间通信,目前了解到的实现方案有
-
如果是录制视频文件则可以采用
App Groups
实现文件沙盒共享 -
如果是视频流数据 可以通过本地
Socket
服务, 建立长链接进行通信
-
-
录屏回调事件转发,采用底层的通知中心(
CFNotificationCenterGetDarwinNotifyCenter
)从拓展发送给宿主,然后宿主进行转发处理 -
创建
Broadcast Upload Extension
在SampleHandler
里处理视频数据的写入,转发回调等逻辑,也可以封装一个framework专门处理视频写入以及进程通信
目前遇到的问题
-
应用切到后台,点击左上角红点结束录屏,使用
CFNotificationCenterGetDarwinNotifyCenter
通知宿主,控制台打印没有及时显示,而是等应用切到前台才有打印, 这里涉及到停止录屏的后续操作,跨应用录屏的话停止录屏时,宿主应用应该需要知道已经结束录屏了,然后回到宿主应用内进行下一步的业务逻辑… 这一个问题还需进一步验证,那就是在拓展里SampleHandler
结束回调时,尝试直接打开唤醒宿主应用 (PS:目前没有找到好的办法,只能手动返回宿主应用才能收到回调
) -
集成问题也比较复杂,不像普通SDK只需拖拽一个framework就完事了,这个还需项目新建
target
Broadcast Upload Extension 添加录屏处理的代码,然后还要新建App Group
进行关联
本文来自博客园,作者:CoderWGB,转载请注明原文链接:https://www.cnblogs.com/wgb1234/p/16062667.html