如何用libvlcsharp实现循环播放

How to achieve looping playback with Libvlcsharp

我的 windows 和 android 项目都有 libvlcsharp。它非常好用且易于使用!但是我找不到任何方法让播放自动循环播放

我试过使用媒体播放器事件处理程序重新开始播放并在创建后将选项传递到媒体中,但似乎没有任何效果。

我试过了:

loopSong = new Media(VLCMediaPlayer.LibVLC, xmlLoader.GetResourceStream(loopFileName));
loopSong.AddOption(":no-video");
loopSong.AddOption(":input-repeat");

static VLCMediaPlayer()
{
    Core.Initialize();
    LibVLC = new LibVLC();
    MediaPlayer = new MediaPlayer(LibVLC);
    MediaPlayer.EndReached += MediaPlayer_EndReached;
}

private static void MediaPlayer_EndReached(object sender, EventArgs e)
{
    MediaPlayer.Stop();
    MediaPlayer.Play();
}

播放直接停止。事件已调用,但 MediaPlayer.WillPlay 为假,调用 Play 不执行任何操作。

这是一个众所周知的错误(至少我们知道),当您从 libvlc 回调调用 libvlc 时会发生这种错误。 由于 Libvlc 从播放视频的线程调用事件,因此当您调用 Stop() 时,您正在同步等待该线程完成,从而导致死锁。

这是我为 Vlc.DotNet 提出的解决方法: https://github.com/ZeBobo5/Vlc.DotNet/wiki/Vlc.DotNet-freezes-(don't-call-Vlc.DotNet-from-a-Vlc.DotNet-callback)

public void MediaEndReached(object sender, EventArgs args)
{
   ThreadPool.QueueUserWorkItem(() => this.MediaPlayer.Stop());
}

这可能会在 LibVLCSharp 的未来版本中解决,请参阅 https://code.videolan.org/videolan/LibVLCSharp/issues/122

这应该能达到您的要求

new LibVLC("--input-repeat=2")

播放列表 API 在 LibVLC 4 中将更易于使用。