是否支持Electron环境下共享内容?
问题描述
Electron是一个跨桌面平台开发框架,内部基于Chromium浏览器内核实现渲染内容,所以理论上,Electron项目也支持集成WebRTC SDK,实现音视频能力;
但因为 Electron 未实现浏览器支持的 WebRTC 标准的 getDisplayMedia 接口,所以网页中包含了 WebRTC 屏幕分享相关的逻辑,将无法在 Electron 中像普通浏览器一样正常使用 XY Web SDK 进行屏幕分享。
那么如何在 Electron 中使用 XY Web SDK 如何进行屏幕分享呢?
解决办法
方式一
推荐使用小鱼易连XY Electron SDK,支持Windows和Mac平台,由于底层采用小鱼C++ SDK实现,所以可以实现堪比客户端一样的会议表现;
方式二
1、调用stream模块的getElectronContentSource()方法获取 Electron 平台上可分享的输入源列表;
// desktopCapturer来源于electron模块
const result = await stream.getElectronContentSources(desktopCapturer, ['window', 'screen']);
2、通过第一步获取到的输入源列表,选择合适的分享源资源id信息;
3、通过stream模块的createElectronContentStream()方法创建Electron分享视频流,并执行publish推送操作:
const result = await stream.createElectronContentStream(resourceId);
// 创建分享屏幕stream成功
if (result.code === 518) {
// 监听开始分享操作事件
stream.on('start-share-content', () => {
// 推送Content视频流
client.publish(stream, { isShareContent: true });
})
// 监听停止分享操作事件
stream.on('stop-share-content', () => {
stopShareContent();
})
} else {
message.info(result.msg || '分享屏幕失败');
}
提示
1、在高版本Electron下,可能无法在渲染进程获取desktopCapturer模块,所以需要在主进程下获取所有可用的资源列表内容,然后传递到渲染进程进行选择;
2、高版本Electron下,需要自行处理设备采集屏幕授权操作;