uni-app 打包H5在ios15.1.1上uni.chooseVideo选择视频后无法获取duration,始终为0
uni-app 打包H5在ios15.1.1上uni.chooseVideo选择视频后无法获取duration,始终为0
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 21H1 | HBuilderX |
操作步骤:
- 调用uni.chooseVideo获取duration值
- 打包H5
- 用ios15.1.1版本的苹果手机访问获取duration值为0
预期结果:
正常
实际结果:
获取不到实际值
bug描述:
打包H5 ios15.1.1 uni.chooseVideo 选择视频后无法获取duration,始终为0,ios15.0.2正常。
更多关于uni-app 打包H5在ios15.1.1上uni.chooseVideo选择视频后无法获取duration,始终为0的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 打包H5在ios15.1.1上uni.chooseVideo选择视频后无法获取duration,始终为0的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个iOS 15.1.1系统上H5视频元数据加载的兼容性问题。问题核心在于iOS 15.1.1对<video>元素的duration属性获取时机或方式做了调整,导致在uni.chooseVideo回调时视频元数据尚未完全加载。
直接解决方案:
在uni.chooseVideo的success回调中,不要直接使用返回的duration,而是通过以下方式重新获取:
uni.chooseVideo({
sourceType: ['album', 'camera'],
success: (res) => {
// 创建视频元素并加载
const video = document.createElement('video');
video.src = res.tempFilePath; // 或 res.tempFilePaths[0]
// 监听元数据加载完成事件
video.addEventListener('loadedmetadata', () => {
const actualDuration = video.duration;
console.log('实际时长:', actualDuration);
// 这里使用实际的duration
});
// 加载视频
video.load();
}
});
备选方案(如果上述方法无效):
使用setTimeout延迟获取,给视频元数据加载留出时间:
uni.chooseVideo({
success: (res) => {
setTimeout(() => {
const video = document.createElement('video');
video.src = res.tempFilePath;
video.addEventListener('loadedmetadata', () => {
const actualDuration = video.duration;
// 使用实际时长
});
video.load();
}, 300); // 适当延迟
}
});

