Node.js 通过nodejs传输图像

Node.js 通过nodejs传输图像,node.js,mjpeg,Node.js,Mjpeg,我一直在研究一个解决方案,它可以将一系列jpg流式传输到客户端,并将它们作为视频显示。这是为了在全景演示中避免iPad上的自动播放问题。我们不需要音频,所以我试着研究MJPEG,但由于浏览器从不缓存流,这不是一个可行的解决方案,尽管它在客户端上的性能非常好 你们有谁遇到过类似的事情吗?你们解决了吗?在这一点上,我有点痴迷于让它工作 到目前为止,node.js MJPEG流媒体服务器的外观如下所示: var express = require('express'), fs = requir

我一直在研究一个解决方案,它可以将一系列jpg流式传输到客户端,并将它们作为视频显示。这是为了在全景演示中避免iPad上的自动播放问题。我们不需要音频,所以我试着研究MJPEG,但由于浏览器从不缓存流,这不是一个可行的解决方案,尽管它在客户端上的性能非常好

你们有谁遇到过类似的事情吗?你们解决了吗?在这一点上,我有点痴迷于让它工作

到目前为止,node.js MJPEG流媒体服务器的外观如下所示:

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,谢谢!