Я хочу сделать видео на холсте с частотой 25 кадров в секунду и более. Поэтому я использую CanvasRenderingContext2D#drawImage()
для рендеринга каждого кадра на холсте. Работает в chrome69 и FireFox. Но это не работает в chrome70.
Вот фрагмент кода:
if (frame >= this.inFrame && frame <= this.outFrame) {
// this.ctx.drawImage(this.video,
// this.sourceRect.x, this.sourceRect.y, this.sourceRect.width, this.sourceRect.height,
// this.rect.x, this.rect.y, this.rect.width, this.rect.height);
this.frame.init(this.canvas); // line 6, breakpoint here.
this.frame.isPlaying = this.isPlaying;
let image = this.frame;
for (let i = 0; i<this.filters.length;i++) {
image = this.filters[i].getImageWithFilter(frame, image);
}
return image;
}
Я поставил точку останова в строке 6. В это время видео загружено.
this.video.readyState=4
И я выполняю эту команду в инструментах разработчика.
document.getElementById("test_canvas").getContext('2d').drawImage(this.video, 0, 0);
Иногда тестовый холст показывает правильный видеокадр, иногда нет, просто нечего показывать.
Давайте продолжим программу, холст покажет правильный видеокадр.
Так что я сомневаюсь, что CanvasRenderingContext2D#drawImage()
- это асинхронный метод в Chrome70. Но я ничего не нахожу на сайте Chrome.
Может ли кто-нибудь помочь мне с этим вопросом или помочь правильно отобразить в каждом кадре.