@ Эли Грей, похоже, определил источник вашего крушения. Похоже, у них есть исправление в работе, поэтому, если вы не хотите изменять свой подход, надеюсь, это будет решено в ближайшее время.
Что касается вашего другого вопроса, вам обязательно следует придерживаться drawImage()
, если можете. Если я понимаю ваше намерение использовать CanvasPixelArray
, вы рассматриваете возможность итерации по каждому пикселю на холсте и обновления его с использованием новой информации о пикселях? Если это так, это будет нигде почти так же эффективно, как drawImage()
. Кроме того, этот подход совершенно не нужен для вас, поскольку вам (предположительно) не нужно ссылаться на данные в предыдущем кадре.
К счастью или нет, вы не можете напрямую поменять внутренний CanvasPixelArray
объект, хранящийся на холсте HTML5. Если у вас есть правильно отформатированный массив данных пикселей, единственный способ обновить элемент холста - вызвать drawImage()
или putImageData()
. Прямо сейчас, putImageData()
намного медленнее, чем drawImage()
, как вы можете видеть здесь: http://jsperf.com/canvas-drawimage-vs-putimagedata. Если у вас есть какая-либо прозрачность в кадрах вашего видео, вы, вероятно, захотите очистить холст, а затем используйте drawImage()
(в противном случае вы можете видеть предыдущие кадры).
Сказав все это, я не знаю, что вам действительно нужно использовать холст для этого. Была ли у вас мотивация использовать холст, чтобы вы могли избежать кэширования (что сейчас не является для вас основной проблемой)?