Przyszłość funkcji obraz w obrazie

François Beaufort
François Beaufort

Przed wprowadzeniem interfejsu Document Picture-in-Picture API w oknie Picture-in-Picture można było umieścić tylko element HTML <video>. Ten nowy interfejs API umożliwia otwieranie zawsze aktywnego okna, które można wypełnić dowolną treścią HTML. Jest ona dostępna jako wersja próbna origin od wersji Chrome 111 na komputery.

Okno obrazu w obrazie z odtwarzanym zwiastunem filmu Sintel.
Okno obrazu w obrazie utworzone za pomocą interfejsu Document Picture-in-Picture API (demo).

Nowy interfejs API zapewnia znacznie więcej możliwości niż to dostępne w przypadku interfejsu Picture-in-Picture API dla platformy <video>. Możesz na przykład udostępnić niestandardowe elementy sterujące i dane wejściowe (np. napisy, playlisty, suwak czasu, możliwość polubienia lub nie filmów), aby ulepszyć działanie odtwarzacza wideo w trybie obrazu w obrazie.

Dzięki pełnemu dokumentowi w trybie obrazu w obrazie aplikacje internetowe do rozmów wideo mogą łączyć wiele strumieni wideo w jednym oknie obrazu w obrazie bez konieczności korzystania z hacków na potrzeby obrazu. Mogą też korzystać z niestandardowych elementów sterujących, takich jak wysyłanie wiadomości, wyciszanie innego użytkownika czy podnoszenie ręki.

Ten fragment kodu pokazuje, jak włączyć tryb obrazu w obrazie w przypadku niestandardowego odtwarzacza wideo.

async function togglePictureInPicture() {
  // Close Picture-in-Picture window if any.
  if (documentPictureInPicture.window) {
    documentPictureInPicture.window.close();
    return;
  }

  // Open a Picture-in-Picture window.
  const pipWindow = await documentPictureInPicture.requestWindow({
    initialAspectRatio: 640 / 360,
    copyStyleSheets: true,
  });

  // Move video to the Picture-in-Picture window.
  const video = document.querySelector("#video");
  pipWindow.document.body.append(video);

  // Listen for the PiP closing event to move the video back.
  pipWindow.addEventListener("unload", (event) => {
    const videoContainer = document.querySelector("#videoContainer");
    const pipVideo = event.target.querySelector("#video");
    videoContainer.append(pipVideo);
  });
}

Więcej informacji znajdziesz w artykule Obraz w obrazie dla dowolnego elementu, nie tylko dla elementu <video>.

Na tym etapie opinie deweloperów są bardzo ważne, dlatego przesyłajcie problemy na GitHub, dodając sugestie i pytania.