Потоковое видео с S3 с Express / NodeJS для воспроизведения в Safari - PullRequest
1 голос
/ 18 июня 2019

Я использую шифрование SSE-C для файлов S3, поэтому при воспроизведении видео я пересылаю запрос на S3 через сервер, правильно добавляя параметры.

export default async function(req, res) {
  const {userid, fileid} = req.params;
  console.log(userid, fileid);
  const params = {
    Bucket: process.env.AWS_BUCKET,
    Key: `users/${userid}/notes/${fileid}`,
    SSECustomerKey: process.env.AWS_SSE_KEY,
    SSECustomerAlgorithm: "AES256"
  };

  s3.getObject(params)
    .on("httpHeaders", function(statusCode, headers) {
      console.log(headers);
      res.set("Content-Length", headers["content-length"]);
      res.set("Content-Type", headers["content-type"]);
      res.set("Accept-Ranges", "bytes");
      this.response.httpResponse.createUnbufferedStream().pipe(res);
    })
    .send();
}

Хотя это нормально работает с видео-тегом HTML5 в Chrome / Firefox, в Safari это не работает, поскольку возвращаемое значение Content-Type равно application/octet-stream (найден похожий вопрос Почему Safari не воспроизводит файл без расширения в )

Я попытался сбросить Content-Type вручную на правильный video/quicktime или video/mp4 в зависимости от файла, но это не помогает.

Я также пытался установить Content-Ranges вручную, но эта информация не возвращается с S3 (или я что-то упускаю), так что это тоже не помогло.

Это вообще возможно достичь? Чего мне не хватает?

...