Skip to main content
Controls picture-in-picture mode. Required by PiPButton.

Import

import { pip, selectPiP } from '@videojs/react';
// or
import { pip, selectPiP } from '@videojs/html';

Usage

import { createPlayer, pip } from '@videojs/react';

const Player = createPlayer({
  features: [pip],
});

State

pip
boolean
Whether the player is currently in picture-in-picture mode.
pipAvailability
MediaFeatureAvailability
Whether picture-in-picture is supported in the current environment.Possible values:
  • 'available' — Ready to use
  • 'unavailable' — Could work but not ready yet
  • 'unsupported' — Platform can never support PiP (e.g. iOS Safari)

Actions

requestPictureInPicture()
() => Promise<void>
Enter picture-in-picture mode. Returns a promise that resolves when PiP is active.
exitPictureInPicture()
() => Promise<void>
Exit picture-in-picture mode. Returns a promise that resolves when PiP is exited.

Selector

Use selectPiP to subscribe to only the PiP slice of state. Returns undefined if the pip feature is not configured.
import { selectPiP, usePlayer } from '@videojs/react';

function PiPButton() {
  const pip = usePlayer(selectPiP);
  if (!pip || pip.pipAvailability !== 'available') return null;

  return (
    <button onClick={pip.pip ? pip.exitPictureInPicture : pip.requestPictureInPicture}>
      {pip.pip ? 'Exit PiP' : 'Picture-in-Picture'}
    </button>
  );
}
Picture-in-picture is not available on iOS Safari. Check pipAvailability before calling requestPictureInPicture().
Required by: PiPButton

Build docs developers (and LLMs) love