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



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

我希望能够长时间录制,例如>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 中提取字节。

最新更新