使用 LibVLC MediaPlayer.Event.EndReached 在播放结束时重置 MediaPlayer

Utilising LibVLC MediaPlayer.Event.EndReached to reset MediaPlayer when playback finishes

我正在编写一个 Android 应用程序 activity,其中包含一个 LibVLC MediaPlayer 实现。 MediaPlayer 在大多数情况下工作正常,但是在视频结束时,MediaPlayer 将变得无响应。 根据我的研究,这看起来可能是因为媒体在 MediaPlayer.Event.EndReached 触发 (vajehu) 时变得不稳定。

我一直在关注 MediaPlayer.getPlaybackState() 并且可以看到 MediaPlayer 对象处于 "Ended" 状态回放如期结束。

我可以继续释放我的 MediaPlayer 并在 MediaPlayer.Event.EndReached 被触发时重新创建它,但我不确定这是否是一个好的做法。我希望 MediaPlayer 回到视频的开头并等待用户输入以再次开始播放。

(以防万一 - 我正在使用 MrMaffen's vlc-android-sdk)。

从那以后,我发现了一个整洁(更重要的是高效!)的解决方案;

MediaPlayer.Event.EndReached开火后我:

  • 调用MediaPlayer.setMedia(media)重新加载Media对象
  • 重置一些与我的 MediaPlayer
  • 有关的 UI 元素
  • 最后,我使用 MediaPlayer.setTime(0)
  • MediaPlayer 位置设置为 Media 对象的开头

旁注: 因为 LibVLC 的 MediaPlayer.setTime(Long position) 方法没有效果,除非 MediaPlayer.isPlaying(),我需要编写一个小的包装方法来异步:

  • MediaPlayer.play() 等待 MediaPlayer.isPlaying()
  • 然后MediaPlayer.setTime(0)
  • 终于MediaPlayer.pause()

一个比我预期的简单得多的解决方案,尽管我希望这能帮助那些在处理相同类型的项目时可能会摸不着头脑的人。