Метод captureStream()
позволяет захватывать MediaStream
из элемента <canvas>
, <audio>
или <video>
.
Это позволяет записывать видео- или аудиопоток из любого из этих элементов, транслировать его в реальном времени через WebRTC или комбинировать с эффектами или другими MediaStream
в <canvas>
. Другими словами, captureStream()
позволяет MediaStream
передавать мультимедиа туда и обратно между элементами холста, аудио или видео — или в RTCPeerConnection
или MediaRecorder
.
В следующей демонстрации (доступной в примерах WebRTC ) поток MediaStream
полученный из элемента холста слева, передается через одноранговое соединение WebRTC на видеоэлемент справа:
(Ниже приведены ссылки на дополнительные примеры холстов и видео.)
Код captureStream()
прост.
Для <canvas>
:
var canvas = document.querySelector('canvas');
var video = document.querySelector('video');
// Optional frames per second argument.
var stream = canvas.captureStream(25);
// Set the source of the <video> element to be the stream from the <canvas>.
video.srcObject = stream;
Для <video>
:
var leftVideo = document.getElementById('leftVideo');
var rightVideo = document.getElementById('rightVideo');
leftVideo.onplay = function() {
// Set the source of one <video> element to be a stream from another.
var stream = leftVideo.captureStream();
rightVideo.srcObject = stream;
};
Но почему?
Метод captureStream()
позволяет записывать или транслировать потоки с холста и медиа-элементов:
- Записывайте и транслируйте игровой процесс с
<canvas>
- Захватывайте видео с камеры, затем добавляйте дополнительный контент или эффекты.
- Создавайте эффекты «картинка в картинке» из нескольких видео с помощью
<canvas>
- Объедините видео и изображения (из файлов, камеры или того и другого) в
<canvas>
- Видео в реальном времени, воспроизводимое из файла
- Используйте записанное аудио- или видеосообщение для видео- или голосовой почты.
По сути, captureStream()
позволяет JavaScript создавать и «вводить данные» в MediaStream .
Мелкий шрифт
Попытка использовать
captureStream()
с медиа-элементом, реализующим защиту контента с помощью расширений зашифрованного мультимедиа, приведет к возникновению исключения.При захвате из
<canvas>
максимальная частота кадров устанавливается при вызовеcaptureStream()
. Например,canvas.captureStream(10)
означает, что холст выводит от 0 до 10 кадров в секунду. Ничего не захватывается, когда на<canvas>
ничего не рисуется, и захватывается 10 кадров в секунду, даже если<canvas>
рисуется со скоростью 30 кадров в секунду. Существует ошибка, связанная с дополнительным обсуждением спецификацииcaptureStream
.Размеры видео
captureStream()
соответствуют<canvas>
из которого оно было вызвано.
Демо
Холст
- Потоковая передача из элемента холста в элемент видео
- Поток из элемента холста в одноранговое соединение
Видео
- Потоковая передача из видеоэлемента в видеоэлемент
- Потоковая передача из видеоэлемента в одноранговое соединение
Поддерживать
- Canvas
captureStream()
: Firefox 43 или выше; Chrome 50 и более поздних версий с включенными функциями chrome://flags/#enable-experimental-web-platform-features или Chrome 52 и более поздних версий по умолчанию. -
captureStream()
: Firefox 47; Chrome 52 и более поздних версий с включенными функциями chrome://flags/#enable-experimental-web-platform-features или Chrome 53 и более поздних версий по умолчанию.