Node.js Express/torrent stream:从流中写入文件,使用url向客户端发送套接字,但客户端找不到文件

Node.js Express/torrent stream:从流中写入文件,使用url向客户端发送套接字,但客户端找不到文件,node.js,sockets,video,express,bittorrent,Node.js,Sockets,Video,Express,Bittorrent,我正在做一个个人项目,它基本上需要一个磁铁链接,开始下载文件,然后在浏览器的torrent中呈现视频。我正在使用一个名为torrent stream的npm模块来完成大部分工作。创建可读流并开始写入文件后,我希望使用视频url向客户端发送套接字消息,以便客户端可以呈现html5视频元素并开始流式传输视频 我遇到的问题是,一旦客户端渲染视频元素并尝试查找源mp4,我就会在视频文件中发现404错误。如果您对此有任何建议,我们将不胜感激。:) 控制器功能: uploadVideo: function

我正在做一个个人项目,它基本上需要一个磁铁链接,开始下载文件,然后在浏览器的torrent中呈现视频。我正在使用一个名为torrent stream的npm模块来完成大部分工作。创建可读流并开始写入文件后,我希望使用视频url向客户端发送套接字消息,以便客户端可以呈现html5视频元素并开始流式传输视频

我遇到的问题是,一旦客户端渲染视频元素并尝试查找源mp4,我就会在视频文件中发现404错误。如果您对此有任何建议,我们将不胜感激。:)

控制器功能:

uploadVideo: function (req, res) {
    var torrentStream = require('torrent-stream');
    var mkdirp = require('mkdirp');

    var rootPath = process.cwd();
    var magnetLink = req.param('magnet_link');
    var fs = require('fs');
    var engine = torrentStream(magnetLink);

    engine.on('ready', function() {
        engine.files.forEach(function(file) {
            var fileName = file.name;
            var filePath = file.path;
            console.log(fileName + ' - ' + filePath);
            var stream = file.createReadStream();

            mkdirp(rootPath + '/assets/videos/' + fileName, function (err) {
                if (err) {
                    console.log(err);
                } else {
                    var videoPath = rootPath + '/assets/videos/' + fileName + '/video.mp4';
                    var writer = fs.createWriteStream(videoPath);
                    var videoSent = false;

                    stream.on('data', function (data) {
                        writer.write(data);
                        if (!videoSent) {
                            fs.exists(videoPath, function(exists) {
                                if (exists) {
                                    sails.sockets.broadcast(req.param('room'), 'video_ready', {videoPath: '/videos/' + fileName + '/video.mp4'});
                                    videoSent = true;
                                }
                            });
                        }
                    });
                    // stream is readable stream to containing the file content
                }
            });
        });
    });

    res.json({status: 'downloading'});
}
客户端javascript:

$(document).ready(function () {
io.socket.on('connect', function () {
    console.log('mrah');
    io.socket.get('/join', {roomName: 'cowboybebop'});

    io.socket.on('message', function (data) {
        console.log(data);
    });

    io.socket.on('video_ready', function (data) {
        var video = $('<video width="320" height="240" controls>\
          <source src="' + data.videoPath + '" type="video/mp4">\
        Your browser does not support the video tag.\
        </video>');
        $('body').append(video);
    });
});

$('form').submit(function (e) {
    e.preventDefault();
    var formData = $(this).serialize();
    $.ajax({
        url: '/upload-torrent',
        method: 'POST',
        data: formData
    }).success(function (data) {
        console.log(data);
    }).error(function (err) {
        console.log(err);
    });
});
});
$(文档).ready(函数(){
io.socket.on('connect',function(){
console.log('mrah');
get('/join',{roomName:'cowboybebebebop'});
io.socket.on('message',函数(数据){
控制台日志(数据);
});
io.socket.on('video_ready',函数(数据){
var video=$('\
\
您的浏览器不支持视频标记\
');
$('body')。追加(视频);
});
});
$('form')。提交(函数(e){
e、 预防默认值();
var formData=$(this.serialize();
$.ajax({
url:“/upload torrent”,
方法:“POST”,
数据:formData
}).成功(功能(数据){
控制台日志(数据);
}).error(函数(err){
控制台日志(err);
});
});
});
表格:


您可能会感兴趣。它是一个同时下载和流式传输视频的服务器,因此您可以在不完全下载视频的情况下观看视频。它基于您正在探索的同一个库,并且在功能上您正在尝试实现它,因此它可能是您的一个很好的参考


另外,我建议看一看。这是一个很好的torrent库,可以在NodeJs和browser中工作,并且支持流媒体。听起来不错,但根据我的经验,它在浏览器中没有很好的支持。

我也面临类似的问题,您找到解决方案了吗
<form action="/upload-torrent" method="POST">
<input name="magnet_link" type="text" value="magnet:?xt=urn:btih:565DB305A27FFB321FCC7B064AFD7BD73AEDDA2B&dn=bbb_sunflower_1080p_60fps_normal.mp4&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.publicbt.com%3a80%2fannounce&ws=http%3a%2f%2fdistribution.bbb3d.renderfarming.net%2fvideo%2fmp4%2fbbb_sunflower_1080p_60fps_normal.mp4"/>
<input type="hidden" name="room" value="cowboybebop">
<input type="submit" value="Link Torrent">