uni-app 打包H5在ios15.1.1上uni.chooseVideo选择视频后无法获取duration,始终为0

uni-app 打包H5在ios15.1.1上uni.chooseVideo选择视频后无法获取duration,始终为0

开发环境 版本号 项目创建方式
Windows 21H1 HBuilderX

操作步骤:

  1. 调用uni.chooseVideo获取duration值
  2. 打包H5
  3. 用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.chooseVideosuccess回调中,不要直接使用返回的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); // 适当延迟
  }
});
回到顶部