Ajustes do player

Autoplay, retomada, legendas, velocidades, controles, recuperação de rede e demais ajustes do player instalável.

Este guia cobre o player instalável. Todos os ajustes são feitos no segundo argumento do construtor — um objeto entre chaves, no qual você liga, desliga ou combina o que quiser:

const player = new SpallaPlayer('#player', {
  autoplay: true,
  muted: true,
  resume: true,
});

A regra de ouro: o que você informar aqui sempre vence o que foi configurado no backend da Spalla para aquele conteúdo. O que você omitir fica como o backend configurou (ou com o padrão do recurso). Um cuidado importante: omitir é diferente de desligar — { autoplay: false } desliga de propósito, enquanto não escrever a chave preserva a configuração do conteúdo. false e 0 são valores explícitos, não ausência.

Receitas prontas

Copie, cole e combine:

// Toca sozinho, sem som (evita o bloqueio do navegador)
new SpallaPlayer('#player', { autoplay: true, muted: true });

// Começa no minuto 1:30 (90 segundos)
new SpallaPlayer('#player', { startTime: 90 });

// Retoma de onde o espectador parou
new SpallaPlayer('#player', { resume: true });

// Repete em loop (útil para vitrines e telões)
new SpallaPlayer('#player', { loop: true });

// Legendas em português já ligadas, abaixo do vídeo
new SpallaPlayer('#player', {
  subtitleLanguage: 'pt-br',
  subtitlePosition: 'outer',
});

// Botões de saltar 10 segundos para frente e para trás
new SpallaPlayer('#player', { showSeekButtons: true });

// Menu de velocidade com opções próprias
new SpallaPlayer('#player', { playbackSpeeds: [0.5, 1, 1.5, 2] });

// Interface em inglês ou espanhol (padrão: idioma do navegador)
new SpallaPlayer('#player', { language: 'en' });

Todas as opções, em linguagem simples

Prop

Tipo

A barra de controles

A lista de botões é sua para escolher — a ordem do array é a ordem visual na tela:

new SpallaPlayer('#player', {
  controls: ['play_pause', 'time_and_duration', 'spacer', 'mute_volume', 'quality', 'fullscreen'],
});

player.setControls(['play_pause', 'spacer', 'fullscreen']); // troca em runtime
player.setControls([]);   // volta ao padrão da skin/dispositivo
player.setControls(false); // esconde a barra inteira

Nomes aceitos:

NomeO que é
play_pause / play_pause_bufferingTocar e pausar; a segunda mostra o spinner
rewind_10 / forward_10Saltam dez segundos na linha do tempo
rewind / fast_forwardAceleram a reprodução, sem saltar
skip_previous / skip_nextItem anterior e próximo da playlist
skip_previous_always / skip_next_alwaysOs mesmos, sempre visíveis
time_and_durationTempo decorrido e duração
spacerEspaço elástico — empurra os botões seguintes para a direita
mute / volume / mute_volumeÁudio; mute_volume junta os dois
captions / captions-position / captions-sizeLegenda, posição e tamanho
language / video_typeFaixa de áudio e tipo de vídeo
quality / playback_rateQualidade de imagem e velocidade
chapter / queueCapítulos e fila
loop / picture_in_pictureRepetição e janela flutuante
cast / remoteChromecast e Remote Playback (AirPlay)
fullscreen / overflow_menu / content_titleTela cheia, menu "mais opções" e título

Mais os botões dos plugins ativos, quando existirem: ai, audio_description, comments, libras, like, playlist, statistics, voice.

Nomes desconhecidos são ignorados

Um nome que não exista na lista é descartado com um aviso no console, sem quebrar a barra. Se trocar a lista manualmente, lembre-se de que os botões de rewind_10, forward_10 e dos plugins não voltam sozinhos — precisam estar nomeados na lista. Em lives, a seleção de velocidade fica oculta por padrão em todas as skins: para habilitá-la, inclua playback_rate na lista.

Para criar um botão próprio na barra, use player.addControlButton(...) — veja Interface, na referência da API.

A cor de destaque do player também muda em runtime, sem recarregar:

player.setTheme({ accent: '#ff0055' });
player.setSkin('tv'); // troca a skin com o vídeo tocando

Miniplayer e janela flutuante

Os dois modos automáticos são independentes e desligados por padrão:

  • autoPipViewport: true — quando o espectador rola a página e o vídeo sai totalmente da área visível, ele flutua no canto inferior direito (largura máxima de 320px, adaptada à janela). Rolar de volta devolve o vídeo ao lugar. Pausar depois de abrir mantém o miniplayer; conteúdo já pausado não abre sozinho.
  • autoPipBlur: true — quando o espectador troca de aba, o player pede ao navegador uma janela flutuante (picture-in-picture). A abertura não é garantida: depende de suporte, permissão e engajamento que o navegador concede (no Chrome desktop, a mídia precisa estar na página principal, tocando e audível recentemente). Uma recusa não interrompe o vídeo.
new SpallaPlayer('#player', {
  autoPipViewport: true,
  autoPipBlur: true,
});

Nenhum dos dois funciona dentro de iframe

Os modos automáticos não conseguem flutuar fora de um iframe, e o mecanismo do Chrome exige mídia no frame principal — só o player instalável permite esses modos. PiP manual (botão do player) continua funcionando onde o navegador suporta.

O backend da Spalla também pode ligar os modos por conteúdo, com as flags sp_player_auto_pip_viewport e sp_player_auto_pip_blur — a precedência é sempre: construtor > URL > flags do backend.

Recuperação automática de rede

Falhas transitórias de transporte (inclusive durante autorização e configuração) são retomadas sozinhas: por padrão, três retentativas extras após 2, 4 e 8 segundos — além das tentativas internas de cada requisição. A espera começa após a falha anterior.

const player = new SpallaPlayer('#player', {
  autoRetry: {
    maxRetries: 3,       // limite de retentativas
    baseDelay: 2000,     // espera inicial, em ms
    backoffFactor: 2,    // multiplicador da espera a cada tentativa
    maxDelay: 30000,     // teto da espera
  },
});
  • Omitir a opção ou passar autoRetry: true usa esses padrões.
  • autoRetry: false ou maxRetries: 0 desliga o automático.
  • VOD conserva a posição e a intenção de reprodução; live retorna ao ponto ao vivo.
  • load(), stop(), unload() e destroy() cancelam a recuperação anterior; retry() antecipa uma espera.

Não são repetidos automaticamente: HTTP 401/403/404, bloqueios de acesso, mídia inválida, erros de DRM e erros de publicidade. Enquanto a recuperação roda, a tela de erro fica oculta; esgotado o limite, o botão Tentar novamente inicia outro ciclo.

Configurar pela URL (avançado)

O player pode ler ajustes da própria URL da página — ?muted=1, ?t=30, ?skin=minimal — mas isso é opt-in: sem allowUrlParams: true no construtor, a URL é ignorada.

new SpallaPlayer('#player', { allowUrlParams: true });

Por que é opt-in

A proteção não é a opção — é a lista fechada de parâmetros aceitos. A query pode influenciar a autorização; habilite a leitura apenas em páginas confiáveis. Uma página de terceiro embutida no seu site não deveria conseguir reconfigurar o player só por causa da própria URL.

A precedência é sempre a mesma: opção do construtor > parâmetro de URL > configuração do backend. Uma opção do construtor vence mesmo quando omitida dentro de um objeto — se você quer que a URL decida algo, não escreva a chave no construtor.

Parâmetros aceitos: t, language, debug, aid, device, autoplay, autoplay_mudo, muted, loop, resume, skin, enableLikes, enableForm, enableLogo, libras, playbackSpeeds, subtitles, subtitleLanguage, subtitlePosition, enableCc, aiSearch, bar, controls — e, nas versões com miniplayer automático, autoPipViewport e autoPipBlur.

O parâmetro debug também aceita silent, error, warn, info e debug como valores (?debug=1 equivale a debug).

Exemplos:

?skin=minimal
?controls=play_pause,spacer,fullscreen
?controls=0         // esconde a barra inteira (ou ?controls=-)
?bar=1              // liga os botões de salto de dez segundos
?t=30               // começa em 30 segundos (só no primeiro VOD)
?subtitleLanguage=en

Testando e aparelhos de TV

  • Para investigar comportamento estranho, abra o console do navegador (F12) com debug: 'info' no construtor e veja Solução de problemas.
  • Apps empacotados para TVs LG e Samsung usam deviceClass: 'tv', isApp e possivelmente apiKey — veja Apps de TV.

Nesta página