BRTC 在 iOS 平台下支持两种不同的屏幕分享方案:
应用内分享的方案非常简单,只需要调用 BRTC SDK 提供的接口 startScreenCaptureInApp 并传入编码参数BRTCVideoEncParam 即可。该参数可以设置为 nil,此时 SDK 会沿用开始屏幕分享之前的编码参数。
BRTCVideoEncParam
推荐的用于 iOS 屏幕分享的编码参数是:
iOS 系统上的跨应用屏幕分享,需要增加 Extension 录屏进程以配合主 App 进程进行推流。Extension 录屏进程由系统在需要录屏的时候创建,并负责接收系统采集到屏幕图像。因此需要:
BRTCReplaykitExt.framework
使用您的帐号登录 https://developer.apple.com/ ,进行以下操作,注意完成后需要重新下载对应的 Provisioning Profile
Provisioning Profile
Target名.entitlements
#import "SampleHandler.h" #import "BRTCReplaykitExt" #define APPGROUP @"xxx" @interface SampleHandler() <BRTCReplayKitExtDelegate> @end @implementation SampleHandler // 注意:此处的 APPGROUP 需要改成上文中的创建的 App Group Identifier。 - (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *> *)setupInfo { [[BRTCReplaykitExt sharedInstance] setupWithAppGroup:APPGROUP 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 { [[BRTCReplaykitExt sharedInstance] finishBroadcast]; // User has requested to finish the broadcast. } - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType { switch (sampleBufferType) { case RPSampleBufferTypeVideo: [[BRTCReplayKitExt 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; } } #pragma mark - ScreenCapture delegate - (void)onScreenSharedEnd:(BRTCReplaykitExt *)replaykitEx reason:(BRTCReplaykitExtReason)reason { NSLog(@"tb - test - SampleHandler onScreenSharedEnd:%lu", (unsigned long)reason); dispatch_async(dispatch_get_main_queue(), ^{ [self finishBroadcastWithError:[NSError errorWithDomain:NSCocoaErrorDomain code:0 userInfo:@{NSLocalizedFailureReasonErrorKey:@"您停止了屏幕共享"}]]; }); } @end
按照如下步骤,对接主 App 端的接收逻辑。也就是在用户触发屏幕分享之前,要让主 App 处于“等待”状态,以便随时接收来自 Broadcast Upload Extension 进程的录屏数据
// 开始屏幕分享,需要将 APPGROUP 替换为上述步骤中创建的 App Group Identifier。 - (void)startScreenCapture { BRTCVideoEncParam *videoEncConfig = [[BRTCVideoEncParam alloc] init]; videoEncConfig.videoResolution = BRTCVideoResolution_1280_720; videoEncConfig.videoFps = 10; videoEncConfig.videoBitrate = 2000; //需要将 APPGROUP 替换为上述步骤中创建的 App Group Identifier: [[BRTC sharedInstance] startScreenCaptureByReplaykit:videoEncConfig appGroup:APPGROUP]; } // 停止屏幕分享 - (void)stopScreenCapture { [[BRTC sharedInstance] stopScreenCapture]; } // 屏幕分享的启动事件通知,可以通过 TRTCCloudDelegate 进行接收 - (void)onScreenCaptureStarted { NSLog(@"屏幕分享开始"); }
// 引入 `BRTCSCreenCaptureLaunch` #import "BRTC/BRTCSCreenCaptureLaunch.h" // 使用 BRTC 提供的自定义按钮响应方法,launchWithBundleID 为 扩展进程 ID ,建议在开启屏幕分享时使用 [[BRTCSCreenCaptureLaunch sharedInstance] launchWithBundleID:(nonnull NSString *)];
屏幕分享
BRTC 在 iOS 平台下支持两种不同的屏幕分享方案:
应用内分享
应用内分享的方案非常简单,只需要调用 BRTC SDK 提供的接口 startScreenCaptureInApp 并传入编码参数
BRTCVideoEncParam
即可。该参数可以设置为 nil,此时 SDK 会沿用开始屏幕分享之前的编码参数。推荐的用于 iOS 屏幕分享的编码参数是:
跨应用分享
iOS 系统上的跨应用屏幕分享,需要增加 Extension 录屏进程以配合主 App 进程进行推流。Extension 录屏进程由系统在需要录屏的时候创建,并负责接收系统采集到屏幕图像。因此需要:
BRTCReplaykitExt.framework
步骤1:创建 App Group
使用您的帐号登录 https://developer.apple.com/ ,进行以下操作,注意完成后需要重新下载对应的
Provisioning Profile
步骤2:创建 Broadcast Upload Extension
Target名.entitlements
的文件,如下图所示,选中该文件并单击 + 号填写上述步骤中的 App Group 即可步骤3:对接主 App 端的接收逻辑
按照如下步骤,对接主 App 端的接收逻辑。也就是在用户触发屏幕分享之前,要让主 App 处于“等待”状态,以便随时接收来自 Broadcast Upload Extension 进程的录屏数据
步骤3:增加屏幕分享的触发按钮(可选)
观看屏幕分享