Unity 打包 VRAndroid 應用時一直停留在加載中

版權聲明:本文章原創於 RamboPan ,未經允許,請勿轉載。

最近在使用 Unity 打包的 VR Android 應用時碰到了一點問題:

這個應用可以以平面模式(2d),或者全景模式來播放視頻。

之前我們測試的時候基本播放的都是本地視頻,都是能正常播放。最近測試了下播放網絡視頻(局域網內),發現會出現一個情況:同一個視頻有時能正常放,有時會一直停留在加載動畫界面(如下圖),按理說同一個局域網訪問是很快的,不太像是因爲網絡的問題。

在這裏插入圖片描述

之前我們測試網絡的時候沒有發現這個問題,經過我不懈努力(胡亂踩坑)才注意到一個事情:我們原來打包的應用,使用的 Unity2017.3 左右版本,播放網絡視頻時沒有問題。但是那個版本打包出現會出現 jni 的一些錯誤,疑似是和播放器或者 Unity 本身有關。


	29438-29461/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdd000000 in tid 29461 (UnityMain)
	741-741/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
	741-741/? A/DEBUG: Build fingerprint: 'Pico/A7210/PICOA7210:6.0.1/MXB48T/eng.scmbuild.20240125.143125:user/test-keys'
	741-741/? A/DEBUG: Revision: '0'
	741-741/? A/DEBUG: ABI: 'arm'
	741-741/? A/DEBUG: pid: 29438, tid: 29461, name: UnityMain  >>> cn.com.ihappy.music <<<
	741-741/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xdd000000
	741-741/? A/DEBUG:     r0 be4e7300  r1 dcfffff0  r2 00000cc0  r3 00000000
	741-741/? A/DEBUG:     r4 dcfffcd0  r5 be4e8000  r6 00000001  r7 00001000
	741-741/? A/DEBUG:     r8 00000001  r9 00001000  sl 00001000  fp dcfffcd0
	741-741/? A/DEBUG:     ip eadb0ebc  sp ef3475d0  lr eaac4a4b  pc f70d26a8  cpsr 200e0010
	741-741/? A/DEBUG: backtrace:
	741-741/? A/DEBUG:     #00 pc 000176a8  /system/lib/libc.so (__memcpy_base+92)
	741-741/? A/DEBUG:     #01 pc 00163a47  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN9BltDevice17ExecFastCopyBlockEPvPKvjjjjPK7BltRectS5_i+102)
	741-741/? A/DEBUG:     #02 pc 00163daf  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN9BltDevice14ExecFastSwCopyEP13BltExecSwCopy+846)
	741-741/? A/DEBUG:     #03 pc 00169a95  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN9BltDevice18ExecSwCopyInternalEP13BltExecSwCopy+7028)
	741-741/? A/DEBUG:     #04 pc 00169bad  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN9BltDevice10ExecSwCopyEP13BltExecSwCopy+172)
	741-741/? A/DEBUG:     #05 pc 0013df9d  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN9EsxBltLib16CopyHostPtrBltSwEPK17EsxBltCopyHostPtr+1212)
	741-741/? A/DEBUG:     #06 pc 001116c3  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN11EsxResource23UpdateSubResourceDirectEP10EsxContextjPK6EsxBoxPK20EsxSurfaceAccessDesci+642)
	741-741/? A/DEBUG:     #07 pc 000d3f73  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN10EsxContext17UpdateSubResourceEP11EsxResourcejPK6EsxBoxPK20EsxSurfaceAccessDesc+786)
	741-741/? A/DEBUG:     #08 pc 0012440f  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN15EsxBufferObject6UpdateEP10EsxContextyjPKv+110)
	741-741/? A/DEBUG:     #09 pc 000bb267  /system/vendor/lib/egl/libGLESv2_adreno.so (_ZN10EsxContext12GlBufferDataEjlPKvj+102)
	741-741/? A/DEBUG:     #10 pc 000a3341  /system/vendor/lib/egl/libGLESv2_adreno.so (glBufferData+32)
	741-741/? A/DEBUG:     #11 pc 00564100  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #12 pc 0053c704  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #13 pc 0053c614  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #14 pc 0054bb5c  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #15 pc 0054d0b4  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #16 pc 002aaaac  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #17 pc 002a9c44  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #18 pc 0047533c  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #19 pc 002382f8  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #20 pc 00221814  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #21 pc 005bdb08  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #22 pc 005bfc48  /data/app/cn.com.ihappy.music-1/lib/arm/libunity.so
	741-741/? A/DEBUG:     #23 pc 0018f589  /data/app/cn.com.ihappy.music-1/oat/arm/base.odex (offset 0x14c000)

當時谷歌出的結果也是說這是 Unity 的問題,採用高版本打包即可解決。當時我們就使用了 2018.3 的版本,順利解決了播放視頻時報錯的問題(必須要吐槽下 Unity 發版太頻繁了,但是各版本兼容性又差)。但是並沒有想起測試播放網絡視頻 ……

一驗證,發現低版本(2017.3)打包出來應用的播放網絡視頻時確實沒有出現停留在加載中的情況。這下就尷尬了 …… 低版本的打包可能要崩潰,高版本的打包可能要卡住。

經過兩天的折騰,嘗試了一些思路:

  • 打日誌查詢調用流程,卡在哪了。(調用邏輯沒問題,至於 Start 爲什麼沒有調用摸不到頭緒,應該是 Unity 的框架層邏輯了,播放器的邏輯看了下異常的時候也沒調用,也找不到原因)。

  • 既然搞不定代碼,那就換個高版本的控件試試。播放使用的是 EasyMovieTexutre ,當前版本是 3.5.9 ,在網上下了 3.6.63.7.1 的版本,更新之後發現並沒有不一樣的地方。

  • 再次換個高版本的 Unity 試試,2019.2 ,結果公司顯卡太差,工程都加載不出來,老闆的意思也不太想換 ……

折騰了很久沒有結果,頭疼,然後就摸魚了 …… 突然想起之前另一個類似的應用,也碰到過這種卡住的問題,但是因爲是播放本地視頻,第一直覺就是應用沒有退乾淨。

查看 Unity 部分的代碼,看到了如下方法。

	Application.Quit();

雖然不知道它退的效果怎麼樣,但是直覺是肯定沒有 Android 殺進程快。(事實上我試了 Activity.finish() 感覺也還是不夠乾淨)

	 android.os.Process.killProcess(android.os.Process.myPid());

然後將退出代碼換成了 Unity 調用 Android 端的殺進程。
後面再播放網絡視頻時就沒有出現停留在加載中的問題了。

留個筆記,給碰到相同的問題朋友參考下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章