I want to make a live video streaming API and send the video buffer chunk data to an HTML. I am using rtsp URL. The chunk logic does not work. The video only plays for 5 seconds then stops.
index.js file
const express = require('express');
const ffmpeg = require('fluent-ffmpeg');
const fs = require('fs');
const path = require('path');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.sendFile(__dirname + "/index.html");
});
const rtspUrl = 'rtsp://zephyr.rtsp.stream/movie?streamKey=64fd08123635440e7adc17ba31de2036';
const chunkDuration = 5; // Duration of each chunk in seconds
app.get('/video', (req, res) => {
const outputDirectory = path.join(__dirname, 'chunks');
if (!fs.existsSync(outputDirectory)) {
fs.mkdirSync(outputDirectory);
}
const startTime = new Date().getTime();
const outputFileName = `chunk_${startTime}.mp4`;
const outputFilePath = path.join(outputDirectory, outputFileName);
const command = ffmpeg(rtspUrl)
.inputFormat('rtsp')
// .inputOptions(['-rtsp_transport tcp'])
.videoCodec('copy')
.output(outputFilePath)
.duration(chunkDuration)
.on('start', () => {
console.log(`start ${outputFileName}`);
})
.on('end', () => {
console.log(`Chunk ${outputFileName} saved`);
res.setHeader('Content-Type', 'video/mp4');
res.sendFile(outputFilePath, (err) => {
if (err) {
console.error('Error sending file:', err);
} else {
fs.unlinkSync(outputFilePath); // Delete the chunk after it's sent
}
});
})
.on('error', (error) => {
console.error('Error: ', error);
});
command.run();
});
app.listen(port, () => {
console.log(`API server is running on port ${port}`);
});
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Video Streaming With Node</title>
</head>
<body>
<video id="videoPlayer" width="50%" controls autoplay>
<source src="/video" type="video/mp4" />
Your browser does not support the video tag.
</video>
</body>
</html>
package.json
{
.....
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon index.js"
},
.....
}
Via Active questions tagged javascript - Stack Overflow https://ift.tt/ViXu012
Comments
Post a Comment