2017-06-23 2 views
0

Ich versuche, die get_stats() Funktion auf einem Medium rufen erhalten:Python3/vlc: Wie Medien Statistiken (Funktion get_stats)

>>> instance = vlc.Instance() 
>>> media = instance.media_new('song.mp3') 
>>> media.get_stats() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: get_stats() missing 1 required positional argument: 'p_stats' 
>>> media.get_stats('input_bitrate') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/alain/Audio/vlc.py", line 2517, in get_stats 
    return libvlc_media_get_stats(self, p_stats) 
    File "/home/alain/Audio/vlc.py", line 5349, in libvlc_media_get_stats 
    return f(p_md, p_stats) 
ctypes.ArgumentError: argument 2: <class 'TypeError'>: expected LP_MediaStats instance instead of str 

Der erwartete Argument Typ LP_MediaStats nicht in vlc.py existiert, aber ich fand diese :

class MediaStats(_Cstruct): 
    _fields_ = [ 
     ('read_bytes',   ctypes.c_int ), 
     ('input_bitrate',  ctypes.c_float), 
     ('demux_read_bytes', ctypes.c_int ), 
     ('demux_bitrate',  ctypes.c_float), 
     ('demux_corrupted',  ctypes.c_int ), 
     ('demux_discontinuity', ctypes.c_int ), 
     ('decoded_video',  ctypes.c_int ), 
     ('decoded_audio',  ctypes.c_int ), 
     ('displayed_pictures', ctypes.c_int ), 
     ('lost_pictures',  ctypes.c_int ), 
     ('played_abuffers',  ctypes.c_int ), 
     ('lost_abuffers',  ctypes.c_int ), 
     ('sent_packets',  ctypes.c_int ), 
     ('sent_bytes',   ctypes.c_int ), 
     ('send_bitrate',  ctypes.c_float), 
    ] 

Weiß jemand, wie man diese Funktion benutzt?

+0

'stats = vlc.MediaStats()' dann 'print self.Media.get_stats (stats)' aber wie bereits erwähnt, gibt dies nur Wahr oder Falsch zurück. Es scheint sich um eine weitere Arbeit zu handeln, die nach der Einstellung wieder eingestellt wird. Siehe https://trac.videolan.org/vlc/ticket/14035 –

+0

Anstatt mit 'print self.Media.set_stats (stats)' zu drucken, führen Sie einfach den Aufruf dumping den Rückgabewert und dann 'print stats' - es sollte mit den Statistiken, die Sie suchen, gefüllt sein. Sie müssen es möglicherweise mit str (stats) und Trennlinien analysieren, dann gibt es in jeder Zeile eine Registerkarte, um das Label vom Wert zu trennen, damit Sie das in ein Diktat einlesen können. – dingles

Antwort

0

Beginnen Sie mit der Dokumentation here. Dort heißt es:

libvlc_media_get_stats(p_md, p_stats) die aktuellen Statistiken über die Medien Get.

Parameter: p_md -: Medien-Deskriptor-Objekt. p_stats -: Struktur , die die Statistiken über die Medien enthalten (diese Struktur muss vom Anrufer zugewiesen werden). Rückgabe: true, wenn die Statistiken verfügbar sind, andernfalls false \ libvlc_return_bool.

Laut Dokumentation sollten Sie media descriptor als Parameter verwenden. Jetzt müssen wir herausfinden, wie man einen Mediendeskriptor bekommt.

+0

Hmm, ich habe missverstanden, was 'get_media' ist: Ich will keinen Booleschen, sondern die Statistiken selbst. Also akzeptiere ich deine Antwort und öffne eine neue Frage. – albar