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

问题描述 投票:1回答:1

我正在使用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的复杂性,并且需要来回大量带宽。

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

javascript webrtc indexeddb fileapi mediastream
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.