屏幕共享,是指在视频通话或互动直播过程中将屏幕内容以视频的方式共享给房间内的其他用户,支持共享整个屏幕、共享指定窗口或标签页。例如在教育场景中,教师需将桌面上的 PPT 展示给房间内的其他学生观看,提高沟通效率。
请参考 下载示例源码 获取源码。
相关源码请查看 “src/Examples/Others/ScreenSharing” 目录下的文件。
在使用屏幕共享前,请确保:
屏幕共享目前仅支持桌面端(例如 Windows 和 macOS)的 Google Chrome 、Microsoft Edge 和 Firefox 浏览器,以及 macOS 的 Safari 浏览器。
如果开发者使用 macOS 系统,请先打开电脑的“系统偏好设置 > 安全性与隐私 > 屏幕录制”,添加使用的浏览器,才可以进行屏幕共享。
仅 Google Chrome 浏览器支持插件形式的屏幕共享,当开发者使用的浏览器为 Google Chrome 且版本在 65 ~ 72 之间时需要执行如下操作安装插件:
点击下载 ZEGO 共享插件,并解压。
打开 Google Chrome 浏览器,单击窗口右上方的“自定义及控制 Google Chrome”按钮,选择“更多工具 > 扩展程序”。
打开右上角的“开发者模式”开关,单击“加载已解压的扩展程序”,并选择已解压的“ZEGO 共享插件”文件夹,即可完成安装。
通过调用 on 接口监听停止屏幕共享的 screenSharingEnded 回调。
只有推流端才能接收到该回调的通知,拉流端无法接收。
zg.on('screenSharingEnded', (stream)=> {
//do something
console.warn('screen sharing end');
});
调用 createZegoStream 方法创建屏幕共享流。
createZegoStream 接口参数 “source” 包含的对象 “screen”,可以对屏幕捕捉采集流进行相关配置。
通过 “screen” 对象下的 “audio” 参数可以设置是否需要共享音频。参数取值如下:
参数取值 | 描述 |
---|---|
false |
默认值,即不共享音频。 |
true |
共享音频。不同的浏览器,开启音频共享的方式不同,请参考如下。 |
在 Google Chrome 浏览器中,“audio” 设置为 “true” 后,还需要在浏览器的弹窗中勾选“分享音频”,才能将声音推送给对端用户。开发者在选择不同的共享内容时,浏览器弹窗中的“分享音频”选项是否展示,请参考如下:
在 Google Chrome 共享内容 | macOS | Windows |
---|---|---|
整个屏幕 |
无“分享音频”选项。 |
有“分享音频”选项。 勾选此选项,整个电脑屏幕(包含其它 App)的声音都会被推送给对端用户,但不包括麦克风收录的声音。 |
窗口 |
无“分享音频”选项。 |
|
Google Chrome 标签页 |
有“分享音频”选项。 勾选此选项,只有选择的标签页中正在发声的媒体声音(不包含静音媒体)会被推送给对端用户。 |
只有勾选了“分享音频”,才能将声音推送给对端用户,拉流方才会有声音。
在 Microsoft Edge 浏览器中,“audio” 设置为 “true” 后,还需要在浏览器的弹窗中勾选“共享音频”,才能将声音推送给对端用户。开发者在选择不同的共享内容时,浏览器弹窗中的“共享音频”选项是否展示,请参考如下:
在 Microsoft Edge 共享内容 | macOS | Windows |
---|---|---|
整个屏幕 |
无“共享音频”选项。 |
有“共享音频”选项。 勾选此选项,整个电脑屏幕(包含其它 App)的声音都会被推送给对端用户,但不包括麦克风收录的声音。 |
窗口 |
无“共享音频”选项。 |
|
Microsoft Edge 标签页 |
有“共享音频”选项。 勾选此选项,只有选择的标签页中正在发声的媒体声音(不包含静音媒体)会被推送给对端用户。 |
只有勾选了“共享音频”,才能将声音推送给对端用户,拉流方才会有声音。
在 Firefox 浏览器中,共享屏幕时,“audio” 设置为 “true” 后:
不支持分享音频。
通过 “screen” 对象下的 “videoQuality” 参数可以设置屏幕共享视频质量(分辨率、帧率和码率),该参数取值及含义如下:
取值 | 分辨率 | 帧率(fps) | 码率(kbps) | 应用场景 |
---|---|---|---|---|
1 |
实际共享分辨率宽 × 实际共享分辨率高 |
20 |
800 |
“1” 为预设值,帧率较大,适用于对视频流畅度要求较高的场景。 |
2 |
实际共享分辨率宽 × 实际共享分辨率高 |
15 |
1500 |
“2” 为预设值,适用于在视频流畅度和清晰度之间取得平衡的场景。 |
3 |
实际共享分辨率宽 × 实际共享分辨率高 |
5 |
2000 |
“3” 为预设值,码率较大,适用于对视频清晰度要求较高的场景。 |
4 |
width × height |
frameRate |
bitrate |
“4” 为自定义取值,适用于开发者想根据自己需要设置共享区域、帧率、码率的场景。 |
const screenStream = await zg.createZegoStream({
videoBitrate: 1500,
screen: {
audio: document.getElementById('isScreenAudio').value == 'yes' ? true : false,
video: {
quality: 4,
frameRate: 15,
width: document.getElementById('screenWidth').value * 1 || screen.width,
height: document.getElementById('screenHeight').value* 1 || screen.height
}
},
});
调用 startPublishingStream 方法将 createZegoStream 创建的屏幕共享流推送到 ZEGO 实时音视频云。当同时推多路流时,建议只推 1 路音频,防止出现回音。
const publisRes = zg.startPublishingStream(screenStreamId, screenStream);
当屏幕共享流推送到 ZEGO 实时音视频云后,其他用户可以使用 startPlayingStream 接口拉取屏幕共享流。
若要销毁屏幕共享流,需要先调用 stopPublishingStream 方法停止推流,否则对端画面会卡住。
zg.stopPublishingStream(screenStreamId);
停止推流后,需要及时调用 destroyStream 方法销毁屏幕共享流数据,释放被占用的资源。
zg.destroyStream(screenStream);
联系我们
文档反馈