Я создал back-end (используя node.js) и onsite-server (используя node.js).Обслуживание на месте, имеющее rtsp, сохранение видео с камеры на сервере.Внутренний сервер соединяется с локальным сервером с помощью веб-сокета и отправляет много запросов на локальный сервер для видеопотока.
Но если я отправил много запросов на локальный веб-сокет сервера, он зависает, и видеопоток очень медленный.
**Back-end code -**
/**
* @desc - Listen the get video request
* @param {object} req - hold request object
* @param {object} res - hold response object
*/
loadVideo: function (req, res) {
let { storeId, video, size, camId, dir } = req.params;
let range = req.headers.range;
let parts = range ? range.replace(/bytes=/, "").split("-") : [0];
let start = parseInt(parts[0], 10);
let end = start + consts.defaultChunkSize < size - 1 ? start + consts.defaultChunkSize : size - 1;
//"5c3847754e9e0f38f4e6607c"
// console.log({ action: 'loadTimeLineVideo', data: { storeId: storeId, dir: dir, camId: camId, start: start, end: end, video: video, size: size } })
ws.Send({ action: 'loadTimeLineVideo', data: { storeId: storeId, dir: dir, camId: camId, start: start, end: end, video: video, size: size } });
let videoResponseHandler = (response) => {
//streamifier.createReadStream(_Response).pipe(res);
let file = streamifier.createReadStream(response);
let chunksize = (end - start) + 1
let head = {
'Content-Range': `bytes ${start}-${end}/${size}`,
'Accept-Ranges': 'bytes',
'Content-Length': chunksize,
'Content-Type': 'video/mp4',
}
res.writeHead(206, head)
file.pipe(res);
};
eventEmitter.once('videoResponse', videoResponseHandler);
},
**Onsite-server code -**
let { start, end, video, size } = data,
path = `${videoPath}\\${data.camId}\\${data.dir}\\${video}`;
if (!fs.existsSync(path)) {
path = `${videoPath}/NoVideoAvailable.mp4`;
}
var currentDate = moment();
console.log("Read Start " + currentDate);
var fileStream = fs.createReadStream(path, { start, end, highWaterMark: 512 * 1024 });
fileStream.on('end', function () {
console.log("Read End Stream: Current Time: " + moment().format("YYYY-MM-DD hh:mm:ss") + " Diff: " + moment().diff(currentDate, 'seconds'))
})
fileStream.pipe(request.post(util.getServerUrl + "/api/reponseTimelineVideo")).on('end', function () {
console.log("Read End: Current Time: " + moment().format("YYYY-MM-DD hh:mm:ss") + " Diff: " + moment().diff(currentDate, 'seconds'))
});