如何使用Libvlcsharp实现循环播放

时间:2019-06-07 03:53:33

标签: c# libvlc libvlcsharp

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

我尝试使用mediaplayer事件处理程序在创建后重新开始播放并将选项传递到媒体中,但是似乎无济于事。

我尝试过:

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为false,调用Play则不执行任何操作。

2 个答案:

答案 0 :(得分:1)

这是一个众所周知的错误(至少由我们来说),当您从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

答案 1 :(得分:0)

这应该可以满足您的需求

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

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