- 文档首页
实时音视频
实时音视频
开发指南
屏幕共享
通过 Electron SDK 实现 PC 端屏幕共享
屏幕共享
通过 Electron SDK 实现 PC 端屏幕共享
通过 Electron SDK 实现 PC 端屏幕共享
在实时通信中,如果你希望用户可以分享本端设备的屏幕和设备播放的音频,可以使用 RTC 内建的屏幕采集功能,也可以自行实现屏幕采集逻辑(自定义采集),并通过屏幕共享功能,与远端用户共享。
适用场景
你可以在多种行业的多种场景下使用到屏幕共享功能:
前提条件
操作系统版本要求如下:
功能实现
步骤一:申请麦克风和摄像头权限
注意:即使你的业务不需要摄像头和麦克风只包含屏幕录制,也需要申请麦克风和摄像头权限才能获得屏幕录制权限。
async function checkAndApplyDeviceAccessPrivilege() {
const cameraPrivilege = systemPreferences.getMediaAccessStatus('camera');
console.log(`checkAndApplyDeviceAccessPrivilege before apply cameraPrivilege: ${cameraPrivilege}`);
if (cameraPrivilege !== 'granted') {
await systemPreferences.askForMediaAccess('camera');
const micPrivilege = systemPreferences.getMediaAccessStatus('microphone');
console.log(`checkAndApplyDeviceAccessPrivilege before apply micPrivilege: ${micPrivilege}`);
if (micPrivilege !== 'granted') {
await systemPreferences.askForMediaAccess('microphone');
步骤二:采集屏幕音视频流
集成 Electron 端 RTC SDK,创建引擎并加入 RTC 房间,详见构建基础应用。 获取共享对象列表和信息
调用以下接口,以便用户在发起共享前,看到可以共享的屏幕/窗口的缩略图等信息,并指定共享对象。
- 应用窗体:kScreenCaptureSourceTypeWindow
- 显示器屏幕:kScreenCaptureSourceTypeScreen。 Windows 端的虚拟桌面的 source_id 为 -1。
- 缩略图尺寸:保持采集对象本身的宽高比不变,将缩略图缩放到指定范围内的最大宽高。
- 应用图标尺寸:将应用图标按照指定的边长进行缩放,始终为正方形。
let list = vEngine.getScreenCaptureSourceList();
for (let i = 0; i < list.length; i++) {
console.log('getScreenCaptureSourceList item: ' + item)
let ret = vEngine.getThumbnail(item.type, item.source_id, 1920, 1080);
开启设备屏幕采集
- 当共享对象原始分辨率超过目标宽、高时,将保持视频帧宽高比,缩小到目标宽、高。
- 当共享对象分辨率小于目标宽高时,将保持原始宽高,不进行“放大”。
开启设备音频采集
- 使用音频播放设备枚举接口获取虚拟声卡设备 ID。
更新屏幕共享配置
开始发布屏幕流后,可以通过以下接口更新屏幕采集设置。
步骤三:发布/停止发布屏幕共享流
开始屏幕音视频采集后,屏幕流与摄像头、麦克风流共用发布接口:
步骤四:设置屏幕共享视图
<div style="width: 12px;"></div>
<div id="idRemoteScreenContainer" style="width: 240px; height: 180px; background-color: lightblue;">
rtcEngine.on('onFirstRemoteVideoFrameDecoded', (streamId, streamInfo) => {
if (streamInfo.is_screen) {
rtcEngine.setupRemoteVideo(streamId, idRemoteScreenContainer);
在主进程脚本中添加如下代码:
const idRemoteScreenContainer = document.getElementById('idRemoteScreenContainer');
至此,你完成了屏幕共享。
最近更新时间:2026.10.10 20:08:48