solid-software / flutter_vlc_player

📺 Flutter VLC powered video player.
515 stars 251 forks source link

startRecording(saveDirectory) is not working as expected #480

Open carlomigueldy opened 6 months ago

carlomigueldy commented 6 months ago

It returns true that it is starting the recording, but when ending the recording it does not save the file in specified saveDirectory

Also checked with File(recordPath).exists() it returns false, no file is saved after ending the recording

devprog777 commented 3 months ago

This works for me. But yom must void Function for getPermission Storage.

Future<void> _initializePlayer(String url) async {

    final directory = await getExternalStorageDirectory();
    if (directory != null) {
      final mediaDir = Directory('${directory.path}/Media');
      if (!(await mediaDir.exists())) {
        await mediaDir.create(recursive: true);
      }
      recordingPaths = '${mediaDir.path}';
    }

    // Иницилизация контроллера
    // 
    final eventController = Get.put(EventVideoController());

    // Создание экзепляра _vlc player controller Network
    // Их может быть несколько
    // Когда делал очередь, была возможность создать несколько 
    // Экзепляров контроллера со своим url но нашелся способ проигрывания очереде
    // через подмену по индексу ++ currentindex
    _vlcViewController = VlcPlayerController.network(
      url,
      hwAcc: HwAcc.auto,
      autoPlay: true,
      options: VlcPlayerOptions(
        // Задержка кэширования 
        advanced: VlcAdvancedOptions([VlcAdvancedOptions.networkCaching(5000)]),
        rtp: VlcRtpOptions([VlcRtpOptions.rtpOverRtsp(true)]),
        http: VlcHttpOptions([VlcHttpOptions.httpReconnect(true)]),
        // sout: VlcStreamOutputOptions([VlcStreamOutputOptions.sout]) 
        sout: VlcStreamOutputOptions([
          // VlcStreamOutputOptions.soutMuxCaching(1500),
        ]),
        extras: ['--sout=#file{dst=$recordingPaths}', '--no-sout-all', '--sout-keep'],
        // extras:VlcRecord([
          // VlcOption.key("sout", "#file{dst=$recordingPath}"),
        // ])
        // isBuffering: VlcIsBufferingOptions([VlcIsBufferingOptions)]),
      ),
    );

  Future<void> _stopRecording() async {
  await requestPermissions();
  if(_controller.value.playingState == PlayingState.playing){
  await _controller.stopRecording();
  }
  setState(() {
    isRecording = false;
  });
  }

  Future<void> _startRecording(recordingPaths) async {
  await requestPermissions();
  await _controller.startRecording(recordingPaths);
  setState(() {
    isRecording = true;
  });
  }