uni-app this.audioContext.onCanplay中真机获取的duration是0
uni-app this.audioContext.onCanplay中真机获取的duration是0
| 项目信息 | 详情 |
|---|---|
| 产品分类 | uniapp/小程序/微信 |
| PC开发环境操作系统 | Mac |
| PC开发环境操作系统版本号 | 15.5 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.75 |
| 第三方开发者工具版本号 | 1.06.2504020 |
| 基础库版本号 | 3.9.2 |
| 项目创建方式 | HBuilderX |
操作步骤:
- 上述bug描述
预期结果:
- 上述bug描述
实际结果:
- 上述bug描述
bug描述:
在音频文件中this.audioContext.duration真机获取时长是0,模拟器可以正常获取。
更多关于uni-app this.audioContext.onCanplay中真机获取的duration是0的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
测试一下原生微信小程序是否有这个问题
更多关于uni-app this.audioContext.onCanplay中真机获取的duration是0的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在uni-app中,音频组件在真机环境下onCanplay事件触发时获取duration为0是常见问题。这是因为真机环境音频加载比模拟器更复杂,onCanplay触发时音频元数据可能尚未完全解析。
建议改用onTimeUpdate或onLoadedMetadata事件获取时长:
- 使用
onTimeUpdate事件,该事件在音频时长信息就绪后触发更可靠 - 或监听
onLoadedMetadata事件,该事件专门在元数据加载完成后触发
代码示例:
this.audioContext.onLoadedMetadata(() => {
console.log('音频时长:', this.audioContext.duration) // 此时可获取正确时长
})
若仍获取不到,可添加延迟重试机制:
setTimeout(() => {
console.log('延迟获取时长:', this.audioContext.duration)
}, 500)

