Как транслировать видео.m4v с NodeJS

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

Итак, как я могу извлечь воспроизводимый видеофайл.m4v из файлов сервера (если я знаю путь) и отправить его клиенту angular.io для воспроизведения

1 ответ

Вот простое решение:

На стороне сервера:

app.get('/video', function(req, res) {
  const path = 'assets/sample.m4v'
  const stat = fs.statSync(path)
  const fileSize = stat.size
  const head = {
    'Content-Length': fileSize,
    'Content-Type': 'video/mp4',
  }
  res.writeHead(200, head)
  fs.createReadStream(path).pipe(res)
})

На стороне клиента (html):

<video id="videoPlayer" controls>
  <source src="http://localhost:3000/video" type="video/mp4">
</video>

Может быть, вы должны установить другой тип мультимедиа, например, video/x-m4v вместо video/mp4.

Ссылка на источник

Со мной этого было достаточно. MP4 имеет встроенную поддержку стримминга (псевдостриминга). Он отлично работал для просмотра видео в браузере в потоковом режиме.

const router    = require('express').Router();
...
router.get('/video/:acckey', async (req, res, next)=>{
  ...
  let full_path = await myAccessControl.auth(acckey);
  ...
  if (fs.existsSync(full_path)) {
    res.setHeader('Content-Type', 'video/mp4');
    res.status(200).sendFile(full_path, function (err) {
      if (err) {...} else {...}
    });    
  }    
}

В HTML (сокращено):

<VIDEO controls src="domain.com/video/PSMAPKMDPAMDPSMPSD/">
Другие вопросы по тегам