2010-03-02 47 views
2

我已經開發了一個小型應用程序,可以通過VideoView小部件(我試過)從rstp流式服務器播放視頻(在這種情況下是達爾文,但這不相關) Mplayer + SurfaceView方法)。我使用Wifi連接。Android上的後臺任務流式視頻播放性能問題

視頻是唯一的任務時,視頻播放纔算順利。小應用程序應同時執行其他任務,例如不斷髮現藍牙設備並調用遠程Web服務(我正在使用Ksoap2)。當這些背景採集與視頻播放同時運行時,的性能令人難以置信地下降了(圖像和聲音有時停止,圖像變形,顯示的是相當大的方塊而不是合適的幀)。

即使是低質量的視頻(50kbps下的3gp)也會發生這種情況。對於藍牙發現我已經使用,沒有性能增強了彼此都可用的方法:

  • 使用SDK提供5路發現並登記每發現藍牙設備。
  • 對自寫的scan()方法使用本機調用,該方法利用Bluez API提供的hci_inquiry()函數。

對WS的調用請求發現設備的藍牙地址。呼叫在發現結束後發生。

我試着用GLSurfaceView代替SurfaceView,但是因爲我對Android平臺比較陌生,沒有3D圖形編程里程,所以我無法使它工作,因爲我找不到任何如何使用的例子OpenGL ES可以播放視頻,並且仍然可以讓Android API控制其他UI相關的東西(對話框/菜單/ Toasts)。另一方面,我不知道這是否確實可以改善播放。

我可以採取的任何線索或提示?

編輯:我忘了說,我在摩托羅拉Milestone

編輯2發展:繼CommonsWare和snctln建議,我試圖在沒有完全離開了SOAP WS調用,以儘量減少應用程序的內存佔用。

現在我嘗試緩存儘可能多的對象,並且只有在發現新的BT設備(WS需要發現的BT設備作爲輸入)時才執行呼叫以最小化GC呼叫。只有藍牙發現活動(根本沒有WS呼叫),視頻仍然會發揮很大作用。

編輯3:解決方案:我修改了我的應用程序,以便在掃描藍牙設備時使用UMTS(3G)數據連接而不是Wifi。儘管設備訪問公共互聯網(m.youtube.com),但其播放的流媒體視頻比3G(來自公共互聯網服務器)播放流視頻要遠遠超過本地Wifi(來自本地流媒體服務器)。本地流媒體服務器的性能不是問題,因爲流式傳輸到臺式電腦運行良好。我還將設備固件升級到2.0.1,並且在本地WiFi連接方面也有所改進,但是3G播放性能仍然勝過Wifi。

我的結論是,當使用同時的Wifi /藍牙通信時,該設備必須有一些衝突的硬件(可能是相同的芯片組)或軟件問題。

回答

1

請注意,摩托羅拉Milestone的CPU速度和PC的內存大約在12 - 15年前。

任何線索或我可以 的方式提示?

轉儲SOAP並使用輕量級Web服務協議(例如,JSON over REST)。降低執行此項工作的線程的優先級,以便它們不會與處理視頻播放的線程干擾太多。在您的藍牙掃描中儘可能多地添加「呼吸時間」,而不是連續執行代碼以嘗試發現設備。

假設不能解決問題,請使用traceview和類似工具來嘗試優化後臺線程(可能沒有運行視頻)。

+0

我已經給予主線程(我認爲是UI的一個)的最大優先級,並且創建用於執行BT掃描的最小優先級(當使用本地方式時)並且調用WS和視頻回放沒有足夠的結果性能改進。可能真正影響視頻播放的是系統調用(發現網絡套接字上的BT設備和I/O),但不確定。難道不可能使用GPU硬件加速,所以CPU開銷並不重要? – 2010-03-02 14:08:08

+0

它已經使用GPU硬件加速。但是,如果我不得不猜測,您的問題更多的是流媒體方面 - 讀取數據並對其進行解碼。 – CommonsWare 2010-03-02 14:13:01

+0

另外,不要混淆你沒有創建的線程的優先級(根據你的「主線程(我認爲是UI的最大優先級)」評論)。 – CommonsWare 2010-03-02 14:13:53

1

你可以做的一件事就是看看你的內存分配情況。大約一年前,我在遊戲中遇到顯示性能問題,每隔2秒鐘左右就會出現大量「延遲」。我發佈到android開發人員Google小組,並獲得了一些關於從Android工程師之一追蹤問題的指針。他後來放在一起this blog post細節跟蹤內存分配的過程,這是跟蹤很重要,因爲我看到的滯後直接歸因於垃圾收集。現在我將分配保持在最低限度,這種滯後發生的頻率要低得多。

另外我同意馬克(CommonsWare),如果你可以轉儲肥皂輕量級協議,你可能會看到一些改進的性能。

+0

我試圖做你建議沒有運氣。藍牙發現過程(內置Android SDK)似乎與視頻一起繁重。也許這可能是一個硬件問題(相同的BT和WIFI芯片組)? – 2010-03-03 15:27:12