[VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

z.B. wxWidgets, GTK+, Qt, OpenGL, DirectX
Antworten
nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

[VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von nufan » Mi Dez 08, 2010 2:30 am

Ja, ich lebe noch ^^
Ich habe ein Problem mit libVLC an dem ich jetzt schon stundenlang sitze. Und zwar versuche ich Informationen über eine mp3-Datei zu bekommen. Jedoch liefert mir die Funktion libvlc_media_get_tracks_info() keine Werte zurück. Hat jemand eine Idee woran das liegen könnte?
Hier der Code-Ausschnitt in dem die Threads (anscheinend erfolgreich) über Qt gesteuert werden:

Code: Alles auswählen

static void callback(const libvlc_event_t *event, void *data);
QWaitCondition condition;
bool t = true;

TrackInfo::TrackInfo(libvlc_media_t *const m)
{

  cout << "TrackInfo" << endl;
  m_mutex.lock();
  cout << "create player" << endl;
  m_player = libvlc_media_player_new_from_media(m);
  cout << "add option" << endl;
  //libvlc_media_add_option(m, "--sout=\"#description\"");  funktioniert beides nicht...
  libvlc_media_add_option(m, "sout=#description:dummy");
  cout << "create event" << endl;
  libvlc_event_manager_t *event = libvlc_media_player_event_manager(m_player);
  cout << "attach event" << endl;
  libvlc_event_attach(event, libvlc_MediaPlayerPlaying, &callback, NULL);
  cout << "play" << endl;
  libvlc_media_player_play(m_player);
  cout << "before: " << t << endl;
  condition.wait(&m_mutex);
  cout << "after: " << t << endl;
  libvlc_media_player_release(m_player);
  cout << "get tracks info" << endl;
  m_numinfo = libvlc_media_get_tracks_info(m, &m_trackinfo);
  cout << "get duration" << endl;
  m_duration = libvlc_media_get_duration(m);
  m_durationstring = QTime(0, 0, 0, m_duration).toString("hh:mm:ss");

  cout << "numinfo: " << m_numinfo << endl;
  cout << "duration: " << m_duration << endl;

}
Ich hab jetzt schon recht viele Debug-Ausgaben drin...
"t" ist nur eine Testvariable um zu prüfen, ob die Callback-Funktion zur richtigen Zeit aufgerufen wird, das scheint jedoch zu funktionieren.
Hier die Ausgabe nach der Initialisierung von libVLC mit "-vvv":

Code: Alles auswählen

[0x87a20f4] main libvlc debug: VLC media player - 1.1.4 The Luggage
[0x87a20f4] main libvlc debug: Copyright © 1996-2010 the VideoLAN team
[0x87a20f4] main libvlc debug: revision exported
[0x87a20f4] main libvlc debug: configured with ./configure  '--enable-static' '--build=i686-linux-gnu' '--config-cache' '--disable-maintainer-mode' '--disable-silent-rules' '--disable-update-check' '--enable-fast-install' '--prefix=/usr' '--sysconfdir=/etc' '--with-binary-version=1ubuntu1.1' '--enable-a52' '--enable-aa' '--enable-bonjour' '--enable-caca' '--enable-dca' '--enable-dirac' '--enable-dvb' '--enable-dvbpsi' '--enable-dvdnav' '--enable-faad' '--enable-flac' '--enable-fluidsynth' '--enable-freetype' '--enable-fribidi' '--enable-ggi' '--enable-gnutls' '--enable-jack' '--enable-kate' '--enable-libass' '--enable-libmpeg2' '--enable-libproxy' '--enable-libxml2' '--enable-lirc' '--enable-live555' '--enable-mad' '--enable-mkv' '--enable-mod' '--enable-mozilla' '--enable-mpc' '--enable-mtp' '--enable-mux_ogg' '--enable-ncurses' '--enable-notify' '--enable-ogg' '--enable-pulse' '--enable-qt4' '--enable-realrtsp' '--enable-schroedinger' '--enable-sdl' '--enable-shout' '--enable-skins2' '--enable-smb' '--enable-speex' '--enable-svg' '--enable-taglib' '--enable-theora' '--enable-twolame' '--enable-upnp' '--enable-vcd' '--enable-vcdx' '--enable-vorbis' '--enable-x264' '--enable-zvbi' '--with-kde-solid=/usr/share/kde4/apps/' '--with-mozilla-pkg=libxul' '--disable-dxva2' '--disable-gnomevfs' '--disable-goom' '--disable-osso_screensaver' '--disable-portaudio' '--disable-projectm' '--disable-sqlite' '--disable-telx' '--enable-alsa' '--enable-atmo' '--enable-dc1394' '--enable-dv' '--enable-libva' '--enable-pvr' '--enable-udev' '--enable-v4l' '--enable-v4l2' '--enable-svgalib' 'build_alias=i686-linux-gnu' 'CFLAGS=-g -O2' 'LDFLAGS=-Wl,--as-needed' 'CPPFLAGS=' 'CXXFLAGS=-g -O2'
[0x87a20f4] main libvlc debug: translation test: code is "C"
[0x87a20f4] main libvlc debug: checking plugin modules
[0x87a20f4] main libvlc debug: loading plugins cache file /usr/lib/vlc/plugins/plugins-04041e-7e8.dat
[0x87a20f4] main libvlc debug: recursively browsing `/usr/lib/vlc/plugins'
[0x87a20f4] main libvlc debug: saving plugins cache /usr/lib/vlc/plugins/plugins-04041e-7e8.dat
[0x87a20f4] main libvlc debug: module bank initialized (394 modules)
[0x87a20f4] main libvlc debug: CPU has capabilities MMX MMXEXT SSE SSE2 SSE3 SSSE3 SSE4.1 FPU 
[0x87a20f4] main libvlc debug: looking for memcpy module: 3 candidates
[0x87a20f4] main libvlc debug: using memcpy module "memcpymmxext"
[0x88486c4] main input debug: Creating an input for 'Media Library'
[0x88486c4] main input debug: Input is a meta file: disabling unneeded options
[0x88486c4] main input debug: using timeshift granularity of 50 MiB
[0x88486c4] main input debug: using timeshift path '/tmp'
[0x88486c4] main input debug: `file/xspf-open:///home/daniel/.local/share/vlc/ml.xspf' gives access `file' demux `xspf-open' path `/home/daniel/.local/share/vlc/ml.xspf'
[0x88486c4] main input debug: creating demux: access='file' demux='xspf-open' path='/home/daniel/.local/share/vlc/ml.xspf'
[0x883615c] main demux debug: looking for access_demux module: 2 candidates
[0x883615c] main demux debug: no access_demux module matching "file" could be loaded
[0x883615c] main demux debug: TIMER module_need() : 2.360 ms - Total 2.360 ms / 1 intvls (Avg 2.360 ms)
[0x88486c4] main input debug: creating access 'file' path='/home/daniel/.local/share/vlc/ml.xspf'
[0x883858c] main access debug: looking for access module: 2 candidates
[0x883858c] filesystem access debug: opening file `/home/daniel/.local/share/vlc/ml.xspf'
[0x883858c] main access debug: using access module "filesystem"
[0x883858c] main access debug: TIMER module_need() : 0.939 ms - Total 0.939 ms / 1 intvls (Avg 0.939 ms)
[0x88415c4] main stream debug: Using AStream*Stream
[0x88415c4] main stream debug: pre buffering
[0x88415c4] main stream debug: received first data after 0 ms
[0x88415c4] main stream debug: pre-buffering done 296 bytes in 0s - 4014 KiB/s
[0x8840c44] main stream debug: looking for stream_filter module: 5 candidates
[0x8840c44] main stream debug: no stream_filter module matching "any" could be loaded
[0x8840c44] main stream debug: TIMER module_need() : 1.547 ms - Total 1.547 ms / 1 intvls (Avg 1.547 ms)
[0x8840c44] main stream debug: looking for stream_filter module: 1 candidate
[0x8840c44] main stream debug: using stream_filter module "stream_filter_record"
[0x8840c44] main stream debug: TIMER module_need() : 0.470 ms - Total 0.470 ms / 1 intvls (Avg 0.470 ms)
[0x88486c4] main input debug: creating demux: access='file' demux='xspf-open' path='/home/daniel/.local/share/vlc/ml.xspf'
[0x8836e04] main demux debug: looking for demux module: 1 candidate
[0x8836e04] playlist demux debug: using XSPF playlist reader
[0x8836e04] main demux debug: using demux module "playlist"
[0x8836e04] main demux debug: TIMER module_need() : 0.764 ms - Total 0.764 ms / 1 intvls (Avg 0.764 ms)
[0x8841cfc] main demux meta debug: looking for meta reader module: 2 candidates
[0x8841cfc] lua demux meta debug: Trying Lua scripts in /home/daniel/.local/share/vlc/lua/meta/reader
[0x8841cfc] lua demux meta debug: Trying Lua scripts in /usr/lib/vlc/lua/meta/reader
[0x8841cfc] lua demux meta debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/reader/filename.luac
[0x8841cfc] lua demux meta debug: Trying Lua scripts in /usr/share/vlc/lua/meta/reader
[0x8841cfc] main demux meta debug: no meta reader module matching "any" could be loaded
[0x8841cfc] main demux meta debug: TIMER module_need() : 13.849 ms - Total 13.849 ms / 1 intvls (Avg 13.849 ms)
[0x88486c4] main input debug: `file/xspf-open:///home/daniel/.local/share/vlc/ml.xspf' successfully opened
[0x8841cfc] main xml debug: looking for xml module: 2 candidates
[0x8841cfc] main xml debug: using xml module "xml"
[0x8841cfc] main xml debug: TIMER module_need() : 1.675 ms - Total 1.675 ms / 1 intvls (Avg 1.675 ms)
[0x8836e04] playlist demux debug: parsed 0 tracks successfully
[0x8841cfc] main xml debug: removing module "xml"
[0x88486c4] main input debug: EOF reached
[0x8836e04] main demux debug: removing module "playlist"
[0x8840c44] main stream debug: removing module "stream_filter_record"
[0x883858c] main access debug: removing module "filesystem"
[0x88486c4] main input debug: TIMER input launching for 'Media Library' : 45.560 ms - Total 45.560 ms / 1 intvls (Avg 45.560 ms)
[0x88428e4] main interface debug: looking for interface module: 1 candidate
[0x88428e4] main interface debug: using interface module "hotkeys"
[0x88428e4] main interface debug: TIMER module_need() : 0.838 ms - Total 0.838 ms / 1 intvls (Avg 0.838 ms)
[0x8841cfc] main interface debug: looking for interface module: 1 candidate
[0x884734c] main playlist debug: Activated
[0x8841cfc] main interface debug: using interface module "inhibit"
[0x8841cfc] main interface debug: TIMER module_need() : 23.600 ms - Total 23.600 ms / 1 intvls (Avg 23.600 ms)
[0x884734c] main playlist debug: rebuilding array of current - root Playlist
[0x884734c] main playlist debug: rebuild done - 0 items, index -1
(6466) KSycocaPrivate::openDatabase: Trying to open ksycoca from  "/var/tmp/kdecache-daniel/ksycoca4"
kfilemodule(6466)/kdecore (services) KMimeTypeFactory::parseMagic: Now parsing  "/usr/share/mime/magic"
[0x8a33854] main input debug: Creating an input for '03-social_distortion-dont_take_me_for_granted.mp3'
TrackInfo
create player
add option
create event
attach event
play
before: 1
[0x8a32944] main input debug: Creating an input for 'Don't Take Me For Granted '
[0x8a32944] main input debug: thread (input) created at priority 10 (input/input.c:214)
[0x884734c] main playlist debug: no fetch required for Don't Take Me For Granted  (art currently (null))
[0x8a32944] main input debug: thread started
[0x89c0d0c] main stream output debug: using sout chain=`description:dummy'
[0x89c0d0c] main stream output debug: stream=`dummy'
[0x8a27bbc] main stream out debug: looking for sout stream module: 1 candidate
[0x8a27bbc] main stream out debug: using sout stream module "stream_out_dummy"
[0x8a27bbc] main stream out debug: TIMER module_need() : 1.255 ms - Total 1.255 ms / 1 intvls (Avg 1.255 ms)
[0x89c0d0c] main stream output debug: stream=`description'
[0x89e8454] main stream out debug: looking for sout stream module: 1 candidate
[0x89e8454] main stream out debug: using sout stream module "stream_out_description"
[0x89e8454] main stream out debug: TIMER module_need() : 0.654 ms - Total 0.654 ms / 1 intvls (Avg 0.654 ms)
[0x8a32944] main input debug: using timeshift granularity of 50 MiB
[0x8a32944] main input debug: using timeshift path '/tmp'
[0x8a32944] main input debug: `/home/daniel/03-social_distortion-dont_take_me_for_granted.mp3' gives access `' demux `' path `/home/daniel/03-social_distortion-dont_take_me_for_granted.mp3'
[0x8a32944] main input debug: creating demux: access='' demux='' path='/home/daniel/03-social_distortion-dont_take_me_for_granted.mp3'
[0x8a19924] main demux debug: looking for access_demux module: 9 candidates
[0x8aee614] main demux meta debug: looking for meta fetcher module: 1 candidate
[0x8aee614] lua demux meta debug: Trying Lua scripts in /home/daniel/.local/share/vlc/lua/meta/fetcher
[0x8aee614] lua demux meta debug: Trying Lua scripts in /usr/lib/vlc/lua/meta/fetcher
[0x8aee614] lua demux meta debug: Trying Lua playlist script /usr/lib/vlc/lua/meta/fetcher/tvrage.luac
[0x8aee614] main demux meta debug: using meta fetcher module "lua"
[0x8aee614] main demux meta debug: TIMER module_need() : 2.166 ms - Total 2.166 ms / 1 intvls (Avg 2.166 ms)
[0x8aee614] main demux meta debug: removing module "lua"
[0x884734c] main playlist debug: found art for Don't Take Me For Granted  in cache
[0x8a19924] main demux debug: no access_demux module matching "any" could be loaded
[0x8a19924] main demux debug: TIMER module_need() : 40.301 ms - Total 40.301 ms / 1 intvls (Avg 40.301 ms)
[0x8a32944] main input debug: creating access '' path='/home/daniel/03-social_distortion-dont_take_me_for_granted.mp3'
[0x8a360e4] main access debug: looking for access module: 7 candidates
[0x8a360e4] vcd access debug: trying .cue file: /home/daniel/03-social_distortion-dont_take_me_for_granted.cue
[0x8a360e4] vcd access debug: could not find .cue file
[0x8a360e4] filesystem access debug: opening file `/home/daniel/03-social_distortion-dont_take_me_for_granted.mp3'
[0x8a360e4] main access debug: using access module "filesystem"
[0x8a360e4] main access debug: TIMER module_need() : 19.883 ms - Total 19.883 ms / 1 intvls (Avg 19.883 ms)
[0x893cb04] main stream debug: Using AStream*Stream
[0x893cb04] main stream debug: pre buffering
[0x893cb04] main stream debug: received first data after 0 ms
[0x893cb04] main stream debug: pre-buffering done 1024 bytes in 0s - 29411 KiB/s
[0x89c4404] main stream debug: looking for stream_filter module: 5 candidates
[0x89c4404] main stream debug: no stream_filter module matching "any" could be loaded
[0x89c4404] main stream debug: TIMER module_need() : 0.202 ms - Total 0.202 ms / 1 intvls (Avg 0.202 ms)
[0x8be074c] main stream debug: looking for stream_filter module: 1 candidate
[0x8be074c] main stream debug: using stream_filter module "stream_filter_record"
[0x8be074c] main stream debug: TIMER module_need() : 0.135 ms - Total 0.135 ms / 1 intvls (Avg 0.135 ms)
[0x8a32944] main input debug: creating demux: access='' demux='' path='/home/daniel/03-social_distortion-dont_take_me_for_granted.mp3'
[0x8aee804] main demux debug: ID3v2.3 revision 0 tag found, skipping 1720 bytes
[0x8aee804] main demux debug: looking for demux module: 52 candidates
[0x8aee804] es demux debug: detected format mpga
[0x8bd15ac] main demux packetizer debug: looking for packetizer module: 21 candidates
[0x8bd15ac] main demux packetizer debug: using packetizer module "mpeg_audio"
[0x8bd15ac] main demux packetizer debug: TIMER module_need() : 0.176 ms - Total 0.176 ms / 1 intvls (Avg 0.176 ms)
[0x8aee804] main demux debug: using demux module "es"
[0x8aee804] main demux debug: TIMER module_need() : 2.238 ms - Total 2.238 ms / 1 intvls (Avg 2.238 ms)
[0x8a32944] main input debug: starting in sync mode
[0x89fc5fc] main demux meta debug: looking for meta reader module: 2 candidates
[0x89fc5fc] main demux meta debug: using meta reader module "taglib"
[0x89fc5fc] main demux meta debug: TIMER module_need() : 0.666 ms - Total 0.666 ms / 1 intvls (Avg 0.666 ms)
[0x8aee804] main demux debug: removing module "taglib"
callback; received event: MediaPlayerPlaying
after: 0
get tracks info
get duration
numinfo: 0
duration: 0
[0x8a32944] main input debug: `/home/daniel/03-social_distortion-dont_take_me_for_granted.mp3' successfully opened
[0x8bd15ac] main demux packetizer debug: removing module "mpeg_audio"
[0x8aee804] main demux debug: removing module "es"
[0x8be074c] main stream debug: removing module "stream_filter_record"
[0x8a360e4] main access debug: removing module "filesystem"
[0x8a32944] main input debug: thread ended
[0x8a32944] main input debug: TIMER input launching for 'Don't Take Me For Granted ' : 99.349 ms - Total 99.349 ms / 1 intvls (Avg 99.349 ms)
[0x89e8454] main stream out debug: destroying chain... (name=description)
[0x89e8454] stream_out_description stream out debug: Closing
[0x89e8454] main stream out debug: removing module "stream_out_description"
[0x89e8454] main stream out debug: destroying chain done
[0x8a27bbc] main stream out debug: destroying chain... (name=dummy)
[0x8a27bbc] main stream out debug: removing module "stream_out_dummy"
[0x8a27bbc] main stream out debug: destroying chain done
Ich bin jetzt wirklich ratlos, die Dokumentation ist... spärlich. Die Datei will ich übrigens nicht widergeben, sondern nur Informationen über sie anzeigen.
Hat jemand Erfahrung damit?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von Xin » Mi Dez 08, 2010 10:35 am

dani93 hat geschrieben:Ja, ich lebe noch ^^
Hey, hey. ^^
dani93 hat geschrieben:Ich habe ein Problem mit libVLC an dem ich jetzt schon stundenlang sitze. Und zwar versuche ich Informationen über eine mp3-Datei zu bekommen. Jedoch liefert mir die Funktion libvlc_media_get_tracks_info() keine Werte zurück. Hat jemand eine Idee woran das liegen könnte?
Sieht auf den ersten Blick ähnlich aus und am Schluss steht 'do the trick'.
dani93 hat geschrieben:Hier der Code-Ausschnitt in dem die Threads (anscheinend erfolgreich) über Qt gesteuert werden:
Damit ich derartiges anfassen kann, brauche ich ein kompilierbares (idealerweise unter Linux) Projekt.
dani93 hat geschrieben:Ich bin jetzt wirklich ratlos, die Dokumentation ist... spärlich.
Spärlich?

Documentation is like sex: when it is good, it is very, very good; and when it is bad, it is better than nothing.
dani93 hat geschrieben:Die Datei will ich übrigens nicht widergeben, sondern nur Informationen über sie anzeigen.
Hat jemand Erfahrung damit?
Nichtmals ein bißchen - was meiner üblichen Situation entspricht, wenn ich auf der Arbeit gesagt bekomme, "Hey, Du kannst doch OpenGL und eingestellt haben wir Dich für C# und .NET, deswegen bau deine OpenGL-Sachen doch schnell mal in diese MFC-Applikation ein."
Wäre doch langweilig, wenn man vorher schon wüsste, wie's funktioniert. ^^
Eigentlich hatte ich die Hoffnung, dass der MFC-Kelch noch an mir vorrüberschwappt und MFC in der Bedeutungslosigkeit verschwindet und ich niemals was damit zu tun habe. Egal - es dafür gibt's ja das Schmerzensgeld ^^ ;-)

Also wenn Du etwas zeigen kannst, was ich kompilieren kann, dann kann ich damit auch spielen und Dir vielleicht auch helfen. Aus dem Quelltext sehe ich aus mangelnder Erfahrung mit dem VLC leider nichts.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von nufan » Mi Dez 08, 2010 2:22 pm

Xin hat geschrieben:
dani93 hat geschrieben:Ich habe ein Problem mit libVLC an dem ich jetzt schon stundenlang sitze. Und zwar versuche ich Informationen über eine mp3-Datei zu bekommen. Jedoch liefert mir die Funktion libvlc_media_get_tracks_info() keine Werte zurück. Hat jemand eine Idee woran das liegen könnte?
Sieht auf den ersten Blick ähnlich aus und am Schluss steht 'do the trick'.
Ja, mit Hilfe dieses Beitrags hab ich auch mein Programm zusammengenflickt ^^
Aber bei mir funktioniert es nicht, ich bekomme trotzdem noch immer 0 zurück. Ich habe hier schon die verschiedensten Parameter ausprobiert.
Xin hat geschrieben:
dani93 hat geschrieben:Ich bin jetzt wirklich ratlos, die Dokumentation ist... spärlich.
Spärlich?

Documentation is like sex: when it is good, it is very, very good; and when it is bad, it is better than nothing.
Ich versuche grade folgende Struktur zu bekommen:
http://www.videolan.org/developers/vlc/ ... fo__t.html
Wenn ich die mal hab gibts die nächsten Probleme ;)
Xin hat geschrieben:Also wenn Du etwas zeigen kannst, was ich kompilieren kann, dann kann ich damit auch spielen und Dir vielleicht auch helfen. Aus dem Quelltext sehe ich aus mangelnder Erfahrung mit dem VLC leider nichts.
Der folgende Code macht im Prinzip das gleiche wie jener in dem von dir verlinkten Beitrag, jedoch mit Qt zur Synchronisierung der Threads:

Code: Alles auswählen

#include <iostream>
#include <vlc/vlc.h>
#include <QMutex>
#include <QWaitCondition>

using namespace std;

static void callback(const libvlc_event_t *event, void *data);
QWaitCondition condition;

int main(int argc, char *argv[])
{

  const char *a []= {"-vvv"};  // Parameter für Debug-Ausgaben
  // libVLC initialisieren
  libvlc_instance_t *instance = libvlc_new(1, a);
  if(instance == NULL)
  {
    cout << "Error initializing libVLC: " << libvlc_errmsg() <<endl;
    return 1;
  }
  
  // Datei öffnen
  libvlc_media_t *media = libvlc_media_new_location(instance, "track.mp3");
  if(media == NULL)
  {
    cout << "Error opening media: " << libvlc_errmsg() <<endl;
    return 1;
  }
  
  // Datei parsen
  libvlc_media_parse(media);
  // Meta-Info-Test
  cout << "title: " << libvlc_media_get_meta(media, libvlc_meta_Title) << endl;
  
  /////////////////////////////
  libvlc_media_track_info_t *trackinfo;  
  QMutex mutex;
  mutex.lock();
  // Player aus Media-Datei erstellen
  libvlc_media_player_t *player = libvlc_media_player_new_from_media(media);
  //libvlc_media_add_option(media, "--sout=#description");
  libvlc_media_add_option(media, "sout=#description:dummy");
  // Event-Manager für den Player erstellen
  libvlc_event_manager_t *event = libvlc_media_player_event_manager(player);
  // Callback für den Event "MediaPlayerPlaying"-Event setzen
  libvlc_event_attach(event, libvlc_MediaPlayerPlaying, &callback, NULL);
  libvlc_media_player_play(player);
  // Warten bis die Callback-Funktion aufgerufen wird
  condition.wait(&mutex);
  libvlc_media_player_release(player);
  cout << "track info: " << libvlc_media_get_tracks_info(media, &trackinfo) << endl;
  cout << "duration: " << libvlc_media_get_duration(media) << endl;
  /////////////////////////////
  
  // libVLC beenden
  libvlc_release(instance);
  
  return 0;

}



static void callback(const libvlc_event_t *event, void *data)
{

  cout << "callback; received event: " << libvlc_event_type_name(event->type) << endl;
  condition.wakeAll();

}
Der abgegrenzte Teil entspricht dem Konstruktor den ich im ersten Beitrag gepostet habe. Eine Datei "track.mp3" muss sich im gleichen Verzeichnis befinden und hat idealerweise einen Tag für den Titel (Nur zu Debug-Zwecken ob die Datei richtig geparst wurde). Dazu müssen die Entwicklungspakete von Qt4 und libVLC 1.1 installiert sein. Kompiliert wird das ganze über qmake:

Code: Alles auswählen

qmake -project
In der .pro-Datei folgende Zeile einfügen:

Code: Alles auswählen

LIBS += -lvlc
Dann Makefile erstellen und kompilieren:

Code: Alles auswählen

qmake
make
Bei mir sieht das so aus, wenn die Code-Datei main.cpp heißt:

Code: Alles auswählen

######################################################################
# Automatically generated by qmake (2.01a) Wed Dec 8 14:03:55 2010
######################################################################

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
SOURCES += main.cpp
LIBS += -lvlc

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von nufan » Mi Dez 08, 2010 5:55 pm

Ok, das ist ein libVLC-interner Bug. Man muss nach dem Starten 2 Sekunden warten um alle Informationen zu bekommen. Also ein:

Code: Alles auswählen

sleep(2);
nach dem

Code: Alles auswählen

condition.wait(&mutex);
Das ist keine schöne Lösung, aber es gibt zurzeit keine bessere. Man könnte theoretisch die Funktion libvlc_media_get_tracks_info() in einem eigenen Thread so lange aufrufen bis sie nicht 0 zurückgibt, aber wenn man eine falsche Datei auswählt wartet man ewig... inwieweit die VLC-Funktionen thread-sicher sind kann ich sowieso nicht sagen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von Xin » Mi Dez 08, 2010 6:01 pm

dani93 hat geschrieben:Ok, das ist ein libVLC-interner Bug. Man muss nach dem Starten 2 Sekunden warten um alle Informationen zu bekommen. Also ein:

Code: Alles auswählen

sleep(2);
nach dem

Code: Alles auswählen

condition.wait(&mutex);
Das ist keine schöne Lösung,
Machst Du da nicht mit, um Fehler zu beheben!? ^^

Denn das ist wirklich keine schöne Lösung... muss ich auf meinem Pentium 90 länger als 2 Minuten warten?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von nufan » Mi Dez 08, 2010 6:16 pm

Xin hat geschrieben:
dani93 hat geschrieben:Ok, das ist ein libVLC-interner Bug. Man muss nach dem Starten 2 Sekunden warten um alle Informationen zu bekommen. Also ein:

Code: Alles auswählen

sleep(2);
nach dem

Code: Alles auswählen

condition.wait(&mutex);
Das ist keine schöne Lösung,
Machst Du da nicht mit, um Fehler zu beheben!? ^^
Ja, aber nicht in VLC ^^
Außerdem ist das glaube ich in irgendeiner svn/git-Version bereits gefixt, aber ich will nicht verlangen, dass der Benutzer diese Version hat. Ich hab ja schon selbst auf meinem virtuellem Kubuntu 10.10 entwickeln müssen, weil das alte Kubuntu nur libVLC 1.0 hat und es dazu anscheinend überhaupt keine Doku gibt...
Xin hat geschrieben:Denn das ist wirklich keine schöne Lösung... muss ich auf meinem Pentium 90 länger als 2 Minuten warten?
Nein, es wird normalerweise 1,5 Sekunden aus dem Stream gelesen, also 2 Sekunden um ganz sicher zu gehn.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von Xin » Mi Dez 08, 2010 6:22 pm

dani93 hat geschrieben:Außerdem ist das glaube ich in irgendeiner svn/git-Version bereits gefixt, aber ich will nicht verlangen, dass der Benutzer diese Version hat. Ich hab ja schon selbst auf meinem virtuellem Kubuntu 10.10 entwickeln müssen, weil das alte Kubuntu nur libVLC 1.0
Kannst Du die Version nicht abfragen und für alte Versionen Deinen Fix verwenden?

Wenn Du wieder Zeit hast, denk ans Qt-Tut... :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von nufan » Mi Dez 08, 2010 6:28 pm

Xin hat geschrieben:
dani93 hat geschrieben:Außerdem ist das glaube ich in irgendeiner svn/git-Version bereits gefixt, aber ich will nicht verlangen, dass der Benutzer diese Version hat. Ich hab ja schon selbst auf meinem virtuellem Kubuntu 10.10 entwickeln müssen, weil das alte Kubuntu nur libVLC 1.0
Kannst Du die Version nicht abfragen und für alte Versionen Deinen Fix verwenden?
Hm... ich weiß nicht, ob ich an die Revisionsnummer komme...
Xin hat geschrieben:Wenn Du wieder Zeit hast, denk ans Qt-Tut... :-)
Ja, ich bin zurzeit aber ziemlich knapp an den Top-10 dran, wenn ich diese Aufgabe erledigt habe (was praktisch der Fall ist) wäre ich vorübergehend sogar 7. (von 275). Und eine Reise nach Kalifornien würde mich schon reizen... ;)
Bitte verzeiht mir, dass ich in nächster Zeit nicht so viel Zeit fürs Qt-Tutorial habe, aber ich will mir diese Chance nicht entgehen lassen, zumal ich nächstes Jahr schon zu alt dafür bin.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von Xin » Mi Dez 08, 2010 6:33 pm

dani93 hat geschrieben:Hm... ich weiß nicht, ob ich an die Revisionsnummer komme...
Ich auch nicht, aber viele Programme/Libs haben einen Versionsstring in irgendeiner Form versteckt.
dani93 hat geschrieben:
Xin hat geschrieben:Wenn Du wieder Zeit hast, denk ans Qt-Tut... :-)
Ja, ich bin zurzeit aber ziemlich knapp an den Top-10 dran, wenn ich diese Aufgabe erledigt habe (was praktisch der Fall ist) wäre ich vorübergehend sogar 7. (von 275). Und eine Reise nach Kalifornien würde mich schon reizen... ;)
Bitte verzeiht mir, dass ich in nächster Zeit nicht so viel Zeit fürs Qt-Tutorial habe, aber ich will mir diese Chance nicht entgehen lassen, zumal ich nächstes Jahr schon zu alt dafür bin.
Klares Statement. Sieh zu, dass Du nach Kalifornien kommst. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: [VLC] libvlc_media_get_tracks_info() gibt keine Werte zurück

Beitrag von nufan » So Dez 12, 2010 12:04 am

Ich hab das ganze mit der git-Version neu geschrieben. Es funktioniert jetzt alles wie gewünscht. Zu libVLC gibt es praktisch keine Doku, vllt erstell ich mal eine kleine Beispielsammlung im Wiki. Hier der Code:
vlcinfo.zip
Vorausgesetzt werden Qt4 und libVLC in der Version 1.2 (git) in /usr/local/include bzw. /usr/local/lib, ansonsten muss der Pfad in der Projekt-Datei angepasst werden.
Der Stil gefällt mir nicht ganz, aber es war so gewünscht...
Xin hat geschrieben:
dani93 hat geschrieben:
Xin hat geschrieben:Wenn Du wieder Zeit hast, denk ans Qt-Tut... :-)
Ja, ich bin zurzeit aber ziemlich knapp an den Top-10 dran, wenn ich diese Aufgabe erledigt habe (was praktisch der Fall ist) wäre ich vorübergehend sogar 7. (von 275). Und eine Reise nach Kalifornien würde mich schon reizen... ;)
Bitte verzeiht mir, dass ich in nächster Zeit nicht so viel Zeit fürs Qt-Tutorial habe, aber ich will mir diese Chance nicht entgehen lassen, zumal ich nächstes Jahr schon zu alt dafür bin.
Klares Statement. Sieh zu, dass Du nach Kalifornien kommst. ^^
Hehe, nach heutigem Stand wär ich dabei, aber es ist noch lange nicht vorbei ^^
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten