次のコードでキャンバスを使用して、HTML5ビデオからブラウザでサムネイルのグループを生成しようとしています。
var fps = video_model.getFps(); //frames per second, comes from another script
var start = shot.getStart(); //start time of capture, comes from another script
var end = shot.getEnd(); //end time of capture, comes from another script
for(var i = start; i <= end; i += 50){ //capture every 50 frames
video.get(0).currentTime = i / fps;
var capture = $(document.createElement("canvas"))
.attr({
id: video.get(0).currentTime + "sec",
width: video.get(0).videoWidth,
height: video.get(0).videoHeight
})
var ctx = capture.get(0).getContext("2d");
ctx.drawImage(video.get(0), 0, 0, video.get(0).videoWidth, video.get(0).videoHeight);
$("body").append(capture, " ");
}
キャプチャの量は正しいですが、問題は、Chromeではすべてのキャンバスが黒く表示され、Firefoxでは常に同じ画像が表示されることです。
問題は、ループが速すぎてキャンバスをペイントできないことかもしれませんが、.drawImage()は非同期であるため、理論的には、次の行にジャンプする前にキャンバスをペイントする必要があります。
この問題を解決する方法について何かアイデアはありますか?ありがとう。