4***@qq.com
4***@qq.com
  • 发布:2025-05-26 10:20
  • 更新:2025-05-26 13:59
  • 阅读:33

uni.chooseVideo 这个怎么一直加载没有?

分类:uni-app

1.使用这个方法一直获取不到临时地址,一直正在加载中,请问有大神知道这是什么问题吗?如附件图!!!!
getVideo() {
uni.chooseVideo({
sourceType: ['camera'], // 摄像头
success: (res) => {
// let data = res.tempFiles[0]
// let obj = {
// fileName: data.fileType,
// path: data.tempFilePath,
// thumbnail: data.thumbTempFilePath,
// fileSuffix: 'mp4',
// isNew: true // 标记为新增文件
// }
console.log("视频上传成功2",res);
// this.fileList.push(obj);
},
});
}

2025-05-26 10:20 负责人:无 分享
已邀请:
AI问答小助手

AI问答小助手 - AI智答引擎,优解尽在掌握!

针对 uni.chooseVideo 一直加载无响应的问题,结合代码和常见场景,以下是分步解决方案:


一、基础排查(必做)

  1. 添加完整回调函数
    getVideo() {  
     uni.chooseVideo({  
       sourceType: ['camera'], // 摄像头  
       success: (res) => {  
         console.log("成功获取视频", res);  
         // 确保 res.tempFilePath 存在  
         if (res.tempFilePath) {  
           // 你的后续逻辑  
         } else {  
           console.error("未获取到视频路径");  
         }  
       },  
       fail: (err) => { // 必须添加 fail 回调  
         console.error("调用失败", err);  
         uni.showToast({ title: `错误: ${err.errMsg}`, icon: 'none' });  
       }  
     });  
    }  
    • 关键点:通过 fail 回调捕获具体错误信息(如用户取消、权限拒绝等)

二、权限问题处理

1. 动态权限申请(Android/iOS)

// 在页面 onLoad 或按钮点击时检查权限  
async checkCameraPermission() {  
  const [err, res] = await uni.authorize({  
    scope: 'scope.camera'  
  }).catch(e => [e]);  

  if (res.authSetting['scope.camera']) {  
    this.getVideo();  
  } else {  
    uni.showModal({  
      title: '需要摄像头权限',  
      content: '请在设置中允许访问摄像头',  
      success: (modalRes) => {  
        if (modalRes.confirm) {  
          uni.openSetting(); // 跳转设置页  
        }  
      }  
    });  
  }  
}

2. 平台差异处理

  • iOS:需在 manifest.json 中配置摄像头权限描述
    "app-plus": {  
    "modules": {  
      "Camera": {  
        "description": "需要访问您的摄像头以拍摄视频"  
      }  
    }  
    }  
  • Android:确保 AndroidManifest.xml 包含:
    <uses-permission android:name="android.permission.CAMERA" />  
    <uses-permission android:name="android.permission.RECORD_AUDIO" />  

三、设备与环境验证

  1. 真机测试

    • ❌ 避免使用模拟器(摄像头功能不可用)
    • ✅ 必须使用真机(iOS/Android 设备)
  2. H5 端限制

    • 如果在浏览器中运行,需确保:
      • 使用 HTTPS 协议
      • 浏览器支持 getUserMedia API(现代浏览器均支持)
      • 用户手动允许摄像头访问

四、代码优化建议

1. 限制视频参数(避免过大文件)

uni.chooseVideo({  
  sourceType: ['camera'],  
  compressed: true, // 启用压缩  
  maxDuration: 30, // 最大时长(秒)  
  camera: 'back', // 默认后置摄像头  
  success: (res) => {  
    console.log('视频信息:', res);  
    // res 结构示例:  
    // { tempFilePath: "文件路径", duration: 10, size: 1024*1024 }  
  }  
});

2. 异步处理(使用 async/await)

async getVideo() {  
  try {  
    const res = await uni.chooseVideo({  
      sourceType: ['camera'],  
      compressed: true  
    });  
    console.log('获取成功:', res);  
  } catch (err) {  
    console.error('失败:', err);  
  }  
}

五、常见错误码解析

错误码 原因 解决方案
chooseVideo:fail auth deny 用户拒绝授权 引导用户开启权限
chooseVideo:fail no camera 设备无摄像头 提示设备不支持
chooseVideo:fail system 系统级错误(如内存不足) 重启应用或设备
chooseVideo:fail timeout 操作超时(罕见) 检查设备性能或网络

六、进阶调试

  1. 日志输出

    console.log('当前环境:', uni.getSystemInfoSync().platform);  
    console.log('权限状态:', await uni.getSetting());  
  2. 降级处理

    uni.chooseVideo({  
     sourceType: ['camera', 'album'], // 允许相册选择  
     success: (res) => {...},  
     fail: (err) => {  
       if (err.errMsg.includes('cancel')) {  
         console.log('用户取消操作');  
       } else {  
         // 降级到文件选择  
         uni.chooseFile({  
           success: (fileRes) => {...}  
         });  
       }  
     }  
    });  

七、版本兼容性

  • 确保使用最新版 HBuilderX(≥3.8.0)
  • 检查 uni-app 基础库版本(在 manifest.json 中配置)
    "app-plus": {  
    "usingComponents": true,  
    "distribute": {  
      "android": {  
        "abiFilters": ["armeabi-v7a", "arm64-v8a"]  
      }  
    }  
    }  

通过以上步骤,90% 的 uni.chooseVideo 问题可被定位解决。如果问题依旧,请提供:

  1. 完整的错误日志(含 fail 回调信息)
  2. 测试设备型号和系统版本
  3. HBuilderX 版本号
  4. 最小化复现代码片段

要回复问题请先登录注册