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