在Electron中的窗口之间共享数据

5ktev3wc  于 5个月前  发布在  Electron
关注(0)|答案(3)|浏览(139)

我需要一个多窗口应用程序来共享媒体流。有办法做到这一点吗?在nw.js中,我可以创建一个概念证明,在一个窗口中创建的MediaStream可以在另一个窗口中播放,但似乎我不能在Electron中做到这一点。我是正确的吗?

j8yoct9x

j8yoct9x1#

我确信WebRTC可以将音频/视频从MediaStream流到另一个窗口进程。基于electron-peer-connection库,已经做到了这一点(实际上,它使这个过程非常容易)。
不幸的是,there are a lot of limitations考虑如果你采取这种方法(WebRTC将压缩你的音频与有损压缩,你会有一个大的延迟,电子错误目前导致音频成为单声道,类似的事情)。
因此,这对于语音之类的东西来说是可以的,但对于高端原生质量的音频处理来说就不行了。
此外,如果您的应用程序不是具有疯狂性能要求的怪物,您还可以使用Web Audio API和ScriptProcessorNode(AudioWorklet在Electron中仍然不可用)直接从MediaStream访问音频样本数据,并使用标准电子IPC发送。
然后,您可以使用Web Audio API和MediaStreamDestinationNode在其他窗口进程中重建MediaStream。

4sup72z8

4sup72z82#

我也面临着同样的问题,几乎尝试了所有的方法。一种方法是在electron中使用nativeWindow,用react创建一个门户网站,并在其中打开一个带有www.example.com()的本机窗口window.open,这将给我们给予一个没有browserwindow功能的电子窗口,要使用browserwindow功能,我们必须将本机窗口转换为浏览器窗口,我发现的唯一方法是使用“new-window”中的newGuest事件不幸的是,这被弃用,newGuest事件不可用,但它可以在22以下的版本中工作。

mainWindow.webContents.on('new-window',
(event, url, frameName, disposition, options, additionalFeatures) =>
{
// This is the name we chose for our window. You can have multiple names for
// multiple windows and each have their options
if (frameName === 'NewWindowComponent ') {
event.preventDefault();
Object.assign(options, {
// This will prevent interactions with the mainWindow
parent: mainWindow,
width: 300,
height: 300,
// You can also set left and top positions
});
event.newGuest = new BrowserWindow(options);
let newWindow = event.newGuest
}
});

字符串
现在你可以将newWindow作为BrowserWindow来访问了,这样就可以了。

njthzxwz

njthzxwz3#

您应该能够使用ipc module在窗口之间进行通信,方法是通过main process发出事件,并在窗口中为它们添加listeners

相关问题