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, die Erlaubnis zu erteilen, den Inhalt eines Displays oder eines Teils davon (wie z.B. ein Fenster) als einen MediaStream
zu erfassen.
Der resultierende Stream kann dann mit der MediaStream Recording API aufgezeichnet oder als Teil 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 für den zurückgegebenen
MediaStream
spezifiziert. Die Optionen fürgetDisplayMedia()
funktionieren ähnlich wie die Einschränkungen für dieMediaDevices.getUserMedia()
-Methode, 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
. Wenn diese Option weggelassen oder auftrue
gesetzt wird, enthält der Stream einen Videospur. Ein Wert vontrue
gibt an, dass der zurückgegebeneMediaStream
eine Videospur enthält. DagetDisplayMedia()
eine Videospur erfordert, wird der Promise abgelehnt mit einemTypeError
, wenn diese Option auffalse
gesetzt wird. 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, wenn Audio für die vom Benutzer gewählte Anzeigeoberfläche unterstützt und verfügbar ist. controller
Experimentell Optional-
Ein
CaptureController
-Objektinstanz, die Methoden enthält, mit denen die Aufnahmesitzung weiter manipuliert werden kann, falls eingeschlossen. monitorTypeSurfaces
Experimentell Optional-
Ein enumerierter Wert, der angibt, ob der Browser ganze Bildschirme in den dem Benutzer präsentierten Bildschirmaufnahmeoptionen zusammen mit Tab- und Fensteroptionen anbieten soll. Diese Option soll Unternehmen davor schützen, dass private Informationen durch Benutzerfehler bei der Verwendung von Videokonferenz-Apps durchsickern. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser Bildschirmloptions einbeziehen 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 gleichzeitig
monitorTypeSurfaces: "exclude"
unddisplaySurface: "monitor"
setzen, da die beiden Einstellungen im Widerspruch stehen. Ein solcher Versuch führt dazu, dass dergetDisplayMedia()
-Aufruf mit einemTypeError
fehlschlägt. preferCurrentTab
Nicht standardisiert Experimentell Optional-
Ein boolescher Wert; ein Wert von
true
weist den Browser an, den aktuellen Tab als die herausragendste Aufnahmequelle anzubieten, d.h. als separate "Dieser Tab"-Option in den dem Benutzer präsentierten "Wählen Sie aus, was Sie teilen möchten"-Optionen. Dies ist nützlich, da viele Apptypen im Allgemeinen nur den aktuellen Tab teilen möchten. Zum Beispiel könnte eine Folienpräsentations-App dem Benutzer ermöglichen wollen, den aktuellen Tab mit der Präsentation zu einem virtuellen Konferenz weiterzustreamen. 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 soll, den aktuellen Tab zur Aufnahme auszuwählen. Dies hilft, den "endlosen Spiegelhalleneffekt" zu vermeiden, der auftritt, wenn eine Videokonferenz-App versehentlich ihr eigenes Display teilt. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser den aktuellen Tab in den für die Aufnahme angebotenen Auswahlmöglichkeiten einbeziehen soll, undexclude
, was darauf hinweist, dass er 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 eine Steuerung anzeigen soll, die dem Benutzer erlaubt, während des Bildschirmteilens dynamisch den geteilten Tab zu wechseln. Dies ist viel praktischer, als jedes Mal, wenn ein Benutzer den geteilten Tab wechseln möchte, den gesamten Teilungsvorgang erneut durchlaufen zu müssen. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser die Steuerung einbeziehen soll, undexclude
, was darauf hinweist, dass sie nicht angezeigt 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 einbeziehen soll. Mögliche Werte sind
include
, was darauf hinweist, dass der Browser das Systemaudio in die Auswahlliste einbeziehen soll, undexclude
, was darauf hinweist, dass es ausgeschlossen werden soll. Ein Standardwert wird von der Spezifikation nicht vorgeschrieben; siehe den Abschnitt Browser-Kompatibilität für browserspezifische Standardeinstellungen.
Hinweis: Siehe den Artikel Fähigkeiten, Zwänge und Einstellungen für ausführlichere Informationen darüber, wie diese Optionen funktionieren.
Rückgabewert
Ein Promise
, der auf einen MediaStream
auflöst, der eine Videospur enthält, deren Inhalte aus einem vom Benutzer ausgewählten Bildschirmbereich stammen, sowie optional eine Audiospur enthält.
Hinweis: Die Browserunterstützung für Audiospuren variiert, sowohl im Hinblick darauf, ob sie überhaupt vom Medienrecorder unterstützt werden, als auch im Hinblick 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 ein Misserfolg keine der anderen hier aufgeführten Ausnahmen entspricht.
InvalidStateError
DOMException
-
Wird ausgelöst, wenn der Aufruf von
getDisplayMedia()
nicht aus einem Code heraus gemacht wurde, der aufgrund einer vorübergehenden Aktivierung ausgeführt wird, wie z.B. einem Ereignishandler. Oder wenn der Browserkontext nicht vollständig aktiv oder nicht fokussiert ist. Oder wenn diecontroller
-Option bereits zur Erstellung eines anderenMediaStream
verwendet wurde. NotAllowedError
DOMException
-
Wird ausgelöst, wenn die Erlaubnis zum Zugriff auf einen Bildschirmbereich vom Benutzer verweigert wurde oder die aktuelle Browsersitzung keinen Zugriff auf Bildschirmfreigabe hat (z.B. durch eine Berechtigungsrichtlinie).
NotFoundError
DOMException
-
Wird ausgelöst, wenn keine Quellen für Bildschirmvideo zur Erfassung verfügbar sind.
NotReadableError
DOMException
-
Wird ausgelöst, wenn der Benutzer einen Bildschirm, ein Fenster, einen Tab oder eine andere Quelle für Bildschirmdaten ausgewählt hat, aber ein Hardware- oder Betriebssystemfehler oder -sperre aufgetreten ist, die das Teilen der ausgewählten Quelle verhindert.
OverconstrainedError
DOMException
-
Wird ausgelöst, wenn nach der Erstellung des Streams das Anwenden von spezifizierten Einschränkungen fehlschlägt, da 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 spezifizierteMediaTrackConstraints
nicht erlaubt sind.min
- undexact
-Werte sind in Einschränkungen, die ingetDisplayMedia()
-Aufrufen verwendet werden, nicht erlaubt.
Sicherheit
Da getDisplayMedia()
auf bösartige Weise verwendet werden könnte, kann es eine Quelle erheblicher Datenschutz- und Sicherheitsbedenken sein. Aus diesem Grund enthält die Spezifikation Maßnahmen, die die Browser ergreifen müssen, um getDisplayMedia()
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 eine Ausgabe zu erzeugen, die den Optionen entspricht.
- Die Erlaubnis
getDisplayMedia()
zu verwenden, kann nicht gespeichert werden, um sie wiederzuverwenden. Der Benutzer muss jedes Mal um Erlaubnis gefragt werden. - Vorübergehende 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 darüber zu geben, Bildschirmbereiche oder Fenster zu teilen, die Browser enthalten, und auch darauf zu achten, welche anderen Inhalte erfasst und anderen Benutzern angezeigt werden könnten.
Beispiele
Im folgenden Beispiel wird eine startCapture()
-Methode erstellt, die die Bildschirmaufnahme mit einem Satz von durch den Parameter displayMediaOptions
spezifizierten Optionen startet.
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 getDisplayMedia()
zu warten, damit es mit einem MediaStream
aufgelöst wird, der die angeforderten Anzeigeinhalte gemäß den angegebenen Optionen enthält. Der Stream wird dann an den Aufrufer zurückgegeben, um verwendet zu werden, vielleicht um ihn zu einem WebRTC-Anruf hinzuzufügen, indem RTCPeerConnection.addTrack()
verwendet wird, um die Videospur aus dem Stream hinzuzufügen.
Hinweis:
Die Demonstration der Bildschirmfreigabesteuerungen 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