首页 > 解决方案 > 如何判断 VLC MediaListPlayer 的进度?

问题描述

我有一个用来播放音乐的树莓派 3b。当按下按钮(GPIO)时,我想播放歌曲列表。我正在使用 vlc 媒体列表播放器执行此操作。我通过从目录中抓取 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 按钮(必须取消脚本才能停止)。

标签: pythonraspberry-piraspberry-pi3vlclibvlc

解决方案


我的建议是:不要使用MediaListPlayer.

使用 aMediaList和 aMediaPlayer并收听libvlc_MediaListEndReached https://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc.html

循环让播放器在播放下一首歌曲之前等待一首歌曲完成

使用 libvlc 事件。


推荐阅读