Проблемы потоковой передачи MP4 с Webtorrent

Я использую Node Server, на котором я хочу транслировать видео по магнитным ссылкам, использующим WebTorrent ( https://webtorrent.io/docs). Когда я запускаю это, создается впечатление, что на файл неправильно ссылаются, хотя я установил переменную в качестве файла.mp4.

Просто чтобы прояснить, я добавил данный torrentID(магнитная ссылка) в этом примере, чтобы устранить любые проблемы, которые могут возникнуть у меня с Express и URL-адресами. Эта магнитная ссылка ведет к загрузке музыкального видео в формате MP4.

Видеопроигрыватель появляется, но видео не воспроизводится. Я предполагаю, что это означает, что я не пытаюсь получить доступ к правильному файлу. Если вам нужно узнать больше о WebTorrent, чтобы помочь мне, вы можете прочитать об этом по адресу https://webtorrent.io/docs

var fs = require("fs"),
    http = require("http"),
    url = require("url"),
    path = require("path"),
    request = require('request'),
    host = '127.0.0.1',
    port = 3000,
    express = require("express"),
    app = express(),
    server = http.createServer(app),
    WebTorrent = require('webtorrent'),
    client = new WebTorrent();

app.get('/streamvid/:magLink', function(req, res){
    //var torrentID = req.params.magLink;
    var torrentID = 'magnet:?xt=urn:btih:84123E8B4E850A796403736E0CF02E409F0EF00B';


    client.add(torrentID, function (torrent) {  
        var file = torrent.files[0]
        file.name = 'movie.mp4';
        if (req.url != "/movie.mp4") {
            res.writeHead(200, { "Content-Type": "text/html" });
            res.end('<video width="1024" height="768" controls> <source src="movie.mp4" type="video/mp4"> <source src="movie.ogg" type="video/ogg"> Your browser does not support the video tag. </video>');
        } else {
            var range = req.headers.range;
            var positions = range.replace(/bytes=/, "").split("-");
            var start = parseInt(positions[0], 10);

        fs.stat(file, function(err, stats) {
            var total = stats.size;
            var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
            var chunksize = (end - start) + 1;

        res.writeHead(206, {
            "Content-Range": "bytes " + start + "-" + end + "/" + total,
            "Accept-Ranges": "bytes",
            "Content-Length": chunksize,
            "Content-Type": "video/mp4"
        });

        var stream = fs.createReadStream(file, { start: start, end: end })
            .on("open", function() {
                stream.pipe(res);
            }).on("error", function(err) {
                res.end(err);
            });
        });
     }
     })
});

var server = http.createServer(app);

var server = app.listen(port, host);

server.on('error', function(err) {
    console.log('error:' + err);
});

server.on('listening', function(){
    console.log('Server is Up and Running');
});

1 ответ

Вам нужно либо передать данные файла, прочитав его.

var readFile = fs.createReadStream("path/to/movie.mp4");
readFile.pipe(res);

Или файл в публичном маршруте. app.use(express.static('public')) и поместите файл movie.mp4 в папку public/. Затем в вашем src создайте полную ссылку. http://localhost:3000/movie.mp4,

Другие вопросы по тегам