小程序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()