
# 屏幕共享集成
![](https://support.huaweicloud.com/sdkreference-meeting/public_sys-resources/note_3.0-zh-cn.png)
屏幕共享：共享自己的手机屏幕的实时界面给其它用户，更加高效地与其它用户沟通。
#### 共享Bundle Id相关说明
ScreenShareExtension插件bundle Id格式:
主App bundle Id + ScreenShareExtension
ScreenShareExtensionSetupUI插件bundle Id格式:
主App bundle Id + ScreenShareExtensionSetupUI
```
例：
主App bundle Id：com.xx.xx
ScreenShareExtension插件bundIe Id：com.xx.xx.ScreenShareExtension
ScreenShareExtensionSetupUI插件bundIe Id：com.xx.xx.ScreenShareExtensionSetupUI
```
iOS端屏幕共享需要添加iOS Extension并实现相关代码，以下步骤用于说明如何集成SDK进行屏幕共享Extension的开发。
1. 创建新的Extension Target，选择"File-\>New-\>Target-\>Broadcast Upload Extension"，创建Extension Target。 
   图1添加选择Target
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714496268.png)
   图2选择Broadcast Upload Extension，点击"Next"创建
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714336318.png)
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002743935243.png)
   图3添加Broadcast Upload Extension后效果（ScreenShareExtension是创建时的名称）
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002744100763.png)
   
   
2. 设置Extension的支持系统版本号15.0。 
   图4Extension设置
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714496378.png)
   图5ExtensionUI设置
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714336422.png)
   
   
3. 给主工程和Extension添加App Groups，并设置为在[开发准备](https://support.huaweicloud.com/sdkreference-meeting/meeting_22_0725.html)中申请到的groupId。
   
   图6默认没有App Groups
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002744095319.png)
   图7添加App Groups，选择"TARGET-\>Signing\&Capabilities-\>Capability"
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002744096821.png)
   图8选中App Groups,
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714338064.png)
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002743937017.png)
   按照上面三个图片，同理分别为ScreenShareExtension和ScreenShareExtensionSetupUI添加App Groups
   图9App Groups添加完成效果
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002744097737.png)
   
   
4. 分别给entitlements文件中添加App Groups ID([申请地址](https://developer.apple.com/) 此groupId在初始化的时候也会用到)
   
   图10应用程序添加ID效果
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714338888.png)
   图11ScreenShareExtension添加ID效果
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002744097773.png)
   图12ScreenShareExtensionSetupUI添加ID效果
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714498902.png)
   
   
5. 给ScreenShareExtension 添加HWMExtension.framework，添加配置"TARGETS---\>ScreenShareExtension---\>Build Settings-\>Other Linker Flags" 中添加**-lc++** 。
   
   图13选择"ScreenShareExtension-\>Add Files to"
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002744097847.png)
   图14选择HWMExtension.framework添加到Extension
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002743937949.png)
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714499034.png)
   图15添加完成的效果
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714499356.png)
   
   
   
6. 配置屏幕共享代码，Extensions 的SampleHandler.m文件中添加代码如下。 
   图16SampleHandler文件位置
   ![](https://support.huaweicloud.com/sdkreference-meeting/figure/zh-cn_image_0000002714499568.png)
   文件内容修改groupId后可以直接使用。
   ```
   #import "SampleHandler.h"
   #import <HWMExtension/HWMExtension.h>
    
    @interface SampleHandler()<ScreenShareManagerDelegate>
    @property (strong, nonatomic) HWMExensionDataManager *screenShareManager;
    @end
    
    @implementation SampleHandler
    
    - (instancetype)init {
        if (self = [super init]) {
   //         [HWMExtensionAppGroup setAppGroup:@"group.com.huawei.xxx"];// 这里替换成自己申请的appgroup
           self.screenShareManager = [[HWMExensionDataManager alloc] init];
           self.screenShareManager.delegate = self;
        }
        return self;
    }
    
   - (void)dealloc {
       self.screenShareManager = nil;
   }
    
   - (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *> *)setupInfo {
       // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
       [self.screenShareManager broadcastStartedWithSetupInfo:setupInfo];
   }
    
   - (void)broadcastPaused {
       // User has requested to pause the broadcast. Samples will stop being delivered.
       [self.screenShareManager broadcastPaused];
   }
    
   - (void)broadcastResumed {
       // User has requested to resume the broadcast. Samples delivery will resume.
       [self.screenShareManager broadcastResumed];
   }
    
   - (void)broadcastFinished {
       // User has requested to finish the broadcast.
       [self.screenShareManager broadcastFinished];
   }
    
   - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
       switch (sampleBufferType) {
           case RPSampleBufferTypeVideo:
               // Handle video sample buffer
               [self.screenShareManager processSampleBuffer:sampleBuffer withType:RPSampleBufferTypeVideo];  
               break;
           case RPSampleBufferTypeAudioApp:
               // Handle audio sample buffer for app audio
               // 音频共享相关
               if ([self currentIsAudioShare]) {
                   [self.screenShareManager processSampleBuffer:sampleBuffer withType:RPSampleBufferTypeAudioApp];
               }
               break;
           case RPSampleBufferTypeAudioMic:
               // Handle audio sample buffer for mic audio
               break;
               
           default:
               break;
       }
   }
    
   - (void)screenShareManagerFinishBroadcastWithError:(NSError *)error {
       [self.screenShareManager broadcastFinished];
       [self finishBroadcastWithError: error];
   }
   - (BOOL)currentIsAudioShare {
       NSUserDefaults *userDefault = [[NSUserDefaults alloc] initWithSuiteName:[HWMExtensionAppGroup getAppGroup]];
       NSString *audioShareType = [userDefault objectForKey:kHWMExtensionAudioShareKey];
       if ([audioShareType isEqualToString:kHWMExtensionAudioShareValue]) {
           return YES;
       }
       return NO;
   }
    @end
   ```
   
   
