集成屏幕共享-Windows
简介
屏幕共享是会议成员共享终端的屏幕内容(包括单个程序显示的内容和整个桌面),其他成员可以以视频的方式观看共享的屏幕内容。Windows终端支持发起和接收屏幕共享。在集成屏幕共享功能之前请确认已经完成初始化SDK,登录和会议的相关操作。
屏幕共享的发起
屏幕共享发起分两种情况:
- 单人共享。
- 多人共享。
单人共享
会议中还没有成员发起屏幕共享,此时某个成员(以下称为发起方)发起屏幕共享,其他成员(以下称为接收方)收到屏幕共享的事件。
发起方的实现:
- 获取所有可以共享的窗口列表
- 默认第一个窗口是整个Windows桌面,后面的是其他在前台运行的程序窗口。
- 每个窗口包含两个string字符串, string[0]是窗口的ID,string[1]是窗口的标题。
- 设置屏幕共享的窗口
发起方代码实现如下
public void startDesktopScreenShare() { //获取所有可共享窗口 List<string[]> windowCaptureList = JCConference.getInstance().getWindowCaptureList(); //获取桌面共享窗口 string[] desktopWindow = windowCaptureList[0]; //获取桌面共享窗口ID string desktopId = destopWindow[0]; //设置屏幕共享窗口 JCConference.getInstance().setCurrentWindowCaptureId(destopId); }
接收方的实现:
- 某成员屏幕共享发起后,接收方UI会收到EVENT_CONF_SCREEN_SHARE事件回调回调,回调事件的结果是REASON_SCREEN_SHARE_START。
请求屏幕共享视频。
渲染屏幕共享视频。
接收方实现代码如下:
public void JCEventPosted(int eventName, int eventCode)
{
switch (eventName)
{
...
case EVENT_CONF_SCREEN_SHARE:
//成员屏幕共享开始
if(eventCode == REASON_SCREEN_SHARE_START)
{
//获取会议信息
JCConferenceInfo confInfo = JCConference.getInstance().getConferenceInfo();
//获取共享屏幕成员ID
string screenUserId = confInfo.ScreenUser;
//请求共享屏幕视频
JCConference.getInstance().requestScreenVideo(PICTURE_SIZE_LARGE);
//渲染共享屏幕视频
JCConference.getInstance().startScreenRender(mZmfView,JCConference.RENDER_MODE_FULLCONTENT);
}
break;
}
}
多人共享
如果在发起屏幕共享时,有其他成员也发起了屏幕共享。其他成员收到屏幕共享发起成员变化的事件。
发起方实现:
请参考单人共享发起方实现。
接收方实现:
- 接收方UI会收到EVENT_CONF_SCREEN_SHARE事件回调回调,回调事件的结果是REASON_SCREEN_SHARE_CHANGE。
- 请求屏幕共享视频。
- 渲染屏幕共享视频。
接收方实现代码如下:
public void JCEventPosted(int eventName, int eventCode)
{
switch (eventName)
{
...
case EVENT_CONF_SCREEN_SHARE:
...
//屏幕共享成员变化
else if(eventCode == REASON_SCREEN_SHARE_CHANGE)
{
//获取会议信息
JCConferenceInfo confInfo = JCConference.getInstance().getConferenceInfo();
//获取新的共享屏幕成员ID
string screenUserId = confInfo.ScreenUser;
//请求共享屏幕视频
JCConference.getInstance().requestScreenVideo(PICTURE_SIZE_LARGE);
//渲染共享屏幕视频
JCConference.getInstance().startScreenRender(mZmfView,JCConference.RENDER_MODE_FULLCONTENT);
}
break;
}
}
屏幕共享的取消
发起方实现:
- 把屏幕共享窗口设置成空。
发起方实现代码如下:
public void stopSharingScreen()
{
JCConference.getInstance().setCurrentWindowCaptureId(null);
}
接收方实现:
屏幕共享取消后,接收方UI会收到EVENT_CONF_SCREEN_SHARE事件回调回调,回调事件的结果是 REASON_SCREEN_SHARE_STOP。
停止请求屏幕共享视频。
停止渲染屏幕共享视频。
接收方具体代码如下:
public void JCEventPosted(int eventName, int eventCode)
{
switch (eventName)
{
...
case EVENT_CONF_SCREEN_SHARE:
...
else if(eventCode == REASON_SCREEN_SHARE_STOP)
{
//停止请求共享屏幕视频
JCConference.getInstance().requestScreenVideo(PICTURE_SIZE_OFF);
//停止渲染共享屏幕视频
JCConference.getInstance().stopRender(mZmfView);
}
break;
}
}