如何在 flutter 中使用 Camera Plugin 录制视频?

How to record a video with Camera Plugin in flutter?

我有这个页面,其中相机已初始化并准备就绪,带有一个按钮可以录制和停止视频,所以我尝试了这个:

FlatButton(
     onPressed: () => {
            !isRecording
                ? {
                   setState(() {
                   isRecording = true;
                  }),
                  cameraController.prepareForVideoRecording(),
                  cameraController.startVideoRecording('assets/Videos/test.mp4')
                }
               : cameraController.stopVideoRecording(),
              },
              ............

但抛出此错误:nhandled Exception: CameraException(videoRecordingFailed, assets/Videos/test.mp4: open failed: ENOENT (No such file or directory))。 我不明白,我不想打开这个文件我想把它保存在那里,我的代码有什么问题吗?

您正试图将视频保存在资产文件夹中,但这是不可能的,

您需要做的是将下载或应用程序目录等常用文件夹本地保存到设备。

这是一个如何着手的例子

dependencies:
  path_provider:

Flutter plugin for getting commonly used locations on host platform file systems, such as the temp and app data directories.

我们会将视频保存到应用程序目录。

我们需要获取文件所在目录的路径。通常一个文件放在应用程序的文档目录、应用程序的缓存目录或外部存储目录中。为了方便获取路径,减少打字的几率,我们可以使用PathProvider

 Future<String> _startVideoRecording() async {
    
      if (!controller.value.isInitialized) {      
    
        return null;
    
      }  
    
      // Do nothing if a recording is on progress
    
      if (controller.value.isRecordingVideo) {
    
        return null;
    
      }
  //get storage path
    
      final Directory appDirectory = await getApplicationDocumentsDirectory();
    
      final String videoDirectory = '${appDirectory.path}/Videos';
    
      await Directory(videoDirectory).create(recursive: true);
    
      final String currentTime = DateTime.now().millisecondsSinceEpoch.toString();
    
      final String filePath = '$videoDirectory/${currentTime}.mp4';
    
  
    
      try {
    
        await controller.startVideoRecording(filePath);
    
        videoPath = filePath;
    
      } on CameraException catch (e) {
    
        _showCameraException(e);
    
        return null;
    
      }
    
  
    //gives you path of where the video was stored
      return filePath;
    
    }

在新版本中,静态方法startRecordingVideo 不接受任何字符串参数。 当你想开始录制时,看看是否已经录制了视频,如果没有开始

  if (!_controller.value.isRecordingVideo) {
        _controller.startVideoRecording(); 
  }

当你想完成录制时,你可以调用静态方法 stopVideoRecording() 它会给你一个 class XFile 的对象,它会有你的视频的路径。

  if (_controller.value.isRecordingVideo) {
      XFile videoFile = await _controller.stopVideoRecording();
      print(videoFile.path);//and there is more in this XFile object
  }

这东西对我有用。我是 flutter 的新手,如果你知道更多,请改进我的答案。