Pantalla en pantalla automática para apps web

François Beaufort
François Beaufort

Con la reciente introducción de la API de Pantalla en pantalla de documentos (y también antes), los desarrolladores web están cada vez más interesados en poder abrir automáticamente una ventana de pantalla en pantalla cuando el usuario cambia el enfoque de la pestaña actual. Esto es especialmente útil para las aplicaciones web de videoconferencia, donde permite a los presentadores ver e interactuar con los participantes en tiempo real mientras presentan un documento o usan otras pestañas o ventanas.

Una ventana de pantalla en pantalla se abre y se cierra automáticamente cuando el usuario cambia de pestaña.

Ingresa al modo de pantalla en pantalla automáticamente

Para admitir estos casos de uso de videoconferencia, desde Chrome 120, las apps web para computadoras pueden ingresar automáticamente al modo de pantalla en pantalla, con algunas restricciones para garantizar una experiencia del usuario positiva. Una app web solo es apta para la función de pantalla en pantalla automática si cumple con todas las condiciones siguientes:

  • Registró un controlador de acción de sesión multimedia para la acción "enterpictureinpicture".

  • Está capturando activamente la cámara o el micrófono a través de getUserMedia.

  • El usuario habilita el modo de “pantalla en pantalla automática” mediante una configuración del navegador habilitada de forma predeterminada.

Captura de pantalla del parámetro de configuración de pantalla en pantalla automática en el panel de información del sitio del navegador Chrome.
Configuración automática de pantalla en pantalla en el panel de información del sitio del navegador Chrome.

Cuando una app web es apta, la función de devolución de llamada del controlador de acciones de la sesión multimedia para la acción "enterpictureinpicture" se activa cuando el usuario cambia el enfoque a otra pestaña, lo que le permite abrir una ventana de pantalla en pantalla sin un gesto del usuario.

Los desarrolladores web pueden usar la API de pantalla en pantalla para <video> para abrir una ventana de pantalla en pantalla desde un elemento de <video> HTML o la API de pantalla en pantalla de documentos para abrir una ventana siempre en pantalla a fin de completar con contenido HTML arbitrario. La ventana de pantalla en pantalla no se enfoca cuando se abre y se cierra automáticamente cuando la visibilidad de la página vuelve a ser visible.

En el siguiente ejemplo, se muestra cómo solicitar acceso a la cámara del usuario. Luego, registra de forma segura un controlador de acciones de sesión multimedia para la acción "enterpictureinpicture" con una función de devolución de llamada que abra una ventana de pantalla en pantalla. Esta ventana contiene la transmisión de video por Internet de la cámara del usuario con la API de pantalla en pantalla para <video>.

const video = document.querySelector("video");
// Request access to the user's camera.
navigator.mediaDevices.getUserMedia({ video: true }).then((stream) => {
  video.srcObject = stream;
});

try {
  // Request video to automatically enter picture-in-picture when eligible.
  navigator.mediaSession.setActionHandler("enterpictureinpicture", () => {
    video.requestPictureInPicture();
  });
} catch (error) {
  console.log("The enterpictureinpicture action is not yet supported.");
}

Prueba el ejemplo de Sesión multimedia para videoconferencias.

Ingresa a la función pantalla en pantalla desde el control multimedia del navegador

La acción de sesión multimedia "enterpictureinpicture" también es útil cuando el usuario quiere ingresar al modo de pantalla en pantalla con el control multimedia de la IU del navegador Chrome.

Captura de pantalla del control multimedia en el navegador Chrome, con el cursor en el control del usuario de pantalla en pantalla.
Control multimedia en el navegador Chrome con el cursor en el control del usuario de pantalla en pantalla.

Cuando no se está reproduciendo un elemento <video> HTML, sino solo audio, si registras el controlador de acciones de la sesión multimedia de "enterpictureinpicture", se le indicará al navegador que la app web sabe cómo controlarlo y que abrirá una ventana de pantalla en pantalla.

También resulta útil cuando la app web quiere usar la API de Document Picture-in-Picture para abrir una ventana de pantalla en pantalla en lugar de permitir que el navegador la maneje con la API de pantalla en pantalla para <video>.

En el siguiente ejemplo, se muestra cómo registrar de forma segura un controlador de acciones de sesión multimedia para la acción "enterpictureinpicture". La función de devolución de llamada abre una ventana de pantalla en pantalla con la API de Document Picture-in-Picture cuando el usuario ingresa a esta función con el control multimedia de la IU del navegador Chrome.

try {
  // Use the Document Picture-in-Picture API when entering
  // picture-in-picture from browser media control.
  navigator.mediaSession.setActionHandler("enterpictureinpicture", async () => {
    const pipWindow = await documentPictureInPicture.requestWindow();
    // Populate HTML content and handle closing window...
  });
} catch (error) {
  console.log("The enterpictureinpicture action is not yet supported.");
}

Prueba la demostración del reproductor VideoJS o la muestra de sesión multimedia de video de la API de Document Picture-in-Picture.

Interactúa y comparte comentarios

Si tienes algún comentario o problema, puedes compartirlo en crbug.com.

Recursos

Agradecimientos

Gracias a Tommy Steimel, Ryan Flores, Shimi Rahim, Frank Liberato y Rachel Andrew por sus opiniones.

Hero image de pine watt en Unsplash.