[vlc-devel] libvlc status?

Tanguy Krotoff tkrotoff at gmail.com
Wed Mar 26 15:35:16 CET 2008


Hi everybody

I'm developing a VLC Phonon backend.
Phonon is is the cross platform multimedia API for KDE 4. It is
integrated inside Qt-4.4. It has already a backend for Xine,
GStreamer, Direct Show and QuickTime.
http://en.wikipedia.org/wiki/Phonon_%28KDE%29
I hope to integrate it into some Qt-4 video/music players like
SMPlayer http://smplayer.sourceforge.net/ and others
Ok that is said :p

Here is the code of the VLC Phonon backend (under GPL):
http://smplayer.svn.sourceforge.net/viewvc/smplayer/experimental/phonon-vlc/

So i've been using libvlc-git-0.9 for a full week (holidays,
holidays... :p) and I found the API "unworking" and "confusing"

The biggest problem is that there isn't a working program not too
complex/not too simple:
http://wiki.videolan.org/LibVLC_Media_List_Management -> does not compile
http://wiki.videolan.org/LibVLC_Tutorial -> too simple
vlc-git/src/control/testapi.c -> too simple
So I checked the Java binding but VlcClient.java is too simple :/

What is the status of libvlc-0.9? unstable/pretty stable/tested?
Which part of the API should I used and that is known to be tested?
Should I go for libvlc-0.8.6 instead?
I would like to know if there is a simple application that uses libvlc
that works. By who/where is used libvlc?
Is it possible to use the same API as the qtvlc?

Here is the bugs/strange things/questions that I got:

* libvlc_audio_get_volume( libvlc_instance_t *, libvlc_exception_t * )
does not work (-> exception) if there is no libvlc_media_instance_t
instantiated.
But still the function does not required a libvlc_media_instance_t parameter
+ getting the volume should of course not depend from a libvlc_media_instance_t

* libvlc_media_instance_set_drawable()
does not work, I have to use libvlc_video_set_parent()

* libvlc_media_descriptor_get_meta()
does not work, impossible to get artist name... even while playing the
file or checking for the libvlc_MediaDescriptorMetaChanged event
I tried with different mp3 files with tags

* libvlc_MediaDescriptorPreparsedChanged
event unknown, still present inside libvlc_structures.h

* libvlc_media_list_player_stop() and libvlc_media_instance_stop()
crash with different snapshots

* no event libvlc_MediaInstanceStopped
but there is libvlc_MediaInstancePlayed, libvlc_MediaInstancePaused,
and even libvlc_MediaInstanceReachedEnd... strange...
+ libvlc_MediaInstancePlayed vs libvlc_MediaListPlayerPlayed is very confusing

* no libvlc.lib and libvlc.pdb
There is no SDK, so I load the libvlc.dll at runtime
I already sent an email about this to vlc-devel
code is here if it can help somebody:
http://smplayer.svn.sourceforge.net/viewvc/smplayer/experimental/phonon-vlc/vlc_symbols.h?view=markup
problem is that without the .pdb file I cannot go debug inside libvlc code.

* How do I deactivate the double-click on the vlc video window?
minor problem for the moment

* How do I set the audio device to use if I have several?
there is no libvlc_audio_set_device(int deviceId) + qtvlc does not
provide this functionality
(I guess this will be for the future...)

* Also there is no event like libvlc_AudioDeviceFailed

* There is no event like libvlc_BufferStatus with a %
this is really minor

* found it strange that qtvlc does not use libvlc + Qt4 is compiled
statically, but this is another subject.. :p



The libvlc API is quite confusing (ok this is only my opinion): a lot
of stuffs: media_list, media_list_player, media_list_view +
depreceated API...
Sometimes I wonder why there is media_list, media_view... since libvlc
users will probably create a new "media list/playlist" stuff in their
own code if needed.
About events, you have to attach each category to a callback. I think
a simple switch() from the user side would have been ok + one and only
one callback registration and all events going to the same callback.
And still there is no char * libvlc_get_version(), you have to go with
the old API to get this.

I would have seen a simple:

register_callback(callback);
int mid = media_new("myvideo.avi");
media_load(mid); //send load event + meta data, duration... working,
don't have to run media_play() to get this...
media_play(mid); //send play event
media_attach_to_window(mid, window_id);
media_stop(mid); //send stop event
media_release(mid);

//all events though callback()
void callack(int mid, event)
{
   switch(event)
   ...
}

So a bit like the old API but without the playlist and with the callback system.

Anyway thanks for coding vlc, it's a nice piece of software that so
many people use daily.

I hope that you will be able to help me. If I can give you more
feedback on some stuffs, no problem

-- 
Tanguy Krotoff <tkrotoff at gmail.com>
+33 6 68 42 70 24



More information about the vlc-devel mailing list