我使用jsPDF創建PDF輸出工具,但需要添加多個頁面,每個頁面都保存一個視頻幀的畫布圖像。 由於我不能協調如何對操作進行排隊以及如何在事件上等待以實現最佳結果,所以我被困在邏輯上,以達到這個目的的最佳方式。 要開始我加載到視頻標籤的視頻,並可以得到或者乾脆設置它的定位點:隊列獲得多個視頻幀
video.currentTime
我也有視頻秒,類似如下的數組:
var vidSecs = [1,9,13,25,63];
什麼我需要做的就是遍歷這個數組,在視頻中查找數組中定義的秒數,在這些秒處創建一個畫布,然後將每個畫布添加到PDF頁面。 我有一個創建視頻幀功能帆布如下:
function capture_frame(video_ctrl, width, height){
if(width == null){
width = video_ctrl.videoWidth;
}
if(height == null){
height = video_ctrl.videoHeight;
}
canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.drawImage(video_ctrl, 0, 0, width, height);
return canvas;
}
此功能工作正常結合以下將圖像添加到PDF:
function addPdfImage(pdfObj, videoObj){
pdfObj.addPage();
pdfObj.text("Image at time point X:", 10, 20);
var vidImage = capture_frame(videoObj, null, null);
var dataURLWidth = 0;
var dataURLHeight = 0;
if(videoObj.videoWidth > pdfObj.internal.pageSize.width){
dataURLWidth = pdfObj.internal.pageSize.width;
dataURLHeight = (pdfObj.internal.pageSize.width/videoObj.videoWidth) * videoObj.videoHeight;
}else{
dataURLWidth = videoObj.videoWidth;
dataURLHeight = videoObj.videoHeight;
}
pdfObj.addImage(vidImage.toDataURL('image/jpg'), 'JPEG', 10, 50, dataURLWidth, dataURLHeight);
}
我邏輯混亂是如何最好在循環訪問vidSecs
陣列時調用這些代碼位,因爲問題是設置video.currentTime
需要循環等待video.onseeked
事件在代碼捕獲幀並將其添加到PDF之前觸發。
我試過以下,但只有得到最後的圖像,因爲在onseeked
事件觸發並調用幀捕獲代碼之前,循環已完成。
for(var i = 0; i < vidSecs.length; i++){
video.currentTime = vidSecs[i];
video.onseeked = function() {
addPdfImage(jsPDF_Variable, video);
};
}
任何想法非常感謝。
後續Muaz汗看起來是最先進的HTML5視頻處理的開發商之一。直接詢問他http://www.muazkhan.com/ https://twitter.com/muazkh https://twitter.com/WebRTCWeb https://www.webrtc-experiment.com/RTCMultiConnection/RecordRTC-and-RTCMultiConnection .html https://stackoverflow.com/questions/41487635/thumbnails-from-a-video-with-javascript-html5?rq=1 –