如何發揮Android SDK的最佳性能

由於Android平臺的碎片化非常嚴重,主要體現在Android本身有多個不同的版本,如目前常見的Android 2.x、Android 4.x等,以及不同的廠家有自己的硬件平臺,會對原生的Android源代碼進行修改來適配硬件,所以AnyChat for Android SDK爲了儘可能多的兼容硬件設備,採取了一些中庸的策略,使得默認設置情況下,AnyChat for Android SDK的效率不是最佳。

如果您是開發一款普及型的音視頻應用,建議您還是繼續保留AnyChat的默認設置,這樣系統的兼容性會更好,能在絕大部分Android硬件上正常工作。

如果您是針對特定的硬件設備開發音視頻應用,建議您嘗試更改下面的一些設置,提升AnyChat for Android SDK的效率:

一、調整設備驅動。
    AnyChat for Android SDK中的Demo程序默認採用了“Java驅動”程序,效率比較低,但是兼容性最好。拿視頻採集來說,有“Java視頻採集驅動”和“內核視頻採集驅動”可供選擇,其中“Java視頻採集驅動”是在JNI層之上調用Android提供的Java API來操作攝像頭,採集視頻數據,視頻數據最終傳到內核,經過了JNI層的轉換,效率較低;而“內核視頻採集驅動”是在JNI層之下調用Android的內核Service直接採集,效率最高,但是有些硬件內核修改了Android原生接口,採用“內核視頻採集驅動”並不能正常的工作,若能正常的工作,則建議設置爲“內核視頻採集驅動”模式。

二、採用硬件編碼。
    如果您有當前硬件平臺的硬件編解碼SDK,則可以利用AnyChat的“集成第三方編解碼器”的接口來實現硬件編碼、解碼。若您的硬件編碼器需要YUV420SP的視頻格式輸入,可在庫能力標識(dwCapability)上加上:MEDIACODEC_CAPABILITY_YUV420SPINPUT,如下:
  1. #define MEDIACODEC_CAPABILITY_YUV420SPINPUT    ///< 視頻編碼器支持YUV420SP數據輸入

  2. // 獲取庫基本信息
  3. DWORD MediaCodec_GetLibraryInfo(DWORD* dwCapability, DWORD* dwMainVer, DWORD* dwSubVer, CHAR* lpCompileTime, DWORD dwBufLen)
  4. {
  5.         *dwCapability |= MEDIACODEC_CAPABILITY_YUV420SPINPUT;
  6.         ... ...
  7. }
複製代碼
默認情況下AnyChat內核提交給Codec的視頻格式是YUV420P,而Android攝像頭採集出來的數據通常是YUV420SP,AnyChat內核會自動進行格式轉換然後提交給Codec,如果Codec可以接受YUV420SP的數據輸入,則加上MEDIACODEC_CAPABILITY_YUV420SPINPUT標識後,則可以省略YUV420SP -->YUV420P-->YUV420SP之間的格式轉換工作,降低系統資源佔用,提升效率。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章