Mon*_*nro 5 sockets video bittorrent node.js express
我正在开发一个个人项目,基本上需要一个磁铁链接,开始下载文件,然后在浏览器中显示洪流中的视频.我正在使用名为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'});
}
Run Code Online (Sandbox Code Playgroud)
客户端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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
形成:
<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">
Run Code Online (Sandbox Code Playgroud)
您可能对Torrent 流服务器感兴趣。它是一个同时下载和流式传输视频的服务器,因此您无需完全下载即可观看视频。它基于您正在探索的同一个torrent-stream库,并且具有您正在尝试实现的功能,因此它可能对您来说是一个很好的参考。
另外,我建议看一下webtorrent。这是一个很好的 torrent 库,可以在 NodeJs 和浏览器中运行,并且具有流支持。听起来不错,但根据我的经验,它在浏览器中没有很好的支持。
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |