录制和播放视频

时间:2020-12-29 13:24:41

标签: ios flutter

在我当前的 flutter 项目中,我需要录制视频,修改它然后显示给用户。 问题是在 iOS (14.2) 中,视频播放器无法显示录制的视频/修改过的视频,遗憾的是 iOS 没有错误(在物理设备上测试)。

库和版本:

video_player: 1.0.1
flick_video_player: ^0.1.1
camera: ^0.5.8+17
flutter_ffmpeg: ^0.3.0

我不使用最新版本的相机的原因是它被窃听了,对于某些数量的设备,甚至无法显示预览。

代码:

  1. 相机初始化
  Future<void> _initCamera() async {
     final cameras = await availableCameras();
     final camera = cameras.firstWhereOrNull(
       (element) => element.lensDirection == CameraLensDirection.back,
      );

    _controller = CameraController(
      camera,
      resolutionTarget,
      enableAudio: false,
    );

    await _controller.initialize();
    await _controller.prepareForVideoRecording();

    //Show the preview
    setState(() {});
  }
  1. 录制视频

  Future<void> startVideoRecording() async {
    _videoPath = await generatePath(PathExtension.mp4);
    await _controller.startVideoRecording(_videoPath);
  }

  Future<String> stopVideoRecording() async{
    await _controller.stopVideoRecording();
    return _videoPath;
  }

  1. 显示录制的视频

  void _createFlickManager(File videoFile) {
    final videoController = VideoPlayerController.file(videoFile);
    _flickManager = FlickManager(
      videoPlayerController: videoController,
    );
  }
  
  Widget _buildVideoPreview(){
    return FlickVideoPlayer(
              flickManager: _flickManager,
              flickVideoWithControls:
                  FlickVideoWithControls(controls: Container()),
            );
  }

总结:

  • 相机预览显示正常,
  • 录制的视频文件有大小,不会抛出任何异常,
  • 尝试使用 FlickVideoPlayer 或仅 VideoPlayer 显示视频时出现黑屏,
  • 通过 ffmpeg 将视频转换为 mp4/mov 仍然无法正常工作。

1 个答案:

答案 0 :(得分:0)

显然在 iOS 14.2 中,包含空格的路径存在问题,因为我使用了 DateTime.now() 生成唯一的文件名,这就是问题的原因。将其更改为 DateTime.now().millisecond 解决了问题。