Коснитесь экрана, чтобы активировать автофокус с помощью getUserMedia - PullRequest
0 голосов
/ 12 февраля 2020

API с getUserMedia очень полезен для создания видеопотока внутри браузера / внутри страницы HTML5, см., Например, https://www.html5rocks.com/en/tutorials/getusermedia/intro/ или https://simpl.info/getusermedia/sources/ .

Как из этого API запустить автофокусировку камеры (смартфона) при нажатии на видеоэкран?

Это действительно обычное поведение в почти все приложения камеры смартфона.

Я не нашел ничего о "фокусе" в документации API MediaDevices.getUserMedia()

1 Ответ

2 голосов
/ 18 февраля 2020

Это невозможно прямо сейчас, но возможно в ближайшем будущем. Вам следует взглянуть на Рабочий вариант захвата изображений MediaStream . В этой статье c описываются дополнительные параметры для .applyConstraints, первоначально представленные в Захват медиа и потоков .

Как это работает в соответствии с спе c? Во-первых, вам нужно получить возможности, используя .getCapabilities. Если браузер может управлять фокусом, тогда вы можете установить focusMode: "auto" | "manual" и focusDistance: number для текущих ограничений.

Режим фокусировки описывает настройку фокуса устройства захвата (например, авто или ручной).

Фокусное расстояние - это цифровая c настройка камеры, которая контролирует фокусное расстояние объектива. Параметр обычно представляет расстояние в метрах до оптимального расстояния фокусировки.

К сожалению, в данный момент вы не можете управлять фокусом, но вы можете проверить код, который может работать в будущем.

Chrome вопрос о поддержке focusDistance | Chrome Состояние платформы | Состояние реализации образа MediaCapture .

Демонстрация CodeSandbox

navigator.mediaDevices
  .getUserMedia({ video: true })
  .then(gotMedia)
  .catch(err => console.error("getUserMedia() failed: ", err));

function gotMedia(mediastream) {
  const video = document.querySelector("video");
  video.srcObject = mediastream;

  const track = mediastream.getVideoTracks()[0];
  const capabilities = track.getCapabilities();

  // Check whether focus distance is supported or not.
  if (!capabilities.focusDistance) {
    return;
  }

  // Map focus distance to a slider element.
  const input = document.querySelector('input[type="range"]');
  input.min = capabilities.focusDistance.min;
  input.max = capabilities.focusDistance.max;
  input.step = capabilities.focusDistance.step;
  input.value = track.getSettings().focusDistance;

  input.oninput = function(event) {
    track.applyConstraints({
      advanced: [{
        focusMode: "manual",
        focusDistance: event.target.value
      }]
    });
  };
  input.hidden = false;
}
<video autoplay></video>
<input type="range" hidden />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...