gpt4 book ai didi

node.js - 如何关闭从实时捕获源主动流式传输的 Node.js FFMPEG 子进程?

转载 作者:搜寻专家 更新时间:2023-10-31 23:49:24 26 4
gpt4 key购买 nike

我是 Node.js 的新手,并且已经弄清楚如何利用 child.spawn 来启动一个 FFMPEG 实例,该实例用于捕获实时视频并通过 rtmp 将其发送到 Adob​​e Media Server。

我见过的每个 FFMPEG 与 Node.js 结合使用的示例都是有时间限制的示例,因此一旦 FFMPEG 到达正在转换的文件末尾,子进程就会关闭。

在这种情况下,没有“文件结尾”。

如果我实例化:

    var ffmpeg = child.spawn('ffmpeg.exe', [args]);

它创建实时提要。

我试过立即关闭子进程:

    setTimeout(function() {
ffmpeg.stdin.resume();
ffmpeg.stdin.write('insert command to echo q to close FFMPEG');
ffmpeg.stdin.end();
});

但是,这似乎不起作用。我继续在我的测试盒上看到我的 rtmp 源。

有没有办法通过 Node.js 中的标准输入向 FFMPEG 传递关闭命令?

提前致谢!

瑞克

最佳答案

以下代码由我的主 app.js 作为模块使用 child_process.fork() 方法加载:

    var spawn = require('child_process').spawn;

var ffmpeg = spawn('C:\\Program Files (x86)\\ffmpeg\\bin\\ffmpeg.exe', ['-y', '-threads', '-0', '-re', '-rtbufsize', '204800000', '-probesize', '4096', '-vsync', '2', '-async', '30', '-f', 'dshow', '-s', '320x240', '-i', 'video=Integrated Webcam:audio=Microphone Array (IDT High Defi', '-c:a', 'libvo_aacenc', '-ab', '48000', '-ar', '22050', '-ac', '2', '-c:v', 'libx264', '-s', '400x300', '-g', '96', '-x264opts', 'bitrate=1200', '-preset', 'ultrafast', '-profile:v', 'baseline', '-pix_fmt', 'yuv420p', '-aspect', '4:3', '-f', 'flv', 'rtmp://server']);

setTimeout(function() {
ffmpeg.stderr.on('data', function() {
ffmpeg.stdin.setEncoding('utf8');
ffmpeg.stdin.write('q');
process.exit();
});
}, 10000);

它远没有我做的那么复杂。主要的 app.js 是一个基本的 HTML 页面,它被提供并使用 socket.io 来接收事件及其相应的数据。在这种情况下,“true”事件加载 module.js 文件,该文件启动 FFMPEG 的实时捕获 session ,将其提供给 RTMP 服务器,并在 10 秒超时时优雅地关闭 FFMPEG。

我的下一个任务是通过从 Web 界面触发的事件将其关闭,而不是当前的超时测试方法。

查看 Windows 中的任务管理器,FFMPEG 进程和辅助 Node 进程一样关闭。

这是因为我发现的所有 node-ffmpeg 模块都不支持通过捕获输入进行直播。它们似乎主要用于转码现有内容。理想情况下,最终结果将是一个可以启动和停止 FFMPEG 的基于 Web 的界面。我们的用例将取代 Adob​​e Flash Media Live Encoder 作为我们的 Adob​​e Media Server 的来源,因为它无法保存标准的 mp4 文件。

关于node.js - 如何关闭从实时捕获源主动流式传输的 Node.js FFMPEG 子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14204174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com