2012-11-03 361 views
4

使用WebRTC +画布构建运动探测器js library。 当我运行应用程序,我立即得到非常高的CPU使用率。 我优化了循环等,但基本问题似乎是访问摄像头,例如WebRTC。WebRTC性能 - 非常高的CPU负载

有没有办法让WebRTC表现更好?也许是另一种配置?还是有我失踪的东西?这可能是我处理错误的一些js内存泄漏吗? 我在做什么错?

您可以检查另一个演示here具有相同的lib

,并使用WebRTC技术的不同之一,可与同样的问题here

+0

我已经在http://iambrandonn.github.com/WebcamSwiper上测试过这个演示,并且它没有使用超过20%的CPU时间。我认为你应该记住WebRTC远没有生产准备 - API和底层协议都在发生重大变化。您是否在每个浏览器中或仅在特定的浏览器上获得高CPU负载? – Makkes

+0

你测试了另一个吗?我也只能在chrome 22中测试,因为这是在其他浏览器中实现的。 – alonisser

+0

getUserMedia现在可用于Firefox Aurora/Nightly和Opera - 可以很好地测试这些。 (有关适用于所有三种平台的演示,请参阅www.simpl.info/gum。)Ericsson Bowser移动浏览器还实施WebRTC,包括gUM。另外,为了迂回,请注意“WebRTC”用于表示gUM,而WebRTC实际上是整个实时通信浏览器项目,包括RTCPeerConnection和DataChannel。没有所有三个API,都有Web,但没有RTC! gUM只是获取流数据的部分。 –

回答

5

演示看起来像它通过检查视频图像的像素不运动检测。它似乎将其渲染为画布,然后检索画布图像数据。

这很慢,因为这只是一个缓慢的事情 - 有很多像素,帧快速通过,这是一个高CPU工作。由于JavaScript在这类数据量大的处理中并不总是非常有效,因此情况变得更糟。所以我不认为WebRTC的速度是慢的。这只是沉重的JavaScript。

1

您是否尝试过使用Web Workers进行计算?

有一个demo using web workers for motion tracking(仅限Firefox)。本演示中CPU使用率似乎很高,但工作人员报告的fps远远超过视频的帧率,因此尝试将工作人员限制在30fps可能会有一些好处。

+0

为什么使用webworkers会更快?不阻塞也许更快?是网络工作者使用不同的线程? – alonisser

+0

是的,它们在UI线程的独立线程中运行。更进一步,您可以启动多个工作人员并以MapReduce方式分发工作以提高性能。对于CPU使用情况,YMMV。 – istvanp