/ / Faster MediaStream ImageCapture (Lesen des Medienstroms als Puffer in NodeJS) - Node.JS, Leistung, Elektron, Bilderfassung, Mediastream

Schnellerer MediaStream ImageCapture (Lesen des Medienstroms als Puffer in nodejs) - node.js, Leistung, Elektron, Bilderfassung, Mediastream

Bearbeiten: Ich muss das tun Leben. Ich kann es kaum erwarten, bis der Stream endet.

Ich bekomme MediaStream Objekt von Elektron "s desktopCapturer:

navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: "desktop",
chromeMediaSourceId: source.id,
minWidth: 800,
maxWidth: 800,
minHeight: 800,
maxHeight: 800,
},
},
})
.then((stream) => {

Ich versuche, Knoten zu bekommen Buffer von einem Standbild mit ImageCapture:

  const track = stream.getVideoTracks()[0];
const capturedImage = new ImageCapture(track);

capturedImage // This takes 200ms for 1000x1000
.takePhoto()
.then(blob => {
toBuffer(blob, function (err, buffer) { // 1.5 ms
if (err) throw err;
// TODO: Do some opencv magic with node buffer
});
})
.catch(error => console.error("takePhoto() error:", error));

Aber es dauert furchtbar lange takePhoto. Ist es möglich, den Prozess zu beschleunigen? Kann ich irgendwie auf die zugreifen? MediaStream direkt in nodejs?

Antworten:

2 für die Antwort № 1

Dies ist, was ich getan habe. Es ist wirklich sehr performant.

}).then((stream) => {
const video = document.createElement("video");
video.srcObject = stream;
video.onloadedmetadata = () => {
video.play();
setInterval(() => {
const canvas = document.createElement("canvas");
canvas.getContext("2d").drawImage(video, 0, 0, 800, 800);
canvas.toBlob(blob => {
toBuffer(blob, function (err, buffer) {
if (err) throw err;
// do some magic with buffer
});
});
}, 40);
};