是否可以将自定义视觉效果(如灰度)应用于HTML5/Javascript中标记的输入流?我的目标是能够向用户显示过滤网络摄像头的输出,但用户应该能够从各种滤镜中选择,而不仅仅是灰度。HTML5/Javascript视频过滤
所有帮助非常感谢,我始终接受一个答案!
是否可以将自定义视觉效果(如灰度)应用于HTML5/Javascript中标记的输入流?我的目标是能够向用户显示过滤网络摄像头的输出,但用户应该能够从各种滤镜中选择,而不仅仅是灰度。HTML5/Javascript视频过滤
所有帮助非常感谢,我始终接受一个答案!
做到这一点的方法是抓住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
元素,并完成与上面完全相同的事情。
它看起来像这样使用获得用户媒体API和WebGL是可能的:
http://dev.w3.org/2011/webrtc/editor/getusermedia.html
下面是一个例子(链接到许多有用的资源):
该解决方案是可以的,但是由此产生的图像较为模糊,分辨率比原始网络摄像头的输出要小。有没有什么办法解决这一问题? – danielmhanover 2012-08-02 17:28:26
@丹尼尔H.使用您想要的任何分辨率“canvas”元素。 – robertc 2012-08-02 18:40:09
这个例子非常慢,可能是因为它不是GPU加速的。 GPU有没有办法加速画布上的视觉效果? – danielmhanover 2012-08-02 20:42:45