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 (z. B. ein Fenster) als MediaStream aufzunehmen.
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
optionsOptional-
Ein Objekt, das Anforderungen für den zurückgegebenen
MediaStreamspezifiziert. Die Optionen fürgetDisplayMedia()funktionieren ähnlich wie die Einschränkungen für die MethodeMediaDevices.getUserMedia(), obwohl dort nuraudioundvideospezifiziert werden können. Die Liste der möglichen Optionen fürgetDisplayMedia()umfasst:videoOptional-
Ein boolescher Wert oder eine Instanz von
MediaTrackConstraints; der Standardwert isttrue. Wenn diese Option weggelassen oder auftruegesetzt wird, enthält der zurückgegebeneMediaStreameine Videospur. DagetDisplayMedia()eine Videospur erfordert, wird der Promise abgelehnt mit einemTypeError, wenn diese Option auffalsegesetzt ist. audioOptional-
Ein boolescher Wert oder eine Instanz von
MediaTrackConstraints; der Standardwert istfalse. Ein Wert vontruebedeutet, dass der zurückgegebeneMediaStreameine Audiospur enthält, wenn Audio unterstützt und für die vom Benutzer gewählte Anzeige verfügbar ist. controllerExperimentell Optional-
Ein
CaptureControllerObjekt, das Methoden enthält, die verwendet werden können, um die Erfassungssitzung weiter zu manipulieren, falls enthalten. monitorTypeSurfacesExperimentell Optional-
Ein enumerierter Wert, der spezifiziert, ob der Browser ganze Bildschirme neben Tab- und Fensteroptionen in den Bildschirmfreigabeoptionen anzeigen soll. Diese Option soll Unternehmen vor dem Verlust privater Informationen durch Bedienfehler bei der Nutzung von Videokonferenz-Apps schützen. Mögliche Werte sind:
include: Der Browser sollte Bildschirmoptionen einschließen.exclude: Bildschirmoptionen sollten ausgeschlossen werden.
Hinweis: Sie können nicht
monitorTypeSurfaces: "exclude"und gleichzeitigdisplaySurface: "monitor"setzen, da diese 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 prominenteste Quelle für die Aufzeichnung anzubieten, also als Option "Dieser Tab" in den "Wählen Sie, was Sie teilen möchten"-Optionen, die dem Benutzer präsentiert werden. Dies ist nützlich, da viele App-Typen meist nur den aktuellen Tab teilen möchten. Zum Beispiel möchte eine Präsentations-App möglicherweise den aktuellen Tab, der die Präsentation enthält, zu einer virtuellen Konferenz streamen. selfBrowserSurfaceExperimentell Optional-
Ein enumerierter Wert, der spezifiziert, ob der Browser dem Benutzer erlauben soll, den aktuellen Tab für die Aufzeichnung auszuwählen. Dies hilft, den "endlosen Spiegel" Effekt zu vermeiden, wenn eine Videokonferenz-App versehentlich ihr eigenes Display teilt. Mögliche Werte sind:
include: Der Browser sollte den aktuellen Tab in den Auswahlen einschließen.exclude: Der aktuelle Tab sollte von den Auswahlen ausgeschlossen werden.
surfaceSwitchingExperimentell Optional-
Ein enumerierter Wert, der spezifiziert, ob der Browser eine Steuerung anzeigen soll, die es dem Benutzer ermöglicht, während der Bildschirmfreigabe dynamisch den geteilten Tab zu wechseln. Dies ist praktischer, als jedes Mal den gesamten Freigabeprozess erneut durchzuführen, wenn ein Benutzer den geteilten Tab wechseln möchte. Mögliche Werte sind:
include: Der Browser sollte die Steuerung einschließen.exclude: Die Steuerung sollte nicht angezeigt werden.
systemAudioExperimentell Optional-
Ein enumerierter Wert, der spezifiziert, ob der Browser das Systemaudio in den möglichen Audioquellen, die dem Benutzer angeboten werden, einschließen soll. Mögliche Werte sind:
include: Der Browser sollte das Systemaudio in der Auswahlliste einschließen.exclude: Systemaudio sollte von den gezeigten Auswahlen ausgeschlossen werden.
windowAudioExperimentell Optional-
Ein enumerierter Wert, der dem Browser einen Hinweis darauf gibt, welche Audiofreigabeoption dem Benutzer zusammen mit Fensterfreigabeoptionen angezeigt werden soll. Mögliche Werte sind:
exclude: Hinweis, dass Audio nicht freigegeben werden soll, wenn eine Fensterfreigabeoption ausgewählt wird.window: Hinweis, dass, wenn eine Fensterfreigabeoption ausgewählt wird, nur Audio, das aus diesem Fenster stammt, freigegeben werden soll.system: Hinweis, dass, wenn eine Fensterfreigabeoption ausgewählt wird, das gesamte Systemaudio freigegeben werden soll.
Hinweis: Für die meisten dieser Optionen ist ein Standardwert nicht durch die Spezifikation vorgegeben. Für einzelne Optionen, bei denen kein Standardwert erwähnt wird, siehe den Abschnitt Browser-Kompatibilität für browserspezifische Vorgaben.
Hinweis: Siehe den Artikel Fähigkeiten, Einschränkungen und Einstellungen für eine detaillierte Erklärung, wie diese Optionen funktionieren.
Rückgabewert
Ein Promise, das zu einem MediaStream auflöst, der eine Videospur enthält, deren Inhalt aus einem vom Benutzer ausgewählten Bildschirmbereich stammt, sowie optional eine Audiospur.
Hinweis: Die Unterstützung für Audiospuren variiert zwischen Browsern, sowohl in Bezug auf die Medienrecorder-Funktionalität als auch auf die unterstützten Audioquellen. Überprüfen Sie die Kompatibilitätstabelle für Einzelheiten zu jedem Browser.
Ausnahmen
AbortErrorDOMException-
Wird geworfen, wenn ein Fehler oder ein Problem auftritt, das nicht mit einer der anderen hier aufgeführten Ausnahmen übereinstimmt.
InvalidStateErrorDOMException-
Wird geworfen, wenn der Aufruf von
getDisplayMedia()nicht aus Code gemacht wurde, der auf eine flüchtige Aktivierung zurückgeht, wie z. B. ein Ereignishandler. Oder wenn der Browserkontext nicht vollständig aktiv ist oder nicht im Fokus steht. Oder wenn diecontrollerOption bereits zur Erstellung eines anderenMediaStreamverwendet wurde. NotAllowedErrorDOMException-
Wird geworfen, wenn die Berechtigung zum Zugriff auf einen Bildschirmbereich vom Benutzer verweigert wurde oder die aktuelle Browsersitzung keinen Zugriff auf Bildschirmfreigabe hat (zum Beispiel durch eine Permissions Policy).
NotFoundErrorDOMException-
Wird geworfen, wenn keine Quellen für Bildschirmvideo zur Aufnahme verfügbar sind.
NotReadableErrorDOMException-
Wird geworfen, wenn der Benutzer einen Bildschirm, ein Fenster, einen Tab oder eine andere Quelle für Bildschirmdaten ausgewählt hat und eine Hardware- oder Betriebssystemebene einen Fehler oder eine Sperrung aufgetreten ist, die die Freigabe der ausgewählten Quelle verhindert.
OverconstrainedErrorDOMException-
Wird geworfen, wenn das Anwenden der angegebenen Einschränkungen nach der Erstellung des Streams fehlschlägt, weil kein kompatibler Stream generiert werden konnte.
TypeError-
Wird geworfen, wenn die angegebenen
optionsWerte enthalten, die bei der Aufruf vongetDisplayMedia()nicht erlaubt sind, zum Beispiel einevideo-Eigenschaft, die auf false gesetzt ist, oder wenn angegebeneMediaTrackConstraintsnicht erlaubt sind.minundexactWerte sind in den ingetDisplayMedia()-Aufrufen verwendeten Einschränkungen nicht erlaubt.
Sicherheit
Da getDisplayMedia() in böswilliger Weise genutzt werden könnte, kann sie eine Quelle erheblicher Datenschutz- und Sicherheitsbedenken sein.
Aus diesem Grund beschreibt die Spezifikation Maßnahmen, die Browser befolgen müssen, um getDisplayMedia() vollständig zu unterstützen.
- Die angegebenen Optionen können nicht verwendet werden, um die dem Benutzer verfügbaren Auswahlen 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 zur Nutzung von
getDisplayMedia()kann nicht für die Wiederverwendung beibehalten werden. Der Benutzer muss bei jedem Aufruf um Erlaubnis gebeten werden. - Flüchtige Nutzeraktivierung ist erforderlich. Der Benutzer muss mit der Seite oder einem UI-Element interagieren, damit diese Funktion funktioniert.
- Browser werden ermutigt, den Nutzern eine Warnung über die Freigabe von Anzeigen- oder Fensterinhalten zu geben, in denen Browser enthalten sind, und darauf zu achten, welche anderen Inhalte möglicherweise erfasst und anderen Nutzern angezeigt werden.
Beispiele
Im folgenden Beispiel wird eine startCapture() Methode erstellt, die die Bildschirmaufnahme mit einem Satz von in den displayMediaOptions Parametern spezifizierten Optionen einleitet.
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 auflöst, der das angeforderte Display-Inhalte gemäß den spezifizierten Optionen enthält.
Der Stream wird dann dem Aufrufer zur Verwendung zurückgegeben, möglicherweise zur Hinzufügung zu einem WebRTC-Anruf mithilfe von RTCPeerConnection.addTrack(), um die Videospur des Streams hinzuzufügen.
Hinweis:
Die Screen sharing controls Demo bietet eine vollständige Implementierung, die Ihnen ermöglicht, eine Bildschirmaufnahme mit Ihrer Wahl von 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(): Medienaufnahme von Kamera und/oder Mikrofon