我正在使用captureStream从HTML画布进行记录,当前正在使用https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Recording_API中的示例代码。但是,这仅适用于短记录,因为每个斑点都存储在内存中。

我希望能够长时间记录,例如> 1小时,然后让用户下载生成的.webm / .mkv文件。如果听起来不正常,那是因为我正在使用网络浏览器进行(开放源代码)科学应用,并且需要知道实验期间显示的内容:)。

修改MDN代码以将每个Blob存储在IndexedDB中(而不是存储在内存中的数组中)很简单,但是我一直在坚持如何构建下载而不会创建会耗尽内存的巨大Blob:

var blob = new Blob([IDBchunk1, IDBchunk2, ...], {
  type: "video/webm"
});


另一种方法是构建“流”下载,但不确定是否可行。

一种可行的但效率极低的解决方案是使用WebRTC将流发送回nodejs服务器,将每个blob附加到服务器上的磁盘视频文件中,然后通过http提供视频下载。我不喜欢这种解决方案,因为它涉及设置webRTC的复杂性,并且需要来回大量带宽。

让我知道您是否仅对客户端有任何想法?

最佳答案

至少在Chrome中,new Blob([IDBchunk1, IDBchunk2, ...]...)方法不需要将任何Blob加载到内存中。新的Blob在内部引用了从属Blob /文件,对Blob的读取(例如在下载过程中)会根据需要从从属Blob中提取字节。

关于javascript - 客户端javascript是否可以创建太大而无法容纳在内存中的文件下载?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59585292/

10-12 12:27
查看更多