uni-app只调用录像功能不调用上传视频功能时录像功能报错触发fail

发布于 1周前 作者 eggper 来自 Uni-App

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.chooseVideouni.createCameraContext 的调用方式不正确,可能导致录像失败。
  • 解决方法
    • 确保调用录像 API 时参数正确:
      uni.chooseVideo({
        sourceType: ['camera'], // 仅使用相机
        maxDuration: 60, // 最大录制时长
        success(res) {
          console.log('录像成功', res.tempFilePath);
        },
        fail(err) {
          console.log('录像失败', err);
        }
      });
    • 如果使用 uni.createCameraContext,确保正确调用 startRecordstopRecord
      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秒后停止录像

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);
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!