Analisando propostas

Vimeo E Youtube - Mpeg-Dash, integração com a Drm, Go & Python

Publicado em 21 de Junho de 2017 dias na TI e Programação

Sobre este projeto

Aberto

Pessoal, eu preciso criar um sistema que possa pegar videos de uma conta premium do Vimeo (ou até mesmo do Youtube) e tornar o download impossível ou muito complexo de ser feito.

Isso já é feito por sites como NetFlix, iTunes, Amazon Prime Videos, Globo Play. Nesses sites você consegue assistir os filmes, mas, fazer o download é quase impossível. Mesmo programas que são feitos para baixar qualquer coisa, como o Internet Download Manager, costuma não conseguir.


O mpeg-dash é o padrão que provavelmente será adotado para a transmissão de vídeos na internet nos próximos anos. Além de ter recursos similares ao HLS – de baixar fragmentos dos vídeos, economizando banda do usuário final e do servidor.

Tem um pessoal que fez isso e disse o seguinte:
"Vídeos estão na Amazon S3.
Nossa plataforma é em python, mas para converter usamos Go & Python.
Para a integração com a DRM é python, mas basicamente comunicação de APIs, então é independente de linguagem"

Assim como o hls, o mpeg-dash é capaz de trabalhar de forma adaptativa, ou seja, ele é capaz de adaptar a qualidade do vídeo baseado na velocidade de sua conexão.

Diferentemente do hls, uma das grandes vantagens do mpeg-dash, é que ele é totalmente compatível com html 5, inclusive em browsers desktop.

Agora a pergunta que não quer calar: Trabalhar com mpeg-dash evita que os usuários façam download e distribuam seu conteúdo? se você trabalhar apenas com mpeg-dash a resposta é bem simples: não.

Como então utilizar o protocolo mais moderno da atualidade (mpeg-dash) e ainda ter a possibilidade de proteger o conteúdo?

a resposta para essa pergunta possui 3 letras: drm, ou digital rights management.
DRM: Digital Rights Management

A DRM foi uma solução encontrada para minimizar e proteger o download e distribuição ilegal de mídias, como áudio e vídeo.

Basicamente, vídeos que trabalham com DRM são criptografados e precisam de uma licença para poderem ser executados. A grande diferença nesse caso, é que, diferentemente do hls com criptografia, a licença é enviada diretamente para um cdm (content decription media). O cdm normalmente vem instalado por padrão nos browsers para que eles sejam capazes de descriptografar os arquivos protegidos pela drm.


Hoje temos 3 principais CDMs no mercado:

Widevine, da Google que normalmente vem instalada por padrão no Google Chrome, Firefox, Opera, etc.
Play Ready, da Microsoft e é a solução utilizada pelo Microsoft Edge por exemplo.
Fair Play, da Apple, utilizada especificamente pelo Safari.

A parte mais interessante do processo é como a DRM gera essa licença, permitindo que um determinado usuário possa assistir a um conteúdo. De maneira simplificada temos:
Cada vídeo no formato mpeg-dash possui um “arquivo de manifesto” possuindo a key que foi utilizada para criptografar seus fragmentos. Normalmente esse arquivo possui a extensão “mpd”.

Quando uma solicitação de reprodução do vídeo é realizada, o browser envia para o servidor os dados do vídeo mais as informações específicas do usuário que solicita a licença. O servidor de DRM faz uma requisição de volta para o servidor de aplicação “perguntando” se o usuário tem a permissão para ver especificamente aquele vídeo. O servidor de aplicação responde SIM ou NÃO.
Caso sim, o servidor de drm libera (issue) a licença que é passada para o cdm do browser e o vídeo é finalmente reproduzido.
Isso significa que se você baixar todos os fragmentos dos arquivos do mpeg-dash, você não será capaz de descriptografar e nem mesmo conseguir o “certificado” como acontece no hls. A única forma de conseguir a licença é através da autenticação da DRM.
A grande desvantagem da DRM, é que ela é uma solução cara, principalmente pelo fato de precisamos de pelo menos 3 empresas para fornecer esse serviço: Google, Microsoft e Apple.

Por Wesley Willians em 24/02/2017
Aprenda programação e desenvolvimento web
Se você é ou já foi aluno da School of Net entre o meio de 2016 até o início de Janeiro de 2017, deve ter percebido nossa maior deficiência: O Player com suas tecnologias de vídeo, bem como, a pobre experiência que ele oferecia. Problemas como: O vídeo ficar “engasgando” em alguns momentos, ou mesmo retroceder 2 segundos e continuar tocando. O player utilizado não fornecia o recurso um recurso essencial nos dias de hoje: aceleração do vídeo.
Além disso, o flash player era obrigatório.
No momento da publicação desse post, a School of Net já possui mais de 220 cursos focados em programação e desenvolvimento web com quase 3500 vídeos publicados.banner-aprenda-programacao
A grande questão que muitos perguntavam é: Por que a School of Net não utiliza alguma das várias opções de players HTML 5 que existem no mercado que incluem esses recursos? Esse questionamento era feito a todo momento.
No mundo aonde o conteúdo em vídeo é “rei”, onde todo seu modelo de negócio depende essencialmente desse recurso, temos um grande “trade off”:
Como fornecer a melhor experiência ao usuário, mas ainda proteger seu conteúdo para evitar que eles caiam em sites como MEGA ou mesmo em torrents?
Lembre-se, a School of Net trabalha com modelo de assinatura, ou seja, se todo nosso conteúdo vazar, não há porque os usuários continuarem renovando.
Relacionado: Conheça nosso plano de assinatura com acesso a todos os cursos do site
Acredite, mudamos para uma diferente empresa a qual fornecia as transmissões de vídeos razoavelmente seguras. O player era bem melhor, apesar de ser em flash. Foram apenas 15 dias para que diversos vídeos estivessem sendo espalhados para download.
Alguns camaradas que adoram distribuir conteúdos de terceiro começaram a fazer a festa.
Resolvemos então deixar de buscar empresas que trabalham com transmissão de vídeos e decidimos resolver o problema “dentro de casa”. Depois de muito trabalho de pesquisa, implementações, contratação de diversas soluções, finalmente implementamos nossa nova estrutura de vídeos, bem como a utilização de um player HTML 5 de qualidade.
Escrevo então esse post para compartilhar o conhecimento adquirido e apresentar qual a solução que acabamos implementando.
Mas afinal, o que está por trás das tecnologias de transmissão de vídeos. Como isso funciona?

Independente de player, temos 4 tipos principais de meios / protocolos de transmissão:
Download progressivo
rtmp
hls
mpeg-dash
download progressivo (progressão automática):

video-download-progessivo
essa é a forma mais simples e comum de transmissão de vídeos. Simplesmente você aponta qualquer player html 5, ou mesmo a tag <video> do html diretamente para um arquivo mp4 e o vídeo começará ser baixado no navegador e reproduzido no player.

Temos duas desvantagens nesse caso:
O arquivo é facilmente copiado
Mesmo que você queira assistir apenas alguns segundos do vídeo, ele é baixado por completo em seu computador. Isso faz com que o seu tráfego de dados seja muito grande.
RTMP: Real Time Messaging Protocol

video-rtmp
Criado pela Macromedia / Adobe, esse protocolo por muitos anos foi a mais utilizado e recomendado, uma vez que ele é extremamente leve, rápido, trabalha como streaming, ou seja, a transmissão para seu computador é realizada em tempo real, ao invés do conteúdo do vídeo ser baixado pelo browser como no caso da Donwload progressivo.
Mas nem tudo são flores. Para trabalhar com RTMP, você é obrigado a utilizar o Flash Player e o recurso de aceleração torna-se quase inviável, uma vez que o streaming é feito em tempo real.
A grande vantagem do RTMP é que você pode utilizar servidores de vídeo, como Wowza Video Server e eventualmente customizá-lo para criar uma camada de segurança que realmente consegue evitar o download do vídeo de uma forma realmente fantástica, tornando extremamente complexa a tentativa de download do vídeo, uma vez que toda a informação precisa ser capturada via proxy antes mesmo dela chegar no browser do usuário.
Essa foi a solução que utilizamos durante muito tempo na Code.education (nossa outra marca para venda de cursos Premium) e também na School of Net. Essa solução protegia nosso conteúdo, mas estava deixando nossos usuários Muito insatisfeitos, principalmente os que não possuíam uma boa conexão, uma vez que o streaming é feito em tempo real, causando possíveis travamentos (como descrevi no início desse artigo).
hls: http live streaming

video-hls
criado pela apple, o hls veio como uma solução realmente muito bem elaborada para a transmissão de vídeos. Além de não necessitar de servidores específicos, o vídeo quando utiliza esse protocolo possui um processo de “Packaging” onde são criados dezenas de arquivos pequenos (com a extensão: *.ts, normalmente).
A grande vantagem do HLS, é de que o vídeo é servido aos poucos, através do download dos arquivos .ts. Porém, é possível configurar o tempo máximo de buffer, logo, o vídeo não é baixado inteiramente em seu computador se você quiser assistir apenas uma pequena parte (diferente do que acontece no caso do download progressivo). Repare por exemplo no youtube, mesmo que você der play no vídeo e depois um pause, o mesmo não é bufferizado por completo.
(Isso não significa que o youtube utiliza necessariamente HLS).
Para você conseguir baixar e ter um mp4 de um vídeo que trabalha com HLS, você precisa pegar todos os arquivos .ts, “grudá-los” e convertê-los para um único arquivo MP4. Existem diversos softwares no mercado que já fazem isso.
hls com criptografia aes:

video-hls-criptografia
essa foi nossa solução adotada por alguns meses na school of net. Quando você trabalha com HLS com criptografia, significa que os arquivos .ts são criptografados, logo, se você baixá-los e fazer a concatenação dos mesmos, o vídeo não será reproduzido pelo fato dos .ts’ estarem criptografados.
O grande ponto é que para o browser descriptografar esses arquivos .ts, ele precisa de um certificado que é gerado durante a conversão do vídeo no formato HLS, ou seja:
Arquivos .ts + Certificado baixado pelo browser = arquivos .ts que podem ser reproduzidos, “grudados” e transformados em MP4.
Alguns softwares são capazes de baixar o arquivo do certificado e utilizá-lo para descriptografar e depois “grudar” os arquivos .ts e gerar o MP4. Foi exatamente isso que aconteceu conosco quando utilizamos HLS. O pessoal que queria distribuir nosso conteúdo de forma gratuita na Internet achou softwares que faziam isso.
Mais uma vez nosso conteúdo estava desprotegido e sendo rapidamente distribuído.
O HLS também possui uma grande restrição. No formato HTML 5, ele funciona apenas em versão mobile. Para desktop, novamente você tem que utilizá-lo com o nosso velho amigo: Flash Player.


mpeg-dash: dynamic adaptive streaming over http

video-mpeg-dash
o mpeg-dash é o padrão que provavelmente será adotado para a transmissão de vídeos na internet nos próximos anos. Além de ter recursos similares ao HLS – de baixar fragmentos dos vídeos, economizando banda do usuário final e do servidor.
Assim como o hls, o mpeg-dash é capaz de trabalhar de forma adaptativa, ou seja, ele é capaz de adaptar a qualidade do vídeo baseado na velocidade de sua conexão.
Diferentemente do hls, uma das grandes vantagens do mpeg-dash, é que ele é totalmente compatível com html 5, inclusive em browsers desktop.
Agora a pergunta que não quer calar: Trabalhar com mpeg-dash evita que os usuários façam download e distribuam seu conteúdo? se você trabalhar apenas com mpeg-dash a resposta é bem simples: não.
Como então utilizar o protocolo mais moderno da atualidade (mpeg-dash) e ainda ter a possibilidade de proteger o conteúdo?
a resposta para essa pergunta possui 3 letras: drm, ou digital rights management.
DRM: Digital Rights Management

video-mpeg-dash-drm
Netflix, iTunes, Amazon Prime Videos, Globo Play, etc são serviços de referência na utilização de DRM para proteção de seus conteúdos. Afinal, os grandes estúdios de Hollywood não querem que seus filmes possam ser baixados e distribuídos tão facilmente através desses novos serviços pagos de vídeo “on demand”.
A DRM foi uma solução encontrada para minimizar e proteger o download e distribuição ilegal de mídias, como áudio e vídeo.
Basicamente, vídeos que trabalham com DRM são criptografados e precisam de uma licença para poderem ser executados. A grande diferença nesse caso, é que, diferentemente do hls com criptografia, a licença é enviada diretamente para um cdm (content decription media). O cdm normalmente vem instalado por padrão nos browsers para que eles sejam capazes de descriptografar os arquivos protegidos pela drm.


Hoje temos 3 principais CDMs no mercado:logo-drm

Widevine, da Google que normalmente vem instalada por padrão no Google Chrome, Firefox, Opera, etc.
Play Ready, da Microsoft e é a solução utilizada pelo Microsoft Edge por exemplo.
Fair Play, da Apple, utilizada especificamente pelo Safari.
A parte mais interessante do processo é como a DRM gera essa licença, permitindo que um determinado usuário possa assistir a um conteúdo. De maneira simplificada temos:
Cada vídeo no formato mpeg-dash possui um “arquivo de manifesto” possuindo a key que foi utilizada para criptografar seus fragmentos. Normalmente esse arquivo possui a extensão “mpd”.

Quando uma solicitação de reprodução do vídeo é realizada, o browser envia para o servidor os dados do vídeo mais as informações específicas do usuário que solicita a licença. O servidor de DRM faz uma requisição de volta para o servidor de aplicação “perguntando” se o usuário tem a permissão para ver especificamente aquele vídeo. O servidor de aplicação responde SIM ou NÃO.
Caso sim, o servidor de drm libera (issue) a licença que é passada para o cdm do browser e o vídeo é finalmente reproduzido.
Isso significa que se você baixar todos os fragmentos dos arquivos do mpeg-dash, você não será capaz de descriptografar e nem mesmo conseguir o “certificado” como acontece no hls. A única forma de conseguir a licença é através da autenticação da DRM.
A grande desvantagem da DRM, é que ela é uma solução cara, principalmente pelo fato de precisamos de pelo menos 3 empresas para fornecer esse serviço: Google, Microsoft e Apple.
Sobre a tecnologia de vídeos da School of Net

Depois de colocarmos tudo na balança, optamos por adotar o mpeg-dash + drm. Com isso, podemos fornecer nossos vídeos de maneira Multiplataforma utilizando um player HTML 5 leve, elegante e finalmente com o recurso de aceleração.

Qual player para isso?

Há um player chamado Clappr (https://github.com/clappr/clappr) que possui suporte a DRM e diversos outros plugins. O Clappr recebe frequentemente diversas contribuições no Github, inclusive pelo pessoal da Globo.com.

Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Criar um novo site personalizado
Isso é um projeto ou uma posição de trabalho? Um projeto
Tenho, atualmente Eu tenho uma ideia geral
Disponibilidade requerida Conforme necessário
Experiência nesse tipo de projeto Não (Eu nunca gerenciei esse tipo de projeto)
Integrações de API Outros (Outras APIs)
Funções necessárias Desenvolvedor

Prazo de Entrega: Não estabelecido

Habilidades necessárias

Outro projetos publicados por S. F. D. S.