Skip to main content

开发环境准备

Xcode 10及以上的版本,手机也必须升级至 iOS 12 以上,否则无法使用录屏特性。

创建扩展程序

在现有工程选择【New】->【Target…】,选择【Broadcast Upload Extension】,如图所示: 配置好 Product Name。单击【Finish】后可以看到,工程多了所输 Product Name 的目录,目录下有个系统自动生成的 SampleHandler类,这个类负责录屏的相关处理;以及对应的Product Name SetupUI 的目录,目录下有个系统自动生成的 BroadcastSetupViewController类,这个类负责录屏的UI相关处理。

为扩展添加SDK依赖

  1. 手动集成方式需要将RTCEngineKit.frameworknl导入上述Product Name 的工程目录,并配置依赖的系统库;
  2. 自动集成方式需更改Podfile文件,并执行pod install,如下图所示:

为宿主添加后台权限

工程宿主【TARGETS】->【Signing & Capabilities】->【Capability】,选择【Background Modes】,如图所示: 双击添加后勾选【Audio, AirPlay, and Picture in Picture】选项,如下图所示:

对接流程

1、在需要使用录制服务的位置引入 #import <ReplayKit/ReplayKit.h> 并创建RPSystemBroadcastPickerView对象,如下图: 2、为实现业务细节,采用如下方式替换RPSystemBroadcastPickerView按钮,broadcastButton按钮事件后出现以下页面说明扩展集成成功: 3、宿主工程在创建频道实例时传入 RTCEngineChannelDelegate,实现屏幕共享状态回调:
3.0.0 起,ReplayKit 采集是进程级共享能力,单个频道是否推送共享流由该频道实例的 publishScreenRecord: 控制,屏幕共享状态回调也随之迁移到 RTCEngineChannelDelegate 并带上事件来源频道实例。需要一次性关闭进程内全部频道的屏幕录制时,仍调用 -[RTCEngineKit stopScreenRecord]3.0.1 起,加入频道成功后 SDK 即启动采集服务并保持监听,用户可以随时通过系统面板拉起屏幕录制;扩展端连接建立后才会回调 RTCScreenRecordStatusStart。因此业务层必须在收到 Start 回调之后再调用 publishScreenRecord:YES,不要为了发布共享流而提前调用它。
4、屏幕扩展SampleHandler中实现RTCScreenDelegate代理:
5、屏幕扩展SampleHandler中实现开启屏幕录制功能:
6、屏幕扩展SampleHandler中实现发送共享屏幕帧数据:
7、宿主工程在收到 RTCScreenRecordStatusStart 回调后,在需要推送共享流的频道实例上发布屏幕共享。最后一个发布的频道取消发布时,才会断开扩展端连接并结束本次系统录屏:
完整时序为:加入频道成功(SDK 自动启动采集服务并监听)→ 用户通过 RPSystemBroadcastPickerView 拉起系统录屏 → 扩展端接入,收到 RTCScreenRecordStatusStart → 频道实例 publishScreenRecord:YES 开始推流。结束时调用 publishScreenRecord:NO(仅当前频道停止推流)或 -[RTCEngineKit stopScreenRecord](结束本次系统录屏,采集服务保持监听,用户可再次拉起)。