Устаревание createObjectURL и его замена новым HTMLMediaElement.srcObject не работает для потока веб-камеры - PullRequest
0 голосов
/ 29 июня 2018

Я получаю предупреждение о том, что в будущих версиях Chrome функция устарела.

Вот этот скрипт:

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
if (navigator.getUserMedia) {
    navigator.getUserMedia({
        video: true
    }, (stream) => {
        this.src = window.URL.createObjectURL(stream);
        this.stream = stream;
    }, (error) => {
        console.log(error);
    });
}

Записывает веб-камеру, чтобы я мог ее сохранить, но в консоли отображается следующее предупреждение:

[Устаревание] URL.createObjectURL с медиапотоками устарел и будет удален в M68, около июля 2018 года. Пожалуйста, используйте Вместо HTMLMediaElement.srcObject.

Но когда я меняюсь:

this.src = window.URL.createObjectURL(stream);

К

this.src = window.HTMLMediaElement.srcObject(stream);

Он больше не работает, как раньше ...

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Если вы используете Chrome, вы можете использовать:

video.srcObject = stream;

вместо:

this.srcObject = stream;
0 голосов
/ 17 декабря 2018

Замена this.src = window.URL.createObjectURL(stream); на this.srcObject = stream; должна решить проблему.

0 голосов
/ 02 июля 2018

Ваше недопонимание, что такое HTMLMediaElement.

Это класс / прототип JavaScript, который представляет тег HTML <audio> или <video>, находится ли он в HTML или нет.

Для более классного объяснения <audio> на странице - это объект типа HTMLAudioElement, который расширяет HTMLMediaElement и который, в свою очередь, расширяет HTMLElement.

Если вы получаете медиа-элемент с помощью querySelector() или getElementById() или создаете медиа-элемент в JavaScript с помощью createElement("audio") или createElement("video") вы получите экземпляр HTMLMediaElement.

В вашем случае this - это объект HTMLMediaElement класса.

В JavaScript, как правило, если имя типа объекта начинается с HTML, оно ссылается на элемент / тег HTML.

Все, что вам нужно сделать, это изменить

this.src = window.URL.createObjectURL(stream);

до

try {
  this.srcObject = stream;
} catch (error) {
  this.src = window.URL.createObjectURL(stream);
}

Это взято из Документация Mozilla

Вы можете прочитать больше о том, как следует использовать это изменение и откуда этот ответ берет знание: https://www.fxsitecompat.com/en-CA/docs/2017/url-createobjecturl-stream-has-been-deprecated/

...