Ricerca…


Utilizzo di fs And pipe per il flusso di file statici dal server

Un buon servizio VOD (Video On Demand) dovrebbe iniziare con le basi. Diciamo che hai una directory sul tuo server che non è pubblicamente accessibile, ma attraverso una sorta di portale o paywall vuoi consentire agli utenti di accedere ai tuoi file multimediali.

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

        });

Il frammento di cui sopra è uno schema di base per il modo in cui desideri trasmettere il tuo video in streaming a un cliente. La logica del blocco dipende da una varietà di fattori, tra cui il traffico di rete e la latenza. È importante bilanciare le dimensioni del mandrino rispetto alla quantità.

Infine, la chiamata .pipe consente a node.js di mantenere aperta una connessione con il server e di inviare chunk aggiuntivi, se necessario.

Streaming Utilizzando fluent-ffmpeg

Puoi anche usare flent-ffmpeg per convertire i file .mp4 in file .flv o altri tipi:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow