开发环境准备
Xcode 10及以上的版本,手机也必须升级至 iOS 12 以上,否则无法使用录屏特性。创建扩展程序
在现有工程选择【New】->【Target…】,选择【Broadcast Upload Extension】,如图所示:
BroadcastSetupViewController类,这个类负责录屏的UI相关处理。
为扩展添加SDK依赖
- 手动集成方式需要将
RTCEngineKit.frameworknl导入上述Product Name 的工程目录,并配置依赖的系统库; - 自动集成方式需更改
Podfile文件,并执行pod install,如下图所示:

为宿主添加后台权限
工程宿主【TARGETS】->【Signing & Capabilities】->【Capability】,选择【Background Modes】,如图所示:

对接流程
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,不要为了发布共享流而提前调用它。SampleHandler中实现RTCScreenDelegate代理:
SampleHandler中实现开启屏幕录制功能:
SampleHandler中实现发送共享屏幕帧数据:
RTCScreenRecordStatusStart 回调后,在需要推送共享流的频道实例上发布屏幕共享。最后一个发布的频道取消发布时,才会断开扩展端连接并结束本次系统录屏:
RPSystemBroadcastPickerView 拉起系统录屏 → 扩展端接入,收到 RTCScreenRecordStatusStart → 频道实例 publishScreenRecord:YES 开始推流。结束时调用 publishScreenRecord:NO(仅当前频道停止推流)或 -[RTCEngineKit stopScreenRecord](结束本次系统录屏,采集服务保持监听,用户可再次拉起)。