如何使用 vlc.py 获取音频流元数据

How to get audiostream metadata using vlc.py

对于一个小项目,我需要从音频流上的歌曲中获取元数据(主要是标题和艺术家),为此我正在使用 vlc python 库。这是我的代码,以比利时广播电台为例:

import vlc
def getData(url):
    Instance = vlc.Instance()
    player = Instance.media_player_new()
    Media = Instance.media_new(url)
    Media.get_mrl()
    player.set_media(Media)
    player.play()
    return player.audio_get_track_description()

print(getData("http://icecast.vrtcdn.be/mnm-high.mp3"))

但我得到的只是一个空数组: []

我从另一个 Whosebug 线程获得了部分代码,但我不完全确定它是如何工作的:

我该如何解决这个问题?

在元信息可用之前,媒体必须 parsed
在这些网络广播中,执行此操作的唯一方法似乎是 play 它,然后要检查的元项目是 NowPlayingTitle 返回一个通用字符串,类似于 Title 1.
雪上加霜的是,在 vlc.EventType.MediaMetaChanged 上注册的回调事件似乎没有被激活。

速览如下:

import vlc
import time

def getData(url):
    Instance = vlc.Instance()
    player = Instance.media_player_new()
    Media = Instance.media_new(url)
    Media.get_mrl()
    player.set_media(Media)
    player.play()
    prev = ""
    while True:
        time.sleep(1)
        m = Media.get_meta(12) # vlc.Meta 12: 'NowPlaying',
        if m != prev:
            print("Now playing", m)
            prev = m
    return player.audio_get_track_description()

print(getData("http://icecast.vrtcdn.be/mnm-high.mp3"))

现在,这给出了:

Now playing None
[00007fc830005ab0] prefetch stream error: unimplemented query (264) in control
Now playing JUSTIN BIEBER feat. LUDACRIS - BABY
Now playing LAUV & ANNE-MARIE - FUCK, I'M LONELY
Now playing MODJO - LADY (HEAR ME TONIGHT)
Now playing MILOW - AYO TECHNOLOGY