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