Мне нужно передать видеофайл с другого URL через мой сервер и в браузер пользователя. Я видел этот код, но он написан на PHP:
$fp = fopen('http://example.com/video.mp4', "rb");
while (!feof($fp)) {
echo fread($fp, 1024 * 1024 * 2);
flush();
ob_flush();
}
fclose($fp);
Используя узел, я достиг чего-то вроде этого:
app.get('/proxy', async (req, res) => {
let _headers = {};
if (req.headers['range']) {
headers['Range'] = req.headers['range'];
}
const response = await axios.get('http://example.com/video.mp4', {
responseType: 'stream',
headers: _headers
});
const stream = response.data;
stream.on('data', chunk => {
res.status(response.status).write(chunk);
});
stream.on('end', () => {
res.end();
});
res.on('close', () => {
stream.destroy();
});
});
Есть ли лучший способ сделать это? Прямо сейчас я думаю, что файл полностью загружается на сервер, даже если пользователь закрывает свой браузер.
Пользователь, который загружает видео в браузер и изменяет временную шкалу видео, снова запускает ax ios .get и другой поток создано. Я не думаю, что это эффективно, но я не уверен.
Кроме того, я хотел бы ограничить количество отправляемых / скачиваемых байтов, как в PHP коде, он читает 2 МБ на чтение только.
По сути, мой вопрос заключается в том, какой самый эффективный способ передачи видео через прокси через мой сервер из другого источника пользователю.