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视频位图。
相关链接:
我正在尝试对视频源使用 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视频位图。
相关链接: