Zoeken…


Gebruik fs en pipe om statische bestanden van de server te streamen

Een goede VOD-service (Video On Demand) moet bij de basis beginnen. Laten we zeggen dat je een map op je server hebt die niet publiek toegankelijk is, maar via een soort portal of paywall wil je gebruikers toegang geven tot je media.

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

        });

Het bovenstaande fragment is een basisoverzicht voor hoe u uw video naar een client wilt streamen. De logica van de chunk is afhankelijk van verschillende factoren, waaronder netwerkverkeer en latentie. Het is belangrijk om de grootte van de boorkop in balans te brengen met de hoeveelheid.

Ten slotte laat de .pipe-oproep node.js weten een verbinding met de server open te houden en indien nodig extra chunks te verzenden.

Streaming met vloeiend-ffmpeg

U kunt ook flent-ffmpeg gebruiken om .mp4-bestanden naar .flv-bestanden of andere typen te converteren:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow