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
optionsOptional-
Ein Objekt, das Anforderungen für den zurückgegebenen
MediaStreamspezifiziert. Die Optionen fürgetDisplayMedia()funktionieren ähnlich wie die Einschränkungen für dieMediaDevices.getUserMedia()Methode, obwohl in diesem Fall nuraudioundvideoangegeben werden können. Die Liste der möglichen Optionseigenschaften fürgetDisplayMedia()ist wie folgt:videoOptional-
Ein boolescher Wert oder eine
MediaTrackConstraintsInstanz; der Standardwert isttrue. Wenn diese Option weggelassen oder auftruegesetzt wird, enthält der zurückgegebeneMediaStreameinen Video-Track. DagetDisplayMedia()einen Video-Track erfordert, wird das Versprechen abgelehnt, wenn diese Option auffalsegesetzt ist, mit einemTypeError. audioOptional-
Ein boolescher Wert oder eine
MediaTrackConstraintsInstanz; der Standardwert istfalse. Ein Wert vontruegibt an, dass der zurückgegebeneMediaStreameinen Audio-Track enthält, falls Audio unterstützt und für die vom Benutzer ausgewählte Anzeigeoberfläche verfügbar ist. controllerExperimentell Optional-
Eine
CaptureControllerObjektinstanz, die Methoden enthält, die zur weiteren Manipulation der Aufnahmesitzung verwendet werden können, falls eingeschlossen. monitorTypeSurfacesExperimentell 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 einemTypeErrorfehlschlägt. preferCurrentTabNicht standardisiert Experimentell Optional-
Ein boolescher Wert; ein Wert von
trueweist 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. selfBrowserSurfaceExperimentell 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.
surfaceSwitchingExperimentell 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.
systemAudioExperimentell 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.
windowAudioExperimentell 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
AbortErrorDOMException-
Wird ausgelöst, wenn ein Fehler oder Ausfall auftritt, der keiner der hier aufgeführten Ausnahmen entspricht.
InvalidStateErrorDOMException-
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 diecontrollerOptionen bereits bei der Erstellung eines anderenMediaStreamverwendet wurde. NotAllowedErrorDOMException-
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).
NotFoundErrorDOMException-
Wird ausgelöst, wenn keine Quellen für Bildschirmvideo zur Aufnahme verfügbar sind.
NotReadableErrorDOMException-
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.
OverconstrainedErrorDOMException-
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
optionsWerte enthalten, die beim Aufruf vongetDisplayMedia()nicht erlaubt sind, z. B. einevideoEigenschaft, die auf false gesetzt ist, oder wenn angegebeneMediaTrackConstraintsnicht 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