Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Video mediaDevices назначают большой двоичный объект для 'videoRef.srcObject' вместо 'src'

Автор вопроса: WillОтветов: 2

Я пытаюсь сделать blob-объект src элемента видео. Мой код работает нормально, когда:

videoRef.src = URL.createObjectURL(blob)

но использование 'src' и 'URL.createObjectURL' устарело вместо использования 'srcObject' https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

и https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia

Мой вопрос в том, как я могу просто добавить файл BLOB-объекта в srcObject следующим образом:

videoRef.srcObject = blob

Когда я пробую приведенный выше код, я получаю сообщение об ошибке: "TypeError: не удалось установить свойство 'srcObject' в 'HTMLMediaElement': предоставленное значение не относится к типу 'MediaStream'".

Как я могу не использовать устаревший videoRef.src и применить blob непосредственно к videoRef.srcObject? Или для типа blob нормально использовать src, и только потоки не могут использовать src?

javascriptwebrtchtml5-videorecordrtc

Ответы

Ответ 1 · рейтинг 15 · jib

URL.createObjectURL не рекомендуется использовать только для потоков, но не для больших двоичных объектов и источников мультимедиа.

Предупреждение MDN, на которое вы ссылаетесь, находится в разделе Использование URL-адресов объектов для медиапотоков. В самом предупреждении говорится:

Если у вас все еще есть код, который использует createObjectURL () для присоединения потоков к элементам мультимедиа

Была предпринята попытка отказаться от URL.createObjectURL особенно вокруг потоков, потому что потоки по своей сути являются локальными объектами.

TypeError: не удалось установить свойство srcObject в HTMLMediaElement.

Похоже, ваш браузер еще не реализовал srcObject для больших двоичных объектов. Это обычный банкомат.

Например. и Chrome, и Firefox имеют частичную поддержку srcObject для потоков. только, но не большой двоичный объект, файл или источник мультимедиа.

MDN на srcObject повторяет это:

По состоянию на ноябрь 2017 г. браузеры поддерживают только MediaStream. Для MediaSource, Blob и File необходимо создать URL-адрес с помощью URL.createObjectURL () и назначить его HTMLMediaElement.src.

Ответ 2 · ZMil

В дополнение к ответу jib, вот фрагмент кода от с подробным описанием альтернативы поддержки старых браузеров:

const mediaSource = new MediaSource();
const video = document.createElement('video');
try {
  video.srcObject = mediaSource;
} catch (error) {
  video.src = URL.createObjectURL(mediaSource);
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы