Blog

Como a reprodução do YouTube em segundo plano funciona realmente no iOS

Por talavo5 min de leitura

Uma das primeiras coisas que as pessoas experimentam no talavo é trancar o telemóvel enquanto um vídeo está a reproduzir — e ficarem ligeiramente surpreendidas quando o áudio continua. No iOS Safari padrão não aconteceria. Aqui está o que se passa realmente por baixo, porque a versão honesta é mais interessante do que «ativámos uma definição».

A limitação

O talavo renderiza páginas numa WKWebView — o mesmo motor WebKit que o Safari utiliza, que é o único motor de browser que a Apple permite no iOS. O WebKit é deliberadamente agressivo em relação ao segundo plano: quando a web view sai do primeiro plano, o sistema limita os temporizadores e suspende o pipeline de media. Isso é ótimo para a bateria e terrível para alguém que quer que um vídeo estilo podcast continue a reproduzir com o ecrã desligado. O próprio YouTube reserva a reprodução em segundo plano ininterrupta para o Premium.

Manter o pipeline ativo

O truque não é uma opção secreta — é recusar-se a deixar a sessão de media morrer. O talavo interceta a sessão de media da página e, quando o sistema tenta pausar a reprodução ao ir para segundo plano, mantém o elemento subjacente «em execução» em vez de deixar o WebKit desmontá-lo. Na prática isso significa capturar a pausa que o sistema operativo força e imediatamente manter o elemento a funcionar — a uma taxa de reprodução próxima de zero se necessário — para que o pipeline de áudio se mantenha ativo e retome de forma limpa em vez de ser recolhido pelo garbage collector.

Para além disso, o talavo liga os controlos padrão de reprodução do iOS (ecrã de bloqueio, Centro de Controlo, AirPods) ao vídeo ativo, para que pausa, reprodução e avanço se comportem como uma app de media nativa em vez de uma página web que por acaso tem som.

O mini-player flutuante

Áudio em segundo plano é metade da história. A outra metade é o mini-player flutuante: uma janela picture-in-picture que destaca o vídeo para que continue a reproduzir enquanto lê algo noutro separador — sem subscrição Premium. É a mesma ideia do PiP do sistema, disponível para qualquer vídeo que o talavo consiga reproduzir.

A ressalva honesta

Isto é uma solução construída por cima do WebKit, não uma API privada. Isso significa duas coisas: mantém-se dentro do que a plataforma web expõe, e pode ser afetada quando o YouTube reorganiza os internos do seu leitor. Quando isso acontece, corrigimos — é isso que a maior parte de uma versão pontual como as do nosso changelog está a fazer. A vantagem de construir sobre o motor de browser real é que o resto da web continua a funcionar normalmente enquanto isto decorre.