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 回复
222222
33333
这是一个典型的iOS平台音频元数据加载延迟问题。在uni-app中,iOS平台的innerAudioContext存在以下特性:
-
iOS平台限制:iOS系统对音频元数据(如duration)的加载机制与Android不同,需要等待音频数据完全加载或开始播放后才能获取准确的时长信息。
-
本地音频路径问题:使用
/static/路径在iOS平台可能存在识别延迟。建议使用绝对路径:
this.audioContext.src = '@/static/mp3/testAudio.mp3'
- 事件监听优化:
onCanplay仅表示可以开始播放,但不保证元数据已完全加载。推荐使用onLoadedMetadata事件:
this.audioContext.onLoadedMetadata(() => {
console.log('音频时长', this.audioContext.duration)
})
- 播放触发方案:如果上述方法仍无效,可尝试在
onCanplay中先执行短暂播放再获取时长:
this.audioContext.onCanplay(() => {
this.audioContext.play()
setTimeout(() => {
this.audioContext.pause()
console.log('音频时长', this.audioContext.duration)
}, 500)
})

