O player não é uma caixa-preta.É código que você controla.
Um iframe toca o vídeo e para por aí. O SDK do player abre a caixa: o seu código manda tocar, pausar e pular, ouve cada evento do que o espectador faz e lê o estado a qualquer momento. Web em JavaScript, nativo em Expo / React Native, o mesmo player virando peça do seu produto nos dois.
O iframe entrega o vídeo.A experiência em volta, ele não te deixa tocar.
No app, o player é parte do produto, e o usuário cobra caro por isso. Diante de uma experiência ruim de app, 34% trocam pelo concorrente (Compuware, 3.534 consumidores). Quando o seu player é uma caixa fechada, é a sua experiência que fica refém dela.
Sem SDK, você fica com os controles que vieram no iframe e a posição que ele decidiu. Quer um botão seu, uma barra sua, um próximo passo no fim da aula? Não tem por onde. A experiência em volta do vídeo é da caixa, não do seu produto.
Como o SDK resolveO espectador deu play, pulou, chegou ao fim. Tudo isso acontece dentro do iframe e não chega no seu código. Sem os eventos, você não sincroniza a sua interface, não dispara o próximo passo e fica adivinhando o que aconteceu na tela.
Como o SDK resolveEmbrulhar um iframe numa webview e chamar de app nativo o usuário percebe na primeira rolagem. No app a régua é outra, e a punição é imediata: a experiência trava, e a pessoa vai embora pra próxima.
Como o SDK resolveO player vira seu.Nos dois lados.
O SDK do player dá ao seu código três coisas: comandar a reprodução, ouvir cada evento e ler o estado quando precisar. No web é o window.Moviie; no nativo é o @moviie/player-expo. Os nomes mudam, o contrato é o mesmo, e o player passa a obedecer ao seu produto.
Seu código dirige o player. Play, pause, seek.
Pegue o player e mande tocar, pausar, pular pra um ponto, mudar a velocidade, entrar em tela cheia. No site, pelo window.Moviie; no app, pelo player do useMoviiePlayer. O seu botão fica no comando, não o que veio no controle padrão.
- play, pause e seek pelo seu código
- Pular pra qualquer segundo
- Velocidade, volume e tela cheia
- Mesma intenção no web e no nativo
O player avisa a sua UI. Em tempo real.
Assine ready, play, pause, timeupdate, ended e mantenha a sua interface em sincronia com o que o espectador faz. Pinte a barra no timeupdate, abra o próximo passo no ended, registre o que quiser. getState() te dá o retrato completo do player a qualquer momento.
- on / once / off pra assinar eventos
- ready, play, pause, timeupdate, ended
- getState() pro estado completo
- Sincronize a sua UI com o player
No app, é componente nativo. Não webview.
O @moviie/player-expo roda sobre o expo-video, com player nativo de verdade no Expo e no React Native, não um iframe embrulhado. MoviieProvider no topo, useMoviiePlayer na tela, MoviieVideo renderizando. Recursos nativos como Picture-in-Picture e Cast entram pela mesma porta.
- Player nativo sobre expo-video
- MoviieProvider + useMoviiePlayer + MoviieVideo
- Picture-in-Picture e Cast
- Chave publicável mvi_pub_, a secreta fica no servidor
Iframe sozinho,ou iframe com o SDK.
O mesmo player. A diferença é quem manda nele e o quanto o seu código enxerga.
| Só o iframe | Com o SDK | |
|---|---|---|
| Controlar play, pause e seek | pelo controle padrão | pelo seu código |
| Eventos na sua UI | não chegam | ready, play, timeupdate, ended |
| Ler o estado do player | não dá | getState() a qualquer hora |
| No app nativo | webview | componente sobre expo-video |
| Sincronizar a sua interface | adivinhando | em tempo real |
| Picture-in-Picture e Cast | fora do seu alcance | pelo mesmo SDK |
O vídeo, os dois tocam igual. O controle, só um te dá.
Um SDK.A plataforma inteira por trás.
Documentação de verdade
Cada método, evento e propriedade na doc, com exemplos que rodam. Não é PDF de 2019: é docs.moviie.ai/player-api e player-expo.
O par no servidor
O SDK cuida do cliente; a REST api.moviie.ai/v1 e os webhooks cuidam dos dados. Os dois lados conversam, cada um no seu lugar.
Vídeo privado, no seu controle
Link assinado por JWT curto, embed travado por domínio. O SDK toca onde você liberou, e o seu backend é quem assina.
Legendas e dublagem
Faixas de legenda e de áudio chegam no playback. O seu app lê e oferece, sem você montar player de legenda do zero.
Contrato estável
A API do player é versionada: mudança que quebra só entra em virada de versão maior. O seu código não acorda quebrado.
Começa rápido
O primeiro frame aparece quase no clique, entregue da rede global. Seu código entra num player que já é veloz.
O que dá pra fazere o que ainda não.
O nativo hoje é pelo @moviie/player-expo, pra Expo e React Native, rodando sobre o expo-video com player nativo de verdade. SDK Swift puro pra iOS está em desenvolvimento, e o Kotlin pra Android vem na sequência. O web em JavaScript já roda em qualquer página.
O embed expõe window.Moviie na página. Você pega o player com Moviie.getPlayer(iframe) e chama play(), pause(), seek() e os outros métodos. Espere o evento ready antes de comandar, e a partir daí o player obedece o seu código.
O ciclo de reprodução inteiro: ready, play, pause, timeupdate, ended, entre outros. Você assina com on, once e off, e usa getState() pra ler o retrato completo do player a qualquer momento. É com isso que a sua UI fica em sincronia com o espectador.
Não, e é de propósito. O SDK do player roda no cliente, controla a reprodução e ouve eventos. A REST api.moviie.ai/v1 e os webhooks rodam no servidor, com a sua chave secreta, e cuidam dos dados e dos eventos de backend. Quem constrói app sério usa os dois, cada um no seu lado.
Pegue uma chave.Monte o player no seu app hoje.
14 dias de trial pra pôr o player dentro do seu produto: controle por código, eventos na sua UI, web e nativo. A doc está em docs.moviie.ai, com exemplos que rodam.