Node.js 通过nodejs传输图像
我一直在研究一个解决方案,它可以将一系列jpg流式传输到客户端,并将它们作为视频显示。这是为了在全景演示中避免iPad上的自动播放问题。我们不需要音频,所以我试着研究MJPEG,但由于浏览器从不缓存流,这不是一个可行的解决方案,尽管它在客户端上的性能非常好 你们有谁遇到过类似的事情吗?你们解决了吗?在这一点上,我有点痴迷于让它工作 到目前为止,node.js MJPEG流媒体服务器的外观如下所示:Node.js 通过nodejs传输图像,node.js,mjpeg,Node.js,Mjpeg,我一直在研究一个解决方案,它可以将一系列jpg流式传输到客户端,并将它们作为视频显示。这是为了在全景演示中避免iPad上的自动播放问题。我们不需要音频,所以我试着研究MJPEG,但由于浏览器从不缓存流,这不是一个可行的解决方案,尽管它在客户端上的性能非常好 你们有谁遇到过类似的事情吗?你们解决了吗?在这一点上,我有点痴迷于让它工作 到目前为止,node.js MJPEG流媒体服务器的外观如下所示: var express = require('express'), fs = requir
var express = require('express'),
fs = require('fs'),
http = require('http');
var app = express();
var server = http.createServer(app);
// Routes
app.use(express.static('app'));
app.get(/\.(mjpeg)$/i, function(request, res) {
var path = res.req._parsedOriginalUrl.path,
string = path.replace(/.*\\|\..*$/g, ''),
name = string.replace('/', '');
var files = fs.readdirSync('app/assets/streams/' + name + '/');
res.writeHead(200, {
'Content-Type': 'multipart/x-mixed-replace; boundary=myboundary',
'Cache-Control': 'no-cache',
'Connection': 'close',
'Pragma': 'no-cache'
});
var i = 1, id;
var stop = false;
res.connection.on('close', function() { stop = true; });
var send_next = function () {
if (stop)
return;
i = (i + 1);
// Increment with zero based number padding. (SO: ignore this, implementation specific)
if (i < 100 && i >= 10)
id = '0' + i;
else if (i < 10)
id = '00' + i;
else
id = i;
var filename = id + '.jpg';
//console.log(i, id, 'file length:', files.length, 'Path: app/assets/streams/' + name + '/' + filename);
fs.readFile('app/assets/streams/' + name + '/' + filename, function (err, content) {
res.write("--myboundary\r\n");
res.write("Content-Type: image/jpeg\r\n");
res.write("Content-Length: " + content.length + "\r\n");
res.write("\r\n");
res.write(content, 'binary');
res.write("\r\n");
// Start next in stream
setTimeout(send_next, 42);
});
// If we're at the end, reset current stream.
if (i === files.length) i = 1;
};
send_next();
});
// Setup
var port = process.env.PORT || 5000;
server.listen(port, function() {
console.log('Listening on ' + port);
});
我知道有几个优化可以在代码中完成,但它只是为了演示的目的
编辑:我正在寻找一种解决方案,它可以提供400帧~20kb的数据,可能是base64编码的字符串,然后我可以在客户端缓存这些数据,并以连续循环的方式传输。好奇是否有其他人解决了类似的问题,以及如何解决。那么,你的问题是什么?如何通过node.js传输100MB,或者如何在iPhone上10秒内显示400幅图像?这些问题需要单独讨论,因为它们根本不相关。我不觉得它们是不相关的问题,但我想这是公平的。人们可以很容易地构建一系列图像并循环它们,但我要寻找的是如何最好地为这些图像提供服务。有帮助吗标准http协议通常要求请求包含一个文件,因此我建议您使用socket.io而不是传统的http。通过套接字发送文件可以通过多种方式实现,例如使用传递:。另外,我在这方面没有经验,所以不要把我的话当作理所当然。我现在正在研究socket.io。我不知道Delivery.js,谢谢!