lkmrus
@lkmrus
IT-engineer

Как отправить(express) и получить(vuejs) видео на js правильно?

Существует 2 проблемы при отправке видео файлов с сервера на express.js на фронтент на vue.js.
1. На фронтенде при получении видео приходится ждать пока полностью прогрузится видео, чтобы он начало воспроизводится, а нужно чтобы в процессе получения воспроизводилось.
Прошу подсказать как реализовать разбитие пришедшего видео на чанки.
Сейчас реализовано так:
async selectVideo(day){
                this.videoz=[
                        await (await (await fetch(`http://${this.host}:3000/api/play`, 
                    { 
                        method: 'POST',  
                        headers: {'Accept': 'application/json', 'Content-Type': 'application/json'},
                        body: JSON.stringify({data: day })
                    }))).arrayBuffer()
                ]
                this.$refs.videoRef.src = `${URL.createObjectURL(new Blob(this.videoz))}`;
            },


2. Вторая проблема при отправки видео, приходит post запрос с параметрами за какой день выбрать видео, матчится имя файла и отправляется видео. Видео отправляется, но если выбрать на фронте видео за другой день, то это вызовет ошибку:
Emitted 'error' event on ReadStream instance at:
    at internal/fs/streams.js:147:14
    at FSReqCallback.oncomplete (fs.js:164:23) {
  errno: -5,
  code: 'EIO',
  syscall: 'open',
  path: '/mnt/mail/videos/cam5_vid_19-11-2020_12-43-52_320x240.mp4'
}

Код отправки:
router.post('/play', async function(req, res, next) {
// ...
const mimetype = mime.getType(pathToVideo);
    readStream = await fs.createReadStream(pathToVideo);
    res.setHeader('Content-type', mimetype);
readStream.on('open', async function (err) {
      console.log('error ' + err);
      readStream.pipe(res);
    });

Правильно ли я понимаю, что нужен мидлвар по очистке отправляемого ответа.
Подскажите, каким образом его нужно чистить, и скорее всего он должен быть привязан к сессии.
Благодарю за помощь.
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы