Vous n'êtes pas identifié(e).
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
Pages : 1
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 :
bibliothèque MAD (MPEG Audio Decoder) : http://www.underbit.com/products/mad/ ou mettre une option lors du configure pour la désactiver,
FFMpeg : http://ffmpeg.mplayerhq.hu/,
liba52 : http://liba52.sf.net,
libmpeg2 : http://libmpeg2.sf.net.
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 :
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 :
initialiser un contexte VLC,
ajouter un flux à la playlist,
rediriger la fenêtre vidéo de sortie vlc sur un widget Qt de l'application,
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
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
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
Pour le project tuto-vlc j'ai juste rajouter main:
Pour instancier le player
Hors ligne
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
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
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
Pages : 1
| Liens interne à QtFR | Les partenaires de QtFR | Liens pour les sites officiels Qt | Liens sur les ressources Qt |
|---|---|---|---|
| Communauté QtFR sur Google+ | Monkey Studio | Télécharger Qt | Notre tutoriel |
| QtFR sur Twitter | ZeGrapher | Site officiel Qt | Documentation Qt |
| IRC box | Qt Blog | Qt Centre | |
| Galeries | Qt Wiki | Qt Apps | |
| Contactez-nous | Qt Quarterly |