Как добиться циклического воспроизведения с помощью Libvlcsharp - PullRequest
1 голос
/ 07 июня 2019

У меня libvlcsharp, работающий как для моего проекта windows, так и для android.Это очень приятно и легко в использовании!Но я не могу найти способ сделать воспроизведение автоматически цикличным

Я пытался использовать обработчики событий медиаплеера для перезапуска воспроизведения и передачи параметров в медиа после создания, но, похоже, ничего не работает.

Я пытался:

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 ]

1 голос
/ 07 июня 2019

Это известная ошибка (по крайней мере, у нас), которая возникает, когда вы вызываете 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

0 голосов
/ 08 июня 2019

Это должно достичь того, что вы ищете

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

API списков воспроизведения будет легче использовать в LibVLC 4.

...