如何通过Python-VLC的MediaListPlayer获取当前播放曲目的文件路径?
获取python-vlc MediaListPlayer当前播放曲目的文件路径
要获取当前播放曲目的文件路径,可通过MediaListPlayer获取底层MediaPlayer实例,再提取当前Media对象并调用其get_mrl()方法(本地MP3的MRL即为完整文件路径)。
修改后的完整代码
import os import vlc from vlc import MediaListPlayer class Music: def __init__(self, path): self.path = path self.get_playlist() self.play() def get_songs(self): self.pathlist = [] for file in os.listdir(self.path): if file.endswith('.mp3'): self.pathlist.append(os.path.join(self.path, file)) def get_playlist(self): self.player = MediaListPlayer() inst = self.player.get_instance() playlist = inst.media_list_new() self.get_songs() for path in self.pathlist: song = inst.media_new(path) playlist.add_media(song) self.player.set_media_list(playlist) def play(self): self.player.play() def get_current_track_path(self): # 获取底层MediaPlayer实例 media_player = self.player.get_media_player() if not media_player: return None # 获取当前播放的Media对象 current_media = media_player.get_media() if not current_media: return None # 返回本地文件路径 return current_media.get_mrl() # 使用示例 music_player = Music('path/to/music') # 播放过程中调用获取当前曲目路径 # print(music_player.get_current_track_path())
关键逻辑说明
- 获取底层MediaPlayer:
MediaListPlayer是播放列表的上层封装,通过get_media_player()可以拿到负责实际播放的底层MediaPlayer实例。 - 获取当前Media对象:调用
media_player.get_media()得到当前正在播放的媒体对象,未播放时返回None。 - 提取文件路径:
Media对象的get_mrl()方法返回媒体资源定位符,本地MP3文件的MRL就是完整的文件路径。
实时监听曲目切换(可选)
如果需要在曲目切换时自动获取路径,可以通过vlc的事件监听机制实现:
def on_media_changed(event): media = event.u.media if media: print(f"当前播放曲目: {media.get_mrl()}") # 在get_playlist方法中添加事件监听 def get_playlist(self): self.player = MediaListPlayer() inst = self.player.get_instance() playlist = inst.media_list_new() self.get_songs() for path in self.pathlist: song = inst.media_new(path) playlist.add_media(song) self.player.set_media_list(playlist) # 绑定曲目切换事件 media_player = self.player.get_media_player() event_manager = media_player.event_manager() event_manager.event_attach(vlc.EventType.MediaPlayerMediaChanged, on_media_changed)
内容的提问来源于stack exchange,提问作者MillerTime
相关产品推荐
相关产品推荐

