Udostępnianie kart, okien i ekranów jest już możliwe na platformie internetowej dzięki interfejsowi Screen Capture API. W skrócie: getDisplayMedia()
umożliwia użytkownikowi wybranie ekranu lub jego części (np. okna), które mają zostać zarejestrowane jako strumień multimediów. Strumień można nagrać lub udostępnić innym osobom w sieci. Niedawno wprowadziliśmy zmiany w interfejsie API, aby lepiej chronić prywatność i zapobiegać przypadkowemu udostępnianiu danych osobowych.
Oto lista narzędzi, których możesz używać do udostępniania ekranu z zachowaniem prywatności:
- Opcja
displaySurface
może wskazywać, że aplikacja internetowa preferuje określony typ powierzchni wyświetlania (karty, okna lub ekrany). - Opcja
monitorTypeSurfaces
może służyć do uniemożliwienia użytkownikowi udostępniania całego ekranu. - Opcja
surfaceSwitching
określa, czy Chrome ma zezwalać użytkownikowi na dynamiczne przełączanie się między udostępnionymi kartami. - Opcja
selfBrowserSurface
może uniemożliwić użytkownikowi udostępnianie bieżącej karty. Pozwala to uniknąć efektu „sali luster”. - Opcja
systemAudio
zapewnia, że Chrome będzie oferować użytkownikowi tylko odpowiednie opcje przechwytywania dźwięku.
Zmiany w getDisplayMedia()
W getDisplayMedia()
wprowadziliśmy te zmiany:
Opcja displaySurface
Aplikacje internetowe ze specjalistycznymi ścieżkami użytkownika, które działają najlepiej w przypadku udostępniania okna lub ekranu, nadal mogą prosić Chrome o wyświetlanie okien lub ekranów w selektorze multimediów. Kolejność ofert pozostaje bez zmian, ale odpowiedni panel jest wstępnie wybrany.
Wartości opcji displaySurface
to:
"browser"
w przypadku kart."window"
– w przypadku okien."monitor"
na ekrany.
const stream = await navigator.mediaDevices.getDisplayMedia({
// Pre-select the "Window" pane in the media picker.
video: { displaySurface: "window" },
});

Nie oferujemy możliwości wstępnego wybrania konkretnego okna ani ekranu. Jest to celowe, ponieważ dałoby to aplikacji internetowej zbyt dużą kontrolę nad użytkownikiem.
Opcja monitorTypeSurfaces
Aby chronić firmy przed wyciekiem informacji prywatnych w wyniku błędu pracownika, aplikacje internetowe do wideokonferencji mogą teraz ustawić wartość monitorTypeSurfaces
na "exclude"
. Chrome wykluczy wtedy ekrany z selektora multimediów. Aby ją uwzględnić, ustaw wartość "include"
. Obecnie wartość domyślna parametru monitorTypeSurfaces
to "include"
, ale aplikacje internetowe powinny ustawiać ją jawnie, ponieważ w przyszłości może się ona zmienić.
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
// Remove the "Entire Screen" pane in the media picker.
monitorTypeSurfaces: "exclude",
});

Pamiętaj, że jawne monitorTypeSurfaces: "exclude"
wyklucza się wzajemnie z displaySurface: "monitor"
.
Opcja surfaceSwitching
Jednym z najczęstszych powodów udostępniania całego ekranu jest chęć płynnego przełączania się między różnymi obszarami podczas sesji. Aby rozwiązać ten problem, Chrome udostępnia teraz przycisk, który umożliwia użytkownikowi dynamiczne przełączanie się między udostępnianiem różnych kart. Przycisk „Udostępnij tę kartę” był wcześniej dostępny w rozszerzeniach do Chrome, a teraz może być używany przez dowolną aplikację internetową, która wywołuje funkcję getDisplayMedia()
.

Jeśli zasada surfaceSwitching
ma wartość "include"
, przeglądarka będzie wyświetlać ten przycisk. Jeśli ma wartość "exclude"
, przycisk nie będzie wyświetlany. Aplikacje internetowe powinny ustawić wyraźną wartość, ponieważ Chrome może z czasem zmienić wartość domyślną.
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
// Ask Chrome to expose browser-level UX elements that allow
// the user to switch the underlying track at any time,
// initiated by the user and without prior action by the web app.
surfaceSwitching: "include"
});
Opcja selfBrowserSurface
Podczas rozmów wideo użytkownicy często popełniają błąd, wybierając samą kartę rozmowy wideo, co powoduje efekt „sali luster”, wycie i ogólne zamieszanie.
Aby chronić użytkowników przed nimi samymi, internetowe aplikacje do obsługi rozmów wideo mogą teraz ustawić wartość selfBrowserSurface
na "exclude"
. Chrome wykluczy wtedy bieżącą kartę z listy kart oferowanych użytkownikowi. Aby ją uwzględnić, ustaw wartość "include"
. Obecnie wartość domyślna parametru selfBrowserSurface
to "exclude"
, ale aplikacje internetowe powinny ustawiać ją jawnie, ponieważ w przyszłości może się ona zmienić.
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
selfBrowserSurface: "exclude" // Avoid 🦶🔫.
});

Pamiętaj, że jawne selfBrowserSurface: "exclude"
wyklucza się wzajemnie z preferCurrentTab: true
.
Opcja systemAudio
getDisplayMedia()
umożliwia rejestrowanie dźwięku wraz z obrazem. Nie wszystkie dźwięki są jednak takie same. Rozważ użycie aplikacji internetowych do wideokonferencji: jeśli użytkownik udostępnia inną kartę, warto też przechwytywać dźwięk.
– Dźwięk systemowy obejmuje natomiast dźwięk uczestników zdalnych i nie powinien być im przesyłany z powrotem.
W przyszłości może być możliwe wykluczenie niektórych źródeł dźwięku z nagrywania. Obecnie jednak aplikacje internetowe do rozmów wideo często unikają przechwytywania dźwięku systemowego. Wcześniej można było to zrobić, sprawdzając, jaką powierzchnię wyświetlania wybrał użytkownik, i zatrzymując ścieżkę dźwiękową, jeśli zdecydował się udostępnić ekran. Powoduje to jednak pewien problem, ponieważ niektórzy użytkownicy są zdezorientowani, gdy zaznaczają pole wyboru, aby udostępnić dźwięk z systemu, a następnie dowiadują się od uczestników zdalnych, że nie słyszą dźwięku.

Ustawienie systemAudio
na "exclude"
pozwala aplikacji internetowej uniknąć wprowadzania użytkowników w błąd przez sprzeczne sygnały. Chrome zaproponuje nagrywanie dźwięku wraz z kartami i oknami, ale nie z ekranami.
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: true, // Ask to capture audio; caveat follows.
systemAudio: "exclude" // Do not offer to capture *system* audio.
});
Obecnie wartość domyślna parametru systemAudio
to "include"
, ale aplikacje internetowe powinny ustawiać ją jawnie, ponieważ w przyszłości może się ona zmienić.
Prezentacja
Możesz wypróbować te opcje udostępniania ekranu, uruchamiając wersję demonstracyjną.
Obsługa przeglądarek
displaySurface
,surfaceSwitching
iselfBrowserSurface
są dostępne w Chrome 107 na komputerze.
Browser Support
systemAudio
jest dostępny w Chrome 105 na komputerze.
Browser Support
monitorTypeSurfaces
jest dostępna w Chrome 119 na komputerze.
Prześlij opinię
Zespół Chrome i społeczność zajmująca się standardami internetowymi chcą poznać Twoje opinie na temat tych elementów sterujących udostępnianiem ekranu.
Opisz projekt
Czy coś w tych opcjach udostępniania ekranu nie działa zgodnie z Twoimi oczekiwaniami? Czy brakuje metod lub właściwości, które są potrzebne do realizacji Twojego pomysłu? Masz pytania lub uwagi dotyczące modelu zabezpieczeń?
- Zgłoś problem ze specyfikacją w repozytorium GitHub lub dodaj swoje uwagi do istniejącego problemu.
Masz problem z implementacją?
Czy w implementacji Chrome występuje błąd? A może implementacja różni się od specyfikacji?
- Zgłoś błąd na stronie https://new.crbug.com. Podaj jak najwięcej szczegółów i proste instrukcje odtworzenia problemu.
Okaż wsparcie
Czy planujesz używać tych opcji udostępniania ekranu? Twoje publiczne wsparcie pomaga zespołowi Chrome ustalać priorytety funkcji i pokazuje innym dostawcom przeglądarek, jak ważne jest ich obsługiwanie.
Wyślij tweeta do @ChromiumDev i napisz, gdzie i jak korzystasz z tej funkcji.
Przydatne linki
- Specyfikacja
displaySurface
wyjaśnieniemonitorTypeSurfaces
wyjaśnieniesurfaceSwitching
wyjaśnienieselfBrowserSurface
wyjaśnieniesystemAudio
wyjaśnienie- Sprawdzenie przez TAG
Podziękowania
Dziękujemy Rachel Andrew za sprawdzenie tego artykułu.