屏幕共享
功能描述
基于苹果的Replaykit方案,支持用户分享整个系统的屏幕内容,但需要App额外提供一个Extension扩展组件,可实现跨应用屏幕共享。
创建App Group
由于华为云SparkRTC是通过App Goup进行进程间的数据通信的,所以需要创建一个App Group。
使用您的APP ID账号登录https://developer.apple.com/ ,进行证书配置App Group。
注意:完成后需要重新下载对应的Provisioning Profile。
- 单击“Certificates, Identifiers & Profiles”,进入“Certificates,Identifiers &Profiles”界面。
- 在右侧界面中选择“Identifiers”,然后单击。
- 选择“App Groups > Continue”。
- 在弹出的表单中填写“Description”和“Identifier”, 其中,Identifier需要传入接口中对应的App Group参数。
- 填写完成后,单击“Continue”。
- 返回“Identifiers”页面,在右上角的菜单中选择“App IDs”,然后单击您的App ID(主App与Extension的AppID需要进行同样的配置)。
- 选中“App Groups”并单击“Edit”。
- 在弹出的表单中选择您之前创建的App Group,单击“Continue”返回编辑页,再单击“Save”保存。
- 重新下载Provisioning Profile并配置到XCode中。
创建Broadcast Upload Extension
- 在Xcode菜单中选择“File > New > Target... > Broadcast Upload Extension”。
- 在弹出的对话框中填写相关信息,不用勾选“Include UI Extension”,然后单击“Finish”完成创建。
- 将下载的SDK包中的HWRtcEngineReplayKit.framework拖动到工程中,勾选刚刚新创建的Target。
- 选中新增加的Target,单击“+ Capability”,双击“App Groups”,并选择您创建的AppGroup。
如下图所示,操作完成后,会在文件列表中生成一个名为Target名.entitlements的文件。
- 选中主App的Target,并按照上述步骤对主App的Target做同样的处理。
- 在新创建的Target中,Xcode会自动创建一个名为“SampleHandler.h” 的文件,请您用如下代码进行替换。
注意:需将代码中的APPGROUP改为上文中的创建的App Group Identifier。
#import "SampleHandler.h" #import <ReplayKit/ReplayKit.h> #import <HWRtcEngineReplayKit/HWRtcReplay.h> #define HWReplayAppGroupId @"group.com.huawei.HwRTCLiveDemo" @interface SampleHandler() < HWRtcReplayDelegate > @property (nonatomic, assign)BOOL connectRet; @end @implementation SampleHandler - (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *, NSObject *> *)setupInfo { // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional. [[HWRtcReplay sharedInstance] setupWithAppGroup:HWReplayAppGroupId delegate : self]; } -(void)broadcastPaused { // User has requested to pause the broadcast. Samples will stop being delivered. } -(void)broadcastResumed { // User has requested to resume the broadcast. Samples delivery will resume. } -(void)broadcastFinished { // User has requested to finish the broadcast. [[HWRtcReplay sharedInstance] broadcastFinished]; } -(void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType : (RPSampleBufferType)sampleBufferType { switch (sampleBufferType) { case RPSampleBufferTypeVideo: // Handle video sample buffer [[HWRtcReplay sharedInstance] sendVideoSampleBuffer:sampleBuffer]; break; case RPSampleBufferTypeAudioApp: // Handle audio sample buffer for app audio break; case RPSampleBufferTypeAudioMic: // Handle audio sample buffer for mic audio break; default: break; } } -(void)replayBroadcastFinished { NSError *error; [self finishBroadcastWithError : error]; }