更新时间:2023-10-26 GMT+08:00
分享

屏幕分享

功能描述

屏幕共享用于在音视频会议中,把一个与会者的屏幕内容,以视频的方式分享给其他与会者。屏幕共享可以共享整个桌面,也可以共享某一个程序窗口。共享程序窗口的时候还可以指定共享该程序窗口的矩形区域。

接口调用流程

实现屏幕共享

  1. 加入房间

    参考接口调用流程中加入房间的时序图步骤加入房间。

  2. 共享桌面

    加入房间后可以调用getScreenShareSources获取屏幕共享对象列表,然后遍历找到其中HRTCScreenShareSourceInfo.type为HWRtcScreenShareTypeDesktop的对象,该对象就是屏幕对象,再调用setScreenShareTarget设置共享桌面参数。桌面共享不支持区域共享。

    然后调用startScreenShare开始共享。

    示例代码如下:

    //获取引擎
    rtcEngine = [HWRtcEngine sharedEngine];
    // 定义屏幕共享区域参数
    HWRtcScreenShareParam *param = [[HWRtcScreenShareParam alloc] init];   
     param.type = HWRtcScreenShareTypeDesktop;   
     param.bCaptureMouse = NO;    
     param.viewID = 0;  
     param.rect = rect;
    // 获取屏幕共享列表,包含桌面共享对象
    NSArray* sourceList = [self.rtcEngine getScreenShareSources];
    for (int i= 0; i< sourceList.count; i++) {
        HRTCScreenShareSourceInfo sourceInfo = sourceList[i];
        if (sourceInfo.type == HWRtcScreenShareTypeDesktop) { //如果是桌面共享对象
            // 调用设置屏幕共享接口
            [rtcEngine setScreenShareTarget:param];
            // 开启屏幕共享
            [rtcEngine startScreenShare];
            break;
        }
    }
  3. 共享程序

    加入房间后也可以调用getScreenShareSources来获取可以共享的程序窗口列表,然后展示在界面上供用户选择。

    选择好需要共享的程序窗口后,调用setScreenShareTarget来设置要共享的程序窗口,其中HRTCScreenShareSourceInfo.type设为HRTC_WINDOW_CAPTURE,HRTCSrceenCaptureOptionalInfo参数用于指定共享的程序窗口的子矩形区域,矩形区域以共享的程序窗口的左上角为原点(0,0),最小96*92 最大1920*1080。如果需要共享该程序的完整窗口,则HRTCSrceenCaptureOptionalInfo参数的矩形区域全填为0。

    然后调用startScreenShare开始共享。

    示例代码如下:

    //获取共享程序窗口列表
    rtcEngine = [HWRtcEngine sharedEngine];
    NSArray* sourceList = [self.rtcEngine getScreenShareSources];
    for (int i= 0; i< sourceList.count; i++) {
        HRTCScreenShareSourceInfo sourceInfo = sourceList[i];
       //将sourceInfo加入列表展示到界面上供用户选择
    }
    
    //用户选择共享的程序后
    HWRtcScreenShareParam *param = [[HWRtcScreenShareParam alloc] init];   
     param.type = HWRtcScreenShareTypeDesktop;   
     param.bCaptureMouse = NO;    
     param.viewID = viewID;  
     param.rect = rect;
    // 调用设置屏幕共享接口
    [rtcEngine setScreenShareTarget:param];
    // 开启屏幕共享
    [rtcEngine startScreenShare];
  4. 接收远端用户的共享流

    收到远端用户开启共享流通知onUserAuxiliaryStreamAvailable后,可以调用startRemoteAuxiliaryStreamView来设置远端用户的共享流的窗口句柄并开始选看。

    还可以再调用updateRemoteAuxiliaryStreamRenderMode设置窗口显示共享流的方式。

    示例代码如下:

    [rtcEngine startRemoteAuxiliaryStreamView:canvas streamType:HWRtcStreamTypeLD];
  5. 停止屏幕共享

    屏幕共享结束时,可以调用stopScreenShare停止屏幕共享。

    示例代码如下:

    [rtcEngine stopScreenShare];
  6. 停止接收远端用户的屏幕共享流

    收到onUserAuxiliaryStreamAvailable消息后,如果选看的远端屏幕共享流不可用,或者收到远端用户下线通知onRemoteUserOffline,则接收端必须调用stopRemoteAuxiliaryStreamView关闭共享流窗口视图。

    如果接收端需要主动停止接收远端用户的共享流,也需要调用stopRemoteAuxiliaryStreamView接口停止接收共享流。

    示例代码如下:

     [rtcEngine stopRemoteAuxiliaryStreamView:userId];

相关文档