• English
  • 2.x
  • Player Controls

    The player object returned by useYouTubePlayer exposes direct playback controls, async getters, and dynamic video loading methods.

    Async getter methods are useful after the player is ready. Before YoutubeView attaches the underlying controller, a getter can return undefined, so subscribe to ready before relying on these values.

    Playback actions

    player.play();
    player.pause();
    player.stop();
    player.seekTo(30, true);

    Volume and mute

    player.setVolume(50);
    player.mute();
    player.unMute();
    
    const volume = await player.getVolume();
    const muted = await player.isMuted();

    Player state and video info

    const [currentTime, duration, state, loadedFraction, url, embedCode] = await Promise.all([
      player.getCurrentTime(),
      player.getDuration(),
      player.getPlayerState(),
      player.getVideoLoadedFraction(),
      player.getVideoUrl(),
      player.getVideoEmbedCode(),
    ]);

    Playback rate

    const currentRate = await player.getPlaybackRate();
    const availableRates = await player.getAvailablePlaybackRates();
    
    player.setPlaybackRate(1.5);

    Load or cue another video

    player.loadVideoById('M7lc1UVf-VE');
    player.cueVideoById('M7lc1UVf-VE', 30);
    • loadVideoById starts loading the target video immediately.
    • cueVideoById prepares the target video without starting playback.

    Resize the player

    player.setSize(640, 360);

    This is mostly useful when you need imperative size control after initial render.

    Practical toolbar example

    function Controls({ player, currentTime, isPlaying }: Props) {
      return (
        <>
          <Button title="-10s" onPress={() => player.seekTo(Math.max(currentTime - 10, 0), true)} />
          <Button
            title={isPlaying ? 'Pause' : 'Play'}
            onPress={() => (isPlaying ? player.pause() : player.play())}
          />
          <Button title="Stop" onPress={() => player.stop()} />
          <Button title="+10s" onPress={() => player.seekTo(currentTime + 10, true)} />
        </>
      );
    }

    What belongs here vs events

    Use player methods for actions and on-demand reads. Use useYouTubeEvent for reactive updates that should drive UI automatically.