Ответ 1
Я бы предложил:
-
Используйте
setInterval
для захвата содержимого вашего холста в качестве URL-адреса данных PNG.function PNGSequence( canvas ){ this.canvas = canvas; this.sequence = []; }; PNGSequence.prototype.capture = function( fps ){ var cap = this; this.sequence.length=0; this.timer = setInterval(function(){ cap.sequence.push( cap.canvas.toDataURL() ); },1000/fps); }; PNGSequence.prototype.stop = function(){ if (this.timer) clearInterval(this.timer); delete this.timer; return this.sequence; }; var myCanvas = document.getElementById('my-canvas-id'); var recorder = new PNGSequence( myCanvas ); recorder.capture(15); // Record 5 seconds setTimeout(function(){ var thePNGDataURLs = recorder.stop(); }, 5000 );
-
Отправьте все эти PNG DataURL на ваш сервер. Это будет очень большая куча данных.
-
Используя любой серверный язык, который вам нравится (PHP, Ruby, Python), удаляйте заголовки с URL-адресов данных, чтобы вы оставались только с PNG с кодировкой base64
-
Используя любой серверный язык, который вам нравится, преобразуйте данные base64 в двоичный файл и запишите временные файлы.
-
Используя любую стороннюю библиотеку, которая вам нравится на сервере, преобразуйте последовательность PNG файлов в видео.
Изменить. Что касается комментариев внешних изображений, вы не можете создать URL-адрес данных с холста, который не является origin-clean. Как только вы используете drawImage()
с внешним изображением, ваш холст испорчен. По этой ссылке:
Все элементы холста должны начинаться с того, что их исходный-чистый набор равен true. Флаг должен быть установлен в false, если происходит одно из следующих действий:
[...]
Метод 2D-контекста
drawImage()
вызывается сHTMLImageElement
илиHTMLVideoElement
, происхождение которого не совпадает с именем объекта Document, которому принадлежит элемент холста.[...]
Всякий раз, когда вызывается метод
toDataURL()
элемента canvas, флаг флага которого установлен на значение false, метод должен вызывать исключениеSECURITY_ERR
.Всякий раз, когда метод
getImageData()
для 2D-контекста элемента canvas, флаг начала координат которого установлен в false, вызывается с другими правильными аргументами, метод должен поднимать исключениеSECURITY_ERR
.