客户端javascript是否可以创建太大而无法容纳在内存中的文件下载?

时间:2020-01-03 21:01:32

标签: javascript webrtc indexeddb fileapi mediastream

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

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

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

kqueue

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

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

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

1 个答案:

答案 0 :(得分:1)

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

相关问题