# Integrações de vídeo

> Vídeos do Bunny Stream, do Cloudflare Stream, do Panda Video ou de um HLS próprio na aula e no post, só para quem tem acesso. O link de cada provedor, o passo a passo para colar, a chave de assinatura do Bunny e do Cloudflare em Configurações › Integrações de vídeo, Verificar e o que acontece quando o provedor recusa a chave.

Quem já hospeda os vídeos no **Bunny Stream**, no **Cloudflare Stream**, no **Panda Video** ou num **HLS** próprio não precisa subir nada de novo: cole o link do vídeo na [aula de vídeo](/espacos/cursos#bunny-stream-cloudflare-stream-panda-video-e-hls) ou no texto de um [status do Feed](/espacos/feed#links-viram-player-ou-cartao) ou de um [post de Conteúdo](/espacos/conteudo#links-viram-player-ou-cartao), e o vídeo toca dentro da Memberfy, com o player do provedor (o HLS, no player da própria Memberfy).

- **Só para quem tem acesso.** O player sai só para quem pode ver a aula ou o post. Quem vê só o índice do curso, uma aula trancada ou não tem acesso ao espaço não recebe o endereço do vídeo, nem pela API nem pelo assistente.
- **O vídeo fica no seu provedor.** A Memberfy não baixa nem copia o vídeo, e ele não gasta o armazenamento da comunidade: o player toca direto da origem.
- **Com a chave de assinatura** (Bunny e Cloudflare), o endereço do vídeo expira em 6 horas e não toca fora da comunidade. Ver [Vídeo protegido](#video-protegido-bunny-e-cloudflare).

## O link de cada provedor

| Provedor | O link que a Memberfy aceita | Chave de assinatura |
|---|---|---|
| **Bunny Stream** | `https://iframe.mediadelivery.net/embed/{biblioteca}/{vídeo}` (ou `/play/`), ou `https://video.bunnycdn.com/play/{biblioteca}/{vídeo}` | Opcional |
| **Cloudflare Stream** | `https://customer-{código}.cloudflarestream.com/{id}`, `https://iframe.videodelivery.net/{id}` ou `https://watch.videodelivery.net/{id}` | Opcional |
| **Panda Video** | `https://{player}.tv.pandavideo.com.br/embed/?v={id}` | Não usa: toca direto do Panda |
| **HLS** | Um endereço `https://…/arquivo.m3u8` num servidor público | Não usa |

O endereço precisa ser exatamente de um desses serviços. Um domínio parecido (como `bunnycdn.com.outro-site.net`), um HLS em `http`, um IP, uma porta ou um servidor interno são recusados na aula; num post, viram só um link.

## Passo a passo

*Papel: proprietário ou administrador* para a aula; no Feed e no Conteúdo, quem pode publicar no espaço.

### Bunny Stream

1. No painel do Bunny, abra a biblioteca de vídeos (**Stream**) e o vídeo.
2. Copie o link do player: o endereço `https://iframe.mediadelivery.net/embed/…` do código de incorporação (ou o link `/play/`).
3. Na Memberfy, cole o link no campo do vídeo da aula (tipo **Vídeo**) ou no texto do post.
4. Se a biblioteca exige token para tocar (**Security › Embed view token authentication**), cadastre a chave: ver [Vídeo protegido](#video-protegido-bunny-e-cloudflare). Sem a chave, o vídeo de uma biblioteca com token não toca.

### Cloudflare Stream

1. No painel do Cloudflare, abra **Stream** e o vídeo.
2. Copie o link do player: `https://customer-{código}.cloudflarestream.com/{id}` (ou o de `iframe.videodelivery.net`).
3. Cole o link na aula ou no post.
4. Se o vídeo exige link assinado (*Require signed URLs*), cadastre a chave de assinatura da conta (a que você cria em **Stream › Signing keys**).

### Panda Video

1. No painel do Panda, abra o vídeo e o código de incorporação.
2. Copie o endereço do player: `https://{player}.tv.pandavideo.com.br/embed/?v={id}`.
3. Cole o link na aula ou no post. O Panda não usa chave na Memberfy: a proteção do vídeo (domínios permitidos e afins) é configurada no próprio Panda.

### HLS próprio

1. Copie o endereço do manifesto do vídeo, que termina em `.m3u8` e começa com `https://`.
2. Cole na aula ou no post. O vídeo toca no player da Memberfy, com controles, tela cheia e, na aula, a retomada de onde o aluno parou.
3. O servidor precisa ser público e aceitar o vídeo tocado de outro site (CORS); a Memberfy não passa o vídeo pelos servidores dela. Se ele não responder ou não permitir, o player mostra *"Não foi possível tocar este vídeo aqui. O servidor de origem não respondeu ou não permite a reprodução neste site."*, com o botão **Abrir o endereço do vídeo**.

## Vídeo protegido (Bunny e Cloudflare)

*Papel: proprietário ou administrador.* Se a biblioteca do Bunny ou a conta do Cloudflare exige token para tocar, cadastre a chave de assinatura da comunidade em **Configurações › Integrações de vídeo** (no grupo **Conexões**):

| Provedor | O que colar |
|---|---|
| **Bunny Stream** | Em **Token authentication key**, a chave da biblioteca, copiada no painel do Bunny em **Security** (*Embed view token authentication*) |
| **Cloudflare Stream** | Em **Id da chave (keyId)**, o id da chave; em **Chave privada (pem ou jwk)**, o pem (em base64, como o Cloudflare devolve, ou em texto) ou o jwk. Com o jwk, o id é opcional: vale o `kid` dele |

1. Preencha e clique em **Salvar chave**. A tela confirma *"Chave salva. Verifique com um vídeo seu."*
2. Em **Verificar com um vídeo seu**, cole o link de um vídeo do mesmo provedor e clique em **Verificar**: a Memberfy assina o link desse vídeo e pergunta ao provedor se ele aceita. Aceita, a chave fica **Válida**; recusada, **Inválida**.
3. Pronto: o vídeo da aula ou do post passa a sair **assinado, válido por 6 horas**, só para quem já podia vê-lo. Quem copia o endereço do player não consegue tocá-lo depois disso.

Cada provedor mostra o estado da chave (**Sem chave**, **Não verificada**, **Válida** ou **Inválida**) e a **Última verificação**.

- **A chave é só de escrita.** Depois de salva, ela não aparece mais: só os 4 últimos caracteres (no Cloudflare, do id da chave). Para mudar, use **Trocar chave**.
- **Remover chave** pede a confirmação *"Remover a chave do Bunny Stream?"* (ou do Cloudflare Stream) e apaga a chave na hora: os vídeos daquele provedor voltam a sair sem assinatura e não tocam se a biblioteca exige token. As aulas e os posts continuam como estão.
- Cadastrar, trocar, verificar e remover ficam nos [Logs](/membros/registros-de-atividades), sem o valor da chave.
- Só o proprietário e o administrador veem a tela e as chaves.

### Quando o provedor recusa a chave

Se o provedor recusar a chave (na verificação ou depois, por ter sido trocada lá), os vídeos daquele provedor ficam **indisponíveis** até você cadastrar a chave certa: quem assiste vê *"Vídeo indisponível"* e *"Avise a equipe da comunidade para que ela resolva."* O proprietário e o administrador recebem um aviso no sino, no máximo uma vez por dia, que abre **Integrações de vídeo**; para eles, o vídeo indisponível traz o botão **Abrir Integrações de vídeo**. Os vídeos dos outros provedores continuam tocando.

## Pela API e pelo assistente

- **API:** a aula de vídeo aceita esses links em `contentUrl` e devolve o player pronto em `videoEmbed` (`provider`, `kind`, `src`), só para quem pode ver a aula; as chaves ficam em `/api/video-integrations`. Ver [Cursos › Pela API](/espacos/cursos#pela-api).
- **MCP:** `create_lesson` e `update_lesson` aceitam os links; `list_video_keys`, `update_video_key`, `verify_video_key` e `delete_video_key` (que pede confirmação) cuidam das chaves, que nunca voltam na resposta. Ver [Ferramentas de cursos](/mcp/ferramentas-cursos).

## Perguntas frequentes

**Preciso subir o vídeo de novo?**
Não. Use o link do seu provedor.

**Alguém pode copiar o link?**
Quem tem acesso vê o endereço do player. Sem a chave, ele é o endereço do provedor; com a chave (Bunny e Cloudflare), ele expira em 6 horas.

**Consome o armazenamento da comunidade?**
Não. O vídeo fica no seu provedor. Só o [vídeo hospedado](/espacos/cursos#video-e-arquivo-hospedados) na Memberfy conta no armazenamento.

**E o vídeo de boas-vindas?**
Continua só com YouTube e Vimeo. Ver [Boas-vindas](/membros/boas-vindas).

## Relacionados

- [Cursos](/espacos/cursos#bunny-stream-cloudflare-stream-panda-video-e-hls)
- [Feed › Links viram player ou cartão](/espacos/feed#links-viram-player-ou-cartao)
- [Conteúdo › Links viram player ou cartão](/espacos/conteudo#links-viram-player-ou-cartao)
