小程序真机播放音频失败

小程序android真机调试时播放音频失败,开发者工具是可以的

原代码

const innerAudioContext = Taro.createInnerAudioContext()
innerAudioContext.autoplay = true
innerAudioContext.loop = false
innerAudioContext.src = `https://a.com/jpmp/api/voice`
innerAudioContext.onError(e => {
  console.log(e)

})
innerAudioContext.play()

出现的错误信息

{errCode: 10001, errMsg: "errCode:62, err:load or init native decode so fail"}

诡异的是域名已经白名单,开发时也可以播放,真机调试就是没声音

开始以为是mp3音频的编码格式手机不支持,不能解码无法播放,原始格式是audio-16khz-128kbitrate-mono-mp3,陆续换了

ogg-16khz-16bit-mono-opus
webm-16khz-16bit-mono-opus
riff-8khz-8bit-mono-alaw
riff-8khz-8bit-mono-mulaw
riff-8khz-16bit-mono-pcm

竟然没一个能播放的,webm,ogg都不支持

去社区看了看, 3年了,程序猿都换了好几波,有的开发团队都解散了,官方一直没解决😭

翻到第五页,总算有个人给出了解决方法,下载到本地然后播放就可以了

…. 哎呀,这个bug真的不好说

export const DownloadFile = (addr: string): Promise<string> => {
  return new Promise(res => {
    Taro.downloadFile({
      url: addr,
      success: (r) => {
        res(r.tempFilePath)
      }
    })
  })
}

const innerAudioContext = Taro.createInnerAudioContext()
innerAudioContext.autoplay = true
innerAudioContext.loop = false
innerAudioContext.src = `https://a.com/jpmp/api/voice`
innerAudioContext.onError(e => {
  console.log(e)

})
innerAudioContext.play()