Armazenando vídeos online com DRM
Olá Gente!
Se você já tentou proteger um vídeo com DRM sabe que não é simples.
Porem, existem alternativas que nos ajudam muito.
Para isto, iremos utilizar a Bunny CDN:
Eles tem vários recursos úteis, e um deles é o Stream, que nos permite upar vídeos.
Nesta módulo, os recursos mais interessantes são:
- Proteger contra Download
- Proteger com DRM
- Distribuir em várias regiões para que o acesso seja mais rápido
- Gera várias versões do vídeo para que seja carregado uma resolução adequada dependendo do navegador que ira abrir o vídeo
E ainda temos uma API bem completinha!
A primeira coisa é a fazer é criar uma “Librarie” dentro da Bunny, para isto, clique em “Stream -> Add Video Library”:
Preencha um nome para sua pasta de vídeos, e depois clique em “Add Video Library”:

Após o cadastro, clique na sua biblioteca de vídeos para abrir as configurações dela.
Vamos começar configurando a segurança dos vídeos, para isto, clique em “Security”.
Nesta janela:
- Marque o campo “MediaCage Basic DRM” para ativar a criptografia via DRM
- Desmarque o campo “Enable Direct Play” e o campo “Block Direct URL File Access” para impedir que o arquivo seja acessado diretamente
- No campo “Allowed Domains” preencha o domínio do site onde será embedado o vídeo “*.meusite.com.br”
- Marque o campo “Embed View Token Authentication”, isto ira obrigar a utilizar um Token em cada vídeo ajudando na segurança
Antes de continuarmos, copie a informação “Token Authentication Key”, que iremos utilizar para embedar o vídeo..
Os campos devem ficar semelhantes aos campos abaixo

Agora iremos copiar os códigos de acesso a API, para isto, clique em “API”.
Nesta janela, copie os dados abaixo:
- Video Library ID
- API Key
Agora temos tudo para utilizar a API.
Iremos enviar um vídeo para a API, para isto, precisamos que este vídeo esteja disponível online:
<?
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://video.bunnycdn.com/library/[LIBRARY_ID]/videos/fetch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode(array("url" => "https://www.seusite.com.br/video.mp4")),
CURLOPT_HTTPHEADER => array(
"AccessKey: [ACCESSKEY]",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
$response2 = json_decode($response, true);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if( $httpcode == 200 )
{
echo "id";
echo "<br>";
echo $StatusMov["id"];
}
?>
Aqui precisamos apenas atualizar alguns campos:
- [LIBRARY_ID]: Preencha com o campo “Video Library ID” copiado do painel da Bunny
- [ACCESSKEY]: Preencha com o campo “API Key” copiado do painel da Bunny
O envio ira nos retornar o “id” do vídeo:
{
"id": "XXXXXXXXXXXXXXXXXXXXXX",
"success": true,
"message": "OK",
"statusCode": 200
}Este ID nos permite verificar como esta o envio do vídeo e fazer o embed deste vídeo.
Depois que o envio for completado, e a Bunny completar as etapas internas podemos fazer o embed do vídeo.
Porem, como ativamos o “Embed View Token Authentication” temos antes que preparar um Token:
<?
$RetFinal["TempoExpiracao"] = mktime() + 10800;
$RetFinal["TokenIframe"] = hash("sha256", "[TOKEN]" . "[VIDEO_ID]" . $RetFinal["TempoExpiracao"]);
$RetFinal["LinkIframe"] = "https://iframe.mediadelivery.net/embed/[LIBRARY_ID]/[VIDEO_ID]?autoplay=true&token=" . $RetFinal["TokenIframe"] . "&expires=" . $RetFinal["TempoExpiracao"];
?>
Aqui precisamos atualizar:
- [TOKEN]: Preencha com o campo “Embed View Token Authentication” copiado do painel da Bunny
- [VIDEO_ID]: Preencha o “id” retornado ao enviar o vídeo para a Bunny
- [LIBRARY_ID]: Preencha o campo “Video Library ID” copiado do painel da Bunny
Pronto, agora basta adicionarmos o Link do Iframe:
<div style="position: relative; padding-top: 177.77777777777777%;">
<iframe src="<?=$RetFinal["LinkIframe"]?>" loading="lazy" style="border: none; position: absolute; top: 0; height: 100%; width: 100%;" allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe>
</div>Concluindo mais um tutorial, gente! 😄
Até já! 👋
Leia também
API Mágica: notificações Web Push no navegador com PHP
Web Push com a API Mágica em PHP puro: o navegador se inscreve, o seu site envia a notificação e a API conta o clique. Sem Composer e sem biblioteca.
IndexNow: avisando o Bing e o Yandex mais rápido
Como criar a chave do IndexNow e avisar Bing e Yandex das suas páginas novas com Node.js e PHP: as requisições, os erros reais e as armadilhas.
llms.txt: por que importa e como gerar em PHP
Por que o llms.txt importa para quem quer ser citado pela IA, e como gerar o seu em PHP puro lendo o sitemap.xml que voce ja tem.