Node.js
Wysyłanie strumienia plików do klienta
Szukaj…
Używanie fs i potoku do przesyłania strumieniowego plików statycznych z serwera
Dobra usługa VOD (Video On Demand) powinna zaczynać się od podstaw. Załóżmy, że masz na serwerze katalog, który nie jest publicznie dostępny, ale za pośrednictwem jakiegoś portalu lub zapory sieciowej chcesz umożliwić użytkownikom dostęp do twoich multimediów.
var movie = path.resolve('./public/' + req.params.filename);
fs.stat(movie, function (err, stats) {
var range = req.headers.range;
if (!range) {
return res.sendStatus(416);
}
//Chunk logic here
var positions = range.replace(/bytes=/, "").split("-");
var start = parseInt(positions[0], 10);
var total = stats.size;
var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
var chunksize = (end - start) + 1;
res.writeHead(206, {
'Transfer-Encoding': 'chunked',
"Content-Range": "bytes " + start + "-" + end + "/" + total,
"Accept-Ranges": "bytes",
"Content-Length": chunksize,
"Content-Type": mime.lookup(req.params.filename)
});
var stream = fs.createReadStream(movie, { start: start, end: end, autoClose: true })
.on('end', function () {
console.log('Stream Done');
})
.on("error", function (err) {
res.end(err);
})
.pipe(res, { end: true });
});
Powyższy fragment kodu stanowi podstawowy zarys tego, w jaki sposób chcesz przesyłać strumieniowo wideo do klienta. Logika porcji zależy od wielu czynników, w tym od ruchu sieciowego i opóźnień. Ważne jest zrównoważenie wielkości uchwytu w stosunku do ilości.
Wreszcie.
Streaming za pomocą płynnego ffmpeg
Możesz także użyć flent-ffmpeg do konwersji plików .mp4 na pliki .flv lub innych typów:
res.contentType („flv”);
var pathToMovie = './public/' + req.params.filename;
var proc = ffmpeg(pathToMovie)
.preset('flashvideo')
.on('end', function () {
console.log('Stream Done');
})
.on('error', function (err) {
console.log('an error happened: ' + err.message);
res.send(err.message);
})
.pipe(res, { end: true });
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow