MediaDevices: метод getDisplayMedia()
Ограниченная доступность
Эта функция не является базовой, поскольку она не работает в некоторых из наиболее широко используемых браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.
Метод getDisplayMedia() интерфейса MediaDevices предлагает пользователю выбрать и предоставить разрешение на захват содержимого дисплея или его части (например, окна) в виде MediaStream.
Полученный поток затем можно записать с помощью API записи потока MediaStream или передать в качестве части сессии WebRTC.
Дополнительные сведения и примеры см. в разделе Использование API захвата экрана.
Синтаксис
getDisplayMedia() getDisplayMedia(options)
Параметры
optionsНеобязательно-
Необязательный объект, определяющий требования к возвращаемому
MediaStream. Опции дляgetDisplayMedia()работают так же, как ограничения для методаMediaDevices.getUserMedia(), хотя в этом случае можно указать толькоaudioиvideo. Список возможных свойств опций дляgetDisplayMedia()следующий:videoНеобязательно-
Булево значение или экземпляр
MediaTrackConstraints; значение по умолчанию —true. Если этот параметр опущен или установлен вtrue, в потоке будет присутствовать видеодорожка. Значениеtrueуказывает, что возвращаемыйMediaStreamбудет содержать видеодорожку. ПосколькуgetDisplayMedia()требует видеодорожки, если этот параметр установлен вfalse, обещание отклонится с ошибкойTypeError. audioНеобязательно-
Булево значение или экземпляр
MediaTrackConstraints; значение по умолчанию —false. Значениеtrueуказывает, что возвращаемыйMediaStreamбудет содержать аудиодорожку, если аудио поддерживается и доступно для поверхности дисплея, выбранной пользователем. controllerЭкспериментальная Необязательно-
Экземпляр объекта
CaptureControllerс методами, которые можно использовать для дальнейшего управления сессией захвата, если он включён. monitorTypeSurfacesНеобязательно-
Перечисление, указывающее, должен ли браузер предлагать целые экраны в параметрах захвата экрана пользователю наряду с параметрами вкладок и окон. Этот параметр предназначен для защиты компаний от утечки конфиденциальной информации из-за ошибки сотрудника при использовании приложений для видеоконференций. Возможные значения —
include, что предполагает включение параметров экрана, иexclude, что предполагает их исключение. Значение по умолчанию не предписано спецификацией; см. раздел Совместимость браузеров для значений по умолчанию для отдельных браузеров.Примечание: Вы не можете установить
monitorTypeSurfaces: "exclude"одновременно сdisplaySurface: "monitor", так как эти два параметра противоречат друг другу. Попытка сделать это приведёт к отказу вызоваgetDisplayMedia()с ошибкойTypeError. preferCurrentTabНестандартный Экспериментальная Необязательно-
Булево значение; значение
trueуказывает браузеру предложить текущую вкладку в качестве наиболее важного источника захвата, т.е. отдельным пунктом «Эта вкладка» в параметрах «Выберите, что нужно поделиться». Это полезно, так как многие типы приложений обычно хотят поделиться только текущей вкладкой. Например, приложение для демонстрации слайдов может позволить пользователю транслировать текущую вкладку с презентацией на виртуальную конференцию. Значение по умолчанию не предписано спецификацией; см. раздел Совместимость браузеров для значений по умолчанию для отдельных браузеров. selfBrowserSurfaceЭкспериментальная Необязательно-
Перечисление, указывающее, должен ли браузер позволить пользователю выбрать текущую вкладку для захвата. Это помогает избежать эффекта «бесконечного зеркала» при случайном обмене собственным дисплеем приложением для видеоконференций. Возможные значения —
include, что подразумевает включение текущей вкладки в список предложений для захвата, иexclude, что подразумевает её исключение. Значение по умолчанию не предписано спецификацией; см. раздел Совместимость браузеров для значений по умолчанию для отдельных браузеров. surfaceSwitchingЭкспериментальная Необязательно-
Перечисление, указывающее, должен ли браузер отображать элемент управления для динамического переключения вкладки во время совместного использования экрана. Это намного удобнее, чем проходить весь процесс совместного использования заново каждый раз, когда пользователь хочет переключиться на другую вкладку. Возможные значения —
include, что подразумевает включение элемента управления, иexclude, что подразумевает его отсутствие. Значение по умолчанию не предписано спецификацией; см. раздел Совместимость браузеров для значений по умолчанию для отдельных браузеров. systemAudioЭкспериментальная Необязательно-
Перечисление, указывающее, должен ли браузер включать системный звук среди возможных источников аудио, предлагаемых пользователю. Возможные значения —
include, что подразумевает включение системного звука в список вариантов, иexclude, что подразумевает его исключение. Значение по умолчанию не предписано спецификацией; см. раздел Совместимость браузеров для значений по умолчанию для отдельных браузеров. monitorTypeSurfacesЭкспериментальная Необязательно-
Перечисление, указывающее, хочет ли приложение, чтобы пользовательский агент предлагал пользователю возможность выбора поверхностей дисплея, тип которых — монитор. Возможные значения —
include, что подразумевает включение поверхностей дисплея, тип которых — монитор, иexclude, что подразумевает их исключение. Значение по умолчанию не предписано спецификацией; см. раздел Совместимость браузеров для значений по умолчанию для отдельных браузеров.
Примечание: Подробнее о работе этих параметров см. в статье Возможности, ограничения и настройки.
Возвращаемое значение
Обещание Promise, которое разрешается в MediaStream, содержащий видеодорожку, содержимое которой взято с выбранной пользователем области экрана, а также необязательную аудиодорожку.
Примечание: Поддержка аудиодорожек в браузерах различна, как в плане их поддержки самим медиа-рекордером, так и в плане поддерживаемых источников звука. Подробности для каждого браузера см. в таблице совместимости.
Исключения
-
AbortErrorDOMException -
Бросается, если ошибка или сбой не соответствуют ни одному из других исключений, перечисленных здесь.
-
InvalidStateErrorDOMException -
Бросается, если вызов
getDisplayMedia()не был выполнен из кода, выполняемого из-за временного активации, например, обработчика событий. Или если контекст браузера не полностью активен или не сфокусирован. Или если опцииcontrollerуже использовались при создании другогоMediaStream. -
NotAllowedErrorDOMException -
Бросается, если пользователь отказал в разрешении доступа к области экрана, или текущая сессия просмотра не имеет разрешения на совместное использование экрана (например, по политике Permissions Policy).
-
NotFoundErrorDOMException -
Бросается, если нет доступных источников видео с экрана для захвата.
-
NotReadableErrorDOMException -
Бросается, если пользователь выбрал экран, окно, вкладку или другой источник данных экрана, но произошла ошибка или блокировка на уровне оборудования или операционной системы, препятствующая совместному использованию выбранного источника.
-
OverconstrainedErrorDOMException -
Бросается, если после создания потока применение любых указанных ограничений завершается неудачно, поскольку совместимый поток не может быть сгенерирован.
TypeError-
Бросается, если указанные
optionsвключают значения, которые не разрешены при вызовеgetDisplayMedia(), например, свойствоvideoустановлено в false, или если какие-либо указанныеMediaTrackConstraintsне разрешены. Значенияminиexactне разрешены в ограничениях, используемых в вызовахgetDisplayMedia().
Безопасность
Поскольку getDisplayMedia() может использоваться в злонамеренных целях, это может быть источником серьезных проблем с конфиденциальностью и безопасностью. По этой причине спецификация подробно описывает меры, которые браузеры должны принять для обеспечения полной поддержки getDisplayMedia().
- Указанные параметры не могут использоваться для ограничения выбора, доступного пользователю. Вместо этого они должны применяться после того, как пользователь выберет источник, чтобы сгенерировать выходные данные, соответствующие параметрам.
- Разрешение на использование
getDisplayMedia()не может сохраняться для повторного использования. Пользователь должен получать разрешение каждый раз. - Временная активация пользователя обязательна. Пользователь должен взаимодействовать со страницей или элементом пользовательского интерфейса, чтобы эта функция работала.
- Браузеры рекомендуют отображать предупреждение пользователям о совместном использовании дисплеев или окон, содержащих браузеры, и следить за тем, какой другой контент может быть захвачен и показан другим пользователям.
Примеры
В примере ниже создается метод startCapture(), который инициирует захват экрана с заданными параметрами, указанными параметром displayMediaOptions.
const displayMediaOptions = {
video: {
displaySurface: "browser",
},
audio: {
suppressLocalAudioPlayback: false,
},
preferCurrentTab: false,
selfBrowserSurface: "exclude",
systemAudio: "include",
surfaceSwitching: "include",
monitorTypeSurfaces: "include",
};
async function startCapture(displayMediaOptions) {
let captureStream;
try {
captureStream =
await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
} catch (err) {
console.error(`Error: ${err}`);
}
return captureStream;
}
В данном примере используется await для асинхронного ожидания разрешения getDisplayMedia() с MediaStream, который содержит содержимое дисплея в соответствии с указанными параметрами. Затем поток возвращается вызывающей стороне для использования, возможно, для добавления в вызов WebRTC с помощью RTCPeerConnection.addTrack() для добавления видеодорожки из потока.
Примечание: Демонстрация Управление совместным доступом к экрану предоставляет полную реализацию, позволяющую создавать захват экрана с выбором getDisplayMedia() ограничений и параметров.
Спецификации
| Спецификация |
|---|
| Захват экрана # dom-mediadevices-getdisplaymedia |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
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. |
audio_capture_support |
74В Windows и ChromeOS можно захватывать звук всей системы при совместном использовании всего экрана. В Linux и macOS можно захватывать только звук вкладки. |
79В Windows и ChromeOS можно захватывать звук всей системы при совместном использовании всего экрана. В Linux и macOS можно захватывать только звук вкладки. |
Нет | 62В Windows и ChromeOS можно захватывать звук всей системы при совместном использовании всего экрана. В Linux и macOS можно захватывать только звук вкладки. |
Нет | Нет | Нет | Нет | Нет | Нет | Нет |
controller_option |
109 | 109 | Нет | 95 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
monitorTypeSurfaces_option |
119Значение по умолчанию =include |
119Значение по умолчанию =include |
Нет | 105Значение по умолчанию =include |
Нет | Нет | Нет | Нет | Нет | Нет | Нет |
preferCurrentTab_option |
94Значение по умолчанию =false |
94Значение по умолчанию =false |
Нет | 80Значение по умолчанию =false |
Нет | Нет | Нет | Нет | Нет | Нет | Нет |
surfaceSwitching_option |
107Значение по умолчанию =exclude |
107Значение по умолчанию =exclude |
Нет | 93Значение по умолчанию =exclude |
Нет | Нет | Нет | Нет | Нет | Нет | Нет |
systemAudio_option |
105Значение по умолчанию =include |
105Значение по умолчанию =include |
Нет | 91Значение по умолчанию =include |
Нет | Нет | Нет | Нет | Нет | Нет | Нет |
См. также
- API захвата экрана
- Использование API захвата экрана
- API захвата медиа и потоков
- 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/MediaDevices/getDisplayMedia