API захвата медиа и потоков (Media Stream)
API захвата медиа и потоков, часто называемый API потоков медиа или MediaStream API, это API, связанный с WebRTC, который предоставляет поддержку потоковой передачи аудио- и видеоданных.
Он предоставляет интерфейсы и методы для работы с потоками и их составляющими треками, ограничениями, связанными с форматами данных, функциями обратного вызова при успешном и ошибочном использовании данных асинхронно, а также события, срабатывающие во время процесса.
Концепции и использование
API основан на манипулировании объектом MediaStream, представляющим поток аудио- или видеоданных. См. пример в Получение потока медиа.
Объект MediaStream состоит из нуля или более объектов MediaStreamTrack, представляющих различные аудио- или видеотреки. Каждый MediaStreamTrack может иметь один или более каналов. Канал представляет собой наименьшую единицу потока медиа, такую как аудиосигнал, связанный с определённым динамиком, например, левый или правый в стерео аудиотреке.
Объекты MediaStream имеют один вход и один выход. Объект MediaStream, сгенерированный getUserMedia(), называется локальным и имеет в качестве входного источника одну из камер или микрофонов пользователя. Нелокальный MediaStream может представлять медиаэлемент, такой как <video> или <audio>, поток, поступающий по сети и полученный через API WebRTC RTCPeerConnection, или поток, созданный с помощью API Web Audio API MediaStreamAudioDestinationNode.
Выход объекта MediaStream связан с потребителем. Это может быть медиаэлемент, такой как <audio> или <video>, API WebRTC RTCPeerConnection или Web Audio API MediaStreamAudioSourceNode.
Интерфейсы
В этих справочных статьях вы найдете основную информацию, необходимую для работы с каждым из интерфейсов API захвата медиа и потоков.
События
Руководства и учебные пособия
В статье Возможности, ограничения и настройки рассматриваются понятия ограничений и возможностей, а также настройки медиа, и включает в себя Диспетчер ограничений, который позволяет экспериментировать с результатами различных наборов ограничений, применяемых к аудио- и видеотрекам, поступающим с устройств ввода A/V компьютера (таких как веб-камера и микрофон).
Статья Получение статических снимков с помощью getUserMedia() демонстрирует, как использовать getUserMedia() для доступа к камере на компьютере или мобильном телефоне с поддержкой getUserMedia() и создания снимка с её помощью.
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Media_Capture_and_Streams_API |
51 | 79 | Нет | 38 | 11 | 51 | Нет | 41 | 11 | 5.0 | 51 |
canvas |
51 | 79 | Нет | 38 | 11 | 51 | Нет | 41 | 11 | 5.0 | 51 |
requestFrame |
51 | 79 | Нет | 38 | 11 | 51 | Нет | 41 | 11 | 5.0 | 51 |
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Media_Capture_and_Streams_API |
47 | 79 | 39 | 34 | 11 | 47 | 39 | 34 | 11 | 5.0 | 47 |
getCapabilities |
67 | 79 | Нет | 54 | 17 | 67 | Нет | 48 | 17 | 9.0 | 67 |
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Media_Capture_and_Streams_API |
47 | 12 | 39 | 34 | 11 | 47 | 39 | 34 | 11 | 5.0 | 47 |
deviceId |
47 | 12 | 39 | 34 | 11 | 47 | 39 | 34 | 11 | 5.0 | 47 |
groupId |
47 | 12 | 39До Firefox 67, связанные устройства фактически не группировались поgroupId. |
34 | 11 | 47 | 39До Firefox для Android 67, связанные устройства фактически не группировались поgroupId. |
34 | 11 | 5.0 | 47 |
kind |
47 | 12 | 39 | 34 | 11 | 47 | 39 | 34 | 11 | 5.0 | 47 |
label |
47 | 12 | 39 | 34 | 11 | 47 | 39 | 34 | 11 | 5.0 | 47 |
toJSON |
47 | 18 | 42 | 34 | 11 | 47 | 42 | 34 | 11 | 5.0 | 47 |
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Media_Capture_and_Streams_API |
47 | 12 | 33 | 30 | 11 | 47 | 36 | 30 | 11 | 5.0 | 47 |
devicechange_event |
57 | 12 | 52 | 34 | 11 | Нет | 52 | Нет | 11 | Нет | Нет |
enumerateDevices |
47 | 12 |
116enumerateDevices() перечисляет как устройства ввода, так и вывода. Ранее возвращались только устройства ввода.39enumerateDevices() возвращает только устройства ввода. |
34 | 11 | 47 |
116enumerateDevices() перечисляет как устройства ввода, так и вывода. Ранее возвращались только устройства ввода.39enumerateDevices() возвращает только устройства ввода. |
34 | 11 | 5.0 | 47 |
getDisplayMedia |
72 | 7917–79Доступно как членNavigator вместо MediaDevices. |
6633–66Начиная с Firefox 33, вы можете захватывать данные экрана с помощьюgetUserMedia() с ограничением video под названием mediaSource. До версии 52 использовался настраиваемый клиентом список разрешенных сайтов. |
60 | 13 | НетВ Chrome Android с 72 по 88 этот метод был доступен, но всегда завершался ошибкойNotAllowedError. См. баг 40418135. |
НетВ Firefox Android с 66 по 79 этот метод был доступен, но всегда завершался ошибкойNotAllowedError. |
НетВ Opera Android с 51 по 88 этот метод был доступен, но всегда завершался ошибкойNotAllowedError. См. баг 40418135. |
Нет | НетВ Samsung Internet с 11.0 по 88 этот метод был доступен, но всегда завершался ошибкойNotAllowedError. См. баг 40418135. |
НетВ WebView Android с 72 по 88 этот метод был доступен, но всегда завершался ошибкойNotAllowedError. См. баг 40418135. |
getSupportedConstraints |
53 | 12 | 44 | 40 | 11 | 52 | 50 | 41 | 11 | 6.0 | 53 |
getUserMedia |
53Если вам нужна эта возможность до версии 53, обратитесь кnavigator.webkitGetUserMedia, префиксной форме устаревшего navigator.getUserMedia API. |
12 | 36["Если вам нужна эта возможность до версии 36, обратитесь кnavigator.mozGetUserMedia, префиксной форме устаревшего navigator.getUserMedia API.", "До Firefox 55 getUserMedia() неверно возвращал NotSupportedError, когда список ограничений пуст или все ограничения установлены на false. Начиная с Firefox 55, в этой ситуации теперь корректно вызывается обработчик ошибок с TypeError.", "При использовании специфичного для Firefox ограничения video под названием mediaSource для запроса захвата экрана, Firefox 66 и более поздние версии учитывают значения screen и window для отображения как списка экранов, так и окон.", "Начиная с Firefox 66, getUserMedia() больше нельзя использовать в защищенных <iframe> или data URL, введенных пользователем в адресной строке."] |
40Если вам нужна эта возможность до версии 40, обратитесь кnavigator.webkitGetUserMedia, префиксной форме устаревшего navigator.getUserMedia API. |
11 | 53Если вам нужна эта возможность до версии 53, обратитесь кnavigator.webkitGetUserMedia, префиксной форме устаревшего navigator.getUserMedia API. |
36["Если вам нужна эта возможность до версии 36, обратитесь кnavigator.mozGetUserMedia, префиксной форме устаревшего navigator.getUserMedia API.", "До Firefox для Android 55 getUserMedia() неверно возвращал NotSupportedError, когда список ограничений пуст или все ограничения установлены на false. Начиная с Firefox для Android 55, в этой ситуации теперь корректно вызывается обработчик ошибок с TypeError.", "При использовании специфичного для Firefox для Android ограничения video под названием mediaSource для запроса захвата экрана, Firefox для Android 66 и более поздние версии учитывают значения screen и window для отображения как списка экранов, так и окон.", "Начиная с Firefox для Android 66, getUserMedia() больше нельзя использовать в защищенных <iframe> или data URL, введенных пользователем в адресной строке."] |
41Если вам нужна эта возможность до версии 41, обратитесь кnavigator.webkitGetUserMedia, префиксной форме устаревшего navigator.getUserMedia API. |
11 | 6.0 | 53 |
selectAudioOutput |
Нет | Нет | 116 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
setCaptureHandleConfig |
102 | 102 | Нет | 88 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
| Настольный | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | |
Media_Capture_and_Streams_API |
26 | 12 | 22 | 15 | 11 | 26 | 22 | 14 | 11 | 1.5 | 4.4 |
applyConstraints |
59 | 12 | 43 | 46 | 11 | 59 | 43 | 43 | 11 | 7.0 | 59 |
capturehandlechange_event |
102 | 102 | Нет | 88 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
clone |
35 | 12 | 48 | 22 | 11 | 35 | 48 | 22 | 11 | 3.0 | 37 |
contentHint |
70 | 79 | Нет | 57 | 12.1 | 70 | Нет | 49 | 12.2 | 10.0 | 70 |
enabled |
26 | 12 | 24 | 15 | 11 | 26 | 24 | 14 | 11 | 1.5 | 4.4 |
ended_event |
26 | 12 | 50 | 15 | 11 | 26 | 50 | 14 | 11 | 1.5 | 4.4 |
getCapabilities |
59 | 12 | 132 | 46 | 11 | 59 | 132 | 43 | 11 | 7.0 | 59 |
getCaptureHandle |
102 | 102 | Нет | 88 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
getConstraints |
53 | 12 | 50 | 40 | 11 | 52 | 50 | 41 | 11 | 6.0 | 53 |
getSettings |
59 | 12 | 50 | 46 | 11 | 59 | 50 | 43 | 11 | 7.0 | 59 |
id |
26 | 12 | 22 | 15 | 11 | 26 | 22 | 14 | 11 | 1.5 | 4.4 |
kind |
26 | 12 | 22 | 15 | 11 | 26 | 22 | 14 | 11 | 1.5 | 4.4 |
label |
26 | 12 | 22 | 15 | 11 | 26 | 22 | 14 | 11 | 1.5 | 4.4 |
mute_event |
26 | 12 | 59 | 15 | 11 | 26 | 59 | 14 | 11 | 1.5 | 4.4 |
muted |
38 | 12 | 59В настоящее время не отслеживает состояние отключения микрофона из операционной системы, см. ошибка 1739163. |
25 | 11 | 38 | 59В настоящее время не отслеживает состояние отключения микрофона из операционной системы, см. ошибка 1739163. |
25 | 11 | 3.0 | 38 |
readyState |
26 | 12 | 50 | 15 | 11 | 26 | 50 | 14 | 11 | 1.5 | 4.4 |
stop |
32 | 12 | 34 | 19 | 11 | 32 | 34 | 19 | 11 | 2.0 | 4.4.3 |
unmute_event |
26 | 12 | 59 | 15 | 11 | 26 | 59 | 14 | 11 | 1.5 | 4.4 |
| Настольный | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
MediaStream |
5521 | 1279 | 44 | 4215 | 11 | 5525 | 42 | 4214 | 11 | 6.01.5 | 554.4 |
Media_Capture_and_Streams_API |
5521 | 1279 | 15 | 4215 | 11 | 5525 | 15 | 4214 | 11 | 6.01.5 | 554.4 |
active |
42 | 12 | 52 | 29 | 11 | 42 | 52 | 29 | 11 | 4.0 | 42 |
active_event |
42 | 12 | Нет | 29 | Нет | 42 | Нет | 29 | Нет | 4.0 | 42 |
addTrack |
26 | 12 | 44 | 15 | 11 | 26 | 44 | 14 | 11 | 1.5 | 37 |
addtrack_event |
26 | 12 | 50 | 15 | 11 | 26 | 50 | 14 | 11 | 1.5 | 4.4 |
clone |
35 | 12 | 48 | 22 | 11 | 35 | 48 | 22 | 11 | 3.0 | 37 |
getAudioTracks |
26 | 12 | 22До Firefox 64, этот метод возвращал массив объектовAudioStreamTrack. Однако, MediaStreamTrack теперь включает функциональность этого интерфейса. |
15 | 11 | 26 | 22До Firefox для Android 64, этот метод возвращал массив объектовAudioStreamTrack. Однако, MediaStreamTrack теперь включает функциональность этого интерфейса. |
14 | 11 | 1.5 | 37 |
getTrackById |
26 | 12 | 49 | 15 | 11 | 26 | 49 | 14 | 11 | 1.5 | 37 |
getTracks |
38 | 12 | 34 | 25 | 11 | 38 | 34 | 25 | 11 | 3.0 | 38 |
getVideoTracks |
26 | 12 | 22До Firefox 64, этот метод возвращал массив объектовVideoStreamTrack. Однако, MediaStreamTrack теперь включает функциональность этого интерфейса. |
15 | 11 | 26 | 22До Firefox для Android 64, этот метод возвращал массив объектовVideoStreamTrack. Однако, MediaStreamTrack теперь включает функциональность этого интерфейса. |
14 | 11 | 1.5 | 37 |
id |
26 | 12 | 41 | 15 | 11 | 26 | 41 | 14 | 11 | 1.5 | 4.4 |
inactive_event |
42 | 12 | Нет | 29 | Нет | 42 | Нет | 29 | Нет | 4.0 | 42 |
removeTrack |
26 | 12 | 44 | 15 | 11 | 26 | 44 | 14 | 11 | 1.5 | 37 |
removetrack_event |
26 | 12 | 7259–72До Firefox 72, обработчик событий был доступен, но не работал. |
15 | 11 | 26 | 7959–79До Firefox для Android 79, обработчик событий был доступен, но не работал. |
14 | 11 | 1.5 | 4.4 |
api.MediaStream
Таблицы BCD загружаются только в браузере
api.MediaStreamTrack
Таблицы BCD загружаются только в браузере
api.MediaDevices
Таблицы BCD загружаются только в браузере
api.MediaDeviceInfo
Таблицы BCD загружаются только в браузере
api.InputDeviceInfo
Таблицы BCD загружаются только в браузере
api.CanvasCaptureMediaStreamTrack
Таблицы BCD загружаются только в браузере
См. также
- WebRTC - вводная страница к API
-
Фотографирование с помощью WebRTC: демонстрация и руководство по использованию
getUserMedia().
© 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/Media_Capture_and_Streams_API