我使用navigator.webkitGetUserMedia
捕获窗口每秒一次被指派返回stream
到<video>
并将其复制到<canvas>
并保存在缓冲区中的文件的截图。降低CPU占用率(电子:DesktopCapturer)
我的应用程序中的CPU使用率始终很高,我已将其指向此区域。
代码
// Initialize the video, canvas, and ctx
var localStream,
_video = document.querySelector('#video'),
_canvas = document.querySelector('#canvas'),
_ctx = _canvas.getContext('2d'),
sourceName = 'my-window-id';
// Load the stream from navigator.webkitGetUserMedia
navigator.webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sourceName,
minWidth: 1920,
maxWidth: 1920,
minHeight: 1080,
maxHeight: 1080
}
}
}, gotStream, getUserMediaError);
function gotStream(stream) {
// Use the stream in our <video>
_video.src = window.URL.createObjectURL(stream);
// Reference the stream locally
localStream = stream;
}
function captureState() {
var buffer,
dataURL;
// Draw <video> to <canvas> and convert to buffer (image data)
_ctx.drawImage(_video, 0, 0);
dataURL = _canvas.toDataURL('image/png');
buffer = new Buffer(dataURL.split(",")[1], 'base64');
// Create an image from the data
fs.writeFileSync('screenshot.png', buffer);
}
// Capture state every second
setInterval(function() {
captureState();
}, 1000);
此代码我不跑,这是什么,我在我的代码的简化版本,使其StackOverflow的可读性。
事情需要的时候我已经试过
_video.pause()
和_video.play()
。似乎没有改变CPU使用率。_video.stop()
。这意味着我将不得不重新获得流,导致CPU使用率的上升比保持开放更糟。
我最好的铅,现在是通过向更改帧速率:
optional: [
{ minFrameRate: 1 },
{ frameRate: 1 }
]
极低的帧速率将被罚款。但是,我无法确定frameRate
设置是否适用于这种情况。 The docs没有它列出,我没有新的mediaDevices.getUserMedia
可用。
是否有可能为navigator.webkitGetUserMedia
设置极低的帧率(或任何)?
有没有人能够以任何其他方式减少流的CPU使用率?
实现相同目标(间隔状态捕获)的任何替代方法也将有所帮助。
谢谢!
旁注
这在使用DesktopCapturer获得chromeMediaSourceId
Windows上的电子应用。
CPU使用率更新
- 运行
stream
成本:6%的CPU使用率 - 要求每1000毫秒
captureState
:5%的CPU使用率
总电流:11 %
Cu根据Csaba Toth的建议,正在努力减少#2。我应该可以通过改变画布的抓取方式来减少captureState
。完成后会更新。
对于#1,如果我无法避免捕获视频流,我将不得不通过优化#2来限制总CPU使用率超过6%。
你有什么类型的CPU? 6%+ 5%不一定太糟糕恕我直言。如果它是6-8核心,那么会完全消耗一个核心。不要指望完全消除#2。也许这是一个好主意,看看是否有可能在没有视频流的情况下进行截图。 –
i5-6500。不,它不是很糟糕,现在看起来还在运行。由于另一个原因,我之前使用了多个流,但找到了解决方法,现在只需要一个流。如果我能让它保持在10%以下,我会很高兴,我认为你的下面的建议应该让我在那里。 – Matt