Ответ 1
Ваше недопонимание, что такое 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/