0

例如,当用户开始观看直播时,我将初始化播放器,并从直播中的最新位置开始播放。如果用户随后暂停视频,他们将落后最新的流位置 x 秒。我想添加功能以允许他们直接寻找最新的实时位置。

我目前的方法是简单地重新初始化流......

_videoPlayerController1 = VideoPlayerController.network('theUrl/index.m3u8');
_chewieController = ChewieController(
  videoPlayerController: _videoPlayerController1,
      autoPlay: true,
      isLive: true,
      autoInitialize: true,
    );

然而,由于这两个库非常强调在完成它们后调用 dispose() 的必要性,我担心这里会造成内存泄漏。这种方法好吗?

在调用上述代码之前,我确实尝试对它们都调用 dispose() ...

_videoPlayerController1.dispose();
_chewieController.dispose();

虽然这导致了以下错误'A VideoPlayerController 在被处理后被使用。一旦你在 VideoPlayerController 上调用了 dispose(),它就不能再使用了。

我的方法是否会导致内存泄漏,是否有更好的方法来寻找最新的直播位置?

4

1 回答 1

0

我想到了。跳转到直播中最新位置的最简单方法是调用:

_chewieController.seekTo(Duration(days: 30));

在后台,Chewie 正在其 videoController 上调用 seekTo 方法,该方法记录如下:

/// 如果 [moment] 超出视频的完整范围,它将自动 /// 并静默钳制。

因此,如果您不知道流的最新位置,那么您可以传入一个比您期望的流的最新位置(本例中为 30 天)大得多的 Duration 值,并且 VideoController 将设置它的位置到其最新的已知位置。

于 2020-06-25T22:59:58.580 回答