使用流将客户端大型数据集保存到 Chrome Android 上的本地文件

Save client side large set of data to local file on Chrome Android with streams

提问人:pedrobroese 提问时间:7/2/2023 最后编辑:M.Kpedrobroese 更新时间:7/3/2023 访问量:61

问:

我有一个代码,可以反编译视频并生成新视频,所有这些都在客户端。由于视频很大,视频多路复用器的输出被定向到可写流,因此在生成数据时会消耗数据,以防止过多的内存使用。在适用于 Windows 的 chrome 上,我使用以下代码获取可写流:

        fileHandle = await window.showSaveFilePicker({
          startIn: 'videos',
          suggestedName: 'newSession.webm',
          types: [{
            description: 'Video File',
            accept: { 'video/webm': ['.webm'] },
          }],
        });
        fileWritableStream = await fileHandle.createWritable();

然后,我只需将 ,这是 的实例提供给多路复用器:fileWritableStreamFileSystemWritableFileStream

 muxer1 = new WebMMuxer({
          target: fileWritableStream,
          video: {
            codec: 'V_VP9',
            width: outputW,
            height: outputH,
            frameRate: FPS
          },
          audio: {
            codec: 'A_OPUS',
            numberOfChannels: 2,
            sampleRate: 48000
          }
        });

上面的代码工作原理如下: 运行时,系统会提示用户将文件保存到本地磁盘。当他完成时,代码的其余部分开始将视频块写入流,并且这些块立即输出到文件中,从而防止新的视频块在内存中累积。fileHandle

现在来谈谈问题:在 Android 版 chrome 中,不支持 nor ,这意味着我无法提示用户输入保存文件的位置,因此,我无法实例化一个实例,然后我可以从中获取我需要的。那么,这种情况有解决方法吗?window.showSaveFilePicker()window.showDirectoryPicker()FileSystemFileHandleFileSystemWritableFileStream

我试图实现的是获取 chrome for android 中的实例,其底层指向用户选择的文件夹。FileSystemWritableFileStreamFileSystemDirectoryHandle

JavaScript 客户端 Chrome-for-Android 原生文件系统 api-js

评论

0赞 pedrobroese 7/2/2023
经过一番研究,我发现这个库 github.com/jimmywarting/StreamSaver.js 应该完全符合我的要求,但是,我尝试了一下,但它并没有开箱即用。我仍然相信本机 FileSystemAPI 必须有一些解决方案

答: 暂无答案