使用电子主进程流式传输大型本地媒体文件并在渲染器进程中处理它们的最佳方法

RLo*_*ris 9 javascript node.js html5-video html5-audio electron

你好呀,

我会尝试更具体地回答我的问题,我正在使用 Angular 9 和最新的 Electron 版本 8.1.1。

我的目标是读取大型媒体文件,例如视频(>4go)、歌曲(flac)或位于我的文件系统上的其他大型文件,但在主进程中使用nodeJS中的流api并将结果(块,缓冲区)发送到渲染器进程。

我如何处理渲染器进程中的流缓冲区,我想使用html5中已经内置的视频和音频api,因此在主进程和渲染器进程之间使用ipc,我将发送块并希望能够显示,播放,使用 html5 api 读取这些块(例如,使用视频标签和属性 src 或音频标签和属性 src)我应该为这些元素提供什么作为 src,以便它像带有 url 的基本 Web 流一样工作?

这是我的主要流程代码(其中我将 fs 与 nodejs 一起使用):

ipcMain.on('getFileStream', (event, arg) => {
  try {
    if(fs.existsSync(arg.path) && fs.lstatSync(arg.path).isFile()) {
      const s = fs.createReadStream(arg.path)
      s.on('data', (chunk: Buffer) => {
        console.log(chunk)
        event.sender.send('getFileStreamResponse', chunk)
      }).on('end', () => {
        console.log("end stream")
        event.sender.send('getFileStreamResponse', false)
        s.close()
      });
    }
  } catch(e) {
    console.log('getFileStream', e)
  }
})
Run Code Online (Sandbox Code Playgroud)

我不想等待所有块开始播放媒体,我希望能够在加载足够的数据时播放媒体。我读过有关 html5 中的 Mediasources 的内容,但想知道这是否是正确的方法,或者您是否知道读取大文件并在渲染器进程中重建块的更好方法?

非常感谢您抽出时间