Node.js中两个子进程之间的管道



我试图用Node.js捕捉视频,并通过websockets发送到浏览器,使用MediaSource API播放。到目前为止,我在Firefox中工作,但在Chrome中无法正确解码。显然,从阅读这个问题,我需要使用sample_muxer程序来确保每个"集群"以关键帧开始。

下面是我使用的代码:
var ffmpeg = child_process.spawn("ffmpeg",[
    "-y",
    "-r", "30",
    "-f","dshow",           
    "-i","video=FFsource:audio=Stereo Mix (Realtek High Definition Audio)",
    "-vcodec", "libvpx",
    "-acodec", "libvorbis",
    "-threads", "0",
    "-b:v", "3300k",
    "-keyint_min", "150",
    "-g", "150",
    "-f", "webm",
    "-" // Output to STDOUT
]);
ffmpeg.stdout.on('data', function(data) {
    //socket.send(data); // Just sending the FFmpeg clusters works with Firefox's 
                         // implementation of the MediaSource API. No joy with Chrome.
    // - - - This is the part that doesn't work - - -
    var muxer = child_process.spawn("sample_muxer",[
        "-i", data, // This isn't correct...
        "-o", "-" // Output to STDOUT
    ]);
    muxer.stdout.on('data', function(muxdata) {
        socket.send(muxdata); // Send the cluster
    });
});
ffmpeg.stderr.on('data', function (data) {
    console.log("" + data); // Output to console
});

显然,我没有正确地管道它,我不确定我将如何,同时也包括参数。感谢任何帮助得到这个工作。谢谢!

sample_muxer程序接受-i参数作为文件名。它不能读取视频数据作为标准输入。要查看错误,您应该将错误流从sample_muxer发送到错误日志文件。

var muxer = child_process.spawn("sample_muxer",[
    "-i", data, // This isn't correct...
    "-o", "-" // Output to STDOUT
]);

此代码将导致https://code.google.com/p/webm/source/browse/sample_muxer.cpp?repo=libwebm#240

错误

您可以尝试从ffmpeg写入文件,然后从sample_muxer读取该文件。一旦工作,尝试使用FIFO文件将数据从ffmpeg管道到sample_muxer。

相关内容

  • 没有找到相关文章

最新更新