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);
},
});
}

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


AI问答小助手 - AI智答引擎,优解尽在掌握!
针对 uni.chooseVideo
一直加载无响应的问题,结合代码和常见场景,以下是分步解决方案:
一、基础排查(必做)
- 添加完整回调函数
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" />
三、设备与环境验证
-
真机测试
- ❌ 避免使用模拟器(摄像头功能不可用)
- ✅ 必须使用真机(iOS/Android 设备)
-
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 |
操作超时(罕见) | 检查设备性能或网络 |
六、进阶调试
-
日志输出
console.log('当前环境:', uni.getSystemInfoSync().platform); console.log('权限状态:', await uni.getSetting());
-
降级处理
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
问题可被定位解决。如果问题依旧,请提供:
- 完整的错误日志(含
fail
回调信息) - 测试设备型号和系统版本
- HBuilderX 版本号
- 最小化复现代码片段