如标题所述,我希望每秒捕获60次屏幕并通过nodejs函数运行它。
npm
上的大多数库只保存到磁盘。
我尝试使用robotjs
截取屏幕截图,但只获得了11fps。
我尝试启动RTMP服务器并使用OBS但延迟了。
我在世界上做什么?
答案 0 :(得分:9)
您可以使用ffmpeg
达到60fps。请查看ffmpeg docs,了解更多详细信息。
const ffmpeg = require("ffmpeg-static").path;
const { spawn } = require("child_process");
const process = spawn(
ffmpeg,
["-probesize", "10M", "-f", "gdigrab", "-framerate", "60", "-i", "desktop", "-f", "flv", "-"],
{ stdio: "pipe" }
);
const stream = process.stdout;
这里有视频流。进行处理。
例如,您可以将流写入可写流
const { createWriteStream } = require("fs");
const file = createWriteStream("capture.flv");
stream.pipe(file);
或者您可以订阅大量数据并进行一些处理
stream.on("data", chunk => {
console.log(chunk);
});
的更多信息
此示例仅适用于Windows用户。 Mac和Linux用户应按照ffmpeg
文档中的说明更改用于产生该过程的ffmpeg
选项。
答案 1 :(得分:3)
您最好的选择可能是使用特定于平台的API创建一个执行捕获的本机进程,然后将其包装在NAN(节点的本机抽象:https://github.com/nodejs/nan)中。有一些学习曲线,但还不错。我已经建立了解码JPEG,对其进行处理以及以h.264进行编码的系统。
因为您可以在本机级别上控制捕获,所以可以创建任何您喜欢的界面来将屏幕抓图带入Node。例如,您可能要避免在本机javascript界面上封送图像,而是维护它们的句柄,而仅在需要时才拉图像。
然后,您可以将其全部转换为一个很酷的npm模块,并受到所有人的喜爱。