Tuesday, November 13, 2012

Como tocar vídeos usando a tag canvas



Como tocar vídeos usando a tag canvas

Tutorial passo-a-passo para tocar um vídeo utilizando a tag canvas



Primeiramente você precisará de um arquivo de vídeo. Na verdade, precisaremos de dois. Um no formato OGG (para Chrome e Firefox) e o outro em MP4 (para o Safari).

Para converter vídeos em diferentes formatos você pode utilizar alguns websites como: www.online-convert.com ou www.mediaconverter.org.

Assim que você tiver os arquivos de vídeos, o próximo passo é criar uma simples página HTML com uma tag canvas e com uma tag video. Siga o exemplo abaixo:

 <!DOCTYPE html>  
 <head>  
 <title>Playing YouTube video on HTML5 canvas</title>  
 </head>  
 <body>  
  <video id="video" autoplay="true" loop="true">  
   <source src="./video/BigBuckBunny_640x360.ogv" type="video/ogg" />  
   <source src="./video/BigBuckBunny_640x360.mp4" type="video/mp4" />  
  </video>  
  <canvas id="canvas"></canvas>  
 </body>  
 </html>  

Agora você pode testar os vídeos, utilizando a tag video, nos diferentes browsers para ver se está tudo correto.

O próximo passo é adicionar um CSS e esconder a tag de vídeo dentro de uma div invisível. Segue o código:

 <!DOCTYPE html>  
 <head>  
 <title>Playing YouTube video on HTML5 canvas</title>  
 </head>  
 <body>  
  <video id="video" autoplay="true" loop="true">  
   <source src="./video/BigBuckBunny_640x360.ogv" type="video/ogg" />  
   <source src="./video/BigBuckBunny_640x360.mp4" type="video/mp4" />  
  </video>  
  <canvas id="canvas"></canvas>  
 </body>  
 </html>  

Como iremos tocar o vídeo na tag canvas, precisaremos esconder a tag video, porém continuaremos a utilizar-lá para reprodução do áudio.

Agora a única parte que falta é o javascript para fazer o render do vídeo na tag canvas. Para fazer isso precisaremos extrair uma imagem do vídeo e mostra-lá no canvas. E se repetirmos esse processo inúmeras vezes durante um intervalo de X em X milisegundos... TA-DA!!! Teremos o vídeo sendo reproduzido no canvas

Aqui está o código fonte completo:

 <!DOCTYPE html>  
 <head>  
 <title>Playing YouTube video on HTML5 canvas</title>  
 <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width" />  
 <style type="text/css">  
  html, body {  
   width: 100%;  
   height: 100%;  
   padding: 0px;  
   margin: 0px;  
  }  
  #canvas {  
   padding: 0px;  
   margin: 0px;  
   top:0;  
   left:0;  
   z-index: 30;  
   position: absolute;  
   width: 100%;  
   height: 100%;  
  }  
 </style>  
 </head>  
 <body>  
  <div style="display: none;">  
   <video id="video" autoplay="true" loop="true">  
    <source src="./video/BigBuckBunny_640x360.ogv" type="video/ogg" />  
    <source src="./video/BigBuckBunny_640x360.mp4" type="video/mp4" />  
   </video>  
  </div>  
  <canvas id="canvas"></canvas>  
  <script>  
  document.addEventListener('DOMContentLoaded', function(){  
   var v = document.getElementById('video');  
   var canvas = document.getElementById('canvas');  
   var context = canvas.getContext('2d');  
   //var cw = Math.floor(canvas.clientWidth / 100);  
   //var ch = Math.floor(canvas.clientHeight / 100);  
   var cw = Math.floor(canvas.clientWidth);  
   var ch = Math.floor(canvas.clientHeight);  
   canvas.width = cw;  
   canvas.height = ch;  
   v.addEventListener('play', function(){  
    draw(this,context,cw,ch);  
   },false);  
  },false);  
  function draw(v,c,w,h) {  
   if(v.paused || v.ended) return false;  
   c.drawImage(v,0,0,w,h);  
   setTimeout(draw,20,v,c,w,h);  
  }  
  </script>  
 </body>  
 </html>  

Se você quiser utilizar a mesma técnica para tocar um vídeo do YouTube, veja esse tutorial: Playing YouTube videos on HTML5 canvas with Javascript.

Se você quiser baixar vídeos do YouTube via Javascript, veja este: Download YouTube video files with Javascript

Nos próximos posts irei mostrar como criar um simple quebra-cabeça em HTML5. Fique ligado!

No comments:

Post a Comment