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 端的杀进程。
后面再播放网络视频时就没有出现停留在加载中的问题了。

留个笔记,给碰到相同的问题朋友参考下。

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