Поиск…


Использование fs И pipe Для потоковой передачи статических файлов с сервера

Хорошая услуга VOD (Video On Demand) должна начинаться с основ. Допустим, у вас есть каталог на вашем сервере, который не является общедоступным, но через какой-то портал или paywall вы хотите разрешить пользователям доступ к вашим медиа.

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

        });

Вышеприведенный фрагмент - это основной план того, как вы хотите передать свое видео клиенту. Логика блоков зависит от множества факторов, включая сетевой трафик и задержку. Важно балансировать размер патрона и количество.

Наконец, вызов .pipe позволяет узлу.js знать, что соединение открыто с сервером и при необходимости посылать дополнительные куски.

Потоковая передача с использованием fluent-ffmpeg

Вы также можете использовать flent-ffmpeg для преобразования файлов .mp4 в файлы .flv или другие типы:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow