Dificultar download de vídeo html5

Prezados, gostaria de dificultar o download de vídeos html5 a partir da URL, que o usuário poderá inspecionar (examinar com funções de navegadores). Pesquisando na Net vir que, não, à uma maneira 100% de não permitir, o usuário avançado de não fazer download de videos. Estou utilizando a tag do html5 para exibir vídeos de um curso EAD:

<video id="video" src="localhost/path/#{Manegbean.bancoDado.codigo}.mp4" 
	preload ='auto'
	width="780px" height="490px"
	controls="controls" />  

O que consegui fazer até o momento foi desabilitar o oncontextmenu (false), para não permitir a opção de salvar o vídeo pelo navegador, porem se o usuário inspecionar (for um usuário esperto consegue ver os vídeos). Alguém tem uma dica de como posso esconder bem, a tag que permite visualizar os vídeos? Se teria esta possibilidade! Se tiver alguma forma de dar mas segurança aos conteúdos será bem vinda.

vamos la

a resposta curta é não. um browser que vai tocar esse video não é diferente de um programa que pegue o src e imite ser um browser.

o que vc pode fazer? dificultar

por exemplo vc pode verificar o user agent e barar se for o wget…

agora perceba que vc esta fazendo download progressivo do arquivo. o caramada tem que fazer download de todo o video para ver o fim e isso pode ser custoso (isso se vc não usa algum plugin para o seu web server conseguir fazer seek por tempo/segundos). talvez seja interessante vc trocar por HTTP Streaming. com http streaming o player pegar uma playlist e vai ter que baixar cada chunk de video e tocar em sequencia. um usuario medio não consegue juntar todos estes pedaços em um arquivão, vai por mim.

pra http streaming vc precisa segmentar seus arquivos e gerar uma playlist,

veja aqui https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/UsingHTTPLiveStreaming/UsingHTTPLiveStreaming.html

tem um programa chamado mediafilesegmenter que pode te ajudar.

existem vantagens em http streaming para VOD. vc pode combinar com um servidor como o Wowza e escrever um plugin de segurança que vai verificar algumas coisas como o user agent, ip, cookie e talvez algum hash de segurança que vc pode gerar em um codigo javascript obscurecido pra deixar ainda mais dificil o acesso.

agora se vc fez isso para o browser e não para uma aplicação mobile (onde vc pode socar uma chave criptografica e fazer streaming do video encriptado) as suas opções são bem reduzidas.

Penso que a melhor forma seja você disponibilizar um login e senha para cada usuario seu autorizado a ver o video, mas se eles tiverem conhecimento poderão inspecionar o codigo e ver a url. A forma de blindar seria não fazer em html e sim atraves de algum plugin java, net, flash, mas essas soluções por motivos de segurança estão entrando ou entrarão aos poucos em desuso dentro dos navegadores.

Em HTML tem 2 noticias, uma boa e outra ruim, a boa e’ que tá tudo ali diante dos seus olhos e a ruim e’ que peca na proteção do codigo.

ai vc tem q ver duas coisas:

96% das pessoas fora do mundo de TI nao sabe usar o inspect.

se vc precisa garantir q ninguem vai baixar o video ( e olhe q a galera é criativa, tipo gravar screencast da tela com o video tocando, etc ) talvez seja melhor usar um terceiro como vimeo ou youtube, alguem que vc possa pagar e estabelecer em contrato q eles vão se esforçar para evitar que o cara baixe o video.

Obrigado, meu camarada, por me ajudar. Isso vai dar maior trabalho (irei tentar). Será que existe uma outra forma de validar a sessão na URL do SRC da tag vídeo, por exemplo, se o usuário inspecionar e copiar ou clicar na URL verificar a sessão no Manebean, se sessão não tiver ativa erro 404. Abraços!

Peczenyj, já vi que até vídeos de empresas como facebook é possível burlar e baixar vídeos.
As pessoas são criativas mesmos podendo gravar as aulas com screencast da tela. O camtasia é exemplo!
Acho que é impossível, não permitir que tenha uma pessoa não baixe, ainda mas se o curso for bom.
Não, estou usando serviço de terceiro, onde, os videos ficam em um servidor. Outra coisa que faço para identificar os vídeos é ao renderizar o vídeo adicionar o logo de direito autoral.

J-menezes o sistemas é focado em EAD, e já permite o usuário executar Login e senha para permitir assistir os vídeos. Desabilitei a opção de oncontextmenu, para não permitir o usuário executar dounload pela aplicação, mas se o usuário inspecionar e consegue baixar.

Eu estava trabalhando com a tag media do primeface, mas é muito ruim:

<p:media cache=“false” id=“video” value="localhost/path/#{Manegbean.bancoDado.codigo}.mp4"
width=“780px” height=“490px” player=“quicktime”>
<f:param name=“autoPlay” value=“false” />
<f:param name=“autostart” value=“true” />
</p:media>

Vou tentar pelo menos dificultar, mas vi que não vai ser fácil, porque nunca fiz!

Um abraços para todos!

Entendo o que você está passando. Mas vou lhe dar uma sugestão e não sei se ela enquandra no perfil do seu negócio e dos seus clientes.

Em JavaFX você pode usar o WebView com a WebEngine, adaptado as reais necessidades do seu negocio.

Neste caso seus usuarios teriam que baixar mais um navegador, o seu e em JavaFX.
( Eu mesmo fiz um bem especifico aqui pra mim )

Dentro dele você não coloca o recurso em JavaScript de inspeção e tambem ao verificar o login somente acessa o conteudo se for pelo seu navegador.

Penso que a questão levantada por você e’ bastante pertinente e requer um pouco mais de atenção da nossa parte, pois uma hora ou outra agente vai precisar de um recurso desse, o que nos levara’ a um grande quebra cabeça.

Mas como já foi explicado pelo peczenyj, realmente.

Sempre existe uma forma fazer engenharia reversa, ninguem por enquanto está 100% seguro neste caso. Talvez quem sabe um dia com a segurança quântica.

Anos atrás a solução que eu encontrei foi:

Flash media server + video on demand via RTMP + SWF verification + hash segurança + restrição geográfica

À escalabilidade dependia do flash. O hash garantia que o usuario era do tipo X que podia acessar o video (o “estava logado”). SWF verification “garante” que aquele e so aquele player flash pode tocar o video.

E ainda assim não fica 100%

Agora so um detalhe: utilizar uma aplicação j2ee para servir video é algo que eu não faria. Vídeo é arquivo estatico. Usa um
NginX pra servir video. Existem N formas de garantir que o cara so vai ver o video estando logado (cookies, hash segurança, etc).
Video geralmente é grande e isso vai ser um mega gargalo quando várias pessoas forem assistir ao mesmo tempo.

O Google adicionou um novo recurso desde que a última resposta foi postada aqui. Agora você pode adicionar o controlListatributo conforme mostrado aqui:

< video width="512" height="380" controls controlsList="nodownload" >
    < source data-src="mov_bbb.ogg" type="video/mp4" >
< /video >

Alguém encontrou a solução? O nodownload adicionado pelo google não desabilita a função de “download” e “salvar video como”.