菊风已发布实时音视频2.0升级版(2.0版本说明),当前您正在访问1.0旧版本,点击此处可进入2.0升级版

# 实现屏幕共享

# 简介

屏幕共享可以让您和频道中的其他成员一起分享设备里的精彩内容,您可以在频道中利用屏幕共享的功能进行文档演示、在线教育演示、视频会议以及游戏过程分享等。

# 适用场景

应用行业 场景说明
在线教育 教学 PPT 等文档展示
视频会议 会议中文件共享
社交娱乐 游戏画面及过程分享

# 前提条件

  • 集成服务器音视频录制功能前,请确保您已经集成了基础的多方音视频通话功能。

  • HarmonyOS Next SDK 支持屏幕共享。

WARNING

SDK 不支持模拟器运行,请使用真机。

# 集成步骤

# 设置屏幕共享采集属性

您可以调用 JCMediaDevice (opens new window) 类中的 setScreenCaptureProperty (opens new window) 方法设置屏幕共享采集属性,包括采集的高度、宽度和帧速率。

/**
 * 设置屏幕共享采集属性
 * @param width     采集宽度,默认640
 * @param height    采集高度,默认360
 * @param frameRate 采集帧速率,默认10
 */
setScreenCaptureProperty(width: number, height: number, frameRate: number): void;

TIP

该方法可以在开启屏幕共享前调用,也可以在屏幕共享中调用;如果在屏幕共享中调用,则设置的采集属性要在下次屏幕共享开启时生效。

# 开启/关闭屏幕共享

开启或关闭屏幕共享需要根据当前的屏幕共享状态进行判断,具体通过 getScreenUserId (opens new window) 进行判断。当 screenUserId 不为空时说明当前存在屏幕共享,不能再发起屏幕共享,只有当 screenUserId 为空时才可以发起屏幕共享。

屏幕共享状态是否变化通过 getScreenRenderId (opens new window) 判断。如果屏幕共享状态发生了改变会触发 onMediaChannelPropertyChange (opens new window) 回调

/**
 * 属性变化回调,目前主要关注屏幕共享状态的更新
 *
 * @param propChangeParam 变化标识集合
 */
onMediaChannelPropertyChange(propChangeParam: JCMediaChannel.PropChangeParam): void;

如果当前不存在屏幕共享或者自己发起了屏幕共享,可以调用 enableScreenShare (opens new window) 方法开启或关闭屏幕共享

/**
 * 开关屏幕分享
 * @param enable 是否开启屏幕分享
 *
 * @return 返回 true 表示正常执行调用流程,false 表示调用异常
 */
enableScreenShare(enable: boolean): boolean;

# 请求屏幕共享的视频流

如果频道中有成员开启了屏幕共享,其他成员将收到 onMediaChannelPropertyChange (opens new window) 的回调,您可以通过 getScreenUserId (opens new window) 属性获得发起屏幕共享的用户标识。

获得发起屏幕共享的用户标识后,可以调用 requestScreenVideo (opens new window) 方法请求屏幕共享的视频流

/**
 * 请求屏幕共享的视频流
 * 当 pictureSize 为 JCMediaChannelPictureSizeNone 表示关闭请求
 *
 * @param screenUri     屏幕分享uri
 * @param pictureSize   视频请求尺寸类型
 * @return              返回 true 表示正常执行调用流程,false 表示调用异常
 * @see JCMediaChannel.PictureSize
 */
requestScreenVideo(screenUri: string, pictureSize: JCMediaChannel.PictureSize): boolean;

# 示例代码

// 开启或关闭屏幕共享
customEnableScreenShare(): void {
  const selfUserId: string = this.client.getUserId();
  const screenUserId: string = this.mediaChannel.getScreenUserId();
  if (selfUserId === screenUserId) {
    this.mediaChannel.enableScreenShare(false);
  } else {
    this.mediaChannel.enableScreenShare(true);
  }
}

// 请求屏幕共享的视频流
onMediaChannelPropertyChange(propChangeParam: JCMediaChannel.PropChangeParam): void {
  if (propChangeParam.screenShare && this.mediaChannel.getScreenUserId() != null) {
    // 请求视频流
    this.mediaChannel.startScreenShareVideo(JCMediaDevice.RENDER_FULL_SCREEN, JCMediaChannel.PICTURESIZE_SMALL);
    this.mediaChannel.requestScreenVideo(this.mediaChannel.getScreenRenderId(), JCMediaChannel.PICTURESIZE_LARGE);
  }
}
最后更新时间: 2025-5-13 6:06:58 ├F10: PM┤