0

我正在尝试在颤动的 video_player 中播放 HLS 视频。我正在生成这样的 m3u8 文件:

#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1609034710
#EXT-X-PLAYLIST-TYPE:EVENT
#EXTINF:10.0,
video_part1.ts
#EXTINF:10.0,
video_part2.ts
#EXTINF:10.0,
video_part3.ts
#EXTINF:10.0,
video_part4.ts
#EXTINF:10.0,
video_part5.ts

... // etc.

我不会更改或删除旧零件,只会在可用时添加新零件。

视频播放正常,但是当我检查controller.value.duration它时,它总是显示 50 秒 - 任何更新之前第一个播放列表的持续时间,它不允许我seekTo超出那个位置。

我可以从播放列表中计算实际持续时间,但问题是:如何将持续时间放入播放器并寻找其中的任何位置?

4

1 回答 1

0

经过一番研究:

  • 所有在下面使用 video_player 的播放器都具有相同的行为,并且不能正确更新播放持续时间(Chewie、YoYo Player、Better player 等)
  • 为了改变这种行为,您可能需要派生默认的 video_player 实现并在其中添加(或更改)一些代码。其中有一些事件会更新 的不同参数controller.value,因此您可能只需要在某处更新持续时间。我决定稍后再试一次,但不是现在。
  • 扩展默认 VideoPlayerController 没有帮助,因为它包含许多无法在继承代码中访问的私有变量。
  • 有一个更新的 2.0.0 版本的 video_player 可能解决了这个问题(至少它在controller.value.isBufferingalways时解决了错误false),但目前它处于 beta 阶段,需要 beta flutter 和具有 null 安全功能的 dart sdk。以后所有代码都迁移到null安全的时候不会有问题,但是现在需要更新我项目中的很多代码,并且不保证之后问题会解决,所以我没有用那个。

最终使用flutter_playout完成此任务。它不是基于默认的 video_player 并且没有这个错误(但可能有其他错误,需要更多使用它),并且它可以工作!

于 2021-01-07T10:46:36.413 回答