Cette page fournit un aperçu de l'architecture de VLC. Suivez les liens pour approfondir l'exploration!
Le lecteur multimédia VLC est constitué de :
Vous trouverez plus informations sur le site développeur de VLC.
Plusieurs interfaces utilisateur VLC sont disponibles, implémentées par des modules dédiés.
libVLCcore crée l'interface : voir intf_Create dans interface.c.
set_capability( "interface", 151 ) : Voir qt.cpp. Chaque module appartient à une catégorie (principale et secondaire) : ces catégories sont définies dans vlc_plugin.h : Interface, Audio, Vidéo, Entrée, Sortie, Avancé, Liste de lecture.
Plus important encore, un module expose des capacités (décrites par une chaîne) associées à un score (priorité du module), comme 'interface', 'décodeur', 'sortie audio'. Voir Videolan wiki pour plus de détails.
La séquence suivante est indicative.
main est exécutée. Elle crée une nouvelle instance de libvlc ( libvlc_new, fonction implémentée par libvlc )libvlc_new appelle libvlc_InternalInit, qui initialise VLC. Cela crée une interface utilisateur (libvlc_InternalAddIntf). Cette fonction démarre la liste de lecture avec son thread de contrôle (intf_GetPlaylist) et crée l'interface utilisateur (intf_Create). S'il y a un argument de ligne de commande pour ouvrir un fichier, libvlc_InternalInit insère l'élément dans la liste de lecture (intf_InsertItem).play et enqueue.playlist_AddExt.PlayItem crée un Input et le démarre.input_Start dans src/input/input.cMainLoop s'exécute: elle appelle InputSourceNew, puis InputDemuxNew pour initialiser un module d'accès-demux (2 en 1), sinon un module d'accès et un module de démux sont créés.demux_NewAdvanced obtient un module demux pour séparer les flux (liés aux fichiers conteneurs comme AVI ou MKV) : module_need( p_demux, "access_demux", ... access_New récupère un module access pour lire le flux d'entrée (depuis un fichier, http, ...) : module_need(access, "access", ... static int Open( vlc_object_t * p_this ).decoder_New crée un décodeur et crée un thread associé au décodeur . La fonction LoadDecoder, récupère un module décodeur (audio, vidéo ou spu) : module_need(decoder, caps[decoder->fmt_in.i_cat], ...) /* "décodeur vidéo" ou "décodeur audio" ou "spu" */ input_resource_RequestVout )VoutCreate, crée le Thread Video en sortie, ce qui conduit à la création de la sortie vidéo.vout_display_New, obtient un module "vout display" : module_need(vd, "vout display",...input_resource_GetAout )aout_New, obtient un module "sortie audio" : module_need (aout, "audio output",...)