iOS跨应用录屏方案
接到一个跨应用录屏的需求,要求封装成SDK
给到别的团队去使用,调研了一波录屏相关的实现,iOS
目前唯一能实现的怕也只是基于ReplayKit
的Broadcast Upload Extension
了
但是有一定局限性,在控制中心启动录屏,如果手机存在多个应用支持该方式录屏,长按出现一个可选列表,很容易选错或者误操作, 可能苹果也想到了这一点在iOS12
以上则可以在应用内调用启动录屏,就是UI
不易定制,得用苹果自带的UI
或者hack
按钮点击(hack有一定风险 后续版本如果UI层级改变或者实现方式改变就得跟着改 万一出现问题容易出现生产事故
)
主要思路
-
宿主需要获得视频文件或者视频流进行业务处理, 这里就涉及到进程间通信,目前了解到的实现方案有
-
如果是录制视频文件则可以采用
App Groups
实现文件沙盒共享 -
如果是视频流数据 可以通过本地
Socket
服务, 建立长链接进行通信
-
-
录屏回调事件转发,采用底层的通知中心(
CFNotificationCenterGetDarwinNotifyCenter
)从拓展发送给宿主,然后宿主进行转发处理 (使用MMWormhole
体验会更好一些) -
创建
Broadcast Upload Extension
在SampleHandler
里处理视频数据的写入,转发回调等逻辑,也可以封装一个framework专门处理视频写入以及进程通信 -
宿主获取到音视频流之后进行h264编码,可以选择rtmp/webrtc 等进行推流即可实现录屏直播
目前遇到的问题
1.应用切到后台,点击左上角红点结束录屏,使用CFNotificationCenterGetDarwinNotifyCenter
通知宿主,控制台打印没有及时显示,而是等应用切到前台才有打印, 这里涉及到停止录屏的后续操作,跨应用录屏的话停止录屏时,宿主应用应该需要知道已经结束录屏了,然后回到宿主应用内进行下一步的业务逻辑... 这一个问题还需进一步验证,那就是在拓展里SampleHandler
结束回调时,尝试直接打开唤醒宿主应用(PS: 目前没有找到好的办法,只能手动返回宿主应用才能收到回调
)(其实这个问题是需要后台保活以及后台任务 加无声音乐🎵播放/后台定位/VOIP等都可以实现)
2. 集成问题也比较复杂,不像普通SDK只需拖拽一个framework就完事了,这个还需项目新建target
Broadcast Upload Extension 添加录屏处理的代码,然后还要新建App Group
进行关联(其实这些都是必须的步骤)
参考文章
本文来自博客园,作者:CoderWGB,转载请注明原文链接:https://www.cnblogs.com/wgb1234/p/16062667.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix