Как я могу рассказать о прогрессе VLC MediaListPlayer? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть Raspberry Pi 3b, который я использую для воспроизведения музыки.Когда кнопка (GPIO) нажата, я хочу воспроизвести список песен.Я делаю это с помощью плеера vlc media list.Я создаю список мультимедиа, собирая N случайных mp3-файлов из каталога.

Например:

i=vlc.Instance()
l=i.media_list_new()
l.insert_media(i.media_new(...)) # this loops and grabs random mp3s
p=i.media_list_player_new()
p.set_media_list(l)
p.play()

Другой сигнал GPIO вызовет p.stop ().На этом этапе я хочу знать, какие песни из списка СМИ были воспроизведены.Таким образом, я могу отслеживать их и не воспроизводить снова при следующем нажатии кнопки «Воспроизведение», но неиспользованные треки в списке все еще должны иметь право на воспроизведение.

Пока что я не вижу никакого способаполучить какую-либо информацию от проигрывателя списка мультимедиа о том, какой элемент в списке он включен или каким-либо другим способом узнать, что было воспроизведено из списка.

Я попробовал альтернативный вариант ручного циклического просмотра списка песен и использованияобычный игрок (не игрок списка), но когда я делаю это, я должен сделать цикл while True, чтобы заставить игрока ждать окончания одной песни, прежде чем играть следующую.Похоже, этот цикл также по какой-то причине блокирует мой обработчик событий GPIO, и нажатие кнопки STOP остается незамеченным (для остановки необходимо отменить сценарий).

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

На самом деле все получилось с помощью MediaListPlayer и событий.Я добавил обработчик событий для MediaListPlayerNextItemSet, который вызывает функцию, увеличивающую счетчик, поэтому я знаю, сколько песен в списке было воспроизведено сейчас.

0 голосов
/ 29 ноября 2018

Мой совет: не используйте MediaListPlayer.

Используйте MediaList вместе с MediaPlayer и слушайте libvlc_MediaListEndReached https://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc.html

цикл, чтобы заставить игрока ждать завершения одной песни, прежде чем воспроизводить следующую

Использовать события libvlc.

...