屏幕共享
RTCLib SDK 为开发者提供了屏幕共享插件,屏幕共享功能以插件库形式提供。开发者可自行选择是否向项目中集成 RongRTCReplayKitExt 插件库来实现屏幕共享功能。RongRTCReplayKitExt 插件用于扩展 target 上使用。
环境要求
- iOS 系统版本 12 及以上
- 屏幕共享功能在 RTCLib SDK 5.1.8.1 及以后支持
- 屏幕共享库 RongRTCReplayKitExt 依赖的 RTCLib SDK 版本必须大于等于 5.1.8.1
实现方式
我们可以通过苹果的 Extension 来实现屏幕共享技术。这里将通过使用 iOS 11 之后新增的系统级别的录屏能力,来实现录制自身 App 以外手机屏幕内容的效果。
受 iOS 系统的 ReplayKit 库限制,iOS 12 前在 App 中调用 Extension 启动屏幕共享时,只能作用于 App 内,如果退出 App 则无法得到屏幕内容。
iOS 端的屏幕共享是通过在 Extension 中使用 RongRTCReplayKitExt 框架实现录制屏幕流的接收,然后将屏幕共享流传输到 RTCLib 实现的。由于 Apple 不支持 Extension 进程与主 App 进程通信,因此您需要为屏幕共享流单独创建一个进程。
实现流程
实现屏幕共享的主要步骤如下:
- 创建 App Group:在 Xcode 中进行配置,让 Extension 录屏进程可以与主 App 进程进行跨进程通信
- 创建 Broadcast Upload Extension:用于开启屏幕共享的进程
- 宿主 App 开启屏幕共享:发布屏幕共享流
- 屏幕共享 Extension 处理:收到消息后,初始化 RongRTCReplayKitExt 库,接收系统录制数据
集成说明
创建 App Group
- 新版本 Xcode 支持 在 Target 下 Signing & Capabilities 页面中 App Groups 进行创建并关联 AppGroup,可以直接跳过如下 1-5 步。
- 老版本 Xcode 可能无法直接使用 Xcode 创建 AppGroup,需要使用您的帐号登录 苹果开发者后台 ,进行以下 1-5 步操作来创建 AppGroup,然后再关联 AppGroup。
-
单击 Certificates, IDs & Profiles,在右侧的界面中单击加号。
-
选择 App Groups,单击 Continue。
-
在弹出的表单中填写 Description 和 Identifier, 其中 Identifier 需要传入接口中的对应的 AppGroup 参数。完成后单击 Continue。
-
回到 Identifier 页面,然后单击您的 App ID,进入 Edit your App ID Configuration 页面,选中 App Groups 并单击 Edit。
-
在弹出的表单中选择您之前创建的 App Group,单击 Continue 返回 Edit your App ID Configuration 页面,单击 Save 保存。
-
打开 Xcode,选中屏幕共享 Target(Broadcast Upload Extension) 点击 App Groups 的 + 按钮。
-
输入的 AppGroup,然后点击 OK 按钮,如果输入的 AppGroup 的已经创建过,则直接关联上;如果输入的 AppGroup 没有被创建过,则创建的同时进行关联。
创建 Broadcast Upload Extension:
-
在 Xcode 菜单依次单击 File、New、Target...,选择 Broadcast Upload Extension,创建类型为
Broadcast Upload Extension
的新 target。 -
在弹出的对话框中填写相关信息,不用勾选 Include UI Extension,单击 Finish 完成创建。
-
在您的屏幕共享 Target - Build Phases - Compile Sources 中添加您可能在屏幕共享 Extension 里引用类的 .m 文件名
-
受限于
RongIMLib
库中的默认 2 分钟断开连接的限制,需要修改如下 Pod 路径下的 .plist 配置文件:您的工程名/Pods/RongCloudIM/IMLibCore/RCConfig.plist
在此文件中添加:
xml<key>Connection</key>
<dict>
<key>ForceKeepAlive</key>
<true/>
</dict>其中:
Connection
和ForceKeepAlive
类型为 Key 值,true
的类型为 Bool -
选中新增加的 Target,依次单击 + Capability,双击 App Groups,如下图:
操作完成后,会在文件列表中生成一个以您自己创建的 Target 命名的 Target名.entitlements 的文件,如下图所示,选中该文件并单击 + 号填写上述步骤中的 App Group 即可
-
选中宿主 App 的 Target,并按照上述步骤对宿主 App 的 Target 做同样的处理