# 实现屏幕共享
# 简介
屏幕共享可以让您和频道中的其他成员一起分享设备里的精彩内容,您可以在频道中利用屏幕共享的功能进行文档演示、在线教育演示、视频会议以及游戏过程分享等。
# 适用场景
应用行业 | 场景说明 |
---|---|
在线教育 | 教学PPT等文档展示 |
视频会议 | 会议中文件共享 |
社交娱乐 | 游戏画面及过程分享 |
# 前提条件
Android设备
集成服务器音视频录制功能前,请确保您已经集成了基础的多方音视频通话功能。
发起屏幕共享需要 Android 5.0 及以上。
IOS设备
集成服务器音视频录制功能前,请确保您已经集成了基础的多方音视频通话功能。
发起屏幕共享需要 iOS 11.0 及以上。目前 iOS 只支持应用内的屏幕共享。
WARNING
如果用户在 Android 10 或以上版本上共享屏幕,为避免 Android 系统触发 SecurityException( Android 原生回调),需要在 AndroidManifest.xml 文件中添加下面的声明否则高版本的 Android 终端将无法使用屏幕共享功能。
另外SDK 不支持模拟器运行,请使用真机。
# 集成步骤
# 开启/关闭屏幕共享
您可以调用 enableScreenShare (opens new window) 方法开启屏幕共,并设置享采集属性,包括采集的高度、宽度和帧速率。
enable:boolean类型 开启/关闭屏幕分享
screenShareParam
bitrat:int类型 屏幕分享码率,单位为 kbps,默认值 0 表示使用媒体引擎的默认值
frameRate:int类型 屏幕分享帧率 默认值 0 表示使用媒体引擎的默认值
resolution int类型 屏幕分享分辨率
this.JRTCEngine.enableScreenShare(enable,screenShareParam);
# 请求屏幕共享的视频流
如果频道中有成员开启了屏幕共享,其他成员将收到 CHANNEL_UPDATE (opens new window) 的回调,您可以通过 上报上来的 screenUserId
属性获得发起屏幕共享的用户标识。
如果screenUserId不为空的话,将JCScreenShareVideoCanvas
组件渲染出来就行。
/**
* 请求屏幕共享的视频流
* 当 pictureSize 为 JCMediaChannelPictureSizeNone 表示关闭请求
*
* @param screenUri 屏幕分享uri
* @param pictureSize 视频请求尺寸类型
* @return 返回 true 表示正常执行调用流程,false 表示调用异常
* @see JCMediaChannel.PictureSize
*/
public abstract boolean requestScreenVideo(String screenUri, @PictureSize int pictureSize);
# 示例代码
// 开启或关闭屏幕共享
public void customEnableScreenShare(){
String selfUserId = mClient.getUserId();
String screenUserId = mMediaChannel.getScreenUserId();
if (TextUtils.equals(selfUserId, screenUserId)){
mMediaChannel.enableScreenShare(false);
}else{
mMediaChannel.enableScreenShare(true);
}
}
// 请求屏幕共享的视频流
@Override
public void onMediaChannelPropertyChange(JCMediaChannel.PropChangeParam propChangeParam) {
if (propChangeParam.screenShare && mMediaChannel.getScreenUserId() != null) {
// 请求视频流
mMediaChannel.startScreenShareVideo(RENDER_FULL_SCREEN, PICTURESIZE_SMALL);
mMediaChannel.requestScreenVideo(mMediaChannel.getScreenRenderId(),JCMediaChannel.PICTURESIZE_LARGE);
}
}