Recentemente descobri que vários vídeos em meu fórum Discourse auto-hospedado estavam falhando silenciosamente ao serem reproduzidos no iPhone e iPad. Após investigação, a causa raiz foi que os vídeos haviam sido codificados com o codec VP9 dentro de um container MP4 — uma combinação que o iOS Safari não consegue reproduzir.
Como isso acontece
O Facebook (e possivelmente outras plataformas) às vezes entrega vídeos codificados em VP9 quando os usuários baixam seu conteúdo. Quando esses arquivos são carregados no Discourse, são aceitos sem problemas — a extensão .mp4 não indica qual codec está dentro. Em navegadores de desktop e no Android, os vídeos reproduzem normalmente, então o problema passa despercebido. No iOS Safari, o vídeo mostra uma miniatura e um botão de play, mas ao tocar nele, aparece apenas um indicador girando. Os usuários geralmente assumem que se trata de um problema de rede e seguem em frente sem relatar.
Por que é difícil detectar
- A extensão do arquivo (
.mp4) é idêntica à de um arquivo H.264 funcional - Navegadores de desktop suportam VP9, então administradores que testam em desktop não veem nenhum problema
- Usuários de iOS muitas vezes não relatam falhas individuais de mídia, especialmente quando outros conteúdos no mesmo post estão visíveis e reproduzíveis
- Não há nenhum aviso ou erro visível para o administrador
Solução sugerida
Ao fazer o upload de vídeo, o Discourse poderia inspecionar o codec do vídeo (o ffprobe já está disponível no container Docker) e:
- Rejeitar o upload com uma mensagem clara explicando que o VP9 não é suportado no iOS, pedindo que o usuário re-codifique para H.264, ou
- Transcodificar automaticamente o vídeo para H.264 no momento do upload (semelhante ao que algumas plataformas fazem para normalizar uploads)
A Opção 1 é menos complexa e já representaria uma melhoria significativa. A Opção 2 seria ideal para uma experiência de usuário totalmente fluida.
Ambiente
- Discourse auto-hospedado em Docker, armazenamento local (sem S3)
- Versão do Discourse: 2026.4.0-latest
- Proxy reverso Apache na frente do nginx do Discourse
Solução alternativa
Para administradores que encontrarem esse problema, a correção envolve:
- Identificar arquivos VP9 com
ffprobe - Re-codificar para H.264 com
ffmpeg -c:v libx264 -profile:v main -level 3.1 -r 30 -movflags +faststart - Atualizar os campos
sha1,urlefilesizena tabelauploads - Atualizar os tokens de URL curta
upload://no markdown bruto dos posts afetados - Reassinar (rebake) os posts afetados
Este é um processo manual não trivial que a maioria dos administradores de fórum não está equipada para realizar.