wang-bin / fvp

Flutter video player plugin for all desktop+mobile platforms. download prebuilt examples from github actions. https://pub.dev/packages/fvp
BSD 3-Clause "New" or "Revised" License
197 stars 31 forks source link

Occasional freeze when seeking forward #160

Open Predidit opened 1 month ago

Predidit commented 1 month ago

我在使用最新的 fvp 0.26.1 我尝试使用以下代码注册 fvp 并启用更大的播放缓存

  fvp.registerWith(options: {
    'video.decoders': ['FFmpeg'],
    'fastSeek': 'true',
    'player': {
      'avio.reconnect': '1',
      'avio.reconnect_delay_max': '7',
      'buffer': '2000+1500000',
    }
  });

当存在 'fastSeek': 'true' 时,缓存相关设置不生效,移除后缓存相关设置生效

wang-bin commented 1 month ago

有日志吗?我用./glfwplay -buffer 2000+1500000 -log all $URL然后用左右键fast seek看日志正常

wang-bin commented 1 month ago

我在master分支扩展了VideoPlayerController一些方法,比如在import fvp并registerWith的条件下可以调用controller.fastSeekTo(),也可以实时切换解码器setVideoDecoders([...]),不过所有这些方法只有在intialize()成功后才会起作用,controller构造的时候只能用默认的或registerWith设置的解码器。

Predidit commented 1 month ago

我使用了错误的注册方法,应该使用 'fastSeek': true 而不是 'fastSeek': 'true',不过我仍然想反馈一个关于跳转的问题

我使用以下的代码注册 fvp

        fvp.registerWith(options: {
          'platforms': ['windows', 'linux'],
          'player': {
            'avio.reconnect': '1',
            'avio.reconnect_delay_max': '7',
            'buffer': '2000+1500000',
            'demux.buffer.ranges': '8',
          }
        });

我尝试使用 fastSeek 是希望解决在较大缓存的情况下,向前的跳转偶尔会出现长达数秒的卡顿甚至卡死的问题。我捕获了发生卡顿时的日志,如下所示,卡顿在第14次跳转时发生,跳转的目标应该存在缓存,这本应该立即完成。

kazumi_log.txt

Predidit commented 1 month ago

当这种冻结发生时, 视频会继续播放, 但 VideoPlayerController.value.position 等属性不再更新

wang-bin commented 1 month ago

seek是在解复用的线程执行的,如果有seek请求时,当前下载的一个包还没完成卡了一会(看日志是开始下载一个新的ts切片会卡比较久),seek就会推迟。对于开启缓存的情况其实不用这么操作,我这边可以优化一下

Predidit commented 1 month ago

新发布的 0.27.0 包含这一修复吗

似乎新的 0.27.0 还没有上传到 pub.dev 上

wang-bin commented 1 month ago

没,bug在mdk

Predidit commented 1 month ago

当出现向前的seek导致的视频冻结时,调用 dispose 方法会概率冻结整个应用程序。

并且会得到 operator ()427 postCObject error 错误