ios获取音频长度一直为0的uni-app问题

ios获取音频长度一直为0的uni-app问题

开发环境 版本号 项目创建方式
Mac m2 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:m2

HBuilderX类型:Alpha

HBuilderX版本号:4.74

手机系统:iOS

手机系统版本号:iOS 16

手机厂商:苹果

手机机型:苹果14pm

页面类型:vue

vue版本:vue2

打包方式:云端

### 示例代码:

```javascript
onload(){
    this.audioContext=uni.createInnerAudioContext()
}
l(){
    this.audioContext.src='/static/mp3/testAudio.mp3'  
    // audioContext.play()  
    this.audioContext.onCanplay(()=>{
        setTimeout(()=>{
            console.log('音频时长',this.audioContext.duration)  
        },1000)  
    })  
},

操作步骤:

按照代码操作

预期结果:

可以获取到

实际结果:

获取不到


bug描述:

音频链接是本地音频,在onCanplay里获取音频长度为0,但是能播放,同样的音频地址在安卓上就可以,链接换层网络地址在onCanplay里需要加延迟才能获取到长度,不是立即获取到


更多关于ios获取音频长度一直为0的uni-app问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

1111111

更多关于ios获取音频长度一直为0的uni-app问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的iOS平台音频元数据加载延迟问题。在uni-app中,iOS平台的innerAudioContext存在以下特性:

  1. iOS平台限制:iOS系统对音频元数据(如duration)的加载机制与Android不同,需要等待音频数据完全加载或开始播放后才能获取准确的时长信息。

  2. 本地音频路径问题:使用/static/路径在iOS平台可能存在识别延迟。建议使用绝对路径:

this.audioContext.src = '@/static/mp3/testAudio.mp3'
  1. 事件监听优化onCanplay仅表示可以开始播放,但不保证元数据已完全加载。推荐使用onLoadedMetadata事件:
this.audioContext.onLoadedMetadata(() => {
    console.log('音频时长', this.audioContext.duration)
})
  1. 播放触发方案:如果上述方法仍无效,可尝试在onCanplay中先执行短暂播放再获取时长:
this.audioContext.onCanplay(() => {
    this.audioContext.play()
    setTimeout(() => {
        this.audioContext.pause()
        console.log('音频时长', this.audioContext.duration)
    }, 500)
})
回到顶部