如何将 mediaStream 从电子渲染器进程发送到后台 ffmpeg 进程?

Sam*_*opa 6 video ffmpeg node.js reactjs electron

目标(避免 XY 问题):

我正在使用 webRTC、电子和 create-react-app 构建一个小型 Linux 桌面应用程序。应用程序应通过 webRTC 对等连接接收媒体流,向用户显示流,创建虚拟网络摄像头设备,并将流发送到虚拟网络摄像头,以便在大多数主要视频会议平台上选择它作为输入。

问题:

各个部分都工作:接收流(webRTC),创建网络摄像头设备(v4l2loopback),从电子内部创建 ffmpeg 的子进程,将视频流传递到 ffmpeg 进程,使用 ffmpeg 将视频流式传输到虚拟设备,选择虚拟设备并在视频会议中查看视频流。

但我目前正坚持将各个部分绑在一起。问题是,mediaStream 对象在 Electron 的渲染器进程中可用(作为深度嵌套的反应组件中的状态,FWIW)。据我所知,我只能从 Electron 的进程中创建 ffmpeg 的 node.js 子进程。这意味着我需要将媒体流从渲染器获取到主进程。为了在进程之间进行通信,Electron 使用 IPC 系统。不幸的是,IPC 似乎不支持发送像视频流这样的复杂对象。

我尝试过的:

  • 从渲染器进程内启动 ffmpeg 子进程(使用 child_process.spawn)会引发“fs.fileexistssync”错误。浏览SO表明只有主进程才能启动这些后台进程。

  • 在渲染器和主程序之间创建单独的 webRTC 连接以重新传输视频。我正在使用 IPC 来促进连接,但提供/应答描述无法通过 IPC 到达其他对等点 - 我猜测这是由于 IPC 与以前相同的限制造成的。

我的下一步是在应用程序启动时创建一个单独的节点服务器,该服务器接收传入的 RTC 流并将其重新广播到应用程序的渲染器进程以及后台 ffmpeg 进程。

不过,在我尝试之前,有人对我应该考虑的方法有建议吗?(这是我的第一个问题,所以任何有关如何改进它的建议都值得赞赏)。