Код: Выделить всё
private LibVLC libVlc;
private MediaPlayer mediaPlayer;
async Task Open()
{
libVlc = new LibVLC();
Core.Initialize();
Media media = new(libVlc, new Uri(MEDIA_FILE_PATH));
await media.Parse();
mediaPlayer = new MediaPlayer(media);
}
async Task Play()
{
PeriodicTimer metronomeTimer = new(METRONOME_TIMER_INTERVAL);
mediaPlayer.Play();
for (int i = 0; i < 10; i++)
{
PlayMetronomeSound();
await metronomeTimer.WaitForNextTickAsync();
}
}
Если это так, есть ли способ предварительно буферизовать носитель в методе Open(), чтобы избежать задержка в Play()?
Единственное обходное решение, которое мне удалось найти, — это вызвать mediaPlayer.Play() в Open() метод, затем mediaPlayer.Pause() в обработчике событий mediaPlayer.Playing, а затем перейдите к началу с помощью mediaPlayer.SeekTo(TimeSpan.Zero). В этом случае второй вызов mediaPlayer.Play() немедленно запускает воспроизведение, и проблем с синхронизацией больше нет, но мне это кажется хаком.
Подробнее здесь: https://stackoverflow.com/questions/786 ... l-playback