解决3.3.2,微信网页不能自动播放背景音乐的问题

背景

公司做网页H5,需要接入微信网页sdk,然后在wx.ready回调里自动播放背景音乐。不过升了3.3.2后不能自动播放了,2.x依然可以。

原因

3.3.2的player-web.ts默认判定audiocontext.state不是running就等待点击。(runContext函数)
因为微信ready后state依然是suspended,不过可以播放。
所以就只能改动源码进行处理。

解决步骤

  1. 找到源码文件–player-web.ts
    image
  2. 修改runContext函数,添加微信环境判定,并直接返回resolve
  3. 重新编译引擎
    image
  4. 等待编译完成开始使用yeah

我在场景中放了一个audio-source节点。然后在启动后的主代码start函数里调用微信config和ready然后播放这个audio节点,并不成功。是因为该节点还未完全加载,即_isLoaded是false。并且没有找到相关的加载完成回调钩子函数。所以顺便把audio-source.ts的源码也加了1行加载完成回调。


使用的话:
image

如果谁有更好的解决办法,希望可以留言共同学习。yeah yeah

1赞

WeixinJSBridge.invoke(“getNetworkType”, {}, function () {
bgm.play();
});
直接用这个方法请求一下应该就可以

是吗?我试试啊。如果这样就能解决,那真是太爽了!

测试了一下,不行。仍然需要点击。原理没变。源码限制。

按说应该跟源码没关系 不过我这里bgm用的直接是audio标签播放的 这个按说不会跟版本有关

如果你用引擎内的组件来播放可能会有不同 这块没测试过

是的。引擎用的web audio api,不是用的原生audio标签。这样兼容性会更好一些。

嗯嗯 我一般也只有这种必须开始播放的采用audio标签 游戏内其他音效的再用引擎的组件