库(实际上使过程变得非常容易)。 不幸的是,如果您采用这种方法,则有一个限制的限制(WEBRTC会以有损的压缩来压缩您的音频,您将有一个很大的延迟,当前电子错误会导致音频变成单声道,事物,事物,事物这样)
因此,这对语音之类的东西很好,但对于例如高端本机质音频处理。然后,您可以使用Web Audio API和MediaStreamDestinationnode在另一个窗口过程中重建MediaStream。 我也面临同一问题,并尝试了几乎所有方法。一种方法是在电子中使用本机窗口,并在react中创建一个门户网站并在其中打开一个带有window.open()的本机窗口,这将为我们提供一个没有浏览器的电子窗口,使用browserwindow功能,将本机窗口转换为浏览器窗口,我发现这样做的唯一方法是在“新窗口”中的新guest活动中,这是不弃用的,而没有新的Gunguest事件但它可以在22以下的版本中起作用。
现在您可以作为浏览器访问newwindow,这将起作用。
@Johnweisz答案中提到的WebRTC的限制在
2025对
电子peer-connection包的感兴趣,但面临其限制,特别是在电子中的IPC安全性(
here)中,I创建了一个软件包,以在Windows之间发送和接收非常非常低潜伏期
.
。 在编写版本的时间为1.0.7
。未来版本可能会在窗口之间实现通过原始音频,但是暂时可以通过运行提供的示例来看到性能。
通过致电:注册窗口:
// WindowRTCMain is a singleton.
import { WindowRTCMain } from 'electron-window-rtc';
const senderWindow: BrowserWindow = createWindow();
const receiverWindow: BrowserWindow = createWindow();
// Note that windows can both send and receive, it's up to the application to manage sent/received streams.
WindowRTCMain.register('sender', senderWindow);
WindowRTCMain.register('receiver', receiverWindow);
Receiver
import {
WindowRTCPeerConnection,
defineIpc,
} from 'electron-window-rtc/renderer';
// Important: define early how to access to IPC object, according to application 'preload' script.
// The IPC object must at least expose `on`, `removeListener`, `send` and `invoke` methods (see IPCObject below).
defineIpc(window.electron.ipcRenderer);
document.addEventListener('DOMContentLoaded', (event) => {
// Connect to window named 'receiver'.
const windowConnection = new WindowRTCPeerConnection('receiver');
// Canvas for example...
const canvas: HTMLCanvasElement = document.getElementById('canvas');
// Add track from canvas: this will create an 'offer' for 'receiver' window.
// Note the '240' fps framerate: leaving it empty creates latency in the receiver.
windowConnection.addStream(canvas.captureStream(240));
});
sender
import {
WindowRTCPeerConnection,
defineIpc,
} from 'electron-window-rtc/renderer';
defineIpc(window.electron.ipcRenderer);
document.addEventListener('DOMContentLoaded', (event) => {
const windowConnection = new WindowRTCPeerConnection('sender');
// Listen to 'track' added by 'sender' window.
windowConnection.on('track', (event: EventManagerDTO) => {
const video: HTMLVideoElement = document.getElementById('video');
const trackEvent: RTCTrackEvent = event.payload;
const streams = trackEvent.streams;
for (const stream of streams) {
// For the sake of this example, keep only one stream, we could also get `streams[0]`.
video.srcObject = null;
video.srcObject = stream;
}
});
});
对于音频,您可以在SenderWindow.vue
ReceiverWindow.vue
WebAudio
通过ipc module
main process
来在Windows之间进行通信。