• iOS跨应用录屏方案


    接到一个跨应用录屏的需求,要求封装成SDK给到别的团队去使用,调研了一波录屏相关的实现,iOS目前唯一能实现的怕也只是基于ReplayKitBroadcast Upload Extension

    但是有一定局限性,在控制中心启动录屏,如果手机存在多个应用支持该方式录屏,长按出现一个可选列表,很容易选错或者误操作, 可能苹果也想到了这一点在iOS12以上则可以在应用内调用启动录屏,就是UI不易定制,得用苹果自带的UI或者hack按钮点击(hack有一定风险 后续版本如果UI层级改变或者实现方式改变就得跟着改 万一出现问题容易出现生产事故)

    主要思路

    • 宿主需要获得视频文件或者视频流进行业务处理, 这里就涉及到进程间通信,目前了解到的实现方案有

      • 如果是录制视频文件则可以采用 App Groups 实现文件沙盒共享

      • 如果是视频流数据 可以通过本地Socket服务, 建立长链接进行通信

    • 录屏回调事件转发,采用底层的通知中心(CFNotificationCenterGetDarwinNotifyCenter)从拓展发送给宿主,然后宿主进行转发处理

    • 创建Broadcast Upload ExtensionSampleHandler里处理视频数据的写入,转发回调等逻辑,也可以封装一个framework专门处理视频写入以及进程通信

    目前遇到的问题

    1. 应用切到后台,点击左上角红点结束录屏,使用CFNotificationCenterGetDarwinNotifyCenter通知宿主,控制台打印没有及时显示,而是等应用切到前台才有打印, 这里涉及到停止录屏的后续操作,跨应用录屏的话停止录屏时,宿主应用应该需要知道已经结束录屏了,然后回到宿主应用内进行下一步的业务逻辑... 这一个问题还需进一步验证,那就是在拓展里SampleHandler结束回调时,尝试直接打开唤醒宿主应用 (PS: 目前没有找到好的办法,只能手动返回宿主应用才能收到回调)

    2. 集成问题也比较复杂,不像普通SDK只需拖拽一个framework就完事了,这个还需项目新建target Broadcast Upload Extension 添加录屏处理的代码,然后还要新建App Group进行关联

    未经作者授权,禁止转载
    THE END
  • 相关阅读:
    BorderContainer 背景透明一不小心就解决了!
    C#编程应用线程与委托
    第二次SQL RAP要点
    最近的学习
    BW中传输的问题
    7月总结Dotnetnuke的研究总结
    EP学习要点记忆
    盲人摸象SAP PS模块的介绍与讨论
    如何跨Client删除数据
    如何修改Portal与BW系统的链接域名
  • 原文地址:https://www.cnblogs.com/wgb1234/p/16062667.html
Copyright © 2020-2023  润新知