Доступ к пикселям видеопотока с веб-камеры (JS / WebRTC / MediaStreamTrack)

Я попробовал быструю и простую вещь:

У меня есть два пакета -> app.gui и app.login

. В моем классе входа я использую mainview.fxml из app.gui, поэтому я сделал это в login.fxml

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("../gui/MainView.fxml"));

И он работает:)

1
задан jib 6 March 2019 в 19:09
поделиться

1 ответ

Есть ли какой-нибудь способ получить более прямой доступ к видеоконтенту MediaStreamTrack?

Не в реальном времени, нет. W3C обсуждал добавление такого API в рабочих, но сегодня его не существует.

API-интерфейс MediaRecorder приближается: он может предоставлять вам большие двоичные данные с интервалом в несколько миллисекунд (см. start (timeslice) ), но не в реальном времени.

Это кажется очень неэффективным ...

Современные браузеры имеют фоновые потоки, которые выполняют тяжелую работу, например, уменьшение масштаба, поэтому я бы предостерег от преждевременной оптимизации. В общем, вещи замедляются только тогда, когда биты массово открываются для основного потока JavaScript. Поэтому я меньше беспокоюсь о разрешении вашей камеры, чем о размере вашего холста.

Если вам нужно всего несколько пикселей для яркости, сделайте ваш холст очень маленьким. Накладные расходы должны быть низкими. Например, :

video.srcObject = await navigator.mediaDevices.getUserMedia({video: true});
await new Promise(r => video.onloadedmetadata = r);
const ctx = canvas.getContext('2d');
requestAnimationFrame(function loop() {
  ctx.drawImage(video, 0, 0, 16, 12);
  requestAnimationFrame(loop);
});
<canvas id="canvas" width="16" height="12"></canvas>

Если все еще возникают проблемы, я бы уменьшил частоту кадров.

0
ответ дан jib 6 March 2019 в 19:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: