Guia

API IFrame do YouTube: um guia prático

Atualizado em setembro de 2026 · 19 min de leitura

Pontos principais

  • Carregue https://www.youtube.com/iframe_api uma só vez e crie os leitores em onYouTubeIframeAPIReady.

  • Controle a reprodução com playVideo, pauseVideo, seekTo, mute e loadVideoById.

  • Reaja a onStateChange e onError para registar reproduções e saltar vídeos com problemas.

  • A API IFrame não precisa de chave; listar os vídeos de um canal ou de uma playlist exige a YouTube Data API, com chave e quotas.

Carregar a API e criar um leitor

<div id="player"></div>
<script src="https://www.youtube.com/iframe_api"></script>
<script>
  let player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player("player", {
      videoId: "VIDEO_ID",
      playerVars: { playsinline: 1, rel: 0 },
      events: { onReady: e => e.target.mute().playVideo() }
    });
  }
</script>

Métodos mais comuns

Método
O que faz
playVideo() / pauseVideo()
Reproduzir e pausar
seekTo(seconds)
Saltar para um momento
mute() / unMute()
Controlo do som
loadVideoById(id)
Mudar de vídeo
getCurrentTime()
Posição atual

playVideo() / pauseVideo()

O que faz

Reproduzir e pausar

seekTo(seconds)

O que faz

Saltar para um momento

mute() / unMute()

O que faz

Controlo do som

loadVideoById(id)

O que faz

Mudar de vídeo

getCurrentTime()

O que faz

Posição atual

Eventos

onReady, onStateChange (a reproduzir, em pausa, terminado), onError. Use-os para medir visualizações ou iniciar o vídeo seguinte.

Quando não precisa da API

Para uma galeria, uma playlist ou um feed de canal em páginas de marketing, a API dá muito código para manter.

Como a API é carregada

A API IFrame é um único script. Quando termina de carregar, chama uma função global chamada onYouTubeIframeAPIReady — crie aí os seus leitores. Carregue o script uma só vez por página, mesmo que tenha vários leitores, e crie cada leitor no seu próprio elemento.

const players = {};
function onYouTubeIframeAPIReady() {
  document.querySelectorAll("[data-yt]").forEach((el) => {
    players[el.id] = new YT.Player(el.id, {
      videoId: el.dataset.yt,
      playerVars: { rel: 0, playsinline: 1 }
    });
  });
}

Estados do leitor

Valor
Constante
Significado
-1
—
Não iniciado
0
YT.PlayerState.ENDED
Terminado
1
YT.PlayerState.PLAYING
A reproduzir
2
YT.PlayerState.PAUSED
Em pausa
3
YT.PlayerState.BUFFERING
A carregar
5
YT.PlayerState.CUED
Vídeo em fila

-1

Constante

—

Significado

Não iniciado

0

Constante

YT.PlayerState.ENDED

Significado

Terminado

1

Constante

YT.PlayerState.PLAYING

Significado

A reproduzir

2

Constante

YT.PlayerState.PAUSED

Significado

Em pausa

3

Constante

YT.PlayerState.BUFFERING

Significado

A carregar

5

Constante

YT.PlayerState.CUED

Significado

Vídeo em fila

Ouça onStateChange e compare event.data com estas constantes.

Criar um botão de reprodução personalizado

<div id="player"></div>
<button id="play">Play</button>
<script>
  let player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player("player", { videoId: "VIDEO_ID", playerVars: { controls: 0 } });
  }
  document.getElementById("play").onclick = () => {
    const s = player.getPlayerState();
    s === YT.PlayerState.PLAYING ? player.pauseVideo() : player.playVideo();
  };
</script>

Ao ocultar os controlos do YouTube, passa a ser responsável por controlos acessíveis — suporte de teclado e etiquetas.

Registar reproduções e conclusões

events: {
  onStateChange: (e) => {
    const title = e.target.getVideoData().title;
    if (e.data === YT.PlayerState.PLAYING) gtag("event", "video_start", { video_title: title });
    if (e.data === YT.PlayerState.ENDED)   gtag("event", "video_complete", { video_title: title });
  }
}

Tratar erros

Código
Significado
O que fazer
2
Parâmetro inválido (muitas vezes um ID de vídeo errado)
Verifique o ID
5
Erro do leitor HTML5
Tente de novo ou mostre uma alternativa
100
Vídeo não encontrado ou privado
Retire-o da lista
101 / 150
O proprietário não permite a incorporação
Ligue antes ao YouTube

2

Significado

Parâmetro inválido (muitas vezes um ID de vídeo errado)

O que fazer

Verifique o ID

5

Significado

Erro do leitor HTML5

O que fazer

Tente de novo ou mostre uma alternativa

100

Significado

Vídeo não encontrado ou privado

O que fazer

Retire-o da lista

101 / 150

Significado

O proprietário não permite a incorporação

O que fazer

Ligue antes ao YouTube

Ouça onError e passe ao vídeo seguinte da sua lista quando ocorrer um erro.

API IFrame vs. YouTube Data API

A API IFrame controla a reprodução de vídeos que já conhece. Para listar os envios de um canal ou os vídeos de uma playlist, precisa da YouTube Data API, que é separada — com chave de API, limites de quota diários e cache do seu lado. É a parte que a maioria das galerias personalizadas subestima.

Um exemplo completo: uma playlist de vídeos de produto

Um caso comum: um leitor, uma lista dos seus vídeos de produto ao lado e estatísticas de cada reprodução. Crie o leitor uma só vez, apresente a lista como botões com atributos data-id e chame loadVideoById ao clicar. Em ENDED, carregue o ID seguinte da lista para a playlist continuar. Envie eventos video_start e video_complete para as estatísticas com o título do vídeo. Tudo o resto — miniaturas, títulos, a ordem dos vídeos — vem dos seus próprios dados, que é exatamente a parte que a Data API ou um widget de galeria fornece.

Perguntas frequentes

Documentação oficial

Relacionados