WebRTC性能 - 非常高的CPU负载

5

我正在开发一个使用WebRTC和画布构建的动作检测JavaScript库。当我运行应用程序时,立即出现非常高的CPU使用率。

有没有办法使WebRTC表现更好?也许有其他配置?或者我还缺少什么东西?这可能是我处理不正确的js内存泄漏吗?我做错了什么?

您可以在此处检查另一个使用相同库的演示here

和使用WebRTC并具有相同问题的不同演示here


我已经测试了http://iambrandonn.github.com/WebcamSwiper上的演示,它并不会使用超过20%的CPU时间。我认为你应该牢记WebRTC还远未投入生产——API和基础协议仍在进行重大更改。你在每个浏览器中都遇到了高CPU负载,还是只有特定的浏览器? - Makkes
你也测试了另一个吗?此外,我只能在 Chrome 22 中测试,因为其他浏览器还没有实现这个功能。 - alonisser
getUserMedia现在可在Firefox Aurora/Nightly和Opera中使用-建议在这些浏览器上进行测试。(请参见www.simpl.info/gum获取适用于所有三个平台的演示。)Ericsson Bowser移动浏览器还实现了WebRTC,包括gUM。另外,只是挑剔一点,注意到'WebRTC'被用来表示gUM,而WebRTC实际上是整个浏览器实时通信项目,包括RTCPeerConnection和DataChannel。没有这三个API,只有Web,没有RTC!gUM只是获取流数据的部分。 - Sam Dutton
2个回答

7
演示看起来是通过检查视频图像的像素来进行运动检测。它似乎将其渲染到画布上,然后检索画布图像数据。
这很慢,因为这只是一件慢事 - 有很多像素,帧快速传递,并且这是一个高CPU工作。 JavaScript在处理这种数据密集型处理时通常不太有效率,这使情况更糟。因此,我认为缓慢不是WebRTC固有的问题,而是JavaScript的重负。

1

你尝试过使用Web Workers进行计算吗?

有一个使用Web Workers进行运动跟踪的演示(仅适用于Firefox)。在这个演示中,CPU使用率似乎很高,但工作线程报告的fps远高于视频的帧速率,因此可能有一些好处可以尝试将工作线程限制为30fps。


为什么使用Web Workers会更快?可能是因为非阻塞,但更快吗?Web Worker是否使用不同的线程? - alonisser
是的,它们在与 UI 线程分离的单独线程中运行。如果进一步进行,您可以启动多个工作线程,并以 MapReduce 方式分配工作以提高性能。但对于 CPU 使用情况,可能会有所不同。 - istvanp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接