收藏
回答

innerAudioContext.duration获取音频长度时,返回Infinity?

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug innerAudioContext 微信iOS客户端 8.0.9 2.17.0

播放onPlay函数代码:

 // 播放
 innerAudioContext.onPlay(() => {
   console.log('监听播放onPlay',innerAudioContext.duration)
 });


监听音频进入onCanplay函数:

// 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放
innerAudioContext.onCanplay(() => {
      innerAudioContext.duration  // 必须。可以当做是初始化时长
      // 创建定时器
      let getAudioTime = setInterval(() => {
        console.log('定时器获取duration',innerAudioContext.duration)       
        if(innerAudioContext.duration!==0){   // 里面有时间了
          let audioEndTime = Math.floor(innerAudioContext.duration)
          console.log('获取音频总时长为-------》',audioEndTime)
          this.setState({
            audioEndTime
          })
          clearInterval(getAudioTime)
        }
      }, 1000);
      const audioTime =Math.floor(innerAudioContext.currentTime ) 
      console.log('监听进入播放状态onCanplay','开始时间:',audioTime)
    });


播放监听console结果:(结果为Infinity,也就是无限大,这个音频来源是通过getRecorderManager录取上传的,就6s左右)

不停播放结果:(当语音播放完之后,正确的结果才得到了

最后一次编辑于  2021-07-26
回答关注问题邀请回答
收藏

3 个回答

  • 觀·自在
    觀·自在
    2021-09-02
    需要服务器支持断点续传
    如果支持断点续传,在 InnerAudioContext.onTimeUpdate 就能获取到。
    


    2021-09-02
    有用
    回复
  • 向日葵可以吃呀
    向日葵可以吃呀
    2021-07-26

    如果没有其他解决办法,给个解决方案:在录音开始时和录音结束时记录当前时间,手动计算时长,传给服务器保存,初始化时接收服务器传来的时长参数,作为音频时长。

    2021-07-26
    有用
    回复
  • 拾忆
    拾忆
    2021-07-26

    你试试手机端,ios上这个获取时间是获取不到的,都是0。

    2021-07-26
    有用
    回复 2
    • |
      2021-07-27
      是的,手机端是0,不管是通过手机录音还是网上下的音频,都是0
      2021-07-27
      回复
    • 拾忆
      拾忆
      2021-07-27回复
      是的,这个问题好几年了,建议放弃这个方案吧。
      2021-07-27
      回复
登录 后发表内容