如何在不等待整个文件的情况下将可读流传递到URL.createObjectURL?

时间:2018-09-01 02:35:06

标签: javascript ipfs

我知道它可以与mediaSource一起使用,但媒体源不支持所有视频格式(例如,片段化的mp4)。这是一个问题,因为我的应用程序没有可以修复该文件的服务器。它只是一个客户端应用程序。

#include<iostream>
using namespace std;

int x = 30;
x = 40;

int main() {
    cout << x;
    system("pause");
    return 0;
};

这是我现在正在使用的代码,它基本上等待整个文件并将其放入单个数组中,然后放入blob中,然后放入URL.createObjectURL

1 个答案:

答案 0 :(得分:2)

您可以在其中重构代码:

await ipfs.startBlobStreaming(hash);
this.setState({...this.state, videoComplete: true});

const startBlobStreaming = async (hash) => {
  return new Promise(async (resolve) => {

    let entireBuffer;
    const s = await stream(hash);
    s.on('data', buffer => {
      if (!entireBuffer) {
        entireBuffer = buffer;
      } else {
        entireBuffer = concatTypedArrays(entireBuffer, buffer);
      }
      const arrayBuffer = typedArrayToArrayBuffer(entireBuffer);
      const blob = new Blob(arrayBuffer);
      const url = URL.createObjectURL(blob);
      this.setState({...this.state, videoSrc: url});

    });
    s.on('end', _ => resolve())
  });
}

我不知道缓冲区进入s.on的强度,但是您还可以在一定时间内(例如1000ms)收集一定数量的缓冲区,然后创建Blob网址。