# 屏幕共享
通过 Juphoon RTC SDK 可以在视频通话过程中实现屏幕共享,坐席可以将自己的屏幕内容,以视频的方式分享给远端参会者,从而提升沟通效率,一般适用于一对一或多人视频通话、在线通话等在线金融场景。
- 视频房间场景中,参会者可以在通话中将本地的文件、数据、网页、PPT 等画面分享给其他与会者,让其他与会者更加直观的了解讨论的内容和主题。
- 在线金融场景中,坐席可以通过屏幕共享或者窗口共享将风险揭示等画面展示给远端的访客观看,移动端访客也可将屏幕共享给坐席观看,提升沟通效率。
# 开启/关闭屏幕共享
/**
* 开启/关闭屏幕共享
*
* @param enable 开启或关闭屏幕共享
* - true: 开启屏幕共享
* - false: 关闭屏幕共享
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
* @note 如果 {@link #setUseExternalScreenCaptureControl(boolean) setUseExternalScreenCaptureControl} 为 true,
* 则该接口只负责信令通知,请确保开启屏幕共享前,已经开启了屏幕采集,否则远端用户收到屏幕共享画面为黑屏
*/
public abstract enableScreenShare( enable:boolean, sendScreenParam?:JRTCSendScreenParam ):boolean;
开启/关闭屏幕共享通过实现 JRTCCallCallback (opens new window) 中的 onCallPropertyChanged (opens new window) 接口上报。
可通过 getShareUserId (opens new window) 获取当前正在屏幕共享的成员用户ID;
可通过 getShareStreamId (opens new window) 获取当前屏幕共享的视频流ID。
/**
* 获取屏幕共享时的视频流ID,无屏幕共享时为 undefined
* <p>
* 调用 {@link JRTCMediaDevice#startVideo startVideo} 接口渲染通话中其他成员的屏幕共享画面时使用。
*
* @return 屏幕共享时的视频流ID
*/
public abstract getShareStreamId(): string;
/**
* 获取发起屏幕共享者的用户ID,无屏幕共享时为 undefined
* <p>
* 可用来判断当前通话中是否有成员发起屏幕共享。
*
* @return 发起屏幕共享者的用户ID
*/
public abstract getShareUserId(): string;
示例代码:
call.enableScreenShare(true);
# 共享视频采集
您可以调用 JRTCMediaDevice (opens new window) 类中的 setScreenCaptureProperty (opens new window) 方法设置屏幕共享采集属性,包括采集的高度、宽度和帧速率。该方法可以在开启屏幕共享前调用,也可以在屏幕共享中调用;如果在屏幕共享中调用,则设置的采集属性要在下次屏幕共享开启时生效。
/**
* 设置屏幕共享采集属性
*
* 在调用 {@link enableScreenCapture} 接口开启屏幕共享前设置即可生效
* @param { number } width 采集宽度,默认1280
* @param { number } height 采集高度,默认720
* @param { number } frameRate 采集帧速率,默认10
*/
public abstract setScreenCaptureProperty(width: number, height: number, frameRate: number): void;
/**
* 开启/关闭屏幕采集
*
* @param { boolean } enable 是否开启
* @return { boolean } 开启/关闭 是否成功
*/
public abstract enableScreenCapture(enable: boolean): boolean;
示例代码:
//开启/关闭采集
mediaDevice.enableScreenCapture(true);
# 暂停/恢复屏幕共享
/**
* 暂停/继续屏幕共享
*
* @param suspend true 暂停屏幕共享, false 继续屏幕共享
* @param tip 暂停屏幕共享后提示文字
* @return 接口调用结果
* - true: 接口调用成功, 会收到 {@link JRTCRoomCallback#onRoomPropertyChanged onRoomPropertyChanged} 回调,可通过{@link #isSuspendScreenShare isSuspendScreenShare} 判断当前屏幕共享是否暂停
* - false: 接口调用异常
* @note 只有自己发起的屏幕共享可以使用该接口暂停,多次调用会覆盖
*/
public abstract suspendScreenShare(suspend: boolean, tip: string): boolean;
查询屏幕共享是否暂停
/**
* 是否屏幕共享暂停
*
* @return - true: 暂停屏幕共享
* - false: 未暂停屏幕共享
*/
public abstract isSuspendScreenShare(): boolean;
暂停/恢复屏幕共享变化事件通过实现 JRTCCallCallback (opens new window) 中的 onCallPropertyChanged (opens new window) 接口上报。
示例代码:
// 暂停屏幕共享
call.suspendScreenShare(true,"屏幕共享暂停中");
onCallPropertyChanged: (changeParam: JRTCRoomPropChangeParam | undefined) => {
if (changeParam!.screenShare) {
// 屏幕共享状态发生改变
if(call.isSuspendScreenShare()) {
// 屏幕共享暂停中
}
}
}
# 订阅/取消订阅屏幕共享的视频流
如果通话中有成员开启了屏幕共享,其他成员将收到 onCallPropertyChanged (opens new window) 的回调,并通过 getShareUserId (opens new window) 获得发起屏幕共享的成员用户 ID。
/**
* 通话属性改变,重点关注屏幕共享
*
* @param propChangeParam 通话改变的属性
*/
onCallPropertyChanged?: (propChangeParam: JRTCRoomPropChangeParam) => void;
此时可以调用 requestScreenVideo (opens new window) 方法请求订阅屏幕共享的视频流。
/**
* 订阅屏幕共享的视频流
*
* @param videoSize 视频请求的尺寸
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract requestScreenVideo(videoSize: JRTCVideoSize): boolean;
取消订阅屏幕共享的视频流,如果不需要屏幕共享视频流,此时可以调用 unRequestScreenVideo (opens new window) 方法取消订阅屏幕共享的视频流,建议不使用时取消订阅屏幕共享的视频流,否则可能造成资源浪费。
/**
* 取消订阅屏幕共享的视频流
*
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract unRequestScreenVideo(): boolean;
# 渲染共享画面
获取屏幕共享相关参数 getShareUserId (opens new window) 和 getShareStreamId (opens new window)
/**
* 获取屏幕共享时的视频流ID,无屏幕共享时为 undefined
* <p>
* 调用 {@link JRTCMediaDevice#startVideo startVideo} 接口渲染通话中其他成员的屏幕共享画面时使用。
*
* @return 屏幕共享时的视频流ID
*/
public abstract getShareStreamId(): string;
/**
* 获取发起屏幕共享者的用户ID,无屏幕共享时为 undefined
* <p>
* 可用来判断当前通话中是否有成员发起屏幕共享。
*
* @return 发起屏幕共享者的用户ID
*/
public abstract getShareUserId(): string;
屏幕共享开始/结束均通过实现 onCallPropertyChanged (opens new window) 接口上报。
示例代码:
onCallPropertyChanged: (changeParam: JRTCRoomPropChangeParam | undefined) => {
if (changeParam?.screenShare) {
if (room.getShareUserId() !== undefined && room.getShareStreamId().length > 0) {
// 屏幕共享打开,可通过guest.getShareStreamId 渲染共享视频画面
}else {
// 屏幕共享关闭,可停止渲染共享视频画面
}
}
}
