Seite 1 von 1

vlc.py: kein MediaMetaChanged event währned streams

Verfasst: Sonntag 25. August 2013, 08:13
von redeagle
Hi
Ich möchte Musik-Streams mithilfe der libvlc (vlc.py) abspielen und die dazu gehörigen Meta-Daten anzeigen. Allerdings gelingt es mir nicht VLC dazu zu bringen eine entsprechende Callback-Funktion aufzurufen.

Der eigentliche Player:

Code: Alles auswählen

import vlc

class Player(object):
  def __init__(self):
    self.Instance = vlc.Instance()
    self.MediaPlayer = self.Instance.media_player_new()
    self.Media = None
    self.MediaManager = None
    self.MediaPlayerManager = None

  def Play(self, source):
    if not source : return

    self.Media = self.Instance.media_new(source)
    
    self.MediaPlayer.set_media(self.Media)
    self.MediaPlayer.play()
    self.MediaPlayer.audio_set_volume(0)
    
    self.MediaManager = self.Media.event_manager()
    self.MediaManager.event_attach(vlc.EventType.MediaMetaChanged, self._CBMetaDataChanged, self.Media)

  def _CBMetaDataChanged(self, event, media):
    nowplaying = media.get_meta(vlc.Meta.NowPlaying)
    print('Now Playing: %s' % nowplaying)
Der Code zum testen:

Code: Alles auswählen

import player

if __name__ == '__main__':
  p1 = player.Player()
  p1.Play('http://85.25.150.163:7500')

  cmd = "-"
  while cmd != "exit":
    cmd = input("> ")

    if cmd == "p":
      p1._CBMetaDataChanged(None, p1.Media)
Gebe ich 'p' ein, so wird der gerade gespielte Song korrekt ausgegeben, eigenständig, also durch das Event, wird die Callback-Funktion allerdings nicht aufgerufen.
Nun ja, "nicht aufgerufen" ist nicht ganz richtig, wenn ich das Script starte, wird ein einziges mal die Callback aufgerufen und "Now Playing: None" ausgegeben.

Hat jemand eine Idee woran das liegen kann?