2

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

我尝试使用 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 为假,调用 Play 什么也不做。

4

2 回答 2

5

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

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

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

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

于 2019-06-07T06:12:22.640 回答
2

这应该可以实现您正在寻找的

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

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

于 2019-06-08T03:43:34.650 回答