Project1

标题: 【MZ】安卓系统适配插件 [打印本页]

作者: rfvtgbzxc    时间: 6 天前
标题: 【MZ】安卓系统适配插件
本帖最后由 rfvtgbzxc 于 2024-9-22 02:03 编辑

单独开一个帖子以便更新。

启用该插件后,可以解决一些游戏移植到安卓机上的问题。

修复列表:
1.地图界面/菜单界面出现黑线
2.偶现loadError(手机性能越低出现概率越高)
3.切换场景时闪退
4.一定程度提高动画播放性能(1.6.0以下版本,1.6.0及以上自带此优化)


关于音频加载BUG,这个BUG看到很多反馈了,也调试了很久,以目前的修复效果,能将音频相关报错限制在较低的水平(大约7、8小时一次),后续有待继续优化。

贴下排查记录:

表现:
1.音频加载有概率出现loadError,点击retry有概率重新播放,但乱序;或者闪退。
2.(安卓端)播放音频时有概率立刻闪退。
3.部分ogg不能正确循环,(1)播放结束后很久以后才开始循环 (2)开始循环的位置和音乐播放的状态不连贯

原因:
1.部分ogg,以及加密ogg不支持边下边播,加载时间超过一秒的音乐会出现解码失败bug。
  复现方式:在浏览器测试中,将网络设为弱网环境(3G网速),进入任意播放音乐的场景等待1秒。
  
  会弹出加载失败的报错。

2.Android手机端底层webview在音乐数据解析模块有bug,解析过程中可能出错,可能报错也可能闪退。
  复现方式:选择一个下载好的arraybuffer,多次调用

  WebAudio._context.decodeAudioData(arrayBuffer.slice())

  一般一个arraybuffer调用第三次以上就会报错,连续调用六七次几乎一定会闪退。

(这个是真难试啊,关键只调用一次的话报错概率不高,代码一遍遍地跑分析情况,最后终于能稳定复现了)

3.部分ogg采样率不为44.1khz(22.05khz),但是循环标记的值总是以44.1khz为基准。
  rm误将循环标记的值与ogg真实采样率相关联,导致低采样率文件的循环开始位置比预设值更靠后,循环时间长度比预设值更长。
  复现方式:选择任意采样率22.05khz的音乐播放即可。
     如果使用原生解码器,播放结束会进入对不上节拍的一个开始位置。
    如果使用vorbisdecoder解码器,还会发现播放结束以后很久才开始重新播放,开始位置的节拍也同样对不上。
  注1:“循环标记的值总是以44.1khz为基准”是一个推测,其依据如下:
  ogg循环的教程很少,这是一篇文章:
  https://wohlsoft.ru/pgewiki/How_To:_Looping_music_files
  其中提到测算循环时间点的软件为Audacity,该软件的测算单位为“采样”时,不论文件采样率如何,其与时间的换算关系总是44.1khz。
  除此之外,没有查到其他关于循环的规范,因此推测这个固定的44.1khz的循环时间单位是ogg相关软件约定俗成的。

  另一个参考:在线的ogg循环测试程序
  https://oggloop.vercel.app/
  其源码中,也将以采样为单位的循环时间直接除以44.1k,并获得了符合预期的表现。

  注2:循环标记存在于ogg音乐文件的头部,用文本格式打开ogg,会看到LOOPSTART=1136057这样的字样,这就是循环标记。
  其中,LOOPSTART是循环开始标记,重复播放时会跳转到该位置开始播放
  LOOPLENGTH是循环节的长度,当音乐播放到LOOPSTART+LOOPLENGTH的位置时,就会跳转到LOOPSTART的位置进行循环播放。

解决方式:
1.禁止ogg边下边播
2.解码器不走webview原生,而是走mz提供的vorbisdecoder
3.音乐下载api提供撤销能力,及时清除下载任务,避免内存溢出。
4.锁定循环标记的参考采样率为44.1khz

AndroidFix_v0.9.0.zip (2.4 KB, 下载次数: 15, 售价: 5 星屑)




作者: 入坑小萌新    时间: 6 天前
顶一个
作者: 505681468    时间: 6 天前



作者: 3339357969    时间: 6 天前
不错的干货,mz插件就是不多
作者: wupeng    时间: 4 天前
这可真是技术硬核




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1