Использовать данные S3 GetObject в качестве источника видео

#javascript #html #node.js

#javascript #HTML #node.js

Вопрос:

Когда я запрашиваю видео с использованием Node с AWS SDK, возвращается вот что:

 {
  AcceptRan&es: 'bytes',
  LastModified: 2020-08-04T17:15:34.000Z,
  ContentLen&th: 6480325,
  ETa&: '"c52e2d08feef01b4ce3ff2a4c6adb65b"',
  ContentType: 'video/mp4',
  Metadata: {},
  Body: <Buffer 00 00 00 20 66 74 79 70 69 73 6f 6d 00 00 02 00 69 73 6f 6d 69 73 6f 32 61 76 63 31 6d 70 34 31 00 01 14 3e 6d 6f 6f 76 00 00 00 6c 6d 76 68 64 00 00 ... 6480275 more bytes&&t;
}
  

Буфер является ArrayBuffer . Я предполагаю, что это то, что мне нужно использовать в качестве источника видео, но я действительно понятия не имею.

Я пытался преобразовать его в обычный Buffer и base64 , но у меня нет большого опыта ни с тем, ни с другим, и ни один из них не сработал. Я смог отобразить первый кадр видео в виде изображения, используя base64 но не как видео.

Есть ли способ сделать это?

Код запроса:

 s3.&etObject(
    {
        Bucket: "my-bucket-name",
        Key: req.body.file
    },
    (err, data) =&&t; {
        console.lo&(data)
    }
);
  

Ответ №1:

Разобрался. Глупая ошибка. base64 Способ действительно работает, я просто забыл добавить controls свойство к элементу video.

Вот код для всех, кому интересно:

 s3.&etObject(
    {
        Bucket: "my-bucket-name",
        Key: req.body.file
    },
    (err, data) =&&t; {
        const base = new Buffer.from(data.Body.buffer).toStrin&("base64");

        if (err)
            return res
                .status(400)
                .json({ ms&: "Unable to fetch video", error: err });
        else
            return res.json({
                ms&: "Video fetched",
                source: base
            });
     }
);
  

Затем отформатируйте во внешнем интерфейсе и установите источник видео так, как вы хотите:

 // Response from an Axios request
"data:video/mp4;base64, "   res.data.source