Вы не можете получить поток кадр за кадром, но можно захватить кадр в регулярном или нерегулярном промежутке, рисуя его на холст.
Предполагая, что идентификаторы для canvas
и img
бы то же самое:
var ctx = canvas.getContext("2d");
canvas.width = img.width;
canvas.height = img.height;
(function loop() {
ctx.drawImage(img, 0, 0); // grab frame
// extract frame here if needed
requestAnimationFrame(function() {
requestAnimationFrame(loop); // updates per 1/30 fps
});
})();
Конечно, цикл не требуется, если это необходимо, просто вызвать drawImage()
«по требованию». Затем используйте холст для добавления текста (отметка времени и т. Д.).) Или что-то и извлечь как изображение:
var dataURL = canvas.toDataURL("image/jpeg", 0.75);
var img = new Image;
img.onload = function() {
// image ready
};
img.src = dataURL;
или немного быстрее и памяти для пользователя, но асинхронный (не поддерживается в IE):
canvas.toBlob(function(blob) {
var img = new Image;
img.onload = function() {
// image ready.
};
img.src = (URL || webkitURL).createObjectURL(blob);
}, "image/jpeg", 0.75);
Чтобы вернуть изображение/кадр из холста можно извлечь a Data-URI следующим образом:
var uri = canvas.toDataURL("image/jpeg", 0.75);