You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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())

关键逻辑说明

  1. 获取底层MediaPlayer:MediaListPlayer是播放列表的上层封装,通过get_media_player()可以拿到负责实际播放的底层MediaPlayer实例。
  2. 获取当前Media对象:调用media_player.get_media()得到当前正在播放的媒体对象,未播放时返回None。
  3. 提取文件路径: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:48:26