# 高级媒体流管理

用于管理视频会议的媒体流相关功能。

# 屏幕共享

屏幕共享可以让您和频道中的其他成员一起分享设备里的精彩内容,您可以在频道中利用屏幕共享的功能进行文档演示、在线教育演示、视频会议以及游戏过程分享等。

通过ReplayKit 2的系统库,实现屏幕共享,该库仅支持iOS 11.0 以上的系统进行共享系统的屏幕,且支持屏幕外共享。

# 添加 Broadcast Upload Extension扩展

步骤一:项目中选择 target,添加 extension ,用于屏幕录制。

C3280DA1-5E3A-4C89-B9CB-BA50A7C96078.png

57469259-F376-4AC1-A778-A1CFE931A086.png

如上所示,在添加 extension 时选中 Broadcast Upload Extension 扩展进行添加。

步骤二:App 和 extension 加入同一个 App group 后,实现 extension 和宿主 App 间的数据共享,加入步骤如下图所示:

image-20210119143230080

image-20210119143056620

步骤三:打开工程目录下对应的SampleHandler.hSampleHandler.m文件。

导入库 #import <ReplayKit/ReplayKit.h>,继承系统的 RPBroadcastSampleHandler 类,重写 broadcastStartedWithSetupInfo、processSampleBuffer、broadcastFinished 方法,并且调用插件提供的方法,如下图:

F8C94345-56BC-4951-A443-EC9974B24CAA.png

A862F0BB-5D61-48B6-9E3D-28B537B45721.png

image-20210119143134337

步骤四:在在开启会议调用 startConferenceHomeView 接口时,需要传递共享插件的 bundle identify 和 Group id。

示例代码:

JMConfig *config = [[JMConfig alloc] init];
...
config.shareGroupId = @"group.com.juphoon.JMShare";
config.shareExtension = @"com.juphoon.meeting.sample.JMShare";
...

完成以上配置后,即可使用插件屏幕共享功能。

# 屏幕共享相关方法介绍

/**
 * @brief broadcastStartedWithSetupInfo时调用,开启屏幕共享
 * @param appGroupId app和extension共同的groupId
 * @param sampleHandler 系统回掉的RPBroadcastSampleHandler对象,包含插件信息
*/
- (void)broadcastStartedWithAppGroupId:(NSString *)appGroupId initWithSampleHandler:(RPBroadcastSampleHandler *)sampleHandler API_AVAILABLE(ios(10.0));

/**
 * @brief processSampleBuffer时调用
 * @param sampleBuffer processSampleBuffer采集上来的sampleBuffer
 * @param sampleBufferType processSampleBuffer采集上来的sampleBufferType
*/

- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType API_AVAILABLE(ios(10.0));

/**
 * @brief broadcastFinished时调用
*/
- (void)broadcastFinished;