2012-11-03 359 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