uni-app只调用录像功能不调用上传视频功能时录像功能报错触发fail
uni-app只调用录像功能不调用上传视频功能时录像功能报错触发fail
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 64 | HBuilderX |
uniapp/App | ||
Android | 9.0 | |
小米 | ||
MI CC 9 | ||
vue | vue2 |
示例代码:
uni.chooseVideo({
sourceType:['camera'],
count: 1,
success:function(res){ //返回的是对象
thisVm.filUpload(res.tempFilePath,'3')
},
fail:function(e){
console.log(e)
uni.showToast({
title:'操作失败',
icon: 'none',
duration: 2000
})
}
})
操作步骤:
uni.chooseVideo({
sourceType:['camera'],
count: 1,
success:function(res){ //返回的是对象
thisVm.filUpload(res.tempFilePath,'3')
},
fail:function(e){
console.log(e)
uni.showToast({
title:'操作失败',
icon: 'none',
duration: 2000
})
}
})
预期结果:
调用摄像功能后可以走success 正常返回图片信息
实际结果:
再调用上传视频功能后,才能调用录像功能正常返回。
bug描述:
只调用录像功能走fail 错误信息是 { “0”: “n”, “1”: “u”, “2”: “l”, “3”: “l”, “errMsg”: “chooseVideo:fail cancel”, “errCode”: 0, “code”: 0 }
1 回复
在使用 uni-app 进行录像功能开发时,如果只调用录像功能而不调用上传视频功能,但仍然触发 fail
回调,可能是由于以下原因导致的。请根据以下步骤进行排查和解决:
1. 检查权限配置
- 问题原因:录像功能需要相机和麦克风权限,如果权限未正确配置,会导致录像失败。
- 解决方法:
- 在
manifest.json
中确保已正确配置权限:"permission": { "scope.camera": { "desc": "需要访问相机以进行录像" }, "scope.record": { "desc": "需要访问麦克风以进行录音" } }
- 在代码中动态请求权限:
uni.authorize({ scope: 'scope.camera', success() { console.log('相机权限已授权'); }, fail() { console.log('相机权限未授权'); } });
- 在
2. 检查 API 调用方式
- 问题原因:
uni.chooseVideo
或uni.createCameraContext
的调用方式不正确,可能导致录像失败。 - 解决方法:
- 确保调用录像 API 时参数正确:
uni.chooseVideo({ sourceType: ['camera'], // 仅使用相机 maxDuration: 60, // 最大录制时长 success(res) { console.log('录像成功', res.tempFilePath); }, fail(err) { console.log('录像失败', err); } });
- 如果使用
uni.createCameraContext
,确保正确调用startRecord
和stopRecord
:const cameraContext = uni.createCameraContext(); cameraContext.startRecord({ success() { console.log('开始录像'); }, fail(err) { console.log('开始录像失败', err); } }); setTimeout(() => { cameraContext.stopRecord({ success(res) { console.log('停止录像', res.tempFilePath); }, fail(err) { console.log('停止录像失败', err); } }); }, 5000); // 5秒后停止录像
- 确保调用录像 API 时参数正确:
3. 检查设备兼容性
- 问题原因:某些设备可能不支持录像功能,或者设备相机硬件存在问题。
- 解决方法:
- 在真机上测试,确保设备支持录像功能。
- 检查设备相机是否正常工作。
4. 检查错误信息
- 问题原因:
fail
回调中返回的错误信息可能包含具体原因。 - 解决方法:
- 打印
fail
回调的错误信息,根据错误信息进行排查:uni.chooseVideo({ sourceType: ['camera'], success(res) { console.log('录像成功', res.tempFilePath); }, fail(err) { console.log('录像失败', err); } });
- 打印
5. 检查临时文件路径
- 问题原因:录像成功后,临时文件路径可能无法访问或无效。
- 解决方法:
- 确保临时文件路径有效,并可以在后续操作中使用:
uni.chooseVideo({ sourceType: ['camera'], success(res) { console.log('录像成功', res.tempFilePath); // 检查文件是否存在 uni.getFileInfo({ filePath: res.tempFilePath, success(fileInfo) { console.log('文件信息', fileInfo); }, fail(err) { console.log('获取文件信息失败', err); } }); }, fail(err) { console.log('录像失败', err); } });
- 确保临时文件路径有效,并可以在后续操作中使用:
6. 检查 uni-app 版本
- 问题原因:旧版本的 uni-app 可能存在录像功能的 Bug。
- 解决方法:
- 更新 uni-app 到最新版本,确保使用最新的 API 和功能。
7. 真机调试
- 问题原因:在模拟器上可能无法正常使用录像功能。
- 解决方法:
- 在真机上进行调试,确保功能正常。
示例代码
以下是一个完整的录像功能示例:
uni.chooseVideo({
sourceType: ['camera'], // 仅使用相机
maxDuration: 60, // 最大录制时长
success(res) {
console.log('录像成功', res.tempFilePath);
// 检查文件是否存在
uni.getFileInfo({
filePath: res.tempFilePath,
success(fileInfo) {
console.log('文件信息', fileInfo);
},
fail(err) {
console.log('获取文件信息失败', err);
}
});
},
fail(err) {
console.log('录像失败', err);
}
});