Suche…


Mit fs und pipe statische Dateien vom Server streamen

Ein guter VOD-Dienst (Video On Demand) sollte mit den Grundlagen beginnen. Angenommen, Sie haben ein Verzeichnis auf Ihrem Server, auf das nicht öffentlich zugegriffen werden kann. Sie möchten jedoch über eine Art Portal oder Paywall den Benutzern den Zugriff auf Ihre Medien ermöglichen.

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

        });

Das obige Snippet enthält eine grundlegende Übersicht darüber, wie Sie Ihr Video an einen Client streamen möchten. Die Chunk-Logik hängt von verschiedenen Faktoren ab, einschließlich Netzwerkverkehr und Latenz. Es ist wichtig, die Futtergröße gegen die Quantität abzuwägen.

Schließlich kann der .pipe-Aufruf node.js wissen, dass er eine Verbindung zum Server aufrechterhalten und bei Bedarf weitere Chunks senden soll.

Streaming mit fluent-ffmpeg

Sie können flent-ffmpeg auch zum Konvertieren von .mp4-Dateien in .flv-Dateien oder andere Typen verwenden:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow