0

对于一个小项目,我需要从音频流上的歌曲中获取元数据(主要是标题和艺术家),为此我使用的是 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"))

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

我从另一个 stackoverflow 线程获得了一部分代码,但不完全确定它是如何工作的:https ://stackoverflow.com/a/34244909/14788941

我该如何解决这个问题?

4

1 回答 1

1

媒体必须parsed在元信息可用之前就已经存在。
在这些网络广播中,执行此操作的唯一方法似乎是play它,然后要检查的元项目是NowPlaying. Title返回一个通用字符串,例如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
于 2021-12-29T09:42:53.173 回答