[vlc-devel] Get and set audio, video, pcr, etc PIDs from a stream using libVLC

Flavio Alberto Lopes Soares flavio.thunder at gmail.com
Thu Nov 26 14:34:17 CET 2009

Hello all,

    I'm a newbie in VLC and libVLC and I need to get and set the audio/video
PID in a stream played by libVLC in my application, I read the code from Qt4
gui to know how it works and I saw that it does a var_Set() on "video-es"
and "audio-es" variables, but the Qt4 gui acts as a plugin, but I need to do
the same thing in an "normal" (not a plugin) application using libVLC
(bellow a snippet of my code) . I noticed that var_Set() needs vlc_object_t
* as parameter and I try to get the vlc_object_t * using
libvlc_get_vlc_instance() call, I'm using a stream in my test code that I
know has audio pids 514 and 517 and swapping in each 4 seconds but the test
code doesn't works, it never change the PID.
    I believe the problem is because libvlc_get_vlc_instance() is not
returning the correct vlc_object_t * but I don't know how to get the correct

    There's some way to get the correct object containing the "audio-es"
("video-es" too) variables to use var_Set in a regular application ?
    There's some way to do this in regular libVLC API ?

Thanks for all help

Flavio Alberto Lopes Soares

_vlcinstance=libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]),
_vlcobj = libvlc_get_vlc_instance(_vlcinstance);

void Player::changeaudio()
   /*let's change the audio pid of a stream... */
   /*I know this stream has audio pids 514 (portuguese), 517 (Spanish)*/

    if (val.i_int == 517)
        val.i_int = 514;
      val.i_int = 517;

    var_Set( _vlcobj, "audio-es", val );
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20091126/17532080/attachment.html>

More information about the vlc-devel mailing list