使用 fs 从 firebase 存储读取 .mp4 文件,将该视频发送到 tensorflow 模型

Read .mp4 file from firebase storage using fs to send that video to tenserflow model

我的毕业设计是将视频转换成文字。 我正在尝试读取上传到 Firebase 存储中并从 android 应用程序发送的视频,以将其发送到 TenserFlow 模型。 但是我看不到视频。

这是我的函数:

exports.readVideo = functions.storage
.object()
.onFinalize(async (object) => {
    const bucket = admin.storage().bucket(object.bucket);
    const tempFilePath = path.join(os.tmpdir(), object.name);
    console.log(tempFilePath);
    console.log('download');
    // note download
    await bucket
        .file(object.name!)
        .download({
            destination: tempFilePath,
        })
        .then()
        .catch((err) => {
            console.log({
                type: 'download',
                err: err,
            });
        });
    console.log('read');
    // note read
    let stream = await bucket
        .file(object.name!)
        .createReadStream({
            start: 10000,
            end: 20000,
        })
        .on('error', function (err) {
            console.log('error 1');
            console.log({ error: err });
        })
         await new Promise((resolve, reject) => {
            console.log('error 2');
            stream.on('finish', resolve);
            console.log('error 3');
            stream.on('error', reject);
            console.log("end!")
            stream.on('end', resolve);
        }).catch((error) => {
            // successMessage is whatever we passed in the resolve(...) function above.
            // It doesn't have to be a string, but if it is only a succeed message, it probably will be.
            console.log("oups! " + error)
        });

    console.log('tempFile size2', fs.statSync(tempFilePath).size);­­­

    return fs.unlinkSync(tempFilePath);
});

我得到了那个错误:

Function execution took 60008 ms, finished with status: 'timeout'

如错误消息所示,Cloud Functions 上的常规文件系统是只读的。唯一可以写入的地方是 /tmp,如 file system access in Cloud Functions 上的文档中所示。我不确定为什么 os.tmpdir() 没有给你那个路径的位置,但你可能想对目录进行硬编码。

请记住一件事:/tmp 是 RAM 磁盘而不是物理磁盘,因此您分配的内存需要足够 space 用于写入文件。