Ustawienia udostępniania ekranu chroniące prywatność

François Beaufort
François Beaufort

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()

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" },
});
Zrzut ekranu selektora multimediów z wcześniej wybranym
W selektorze multimediów wstępnie wybrany jest panel „Okno”.

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",
});
Zrzut ekranu przedstawiający selektor multimediów bez
W selektorze multimediów nie widać panelu „Cały ekran”.

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().

Zrzut ekranu przycisku służącego do dynamicznego przełączania się między udostępnianiem różnych kart
Przycisk „Udostępnij tę kartę” w Chrome.

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 🦶🔫.
});
Zrzut ekranu selektora multimediów bez bieżącej karty
Bieżąca karta jest wykluczona, widoczna jest tylko druga karta.

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.

Zrzuty ekranu selektorów multimediów z funkcją udostępniania dźwięku z karty
Udostępnianie dźwięku z karty jest dostępne w panelu „Karta Chrome”, ale nie w panelu „Cały ekran”.

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, surfaceSwitchingselfBrowserSurface są dostępne w Chrome 107 na komputerze.

Browser Support

  • Chrome: 105.
  • Edge: 105.
  • Firefox: not supported.
  • Safari: not supported.

  • systemAudio jest dostępny w Chrome 105 na komputerze.

Browser Support

  • Chrome: 119.
  • Edge: 119.
  • Firefox: not supported.
  • Safari: not supported.

  • 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?

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.

Podziękowania

Dziękujemy Rachel Andrew za sprawdzenie tego artykułu.