49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
const express = require('express');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const app = express();
|
|
const PORT = 3000;
|
|
|
|
// Путь к видеофайлу
|
|
const videoPath = path.join(__dirname, 'movie.mp4'); // Замените 'movie.mp4' на ваш фильм
|
|
const serverStartTime = Date.now(); // Время запуска сервера
|
|
|
|
// Маршрут для главной страницы
|
|
app.use('/', express.static(path.join(__dirname, '')));
|
|
|
|
// Маршрут для видео
|
|
app.get('/video', (req, res) => {
|
|
const range = req.headers.range;
|
|
if (!range) {
|
|
return res.status(400).send('Requires Range header');
|
|
}
|
|
|
|
const videoSize = fs.statSync(videoPath).size;
|
|
const CHUNK_SIZE = 10 ** 6; // 1MB
|
|
const start = Number(range.replace(/\D/g, ''));
|
|
const end = Math.min(start + CHUNK_SIZE, videoSize - 1);
|
|
|
|
const videoStream = fs.createReadStream(videoPath, { start, end });
|
|
|
|
res.writeHead(206, {
|
|
'Content-Range': `bytes ${start}-${end}/${videoSize}`,
|
|
'Accept-Ranges': 'bytes',
|
|
'Content-Length': end - start + 1,
|
|
'Content-Type': 'video/mp4',
|
|
});
|
|
|
|
videoStream.pipe(res);
|
|
});
|
|
|
|
// API для получения текущего времени воспроизведения
|
|
app.get('/current-time', (req, res) => {
|
|
const elapsedTime = (Date.now() - serverStartTime) / 1000; // Время с момента запуска сервера в секундах
|
|
res.json({ currentTime: elapsedTime });
|
|
});
|
|
|
|
// Запуск сервера
|
|
app.listen(PORT, '0.0.0.0', () => {
|
|
console.log(`Server is running on http://localhost:${PORT}`);
|
|
});
|