HTML5 Canvas 视频源无法在 Android 上使用 drawImage

HTML5 Canvas drawImage with video source not working on Android

我正在尝试对视频源使用 canvas 的 drawImage 方法,但它在 Android 4.4.2 中不起作用,已使用 Chrome 浏览器进行测试。

这是我的代码:

$(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/

有没有办法让它也适用于 Android 和 iOS 设备?

这似乎是特定文件格式 (mp4) 的问题。

替换 webm 文件,它工作正常。

不幸的是,<video> 已经有一段时间了(真正需要 webm/ogg 而不仅仅是 mp4,无论浏览器声称支持什么)。

(我敢打赌这是一个与反 DRM 屏幕截图有关的错误?谁知道呢)

例如使用来源 http://video.webmfiles.org/big-buck-bunny_trailer.webm 它将起作用:http://jsfiddle.net/h1hjp0Lp/15/

我是 运行 Chrome 43.0.2357.93 Android 5.0.1,drawImage 不适用于 mp4 或 webm。

看起来 Chrome 没有正确地从视频标签中捕获帧数据。当我调用 getImageData 并检查生成的 imageData 对象时,RGBA 值都设置为 0。

对于 Android 5.0.1 的 HUAWEI GRA-TL00,drawImage 不适用于 mp4 或 webm。

参考crestejs视频位图。

相关链接:

  1. Using Images

  2. Can I use: Canvas?