Forum QtFR

La communauté francophone Qt

Vous n'êtes pas identifié(e).

Annonce

Qt 4: 4.8.4 - Qt 5: 5.0.2 - Qt Creator: 2.7.1 - Qt Installer: 1.3.0 - VS Qt 4: 1.1.11 - VS Qt 5: 1.2.1 - Monkey Studio: 1.9.0.4

#1 24-06-2011 13:47:53

dergen
Webmaster Qt
Lieu : Meaux
Inscription : 20-03-2009
Messages : 2 305
Site Web

Intégration de VLC

Introduction

Qt, dans son souci de framework généraliste, n’implémente pas toujours tout ce dont on peut avoir besoin, surtout lorsque cela n’est pas d’usage courant. Les vidéos font partie de ce qui n’est pas couvert par Qt. Cependant, un grand nombre de librairies et autres backends existent. Nous allons voir comment utiliser l’une d’entre elle: VLC.

Pré-requis

Voici ce dont vous aurez besoin :

  • Les librairies VLC >= 0.8.6 (Page de téléchargement)

  • La documentation des fonctions internes de VLC

  • Il semblerait que VLC soit difficilement compilable sous Visual C++. Comme ce tutoriel suppose de pouvoir lier votre application avec les libraires VLC, les personnes désireuses de développer sous Windows devront utiliser Mingw pour générer leur application.

Pour compiler VLC 0.9.0 (la version actuellement en cours de développement, récupérable depuis le SVN), vous aurez besoin de :

Lecteur vidéo

Ce tutoriel détaille la manière d'utiliser l'API VLC au travers d'une application Qt.

L’avantage de cette méthode est que le contrôle de VLC est plus simple et précis et ne nécessite pas d’exécuter/piloter un processus externe (contrairement à l'utilisation de MPlayer).

Nous allons créer un petit exemple simple de lecteur vidéo, ce dernier permettant :

  • d’initialiser VLC,

  • de charger un flux vidéo,

  • de naviguer dans la vidéo (avance/retour),

  • de modifier le volume.

Une image valant mieux qu'un long discours, voici une capture d'écran du résultat final :

.vlc_m.jpg

Le code de ce tutorial (source + .pro)

Compilation

La compilation de l’exemple nécessite bien entendu les includes et les libraires de VLC.
Celles ci doivent êtres dans dans les chemins de recherche

Linux/Unix

Voici le fichier pro typique :

Explications

Si l'on résume les étapes nécessaires à la lecture d'un vidéo dans une application Qt :

  1. initialiser un contexte VLC,

  2. ajouter un flux à la playlist,

  3. rediriger la fenêtre vidéo de sortie vlc sur un widget Qt de l'application,

  4. démarrer la lecture du flux.

Certaines fonctions de l'API de VLC seront détaillées. Toutes ces fonctions et bien plus encore sont disponibles dans la documentation de VLC.

Initialisation d'un contexte VLC

Normalement seule l'inclusion de l'entête vlc/libvlc.h est nécessaire pour utiliser toutes les fonctions VLC.

VLC reporte toutes ses erreurs dans une structure particulière libvlc_exception_t. Avant tout appel à une fonction VLC, il nous faudra donc une telle structure :

Quelques fonctions pratiques à utiliser avec libvlc_exception_t :

Il est maintenant temps de créer un contexte VLC, de type libvlc_instance_t, nécessaire à la plupart des fonctions :

Il n'est possible de lire qu'un seul flux vidéo à la fois par contexte. Pour lire plusieurs flux en parallèle, il faut donc initialiser plusieurs contextes. Lorsqu'un contexte, n'est plus utile, ne pas oublier de le libérer :

Ajout d'un flux

Le chargement d'un flux vidéo se fait dans un contexte initialisé et dans l'élément playlist de VLC (se réfèrer à la doc quant à la gestion des playlist, ce tutoriel n'en faisant pas d'autres mentions).

Note : à ce niveau, le fichier est dans la playlist, il n'est pas en cours de lecture ou n'a pas interrompu la lecture en cours.

Avec URL une chaine de caractère de la forme (principalement) :

Type            Forme 

Fichier local   file://chemin 

Url http        http://ip:port/file 

Fichier ftp     ftp://ip:port/file 

DVD             dvd://[device] 

Flux UDP        udp:[]@[][:]%%   

Redirection du flux sur un widget Qt

La redirection de la sortie vidéo sur un widget de l'application est une des étapes les plus importantes pour l'intégration (ce n'est pas la plus compliquée ;-) ).

A noter que VLC, se chargera d'adapter la taille de la vidéo à la taille du widget tout en conservant l'aspect de la video (VLC se chargera aussi de resizer la video si la taille du widget venait a changer en cours de lecture).

N'importe quel widget peut servir pour afficher une video, mais dans la mesure ou il sera complètement recouvert, un simple QWidget suffit.

Functions vidéos/audios

Certaines fonctions requièrent un pointeur sur libvlc_input_t .Pour obtenir ce pointeur, un flux doit être en cours de lecture/pause :

Contrôle de la vidéo

  • Démarrer la lecture :

  • Stopper la lecture :

  • Mettre en pause la lecture :

  • Connaître l'état :

  • Lire en boucle :

  • Connaître la durée totale du flux (nécessite un pointeur input) :

  • Connaître la position actuelle en ms (nécessite un pointeur input) :

  • Se positionner dans le flux (position en ms - nécessite un pointeur input) :

  • Connaître la position actuelle en pourcentage (nécessite un pointeur input) :

  • Se positionner dans le flux (position en pourcentage du temps total - nécessite un pointeur input) :

Contrôle du volume

  • Obtenir la valeur du volume comprise entre 0 et 100 - 0 étant le minimum :

  • Positionner le volume (valeur en 0 et 100) :


Sans la liberté de blâmer, il n'est point d'éloge flatteur; et qu'il n'y a que les petits hommes qui redoutent les petits écrits !!!

- Beaumarchais -

Hors ligne

#2 25-07-2011 22:34:20

dawiid71
Invité

Re : Intégration de VLC

Bonjour,

Je suis sous windows, j'ai téléchargé le code du tuto ( source + .pro),VLC 0.8.6 dans les archives VLC.
1er problème: dans VLC 0.8.6, je n'ai pas la libvlc.h. je vois libvlc.dll
2ème problème: Comment fait on pour intégrer les includes et les librairies de VLC dans le code du tuto.
Merci

#3 14-05-2012 15:16:03

Bodafotsy
Membre(e) Qt
Inscription : 14-05-2012
Messages : 2

Re : Intégration de VLC

Bonjour, je suis debutant et je galere pour l'integration de vlc dans qt. j'ai rid les sources vlc 0.8.6 et dans tuto_vlc j'ai comme erreur :: 

C:/QtSDK/Desktop/Qt/4.8.1/mingw/include/QtCore/qglobal.h:1492: multiple definition of `Player::Player()'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:42: first defined here
debug/main.o: In function `Player':
C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:42: multiple definition of `Player::Player()'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:42: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:96: multiple definition of `Player::playFile(QString)'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:96: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:149: multiple definition of `Player::changeVolume(int)'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:149: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:159: multiple definition of `Player::changePosition(int)'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:159: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:178: multiple definition of `Player::updateInterface()'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/tuto_vlc.cpp:178: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:49: multiple definition of `Player::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:49: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:77: multiple definition of `Player::metaObject() const'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:77: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:82: multiple definition of `Player::qt_metacast(char const*)'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:82: first defined here
debug/main.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:90: multiple definition of `Player::qt_metacall(QMetaObject::Call, int, void**)'
debug/tuto_vlc.o:C:\Users\Public\DOWNLOAD\qt_vlc\tuto_vlc/debug/tuto_vlc.moc:90: first defined here
debug/main.o:main.cpp:(.data+0x0): multiple definition of `Player::staticMetaObject'
debug/tuto_vlc.o:tuto_vlc.cpp:(.data+0x0): first defined here
debug/main.o:main.cpp:(.rdata+0x1c8): multiple definition of `Player::staticMetaObjectExtraData'
debug/tuto_vlc.o:tuto_vlc.cpp:(.rdata+0x1c8): first defined here
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug\tuto_vlc.exe] Error 1
mingw32-make.exe: *** [debug] Error 2
15:10:55: The process "C:\QtSDK\mingw\bin\mingw32-make.exe" exited with code 2.
Error while building project tuto_vlc (target: Desktop)
When executing build step 'Make

Hors ligne

#4 14-05-2012 15:22:02

Bodafotsy
Membre(e) Qt
Inscription : 14-05-2012
Messages : 2

Re : Intégration de VLC

Pour le project tuto-vlc j'ai juste rajouter main:

Pour instancier le player

Hors ligne

#5 14-05-2012 16:36:22

dergen
Webmaster Qt
Lieu : Meaux
Inscription : 20-03-2009
Messages : 2 305
Site Web

Re : Intégration de VLC

Bonjour Bodafotsy, alors pour commencer, un petit tour ici serait utile : http://www.qtfr.org/viewtopic.php?id=14003 !

Ensuite, nous apprécions que les nouveaux membres utilisés les balises de mise en forme de leurs messages surtout pour les bouts de codes et les messages d'erreur, alors si tu pouvais modifier ton message, cela rendrais ton message p.us lisible par tous !


Sans la liberté de blâmer, il n'est point d'éloge flatteur; et qu'il n'y a que les petits hommes qui redoutent les petits écrits !!!

- Beaumarchais -

Hors ligne

#6 11-01-2013 17:42:07

bird12358
Membre(e) Qt
Inscription : 14-10-2012
Messages : 18

Re : Intégration de VLC

Bonjour,

J'ai vu ce post concernant l'installation de VLC pour Qt. J'ai quelques problèmes lors de la phase d'installation de la lib VLC.
J'ai récupéré la lib VLC par la commande : git://github.com/ntadej/vlc-qt.git

J'ai également installé cmake comme demandé dans le Readme. Le problème c'est que j'ai plusieurs compilateur (visual C++, mingw, ...). J'ai compiler Qt avec mingw donc j'ai fait la commande: cmake .. -DCMAKE_INSTALL_PREFIX=prefix -G "MinGW Makefiles"

Le début de l'installation se passe bien mais j'obtiens ce message suivant :

Quelqu'un saurait-il me dire à quoi est du cette erreur?
Apparemment il ne trouve pas la libVLC, c'est pas sensé être ce que je suis en train d'installer?

Quelqu'un pourrait-il m'éclairer?
D'avance merci.

Hors ligne

#7 Hier 13:52:08

Discaulit
Membre(e) Qt
Inscription : Hier
Messages : 3

Re : Intégration de VLC

Bonjour,

Ne connaissant pas grand chose aux joies des makefile (et encore moins sous Windows), serait-ce possible de détailler d'avantage la partie compilation ?

Je travail donc sous Win XP, avec QT SDK. J'utilise Qt Creator 2.4.1 Basé sur Qt 4.7.4 (32 bit), pour un projet en Qt 4.8

J'ai déjà récupérer toutes les librairies  et téléchargé et installé VLC 2.0.7. J'ai également MinGW d'installé quelque part dans le dossier de QtSDK/Symbian/...

Mais à partir de là je ne sais pas quoi faire de plus. J'aimerai déjà essayer la démo fournie - qui pour le moment ne compile donc pas - afin d'avoir une idée du rendu final.

Une autre question également :

Serait-ce possible ensuite de modifier la vidéo, c'est-à-dire d'y incruster des images par exemple en cliquant avec le curseur ou autre ?

Merci d'avance,

Cordialement,
Discaulit.

Hors ligne

Pied de page des forums


Sitemap QtFR