2011-08-17 41 views
2

我在畫布上繪製視頻,它在opera,mozilla和chrome中工作,但在IE9畫布中是空白的,但視頻正在播放。這裏是JavaScript的,我使用:codeInternet Explorer 9在CanV上繪製視頻的問題HTML5

感謝您的幫助

+0

什麼格式是你的視頻?您在F12 Script Console中看到了哪些例外(如果有)? – EricLaw

+0

錯誤:無法獲取屬性「已暫停」的值:對象爲空或未定義 – luka

+0

我的視頻位於mp4和ogg中。在IE9中,視頻播放正常,畫布是空白的。 – luka

回答

0

你或許應該同步的事件,而不是發揮事件。如果您在加載任何幀之前嘗試訪問視頻,您將獲得空引用。當播放是請求時播放事件觸發。播放事件在播放實際開始時觸發。

您也可能想要將您的getContext調用移動到您已調整畫布大小的AFTER。

+0

謝謝我解決了問題 – luka

+0

但是*您是如何解決問題的? – EricLaw

+0

我避免與事件同步,我只是在javascript中開始繪製視頻(video.play();)之前開始使用視頻; – luka

0

下面的代碼似乎適用於我。唯一的變化是setTimeout函數調用需要有一個包裝器才能在IE中正確傳遞參數。這個變化在http://html5doctor.com/video-canvas-magic/的演示似乎工作正常。

document.addEventListener('DOMContentLoaded', function() { 
    var v = document.getElementById('video'); 
    var canvas = document.getElementById('canvas'); 
    var context = canvas.getContext('2d'); 

    var cw = Math.floor(canvas.clientWidth); 
    var ch = Math.floor(canvas.clientHeight); 
    canvas.width = cw; 
    canvas.height = ch; 

    v.addEventListener('play', function() { 
     draw(this, context, cw, ch); 
    }, false); 

}, false); 

function draw(v, c, w, h) { 
    if (v.paused || v.ended) return false; 
    c.drawImage(v, 0, 0, w, h); 
    setTimeout(function(){ draw(v, c, w, h) }, 20); 
}​