2015-05-25 18 views
6

Ich versuche, Canvas drawImage Methode mit Videoquelle zu verwenden, aber es funktioniert nicht in Android 4.4.2, getestet mit Chrome-Browser.HTML5 Canvas drawImage mit Videoquelle funktioniert nicht auf Android

Hier ist mein Code:

$(function() { 

    var canvas = document.getElementById('canvas'); 
    var ctx = canvas.getContext('2d'); 
    var video = document.getElementById('video'); 

    var videoWidth; 
    var videoHeight;  

    var paused = false; 

    canvas.addEventListener('click', function() { 
     if (paused) { 
      video.play(); 
     } else { 
      video.pause(); 
     } 
     paused = !paused; 
    }); 

    video.addEventListener("loadedmetadata", function() { 
     videoWidth = this.videoWidth || this.width; 
     videoHeight = this.videoHeight || this.height; 
     canvas.width = videoWidth; 
     canvas.height = videoHeight; 
    }, false); 

    video.addEventListener('play', function() { 
     var $this = this; // cache 
     (function loop() { 
      if (! $this.paused && ! $this.ended) { 
       drawImage($this); 
       requestAnimationFrame(loop); 
       // setTimeout(loop, 1000/25); // drawing at 25 fps 
      } 
     })(); 
    }, 0); 

    function drawImage(frame) { 
     ctx.drawImage(frame, 0, 0); 
     // ctx.clearRect (0 , 0 , canvas.width, canvas.height); 
    } 

}); 

Fiddle:http://jsfiddle.net/h1hjp0Lp/

Gibt es eine Möglichkeit, wie gut es funktioniert mit Android und iOS-Geräte zu machen?

+0

Try 'click' Ereignis mit' touchstart' zu ersetzen, sehen, ob es funktioniert. – Allen

+0

@Allen, danke, aber es funktioniert nicht. – vitozev

+1

lesen, scheint es, dass es einen Fehler in Chrome Mobile ist. Ich habe gerade die vorherigen Demos überprüft, die ich mit Video -> Canvas gemacht habe und sie funktionieren nicht mehr. Ich werde weiter nachforschen. (Android 5.1) – rlemon

Antwort

2

Es scheint ein Problem mit diesem spezifischen Dateiformat zu sein (mp4).

Eine webm Datei ersetzen und es funktioniert gut.

Leider, aber das war der Weg vonfür eine Weile (um wirklich WebM/Ogg und nicht nur mp4, unabhängig von dem, was Browser behaupten, zu unterstützen).

(I seiner Wette um einen Fehler in Zusammenhang mit anti-drm Screenshot Sachen wer weiß?)

beispielsweise verwenden, um die Quelle http://video.webmfiles.org/big-buck-bunny_trailer.webm und es wird funktionieren: http://jsfiddle.net/h1hjp0Lp/15/

+1

Auf einem Gerät mit Android-Version niedriger als 5.0 funktioniert das drawImage von einem Video immer noch nicht ... –

0

Ich bin mit Chrome 43.0.2357.93 auf Android 5.0.1 und DrawImage funktionieren nicht für mp4 oder webm.

Es sieht so aus, als würde Chrome Rahmendaten vom Video-Tag nicht richtig erfassen. Wenn ich getImageData aufrufen und das resultierende imageData-Objekt überprüfe, werden alle RGBA-Werte auf 0 gesetzt.

+0

Ich habe festgestellt, dass dies vor kurzem aufgehört hat, auf Chrome auf Android zu arbeiten, es verwendet arbeiten. Ich habe festgestellt, dass es in Chrome Beta auf Android funktioniert. Hier ist mein Test: http://codepen.io/kus/full/aOqvWP Ich benutze Android 5.1.1 Chrome 43.0.2357.93 – Kus

-1

Für HUAWEI GRA-TL00 mit Android 5.0.1 funktioniert drawImage nicht für mp4 oder webm.

Siehe Crestejs Video Bitmap.

Related Links:

  1. Using Images

  2. Can I use: Canvas?

+0

[https://developer.mozilla.org/zh-CN/docs/Web/ API/Canvas_API/Lernprogramm/Using_images] (https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Using_images) [http://caniuse.com/#search=canvas ] (http://caniuse.com/#search=canvas) –