Существует 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);
});
Правильно ли я понимаю, что нужен мидлвар по очистке отправляемого ответа.
Подскажите, каким образом его нужно чистить, и скорее всего он должен быть привязан к сессии.
Благодарю за помощь.