评论

InnerAudioContext.seek 跳转失效或跳转后 .onTimeUpdate 失效不刷新的问题解决方法

在进行音频跳转 InnerAudioContext.seek 后 InnerAudioContext.onTimeUpdate 失效不刷新的问题解决方法

首先说,seek() 跳转成功,但是 .onTimeUpdate 不刷新的问题:

const _InnerAudioContext = wx.createInnerAudioContext()
_InnerAudioContext.autoplay = true
Page({
  data: {
  },
  onLoadfunction (options{
    _InnerAudioContext.src = 'http://sp.9sky.com/convert/song/music/1030028/20210721151849987.mp3'
    _InnerAudioContext.onTimeUpdate(() => {
      console.log(_InnerAudioContext.currentTime);


    })
  },
  forwardfunction () {
    _InnerAudioContext.pause()  // 先暂停
    _InnerAudioContext.seek(31) // 再跳转
    setTimeout(() => {
      _InnerAudioContext.play()
    }, 500);   // 给一个延迟,再播放
  }
})


.seek()跳转失败,音频从头播放的问题:

在具体使用过程中,发现还有一个问题,如果使用的音频所在的服务器不支持断点续传,那么 seek() 会从头开始播放。解决方法:

第一种解决方法:配置服务器,支持断点续传;

第二种解决方法:使用小程序云开发的存储,不会存在跳转失败的问题。

第三种解决方法:下载到本地后获取到临时链接,然后播放。

wx.downloadFile({
            url: 'https://www.xxx.com/test/audio.mp3',
            success(res) {
                if (res.statusCode === 200) {
                    _InnerAudioContext.src = res.tempFilePath
                }
            }
        })
最后一次编辑于  07-26  
点赞 0
收藏
评论

3 个评论

  • Yeung
    Yeung
    2天前
    你好。 我在文件下载后设置src , 并通过你上述的方法进行 pause 和 seek .这并无问题。 
    在切换下一首歌时 也是进行同样的下载和流程。
    但在返回上一首歌时。用上一首下载好的 tempFilePath 设置给src。 这时候onTimeUpdate 便不会在触发了。 
    这个问题困扰我挺久
    
    
    2天前
    赞同
    回复
  • 葫芦客
    葫芦客
    11-08

    感谢,问题解决了^_^

    11-08
    赞同
    回复
  • Weicup
    Weicup
    10-15

    音频还是会重头播放。。用的是云开发的存储

    10-15
    赞同
    回复 1
    • 觀·自在
      觀·自在
      10-22
      下载到本地,然后播放试试呢?
      10-22
      回复
登录 后发表内容