MediaDevices: getDisplayMedia()-Methode
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, eine Auswahl zu treffen und die Erlaubnis zu erteilen, die Inhalte eines Bildschirms oder eines Teils davon (wie z.B. ein Fenster) als MediaStream
aufzunehmen.
Der resultierende Stream kann dann mit der MediaStream Recording API aufgenommen oder im Rahmen einer WebRTC-Sitzung übertragen werden.
Weitere Details und ein Beispiel finden Sie unter Verwendung der Screen Capture API.
Syntax
getDisplayMedia()
getDisplayMedia(options)
Parameter
options
Optional-
Ein optionales Objekt, das Anforderungen an den zurückgegebenen
MediaStream
spezifiziert. Die Optionen fürgetDisplayMedia()
funktionieren ähnlich wie die constraints für die MethodeMediaDevices.getUserMedia()
, obwohl dort nuraudio
undvideo
angegeben werden können. Die Liste möglicher Options-Eigenschaften fürgetDisplayMedia()
ist wie folgt:video
Optional-
Ein Boolean oder eine Instanz von
MediaTrackConstraints
; der Standardwert isttrue
. Wenn diese Option weggelassen oder auftrue
gesetzt wird, enthält der zurückgegebeneMediaStream
eine Videospur. DagetDisplayMedia()
eine Videospur erfordert, wird das Versprechen abgelehnt, wenn diese Option auffalse
gesetzt ist, mit einemTypeError
. audio
Optional-
Ein Boolean oder eine Instanz von
MediaTrackConstraints
; der Standardwert istfalse
. Ein Wert vontrue
gibt an, dass der zurückgegebeneMediaStream
eine Audiospur enthalten wird, sofern Audio unterstützt und für die vom Nutzer gewählte Bildschirmfläche verfügbar ist. controller
Experimentell Optional-
Ein
CaptureController
-Objektinstanz mit Methoden, die zur weiteren Manipulation der Aufnahmesitzung verwendet werden können, wenn enthalten. monitorTypeSurfaces
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser im Bildschirmerfassungsdialog neben Tab- und Fensteroptionen auch ganze Bildschirme anbieten soll. Diese Option soll Unternehmen davor schützen, private Informationen durch Benutzerfehler bei der Verwendung von Videokonferenz-Apps preiszugeben. Mögliche Werte sind
include
, was bedeutet, dass der Browser Bildschirmoptionen einschließen soll, undexclude
, was bedeutet, dass sie ausgeschlossen werden sollen. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt zur Browser-Kompatibilität für browserspezifische Standardeinstellungen.Hinweis: Sie können nicht gleichzeitig
monitorTypeSurfaces: "exclude"
unddisplaySurface: "monitor"
setzen, da diese Einstellungen in Widerspruch zueinander stehen. Der Versuch, beide gleichzeitig zu setzen, führt dazu, dass der Aufruf vongetDisplayMedia()
mit einemTypeError
fehlschlägt. preferCurrentTab
Nicht standardisiert Experimentell Optional-
Ein Boolean; ein Wert von
true
weist den Browser an, den aktuellen Tab als die prominenteste Aufnahmequelle anzubieten, d.h. als eigene "Dieser Tab"-Option in den dem Benutzer präsentierten "choose what to share"-Optionen. Dies ist nützlich, da viele Apps in der Regel einfach nur den aktuellen Tab teilen möchten. Beispielsweise möchte eine Präsentations-App dem Benutzer die Möglichkeit geben, den aktuellen Tab mit der Präsentation in einer virtuellen Konferenz zu streamen. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt zur Browser-Kompatibilität für browserspezifische Standardeinstellungen. selfBrowserSurface
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser dem Benutzer die Auswahl des aktuellen Tabs zur Aufnahme erlauben soll. Dies hilft, den Effekt des "endlosen Spiegels" zu vermeiden, wenn eine Videokonferenz-App versehentlich ihr eigenes Display teilt. Mögliche Werte sind
include
, was bedeutet, dass der Browser den aktuellen Tab in die Wahlmöglichkeiten einschließen soll, undexclude
, was bedeutet, dass er ausgeschlossen werden soll. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt zur Browser-Kompatibilität für browserspezifische Standardeinstellungen. surfaceSwitching
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser ein Steuerungselement anzeigen soll, das es dem Benutzer ermöglicht, während des Bildschirmteilens den freigegebenen Tab dynamisch zu wechseln. Dies ist weitaus bequemer, als jedes Mal den gesamten Freigabeprozess erneut durchlaufen zu müssen, wenn ein Benutzer den freigegebenen Tab wechseln möchte. Mögliche Werte sind
include
, was bedeutet, dass der Browser das Steuerungselement einschließen soll, undexclude
, was bedeutet, dass es nicht angezeigt werden soll. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt zur Browser-Kompatibilität für browserspezifische Standardeinstellungen. systemAudio
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser das Systemaudio zu den dem Benutzer angebotenen möglichen Audioquellen einschließen soll. Mögliche Werte sind
include
, was bedeutet, dass der Browser das Systemaudio in die Auswahlmöglichkeiten einschließen soll, undexclude
, was bedeutet, dass es ausgeschlossen werden soll. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt zur Browser-Kompatibilität für browserspezifische Standardeinstellungen.
Hinweis: Siehe den Artikel Fähigkeiten, Einschränkungen und Einstellungen, um mehr Details darüber zu erfahren, wie diese Optionen funktionieren.
Rückgabewert
Ein Promise
, das auflöst sich in einen MediaStream
, der eine
Videospur enthält, deren Inhalt aus einem vom Benutzer ausgewählten Bildschirmbereich stammt, sowie eine optionale
Audiospur.
Hinweis: Die Unterstützung von Audiospuren variiert je nach Browser, sowohl ob sie von der Medienaufzeichnung überhaupt unterstützt werden, als auch welche Audioquellen unterstützt werden. Überprüfen Sie die Kompatibilitätstabelle für Details zu jedem Browser.
Ausnahmen
AbortError
DOMException
-
Wird ausgelöst, wenn ein Fehler oder Versagen nicht mit einer der anderen hier aufgeführten Ausnahmen übereinstimmt.
InvalidStateError
DOMException
-
Wird ausgelöst, wenn der Aufruf von
getDisplayMedia()
nicht von einem Code erfolgte, der aufgrund einer flüchtigen Aktivierung ausgeführt wird, wie z.B. ein Ereignishandler. Oder wenn der Browser-Kontext nicht vollständig aktiv ist oder nicht fokussiert ist. Oder wenn diecontroller
-Option bereits zur Erstellung eines anderenMediaStream
verwendet wurde. NotAllowedError
DOMException
-
Wird ausgelöst, wenn die Erlaubnis, auf einen Bildschirmbereich zuzugreifen, vom Benutzer verweigert wurde, oder wenn die aktuelle Browsing-Instanz keinen Zugriff auf Bildschirmfreigabe hat (zum Beispiel durch eine Permissions Policy).
NotFoundError
DOMException
-
Wird ausgelöst, wenn keine Bildschirmvideoquellen zur Aufnahme verfügbar sind.
NotReadableError
DOMException
-
Wird ausgelöst, wenn der Benutzer einen Bildschirm, ein Fenster, einen Tab oder eine andere Bildschirmdatenquelle ausgewählt hat, aber ein Hardware- oder Betriebssystemfehler oder eine Sperrung auftritt, 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, da kein kompatibler Stream generiert werden konnte.
TypeError
-
Wird ausgelöst, wenn die angegebenen
options
Werte enthalten, die nicht erlaubt sind, wenngetDisplayMedia()
aufgerufen wird, beispielsweise einevideo
-Eigenschaft, die auf false gesetzt ist, oder wenn angegebeneMediaTrackConstraints
nicht erlaubt sind.min
undexact
Werte sind nicht in Einschränkungen erlaubt, die ingetDisplayMedia()
-Aufrufen verwendet werden.
Sicherheit
Da getDisplayMedia()
auf bösartige Weise verwendet werden könnte, kann es eine
Quelle erheblicher Datenschutz- und Sicherheitsbedenken sein. Aus diesem Grund legt die Spezifikation
Maßnahmen fest, die Browser ergreifen müssen, um
getDisplayMedia()
vollständig zu unterstützen.
- Die angegebenen Optionen können nicht verwendet werden, um die dem Benutzer zur Verfügung stehenden Auswahlmöglichkeiten einzuschränken. Stattdessen müssen sie angewendet werden, nachdem der Benutzer eine Quelle ausgewählt hat, um ein Ausgabe zu erzeugen, die den Optionen entspricht.
- Die Erlaubnis,
getDisplayMedia()
zu nutzen, kann nicht für eine spätere Verwendung gespeichert werden. Der Benutzer muss jedes Mal um Erlaubnis gebeten werden. - Eine flüchtige Benutzeraktivierung ist erforderlich. Der Benutzer muss mit der Seite oder einem UI-Element interagieren, damit diese Funktion funktioniert.
- Browser werden aufgefordert, den Benutzern eine Warnung zu geben, wenn sie Bildschirme oder Fenster teilen, die Browser enthalten, und genau darauf zu achten, welche anderen Inhalte möglicherweise erfasst und anderen Benutzern gezeigt werden.
Beispiele
Im folgenden Beispiel wird eine startCapture()
-Methode erstellt, die eine
Bildschirmaufnahme mit einer durch den displayMediaOptions
-Parameter angegebenen Optionsmenge 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 darauf zu warten, dass getDisplayMedia()
mit einem MediaStream
aufgelöst wird, das die angeforderten Bildschirm-Inhalte enthält,
wie sie durch die angegebenen Optionen angefordert wurden. Der Stream wird dann an den Aufrufer zurückgegeben, zur Verwendung,
vielleicht zum Hinzufügen zu einem WebRTC-Anruf mit RTCPeerConnection.addTrack()
, um die
die Videospur des Streams hinzuzufügen.
Hinweis:
Die Screen sharing controls-Demo bietet eine vollständige Implementierung, die es Ihnen ermöglicht, eine Bildschirmaufnahme mit Ihrer Auswahl an getDisplayMedia()
-Einschränkungen und -Optionen zu erstellen.
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()
: Aufnahme von Medien von einer Kamera und/oder einem Mikrofon