app内录屏开发 ios_iOS端屏幕录制Replaykit项目实践

上一篇阐述了调研结果,而我们常用的应用场景就是录制屏幕内容,然后将内容分享给他人(直播或录播)。流程如下:

1.被录制端host app需引入 ReplayKit,以便可以使用其api选择一个app的extension来启动录制;

2.广播端宿主app需要集成 Broadcast UI 和 Broadcast Upload 两个 Extension,以便出现在被录制端可选的 App 列表中;

3.host app选定宿主app 后,将启动宿主app的extension,开始录制和广播相关逻辑。

上文已经提到,从iOS9系统开始,苹果推出了replaykit 这个sdk来支持屏幕录制,通过extension形式实现屏幕录制。本文将对屏幕录制使用replaykit的技术细节进行描述, 下一篇将对录制内容的推送(广播)进行描述。通过本文你将对以下几方面得到信息:

1. extension是什么?

2. extension跟app什么关系?

3. 在iOS10 11上集成extension注意哪些,区别有哪些?

4. 调试时注意哪些?

5. 调试时涉及到的原理和通信方式

extension是什么?

逻辑形式:

extension必须寄生在宿主app中,会随着宿主 app的安装而安装,同时随着宿主 app的卸载而卸载,但是extension却可以独立生存,即使宿主app没有启动,extension也可以为其他app提供相关服务。(能够调起extension的app被称为host app)

物理形式:

iOS系统提供屏幕录制和直播功能都需要通过Extensions的形式来支持,通过在Xcode的已有工程中新建target,选择broadcast upload extension,这样工程中将自动添加broadcast upload extension和broadcast setup UI extension两个extensions。extension并不是一个独立的app,它有一个包含在app bundle中的独立bundle,extension的bundle后缀名是.appex。

集成extension

集成方式很简单,新建target,选择upload相关两个extension。集成之后将在工程的列表中看到两个新增的目录。

需要注意的是,ios10 系统在upload的extension中的info.plist中NSExtensionPointIdentifier对应的value必须使用NSExtensionPointIdentifierkey对应ios10才兼容的com.apple.broadcast-services,不应该使用com.apple.broadcast-services-upload ,在iOS10系统中使用com.apple.broadcast-services-upload将无法通过编译,Xcode会报错。

通信

iOS10系统和iOS11系统的屏幕录制和直播,涉及到extensions和host app、containing app之间的通信,其中host app一端需要集成ReplayKit2,从而可以发起录制和直播请求,而containing app需要集成extensions,实现对其他可以录制的app的直播功能的支持。extension和host app之间可以通过extensionContext属性直接通信,extension和宿主containing app之间是通过IPC或基于group的文件共享来实现的。

对于iOS10和iOS11,屏幕录制区别较大,前者只能录制app内的内容,后者可以录制整个系统的内容,而且前者可以通过代码控制录制的启动,而后者只能通过用户的操作(控制中心,点击圆点,选择app)启动录制。

iOS 10

在iOS10系统中,想要录制当前app内的内容,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值