由于业务需求需要通过 BackgroundAudioManager.onTimeUpdate 监听播放实现进度条更新功能,音频协议使用 http 时是可以正常监听的,但是使用 hls 协议并且使用 m3u8 音频时,背景音频第一次被加载播放时不会触发 onTimeUpdate 函数的回调,必须要在悬浮窗暂停一次之后然后重新再播放才会回调,所以我目前的解决方法是判断音频是否是第一次加载,如果是的话则需要在播放时候暂停一次,然后在 100ms 再重新播放
const BackgroundAudioManager = wx.getBackgroundAudioManager()
let isInit = false
BackgroundAudioManager.title = 'm3u8'
BackgroundAudioManager.protocol = 'hls'
BackgroundAudioManager.coverImgUrl = ''
BackgroundAudioManager.src = 'https://voice-beta.djcars.cn/9/6305cb00-f698-43ab-954c-15b14abc7e54.m3u8'
BackgroundAudioManager.onTimeUpdate(() => {
console.log(BackgroundAudioManager.currentTime, BackgroundAudioManager.duration);
})
/**
* 由于 src 赋值后自动播放,监听音频播放并且判断是否第一次加载,如果是先暂停然后 100ms 之后重新播放,这样就能触发
* onTimeUpdate 的回调,如果把 onPlay 注释掉则需要在悬浮窗手动暂停然后再次点击播放才可触发监听回调
*/
BackgroundAudioManager.onPlay(() => {
if (!isInit) {
BackgroundAudioManager.pause()
setTimeout(() => {
isInit = true
BackgroundAudioManager.play()
}, 100)
}
})