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 des MediaDevices
Interfaces fordert den Benutzer auf, die Erlaubnis zu erteilen, den Inhalt eines Bildschirms oder eines Teils davon (wie ein Fenster) als MediaStream
zu erfassen.
Der daraus 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 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
MediaTrackConstraints
Instanz; der Standardwert isttrue
. Wenn diese Option weggelassen oder auftrue
gesetzt wird, enthält der zurückgegebeneMediaStream
einen Video-Track. DagetDisplayMedia()
einen Video-Track erfordert, wird das Versprechen abgelehnt, wenn diese Option auffalse
gesetzt ist, mit einemTypeError
. audio
Optional-
Ein boolescher Wert oder eine
MediaTrackConstraints
Instanz; der Standardwert istfalse
. Ein Wert vontrue
gibt an, dass der zurückgegebeneMediaStream
einen Audio-Track enthält, falls Audio unterstützt und für die vom Benutzer ausgewählte Anzeigeoberfläche verfügbar ist. controller
Experimentell Optional-
Eine
CaptureController
Objektinstanz, die Methoden enthält, die zur weiteren Manipulation der Aufnahmesitzung verwendet werden können, falls eingeschlossen. monitorTypeSurfaces
Experimentell Optional-
Ein aufgezählter Wert, der angibt, ob der Browser gesamte Bildschirme in den dem Benutzer angebotenen Bildschirmaufnahmeoptionen zusammen mit Tab- und Fensteroptionen anbieten sollte. Diese Option soll Unternehmen davor schützen, dass private Informationen durch Benutzerfehler bei der Verwendung von Videokonferenz-Apps durchsickern. Mögliche Werte sind:
include
: Hinweis, dass der Browser Bildschirmoptionen einschließen sollte.exclude
: Hinweis, dass Bildschirmoptionen ausgeschlossen werden sollten.
Hinweis: Sie können
monitorTypeSurfaces: "exclude"
nicht gleichzeitig mitdisplaySurface: "monitor"
festlegen, da die beiden Einstellungen widersprüchlich sind. Der Versuch, dies zu tun, 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 hervorgehobene Aufnahmequelle anzubieten, das heißt, als separate "Dieser Tab" Option in den dem Benutzer angebotenen "Teilen, was Sie teilen möchten" Optionen. Dies ist nützlich, da viele App-Typen im Allgemeinen nur den aktuellen Tab teilen möchten. Beispielsweise könnte eine Präsentations-App dem Benutzer erlauben, den aktuellen Tab mit der Präsentation zu einem virtuellen Konferenz zu streamen. selfBrowserSurface
Experimentell Optional-
Ein aufgezählter Wert, der angibt, ob der Browser dem Benutzer erlauben sollte, den aktuellen Tab zur Aufnahme auszuwählen. Dies hilft, den "unendlichen Spiegelkabinett"-Effekt zu vermeiden, der auftritt, wenn eine Videokonferenz-App versehentlich ihr eigenes Display teilt. Mögliche Werte sind:
include
: Hinweis, dass der Browser den aktuellen Tab in die angebotenen Auswahlmöglichkeiten für die Aufnahme einschließen sollte.exclude
: Hinweis, dass der aktuelle Tab von den Auswahlmöglichkeiten ausgeschlossen werden sollte.
surfaceSwitching
Experimentell Optional-
Ein aufgezählter Wert, der angibt, ob der Browser eine Steuerung anzeigen sollte, um dem Benutzer zu ermöglichen, während der Bildschirmübertragung dynamisch den geteilten Tab zu wechseln. Dies ist bequemer, als jedes Mal, wenn ein Benutzer den geteilten Tab wechseln will, den gesamten Freigabeprozess erneut durchlaufen zu müssen. Mögliche Werte sind:
include
: Hinweis, dass der Browser die Steuerung einschließen sollte.exclude
: Hinweis, dass die Steuerung nicht angezeigt werden sollte.
systemAudio
Experimentell Optional-
Ein aufgezählter Wert, der angibt, ob der Browser das Systemaudio unter den dem Benutzer angebotenen möglichen Audioquellen einschließen sollte. Mögliche Werte sind:
include
: Hinweis, dass der Browser das Systemaudio in die Auswahlmöglichkeiten einschließen sollte.exclude
: Hinweis, dass das Systemaudio von den angezeigten Auswahlmöglichkeiten ausgeschlossen werden sollte.
windowAudio
Experimentell Optional-
Ein aufgezählter Wert, der dem Browser Hinweise gibt, welche Audiofreigabeoption der Benutzer neben Fensterfreigabeoptionen präsentiert werden sollte. Mögliche Werte sind:
exclude
: Hinweis, dass Audio nicht freigegeben werden sollte, wenn eine Fensterfreigabeoption gewählt wird.window
: Hinweis, dass beim Auswählen einer Fensterfreigabeoption nur Audio, das von diesem Fenster stammt, freigegeben werden sollte.system
: Hinweis, dass beim Auswählen einer Fensterfreigabeoption das gesamte Systemaudio freigegeben werden sollte.
Hinweis: Für die meisten dieser Optionen ist kein Standardwert durch die Spezifikation vorgeschrieben. Für alleinstehende Optionen ohne erwähnten Standardwert, siehe den Abschnitt Browser-Kompatibilität für browserspezifische Standardwerte.
Hinweis: Siehe den Artikel Fähigkeiten, Einschränkungen und Einstellungen für viel mehr Details darüber, wie diese Optionen arbeiten.
Rückgabewert
Ein Promise
, das zu einem MediaStream
auflöst, der einen Videotrack enthält, dessen Inhalte aus einem vom Benutzer ausgewählten Bildschirmbereich stammen, sowie ein optionaler Audiotrack.
Hinweis: Die Unterstützung von Audiotracks in Browsern variiert, sowohl hinsichtlich der Frage, ob sie überhaupt vom Media Recorder unterstützt werden, als auch hinsichtlich der 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 auftritt, der keiner der hier aufgeführten Ausnahmen entspricht.
InvalidStateError
DOMException
-
Wird ausgelöst, wenn der Aufruf von
getDisplayMedia()
nicht von Code ausgeführt wird, der aufgrund einer flüchtigen Aktivierung, z. B. einem Ereignishandler, ausgeführt wird. Oder wenn der Browserkontext nicht vollständig aktiv oder nicht fokussiert ist. Oder wenn diecontroller
Optionen bereits bei der Erstellung eines anderenMediaStream
verwendet wurde. NotAllowedError
DOMException
-
Wird ausgelöst, wenn die Erlaubnis zum Zugreifen auf einen Bildschirmbereich vom Benutzer verweigert wurde oder die aktuelle Browsing-Instanz nicht für den Zugriff auf Bildschirmfreigabe berechtigt ist (zum Beispiel durch eine Berechtigungsrichtlinie).
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, einen Tab oder eine andere Quelle für Bildschirmdaten ausgewählt hat, aber ein Hardware- oder Betriebssystem-Ebene-Fehler oder eine Sperrung aufgetreten ist, die das Teilen der ausgewählten Quelle verhindert.
OverconstrainedError
DOMException
-
Wird ausgelöst, wenn nach der Erstellung des Streams das Anwenden von angegebenen 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 angegebeneMediaTrackConstraints
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 signifikanter 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 angewandt werden, nachdem der Benutzer eine Quelle gewählt hat, um eine Ausgabe zu generieren, die den Optionen entspricht.
- Die Erlaubnis,
getDisplayMedia()
zu verwenden, kann nicht für eine spätere Verwendung gespeichert werden. Der Benutzer muss jedes Mal um Erlaubnis gebeten werden. - Flüchtige Benutzeraktivierung ist erforderlich. Der Benutzer muss mit der Seite oder einem UI-Element interagieren, damit diese Funktion funktioniert.
- Browser werden dazu ermutigt, Benutzer zu warnen, wenn Sie Bildschirme oder Fenster teilen, die Browser enthalten, und genau darauf zu achten, welche anderen Inhalte möglicherweise erfasst und anderen Benutzern angezeigt werden könnten.
Beispiele
Im folgenden Beispiel wird eine Methode startCapture()
erstellt, die eine Bildschirmaufnahme mit einer Reihe 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 die Auflösung von getDisplayMedia()
mit einem MediaStream
zu warten, der die angeforderten Display-Inhalte gemäß den angegebenen Optionen enthält. Der Stream wird dann an den Aufrufer zur Verwendung zurückgegeben, möglicherweise um ihn zu einem WebRTC-Anruf hinzuzufügen, indem RTCPeerConnection.addTrack()
verwendet wird, um den Videotrack aus dem Stream hinzuzufügen.
Hinweis:
Die Bildschirmfreigabe-Steuerelemente Demo bietet eine vollständige Implementierung, die es Ihnen erlaubt, eine Bildschirmaufnahme mit Ihrer Wahl von getDisplayMedia()
-Einschränkungen und Optionen zu erstellen.
Spezifikationen
Specification |
---|
Screen Capture> # dom-mediadevices-getdisplaymedia> |
Browser-Kompatibilität
Loading…
Siehe auch
- Screen Capture API
- Verwendung der Screen Capture API
- Media Capture and Streams API
- WebRTC API
getUserMedia()
: Erfassen von Medien von einer Kamera und/oder einem Mikrofon