2012-07-31 94 views
3

是否可以將自定義視覺效果(如灰度)應用於HTML5/Javascript中標記的輸入流?我的目標是能夠向用戶顯示過濾網絡攝像頭的輸出,但用戶應該能夠從各種濾鏡中選擇,而不僅僅是灰度。HTML5/Javascript視頻過濾

所有幫助非常感謝,我始終接受一個答案!

回答

1

做到這一點的方法是抓住video元素的每個幀並處理,然後用canvas進行顯示。 Here's an example我最近爲我的書(警告:我知道這個例子在IE9中存在一些問題),它使用了HTML5 Rocks的灰度過濾器。主循環看起來像這樣,假設video是對元素的引用和context是一個二維的畫布背景下,requestAnimFrame comes from Paul Irish

function draw() { 
    if(video.paused || video.ended) return false; 
    context.clearRect(0,0,720,480); 
    context.drawImage(video,0,0,720,480); 
    context.putImageData(grayscale(context.getImageData(0,0,720,480)),0,0); 
    requestAnimFrame(draw); 
} 

getUserMedia()功能亞歷克斯W¯¯提到當前僅在Opera和Chrome可用,可以閱讀一些關於它的博客文章,並看到一些演示here。一旦你有了一個媒體流,你可以將它管入一個video元素,並完成與上面完全相同的事情。

+0

該解決方案是可以的,但是由此產生的圖像較爲模糊,分辨率比原始網絡攝像頭的輸出要小。有沒有什麼辦法解決這一問題? – danielmhanover 2012-08-02 17:28:26

+0

@丹尼爾H.使用您想要的任何分辨率「canvas」元素。 – robertc 2012-08-02 18:40:09

+0

這個例子非常慢,可能是因爲它不是GPU加速的。 GPU有沒有辦法加速畫布上的視覺效果? – danielmhanover 2012-08-02 20:42:45