python - 如何判断 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 按钮(必须取消脚本才能停止)。
解决方案
我的建议是:不要使用MediaListPlayer
.
使用 aMediaList
和 aMediaPlayer
并收听libvlc_MediaListEndReached
https://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc.html
循环让播放器在播放下一首歌曲之前等待一首歌曲完成
使用 libvlc 事件。
推荐阅读
- python - 在 python 中从 S3 Bucket 创建数据帧时出错
- python - 具有动态值变化的列表理解
- postgresql - 如何在 postgreSQL 中将 varchar 转换为时间戳?
- angular - In the angular 10 undecorated class migration, how should I handle the case where a base class is inherited by Directives and Injectables?
- python - Rename new column function testing
- c++ - Generate executable a.out from cpp mentioned in .pro file in yocto build
- node.js - Undefined .env variables when webpack goes into production mode
- python - keras raise 没有为简单模型的任何变量提供梯度
- c++ - How is the order of shared library constructor/destructor and global object constructor/destructor specified?
- flutter - Display image from Bytes/bodyBytes in flutter