Node.js,使用套接字io-stream

时间:2018-05-22 08:21:50

标签: node.js ffmpeg stream pipe output

很抱歉有一个重复的话题,但我现在已经搜索和试验了2天,但我还没有能够解决问题。

我尝试使用以下代码通过socket.io-stream每隔1秒向客户端直播图片:

var args = [
    "-i",
    "/dev/video0",
    "-s",
    "1280x720",
    "-qscale",
    1,
    "-vf",
    "fps=1",
    config.imagePath,
    "-s",
    config.imageStream.resolution[0],
    "-f",
    "image2pipe",
    "-qscale",
    1,
    "-vf",
    "fps=1",
    "pipe:1"
];
camera = spawn("avconv", args);    // avconv = ffmpeg

设置很好,进程成功写入stdout。我使用这个简化的代码捕获所有传出的图像数据:

var ss = require("socket.io-stream");
camera.stdout.on("data", function(data) {
    var stream = ss.createStream();
    ss(socket).emit("img", stream, "newImg");
    // how do i write the data-object to the stream?
    // fs.createReadStream(imagePath).pipe(stream);
});

&#34;插座&#34;来自客户端使用socket.io-package,没问题。所以我正在做的是我在stdout-pipe上听取&#34;数据&#34;事件。该数据将传递给上面的函数。这意味着在这个阶段&#34;数据&#34;不是一个流,它是一个&#34; <Buffer .. .. ..&#34; -object,因此我无法像之前使用注释的createReadStream语句一样流式传输它,我从磁盘读取图像。 如何将数据(此阶段的缓冲区)流式传输到客户端?我可以这样做,也许不使用socket.io-stream?&#34;数据&#34;只是整个图像的一部分,因此可能需要将两个或三个数据对象组合在一起以形成完整的图像。

我尝试使用&#34; stream.write(数据,&#34;二进制&#34;);&#34;它确实传输了Buffer-objects,问题是没有stream-event的结束,因此我不知道图像何时完成。我尝试注册到stdout.on&#34;关闭&#34;,&#34;结束&#34;,&#34;完成&#34;,没有任何触发器。我错过了什么吗?我是否过于复杂?我实现背后的原因是我需要为每个完整的图像创建一个新的流,是吗?

非常感谢!

0 个答案:

没有答案