2012-07-31 88 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