Executando verificação de segurança...
2

Oi, tudo bem?! Já precisei muito de algo assim. Tanto que cheguei a fazer um tbm para gravar alguns treinamentos da empresa no passado.

Fiz um teste, deixei meu vídeo público. O botão de download é público tbm? Pois ele não funciona se eu não estiver logado. Acho que vc está apontando para o link privado no botão.

Este é o vídeo gravado no computador com Windows. Já tentou abrir no iphone?
https://www.screenvod.com/videos/c1c89c86-24a8-45d6-ae50-6832c60e3016

Pq estou perguntando isso?

Pq vc seguiu a mesma abordagem que eu no passado: usar os recursos locais do computador para gravar e subir direto para o Google Drive. Tbm fiz assim.

Só que tem um problema: os codecs utilizados no computador com Windows não estão disponíveis no iphone. Acho que nem no Mac.

A consequência é que você precisará recodificar.

Aqui começou minha saga na época:

há algumas libs que vc consegue instalar no navegador para fazer esse trabalho.

O problema é que essas libs precisam executar SharedArrayBuffer no navegador, mas por uma falha de processadores descoberta no passado, isso ficou bloqueado no navegador. Você não consegue instanciar SharedArrayBuffer.

Há uma forma de desbloquear SharedArrayBuffer, que é definindo isso abaixo no header da página:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

Aí nesse ponto você acha que vai dar certo. Mas vai descobrir outro problema: Ao ativar essas políticas de Cross-Origin não vai mais permitir subir o vídeo para o drive, pois ele está em outro domínio!!!

O pior é que, na época eu cheguei à conclusão que o ajuste que tem que se fazer no arquivo é mínimo. Cheguei a abrir e vasculhar cabeçalhos e estudar codecs. Não é nada pesado. Pena que não me lembro mais o que era. Mas salvo engano era só mudar algo no container do vídeo. Nem precisaria recodificar. Porém pela limitação acima as libs não funcionaram.

Conclusão

A conclusão que cheguei é que teria que usar algo como o Amazon Elemental MediaConvert para isso, o que aumentaria a complexidade do projeto.

Nesse ponto achei melhor gravar pelo Google Meet os treinamentos e desisti.

Tentei por 1 final de semana ou mais resolver isso direto no navegador, sem enviar para meu servidor ou para o Elemental MediaConvert. Mas não consegui.

Se você conseguir adoraria saber como. Não para voltar meu app, mas pq até hoje isso me incomoda: não ter achado uma solução simples, elegante e local (no navegador).

No máximo talvez uma gambiarra com o cross-origin.... quem sabe!

EDIT

Espero que meu comentário não tire seu final de semana assim como aconteceu comigo kkkkkk
Boa sorte!

Carregando publicação patrocinada...
1

Meu amigo, seu comentário quase me tomou um fim de semana inteiro kkkkk mas no fim deu bom.

Sobre o botão de download, de fato devia aparecer somente para o dono do vídeo quando autenticado, isso foi corrigido.

Sobre o problema no iOS/Safari: pra ser sincero, eu não fazia ideia desse problema até ler seu comentário e testar reproduzir um vídeo em um MacBook antigo que tenho aqui. Seguindo o raciocínio que você trouxe, fui direto pra uma abordagem server-side: remux. A ideia é reembalar o vídeo de WebM pra MP4 sem recodificar. O servidor roda basicamente: ffmpeg -i input.webm -c:v copy -c:a aac -movflags +faststart -f mp4 output.mp4. O vídeo é copiado bit a bit, só o áudio converte pra AAC já que o Safari não aceita Opus em MP4. É praticamente instantâneo.

Agora a extensão grava em H.264 dentro do WebM (video/webm; codecs=h264). Como H.264 é o codec nativo do MP4, o remux é só copiar os bytes pra outro container sem precisar de transcodificação pesada, sem MediaConvert, sem nada no browser.

O remux só ocorre quando o vídeo é solicitado por um viewer no Safari. Usuários em outros navegadores ainda veem o vídeo original. Ambas as versões são cacheadas no CloudFront pra evitar uso desnecessário de processamento no servidor.

O tradeoff é que H.264 gera arquivos um pouco maiores que VP9, mas elimina toda a complexidade.

Agradeço muito pelo seu comentário!