我的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则不执行任何操作。
答案 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中使用。