Recherche…


Utiliser fs et pipe Pour diffuser des fichiers statiques à partir du serveur

Un bon service VOD (Video On Demand) devrait commencer avec les bases. Disons que vous avez un répertoire sur votre serveur qui n'est pas accessible au public, mais par le biais d'une sorte de portail ou de paywall que vous souhaitez autoriser les utilisateurs à accéder à vos médias.

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 });

        });

L'extrait ci-dessus est une description de base de la manière dont vous souhaitez diffuser votre vidéo sur un client. La logique de segment dépend de divers facteurs, notamment du trafic réseau et de la latence. Il est important d'équilibrer la taille du mandrin par la quantité.

Enfin, l’appel .pipe permet à node.js de garder une connexion ouverte avec le serveur et d’envoyer des blocs supplémentaires si nécessaire.

Streaming Utilisation de ffmpeg fluide

Vous pouvez également utiliser flent-ffmpeg pour convertir des fichiers .mp4 en fichiers .flv ou d'autres types:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow