const getDuration = async (): Promise<number> => { return new Promise(resolve => { // 创建备份,静音播放,获取时长 const audioBackup = Taro.createInnerAudioContext() audioBackup.src = src audioBackup.volume = 0 audioBackup.play() audioBackup.onPlay(() => { // 3秒后销毁备份,防止onTimeUpdate中获取不到时长,一直在执行 const timer = setTimeout(() => { audioBackup.stop() audioBackup.destroy() clearTimeout(timer) }, 3000) }) audioBackup.onTimeUpdate(() => { if (audioBackup.duration) { resolve(audioBackup.duration) audioBackup.stop() audioBackup.destroy() } }) }) } audio.onCanplay(async () => { if (audio.duration) { // ios 可以直接获取到时长 setDuration(audio.duration) } else { // 安卓在不播放音频的时候获取不到时长 const duration = await getDuration() setDuration(duration) } })
InnerAudioContext 安卓下获取不到duration,获取出来全是0问题如题,此问题存在至少一年以上,论坛全是问这个,都是问要代码片段就没有然后了,别问我要代码片段了,论坛里到处都是,这bug就解决不了了吗?
11-13