集成屏幕共享-Windows

简介

屏幕共享是通信成员共享终端的屏幕内容(包括单个程序显示的内容和整个桌面),其他成员可以以视频的方式观看共享的屏幕内容。Windows终端支持发起和接收屏幕共享。在集成屏幕共享功能之前请确认已经完成初始化SDK登录和集成通信的相关操作。

屏幕共享的发起

屏幕共享发起分两种情况:

  1. 单人共享。
  2. 共享替换。

单人共享

通信会场中还没有成员发起屏幕共享,此时某个成员(以下称为发起方)发起屏幕共享,其他成员(以下称为接收方)收到屏幕共享的事件。

发起方的实现:
  1. 获取所有可以共享的窗口列表
    1. 默认第一个窗口是整个Windows桌面,后面的是其他在前台运行的程序窗口。
    2. 每个窗口包含两个string字符串, string[0]是窗口的ID,string[1]是窗口的标题。
  2. 设置屏幕共享的窗口

发起方代码实现如下(engine()是JCEngine的实例,具体请参考导入SDK

public void startDesktopScreenShare()
{   //获取所有可共享窗口
    List<string[]> windowCaptureList = engine().getWindowCaptureList();
    //获取桌面共享窗口
    string[] desktopWindow = windowCaptureList[0];
    //获取桌面共享窗口ID
    string desktopId = destopWindow[0];
    //设置屏幕共享窗口
    engine().setCurrentWindowCaptureId(destopId);
}
接收方的实现:
  1. 某成员屏幕共享发起后,接收方UI会收到 onScreenShareStateChanged(true)的回调
  2. 请求屏幕共享视频。

  3. 渲染屏幕共享视频。

接收方实现代码如下:

public override void onScreenShareStateChanged(bool active)
{
    if(active)
    {
        //创建视频源
        ZmfImageSource mZmfView = new ZmfImageSource(0, 0);
        //获取通信房间信息
        JCRoomInfo roomInfo = engine().getRoomInfo();
        //获取共享屏幕成员ID
        string screenUserId = roomInfo.ScreenUser;
        //请求共享屏幕视频
        engine().requestScreenVideo(PICTURE_SIZE_LARGE);
        //渲染共享屏幕视频
        engine().startScreenRender(mZmfView,JCEngine.RENDER_MODE_FULLCONTENT);
    }
}

共享替换

如果在发起屏幕共享时,有其他成员也发起了屏幕共享。其他成员会先收到之前成员的屏幕共享停止事件,然后再收到新成员发起屏幕共享的事件。

发起方实现:

请参考单人共享发起方实现。

接收方实现:
  1. 接收方UI会先收到onScreenShareStateChanged(false)的回调,然后再收到onScreenShareStateChanged(true)。
  2. 请求屏幕共享视频。
  3. 渲染屏幕共享视频。

接收方实现代码如下:

public override void onScreenShareStateChanged(bool active)
{
    if(active)
    {
        //创建视频源
        ZmfImageSource mZmfView = new ZmfImageSource(0, 0);
        //获取通信房间信息
        JCRoomInfo roomInfo = engine().getRoomInfo();
        //获取共享屏幕成员ID
        string screenUserId = roomInfo.ScreenUser;
        //请求共享屏幕视频
        engine().requestScreenVideo(PICTURE_SIZE_LARGE);
        //渲染共享屏幕视频
        engine().startScreenRender(mZmfView,JCEngine.RENDER_MODE_FULLCONTENT);
    }
    else
    {
        if(mZmfView != null)
        {
            //停止请求共享屏幕视频
           engine().requestScreenVideo(PICTURE_SIZE_OFF);
            //停止渲染共享屏幕视频
           engine().stopRender(mZmfView);
        }
    }
}

屏幕共享的取消

发起方实现:
  1. 把屏幕共享窗口设置成空。

发起方实现代码如下:

public void stopSharingScreen()
{
    engine().setCurrentWindowCaptureId(null);
}
接收方实现:
  1. 屏幕共享取消后,接收方会收到onScreenShareStateChanged(false)的回调

  2. 停止请求屏幕共享视频。

  3. 停止渲染屏幕共享视频。

接收方具体代码如下:

public override void onScreenShareStateChanged(bool active)
{
    ...
    else if(!active)
    {
        if(mZmfView != null)
        {
            //停止请求共享屏幕视频
           engine().requestScreenVideo(PICTURE_SIZE_OFF);
            //停止渲染共享屏幕视频
           engine().stopRender(mZmfView);
        }
    }
    ...
}

results matching ""

    No results matching ""