MediaDevices: Methode getDisplayMedia()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die getDisplayMedia()
-Methode der MediaDevices
-Schnittstelle fordert den Benutzer auf, auszuwählen und die Erlaubnis zu erteilen, den Inhalt eines Bildschirms oder eines Teils davon (wie ein Fenster) als MediaStream
zu erfassen.
Der resultierende Stream kann dann mit der MediaStream Recording API aufgezeichnet oder als Teil einer WebRTC-Sitzung übertragen werden.
Siehe Verwendung der Screen Capture API für weitere Details und ein Beispiel.
Syntax
getDisplayMedia()
getDisplayMedia(options)
Parameter
options
Optional-
Ein optionales Objekt, das Anforderungen für den zurückgegebenen
MediaStream
spezifiziert. Die Optionen fürgetDisplayMedia()
funktionieren ähnlich wie die Einschränkungen für die MethodeMediaDevices.getUserMedia()
, obwohl in diesem Fall nuraudio
undvideo
angegeben werden können. Die Liste der möglichen Optionseigenschaften fürgetDisplayMedia()
ist wie folgt:video
Optional-
Ein Boolescher Wert oder eine Instanz von
MediaTrackConstraints
; der Standardwert isttrue
. Wird diese Option ausgelassen oder auftrue
gesetzt, enthält der Stream eine Videospur. Ein Wert vontrue
gibt an, dass der zurückgegebeneMediaStream
eine Videospur enthält. DagetDisplayMedia()
eine Videospur erfordert, wird das Versprechen abgelehnt, wenn diese Option auffalse
gesetzt ist, mit einemTypeError
. audio
Optional-
Ein Boolescher Wert oder eine Instanz von
MediaTrackConstraints
; der Standardwert istfalse
. Ein Wert vontrue
gibt an, dass der zurückgegebeneMediaStream
eine Audiospur enthält, sofern Audio unterstützt wird und für die vom Benutzer gewählte Bildschirmoberfläche verfügbar ist. controller
Experimentell Optional-
Eine
CaptureController
-Objektinstanz, die Methoden enthält, mit denen die Aufnahme weiter manipuliert werden kann, wenn sie enthalten ist. monitorTypeSurfaces
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser in den dem Benutzer präsentierten Bildschirmaufnahmeoptionen vollständige Bildschirme neben Registerkarten- und Fensteroptionen anbieten soll. Diese Option soll verhindern, dass Unternehmen durch Benutzerfehler beim Einsatz von Videokonferenz-Apps private Informationen leaken. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser Bildschirmoptionen einschließen soll, undexclude
, was darauf hinweist, dass sie ausgeschlossen werden sollen. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt Browser-Kompatibilität für browserspezifische Standardeinstellungen.Hinweis: Sie können nicht
monitorTypeSurfaces: "exclude"
gleichzeitig mitdisplaySurface: "monitor"
einstellen, da die beiden Einstellungen widersprüchlich sind. Der Versuch, dies zu tun, führt dazu, dass der Aufruf vongetDisplayMedia()
mit einemTypeError
fehlschlägt. preferCurrentTab
Nicht standardisiert Experimentell Optional-
Ein Boolescher Wert; ein Wert von
true
gibt dem Browser an, die aktuelle Registerkarte als wichtigste Aufnahmequelle anzubieten, d.h. als separate "Diese Registerkarte"-Option in den dem Benutzer präsentierten "Wählen Sie, was Sie teilen möchten"-Optionen. Dies ist nützlich, da viele App-Typen im Allgemeinen nur die aktuelle Registerkarte teilen möchten. Beispielsweise könnte eine Präsentationsfolien-App dem Benutzer erlauben, die aktuelle Registerkarte mit der Präsentation an eine virtuelle Konferenz zu streamen. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt Browser-Kompatibilität für browserspezifische Standardeinstellungen. selfBrowserSurface
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser dem Benutzer erlauben sollte, die aktuelle Registerkarte für die Aufnahme auszuwählen. Dies hilft, den "unendlichen Spiegelkabinett"-Effekt zu vermeiden, der entsteht, wenn eine Videokonferenz-App versehentlich ihren eigenen Bildschirm teilt. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser die aktuelle Registerkarte in die zur Aufnahme angebotenen Optionen aufnehmen soll, undexclude
, was darauf hinweist, dass sie ausgeschlossen werden soll. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt Browser-Kompatibilität für browserspezifische Standardeinstellungen. surfaceSwitching
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser ein Steuerelement anzeigen soll, das dem Benutzer ermöglicht, die geteilte Registerkarte während des Bildschirmtrennens dynamisch zu wechseln. Dies ist viel bequemer, als jedes Mal den gesamten Freigabeprozess erneut durchlaufen zu müssen, wenn ein Benutzer die geteilte Registerkarte wechseln möchte. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser das Steuerelement einschließen soll, undexclude
, was darauf hinweist, dass es nicht gezeigt werden soll. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt Browser-Kompatibilität für browserspezifische Standardeinstellungen. systemAudio
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser das Systemaudio unter den dem Benutzer angebotenen möglichen Audioquellen einschließen soll. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser das Systemaudio in die Liste der Optionen aufnehmen soll, undexclude
, was darauf hinweist, dass es ausgeschlossen werden soll. Ein Standardwert wird in der Spezifikation nicht vorgegeben; siehe den Abschnitt Browser-Kompatibilität für browserspezifische Standards.
Hinweis: Sehen Sie sich den Artikel Fähigkeiten, Einschränkungen und Einstellungen an, um viele weitere Details über die Funktionsweise dieser Optionen zu erfahren.
Rückgabewert
Ein Promise
, das zu einem MediaStream
aufgelöst wird, der eine Videospur enthält, deren Inhalt von einem vom Benutzer ausgewählten Bildschirmbereich stammt, sowie optional eine Audiospur.
Hinweis: Die Unterstützung von Audiospuren durch Browser variiert, sowohl in Bezug darauf, ob sie überhaupt von dem Media Recorder unterstützt werden, als auch in Bezug auf die unterstützten Audioquellen. Überprüfen Sie die Kompatibilitätstabelle für Details zu jedem Browser.
Ausnahmen
AbortError
DOMException
-
Wird ausgelöst, wenn ein Fehler oder Ausfall keiner anderen hier aufgelisteten Ausnahme entspricht.
InvalidStateError
DOMException
-
Wird ausgelöst, wenn der Aufruf von
getDisplayMedia()
nicht aus Code stammt, der aufgrund einer transient activation, wie einem Ereignis-Handler, ausgeführt wird. Oder wenn der Browser-Kontext nicht vollständig aktiv oder nicht fokussiert ist. Oder wenn diecontroller
-Option bereits verwendet wurde, um einen anderenMediaStream
zu erstellen. NotAllowedError
DOMException
-
Wird ausgelöst, wenn die Berechtigung zum Zugriff auf einen Bildschirmbereich vom Benutzer verweigert wurde oder die aktuelle Browsing-Instanz keinen Zugriff auf das Bildschirmteilen hat (z. B. durch eine Permissions Policy).
NotFoundError
DOMException
-
Wird ausgelöst, wenn keine Quellen für Bildschirmvideo zur Aufnahme verfügbar sind.
NotReadableError
DOMException
-
Wird ausgelöst, wenn der Benutzer einen Bildschirm, ein Fenster, eine Registerkarte oder eine andere Quelle von Bildschirmdaten ausgewählt hat, aber ein Hardware- oder Betriebssystemfehler oder eine Sperre aufgetreten ist, die die Freigabe der ausgewählten Quelle verhindert.
OverconstrainedError
DOMException
-
Wird ausgelöst, wenn nach der Erstellung des Streams die Anwendung der angegebenen Einschränkungen fehlschlägt, weil kein kompatibler Stream generiert werden konnte.
TypeError
-
Wird ausgelöst, wenn die angegebenen
options
Werte enthalten, die beim Aufruf vongetDisplayMedia()
nicht erlaubt sind, z. B. einevideo
-Eigenschaft, die auf false gesetzt ist, oder wenn bestimmteMediaTrackConstraints
nicht zulässig sind.min
undexact
Werte sind in Einschränkungen, die ingetDisplayMedia()
-Aufrufen verwendet werden, nicht erlaubt.
Sicherheit
Da getDisplayMedia()
in böswilliger Weise verwendet werden könnte, kann es eine Quelle erheblicher Datenschutz- und Sicherheitsbedenken sein. Aus diesem Grund beschreibt die Spezifikation die Maßnahmen, die Browser ergreifen müssen, um getDisplayMedia()
vollständig zu unterstützen.
- Die angegebenen Optionen können nicht verwendet werden, um die dem Benutzer verfügbaren Auswahlmöglichkeiten zu beschränken. Stattdessen müssen sie angewendet werden, nachdem der Benutzer eine Quelle ausgewählt hat, um einen Output zu erzeugen, der den Optionen entspricht.
- Die Erlaubnis,
getDisplayMedia()
zu verwenden, kann nicht für eine spätere Verwendung gespeichert werden. Der Benutzer muss jedes Mal um eine Erlaubnis gebeten werden. - Transiente Benutzeraktivierung ist erforderlich. Der Benutzer muss mit der Seite oder einem UI-Element interagieren, damit diese Funktion funktioniert.
- Browser werden ermutigt, den Benutzern eine Warnung über das Teilen von Bildschirmen oder Fenstern, die Browser enthalten, zu geben und genau darauf zu achten, welche anderen Inhalte möglicherweise erfasst und anderen Benutzern gezeigt werden könnten.
Beispiele
Im folgenden Beispiel wird eine startCapture()
-Methode erstellt, die die Bildschirmaufnahme mit einer Reihe von durch den Parameter displayMediaOptions
spezifizierten Optionen initiiert.
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;
}
Dies verwendet await
, um asynchron auf die Auflösung von getDisplayMedia()
mit einem MediaStream
zu warten, der den Displayinhalt enthält, wie durch die angegebenen Optionen angefordert. Der Stream wird dann an den Aufrufenden zurückgegeben, vielleicht zur Verwendung in einem WebRTC-Anruf, indem die Videospur des Streams mit RTCPeerConnection.addTrack()
hinzugefügt wird.
Hinweis:
Die Bildschirmfreigabesteuerungen-Demo bietet eine vollständige Implementierung, mit der Sie eine Bildschirmaufnahme mit Ihrer Wahl von getDisplayMedia()
-Einschränkungen und -Optionen erstellen können.
Spezifikationen
Specification |
---|
Screen Capture # dom-mediadevices-getdisplaymedia |
Browser-Kompatibilität
Siehe auch
- Screen Capture API
- Verwendung der Screen Capture API
- Media Capture and Streams API
- WebRTC API
getUserMedia()
: Erfassung von Medien von einer Kamera und/oder einem Mikrofon