屏幕共享

更新时间: 2024/03/15 17:14:52

在大型会议或在线教育等场景中,为了满足提升沟通效率的需求,主讲人或老师需要将本端的屏幕内容分享给远端参会者或在线学生观看。NERTC 支持屏幕共享功能,帮助您实时分享本端设备的屏幕内容。

功能介绍

通过 NERTC SDK 可以在视频通话或互动直播过程中实现屏幕共享,主播或连麦者可以将自己的屏幕内容,以视频的方式分享给远端参会者或在线观众观看,从而提升沟通效率,一般适用于多人视频聊天、在线会议以及在线教育场景。

  • 视频会议场景中,参会者可以在会议中将本地的文件、数据、网页、PPT 等画面分享给其他与会者,让其他与会者更加直观的了解讨论的内容和主题。

  • 在线课堂场景中,老师可以通过屏幕共享将课件、笔记、教学内容等画面展示给远端的其他学生观看,降低传统教学模式下的沟通成本,提升教育场景的用户体验。

NERTC SDK 以辅流的形式实现屏幕共享,即单独为屏幕共享开启一路上行的视频流,摄像头的视频流作为主流,屏幕共享的视频流作为辅流,两路视频流并行,主播同时上行摄像头画面和屏幕画面两路画面。

注意事项

  • Android端 MediaProjection 等 API 需要 Android API level 21+,使用方法请参考 Google MediaProjection API 文档。
  • 当前的uni-app在iOS端还不支持屏幕共享功能,仅安卓端支持
  • 如果遇到不生效的问题,可以将manifest.json配置文件中的 'targetSdkVersion' 降低至 28

本端共享屏幕

实现方法

步骤一 开启屏幕共享

在加入房间之后调用 startScreenCapture 方法开启屏幕共享,以辅流形式发送屏幕共享内容。
调用此方法时,您需要设置 screenConfigParam 配置本地辅流的编码参数。

参数说明如下表所示。

参数 参数说明

contentPrefer

屏幕共享编码策略倾向:

  • CONTENT_PREFER_MOTION(默认):内容类型为动画。当用户共享的内容是视频、电影或游戏等动态画面时,推荐选择此枚举值;此时 frameRate 参数完全按照您的设置处理。
  • CONTENT_PREFER_DETAILS:内容类型为细节。当用户共享的内容是图片、文字或 PPT 等静态画面时,推荐选择此枚举值;此时 frameRate 参数最高可设置为 10 帧。
maxProfile 视频编码的分辨率。
具体请参考 NERtcVideoProfileType
frameRate 视频编码的帧率。
可以设置为 0、7(默认)、10、15、24、30 fps,具体请参考 NERtcVideoFrameRate
minFramerate 视频编码的最小帧率。
默认值为 0,表示使用默认的最小帧率。
bitrate 视频编码的码率,单位为 Kbps。
若设置的码率为 0 或超出合理范围,SDK 会自行计算出合理区间处理码率,具体请参考分辨率、帧率、码率参照表
minBitrate 视频编码的最小码率,单位为 Kbps。

典型场景参数配置推荐

以下表格列出了针对一些典型场景的屏幕共享参数的推荐值,供您参考。

参数名称 常规推荐值 一起看视频 共享 PPT
contentPrefer CONTENT_PREFER_MOTION CONTENT_PREFER_MOTION CONTENT_PREFER_DETAILS
videoProfile HD720P HD720P HD1080p
frameRate FRAME_RATE_FPS_7 FRAME_RATE_FPS_30 FRAME_RATE_FPS_7
bitrate 0(默认值) 0(默认值) 0(默认值)
  • 若屏幕共享的内容为静态画面,设置较高的帧率并不经济,推荐 7 fps 即可。
  • 若用户要共享的屏幕内容包含大量文字,可以适当提高分辨率和码率设置。

示例代码如下:

javaScriptlet screenConfigParam = {
    maxProfile: NERtcVideoProfileType.Standard, 
    frameRate: NERtcVideoFrameRate.FRAME_RATE_FPS_24, //设置帧率24
    minFrameRate: NERtcVideoFrameRate.FRAME_RATE_FPS_15, //设置最小帧率15
    bitrate: 2500, //设置屏幕共享码率2500kbps
    minBitrate: 1500, //设置屏幕共享码率最小为1500kbps
    contentPrefer: NERtcSubStreamContentPrefer.CONTENT_PREFER_DETAILS, //屏幕共享功能的编码策略倾向
};
this.engine.startScreenCapture(screenConfigParam)

步骤三 设置本端辅流画布

调用 setupLocalSubStreamVideoCanvas 方法设置本端的辅流视频画布。
调用此接口时,您需要设置 render 参数配置视频画布。

您可以在开启屏幕共享前后随时设置本端辅流画布。

示例代码如下:

javaScriptthis.engine.setupLocalSubStreamVideoCanvas({
    renderMode: NERTCRenderMode.Fit, // Fit表示应区域。视频尺寸等比缩放,保证所有区域被填满,视频超出部分会被裁剪
    mirrorMode: NERTCMirrorMode.AUTO, //AUTO表示使用默认值,由sdk控制
    isMediaOverlay: false //表示小画布置于大画布上面
})

步骤四 停止屏幕共享

若您要结束屏幕共享,请调用 stopScreenCapture 方法关闭辅流形式的屏幕共享。

示例代码如下:

javaScriptthis.engine.stopScreenCapture();

观看远端屏幕共享

API 调用时序

sequenceDiagram
    participant 应用层
    participant NERtcSDK
    NERtcSDK-->>应用层: onUserSubStreamVideoStart 远端用户开启屏幕共享的回调
    应用层->>NERtcSDK: setupRemoteSubStreamVideoCanvas  设置远端的辅流视频回放画布
    应用层->>NERtcSDK: subscribeRemoteSubStreamVideo 订阅远端的屏幕共享辅流视频
    NERtcSDK-->>应用层: onUserSubStreamVideoStop  远端用户关闭辅流的回调

实现方法

  1. 远端用户加入房间。
  2. 收到 onUserSubStreamVideoStart 其他用户开启屏幕共享辅流通道的回调。
  3. 通过 setupRemoteSubStreamVideoCanvas 设置远端的辅流视频回放画布。
  4. 通过 subscribeRemoteSubStreamVideo 订阅远端的屏幕共享辅流视频,订阅之后才能接收远端的辅流视频数据。
  5. 收到 onUserSubStreamVideoStop 其他用户关闭辅流的回调,结束屏幕共享。

示例代码

this.engine.addEventListener("onUserSubStreamVideoStart", (userID, maxProfile) => {
    const message = `onUserSubStreamVideoStart通知:对方开启屏幕共享,userID = ${userID}, maxProfile = ${maxProfile}`
    //设置对端的视频辅流画布
    this.engine.setupRemoteSubStreamVideoCanvas({
        renderMode: NERTCRenderMode.Fit, // Fit表示应区域。视频尺寸等比缩放,保证所有区域被填满,视频超出部分会被裁剪
        mirrorMode: NERTCMirrorMode.AUTO, //AUTO表示使用默认值,由sdk控制
        isMediaOverlay: false, //表示小画布置于大画布上面
        userID: userID //对方userID
    })
    //主动去订阅对端视频辅流
    this.engine.subscribeRemoteSubStreamVideo({
        userID: userID,
        streamType:NERtcRemoteVideoStreamType.HIGH, //HIGH: 大流, LOW: 小流 
        subscribe: true //true表示订阅,false表示取消订阅
    })
});

API 参考

方法 功能描述
startScreenCapture 开启屏幕共享。
setupLocalSubStreamVideoCanvas 设置本端的辅流视频画布。
stopScreenCapture 关闭屏幕共享。
setupRemoteSubStreamVideoCanvas 设置远端的辅流视频回放画布。
onUserSubStreamVideoStart 通知本端关于远端用户开启屏幕共享辅流通道的回调。
subscribeRemoteSubStreamVideo 订阅远端的屏幕共享辅流视频
onUserSubStreamVideoStop 通知本端关于远端用户关闭屏幕共享辅流通道的回调。
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 注意事项
  • 本端共享屏幕
  • 实现方法
  • 步骤一 开启屏幕共享
  • 步骤三 设置本端辅流画布
  • 步骤四 停止屏幕共享
  • 观看远端屏幕共享
  • API 调用时序
  • 实现方法
  • 示例代码
  • API 参考