HTMLMediaElement: метод captureStream()
Ограниченная доступность
Эта функция не относится к базовому уровню, так как она не работает во всех широко используемых браузерах.
Метод captureStream() интерфейса HTMLMediaElement возвращает объект MediaStream, который осуществляет потоковую передачу реального захвата содержимого, отображаемого в элементе медиа.
Это может использоваться, например, в качестве источника для WebRTC RTCPeerConnection.
Синтаксис
captureStream()
Параметры
Нет.
Возвращаемое значение
Объект MediaStream, который может использоваться в качестве источника аудио и/или видеоданных для других кодов обработки медиа или как источник для WebRTC.
Примеры
В этом примере устанавливается обработчик событий, так что нажатие кнопки запускает захват содержимого элемента медиа с идентификатором "playback" в объект MediaStream. Затем этот поток может использоваться для других целей, например, в качестве источника потоковой передачи через WebRTC, чтобы позволить совместное использование предварительно записанных видео с другим человеком во время видеозвонка.
document.querySelector(".playAndRecord").addEventListener("click", () => {
const playbackElement = document.getElementById("playback");
const captureStream = playbackElement.captureStream();
playbackElement.play();
});
См. Запись элемента медиа для более подробного примера и объяснения.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
captureStream |
62 | 79 | 15 | 49 | Нет | 62 | 15 | 46 | Нет | 8.0 | 62 |
Примечания, специфичные для Firefox
До Firefox 51, вы не могли использовать captureStream() на элементе медиа, источником которого является, в свою очередь, MediaStream (например, элемент <video>, отображающий поток, полученный через RTCPeerConnection). Начиная с Firefox 51, это работает. Это означает, что вы можете захватить поток из элемента видео и использовать MediaRecorder для его записи. Подробнее см. баг Firefox 1259788.
Однако, captureStream() все еще имеет префикс mozCaptureStream() в Firefox по уважительной причине: в текущей реализации есть некоторые особенности, на которые стоит обратить внимание:
- В настоящее время реализация Firefox работает так, как описано в спецификации, только когда источником элемента медиа является, в свою очередь,
MediaStream. - Если источником элемента медиа не является
MediaStream, выходной поток этого метода не совместим со спецификацией, и если вы измените источник после запуска захвата, выходной поток захвата не может принять новые данные источника из-за этой несовместимости, поэтому новыеMediaStreamTrackс нового источникаMediaStreamне добавляются в захваченный поток, что приводит к выходу, который не захватывает обновленный источник. - Возврат источника к
MediaStreamдобавляет обратно треки в поток, и он работает как ожидается. - Вызов
mozCaptureMediaStream()на элементе сMediaStreamисточником возвращает поток, который содержит только треки, пока элемент воспроизводитMediaStream. - Если вы вызываете
mozCaptureMediaStream()на элементе медиа без источника медиа, режим совместимости будет основан на первом добавленном источнике; например, если этоMediaStream, то захват потока будет работать только с источниками MediaStream с этого момента. - Это особое поведение будет удалено, как только поддержка источника, отличного от
MediaStreamбудет соответствовать спецификации, и метод будет устранён от префикса. Подробнее см. баг Firefox 1259788.
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/captureStream