客户端javascript能否创建一个太大而无法放入内存的文件下载?

客户端javascript能否创建一个太大而无法放入内存的文件下载?,javascript,webrtc,indexeddb,fileapi,mediastream,Javascript,Webrtc,Indexeddb,Fileapi,Mediastream,我使用从HTML画布录制,目前使用中的示例代码。但是,这只适用于短录制,因为每个blob都存储在内存中 我希望能够长时间录制,例如>1小时,并让用户下载生成的.webm/.mkv文件。如果这听起来不寻常,那是因为我正在使用web浏览器进行(开源)科学应用程序,需要知道在实验过程中显示了什么:) 修改MDN代码以将每个blob存储在IndexedDB中而不是存储在内存阵列中非常简单,但我一直在研究如何构造下载而不创建会耗尽内存的巨大blob: var blob = new Blob([IDBchu

我使用从HTML画布录制,目前使用中的示例代码。但是,这只适用于短录制,因为每个blob都存储在内存中

我希望能够长时间录制,例如>1小时,并让用户下载生成的.webm/.mkv文件。如果这听起来不寻常,那是因为我正在使用web浏览器进行(开源)科学应用程序,需要知道在实验过程中显示了什么:)

修改MDN代码以将每个blob存储在IndexedDB中而不是存储在内存阵列中非常简单,但我一直在研究如何构造下载而不创建会耗尽内存的巨大blob:

var blob = new Blob([IDBchunk1, IDBchunk2, ...], {
  type: "video/webm"
});
另一种方法是构建“流”下载,但不确定这是否可行

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


如果您对如何仅在客户端执行此操作有任何想法,请告诉我。

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

是的,我认为您是对的,IndexedDB是不必要的。至少Chrome会根据需要自动将blob从内存传输到文件: