NodeJS – 正在下载的videostream

我正在编写一个程序,将stream式传输当前正在下载到驱动器上的video文件。 我遇到的问题似乎是让浏览器实际播放video。 该脚本监听文件的变化,然后stream其余的,但除了显示一个空白的video页面之外浏览器不做任何事情。

var fs = require('fs'), http = require('http'), filename = '/home/qrpike/Videos/topgears.mp4'; http.createServer(function (req, res) { console.log(req.url); if( req.url == '/video.mp4'){ res.writeHead(200,{ 'Content-Type' : 'video/mp4', 'Cache-Control' : 'public', 'Connection' : 'keep-alive', 'Content-Disposition' : 'inline; filename=topgears.mp4;', 'Content-Transfer-Encoding' : 'binary', 'Transfer-Encoding' : 'chunked' }); fs.open(filename, 'r', function(err, fd) { if (err) throw new Error('Could not open file'); var position = 0; fs.stat(filename, read); fs.watchFile(filename, read.bind(null, null)); function read(err, stat) { var delta = stat.size - position; if (delta <= 0) return; fs.read(fd, new Buffer(delta), 0, delta, position, function(err, bytes, buffer) { console.log("err", err, "bytes", bytes, "position",position,"delta",delta); res.write(buffer.toString('binary')); }); position = stat.size; } }); } }).listen(1337); console.log('Server running at http://127.0.0.1:1337/'); 

所以这个答案取决于增长文件 ,这在理论上是做你想要的。 我担心的是这个项目在两年内还没有做出承诺,所以我不知道它是否仍然有效。 这就是说,这对我本地工作(虽然我没有testingpipe道到video文件):

 var fs = require('fs'); var http = require('http'); var GrowingFile = require('growing-file'); var FILENAME = '/home/dave/Desktop/video/video.ogg'; var server = http.createServer(function(req, res) { var file; if (req.url === '/video.ogg') { res.writeHead(200, { 'Content-Type': 'video/ogg' }); file = GrowingFile.open(FILENAME); file.pipe(res); } else { res.statusCode = 404; res.end('Not Found'); } }); server.listen(1337);